From 32c16669c4c2fab6a1a88dc9980cf9b158c4f061 Mon Sep 17 00:00:00 2001
From: Andrey Volk <andywolk@gmail.com>
Date: Thu, 5 Apr 2018 01:56:04 +0300
Subject: [PATCH] FS-11091: [mod_sndfile] Remove libsndfile from the code base,
 use pre-compiled binaries on Windows, update to libsndfile 1.0.28

---
 Freeswitch.2015.sln                           |   14 -
 libs/.gitignore                               |    2 +
 libs/libsndfile/.update                       |    1 -
 libs/libsndfile/AUTHORS                       |   14 -
 libs/libsndfile/COPYING                       |  503 -
 libs/libsndfile/Cfg/.empty                    |    0
 libs/libsndfile/ChangeLog                     | 9764 -----------------
 libs/libsndfile/INSTALL                       |  182 -
 libs/libsndfile/M4/Makefile.am                |    5 -
 libs/libsndfile/M4/add_cflags.m4              |   18 -
 libs/libsndfile/M4/add_cxxflags.m4            |   19 -
 libs/libsndfile/M4/clang.m4                   |   31 -
 libs/libsndfile/M4/clip_mode.m4               |  124 -
 libs/libsndfile/M4/endian.m4                  |  155 -
 libs/libsndfile/M4/extra_largefile.m4         |  114 -
 libs/libsndfile/M4/extra_pkg.m4               |  105 -
 libs/libsndfile/M4/flexible_array.m4          |   32 -
 libs/libsndfile/M4/gcc_version.m4             |   33 -
 libs/libsndfile/M4/llrint.m4                  |   38 -
 libs/libsndfile/M4/lrint.m4                   |   37 -
 libs/libsndfile/M4/lrintf.m4                  |   37 -
 libs/libsndfile/M4/mkoctfile_version.m4       |   38 -
 libs/libsndfile/M4/octave.m4                  |  143 -
 libs/libsndfile/M4/really_gcc.m4              |   33 -
 libs/libsndfile/M4/stack_protect.m4           |   73 -
 libs/libsndfile/Makefile.am                   |   46 -
 libs/libsndfile/Mingw-make-dist.sh            |  116 -
 libs/libsndfile/NEWS                          |  175 -
 libs/libsndfile/Octave/Makefile.am            |   79 -
 libs/libsndfile/Octave/PKG_ADD                |    3 -
 libs/libsndfile/Octave/Readme.txt             |   23 -
 libs/libsndfile/Octave/format.h               |   21 -
 libs/libsndfile/Octave/octave_test.m          |   52 -
 libs/libsndfile/Octave/octave_test.sh         |   81 -
 libs/libsndfile/Octave/sndfile.cc             |  405 -
 libs/libsndfile/Octave/sndfile_load.m         |   52 -
 libs/libsndfile/Octave/sndfile_play.m         |   59 -
 libs/libsndfile/Octave/sndfile_save.m         |   53 -
 libs/libsndfile/README                        |   68 -
 libs/libsndfile/README.md                     |   79 -
 libs/libsndfile/Scripts/android-configure.sh  |   92 -
 .../Scripts/build-test-tarball.mk.in          |   61 -
 libs/libsndfile/Scripts/clang-sanitize.sh     |   13 -
 libs/libsndfile/Scripts/cstyle.py             |  246 -
 libs/libsndfile/Scripts/git-pre-commit-hook   |   79 -
 .../Scripts/linux-to-win-cross-configure.sh   |   22 -
 libs/libsndfile/TODO                          |   42 -
 libs/libsndfile/Win32/Makefile.am             |    4 -
 .../Win32/README-precompiled-dll.txt          |   40 -
 libs/libsndfile/Win32/testprog.c              |   16 -
 libs/libsndfile/acinclude.m4                  |  637 --
 libs/libsndfile/autogen.sh                    |  179 -
 libs/libsndfile/binheader_readf_check.py      |   62 -
 libs/libsndfile/configure.ac                  |  697 --
 libs/libsndfile/configure.gnu                 |    4 -
 libs/libsndfile/doc/FAQ.html                  |  851 --
 libs/libsndfile/doc/Makefile.am               |    9 -
 libs/libsndfile/doc/api.html                  |  781 --
 libs/libsndfile/doc/bugs.html                 |   76 -
 libs/libsndfile/doc/command.html              | 1687 ---
 libs/libsndfile/doc/development.html          |   43 -
 libs/libsndfile/doc/dither.html               | 1017 --
 libs/libsndfile/doc/donate.html               |  112 -
 libs/libsndfile/doc/embedded_files.html       |   47 -
 libs/libsndfile/doc/index.html                |  493 -
 libs/libsndfile/doc/libsndfile.css.in         |   92 -
 .../doc/linux_games_programming.txt           |  434 -
 libs/libsndfile/doc/lists.html                |   52 -
 libs/libsndfile/doc/new_file_type.HOWTO       |  135 -
 libs/libsndfile/doc/octave.html               |  118 -
 libs/libsndfile/doc/pkgconfig.html            |   71 -
 libs/libsndfile/doc/print.css                 |   14 -
 libs/libsndfile/doc/sndfile_info.html         |   53 -
 libs/libsndfile/doc/tutorial.html             |   34 -
 libs/libsndfile/doc/win32.html                |   53 -
 libs/libsndfile/echo-install-dirs.in          |   25 -
 libs/libsndfile/examples/Makefile.am          |   25 -
 libs/libsndfile/examples/cooledit-fixer.c     |  231 -
 libs/libsndfile/examples/generate.c           |  133 -
 libs/libsndfile/examples/generate.cs          |  250 -
 libs/libsndfile/examples/list_formats.c       |   83 -
 libs/libsndfile/examples/make_sine.c          |   96 -
 libs/libsndfile/examples/sfprocess.c          |  142 -
 libs/libsndfile/examples/sndfile-convert.c    |  376 -
 libs/libsndfile/examples/sndfile-info.c       |  354 -
 .../libsndfile/examples/sndfile-play-beos.cpp |  153 -
 libs/libsndfile/examples/sndfile-play.c       |  960 --
 libs/libsndfile/examples/sndfile-to-text.c    |  128 -
 libs/libsndfile/examples/sndfilehandle.cc     |   84 -
 libs/libsndfile/libsndfile.spec.in            |   69 -
 libs/libsndfile/make_lite.py                  |  491 -
 libs/libsndfile/man/Makefile.am               |   15 -
 libs/libsndfile/man/sndfile-cmp.1             |   16 -
 libs/libsndfile/man/sndfile-concat.1          |   16 -
 libs/libsndfile/man/sndfile-convert.1         |   22 -
 libs/libsndfile/man/sndfile-info.1            |   16 -
 libs/libsndfile/man/sndfile-interleave.1      |   23 -
 libs/libsndfile/man/sndfile-metadata-get.1    |   26 -
 libs/libsndfile/man/sndfile-play.1            |   36 -
 libs/libsndfile/programs/Makefile.am          |   47 -
 libs/libsndfile/programs/common.c             |  466 -
 libs/libsndfile/programs/common.h             |   78 -
 libs/libsndfile/programs/sndfile-cmp.c        |  165 -
 libs/libsndfile/programs/sndfile-concat.c     |  169 -
 libs/libsndfile/programs/sndfile-convert.c    |  377 -
 .../programs/sndfile-deinterleave.c           |  194 -
 libs/libsndfile/programs/sndfile-info.c       |  529 -
 libs/libsndfile/programs/sndfile-interleave.c |  202 -
 libs/libsndfile/programs/sndfile-jackplay.c   |  277 -
 .../programs/sndfile-metadata-get.c           |  176 -
 .../programs/sndfile-metadata-set.c           |  284 -
 .../libsndfile/programs/sndfile-play-beos.cpp |  144 -
 libs/libsndfile/programs/sndfile-play.c       | 1211 --
 libs/libsndfile/programs/sndfile-salvage.c    |  277 -
 .../programs/test-sndfile-metadata-set.py     |  188 -
 libs/libsndfile/reconfigure.mk                |   63 -
 libs/libsndfile/regtest/Makefile.am           |   12 -
 libs/libsndfile/regtest/Readme.txt            |  108 -
 libs/libsndfile/regtest/checksum.c            |  117 -
 libs/libsndfile/regtest/database.c            |  495 -
 libs/libsndfile/regtest/regtest.h             |   38 -
 libs/libsndfile/regtest/sndfile-regtest.c     |  121 -
 libs/libsndfile/sndfile.pc.in                 |   12 -
 libs/libsndfile/src/ALAC/ALACAudioTypes.h     |  200 -
 libs/libsndfile/src/ALAC/ALACBitUtilities.c   |  262 -
 libs/libsndfile/src/ALAC/ALACBitUtilities.h   |   91 -
 libs/libsndfile/src/ALAC/ALACDecoder.h        |   61 -
 libs/libsndfile/src/ALAC/ALACEncoder.h        |   92 -
 libs/libsndfile/src/ALAC/EndianPortable.h     |   39 -
 libs/libsndfile/src/ALAC/LICENSE              |  170 -
 libs/libsndfile/src/ALAC/ag_dec.c             |  355 -
 libs/libsndfile/src/ALAC/ag_enc.c             |  360 -
 libs/libsndfile/src/ALAC/aglib.h              |   81 -
 libs/libsndfile/src/ALAC/alac_codec.h         |  103 -
 libs/libsndfile/src/ALAC/alac_decoder.c       |  646 --
 libs/libsndfile/src/ALAC/alac_decoder.h       |   61 -
 libs/libsndfile/src/ALAC/alac_encoder.c       | 1342 ---
 libs/libsndfile/src/ALAC/dp_dec.c             |  375 -
 libs/libsndfile/src/ALAC/dp_enc.c             |  380 -
 libs/libsndfile/src/ALAC/dplib.h              |   61 -
 libs/libsndfile/src/ALAC/matrix_dec.c         |  320 -
 libs/libsndfile/src/ALAC/matrix_enc.c         |  272 -
 libs/libsndfile/src/ALAC/matrixlib.h          |   81 -
 libs/libsndfile/src/G72x/ChangeLog            |   50 -
 libs/libsndfile/src/G72x/Makefile.am          |   22 -
 libs/libsndfile/src/G72x/README               |    0
 libs/libsndfile/src/G72x/README.original      |   94 -
 libs/libsndfile/src/G72x/g721.c               |  155 -
 libs/libsndfile/src/G72x/g723_16.c            |  162 -
 libs/libsndfile/src/G72x/g723_24.c            |  139 -
 libs/libsndfile/src/G72x/g723_40.c            |  153 -
 libs/libsndfile/src/G72x/g72x.c               |  644 --
 libs/libsndfile/src/G72x/g72x.h               |   91 -
 libs/libsndfile/src/G72x/g72x_priv.h          |  109 -
 libs/libsndfile/src/G72x/g72x_test.c          |  214 -
 libs/libsndfile/src/GSM610/COPYRIGHT          |   16 -
 libs/libsndfile/src/GSM610/ChangeLog          |   56 -
 libs/libsndfile/src/GSM610/Makefile.am        |   16 -
 libs/libsndfile/src/GSM610/README             |   36 -
 libs/libsndfile/src/GSM610/add.c              |  240 -
 libs/libsndfile/src/GSM610/code.c             |   87 -
 libs/libsndfile/src/GSM610/config.h           |   26 -
 libs/libsndfile/src/GSM610/decode.c           |   59 -
 libs/libsndfile/src/GSM610/gsm.h              |   52 -
 libs/libsndfile/src/GSM610/gsm610_priv.h      |  301 -
 libs/libsndfile/src/GSM610/gsm_create.c       |   37 -
 libs/libsndfile/src/GSM610/gsm_decode.c       |  359 -
 libs/libsndfile/src/GSM610/gsm_destroy.c      |   24 -
 libs/libsndfile/src/GSM610/gsm_encode.c       |  449 -
 libs/libsndfile/src/GSM610/gsm_option.c       |   66 -
 libs/libsndfile/src/GSM610/long_term.c        |  959 --
 libs/libsndfile/src/GSM610/lpc.c              |  331 -
 libs/libsndfile/src/GSM610/preprocess.c       |  105 -
 libs/libsndfile/src/GSM610/rpe.c              |  480 -
 libs/libsndfile/src/GSM610/short_term.c       |  417 -
 libs/libsndfile/src/GSM610/table.c            |   60 -
 libs/libsndfile/src/Makefile.am               |  134 -
 libs/libsndfile/src/Symbols.darwin            |   37 -
 libs/libsndfile/src/Symbols.linux             |   42 -
 libs/libsndfile/src/Symbols.os2               |   43 -
 libs/libsndfile/src/aiff.c                    | 1778 ---
 libs/libsndfile/src/alac.c                    |  964 --
 libs/libsndfile/src/alaw.c                    |  548 -
 libs/libsndfile/src/au.c                      |  450 -
 libs/libsndfile/src/audio_detect.c            |  105 -
 libs/libsndfile/src/avr.c                     |  246 -
 libs/libsndfile/src/binheader_writef_check.py |  117 -
 libs/libsndfile/src/broadcast.c               |  191 -
 libs/libsndfile/src/caf.c                     |  804 --
 libs/libsndfile/src/cart.c                    |  101 -
 libs/libsndfile/src/chanmap.c                 |  262 -
 libs/libsndfile/src/chanmap.h                 |   32 -
 libs/libsndfile/src/chunk.c                   |  255 -
 libs/libsndfile/src/command.c                 |  390 -
 libs/libsndfile/src/common.c                  | 1662 ---
 libs/libsndfile/src/common.h                  | 1044 --
 libs/libsndfile/src/create_symbols_file.py    |  182 -
 libs/libsndfile/src/cygsndfile.def            |   39 -
 libs/libsndfile/src/dither.c                  |  534 -
 libs/libsndfile/src/double64.c                | 1058 --
 libs/libsndfile/src/dwd.c                     |  201 -
 libs/libsndfile/src/dwvw.c                    |  674 --
 libs/libsndfile/src/file_io.c                 | 1550 ---
 libs/libsndfile/src/flac.c                    | 1385 ---
 libs/libsndfile/src/float32.c                 | 1012 --
 libs/libsndfile/src/float_cast.h              |  273 -
 libs/libsndfile/src/g72x.c                    |  608 -
 libs/libsndfile/src/gsm610.c                  |  627 --
 libs/libsndfile/src/htk.c                     |  226 -
 libs/libsndfile/src/id3.c                     |   57 -
 libs/libsndfile/src/ima_adpcm.c               |  948 --
 libs/libsndfile/src/ima_oki_adpcm.c           |  297 -
 libs/libsndfile/src/ima_oki_adpcm.h           |   54 -
 libs/libsndfile/src/interleave.c              |  299 -
 libs/libsndfile/src/ircam.c                   |  323 -
 libs/libsndfile/src/libsndfile-1.def          |   41 -
 libs/libsndfile/src/libsndfile.def            |   39 -
 libs/libsndfile/src/macbinary3.c              |   45 -
 libs/libsndfile/src/macos.c                   |   51 -
 .../src/make-static-lib-hidden-privates.sh    |   14 -
 libs/libsndfile/src/mat4.c                    |  390 -
 libs/libsndfile/src/mat5.c                    |  509 -
 libs/libsndfile/src/mpc2k.c                   |  204 -
 libs/libsndfile/src/ms_adpcm.c                |  836 --
 libs/libsndfile/src/new.c                     |  116 -
 libs/libsndfile/src/nist.c                    |  375 -
 libs/libsndfile/src/ogg.c                     |  253 -
 libs/libsndfile/src/ogg.h                     |   52 -
 libs/libsndfile/src/ogg_opus.c                |  149 -
 libs/libsndfile/src/ogg_pcm.c                 |  164 -
 libs/libsndfile/src/ogg_speex.c               |  425 -
 libs/libsndfile/src/ogg_vorbis.c              | 1172 --
 libs/libsndfile/src/paf.c                     |  819 --
 libs/libsndfile/src/pcm.c                     | 2961 -----
 libs/libsndfile/src/pvf.c                     |  188 -
 libs/libsndfile/src/raw.c                     |  104 -
 libs/libsndfile/src/rf64.c                    |  726 --
 libs/libsndfile/src/rx2.c                     |  318 -
 libs/libsndfile/src/sd2.c                     |  654 --
 libs/libsndfile/src/sds.c                     | 1022 --
 libs/libsndfile/src/sf_unistd.h               |   63 -
 libs/libsndfile/src/sfconfig.h                |  115 -
 libs/libsndfile/src/sfendian.h                |  296 -
 libs/libsndfile/src/sndfile.c                 | 3093 ------
 libs/libsndfile/src/sndfile.h.in              |  824 --
 libs/libsndfile/src/sndfile.hh                |  446 -
 libs/libsndfile/src/strings.c                 |  222 -
 libs/libsndfile/src/svx.c                     |  416 -
 libs/libsndfile/src/test_audio_detect.c       |  111 -
 libs/libsndfile/src/test_broadcast_var.c      |  119 -
 libs/libsndfile/src/test_cart_var.c           |   91 -
 libs/libsndfile/src/test_conversions.c        |  110 -
 libs/libsndfile/src/test_endswap.c            |  235 -
 libs/libsndfile/src/test_endswap.def          |   40 -
 libs/libsndfile/src/test_endswap.tpl          |  151 -
 libs/libsndfile/src/test_file_io.c            |  438 -
 libs/libsndfile/src/test_float.c              |  104 -
 libs/libsndfile/src/test_ima_oki_adpcm.c      |  157 -
 libs/libsndfile/src/test_log_printf.c         |  123 -
 libs/libsndfile/src/test_main.c               |   49 -
 libs/libsndfile/src/test_main.h               |   41 -
 libs/libsndfile/src/test_strncpy_crlf.c       |   56 -
 libs/libsndfile/src/txw.c                     |  377 -
 libs/libsndfile/src/ulaw.c                    | 1051 --
 libs/libsndfile/src/version-metadata.rc.in    |   32 -
 libs/libsndfile/src/voc.c                     |  882 --
 libs/libsndfile/src/vox_adpcm.c               |  400 -
 libs/libsndfile/src/w64.c                     |  639 --
 libs/libsndfile/src/wav.c                     | 2048 ----
 libs/libsndfile/src/wav_w64.c                 |  678 --
 libs/libsndfile/src/wav_w64.h                 |  298 -
 libs/libsndfile/src/windows.c                 |   93 -
 libs/libsndfile/src/wve.c                     |  209 -
 libs/libsndfile/src/xi.c                      | 1230 ---
 libs/libsndfile/tests/Makefile.am             |  218 -
 libs/libsndfile/tests/aiff_rw_test.c          |  164 -
 libs/libsndfile/tests/alaw_test.c             |  236 -
 libs/libsndfile/tests/benchmark-0.0.28        |   40 -
 libs/libsndfile/tests/benchmark-1.0.0         |   35 -
 libs/libsndfile/tests/benchmark-1.0.0rc2      |   31 -
 .../tests/benchmark-1.0.18pre16-hendrix       |   38 -
 .../tests/benchmark-1.0.18pre16-mingus        |   38 -
 .../tests/benchmark-1.0.6pre10-coltrane       |   39 -
 .../tests/benchmark-1.0.6pre10-miles          |   39 -
 .../tests/benchmark-latest-coltrane           |   75 -
 libs/libsndfile/tests/benchmark.c             |  545 -
 libs/libsndfile/tests/benchmark.def           |   17 -
 libs/libsndfile/tests/benchmark.tpl           |  360 -
 libs/libsndfile/tests/channel_test.c          |  134 -
 libs/libsndfile/tests/checksum_test.c         |  128 -
 libs/libsndfile/tests/chunk_test.c            |  293 -
 libs/libsndfile/tests/command_test.c          | 1570 ---
 libs/libsndfile/tests/compression_size_test.c |  205 -
 libs/libsndfile/tests/cpp_test.cc             |  313 -
 libs/libsndfile/tests/dft_cmp.c               |  149 -
 libs/libsndfile/tests/dft_cmp.h               |   25 -
 libs/libsndfile/tests/dither_test.c           |  180 -
 libs/libsndfile/tests/dwvw_test.c             |  109 -
 libs/libsndfile/tests/error_test.c            |  246 -
 libs/libsndfile/tests/external_libs_test.c    |  149 -
 libs/libsndfile/tests/fix_this.c              |  328 -
 libs/libsndfile/tests/floating_point_test.c   |  694 --
 libs/libsndfile/tests/floating_point_test.def |   32 -
 libs/libsndfile/tests/floating_point_test.tpl |  355 -
 libs/libsndfile/tests/format_check_test.c     |  149 -
 libs/libsndfile/tests/generate.c              |   73 -
 libs/libsndfile/tests/generate.h              |   19 -
 libs/libsndfile/tests/header_test.c           |  741 --
 libs/libsndfile/tests/header_test.def         |   22 -
 libs/libsndfile/tests/header_test.tpl         |  543 -
 libs/libsndfile/tests/headerless_test.c       |  185 -
 libs/libsndfile/tests/largefile_test.c        |   83 -
 libs/libsndfile/tests/locale_test.c           |  167 -
 libs/libsndfile/tests/lossy_comp_test.c       | 2372 ----
 libs/libsndfile/tests/misc_test.c             |  415 -
 libs/libsndfile/tests/multi_file_test.c       |  238 -
 libs/libsndfile/tests/ogg_test.c              |  344 -
 libs/libsndfile/tests/open_fail_test.c        |   81 -
 libs/libsndfile/tests/pcm_test.c              | 1723 ---
 libs/libsndfile/tests/pcm_test.def            |   34 -
 libs/libsndfile/tests/pcm_test.tpl            |  931 --
 libs/libsndfile/tests/peak_chunk_test.c       |  362 -
 .../tests/pedantic-header-test.sh.in          |   58 -
 libs/libsndfile/tests/pipe_test.c             |  525 -
 libs/libsndfile/tests/pipe_test.def           |   14 -
 libs/libsndfile/tests/pipe_test.tpl           |  374 -
 libs/libsndfile/tests/raw_test.c              |  187 -
 libs/libsndfile/tests/rdwr_test.def           |   32 -
 libs/libsndfile/tests/rdwr_test.tpl           |  105 -
 libs/libsndfile/tests/scale_clip_test.c       | 1853 ----
 libs/libsndfile/tests/scale_clip_test.def     |   56 -
 libs/libsndfile/tests/scale_clip_test.tpl     |  438 -
 libs/libsndfile/tests/sftest.c                |   65 -
 libs/libsndfile/tests/sfversion.c             |   45 -
 libs/libsndfile/tests/stdin_test.c            |  204 -
 libs/libsndfile/tests/stdio_test.c            |  153 -
 libs/libsndfile/tests/stdout_test.c           |  161 -
 libs/libsndfile/tests/string_test.c           |  795 --
 libs/libsndfile/tests/test_wrapper.sh.in      |  365 -
 libs/libsndfile/tests/ulaw_test.c             |  257 -
 libs/libsndfile/tests/utils.c                 | 1162 --
 libs/libsndfile/tests/utils.def               |   52 -
 libs/libsndfile/tests/utils.h                 |  183 -
 libs/libsndfile/tests/utils.tpl               |  897 --
 libs/libsndfile/tests/virtual_io_test.c       |  237 -
 libs/libsndfile/tests/vorbis_test.c           |  176 -
 libs/libsndfile/tests/win32_ordinal_test.c    |  145 -
 libs/libsndfile/tests/win32_test.c            |  318 -
 libs/libsndfile/tests/write_read_test.c       | 3731 -------
 libs/libsndfile/tests/write_read_test.def     |   75 -
 libs/libsndfile/tests/write_read_test.tpl     | 1184 --
 libs/win32/libsndfile/cleancount              |    1 -
 libs/win32/libsndfile/config.h                |  294 -
 .../libsndfile.2010.vcxproj.filters           |  285 -
 libs/win32/libsndfile/libsndfile.2015.vcxproj |  222 -
 libs/win32/libsndfile/sndfile.h               |  817 --
 .../mod_sndfile/mod_sndfile.2015.vcxproj      |   13 +-
 w32/libsndfile-version.props                  |   19 +
 w32/libsndfile.props                          |   78 +
 359 files changed, 100 insertions(+), 119233 deletions(-)
 delete mode 100644 libs/libsndfile/.update
 delete mode 100644 libs/libsndfile/AUTHORS
 delete mode 100644 libs/libsndfile/COPYING
 delete mode 100644 libs/libsndfile/Cfg/.empty
 delete mode 100644 libs/libsndfile/ChangeLog
 delete mode 100644 libs/libsndfile/INSTALL
 delete mode 100644 libs/libsndfile/M4/Makefile.am
 delete mode 100644 libs/libsndfile/M4/add_cflags.m4
 delete mode 100644 libs/libsndfile/M4/add_cxxflags.m4
 delete mode 100644 libs/libsndfile/M4/clang.m4
 delete mode 100644 libs/libsndfile/M4/clip_mode.m4
 delete mode 100644 libs/libsndfile/M4/endian.m4
 delete mode 100644 libs/libsndfile/M4/extra_largefile.m4
 delete mode 100644 libs/libsndfile/M4/extra_pkg.m4
 delete mode 100644 libs/libsndfile/M4/flexible_array.m4
 delete mode 100644 libs/libsndfile/M4/gcc_version.m4
 delete mode 100644 libs/libsndfile/M4/llrint.m4
 delete mode 100644 libs/libsndfile/M4/lrint.m4
 delete mode 100644 libs/libsndfile/M4/lrintf.m4
 delete mode 100644 libs/libsndfile/M4/mkoctfile_version.m4
 delete mode 100644 libs/libsndfile/M4/octave.m4
 delete mode 100644 libs/libsndfile/M4/really_gcc.m4
 delete mode 100644 libs/libsndfile/M4/stack_protect.m4
 delete mode 100644 libs/libsndfile/Makefile.am
 delete mode 100755 libs/libsndfile/Mingw-make-dist.sh
 delete mode 100644 libs/libsndfile/NEWS
 delete mode 100644 libs/libsndfile/Octave/Makefile.am
 delete mode 100644 libs/libsndfile/Octave/PKG_ADD
 delete mode 100644 libs/libsndfile/Octave/Readme.txt
 delete mode 100644 libs/libsndfile/Octave/format.h
 delete mode 100644 libs/libsndfile/Octave/octave_test.m
 delete mode 100755 libs/libsndfile/Octave/octave_test.sh
 delete mode 100644 libs/libsndfile/Octave/sndfile.cc
 delete mode 100644 libs/libsndfile/Octave/sndfile_load.m
 delete mode 100644 libs/libsndfile/Octave/sndfile_play.m
 delete mode 100644 libs/libsndfile/Octave/sndfile_save.m
 delete mode 100644 libs/libsndfile/README
 delete mode 100644 libs/libsndfile/README.md
 delete mode 100644 libs/libsndfile/Scripts/android-configure.sh
 delete mode 100644 libs/libsndfile/Scripts/build-test-tarball.mk.in
 delete mode 100644 libs/libsndfile/Scripts/clang-sanitize.sh
 delete mode 100644 libs/libsndfile/Scripts/cstyle.py
 delete mode 100644 libs/libsndfile/Scripts/git-pre-commit-hook
 delete mode 100644 libs/libsndfile/Scripts/linux-to-win-cross-configure.sh
 delete mode 100644 libs/libsndfile/TODO
 delete mode 100644 libs/libsndfile/Win32/Makefile.am
 delete mode 100644 libs/libsndfile/Win32/README-precompiled-dll.txt
 delete mode 100644 libs/libsndfile/Win32/testprog.c
 delete mode 100644 libs/libsndfile/acinclude.m4
 delete mode 100644 libs/libsndfile/autogen.sh
 delete mode 100644 libs/libsndfile/binheader_readf_check.py
 delete mode 100644 libs/libsndfile/configure.ac
 delete mode 100644 libs/libsndfile/configure.gnu
 delete mode 100644 libs/libsndfile/doc/FAQ.html
 delete mode 100644 libs/libsndfile/doc/Makefile.am
 delete mode 100644 libs/libsndfile/doc/api.html
 delete mode 100644 libs/libsndfile/doc/bugs.html
 delete mode 100644 libs/libsndfile/doc/command.html
 delete mode 100644 libs/libsndfile/doc/development.html
 delete mode 100644 libs/libsndfile/doc/dither.html
 delete mode 100644 libs/libsndfile/doc/donate.html
 delete mode 100644 libs/libsndfile/doc/embedded_files.html
 delete mode 100644 libs/libsndfile/doc/index.html
 delete mode 100644 libs/libsndfile/doc/libsndfile.css.in
 delete mode 100644 libs/libsndfile/doc/linux_games_programming.txt
 delete mode 100644 libs/libsndfile/doc/lists.html
 delete mode 100644 libs/libsndfile/doc/new_file_type.HOWTO
 delete mode 100644 libs/libsndfile/doc/octave.html
 delete mode 100644 libs/libsndfile/doc/pkgconfig.html
 delete mode 100644 libs/libsndfile/doc/print.css
 delete mode 100644 libs/libsndfile/doc/sndfile_info.html
 delete mode 100644 libs/libsndfile/doc/tutorial.html
 delete mode 100644 libs/libsndfile/doc/win32.html
 delete mode 100644 libs/libsndfile/echo-install-dirs.in
 delete mode 100644 libs/libsndfile/examples/Makefile.am
 delete mode 100644 libs/libsndfile/examples/cooledit-fixer.c
 delete mode 100644 libs/libsndfile/examples/generate.c
 delete mode 100644 libs/libsndfile/examples/generate.cs
 delete mode 100644 libs/libsndfile/examples/list_formats.c
 delete mode 100644 libs/libsndfile/examples/make_sine.c
 delete mode 100644 libs/libsndfile/examples/sfprocess.c
 delete mode 100644 libs/libsndfile/examples/sndfile-convert.c
 delete mode 100644 libs/libsndfile/examples/sndfile-info.c
 delete mode 100644 libs/libsndfile/examples/sndfile-play-beos.cpp
 delete mode 100644 libs/libsndfile/examples/sndfile-play.c
 delete mode 100644 libs/libsndfile/examples/sndfile-to-text.c
 delete mode 100644 libs/libsndfile/examples/sndfilehandle.cc
 delete mode 100644 libs/libsndfile/libsndfile.spec.in
 delete mode 100644 libs/libsndfile/make_lite.py
 delete mode 100644 libs/libsndfile/man/Makefile.am
 delete mode 100644 libs/libsndfile/man/sndfile-cmp.1
 delete mode 100644 libs/libsndfile/man/sndfile-concat.1
 delete mode 100644 libs/libsndfile/man/sndfile-convert.1
 delete mode 100644 libs/libsndfile/man/sndfile-info.1
 delete mode 100644 libs/libsndfile/man/sndfile-interleave.1
 delete mode 100644 libs/libsndfile/man/sndfile-metadata-get.1
 delete mode 100644 libs/libsndfile/man/sndfile-play.1
 delete mode 100644 libs/libsndfile/programs/Makefile.am
 delete mode 100644 libs/libsndfile/programs/common.c
 delete mode 100644 libs/libsndfile/programs/common.h
 delete mode 100644 libs/libsndfile/programs/sndfile-cmp.c
 delete mode 100644 libs/libsndfile/programs/sndfile-concat.c
 delete mode 100644 libs/libsndfile/programs/sndfile-convert.c
 delete mode 100644 libs/libsndfile/programs/sndfile-deinterleave.c
 delete mode 100644 libs/libsndfile/programs/sndfile-info.c
 delete mode 100644 libs/libsndfile/programs/sndfile-interleave.c
 delete mode 100644 libs/libsndfile/programs/sndfile-jackplay.c
 delete mode 100644 libs/libsndfile/programs/sndfile-metadata-get.c
 delete mode 100644 libs/libsndfile/programs/sndfile-metadata-set.c
 delete mode 100644 libs/libsndfile/programs/sndfile-play-beos.cpp
 delete mode 100644 libs/libsndfile/programs/sndfile-play.c
 delete mode 100644 libs/libsndfile/programs/sndfile-salvage.c
 delete mode 100644 libs/libsndfile/programs/test-sndfile-metadata-set.py
 delete mode 100644 libs/libsndfile/reconfigure.mk
 delete mode 100644 libs/libsndfile/regtest/Makefile.am
 delete mode 100644 libs/libsndfile/regtest/Readme.txt
 delete mode 100644 libs/libsndfile/regtest/checksum.c
 delete mode 100644 libs/libsndfile/regtest/database.c
 delete mode 100644 libs/libsndfile/regtest/regtest.h
 delete mode 100644 libs/libsndfile/regtest/sndfile-regtest.c
 delete mode 100644 libs/libsndfile/sndfile.pc.in
 delete mode 100644 libs/libsndfile/src/ALAC/ALACAudioTypes.h
 delete mode 100644 libs/libsndfile/src/ALAC/ALACBitUtilities.c
 delete mode 100644 libs/libsndfile/src/ALAC/ALACBitUtilities.h
 delete mode 100644 libs/libsndfile/src/ALAC/ALACDecoder.h
 delete mode 100644 libs/libsndfile/src/ALAC/ALACEncoder.h
 delete mode 100644 libs/libsndfile/src/ALAC/EndianPortable.h
 delete mode 100644 libs/libsndfile/src/ALAC/LICENSE
 delete mode 100644 libs/libsndfile/src/ALAC/ag_dec.c
 delete mode 100644 libs/libsndfile/src/ALAC/ag_enc.c
 delete mode 100644 libs/libsndfile/src/ALAC/aglib.h
 delete mode 100644 libs/libsndfile/src/ALAC/alac_codec.h
 delete mode 100644 libs/libsndfile/src/ALAC/alac_decoder.c
 delete mode 100644 libs/libsndfile/src/ALAC/alac_decoder.h
 delete mode 100644 libs/libsndfile/src/ALAC/alac_encoder.c
 delete mode 100644 libs/libsndfile/src/ALAC/dp_dec.c
 delete mode 100644 libs/libsndfile/src/ALAC/dp_enc.c
 delete mode 100644 libs/libsndfile/src/ALAC/dplib.h
 delete mode 100644 libs/libsndfile/src/ALAC/matrix_dec.c
 delete mode 100644 libs/libsndfile/src/ALAC/matrix_enc.c
 delete mode 100644 libs/libsndfile/src/ALAC/matrixlib.h
 delete mode 100644 libs/libsndfile/src/G72x/ChangeLog
 delete mode 100644 libs/libsndfile/src/G72x/Makefile.am
 delete mode 100644 libs/libsndfile/src/G72x/README
 delete mode 100644 libs/libsndfile/src/G72x/README.original
 delete mode 100644 libs/libsndfile/src/G72x/g721.c
 delete mode 100644 libs/libsndfile/src/G72x/g723_16.c
 delete mode 100644 libs/libsndfile/src/G72x/g723_24.c
 delete mode 100644 libs/libsndfile/src/G72x/g723_40.c
 delete mode 100644 libs/libsndfile/src/G72x/g72x.c
 delete mode 100644 libs/libsndfile/src/G72x/g72x.h
 delete mode 100644 libs/libsndfile/src/G72x/g72x_priv.h
 delete mode 100644 libs/libsndfile/src/G72x/g72x_test.c
 delete mode 100644 libs/libsndfile/src/GSM610/COPYRIGHT
 delete mode 100644 libs/libsndfile/src/GSM610/ChangeLog
 delete mode 100644 libs/libsndfile/src/GSM610/Makefile.am
 delete mode 100644 libs/libsndfile/src/GSM610/README
 delete mode 100644 libs/libsndfile/src/GSM610/add.c
 delete mode 100644 libs/libsndfile/src/GSM610/code.c
 delete mode 100644 libs/libsndfile/src/GSM610/config.h
 delete mode 100644 libs/libsndfile/src/GSM610/decode.c
 delete mode 100644 libs/libsndfile/src/GSM610/gsm.h
 delete mode 100644 libs/libsndfile/src/GSM610/gsm610_priv.h
 delete mode 100644 libs/libsndfile/src/GSM610/gsm_create.c
 delete mode 100644 libs/libsndfile/src/GSM610/gsm_decode.c
 delete mode 100644 libs/libsndfile/src/GSM610/gsm_destroy.c
 delete mode 100644 libs/libsndfile/src/GSM610/gsm_encode.c
 delete mode 100644 libs/libsndfile/src/GSM610/gsm_option.c
 delete mode 100644 libs/libsndfile/src/GSM610/long_term.c
 delete mode 100644 libs/libsndfile/src/GSM610/lpc.c
 delete mode 100644 libs/libsndfile/src/GSM610/preprocess.c
 delete mode 100644 libs/libsndfile/src/GSM610/rpe.c
 delete mode 100644 libs/libsndfile/src/GSM610/short_term.c
 delete mode 100644 libs/libsndfile/src/GSM610/table.c
 delete mode 100644 libs/libsndfile/src/Makefile.am
 delete mode 100644 libs/libsndfile/src/Symbols.darwin
 delete mode 100644 libs/libsndfile/src/Symbols.linux
 delete mode 100644 libs/libsndfile/src/Symbols.os2
 delete mode 100644 libs/libsndfile/src/aiff.c
 delete mode 100644 libs/libsndfile/src/alac.c
 delete mode 100644 libs/libsndfile/src/alaw.c
 delete mode 100644 libs/libsndfile/src/au.c
 delete mode 100644 libs/libsndfile/src/audio_detect.c
 delete mode 100644 libs/libsndfile/src/avr.c
 delete mode 100644 libs/libsndfile/src/binheader_writef_check.py
 delete mode 100644 libs/libsndfile/src/broadcast.c
 delete mode 100644 libs/libsndfile/src/caf.c
 delete mode 100644 libs/libsndfile/src/cart.c
 delete mode 100644 libs/libsndfile/src/chanmap.c
 delete mode 100644 libs/libsndfile/src/chanmap.h
 delete mode 100644 libs/libsndfile/src/chunk.c
 delete mode 100644 libs/libsndfile/src/command.c
 delete mode 100644 libs/libsndfile/src/common.c
 delete mode 100644 libs/libsndfile/src/common.h
 delete mode 100755 libs/libsndfile/src/create_symbols_file.py
 delete mode 100644 libs/libsndfile/src/cygsndfile.def
 delete mode 100644 libs/libsndfile/src/dither.c
 delete mode 100644 libs/libsndfile/src/double64.c
 delete mode 100644 libs/libsndfile/src/dwd.c
 delete mode 100644 libs/libsndfile/src/dwvw.c
 delete mode 100644 libs/libsndfile/src/file_io.c
 delete mode 100644 libs/libsndfile/src/flac.c
 delete mode 100644 libs/libsndfile/src/float32.c
 delete mode 100644 libs/libsndfile/src/float_cast.h
 delete mode 100644 libs/libsndfile/src/g72x.c
 delete mode 100644 libs/libsndfile/src/gsm610.c
 delete mode 100644 libs/libsndfile/src/htk.c
 delete mode 100644 libs/libsndfile/src/id3.c
 delete mode 100644 libs/libsndfile/src/ima_adpcm.c
 delete mode 100644 libs/libsndfile/src/ima_oki_adpcm.c
 delete mode 100644 libs/libsndfile/src/ima_oki_adpcm.h
 delete mode 100644 libs/libsndfile/src/interleave.c
 delete mode 100644 libs/libsndfile/src/ircam.c
 delete mode 100644 libs/libsndfile/src/libsndfile-1.def
 delete mode 100644 libs/libsndfile/src/libsndfile.def
 delete mode 100644 libs/libsndfile/src/macbinary3.c
 delete mode 100644 libs/libsndfile/src/macos.c
 delete mode 100644 libs/libsndfile/src/make-static-lib-hidden-privates.sh
 delete mode 100644 libs/libsndfile/src/mat4.c
 delete mode 100644 libs/libsndfile/src/mat5.c
 delete mode 100644 libs/libsndfile/src/mpc2k.c
 delete mode 100644 libs/libsndfile/src/ms_adpcm.c
 delete mode 100644 libs/libsndfile/src/new.c
 delete mode 100644 libs/libsndfile/src/nist.c
 delete mode 100644 libs/libsndfile/src/ogg.c
 delete mode 100644 libs/libsndfile/src/ogg.h
 delete mode 100644 libs/libsndfile/src/ogg_opus.c
 delete mode 100644 libs/libsndfile/src/ogg_pcm.c
 delete mode 100644 libs/libsndfile/src/ogg_speex.c
 delete mode 100644 libs/libsndfile/src/ogg_vorbis.c
 delete mode 100644 libs/libsndfile/src/paf.c
 delete mode 100644 libs/libsndfile/src/pcm.c
 delete mode 100644 libs/libsndfile/src/pvf.c
 delete mode 100644 libs/libsndfile/src/raw.c
 delete mode 100644 libs/libsndfile/src/rf64.c
 delete mode 100644 libs/libsndfile/src/rx2.c
 delete mode 100644 libs/libsndfile/src/sd2.c
 delete mode 100644 libs/libsndfile/src/sds.c
 delete mode 100644 libs/libsndfile/src/sf_unistd.h
 delete mode 100644 libs/libsndfile/src/sfconfig.h
 delete mode 100644 libs/libsndfile/src/sfendian.h
 delete mode 100644 libs/libsndfile/src/sndfile.c
 delete mode 100644 libs/libsndfile/src/sndfile.h.in
 delete mode 100644 libs/libsndfile/src/sndfile.hh
 delete mode 100644 libs/libsndfile/src/strings.c
 delete mode 100644 libs/libsndfile/src/svx.c
 delete mode 100644 libs/libsndfile/src/test_audio_detect.c
 delete mode 100644 libs/libsndfile/src/test_broadcast_var.c
 delete mode 100644 libs/libsndfile/src/test_cart_var.c
 delete mode 100644 libs/libsndfile/src/test_conversions.c
 delete mode 100644 libs/libsndfile/src/test_endswap.c
 delete mode 100644 libs/libsndfile/src/test_endswap.def
 delete mode 100644 libs/libsndfile/src/test_endswap.tpl
 delete mode 100644 libs/libsndfile/src/test_file_io.c
 delete mode 100644 libs/libsndfile/src/test_float.c
 delete mode 100644 libs/libsndfile/src/test_ima_oki_adpcm.c
 delete mode 100644 libs/libsndfile/src/test_log_printf.c
 delete mode 100644 libs/libsndfile/src/test_main.c
 delete mode 100644 libs/libsndfile/src/test_main.h
 delete mode 100644 libs/libsndfile/src/test_strncpy_crlf.c
 delete mode 100644 libs/libsndfile/src/txw.c
 delete mode 100644 libs/libsndfile/src/ulaw.c
 delete mode 100644 libs/libsndfile/src/version-metadata.rc.in
 delete mode 100644 libs/libsndfile/src/voc.c
 delete mode 100644 libs/libsndfile/src/vox_adpcm.c
 delete mode 100644 libs/libsndfile/src/w64.c
 delete mode 100644 libs/libsndfile/src/wav.c
 delete mode 100644 libs/libsndfile/src/wav_w64.c
 delete mode 100644 libs/libsndfile/src/wav_w64.h
 delete mode 100644 libs/libsndfile/src/windows.c
 delete mode 100644 libs/libsndfile/src/wve.c
 delete mode 100644 libs/libsndfile/src/xi.c
 delete mode 100644 libs/libsndfile/tests/Makefile.am
 delete mode 100644 libs/libsndfile/tests/aiff_rw_test.c
 delete mode 100644 libs/libsndfile/tests/alaw_test.c
 delete mode 100644 libs/libsndfile/tests/benchmark-0.0.28
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.0
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.0rc2
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.18pre16-mingus
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane
 delete mode 100644 libs/libsndfile/tests/benchmark-1.0.6pre10-miles
 delete mode 100644 libs/libsndfile/tests/benchmark-latest-coltrane
 delete mode 100644 libs/libsndfile/tests/benchmark.c
 delete mode 100644 libs/libsndfile/tests/benchmark.def
 delete mode 100644 libs/libsndfile/tests/benchmark.tpl
 delete mode 100644 libs/libsndfile/tests/channel_test.c
 delete mode 100644 libs/libsndfile/tests/checksum_test.c
 delete mode 100644 libs/libsndfile/tests/chunk_test.c
 delete mode 100644 libs/libsndfile/tests/command_test.c
 delete mode 100644 libs/libsndfile/tests/compression_size_test.c
 delete mode 100644 libs/libsndfile/tests/cpp_test.cc
 delete mode 100644 libs/libsndfile/tests/dft_cmp.c
 delete mode 100644 libs/libsndfile/tests/dft_cmp.h
 delete mode 100644 libs/libsndfile/tests/dither_test.c
 delete mode 100644 libs/libsndfile/tests/dwvw_test.c
 delete mode 100644 libs/libsndfile/tests/error_test.c
 delete mode 100644 libs/libsndfile/tests/external_libs_test.c
 delete mode 100644 libs/libsndfile/tests/fix_this.c
 delete mode 100644 libs/libsndfile/tests/floating_point_test.c
 delete mode 100644 libs/libsndfile/tests/floating_point_test.def
 delete mode 100644 libs/libsndfile/tests/floating_point_test.tpl
 delete mode 100644 libs/libsndfile/tests/format_check_test.c
 delete mode 100644 libs/libsndfile/tests/generate.c
 delete mode 100644 libs/libsndfile/tests/generate.h
 delete mode 100644 libs/libsndfile/tests/header_test.c
 delete mode 100644 libs/libsndfile/tests/header_test.def
 delete mode 100644 libs/libsndfile/tests/header_test.tpl
 delete mode 100644 libs/libsndfile/tests/headerless_test.c
 delete mode 100644 libs/libsndfile/tests/largefile_test.c
 delete mode 100644 libs/libsndfile/tests/locale_test.c
 delete mode 100644 libs/libsndfile/tests/lossy_comp_test.c
 delete mode 100644 libs/libsndfile/tests/misc_test.c
 delete mode 100644 libs/libsndfile/tests/multi_file_test.c
 delete mode 100644 libs/libsndfile/tests/ogg_test.c
 delete mode 100644 libs/libsndfile/tests/open_fail_test.c
 delete mode 100644 libs/libsndfile/tests/pcm_test.c
 delete mode 100644 libs/libsndfile/tests/pcm_test.def
 delete mode 100644 libs/libsndfile/tests/pcm_test.tpl
 delete mode 100644 libs/libsndfile/tests/peak_chunk_test.c
 delete mode 100644 libs/libsndfile/tests/pedantic-header-test.sh.in
 delete mode 100644 libs/libsndfile/tests/pipe_test.c
 delete mode 100644 libs/libsndfile/tests/pipe_test.def
 delete mode 100644 libs/libsndfile/tests/pipe_test.tpl
 delete mode 100644 libs/libsndfile/tests/raw_test.c
 delete mode 100644 libs/libsndfile/tests/rdwr_test.def
 delete mode 100644 libs/libsndfile/tests/rdwr_test.tpl
 delete mode 100644 libs/libsndfile/tests/scale_clip_test.c
 delete mode 100644 libs/libsndfile/tests/scale_clip_test.def
 delete mode 100644 libs/libsndfile/tests/scale_clip_test.tpl
 delete mode 100644 libs/libsndfile/tests/sftest.c
 delete mode 100644 libs/libsndfile/tests/sfversion.c
 delete mode 100644 libs/libsndfile/tests/stdin_test.c
 delete mode 100644 libs/libsndfile/tests/stdio_test.c
 delete mode 100644 libs/libsndfile/tests/stdout_test.c
 delete mode 100644 libs/libsndfile/tests/string_test.c
 delete mode 100644 libs/libsndfile/tests/test_wrapper.sh.in
 delete mode 100644 libs/libsndfile/tests/ulaw_test.c
 delete mode 100644 libs/libsndfile/tests/utils.c
 delete mode 100644 libs/libsndfile/tests/utils.def
 delete mode 100644 libs/libsndfile/tests/utils.h
 delete mode 100644 libs/libsndfile/tests/utils.tpl
 delete mode 100644 libs/libsndfile/tests/virtual_io_test.c
 delete mode 100644 libs/libsndfile/tests/vorbis_test.c
 delete mode 100644 libs/libsndfile/tests/win32_ordinal_test.c
 delete mode 100644 libs/libsndfile/tests/win32_test.c
 delete mode 100644 libs/libsndfile/tests/write_read_test.c
 delete mode 100644 libs/libsndfile/tests/write_read_test.def
 delete mode 100644 libs/libsndfile/tests/write_read_test.tpl
 delete mode 100644 libs/win32/libsndfile/cleancount
 delete mode 100644 libs/win32/libsndfile/config.h
 delete mode 100644 libs/win32/libsndfile/libsndfile.2010.vcxproj.filters
 delete mode 100644 libs/win32/libsndfile/libsndfile.2015.vcxproj
 delete mode 100644 libs/win32/libsndfile/sndfile.h
 create mode 100644 w32/libsndfile-version.props
 create mode 100644 w32/libsndfile.props

diff --git a/Freeswitch.2015.sln b/Freeswitch.2015.sln
index 955be84cc8..f0529beaca 100644
--- a/Freeswitch.2015.sln
+++ b/Freeswitch.2015.sln
@@ -232,8 +232,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\ap
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.2015.vcxproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "libs\win32\libsndfile\libsndfile.2015.vcxproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "libs\win32\apr-util\xml.2015.vcxproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.2015.vcxproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}"
@@ -956,17 +954,6 @@ Global
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64
 		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64
 		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64
 		{155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64
@@ -3005,7 +2992,6 @@ Global
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
-		{3D0370CA-BED2-4657-A475-32375CBCB6E4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{0DF3ABD0-DDC0-4265-B778-07C66780979B} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}
 		{8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D}
diff --git a/libs/.gitignore b/libs/.gitignore
index 49d7177e88..f66304d9f7 100644
--- a/libs/.gitignore
+++ b/libs/.gitignore
@@ -854,3 +854,5 @@ flite-*/
 flite-*
 pcre-*/
 pcre-*
+libsndfile-*/
+libsndfile-*
diff --git a/libs/libsndfile/.update b/libs/libsndfile/.update
deleted file mode 100644
index cbf0edf709..0000000000
--- a/libs/libsndfile/.update
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 28 03:45:32 CDT 2014
diff --git a/libs/libsndfile/AUTHORS b/libs/libsndfile/AUTHORS
deleted file mode 100644
index b7e2232b95..0000000000
--- a/libs/libsndfile/AUTHORS
+++ /dev/null
@@ -1,14 +0,0 @@
-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/libs/libsndfile/COPYING b/libs/libsndfile/COPYING
deleted file mode 100644
index c396169eea..0000000000
--- a/libs/libsndfile/COPYING
+++ /dev/null
@@ -1,503 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
diff --git a/libs/libsndfile/Cfg/.empty b/libs/libsndfile/Cfg/.empty
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/libs/libsndfile/ChangeLog b/libs/libsndfile/ChangeLog
deleted file mode 100644
index d22be00cd7..0000000000
--- a/libs/libsndfile/ChangeLog
+++ /dev/null
@@ -1,9764 +0,0 @@
-2013-04-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * Makefile.am
-    Make sure checkprograms are built as part of 'make test-tarball'.
-    Closes: https://github.com/erikd/libsndfile/issues/37
-
-2013-03-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/dft_cmp.c
-    Fix a buffer overflow detected using GCC 4.8's -fsantiize=address runtime
-    error checking functionality. This was a buffer overflow in libsndfile's
-    test suite, not in the actual library code.
-
-2013-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/gcc_version.m4
-    Fix to work with OpenBSD's sed.
-
-2013-03-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/alac_encoder.c
-    Patch from Michael Pruett (author of libaudiofile) to add correct byte
-    swapping for the mChannelLayoutTag field.
-
-2013-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/bugs.html
-    Bugs should bt reported on the github issue tracker.
-
-2013-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Improve sanitization of FLAC_CFLAGS value.
-
-2013-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/Makefile.am
-    Call python interpreter instead of using '#!' in script. Thanks to Jan
-    Stary for reporting this.
-
-    * doc/index.html doc/FAQ.html
-    Make internal links relative. Patch from Jan Stary.
-
-2013-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/test_endswap.def src/test_endswap.tpl
-    Add tests for psf_put_be32() and psf_put_be64().
-
-    * src/sfendian.h src/test_endswap.(def|tpl)
-    Add functions psf_get_be(16|32|64) with tests.
-    These are needed for platforms where un-aligned accesses cause bus faults.
-
-    * src/ALAC/ag_enc.c src/ALAC/alac_decoder.c
-    Replace all un-aligned accesses with safe alternatives.
-    Closes: https://github.com/erikd/libsndfile/issues/19
-
-2013-02-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sfendian.h
-    Add big endian versions of H2BE_16 and H2BE_32.
-
-2013-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/
-    Replace Apple endswap routines with ones from libsndfile.
-
-    * merge from libsndfile-cart repo
-    Add ability to set and get a cart chunk with WAV and RF64.
-    Orignal patch by Chris Roberts <c.roberts@csrfm.com> required a number of
-    tweaks.
-
-2013-02-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h
-    Bump SF_HEADER_LEN from 8192 to 12292, the value it was in the 1.0.25
-    release.
-
-2013-02-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix segfault when encoding 8 channel files.
-    Closes: https://github.com/erikd/libsndfile/issues/30
-
-2013-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/EndianPortable.c
-    Fall back to compiler's __BYTE_ORDER__ for endian-ness detection.
-
-2013-02-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac src/common.h src/ima_adpcm.c src/ms_adpcm.c src/paf.c
-    Drop tests for and #ifdef hackery for C99 struct flexible array feature.
-    libsndfile assumes the compiler supports most of the ISO C99 standard.
-
-    * src/alac.c
-    Fix valgrind invalid realloc. Reported by nu774.
-    Closes: https://github.com/erikd/libsndfile/issues/31
-
-2013-02-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    The 'pakt' chunk header should now be written correctly.
-    Closes: https://github.com/erikd/libsndfile/issues/24
-
-    * configure.ac Makefile.am
-    Use PKG_INSTALLDIR when it exists. Suggestion from Christoph Thompson.
-    Closes: https://github.com/erikd/libsndfile/pull/28
-
-2013-02-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/caf.c
-    Read the ALAC 'pakt' header and stash the values.
-
-    * src/sfendian.h
-    Add functions psf_put_be64() and psf_put_be32().
-
-    * src/alac.c
-    Start work on filling on the 'pakt' chunk header.
-
-2013-02-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Add missing opening <P> tag.
-
-    * src/alac.c
-    Increase ALAC_BYTE_BUFFER_SIZE to 82000.
-
-2013-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Improve question #8.
-
-2013-01-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ogg_opus.c
-    Add skeleton implementation so someone else can run with it.
-
-2012-12-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/dwd.c src/rx2.c src/txw.c
-    Fix for compiling when configured with --enable-experimental. Thanks to
-    Eric Wong for reporting this.
-
-2012-12-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac programs/sndfile-play.c
-    OS X 10.8 uses a different audio API to previous versions.
-    Fix compile failure on by disabling sndfile-play on this version.
-    Someone needs to supply code for the new API.
-
-2012-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * Octave/Makefile.am Octave/octave_test.sh
-    Fix 'make distcheck'.
-
-2012-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/octave.m4
-    Relax constraints on Octave version.
-
-2012-10-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/utils.tpl
-    Improve compare_*_or_die() functions.
-
-    * src/command.c
-    Fix bug reported by Keiler Florian. When reading short or int data from a
-    file containing float data, and setting SFC_SET_SCALE_FLOAT_INT_READ to
-    SF_TRUE would fail 3, 5, 7 and other channels counts. Problem was that
-    psf_calc_signal_max() was not calculating the signal max correctly.
-    Calculation of the signal max was failing because it was trying to read
-    a sample count that was not an integer multiple of the channel count.
-
-    * tests/channel_test.c tests/Makefile.am tests/test_wrapper.sh.in
-    Add test for the above.
-
-2012-09-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.hh
-    Added a constructor to allow the use of SF_VIRTUAL_IO. Patch from
-    DannyDaemonic : https://github.com/erikd/libsndfile/pull/20
-
-2012-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/octave.html
-    Fix link to octave.sourceforge.net. Thanks to IOhannes m zmoelnig.
-
-    * src/mat5.c
-    Allow reading of mat5 files without a specified sample rate (default to
-    44.1kHz). Thanks to IOhannes m zmoelnig.
-
-2012-08-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/paf.c
-    Error out if channel count is zero. Bug report from William ELla via
-    launchpad:
-    https://bugs.launchpad.net/ubuntu/+source/libsndfile/+bug/1036831
-
-2012-08-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac programs/sndfile-play.c
-    Patch from Ricci Adams to use OSX's AudioQueues on OSX 10.7 and greater.
-
-2012-07-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * programs/common.c
-    Accept "ogg" as a file extention for Ogg/Vorbis files.
-
-2012-06-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/flac.c
-    Make sure any previously allocated FLAC stream encoder and stream decoder
-    objects are deleted before a new one is allocated.
-
-2012-06-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/utils.tpl
-    Rename gen_lowpass_noise_float() to gen_lowpass_signal_float() and add a
-    sine wave component so that different FLAC compression levels can be
-    tested.
-
-    * src/sndfile.h.in doc/command.html
-    Add SFC_SET_COMPRESSION_LEVEL and document it.
-
-    * src/sndfile.c
-    Catch SFC_SET_VBR_ENCODING_QUALITY command and implement it as the inverse
-    of SFC_SET_COMPRESSION_LEVEL.
-
-    * src/ogg_vorbis.c src/flac.c
-    Implement SFC_SET_COMPRESSION_LEVEL command.
-
-    * tests/test_wrapper.sh.in tests/compression_size_test.c
-    Use the compression_size_test on FLAC as well.
-
-2012-06-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/
-    Rename vorbis_test.c -> compression_size_test.c so it can be extended to
-    test FLAC as well.
-
-2012-06-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/broadcast.c
-    Fix a bug where a file with a 'bext' chunk with a zero length coding
-    history field would get corrupted when the file was closed.
-    Reported by Paul Davis of the Ardour project.
-
-    * src/test_broadcast_var.c
-    Add a test for the above.
-
-2012-05-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    sf_format_check: For SF_FORMAT_AIFF, reject endian-ness setttings for
-    non-PCM formats.
-
-2012-04-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c
-    Fix regression in handling of odd length SSND chunks.
-    Thanks Olivier Tristan for the example file.
-
-    * src/aiff.c src/wav.c
-    Exit parser loop when marker == 0.
-
-2012-04-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Fix text. Thanks to Richard Collins.
-
-2012-03-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/caf.c
-    Exit parse loop if the marker is zero. Pass jump offsets as size_t instead
-    of int.
-
-2012-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix segfault when decoding CAF/ALAC file with more than 4 channels.
-    Fixes github issue #8 reported by Charles Van Winkle.
-
-2012-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h
-    Change 'typedef SF_CHUNK_ITERATOR { ... } SF_CHUNK_ITERATOR' into 'struct
-    SF_CHUNK_ITERATOR { ... }' to prevent older compilers from complaining of
-    re-typedef-ing of SF_CHUNK_ITERATOR.
-
-    * configure.ac
-    Fix if test for empty $prefix.
-
-2012-03-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/*.c tests/chunk_test.c
-    Reworking of custom chunk handling code.
-    - Memory for the iterator is now attached to the SF_PRIVATE struct and
-      freed one sf_close().
-    - Rename sf_create_chunk_iterator() ->  sf_get_chunk_iterator().
-    - Each SNDFILE handle never has more than one SF_CHUNK_ITERATOR handle.
-
-    * tests/string_test.c
-    Fix un-initialised char buffer.
-
-2012-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/*.c tests/chunk_test.c
-    Add improved handling of custom chunk getting and settings. Set of patches
-    from IOhannes m zmoelnig submitted via github pull request #6.
-
-    * src/alac.c
-    Fix calculated frame count for files with zero block length.
-
-2012-03-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/avr.c
-    Remove double assignment to psf->endian. Thanks Kao Dome.
-
-    * src/gsm610.c
-    Fix clearing of buffers. Thanks Kao Dome.
-
-    * src/paf.c
-    Remove duplicate code. Thanks Kao Dome.
-
-    * src/test_strncpy_crlf.c
-    Fix minor error in test. Thanks Kao Dome.
-
-    * src/common.h src/*.c
-    Fix a bunch of valgrind errors.
-
-2012-03-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    Fix typo in error string 'Uknown' -> 'Unknown'.
-
-    * tests/fix_this.c
-    Fix potential int overflow.
-
-2012-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix decoding of last block so that the decode length is not a multiple of
-    the block length. Fixes github issue #4 reported by Charles Van Winkle.
-
-    * src/sfconfig.h src/sfendian.h
-    Fix for MinGW cross compiling. Use '#if (defined __*66__)' instead of
-    '#if __*86__' because the MinGW header use '#ifdef __x86_64__'.
-
-2012-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/ src/alac.c
-    Unify the interface between libsndfile and Apple ALAC codec. Regardless of
-    file bit width samples are now passed between the two as int32_t that are
-    justified towards the most significant bit. Without this modification, 16
-    conversion functions would have been needed between the libsndfile (short,
-    int, float, double) types and the ALAC types (16, 20, 24 and 32 bit). With
-    this mod, only 4 are needed.
-
-    * tests/floating_point_test.tpl tests/write_read_test.(def|tpl)
-    Add tests for 20 and 24 bit ALAC/CAF files.
-
-    * src/command.c
-    Add ALAC/CAF to the SFC_GET_FORMAT_* commands. Fixes github issue #5.
-
-    * configure.ac
-    Only use automake AM_SLIENT_RULES where supported. Thanks Dave Yeo.
-
-    * tests/pipe_test.tpl
-    Disable tests on OS/2. Thanks Dave Yeo.
-
-2012-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac src/sfconfig.h src/sfendian.h
-    For GCC, use inline assembler for endian swapping. This should work with
-    older versions of GCC like the one currently used in OS/2.
-
-2012-03-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Make sure temp file gets opened in binary mode.
-
-    * src/alac.c src/common.c src/common.h
-    Fix function alac_write16_d().
-
-    * tests/floating_point_test.tpl
-    Add tests for 16 bit ALAC/CAF.
-
-    * src/alac.c src/common.c src/common.h
-    Add support for 32 bit ALAC/CAF files.
-
-    * tests/floating_point_test.tpl tests/write_read_test.tpl
-    Add tests for 32 bit ALAC/CAF files.
-
-2012-03-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/
-    Refactor chunk storage so it work on big as well as little endian CPUs.
-
-    * tests/chunk_test.c
-    Clean up error messages.
-
-    * src/sfendian.h src/*.c
-    Rename endian swapping macros and add ENDSWAP_64 and BE2H_64.
-
-    * configure.ac
-    Detect presence of <x86intrin.h> header file.
-
-    * src/sfendian.h
-    Use <x86intrin.h> intrinsics (ie for MinGW) when <byteswap.h> is not
-    present.
-    Make ENDSWAP_64() work with i686-w64-mingw32 compiler.
-
-    * src/ALAC/EndianPortable.c
-    Add support for __powerpc__.
-
-    * src/sfconfig.h
-    Make sure HAVE_X86INTRIN_H is either 1 or 0.
-
-2012-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/*
-    Big dump of code for Apple's ALAC file format. The copyyright to this code
-    is owned by Apple who have released it under an Apache style license. A few
-    small modifications were made to allow this to be integrated into libsndfile
-    but unfortunately the history of those changes were lost because they were
-    developed in a Bzr tree and during that time libsndfile moved to Git.
-
-    * src/alac.c src/caf.c src/common.[ch] src/Makefile.am src/sndfile.h.in
-        src/sndfile.c
-    Hook new ALAC codec in.
-
-    * programs/sndfile-convert.c
-    Add support for alac codec.
-
-    * tests/write_read_test.tpl
-    Expand tests to cover ALAC.
-
-2012-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c src/wav.c
-    Fix a couple of regressions from version 1.0.25.
-
-2012-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/strings.c
-    Minor refactoring. Make sure that the memory allocation size if always > 0
-    to avoid undefined behaviour.
-
-2012-02-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/chunk.c
-    Fix buffer overrun introduced in recently added chunk logging. This chunk
-    logging has not yet made it to a libsndfile release version. Thanks to
-    Olivier Tristan for providing an example file.
-
-    * src/wav.c
-    Fix handling of odd sized chunks which was causing the parser to lose some
-    chunks. Thanks to Olivier Tristan for providing an example file.
-
-2012-02-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/util.tpl
-    Used gnu_printf format checking with mingw-w64 compiler.
-
-    * tests/header_test.tpl
-    Printf format fixes.
-
-2012-02-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/extra_pkg.m4
-    Update PKG_CHECK_MOD_VERSION macro to add an AC_TRY_LINK step. This fix
-    allows the configure process to catch attempts to link incompatible
-    libraries. For example, linking 32 bit version of eg libFLAC to a 64 bit
-    version of libsndfile will now fail. Similarly, when cross compiling
-    libsndfile from Linux to Windows linking the Linux versions of a library
-    to the Windows version of libsndfile will now also fail.
-
-    * src/sndfile.h.in src/sndfile.c src/common.h src/create_symbols_file.py
-    Add API function sf_current_byterate().
-
-    * src/dwvw.c src/flac.c src/ogg_vorbis.c src/sds.c
-    Add codec specific handlers for current byterate.
-
-    * tests/floating_point_test.tpl
-    Add initial test for sf_current_byterate().
-
-2012-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.[ch]
-    Add function psf_decode_frame_count().
-
-    * src/dwvw.c
-    Fix a termnation bug that caused the decoder to go into an infinite loop.
-
-2012-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Fix a regression in the WAV header parser. Thanks to Olivier Tristan for
-    bug report and the example file.
-
-2012-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    Return error when SF_BROADCAST_INFO struct has bad coding_history_size.
-    Thanks to Alex Weiss for the report.
-
-2012-02-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/au.c src/flac.c src/g72x.c src/ogg_vorbis.c src/wav_w64.c
-    Don't fake psf->bytewidth values.
-
-2012-02-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/string_test.c
-    Fix valgrind warnings.
-
-    * src/common.h src/sndfile.c src/strings.c
-    Make string storage dynamically allocated.
-
-    * src/sndfile.c
-    Add extra validation for custom chunk handling.
-
-2012-02-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Improve handlling unknown chunk types. Thanks to Olivier Tristan for sending
-    example files.
-
-    * src/utils.tpl
-    Add GCC specific testing for format string parameters for exit_if_true().
-
-    * tests/*.c tests/*.tpl
-    Fix all printf format warnings.
-
-    * programs/sndfile-play.c
-    Remove un-needed OSX include <Carbon.h>. Thanks jamesfmilne for github
-    issue #3.
-
-    * tests/chunk_test.c
-    Extend custom chunk test.
-
-2012-02-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Jump over some more chunk types while parsing.
-
-2012-02-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/strings.c
-    Change way strings are stored in SF_PRIVATE in preparation for dynamically
-    allocating the storage.
-
-2012-02-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Improve encapsulation of string data in SF_PRIVATE.
-
-2012-02-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Remove the buffer union from SF_PRIVATE. Most uses of this have been
-    replaced with a BUF_UNION that is allocated on the stack.
-
-2012-01-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Rename logbuffer field of SF_PRIVATE to parselog and reduce its size.
-    Put the parselog buffer and the index inside a struct within SF_PRIVATE.
-
-2012-01-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Fix typo, FLAC_CLFAGS -> FLAC_CFLAGS. Thanks to Jeremy Friesner.
-
-2012-01-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c src/ogg.c
-    Fix misleading error message when trying to create an SF_FORMAT_OGG file
-    with anything other than SF_FORMAT_FILE. Thanks to Charles Van Winkle for
-    the bug report. Github issue #1.
-
-2012-01-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c src/wav.c
-    Allow files opened in RDWR mode with string data in the tailer to be
-    extended. Thanks to Bodo for the patch.
-
-    * tests/string_test.c
-    Add tests for the above changes (patch from Bodo).
-
-2012-01-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c
-    Refactor reading of chunk size and use of psf_store_read_chunk().
-
-    * src/(caf|wav).c
-    Correct storing of chunk offset.
-
-2012-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c src/wav.c src/common.h
-    Refactor common code into src/common.h.
-
-    * src/caf.c
-    Make custom chunks work for CAF files.
-
-    * tests/chunk_test.c tests/test_wrapper.sh.in
-    Test CAF files with custom chunks.
-
-    * src/sndfile.c
-    Prevent psf->codec_close() being called more than once.
-
-2012-01-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * programs/sndfile-cmp.c
-    Catch the case where the second file has more frames than the first.
-
-2012-01-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/create_symbols_file.py
-    Add sf_set_chunk/sf_get_chunk_size/sf_get_chunk_data.
-
-2011-12-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/chunk_test.c tests/Makefile.am
-    New test for custom chunks.
-
-    * src/aiff.c src/chunk.c src/common.h src/sndfile.c
-    Make custom chunks work on AIFF files.
-
-    * src/wav.c
-    Make custom chunks work on WAV files (includes refactoring).
-
-2011-11-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.h.in src/common.h src/sndfile.c
-    Start working on setting/getting chunks.
-
-2011-11-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/binheader_writef_check.py src/create_symbols_file.py
-    Make it work for Python 2 and 3. Thanks Michael.
-
-2011-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * libsndfile.spec.in
-    Change field name 'URL' to 'Url'.
-
-    * src/sndfile.h.in
-    Add SF_SEEK_SET/CUR/END.
-
-2011-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/id3.c
-    Fix a stack overflow that can occur when parsing a file with multiple
-    ID3 headers which would cause libsndfile to go into an infinite recursion
-    until it blew the stack. Thanks to Anders Svensson for supplying an example
-    file.
-
-2011-10-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/double64.c src/float32.c src/common.h
-    Make (float32|double_64)_(be|le)_read() functions const correct.
-
-2011-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sfendian.h
-    Minor tweaking of types. Cast to ptr to correct final type rather void*.
-
-    * programs/sndfile-play.c tests/utils.tpl
-    Fix compiler warnings with latest MinGW cross compiler.
-
-2011-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/file_io.c
-    Use the non-deprecated resource fork name on OSX. Thanks to Olivier Tristan.
-
-2011-10-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Jump over the 'olym' chunks when parsing.
-
-2011-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/write_read_test.tpl
-    Remove windows only truncate() implementation.
-
-2011-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sd2.c src/sndfile.c
-    Make sure 23 bit PCM SD2 files are readable/writeable.
-
-    * tests/write_read_test.tpl
-    Add tests for 32 bit PCM SD2 files.
-
-2011-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Use AC_SYS_LARGEFILE instead of AC_SYS_EXTRA_LARGEFILE as suggested by
-    Jan Willies.
-
-2011-08-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac Makefile.am
-    Move ACLOCAL_AMFLAGS setup to Makefile.am.
-
-2011-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/command.html
-    Merge two separate blocks of SFC_SET_VBR_ENCODING_QUALITY documentation.
-
-    * src/paf.c
-    Replace ppaf24->samplesperblock with a compile time constant.
-
-2011-07-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ogg_vorbis.c
-    Fix return value of SFC_SET_VBR_ENCODING_QUALITY command.
-
-    * doc/command.html
-    Document SFC_SET_VBR_ENCODING_QUALITY, SFC_GET/SET_LOOP_INFO and
-    SFC_GET_INSTRUMENT.
-
-    * 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/libs/libsndfile/INSTALL b/libs/libsndfile/INSTALL
deleted file mode 100644
index b42a17ac46..0000000000
--- a/libs/libsndfile/INSTALL
+++ /dev/null
@@ -1,182 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/libs/libsndfile/M4/Makefile.am b/libs/libsndfile/M4/Makefile.am
deleted file mode 100644
index e2d984a43a..0000000000
--- a/libs/libsndfile/M4/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = add_cflags.m4 clip_mode.m4 endian.m4 \
-	flexible_array.m4 llrint.m4 lrint.m4 lrintf.m4 octave.m4 extra_pkg.m4
-
diff --git a/libs/libsndfile/M4/add_cflags.m4 b/libs/libsndfile/M4/add_cflags.m4
deleted file mode 100644
index 55a326c580..0000000000
--- a/libs/libsndfile/M4/add_cflags.m4
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl @synopsis MN_ADD_CFLAGS
-dnl
-dnl Add the given option to CFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([MN_ADD_CFLAGS],
-[AC_MSG_CHECKING([if $CC accepts $1])
-	ac_add_cflags__old_cflags="$CFLAGS"
-	CFLAGS="$1"
-	AC_TRY_LINK([
-			#include <stdio.h>
-			],
-		[puts("Hello, World!"); return 0;],
-		AC_MSG_RESULT([yes])
-			CFLAGS="$ac_add_cflags__old_cflags $1",
-		AC_MSG_RESULT([no])
-			CFLAGS="$ac_add_cflags__old_cflags"
-		)
-])# MN_ADD_CFLAGS
diff --git a/libs/libsndfile/M4/add_cxxflags.m4 b/libs/libsndfile/M4/add_cxxflags.m4
deleted file mode 100644
index 1c0a4deb96..0000000000
--- a/libs/libsndfile/M4/add_cxxflags.m4
+++ /dev/null
@@ -1,19 +0,0 @@
-dnl @synopsis MN_ADD_CXXFLAGS
-dnl
-dnl Add the given option to CXXFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([MN_ADD_CXXFLAGS],
-[AC_MSG_CHECKING([if $CXX accepts $1])
-	AC_LANG_ASSERT([C++])
-	ac_add_cxxflags__old_cxxflags="$CXXFLAGS"
-	CXXFLAGS="$1"
-	AC_TRY_LINK([
-			#include <cstdio>
-			],
-		[puts("Hello, World!"); return 0;],
-		AC_MSG_RESULT([yes])
-			CXXFLAGS="$ac_add_cxxflags__old_cxxflags $1",
-		AC_MSG_RESULT([no])
-			CXXFLAGS="$ac_add_cxxflags__old_cxxflags"
-		)
-])# MN_ADD_CXXFLAGS
diff --git a/libs/libsndfile/M4/clang.m4 b/libs/libsndfile/M4/clang.m4
deleted file mode 100644
index 4cf3077d64..0000000000
--- a/libs/libsndfile/M4/clang.m4
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl @synopsis MN_C_COMPILER_IS_CLANG
-dnl
-dnl Find out if a compiler claiming to be gcc really is gcc (fuck you clang).
-dnl @version 1.0	Oct 31 2013
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-
-AC_DEFUN([MN_C_COMPILER_IS_CLANG],
-[AC_CACHE_CHECK(whether we are using the CLANG C compiler,
-	mn_cv_c_compiler_clang,
-	[	AC_LANG_ASSERT(C)
-		AC_TRY_LINK([
-			#include <stdio.h>
-			],
-			[
-			#ifndef __clang__
-				This is not clang!
-			#endif
-			],
-		mn_cv_c_compiler_clang=yes,
-		mn_cv_c_compiler_clang=no
-		])
-	)
-])
diff --git a/libs/libsndfile/M4/clip_mode.m4 b/libs/libsndfile/M4/clip_mode.m4
deleted file mode 100644
index 4556b937a0..0000000000
--- a/libs/libsndfile/M4/clip_mode.m4
+++ /dev/null
@@ -1,124 +0,0 @@
-dnl @synopsis MN_C_CLIP_MODE
-dnl
-dnl Determine the clipping mode when converting float to int.
-dnl @version 1.0	May 17 2003
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-
-
-
-
-
-
-dnl Find the clipping mode in the following way:
-dnl    1) If we are not cross compiling test it.
-dnl    2) IF we are cross compiling, assume that clipping isn't done correctly.
-
-AC_DEFUN([MN_C_CLIP_MODE],
-[AC_CACHE_CHECK(processor clipping capabilities, 
-	ac_cv_c_clip_type,
-
-# Initialize to unknown
-ac_cv_c_clip_positive=unknown
-ac_cv_c_clip_negative=unknown
-
-
-if test $ac_cv_c_clip_positive = unknown ; then
-	AC_TRY_RUN(
-	[[
-	#define	_ISOC9X_SOURCE	1
-	#define _ISOC99_SOURCE	1
-	#define	__USE_ISOC99	1
-	#define __USE_ISOC9X	1
-	#include <math.h>
-	int main (void)
-	{	double	fval ;
-		int k, ival ;
-
-		fval = 1.0 * 0x7FFFFFFF ;
-		for (k = 0 ; k < 100 ; k++)
-		{	ival = (lrint (fval)) >> 24 ;
-			if (ival != 127)
-				return 1 ;
-		
-			fval *= 1.2499999 ;
-			} ;
-		
-			return 0 ;
-		}
-		]],
-		ac_cv_c_clip_positive=yes,
-		ac_cv_c_clip_positive=no,
-		ac_cv_c_clip_positive=unknown
-		)
-
-	AC_TRY_RUN(
-	[[
-	#define	_ISOC9X_SOURCE	1
-	#define _ISOC99_SOURCE	1
-	#define	__USE_ISOC99	1
-	#define __USE_ISOC9X	1
-	#include <math.h>
-	int main (void)
-	{	double	fval ;
-		int k, ival ;
-
-		fval = -8.0 * 0x10000000 ;
-		for (k = 0 ; k < 100 ; k++)
-		{	ival = (lrint (fval)) >> 24 ;
-			if (ival != -128)
-				return 1 ;
-		
-			fval *= 1.2499999 ;
-			} ;
-		
-			return 0 ;
-		}
-		]],
-		ac_cv_c_clip_negative=yes,
-		ac_cv_c_clip_negative=no,
-		ac_cv_c_clip_negative=unknown
-		)
-	fi
-
-if test $ac_cv_c_clip_positive = yes ; then
-	ac_cv_c_clip_positive=1
-else
-	ac_cv_c_clip_positive=0
-	fi
-
-if test $ac_cv_c_clip_negative = yes ; then
-	ac_cv_c_clip_negative=1
-else
-	ac_cv_c_clip_negative=0
-	fi
-
-[[
-case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
-	"00")
-		ac_cv_c_clip_type="none"
-		;;
-	"10")
-		ac_cv_c_clip_type="positive"
-		;;
-	"01")
-		ac_cv_c_clip_type="negative"
-		;;
-	"11")
-		ac_cv_c_clip_type="both"
-		;;
-	esac
-	]]
-
-)
-]
-
-)# MN_C_CLIP_MODE
-
-
diff --git a/libs/libsndfile/M4/endian.m4 b/libs/libsndfile/M4/endian.m4
deleted file mode 100644
index 5d766ff39e..0000000000
--- a/libs/libsndfile/M4/endian.m4
+++ /dev/null
@@ -1,155 +0,0 @@
-dnl @synopsis MN_C_FIND_ENDIAN
-dnl
-dnl Determine endian-ness of target processor.
-dnl @version 1.1	Mar 03 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Majority written from scratch to replace the standard autoconf macro 
-dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
-dnl of the AC_TRY_RUN macro.
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-dnl Find endian-ness in the following way:
-dnl    1) Look in <endian.h>.
-dnl    2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
-dnl    3) If 1) and 2) fails and not cross compiling run a test program.
-dnl    4) If 1) and 2) fails and cross compiling then guess based on target.
-
-AC_DEFUN([MN_C_FIND_ENDIAN],
-[AC_CACHE_CHECK(processor byte ordering, 
-	ac_cv_c_byte_order,
-
-# Initialize to unknown
-ac_cv_c_byte_order=unknown
-
-if test x$ac_cv_header_endian_h = xyes ; then
-
-	# First try <endian.h> which should set BYTE_ORDER.
-
-	[AC_TRY_LINK([
-		#include <endian.h>
-		#if BYTE_ORDER != LITTLE_ENDIAN
-			not big endian
-		#endif
-		], return 0 ;, 
-			ac_cv_c_byte_order=little
-		)]
-				
-	[AC_TRY_LINK([
-		#include <endian.h>
-		#if BYTE_ORDER != BIG_ENDIAN
-			not big endian
-		#endif
-		], return 0 ;, 
-			ac_cv_c_byte_order=big
-		)]
-
-	fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-
-	[AC_TRY_LINK([
-		#include <sys/types.h>
-		#include <sys/param.h>
-		#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
-			bogus endian macros
-		#endif
-		], return 0 ;, 
-
-		[AC_TRY_LINK([
-			#include <sys/types.h>
-			#include <sys/param.h>
-			#if BYTE_ORDER != LITTLE_ENDIAN
-				not big endian
-			#endif
-			], return 0 ;, 
-				ac_cv_c_byte_order=little
-			)]
-				
-		[AC_TRY_LINK([
-			#include <sys/types.h>
-			#include <sys/param.h>
-			#if BYTE_ORDER != LITTLE_ENDIAN
-				not big endian
-			#endif
-			], return 0 ;, 
-				ac_cv_c_byte_order=little
-			)]
-
-		)]
-
- 	fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-	if test $cross_compiling = yes ; then
-		# This is the last resort. Try to guess the target processor endian-ness
-		# by looking at the target CPU type.	
-		[
-		case "$target_cpu" in
-			alpha* | i?86* | mipsel* | ia64*)
-				ac_cv_c_byte_order=little
-				;;
-			
-			m68* | mips* | powerpc* | hppa* | sparc*)
-				ac_cv_c_byte_order=big
-				;;
-	
-			esac
-		]
-	else
-		AC_TRY_RUN(
-		[[
-		int main (void) 
-		{	/* Are we little or big endian?  From Harbison&Steele.  */
-			union
-			{	long l ;
-				char c [sizeof (long)] ;
-			} u ;
-			u.l = 1 ;
-			return (u.c [sizeof (long) - 1] == 1);
-			}
-			]], , ac_cv_c_byte_order=big, 
-			)
-
-		AC_TRY_RUN(
-		[[int main (void) 
-		{	/* Are we little or big endian?  From Harbison&Steele.  */
-			union
-			{	long l ;
-				char c [sizeof (long)] ;
-			} u ;
-			u.l = 1 ;
-			return (u.c [0] == 1);
-			}]], , ac_cv_c_byte_order=little, 
-			)
-		fi	
-	fi
-
-)
-
-if test $ac_cv_c_byte_order = big ; then
-	ac_cv_c_big_endian=1
-	ac_cv_c_little_endian=0
-elif test $ac_cv_c_byte_order = little ; then
-	ac_cv_c_big_endian=0
-	ac_cv_c_little_endian=1
-else
-	ac_cv_c_big_endian=0
-	ac_cv_c_little_endian=0
-
-	AC_MSG_WARN([[*****************************************************************]])
-	AC_MSG_WARN([[*** Not able to determine endian-ness of target processor.       ]])
-	AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in  ]])
-	AC_MSG_WARN([[*** src/config.h may need to be hand editied.                    ]])
-	AC_MSG_WARN([[*****************************************************************]])
-	fi
-
-]
-)# MN_C_FIND_ENDIAN
-
-
diff --git a/libs/libsndfile/M4/extra_largefile.m4 b/libs/libsndfile/M4/extra_largefile.m4
deleted file mode 100644
index 3e614c3f70..0000000000
--- a/libs/libsndfile/M4/extra_largefile.m4
+++ /dev/null
@@ -1,114 +0,0 @@
-dnl By default, many hosts won't let programs access large files;
-dnl one must use special compiler options to get large-file access to work.
-dnl For more details about this brain damage please see:
-dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
-
-dnl Written by Paul Eggert <eggert@twinsun.com>.
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl MN_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME)
-AC_DEFUN([MN_SYS_EXTRA_LARGEFILE_FLAGS],
-  [AC_CACHE_CHECK([for $1 value to request large file support],
-     ac_cv_sys_largefile_$1,
-     [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
-	ac_cv_sys_largefile_$1=no
-	ifelse($1, CFLAGS,
-	  [case "$host_os" in
-	   # IRIX 6.2 and later require cc -n32.
-changequote(, )dnl
-	   irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
-changequote([, ])dnl
-	     if test "$GCC" != yes; then
-	       ac_cv_sys_largefile_CFLAGS=-n32
-	     fi
-	     ac_save_CC="$CC"
-	     CC="$CC $ac_cv_sys_largefile_CFLAGS"
-	     AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
-	     CC="$ac_save_CC"
-	   esac])
-      }])])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND],
-  [case $2 in
-   no) ;;
-   ?*)
-     case "[$]$1" in
-     '') $1=$2 ;;
-     *) $1=[$]$1' '$2 ;;
-     esac ;;
-   esac])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE],
-  [AC_CACHE_CHECK([for $1], $2,
-     [$2=no
-changequote(, )dnl
-      $4
-      for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-	case "$ac_flag" in
-	-D$1)
-	  $2=1 ;;
-	-D$1=*)
-	  $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
-	esac
-      done
-changequote([, ])dnl
-      ])
-   if test "[$]$2" != no; then
-     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
-   fi])
-
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE],
-  [AC_REQUIRE([AC_CANONICAL_HOST])
-   AC_ARG_ENABLE(largefile,
-     [  --disable-largefile     omit support for large files])
-   if test "$enable_largefile" != no; then
-     AC_CHECK_TOOL(GETCONF, getconf)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(LIBS)
-	
-     for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       no) ;;
-       -D_FILE_OFFSET_BITS=*) ;;
-       -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
-       -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
-       -D?* | -I?*)
-	 AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
-       *)
-	 AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
-       esac
-     done
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
-       ac_cv_sys_file_offset_bits,
-       [Number of bits in a file offset, on hosts where this is settable.])
-       [case "$host_os" in
-	# HP-UX 10.20 and later
-	hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-	  ac_cv_sys_file_offset_bits=64 ;;
-	esac]
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
-       ac_cv_sys_largefile_source,
-       [Define to make fseeko etc. visible, on some hosts.],
-       [case "$host_os" in
-	# HP-UX 10.20 and later
-	hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-	  ac_cv_sys_largefile_source=1 ;;
-	esac])
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
-       ac_cv_sys_large_files,
-       [Define for large files, on AIX-style hosts.],
-       [case "$host_os" in
-	# AIX 4.2 and later
-	aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
-	  ac_cv_sys_large_files=1 ;;
-	esac])
-   fi
-  ])
-
diff --git a/libs/libsndfile/M4/extra_pkg.m4 b/libs/libsndfile/M4/extra_pkg.m4
deleted file mode 100644
index afe474e224..0000000000
--- a/libs/libsndfile/M4/extra_pkg.m4
+++ /dev/null
@@ -1,105 +0,0 @@
-# extra_pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
-#
-# Copyright (c) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-# Copyright (c) 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# --------------------------------------------------------------
-# PKG_CHECK_MOD_VERSION(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-# This is a very slight modification to the macro PKG_CHECK_MODULES that
-# is in the original pkg.m4 file. It prints the versions in the checking
-# message (erikd@mega-nerd.com).
-
-AC_DEFUN([PKG_CHECK_MOD_VERSION],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $2 ])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-pkg_link_saved_CFLAGS=$CFLAGS
-pkg_link_saved_LIBS=$LIBS
-
-eval "pkg_CFLAGS=\${pkg_cv_[]$1[]_CFLAGS}"
-eval "pkg_LIBS=\${pkg_cv_[]$1[]_LIBS}"
-
-CFLAGS="$CFLAGS $pkg_CFLAGS"
-LIBS="$LIBS $pkg_LIBS"
-
-AC_TRY_LINK([], puts ("");, pkg_link=yes, pkg_link=no)
-
-CFLAGS=$pkg_link_saved_CFLAGS
-LIBS=$pkg_link_saved_LIBS
-
-if test $pkg_link = no ; then
-	$as_echo_n "link failed ... "
-	pkg_failed=yes
-	fi
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
-        _PKG_SHORT_ERRORS_SUPPORTED
-        if test $_pkg_short_errors_supported = yes; then
-	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
-        else
-	        $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-        fi
-	# Put the nasty error message in config.log where it belongs
-	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
-	ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
-		[AC_MSG_RESULT([no])
-                $4])
-elif test $pkg_failed = untried; then
-	ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
-		[$4])
-else
-	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-        AC_MSG_RESULT([yes])
-	ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MOD_VERSION
diff --git a/libs/libsndfile/M4/flexible_array.m4 b/libs/libsndfile/M4/flexible_array.m4
deleted file mode 100644
index 661da17b23..0000000000
--- a/libs/libsndfile/M4/flexible_array.m4
+++ /dev/null
@@ -1,32 +0,0 @@
-dnl @synopsis MN_C99_FLEXIBLE_ARRAY
-dnl
-dnl Dose the compiler support the 1999 ISO C Standard "stuct hack".
-dnl @version 1.1	Mar 15 2004
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-AC_DEFUN([MN_C99_FLEXIBLE_ARRAY],
-[AC_CACHE_CHECK(C99 struct flexible array support, 
-	ac_cv_c99_flexible_array,
-
-# Initialize to unknown
-ac_cv_c99_flexible_array=no
-
-AC_TRY_LINK([[
-	#include <stdlib.h>
-	typedef struct {
-	int k;
-	char buffer [] ;
-	} MY_STRUCT ;
-	]], 
-	[  MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); ],
-	ac_cv_c99_flexible_array=yes,
-	ac_cv_c99_flexible_array=no
-	))]
-) # MN_C99_FLEXIBLE_ARRAY
-
diff --git a/libs/libsndfile/M4/gcc_version.m4 b/libs/libsndfile/M4/gcc_version.m4
deleted file mode 100644
index f8c5cbebe4..0000000000
--- a/libs/libsndfile/M4/gcc_version.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl @synopsis MN_GCC_VERSION
-dnl
-dnl Find the version of gcc.
-dnl @version 1.0	Nov 05 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([MN_GCC_VERSION],
-[
-if test "x$ac_cv_c_compiler_gnu" = "xyes" ; then
-
-	AC_MSG_CHECKING([for version of $CC])
-	GCC_VERSION=`$CC -dumpversion`
-	AC_MSG_RESULT($GCC_VERSION)
-
-	changequote(,)dnl
-	GCC_MAJOR_VERSION=`echo $GCC_VERSION | sed "s/\..*//"`
-	GCC_MINOR_VERSION=`echo $GCC_VERSION | sed "s/$GCC_MAJOR_VERSION\.//" | sed "s/\..*//"`
-	changequote([,])dnl
-	fi
-
-AC_SUBST(GCC_VERSION)
-AC_SUBST(GCC_MAJOR_VERSION)
-AC_SUBST(GCC_MINOR_VERSION)
-
-])# MN_GCC_VERSION
-
diff --git a/libs/libsndfile/M4/llrint.m4 b/libs/libsndfile/M4/llrint.m4
deleted file mode 100644
index 66be206187..0000000000
--- a/libs/libsndfile/M4/llrint.m4
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LLRINT
-dnl
-dnl Check whether C99's llrint function is available.
-dnl @version 1.1	Sep 30 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LLRINT],
-[AC_CACHE_CHECK(for llrint,
-  ac_cv_c99_llrint,
-[
-llrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-#include <stdint.h>
-], int64_t	x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
-
-CFLAGS=$llrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_llrint" = yes; then
-  AC_DEFINE(HAVE_LLRINT, 1,
-            [Define if you have C99's llrint function.])
-fi
-])# MN_C99_FUNC_LLRINT
-
diff --git a/libs/libsndfile/M4/lrint.m4 b/libs/libsndfile/M4/lrint.m4
deleted file mode 100644
index c2c21d60f4..0000000000
--- a/libs/libsndfile/M4/lrint.m4
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LRINT
-dnl
-dnl Check whether C99's lrint function is available.
-dnl @version 1.3	Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LRINT],
-[AC_CACHE_CHECK(for lrint,
-  ac_cv_c99_lrint,
-[
-lrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
-
-CFLAGS=$lrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrint" = yes; then
-  AC_DEFINE(HAVE_LRINT, 1,
-            [Define if you have C99's lrint function.])
-fi
-])# MN_C99_FUNC_LRINT
-
diff --git a/libs/libsndfile/M4/lrintf.m4 b/libs/libsndfile/M4/lrintf.m4
deleted file mode 100644
index 04f4d6603c..0000000000
--- a/libs/libsndfile/M4/lrintf.m4
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LRINTF
-dnl
-dnl Check whether C99's lrintf function is available.
-dnl @version 1.3	Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LRINTF],
-[AC_CACHE_CHECK(for lrintf,
-  ac_cv_c99_lrintf,
-[
-lrintf_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
-
-CFLAGS=$lrintf_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrintf" = yes; then
-  AC_DEFINE(HAVE_LRINTF, 1,
-            [Define if you have C99's lrintf function.])
-fi
-])# MN_C99_FUNC_LRINTF
-
diff --git a/libs/libsndfile/M4/mkoctfile_version.m4 b/libs/libsndfile/M4/mkoctfile_version.m4
deleted file mode 100644
index c17333ea25..0000000000
--- a/libs/libsndfile/M4/mkoctfile_version.m4
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl @synopsis OCTAVE_MKOCTFILE_VERSION
-dnl
-dnl Find the version of mkoctfile.
-dnl @version 1.0	Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([OCTAVE_MKOCTFILE_VERSION],
-[
-
-
-AC_ARG_WITH(mkoctfile,
-	AC_HELP_STRING([--with-mkoctfile], [choose the mkoctfile version]),
-	[ with_mkoctfile=$withval ])
-
-test -z "$with_mkoctfile" && with_mkoctfile=mkoctfile
-
-AC_CHECK_PROG(HAVE_MKOCTFILE,$with_mkoctfile,yes,no)
-
-if test "x$ac_cv_prog_HAVE_MKOCTFILE" = "xyes" ; then
-	MKOCTFILE=$with_mkoctfile
-
-	AC_MSG_CHECKING([for version of $MKOCTFILE])
-	MKOCTFILE_VERSION=`$with_mkoctfile --version 2>&1 | sed 's/mkoctfile, version //g'`
-	AC_MSG_RESULT($MKOCTFILE_VERSION)
-	fi
-
-AC_SUBST(MKOCTFILE)
-AC_SUBST(MKOCTFILE_VERSION)
-
-])# OCTAVE_MKOCTFILE_VERSION
-
diff --git a/libs/libsndfile/M4/octave.m4 b/libs/libsndfile/M4/octave.m4
deleted file mode 100644
index 88d5a5b9b0..0000000000
--- a/libs/libsndfile/M4/octave.m4
+++ /dev/null
@@ -1,143 +0,0 @@
-dnl Evaluate an expression in octave
-dnl
-dnl OCTAVE_EVAL(expr,var) -> var=expr
-dnl
-dnl Stolen from octave-forge
-
-AC_DEFUN([OCTAVE_EVAL],
-[
-AC_MSG_CHECKING([for $1 in $OCTAVE])
-$2=`TERM=;$OCTAVE -qfH --eval "disp($1)"`
-AC_MSG_RESULT($$2)
-AC_SUBST($2)
-]) # OCTAVE_EVAL
-
-dnl @synopsis AC_OCTAVE_VERSION
-dnl
-dnl Find the version of Octave.
-dnl @version 1.0	Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([AC_OCTAVE_VERSION],
-[
-
-AC_ARG_WITH(octave,
-	AC_HELP_STRING([--with-octave], [choose the octave version]),
-	[ with_octave=$withval ])
-
-test -z "$with_octave" && with_octave=octave
-
-AC_CHECK_PROG(HAVE_OCTAVE,$with_octave,yes,no)
-
-if test "x$ac_cv_prog_HAVE_OCTAVE" = "xyes" ; then
-	OCTAVE=$with_octave
-	OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION)
-	fi
-
-AC_SUBST(OCTAVE)
-AC_SUBST(OCTAVE_VERSION)
-
-])# AC_OCTAVE_VERSION
-
-dnl @synopsis AC_OCTAVE_CONFIG_VERSION
-dnl
-dnl Find the version of Octave.
-dnl @version 1.0	Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([AC_OCTAVE_CONFIG_VERSION],
-[
-
-AC_ARG_WITH(octave-config,
-	AC_HELP_STRING([--with-octave-config], [choose the octave-config version]),
-	[ with_octave_config=$withval ])
-
-test -z "$with_octave_config" && with_octave_config=octave-config
-
-AC_CHECK_PROG(HAVE_OCTAVE_CONFIG,$with_octave_config,yes,no)
-
-if test "x$ac_cv_prog_HAVE_OCTAVE_CONFIG" = "xyes" ; then
-	OCTAVE_CONFIG=$with_octave_config
-	AC_MSG_CHECKING([for version of $OCTAVE_CONFIG])
-	OCTAVE_CONFIG_VERSION=`$OCTAVE_CONFIG --version`
-	AC_MSG_RESULT($OCTAVE_CONFIG_VERSION)
-	fi
-
-AC_SUBST(OCTAVE_CONFIG)
-AC_SUBST(OCTAVE_CONFIG_VERSION)
-
-])# AC_OCTAVE_CONFIG_VERSION
-
-dnl @synopsis AC_OCTAVE_BUILD
-dnl
-dnl Check programs and headers required for building octave plugins.
-dnl @version 1.0	Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-
-
-AC_DEFUN([AC_OCTAVE_BUILD],
-[
-
-dnl Default to no.
-OCTAVE_BUILD=no
-
-AC_OCTAVE_VERSION
-OCTAVE_MKOCTFILE_VERSION
-AC_OCTAVE_CONFIG_VERSION
-
-prog_concat="$ac_cv_prog_HAVE_OCTAVE$ac_cv_prog_HAVE_OCTAVE_CONFIG$ac_cv_prog_HAVE_MKOCTFILE"
-
-if test "x$prog_concat" = "xyesyesyes" ; then
-	if test "x$OCTAVE_VERSION" != "x$MKOCTFILE_VERSION" ; then
-		AC_MSG_WARN([** Mismatch between versions of octave and mkoctfile. **])
-		AC_MSG_WARN([** Octave libsndfile modules will not be built.       **])
-	elif test "x$OCTAVE_VERSION" != "x$OCTAVE_CONFIG_VERSION" ; then
-		AC_MSG_WARN([** Mismatch between versions of octave and octave-config. **])
-		AC_MSG_WARN([** Octave libsndfile modules will not be built.           **])
-	else
-		case "$MKOCTFILE_VERSION" in
-			2.*)
-				AC_MSG_WARN([Octave version 2.X is not supported.])
-				;;
-			3.*)
-				OCTAVE_DEST_ODIR=`$OCTAVE_CONFIG --oct-site-dir | sed 's%^/usr%${prefix}%'`
-				OCTAVE_DEST_MDIR=`$OCTAVE_CONFIG --m-site-dir | sed 's%^/usr%${prefix}%'`
-
-				OCTAVE_BUILD=yes
-				;;
-			*)
-				AC_MSG_WARN([Octave version $MKOCTFILE_VERSION is not supported.])
-				;;
-				esac
-		fi
-	AC_MSG_RESULT([building octave libsndfile module... $OCTAVE_BUILD])
-	fi
-
-AC_SUBST(OCTAVE_DEST_ODIR)
-AC_SUBST(OCTAVE_DEST_MDIR)
-
-AC_SUBST(MKOCTFILE)
-
-AM_CONDITIONAL(BUILD_OCTAVE_MOD, test "x$OCTAVE_BUILD" = xyes)
-
-])# AC_OCTAVE_BUILD
diff --git a/libs/libsndfile/M4/really_gcc.m4 b/libs/libsndfile/M4/really_gcc.m4
deleted file mode 100644
index 67aed7802f..0000000000
--- a/libs/libsndfile/M4/really_gcc.m4
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl @synopsis MN_GCC_REALLY_IS_GCC
-dnl
-dnl Find out if a compiler claiming to be gcc really is gcc (fuck you clang).
-dnl @version 1.0	Oct 31 2013
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-# If the configure script has already detected GNU GCC, then make sure it
-# isn't CLANG masquerading as GCC.
-
-AC_DEFUN([MN_GCC_REALLY_IS_GCC],
-[	AC_LANG_ASSERT(C)
-	if test "x$ac_cv_c_compiler_gnu" = "xyes" ; then
-		AC_TRY_LINK([
-			#include <stdio.h>
-			],
-			[
-			#ifdef __clang__
-				This is clang!
-			#endif
-			],
-		ac_cv_c_compiler_gnu=yes,
-		ac_cv_c_compiler_gnu=no
-		)
-		fi
-
-])
diff --git a/libs/libsndfile/M4/stack_protect.m4 b/libs/libsndfile/M4/stack_protect.m4
deleted file mode 100644
index bf27e6e74f..0000000000
--- a/libs/libsndfile/M4/stack_protect.m4
+++ /dev/null
@@ -1,73 +0,0 @@
-dnl Copyright (C) 2013  Xiph.org Foundation
-dnl
-dnl Redistribution and use in source and binary forms, with or without
-dnl modification, are permitted provided that the following conditions
-dnl are met:
-dnl
-dnl - Redistributions of source code must retain the above copyright
-dnl notice, this list of conditions and the following disclaimer.
-dnl
-dnl - Redistributions in binary form must reproduce the above copyright
-dnl notice, this list of conditions and the following disclaimer in the
-dnl documentation and/or other materials provided with the distribution.
-dnl
-dnl - Neither the name of the Xiph.org Foundation nor the names of its
-dnl contributors may be used to endorse or promote products derived from
-dnl this software without specific prior written permission.
-dnl
-dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-dnl ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-dnl A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-dnl CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-dnl Want to know of GCC stack protector works, botfor the C and for the C++
-dnl compiler.
-dnl
-dnl Just checking if the compiler accepts the required CFLAGSs is not enough
-dnl because we have seen at least one instance where this check was
-dnl in-sufficient.
-dnl
-dnl Instead, try to compile and link a test program with the stack protector
-dnl flags. If that works, we use it.
-
-AC_DEFUN([XIPH_GCC_STACK_PROTECTOR],
-[AC_LANG_ASSERT(C)
-	AC_MSG_CHECKING([if $CC supports stack smash protection])
-	xiph_stack_check_old_cflags="$CFLAGS"
-	SSP_FLAGS="-fstack-protector --param ssp-buffer-size=4"
-	CFLAGS=$SSP_FLAGS
-	AC_TRY_LINK([
-			#include <stdio.h>
-			],
-		[puts("Hello, World!"); return 0;],
-		AC_MSG_RESULT([yes])
-			CFLAGS="$xiph_stack_check_old_cflags $SSP_FLAGS",
-		AC_MSG_RESULT([no])
-			CFLAGS="$xiph_stack_check_old_cflags"
-		)
-])# XIPH_GCC_STACK_PROTECTOR
-
-AC_DEFUN([XIPH_GXX_STACK_PROTECTOR],
-[AC_LANG_PUSH([C++])
-	AC_MSG_CHECKING([if $CXX supports stack smash protection])
-	xiph_stack_check_old_cflags="$CFLAGS"
-	SSP_FLAGS="-fstack-protector --param ssp-buffer-size=4"
-	CFLAGS=$SSP_FLAGS
-	AC_TRY_LINK([
-			#include <cstdio>
-			],
-		[puts("Hello, World!"); return 0;],
-		AC_MSG_RESULT([yes])
-			CFLAGS="$xiph_stack_check_old_cflags $SSP_FLAGS",
-		AC_MSG_RESULT([no])
-			CFLAGS="$xiph_stack_check_old_cflags"
-		)
-	AC_LANG_POP([C++])
-])# XIPH_GXX_STACK_PROTECTOR
diff --git a/libs/libsndfile/Makefile.am b/libs/libsndfile/Makefile.am
deleted file mode 100644
index a429c5b3fa..0000000000
--- a/libs/libsndfile/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-ACLOCAL_AMFLAGS = -I M4
-
-DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror
-
-if BUILD_OCTAVE_MOD
-octave_dir = Octave
-endif
-
-SUBDIRS = M4 Win32 src $(octave_dir) 
-#man doc examples regtest tests programs
-
-DIST_SUBDIRS = M4 man doc Win32 src Octave examples regtest tests programs
-
-EXTRA_DIST = libsndfile.spec.in sndfile.pc.in Scripts/android-configure.sh \
-	Scripts/linux-to-win-cross-configure.sh Scripts/build-test-tarball.mk.in
-
-CLEANFILES = *~
-
-#pkgconfig_DATA = sndfile.pc
-
-m4datadir = $(datadir)/aclocal
-
-#===============================================================================
-
-test: check-recursive
-
-# Target to make autogenerated files.
-genfiles :
-	(cd src ; make genfiles)
-#	(cd tests ; make genfiles)
-
-checkprograms :
-	(cd src ; make libsndfile.la checkprograms)
-#	(cd tests ; make checkprograms)
-
-testprogs :
-	(cd src ; make testprogs)
-#	(cd tests ; make testprogs)
-
-
-test-tarball : Scripts/build-test-tarball.mk
-	(cd src ; make all libsndfile.la checkprograms)
-#	(cd tests ; make all checkprograms)
-#	make -f Scripts/build-test-tarball.mk
diff --git a/libs/libsndfile/Mingw-make-dist.sh b/libs/libsndfile/Mingw-make-dist.sh
deleted file mode 100755
index f2a6474233..0000000000
--- a/libs/libsndfile/Mingw-make-dist.sh
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2006 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-set -e
-
-function unix_to_dos {
-	sed -e "s/\n/\r\n/" $1 > temp_file
-	mv -f temp_file $1
-}
-
-if [ $# -lt 1 ] || [ $# -gt 2 ]; then
-	echo "Usage : Mingw-make-dist.sh <source tarball>."
-	exit 1
-	fi
-
-TARGZ=$1
-if [ ! -f $TARGZ ]; then
-	echo "Can't find source tarball."
-	fi
-
-TARGZ=$1
-if [ ! -f $TARGZ.asc ]; then
-	echo "Can't find source tarball signature."
-	fi
-
-UNAME=`uname -s`
-if [ x$UNAME != "xMINGW32_NT-5.1" ]; then
-	echo "Not able to build Win32 binaries on this platform."
-	fi
-
-echo "Building MinGW binary/source zip file."
-
-VERSION=`pwd | sed -e "s#.*/##" | sed -e s/libsndfile-//`
-BUILD=`echo $VERSION | sed -e "s/\./_/g"`
-INSTALL="libsndfile-$BUILD"
-ZIPNAME="$INSTALL.zip"
-
-if [ -z "$BUILD" ]; then
-	echo "Bad BUILD variable : '$BUILD'"
-	exit 1
-	fi
-
-if [ ! -d $INSTALL/ ];  then
-	mkdir $INSTALL
-	fi
-
-if [ ! -f config.status ]; then
-	./configure --prefix=`pwd`/$INSTALL/
-else
-	teststr=`grep "with options" config.status | grep -- --prefix=`
-	if [ -z "$teststr" ]; then
-		# --disable-static doesn't work.
-		./configure --prefix=`pwd`/$INSTALL/
-		fi
-	fi
-
-if [ ! -f src/.libs/libsndfile-1.dll ]; then
-	make all check
-	fi
-
-if [ ! -f $INSTALL/bin/libsndfile-1.dll ]; then
-	make install
-	rm -f $INSTALL/bin/sndfile-regtest.exe
-	strip $INSTALL/bin/*.*
-	mv $INSTALL/bin/*.* $INSTALL/include/*.* $INSTALL/
-	rmdir $INSTALL/bin
-	rm -rf $INSTALL/lib
-	rmdir $INSTALL/include
-	cp src/libsndfile.def $INSTALL/libsndfile-1.def
-	cp Win32/README-precompiled-dll.txt Win32/testprog.c $INSTALL/
-	unix_to_dos $INSTALL/libsndfile-1.def
-	unix_to_dos $INSTALL/sndfile.h
-	unix_to_dos $INSTALL/README-precompiled-dll.txt
-	unix_to_dos $INSTALL/testprog.c
-	fi
-
-if [ ! -f $INSTALL/libsndfile-$VERSION.tar.gz ]; then
-	cp $TARGZ $INSTALL/
-	if [ -f $TARGZ.asc ]; then
-		cp $TARGZ.asc $INSTALL/
-		fi
-	fi
-
-if [ ! -f $ZIPNAME ]; then
-	zip -r $ZIPNAME $INSTALL/
-	fi
-
diff --git a/libs/libsndfile/NEWS b/libs/libsndfile/NEWS
deleted file mode 100644
index 9626d45166..0000000000
--- a/libs/libsndfile/NEWS
+++ /dev/null
@@ -1,175 +0,0 @@
-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/libs/libsndfile/Octave/Makefile.am b/libs/libsndfile/Octave/Makefile.am
deleted file mode 100644
index 3f0078e18f..0000000000
--- a/libs/libsndfile/Octave/Makefile.am
+++ /dev/null
@@ -1,79 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# Prevent any extension.
-EXEEXT =
-
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-EXTRA_DIST = sndfile_load.m sndfile_save.m sndfile_play.m \
-	octave_test.m octave_test.sh $(oct_module_srcs) PKG_ADD
-
-octconfigdir = $(exec_prefix)/share/octave/site/m
-octconfig_DATA = sndfile_load.m sndfile_save.m sndfile_play.m
-
-OCTAVE_DEST_MDIR = @OCTAVE_DEST_MDIR@
-OCTAVE_DEST_ODIR = @OCTAVE_DEST_ODIR@/sndfile
-
-OCT_CXXFLAGS = @OCT_CXXFLAGS@
-OCT_LIB_DIR = @OCT_LIB_DIR@
-OCT_LIBS = @OCT_LIBS@
-
-SNDFILEDIR = $(top_builddir)/src
-AM_CPPFLAGS = -I$(SNDFILEDIR)
-
-oct_module_srcs = sndfile.cc
-oct_module_files = sndfile.oct PKG_ADD
-
-# Make these noinst so they can be installed manually.
-noinst_DATA = $(oct_module_files)
-
-
-# Used by shave which cleans up automake generated Makefile output.
-V         = @
-Q         = $(V:1=)
-QUIET_GEN = $(Q:@=@echo '  GEN   '$@;)
-
-
-# Use Octave's mkoctfile to do all the heavy lifting. Unfortunately, its
-# a little dumb so we need to guide it carefully.
-sndfile.oct : sndfile.o
-	$(QUIET_GEN) $(MKOCTFILE) -v $(INCLUDES) $(top_builddir)/Octave/$+ -L$(SNDFILEDIR)/.libs -L$(SNDFILEDIR) -lsndfile -o $(top_builddir)/Octave/$@ > /dev/null
-
-sndfile.o : sndfile.cc
-	$(QUIET_GEN) $(MKOCTFILE) -v $(INCLUDES) -c $+ -o $(top_builddir)/Octave/$@ > /dev/null
-
-# Allow for the test being run in the build dir, but the test script
-# being located in the source dir.
-check :
-	octave_src_dir=$(srcdir) $(srcdir)/octave_test.sh
-
-
-# Since the octave modules are installed in a special location, a custom install
-# and uninstall routine must be specified.
-install-exec-local : $(oct_module_files)
-	@$(NORMAL_INSTALL)
-	test -z "$(OCTAVE_DEST_ODIR)" || $(mkdir_p) "$(DESTDIR)$(OCTAVE_DEST_ODIR)"
-	@list='$(oct_module_files)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	     || test -f $$p1 \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL) '$$p' '$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL) "$$p" "$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f" || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-local :
-	@$(NORMAL_UNINSTALL)
-	@list='$(oct_module_files)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f'"; \
-	  rm -f "$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f"; \
-	done
-
-clean-local :
-	rm -f sndfile.o sndfile.oct
-	@if test $(abs_builddir) != $(abs_srcdir) ; then rm -f PKG_ADD ; fi
diff --git a/libs/libsndfile/Octave/PKG_ADD b/libs/libsndfile/Octave/PKG_ADD
deleted file mode 100644
index 3efd688550..0000000000
--- a/libs/libsndfile/Octave/PKG_ADD
+++ /dev/null
@@ -1,3 +0,0 @@
-autoload ("sfread", "sndfile.oct");
-autoload ("sfversion", "sndfile.oct");
-autoload ("sfwrite", "sndfile.oct");
diff --git a/libs/libsndfile/Octave/Readme.txt b/libs/libsndfile/Octave/Readme.txt
deleted file mode 100644
index c38605bffc..0000000000
--- a/libs/libsndfile/Octave/Readme.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-The libsndfile Modules for GNU Octave
-=====================================
-
-These modules are currently known to work with version 3.0 of GNU Octave on
-Linux. They have not been tested elsewhere.
-
-
-Build Requirements
-------------------
-
-In order to build these libsndfile related modules for GNU Octave on a Debian
-GNU/Linux (or Debian derived) system, you will need (on top of what is normally
-required to build libsndfile) the package:
-
-	octaveX.Y-headers
-
-where X.Y matches the version number of your installation of GNU Octave.
-
-The configure script in the top level libsndfile directory will detect the 
-presence and correct versions of the Octave build tools. The building of these
-modules will only go ahead if everything is correct.
-
-
diff --git a/libs/libsndfile/Octave/format.h b/libs/libsndfile/Octave/format.h
deleted file mode 100644
index ce769b2c69..0000000000
--- a/libs/libsndfile/Octave/format.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-int format_of_str (const std::string & fmt) ;
-
-void string_of_format (std::string & fmt, int format) ;
diff --git a/libs/libsndfile/Octave/octave_test.m b/libs/libsndfile/Octave/octave_test.m
deleted file mode 100644
index 25a922e897..0000000000
--- a/libs/libsndfile/Octave/octave_test.m
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# These tests are nowhere near comprehensive.
-
-printf ("    Running Octave tests                     : ") ;
-fflush (stdout) ;
-
-filename = "whatever" ;
-srate_out = 32000 ;
-fmt_out = "wav-float" ;
-
-t = (2 * pi / srate_out * (0:srate_out-1))' ;
-data_out = sin (440.0 * t) ;
-
-# Write out a file.
-sfwrite (filename, data_out, srate_out, fmt_out) ;
-
-# Read it back in again.
-[ data_in, srate_in, fmt_in ] = sfread (filename) ;
-
-if (srate_in != srate_out)
-	error ("\n\nSample rate mismatch : %d -> %d.\n\n", srate_out, srate_in) ;
-	endif
-
-# Octave strcmp return 1 for the same.
-if (strcmp (fmt_in, fmt_out) != 1)
-	error ("\n\nFormat error : '%s' -> '%s'.\n\n", fmt_out, fmt_in) ;
-	endif
-
-err = max (abs (data_out - data_in)) ;
-
-if (err > 1e-7)
-	error ("err : %g\n", err) ;
-	endif
-
-printf ("ok") ;
-
-unlink (filename) ;
diff --git a/libs/libsndfile/Octave/octave_test.sh b/libs/libsndfile/Octave/octave_test.sh
deleted file mode 100755
index 3c6f36e236..0000000000
--- a/libs/libsndfile/Octave/octave_test.sh
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/bash
-
-
-# Check where we're being run from.
-if test -d Octave ; then
-	cd Octave
-	octave_src_dir=$(pwd)
-elif test -z "$octave_src_dir" ; then
-	echo
-	echo "Error : \$octave_src_dir is undefined."
-	echo
-	exit 1
-else
-	octave_src_dir=$(cd $octave_src_dir && pwd)
-	fi
-
-# Find libsndfile shared object.
-libsndfile_lib_location=""
-
-if test -f "../src/.libs/libsndfile.so" ; then
-	libsndfile_lib_location="../src/.libs/"
-elif test -f "../src/libsndfile.so" ; then
-	libsndfile_lib_location="../src/"
-elif test -f "../src/.libs/libsndfile.dylib" ; then
-	libsndfile_lib_location="../src/.libs/"
-elif test -f "../src/libsndfile.dylib" ; then
-	libsndfile_lib_location="../src/"
-else
-	echo
-	echo "Not able to find the libsndfile shared lib we've just built."
-	echo "This may cause the following test to fail."
-	echo
-	fi
-
-libsndfile_lib_location=`(cd $libsndfile_lib_location && pwd)`
-
-
-# Find sndfile.oct
-sndfile_oct_location=""
-
-if test -f .libs/sndfile.oct ; then
-	sndfile_oct_location=".libs"
-elif test -f sndfile.oct ; then
-	sndfile_oct_location="."
-else
-	echo "Not able to find the sndfile.oct binaries we've just built."
-	exit 1
-	fi
-
-case `file -b $sndfile_oct_location/sndfile.oct` in
-	ELF*)
-		;;
-	Mach*)
-		echo "Tests don't work on this platform."
-		exit 0
-		;;
-	*)
-		echo "Not able to find the sndfile.oct binary we just built."
-		exit 1
-		;;
-	esac
-
-
-# Make sure the TERM environment variable doesn't contain anything wrong.
-unset TERM
-# echo "octave_src_dir : $octave_src_dir"
-# echo "libsndfile_lib_location : $libsndfile_lib_location"
-# echo "sndfile_oct_location : $sndfile_oct_location"
-
-if test ! -f PKG_ADD ; then
-	cp $octave_src_dir/PKG_ADD .
-	fi
-
-export LD_LIBRARY_PATH="$libsndfile_lib_location:$LD_LIBRARY_PATH"
-
-octave_script="$octave_src_dir/octave_test.m"
-
-(cd $sndfile_oct_location && octave -qH $octave_script)
-res=$?
-echo
-exit $res
diff --git a/libs/libsndfile/Octave/sndfile.cc b/libs/libsndfile/Octave/sndfile.cc
deleted file mode 100644
index 6e9cd44cc9..0000000000
--- a/libs/libsndfile/Octave/sndfile.cc
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <octave/oct.h>
-
-#include "sndfile.h"
-
-#define FOUR_GIG 		(0x100000000LL)
-#define	BUFFER_FRAMES	8192
-
-
-static int format_of_str (const std::string & fmt) ;
-static void string_of_format (std::string & fmt, int format) ;
-
-
-DEFUN_DLD (sfversion, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{version} =} sfversion ()\n\
-@cindex Reading sound files\n\
-Return a string containing the libsndfile version.\n\
-@seealso{sfread, sfwrite}\n\
-@end deftypefn")
-{	char buffer [256] ;
-	octave_value_list retval ;
-
-	/* Bail out if the input parameters are bad. */
-	if (args.length () != 0 || nargout > 1)
-	{	print_usage () ;
-		return retval ;
-		} ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-
-	std::string version (buffer) ;
-
-	retval.append (version) ;
-	return retval ;
-} /* sfversion */
-
-
-DEFUN_DLD (sfread, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{data},@var{srate},@var{format} =} sfread (@var{filename})\n\
-@cindex Reading sound files\n\
-Read a sound file from disk using libsndfile.\n\
-@seealso{sfversion, sfwrite}\n\
-@end deftypefn")
-{	SNDFILE * file ;
-	SF_INFO sfinfo ;
-
-	octave_value_list retval ;
-
-	int nargin  = args.length () ;
-
-	/* Bail out if the input parameters are bad. */
-	if ((nargin != 1) || !args (0) .is_string () || nargout < 1 || nargout > 3)
-	{	print_usage () ;
-		return retval ;
-		} ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	std::string filename = args (0).string_value () ;
-
-	if ((file = sf_open (filename.c_str (), SFM_READ, &sfinfo)) == NULL)
-	{	error ("sfread: couldn't open file %s : %s", filename.c_str (), sf_strerror (NULL)) ;
-		return retval ;
-		} ;
-
-	if (sfinfo.frames > FOUR_GIG)
-		printf ("This is a really huge file (%lld frames).\nYou may run out of memory trying to load it.\n", (long long) sfinfo.frames) ;
-
-	dim_vector dim = dim_vector () ;
-	dim.resize (2) ;
-	dim (0) = sfinfo.frames ;
-	dim (1) = sfinfo.channels ;
-
-	/* Should I be using Matrix instead? */
-	NDArray out (dim, 0.0) ;
-
-	float buffer [BUFFER_FRAMES * sfinfo.channels] ;
-	int readcount ;
-	sf_count_t total = 0 ;
-
-	do
-	{	readcount = sf_readf_float (file, buffer, BUFFER_FRAMES) ;
-
-		/* Make sure we don't read more frames than we allocated. */
-		if (total + readcount > sfinfo.frames)
-			readcount = sfinfo.frames - total ;
-
-		for (int ch = 0 ; ch < sfinfo.channels ; ch++)
-		{	for (int k = 0 ; k < readcount ; k++)
-				out (total + k, ch) = buffer [k * sfinfo.channels + ch] ;
-			} ;
-
-		total += readcount ;
-	} while (readcount > 0 && total < sfinfo.frames) ;
-
-	retval.append (out.squeeze ()) ;
-
-	if (nargout >= 2)
-		retval.append ((octave_uint32) sfinfo.samplerate) ;
-
-	if (nargout >= 3)
-	{	std::string fmt ("") ;
-		string_of_format (fmt, sfinfo.format) ;
-		retval.append (fmt) ;
-		} ;
-
-	/* Clean up. */
-	sf_close (file) ;
-
-	return retval ;
-} /* sfread */
-
-DEFUN_DLD (sfwrite, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Function File} sfwrite (@var{filename},@var{data},@var{srate},@var{format})\n\
-Write a sound file to disk using libsndfile.\n\
-@seealso{sfread, sfversion}\n\
-@end deftypefn\n\
-")
-{	SNDFILE * file ;
-	SF_INFO sfinfo ;
-
-    octave_value_list retval ;
-
-    int nargin  = args.length () ;
-
-    /* Bail out if the input parameters are bad. */
-    if (nargin != 4 || !args (0).is_string () || !args (1).is_real_matrix ()
-			|| !args (2).is_real_scalar () || !args (3).is_string ()
-			|| nargout != 0)
-	{	print_usage () ;
-		return retval ;
-    	} ;
-
-    std::string filename = args (0).string_value () ;
-    std::string format = args (3).string_value () ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	sfinfo.format = format_of_str (format) ;
-	if (sfinfo.format == 0)
-	{	error ("Bad format '%s'", format.c_str ()) ;
-		return retval ;
-		} ;
-
-	sfinfo.samplerate = lrint (args (2).scalar_value ()) ;
-	if (sfinfo.samplerate < 1)
-	{	error ("Bad sample rate : %d.\n", sfinfo.samplerate) ;
-		return retval ;
-		} ;
-
-	Matrix data = args (1).matrix_value () ;
-	long rows = args (1).rows () ;
-	long cols = args (1).columns () ;
-
-	if (cols > rows)
-	{	error ("Audio data should have one column per channel, but supplied data "
-				"has %ld rows and %ld columns.\n", rows, cols) ;
-		return retval ;
-		} ;
-
-	sfinfo.channels = cols ;
-
-    if ((file = sf_open (filename.c_str (), SFM_WRITE, &sfinfo)) == NULL)
-	{	error ("Couldn't open file %s : %s", filename.c_str (), sf_strerror (NULL)) ;
-		return retval ;
-    	} ;
-
-	float buffer [BUFFER_FRAMES * sfinfo.channels] ;
-	int writecount ;
-	long total = 0 ;
-
-	do
-	{
-		writecount = BUFFER_FRAMES ;
-
-		/* Make sure we don't read more frames than we allocated. */
-		if (total + writecount > rows)
-			writecount = rows - total ;
-
-		for (int ch = 0 ; ch < sfinfo.channels ; ch++)
-		{	for (int k = 0 ; k < writecount ; k++)
-				buffer [k * sfinfo.channels + ch] = data (total + k, ch) ;
-			} ;
-
-		if (writecount > 0)
-			sf_writef_float (file, buffer, writecount) ;
-
-		total += writecount ;
-	} while (writecount > 0 && total < rows) ;
-
-    /* Clean up. */
-    sf_close (file) ;
-
-    return retval ;
-} /* sfwrite */
-
-
-static void
-str_split (const std::string & str, const std::string & delim, std::vector <std::string> & output)
-{
-    unsigned int offset = 0 ;
-    size_t delim_index = 0 ;
-
-    delim_index = str.find (delim, offset) ;
-
-    while (delim_index != std::string::npos)
-    {
-        output.push_back (str.substr(offset, delim_index - offset)) ;
-        offset += delim_index - offset + delim.length () ;
-        delim_index = str.find (delim, offset) ;
-    }
-
-    output.push_back (str.substr (offset)) ;
-} /* str_split */
-
-static int
-hash_of_str (const std::string & str)
-{
-	int hash = 0 ;
-
-	for (unsigned k = 0 ; k < str.length () ; k++)
-		hash = (hash * 3) + tolower (str [k]) ;
-
-	return hash ;
-} /* hash_of_str */
-
-static int
-major_format_of_hash (const std::string & str)
-{	int hash ;
-
-	hash = hash_of_str (str) ;
-
-	switch (hash)
-	{
-		case 0x5c8 : /* 'wav' */ return SF_FORMAT_WAV ;
-		case 0xf84 : /* 'aiff' */ return SF_FORMAT_AIFF ;
-		case 0x198 : /* 'au' */ return SF_FORMAT_AU ;
-		case 0x579 : /* 'paf' */ return SF_FORMAT_PAF ;
-		case 0x5e5 : /* 'svx' */ return SF_FORMAT_SVX ;
-		case 0x1118 : /* 'nist' */ return SF_FORMAT_NIST ;
-		case 0x5d6 : /* 'voc' */ return SF_FORMAT_VOC ;
-		case 0x324a : /* 'ircam' */ return SF_FORMAT_IRCAM ;
-		case 0x505 : /* 'w64' */ return SF_FORMAT_W64 ;
-		case 0x1078 : /* 'mat4' */ return SF_FORMAT_MAT4 ;
-		case 0x1079 : /* 'mat5' */ return SF_FORMAT_MAT5 ;
-		case 0x5b8 : /* 'pvf' */ return SF_FORMAT_PVF ;
-		case 0x1d1 : /* 'xi' */ return SF_FORMAT_XI ;
-		case 0x56f : /* 'htk' */ return SF_FORMAT_HTK ;
-		case 0x5aa : /* 'sds' */ return SF_FORMAT_SDS ;
-		case 0x53d : /* 'avr' */ return SF_FORMAT_AVR ;
-		case 0x11d0 : /* 'wavx' */ return SF_FORMAT_WAVEX ;
-		case 0x569 : /* 'sd2' */ return SF_FORMAT_SD2 ;
-		case 0x1014 : /* 'flac' */ return SF_FORMAT_FLAC ;
-		case 0x504 : /* 'caf' */ return SF_FORMAT_CAF ;
-		case 0x5f6 : /* 'wve' */ return SF_FORMAT_WVE ;
-		default : break ;
-		} ;
-
-	printf ("%s : hash '%s' -> 0x%x\n", __func__, str.c_str (), hash) ;
-
-	return 0 ;
-} /* major_format_of_hash */
-
-static int
-minor_format_of_hash (const std::string & str)
-{	int hash ;
-
-	hash = hash_of_str (str) ;
-
-	switch (hash)
-	{
-		case 0x1085 : /* 'int8' */ return SF_FORMAT_PCM_S8 ;
-		case 0x358a : /* 'uint8' */ return SF_FORMAT_PCM_U8 ;
-		case 0x31b0 : /* 'int16' */ return SF_FORMAT_PCM_16 ;
-		case 0x31b1 : /* 'int24' */ return SF_FORMAT_PCM_24 ;
-		case 0x31b2 : /* 'int32' */ return SF_FORMAT_PCM_32 ;
-		case 0x3128 : /* 'float' */ return SF_FORMAT_FLOAT ;
-		case 0x937d : /* 'double' */ return SF_FORMAT_DOUBLE ;
-		case 0x11bd : /* 'ulaw' */ return SF_FORMAT_ULAW ;
-		case 0xfa1 : /* 'alaw' */ return SF_FORMAT_ALAW ;
-		case 0xfc361 : /* 'ima_adpcm' */ return SF_FORMAT_IMA_ADPCM ;
-		case 0x5739a : /* 'ms_adpcm' */ return SF_FORMAT_MS_ADPCM ;
-		case 0x9450 : /* 'gsm610' */ return SF_FORMAT_GSM610 ;
-		case 0x172a3 : /* 'g721_32' */ return SF_FORMAT_G721_32 ;
-		case 0x172d8 : /* 'g723_24' */ return SF_FORMAT_G723_24 ;
-		case 0x172da : /* 'g723_40' */ return SF_FORMAT_G723_40 ;
-		default : break ;
-		} ;
-
-	printf ("%s : hash '%s' -> 0x%x\n", __func__, str.c_str (), hash) ;
-
-	return 0 ;
-} /* minor_format_of_hash */
-
-
-static const char *
-string_of_major_format (int format)
-{
-	switch (format & SF_FORMAT_TYPEMASK)
-	{
-		case SF_FORMAT_WAV : return "wav" ;
-		case SF_FORMAT_AIFF : return "aiff" ;
-		case SF_FORMAT_AU : return "au" ;
-		case SF_FORMAT_PAF : return "paf" ;
-		case SF_FORMAT_SVX : return "svx" ;
-		case SF_FORMAT_NIST : return "nist" ;
-		case SF_FORMAT_VOC : return "voc" ;
-		case SF_FORMAT_IRCAM : return "ircam" ;
-		case SF_FORMAT_W64 : return "w64" ;
-		case SF_FORMAT_MAT4 : return "mat4" ;
-		case SF_FORMAT_MAT5 : return "mat5" ;
-		case SF_FORMAT_PVF : return "pvf" ;
-		case SF_FORMAT_XI : return "xi" ;
-		case SF_FORMAT_HTK : return "htk" ;
-		case SF_FORMAT_SDS : return "sds" ;
-		case SF_FORMAT_AVR : return "avr" ;
-		case SF_FORMAT_WAVEX : return "wavx" ;
-		case SF_FORMAT_SD2 : return "sd2" ;
-		case SF_FORMAT_FLAC : return "flac" ;
-		case SF_FORMAT_CAF : return "caf" ;
-		case SF_FORMAT_WVE : return "wfe" ;
-		default : break ;
-		} ;
-
-	return "unknown" ;
-} /* string_of_major_format */
-
-static const char *
-string_of_minor_format (int format)
-{
-	switch (format & SF_FORMAT_SUBMASK)
-	{
-		case SF_FORMAT_PCM_S8 : return "int8" ;
-		case SF_FORMAT_PCM_U8 : return "uint8" ;
-		case SF_FORMAT_PCM_16 : return "int16" ;
-		case SF_FORMAT_PCM_24 : return "int24" ;
-		case SF_FORMAT_PCM_32 : return "int32" ;
-		case SF_FORMAT_FLOAT : return "float" ;
-		case SF_FORMAT_DOUBLE : return "double" ;
-		case SF_FORMAT_ULAW : return "ulaw" ;
-		case SF_FORMAT_ALAW : return "alaw" ;
-		case SF_FORMAT_IMA_ADPCM : return "ima_adpcm" ;
-		case SF_FORMAT_MS_ADPCM : return "ms_adpcm" ;
-		case SF_FORMAT_GSM610 : return "gsm610" ;
-		case SF_FORMAT_G721_32 : return "g721_32" ;
-		case SF_FORMAT_G723_24 : return "g723_24" ;
-		case SF_FORMAT_G723_40 : return "g723_40" ;
-		default : break ;
-		} ;
-
-	return "unknown" ;
-} /* string_of_minor_format */
-
-static int
-format_of_str (const std::string & fmt)
-{
-	std::vector <std::string> split ;
-
-	str_split (fmt, "-", split) ;
-
-	if (split.size () != 2)
-		return 0 ;
-
-	int major_fmt = major_format_of_hash (split.at (0)) ;
-	if (major_fmt == 0)
-		return 0 ;
-
-	int minor_fmt = minor_format_of_hash (split.at (1)) ;
-	if (minor_fmt == 0)
-		return 0 ;
-
-	return major_fmt | minor_fmt ;
-} /* format_of_str */
-
-static void
-string_of_format (std::string & fmt, int format)
-{
-	char buffer [64] ;
-
-	snprintf (buffer, sizeof (buffer), "%s-%s", string_of_major_format (format), string_of_minor_format (format)) ;
-
-	fmt = buffer ;
-
-	return ;
-} /* string_of_format */
diff --git a/libs/libsndfile/Octave/sndfile_load.m b/libs/libsndfile/Octave/sndfile_load.m
deleted file mode 100644
index c66198fa35..0000000000
--- a/libs/libsndfile/Octave/sndfile_load.m
+++ /dev/null
@@ -1,52 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_load (@var{filename})
-## Load data from the file given by @var{filename}.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Load the sound data from the given file name
-
-function [data fs] = sndfile_load (filename)
-
-if (nargin != 1),
-	error ("Need an input filename") ;
-	endif
-
-samplerate = -1 ;
-samplingrate = -1 ;
-wavedata = -1 ;
-
-
-eval (sprintf ('load -f %s', filename)) ;
-
-if (samplerate > 0),
-	fs = samplerate ;
-elseif (samplingrate > 0),
-	fs = samplingrate ;
-else
-	error ("Not able to find sample rate.") ;
-	endif
-
-if (max (size (wavedata)) > 1),
-	data = wavedata ;
-else
-	error ("Not able to find waveform data.") ;
-	endif
-
-endfunction
diff --git a/libs/libsndfile/Octave/sndfile_play.m b/libs/libsndfile/Octave/sndfile_play.m
deleted file mode 100644
index e8a34a74cb..0000000000
--- a/libs/libsndfile/Octave/sndfile_play.m
+++ /dev/null
@@ -1,59 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_play (@var{data, fs})
-## Play @var{data} at sample rate @var{fs} using the sndfile-play
-## program.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Play the given data as a sound file
-
-function sndfile_play (data, fs)
-
-if nargin != 2,
-	error ("Need two input arguments: data and fs.") ;
-	endif
-
-if (max (size (fs)) > 1),
-	error ("Second parameter fs must be a single value.") ;
-	endif
-
-[nr nc] = size (data) ;
-
-if (nr > nc),
-	data = data' ;
-	endif
-
-samplerate = fs ;
-wavedata = data ;
-
-filename = tmpnam () ;
-
-cmd = sprintf ("save -mat-binary %s fs data", filename) ;
-
-eval (cmd) ;
-
-cmd = sprintf ("sndfile-play %s", filename) ;
-
-[output, status] = system (cmd) ;
-
-if (status),
-	disp (outout) ;
-	endif
-
-endfunction
diff --git a/libs/libsndfile/Octave/sndfile_save.m b/libs/libsndfile/Octave/sndfile_save.m
deleted file mode 100644
index 5b7e7c7d0f..0000000000
--- a/libs/libsndfile/Octave/sndfile_save.m
+++ /dev/null
@@ -1,53 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_save (@var{filename, data, fs})
-## Save the given @var{data} as audio data to the given at @var{fs}. Set
-## the sample rate to @var{fs}.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Save data as a sound file
-
-function sndfile_save (filename, data, fs)
-
-if nargin != 3,
-	error ("Need three input arguments: filename, data and fs.") ;
-	endif
-
-if (! isstr (filename)),
-	error ("First parameter 'filename' is must be a string.") ;
-	endif
-
-if (max (size (fs)) > 1),
-	error ("Second parameter 'fs' must be a single value, not an array or matrix.") ;
-	endif
-
-[nr nc] = size (data) ;
-
-if (nr > nc),
-	data = data' ;
-	endif
-
-samplerate = fs ;
-wavedata = data ;
-
-str = sprintf ("save -mat-binary %s samplerate wavedata", filename) ;
-
-eval (str) ;
-
-endfunction
diff --git a/libs/libsndfile/README b/libs/libsndfile/README
deleted file mode 100644
index 8df79c7d9f..0000000000
--- a/libs/libsndfile/README
+++ /dev/null
@@ -1,68 +0,0 @@
-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.
-
-The src/ALAC directory contains code written and released by Apple Inc and
-released under the Apache 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/libs/libsndfile/README.md b/libs/libsndfile/README.md
deleted file mode 100644
index a7fdaea71f..0000000000
--- a/libs/libsndfile/README.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# libsndfile
-
-libsndfile is a C library for reading and writing files containing sampled audio
-data.
-
-## Hacking
-
-The canonical source code repository for libsndfile is at
-[https://github.com/erikd/libsndfile/][github].
-
-You can grab the source code using:
-
-    $ git clone git://github.com/erikd/libsndfile.git
-
-Building on Linux, OSX and Windows (Using GNU GCC) will require a number of GNU
-and other Free and Open Source Software tools including:
-
-* [Autoconf][autoconf]
-* [Autogen][autogen]
-* [Automake][automake]
-* [Libtool][libtool]
-* [Pkgconfig][pkgconfig]
-* [Python][python]
-
-If you are on Linux, its probably best to install these via your Linux
-distribution's package manager.
-
-If you want to compile libsndfile with support for formats like FLAC and
-Ogg/Vorbis you will also need to install the following optional libraries:
-
-* [FLAC][flac]
-* [libogg][libogg]
-* [libvorbis][libvorbis]
-
-Support for these extra libraries is an all or nothing affair. Unless all of
-them are installed none of them will be supported.
-
-    $ ./autogen.sh
-
-Running `autogen.sh` also installs a git pre-commit hook. The pre-commit hook
-is run each time a user tries to commit and checks code about to be committed
-against coding guidelines.
-
-Nest step is to run configure, with the following configure options being
-recommended for anyone contemplating sending libsndfile patches:
-
-    $ ./configure --enable-gcc-werror
-
-Finally libsndfile can be built and tested:
-
-    $ make
-    $ make check
-
-## Submitting Patches.
-
-* Patches should pass all pre-commit hook tests.
-* Patches should always be submitted via a either Github "pull request" or a
-  via emailed patches created using "git format-patch".
-* Patches for new features should include tests and documentation.
-* Patches to fix bugs should either pass all tests, or modify the tests in some
-  sane way.
-* When a new feature is added for a particular file format and that feature
-  makes sense for other formats, then it should also be implemented for one
-  or two of the other formats.
-
-
-
-
-
-[autoconf]: http://www.gnu.org/s/autoconf/
-[autogen]: http://www.gnu.org/s/autogen/
-[automake]: http://www.gnu.org/software/automake/
-[flac]: http://flac.sourceforge.net/
-[github]: https://github.com/erikd/libsndfile/
-[libogg]: http://xiph.org/ogg/
-[libtool]: http://www.gnu.org/software/libtool/
-[libvorbis]: http://www.vorbis.com/
-[pkgconfig]: http://www.freedesktop.org/wiki/Software/pkg-config
-[python]: http://www.python.org/
diff --git a/libs/libsndfile/Scripts/android-configure.sh b/libs/libsndfile/Scripts/android-configure.sh
deleted file mode 100644
index c981d4927a..0000000000
--- a/libs/libsndfile/Scripts/android-configure.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash -e
-
-# Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Android NDK version number; eg r8e, r9 etc
-ANDROID_NDK_VER=r9
-
-# Android NDK gcc version; eg 4.7, 4.9 etc.
-ANDROID_GCC_VER=4.8
-
-# Android API version; eg 9 (Android 2.3), 14 (Android 4.0) etc.
-ANDROID_API_VER=9
-
-#-------------------------------------------------------------------------------
-# No more user config beyond here.
-
-BUILD_MACHINE=$(uname -s | tr 'A-Z' 'a-z')-$(uname -m)
-
-function die_with {
-	echo $1
-	exit 1
-}
-
-export CROSS_COMPILE=arm-linux-androideabi
-
-# I put all my dev stuff in here
-export DEV_PREFIX=$HOME/Android
-test -d ${DEV_PREFIX} || die_with "Error : DEV_PREFIX '$DEV_PREFIX' does not exist."
-
-# Don't forget to adjust this to your NDK path
-export ANDROID_NDK=${DEV_PREFIX}/android-ndk-${ANDROID_NDK_VER}
-test -d ${ANDROID_NDK} || die_with "Error : ANDROID_NDK '$ANDROID_NDK' does not exist."
-
-export ANDROID_PREFIX=${ANDROID_NDK}/toolchains/arm-linux-androideabi-${ANDROID_GCC_VER}/prebuilt/${BUILD_MACHINE}
-test -d ${ANDROID_PREFIX} || die_with "Error : ANDROID_PREFIX '$ANDROID_PREFIX' does not exist."
-
-export SYSROOT=${ANDROID_NDK}/platforms/android-${ANDROID_API_VER}/arch-arm
-test -d ${SYSROOT} || die_with "Error : SYSROOT '$SYSROOT' does not exist."
-
-export CROSS_PREFIX=${ANDROID_PREFIX}/bin/${CROSS_COMPILE}
-test -f ${CROSS_PREFIX}-gcc || die_with "Error : CROSS_PREFIX compiler '${CROSS_PREFIX}-gcc' does not exist."
-
-
-# Non-exhaustive lists of compiler + binutils
-# Depending on what you compile, you might need more binutils than that
-export CPP=${CROSS_PREFIX}-cpp
-export AR=${CROSS_PREFIX}-ar
-export AS=${CROSS_PREFIX}-as
-export NM=${CROSS_PREFIX}-nm
-export CC=${CROSS_PREFIX}-gcc
-export CXX=${CROSS_PREFIX}-g++
-export LD=${CROSS_PREFIX}-ld
-export RANLIB=${CROSS_PREFIX}-ranlib
-
-# Don't mix up .pc files from your host and build target
-export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
-
-# Set up the needed FLAGS.
-export CFLAGS="${CFLAGS} -gstabs --sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${ANDROID_PREFIX}/include"
-export CXXFLAGS="${CXXFLAGS} -gstabs -fno-exceptions --sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${ANDROID_PREFIX}/include -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_GCC_VER}/include/ -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_GCC_VER}/libs/armeabi/include"
-
-export CPPFLAGS="${CFLAGS}"
-export LDFLAGS="${LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_PREFIX}/lib"
-
-# Create a symlink to the gdbclient.
-test -h gdbclient || ln -s ${ANDROID_PREFIX}/bin/arm-linux-androideabi-gdb gdbclient
-
-./configure --host=${CROSS_COMPILE} --with-sysroot=${SYSROOT} "$@"
diff --git a/libs/libsndfile/Scripts/build-test-tarball.mk.in b/libs/libsndfile/Scripts/build-test-tarball.mk.in
deleted file mode 100644
index 931edb6464..0000000000
--- a/libs/libsndfile/Scripts/build-test-tarball.mk.in
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/make -f
-
-# This is probably only going to work with GNU Make.
-# This in a separate file instead of in Makefile.am because Automake complains
-# about the GNU Make-isms.
-
-EXEEXT = @EXEEXT@
-
-PACKAGE_VERSION = @PACKAGE_VERSION@
-
-HOST_TRIPLET = @HOST_TRIPLET@
-
-SRC_BINDIR = @SRC_BINDIR@
-TEST_BINDIR = @TEST_BINDIR@
-
-LIBRARY := $(SRC_BINDIR)libsndfile.so.$(LIB_VERSION)
-
-LIB_VERSION := $(shell echo $(PACKAGE_VERSION) | sed -e 's/[a-z].*//')
-
-TESTNAME = libsndfile-testsuite-$(HOST_TRIPLET)-$(PACKAGE_VERSION)
-
-TARBALL = $(TESTNAME).tar.gz
-
-# Find the test programs by grepping the script for the programs it executes.
-testprogs := $(shell grep '^\./' tests/test_wrapper.sh | sed -e "s|./||" -e "s/ .*//" | sort | uniq)
-# Also add the programs not found by the above.
-testprogs += sfversion@EXEEXT@ stdin_test@EXEEXT@ stdout_test@EXEEXT@ cpp_test@EXEEXT@ win32_test@EXEEXT@
-
-# Find the single test program in src/ .
-srcprogs := $(shell if test -x src/.libs/test_main$(EXEEXT) ; then echo "src/.libs/test_main$(EXEEXT)" ; else echo "src/test_main$(EXEEXT)" ; fi)
-
-libfiles := $(shell if test ! -z $(EXEEXT) ; then echo "src/libsndfile-1.def src/.libs/libsndfile-1.dll" ; elif test -f $(LIBRARY) ; then echo $(LIBRARY) ; fi  ; fi)
-
-testbins := $(addprefix $(TEST_BINDIR),$(subst @EXEEXT@,$(EXEEXT),$(testprogs))) $(libfiles) $(srcprogs)
-
-
-all : $(TARBALL)
-
-clean :
-	rm -rf $(TARBALL) $(TESTNAME)/
-
-check : $(TESTNAME)/test_wrapper.sh
-	(cd ./$(TESTNAME)/ && ./test_wrapper.sh)
-
-$(TARBALL) : $(TESTNAME)/test_wrapper.sh
-	tar zcf $@ $(TESTNAME)
-	rm -rf $(TESTNAME)
-	@echo
-	@echo "Created : $(TARBALL)"
-	@echo
-
-$(TESTNAME)/test_wrapper.sh : $(testbins) tests/test_wrapper.sh tests/pedantic-header-test.sh
-	rm -rf $(TESTNAME)
-	mkdir -p $(TESTNAME)/tests/
-	cp $(testbins) $(TESTNAME)/tests/
-	cp tests/test_wrapper.sh $(TESTNAME)/
-	cp tests/pedantic-header-test.sh $(TESTNAME)/tests/
-	chmod u+x $@
-
-tests/test_wrapper.sh : tests/test_wrapper.sh.in
-	(cd tests/ ; make $@)
diff --git a/libs/libsndfile/Scripts/clang-sanitize.sh b/libs/libsndfile/Scripts/clang-sanitize.sh
deleted file mode 100644
index 2898883c21..0000000000
--- a/libs/libsndfile/Scripts/clang-sanitize.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-# This is known to work with clang-3.4 from Debian testing/unstable.
-# 2013/07/14
-
-export CC=clang
-export CXX=clang++
-export CFLAGS="-O3 -fsanitize=address,integer,undefined"
-export CXXFLAGS="-O3 -fsanitize=address,integer,undefined"
-
-./configure --enable-gcc-werror
-
-make clean all check
diff --git a/libs/libsndfile/Scripts/cstyle.py b/libs/libsndfile/Scripts/cstyle.py
deleted file mode 100644
index 94a969c6e2..0000000000
--- a/libs/libsndfile/Scripts/cstyle.py
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/python -tt
-#
-# Copyright (C) 2005-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# Released under the 2 clause BSD license.
-
-"""
-This program checks C code for compliance to coding standards used in
-libsndfile and other projects I run.
-"""
-
-import re
-import sys
-
-
-class Preprocessor:
-	"""
-	Preprocess lines of C code to make it easier for the CStyleChecker class to
-	test for correctness. Preprocessing works on a single line at a time but
-	maintains state between consecutive lines so it can preprocessess multi-line
-	comments.
-	Preprocessing involves:
-	  - Strip C++ style comments from a line.
-	  - Strip C comments from a series of lines. When a C comment starts and
-	    ends on the same line it will be replaced with 'comment'.
-	  - Replace arbitrary C strings with the zero length string.
-	  - Replace '#define f(x)' with '#define f (c)' (The C #define requires that
-	    there be no space between defined macro name and the open paren of the
-	    argument list).
-	Used by the CStyleChecker class.
-	"""
-	def __init__ (self):
-		self.comment_nest = 0
-		self.leading_space_re = re.compile ('^(\t+| )')
-		self.trailing_space_re = re.compile ('(\t+| )$')
-		self.define_hack_re = re.compile ("(#\s*define\s+[a-zA-Z0-9_]+)\(")
-
-	def comment_nesting (self):
-		"""
-		Return the currect comment nesting. At the start and end of the file,
-		this value should be zero. Inside C comments it should be 1 or
-		(possibly) more.
-		"""
-		return self.comment_nest
-
-	def __call__ (self, line):
-		"""
-		Strip the provided line of C and C++ comments. Stripping of multi-line
-		C comments works as expected.
-		"""
-
-		line = self.define_hack_re.sub (r'\1 (', line)
-
-		line = self.process_strings (line)
-
-		# Strip C++ style comments.
-		if self.comment_nest == 0:
-			line = re.sub ("( |\t*)//.*", '', line)
-
-		# Strip C style comments.
-		open_comment = line.find ('/*')
-		close_comment = line.find ('*/')
-
-		if self.comment_nest > 0 and close_comment < 0:
-			# Inside a comment block that does not close on this line.
-			return ""
-
-		if open_comment >= 0 and close_comment < 0:
-			# A comment begins on this line but doesn't close on this line.
-			self.comment_nest += 1
-			return self.trailing_space_re.sub ('', line [:open_comment])
-
-		if open_comment < 0 and close_comment >= 0:
-			# Currently open comment ends on this line.
-			self.comment_nest -= 1
-			return self.trailing_space_re.sub ('', line [close_comment + 2:])
-
-		if open_comment >= 0 and close_comment > 0 and self.comment_nest == 0:
-			# Comment begins and ends on this line. Replace it with 'comment'
-			# so we don't need to check whitespace before and after the comment
-			# we're removing.
-			newline = line [:open_comment] + "comment" + line [close_comment + 2:]
-			return self.__call__ (newline)
-
-		return line
-
-	def process_strings (self, line):
-		"""
-		Given a line of C code, return a string where all literal C strings have
-		been replaced with the empty string literal "".
-		"""
-		for k in range (0, len (line)):
-			if line [k] == '"':
-				start = k
-				for k in range (start + 1, len (line)):
-					if line [k] == '"' and line [k - 1] != '\\':
-						return line [:start + 1] + '"' + self.process_strings (line [k + 1:])
-		return line
-
-
-class CStyleChecker:
-	"""
-	A class for checking the whitespace and layout of a C code.
-	"""
-	def __init__ (self, debug):
-		self.debug = debug
-		self.filename = None
-		self.error_count = 0
-		self.line_num = 1
-		self.orig_line = ''
-		self.trailing_newline_re = re.compile ('[\r\n]+$')
-		self.indent_re = re.compile ("^\s*")
-		self.last_line_indent = ""
-		self.last_line_indent_curly = False
-		self.re_checks = \
-			[ ( re.compile ("  "),		"multiple space instead of tab" )
-			, ( re.compile ("\t "), 	"space after tab" )
-			, ( re.compile ("[^ ];"),	"missing space before semi-colon" )
-			, ( re.compile ("{[^\s}]"),	"missing space after open brace" )
-			, ( re.compile ("[^{\s]}"),	"missing space before close brace" )
-			, ( re.compile ("[ \t]+$"),	"contains trailing whitespace" )
-
-			, ( re.compile (",[^\s\n]"),		"missing space after comma" )
-			, ( re.compile (";[a-zA-Z0-9]"), 	"missing space after semi-colon" )
-			, ( re.compile ("=[^\s\"'=]"),		"missing space after assignment" )
-
-			# Open and close parenthesis.
-			, ( re.compile ("[^\s\(\[\*&']\("),				"missing space before open parenthesis" )
-			, ( re.compile ("\)(-[^>]|[^,'\s\n\)\]-])"),	"missing space after close parenthesis" )
-			, ( re.compile ("\s(do|for|if|when)\s.*{$"),	"trailing open parenthesis at end of line" )
-			, ( re.compile ("\( [^;]"),						"space after open parenthesis" )
-			, ( re.compile ("[^;] \)"),						"space before close parenthesis" )
-
-			# Open and close square brace.
-			, ( re.compile ("[^\s\(\]]\["),			"missing space before open square brace" )
-			, ( re.compile ("\][^,\)\]\[\s\.-]"),	"missing space after close square brace" )
-			, ( re.compile ("\[ "),					"space after open square brace" )
-			, ( re.compile (" \]"),					"space before close square brace" )
-
-			# Space around operators.
-			, ( re.compile ("[^\s][\*/%+-][=][^\s]"),		"missing space around opassign" )
-			, ( re.compile ("[^\s][<>!=^/][=]{1,2}[^\s]"),	"missing space around comparison" )
-
-			# Parens around single argument to return.
-			, ( re.compile ("\s+return\s+\([a-zA-Z0-9_]+\)\s+;"),	"parens around return value" )
-			]
-
-	def get_error_count (self):
-		"""
-		Return the current error count for this CStyleChecker object.
-		"""
-		return self.error_count
-
-	def check_files (self, files):
-		"""
-		Run the style checker on all the specified files.
-		"""
-		for filename in files:
-			self.check_file (filename)
-
-	def check_file (self, filename):
-		"""
-		Run the style checker on the specified file.
-		"""
-		self.filename = filename
-		cfile = open (filename, "r")
-
-		self.line_num = 1
-
-		preprocess = Preprocessor ()
-		while 1:
-			line = cfile.readline ()
-			if not line:
-				break
-
-			line = self.trailing_newline_re.sub ('', line)
-			self.orig_line = line
-
-			self.line_checks (preprocess (line))
-
-			self.line_num += 1
-
-		cfile.close ()
-		self.filename = None
-
-		# Check for errors finding comments.
-		if preprocess.comment_nesting () != 0:
-			print ("Weird, comments nested incorrectly.")
-			sys.exit (1)
-
-		return
-
-	def line_checks (self, line):
-		"""
-		Run the style checker on provided line of text, but within the context
-		of how the line fits within the file.
-		"""
-
-		indent = len (self.indent_re.search (line).group ())
-		if re.search ("^\s+}", line):
-			if not self.last_line_indent_curly and indent != self.last_line_indent:
-				None	# self.error ("bad indent on close curly brace")
-			self.last_line_indent_curly = True
-		else:
-			self.last_line_indent_curly = False
-
-		# Now all the regex checks.
-		for (check_re, msg) in self.re_checks:
-			if check_re.search (line):
-				self.error (msg)
-
-		if re.search ("[a-zA-Z0-9][<>!=^/&\|]{1,2}[a-zA-Z0-9]", line):
-			if not re.search (".*#include.*[a-zA-Z0-9]/[a-zA-Z]", line):
-				self.error ("missing space around operator")
-
-		self.last_line_indent = indent
-		return
-
-	def error (self, msg):
-		"""
-		Print an error message and increment the error count.
-		"""
-		print ("%s (%d) : %s" % (self.filename, self.line_num, msg))
-		if self.debug:
-			print ("'" + self.orig_line + "'")
-		self.error_count += 1
-
-#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-if len (sys.argv) < 1:
-	print ("Usage : yada yada")
-	sys.exit (1)
-
-# Create a new CStyleChecker object
-if sys.argv [1] == '-d' or sys.argv [1] == '--debug':
-	cstyle = CStyleChecker (True)
-	cstyle.check_files (sys.argv [2:])
-else:
-	cstyle = CStyleChecker (False)
-	cstyle.check_files (sys.argv [1:])
-
-
-if cstyle.get_error_count ():
-	sys.exit (1)
-
-sys.exit (0)
diff --git a/libs/libsndfile/Scripts/git-pre-commit-hook b/libs/libsndfile/Scripts/git-pre-commit-hook
deleted file mode 100644
index 6df1308ac3..0000000000
--- a/libs/libsndfile/Scripts/git-pre-commit-hook
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-#
-
-if git rev-parse --verify HEAD >/dev/null 2>&1 ; then
-	against=HEAD
-else
-	# Initial commit: diff against an empty tree object
-	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-	fi
-
-files=$(git diff-index --name-status --cached HEAD | grep -v ^D | sed -r "s/^[A-Z]+[A-Z0-9]*[ \t]+/ /")
-
-# Redirect output to stderr.
-exec 1>&2
-
-#-------------------------------------------------------------------------------
-# Check the copyright notice of all files to be commited.
-
-user=`git config --global user.email`
-year=`date +"%Y"`
-
-missing_copyright_year=""
-if test $user = "erikd@mega-nerd.com" ; then
-	for f in $files ; do
-		if test `head -5 $f | grep -c -i copyright` -gt 0 ; then
-			user_copyright=`grep -i copyright $f | grep $user | grep -c $year`
-			if test $user_copyright -lt 1 ; then
-				missing_copyright_year="$missing_copyright_year $f"
-				fi
-			fi
-		done
-	fi
-
-if test -n "$missing_copyright_year" ; then
-	echo "Missing current year in the copyright notice of the following files:"
-	for f in $missing_copyright_year ; do
-		echo "    $f"
-		done
-	echo "Commit aborted."
-	exit 1
-	fi
-
-#-------------------------------------------------------------------------------
-# Check the formatting of all C files.
-
-cfiles=""
-for f in $files ; do
-	if test `dirname $f` = "src/ALAC" ; then
-		echo "Skipping cstyle checking on $f"
-	elif test `echo $f | grep -c "\.[ch]$"` -gt 0 ; then
-		cfiles="$cfiles $f"
-		fi
-	done
-
-if test -n "$cfiles" ; then
-	Scripts/cstyle.py $cfiles
-	if test $? -ne 0 ; then
-		echo
-		echo "Commit aborted. Fix the above error before trying again."
-		exit 1
-		fi
-	fi
-
-#-------------------------------------------------------------------------------
-# Prevent files with non-ascii filenames from being committed.
-
-if test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 ; then
-	echo "Error: Attempt to add a non-ascii file name."
-	echo
-	echo "This can cause problems if you want to work"
-	echo "with people on other platforms."
-	echo
-	echo "To be portable it is advisable to rename the file ..."
-	echo
-	echo "Commit aborted."
-	exit 1
-	fi
-
-exit 0
diff --git a/libs/libsndfile/Scripts/linux-to-win-cross-configure.sh b/libs/libsndfile/Scripts/linux-to-win-cross-configure.sh
deleted file mode 100644
index c1fdc072b3..0000000000
--- a/libs/libsndfile/Scripts/linux-to-win-cross-configure.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-case "$1" in
-	w32)
-		compiler_name=i686-w64-mingw32
-		;;
-	w64)
-		compiler_name=x86_64-w64-mingw32
-		;;
-	*)
-		echo "$0 (w32|w64) <other args>"
-		exit 0
-		;;
-	esac
-
-shift
-
-build_cpu=$(dpkg-architecture -qDEB_BUILD_GNU_CPU)
-build_host=$build_cpu-linux
-
-./configure --host=$compiler_name --target=$compiler_name --build=$build_host \
-		--program-prefix='' --disable-sqlite --disable-static $@
diff --git a/libs/libsndfile/TODO b/libs/libsndfile/TODO
deleted file mode 100644
index f6da6dff6a..0000000000
--- a/libs/libsndfile/TODO
+++ /dev/null
@@ -1,42 +0,0 @@
-Here's a list of what I (erikd AT mega-nerd DOT com) think needs to be 
-done. The list is by no means exhaustive and people are encouraged to 
-email me with suggestions. 
-
-  o Add pipe in/out capabilities. libsndfile should be able to read 
-	its input from a pipe and write its output to a pipe.
-
-  o Add checks of the error state after fseek???? Use ferror ().
-
-  o Modify tests/lossy_comp_test.c to add tests for stereo files.
-
-  o Testing compilation and correctness on more platforms.
-
-  o Improve testing routines. Must test all combinations of inputs
-    and outputs.
-
-  o Test sf_seek function on write???
-
-  o Add more sound file formats. People should contact me with their
-    requirements. 
-
-  o Add support for accessing sound formats with multiple audio
-    data sections (ie samples within tracker files, Soundfont II and 
-    multi-sample sampler formats). 
-
-  o Add an interface to allow reading and writing of sample loop points 
-    and other info within AIFF and other file formats. This must be a 
-    general solution.
-
-  o Improve documentation. Is HTML documentation good enough?
-
-  o Look into the possibility of optional sample rate convert on file 
-    read.
-
-As I am the person who knows libsndfile best, I can probably implement 
-any new features faster than anybody else (and you can spend your time
-writing applications with libsndfile). All I need is some 
-documentation and some sample files. Please contact me before emailing
-me documentation and sample files. I would much rather pull them off
-the web than have them clogging up my email inbox.
-
-
diff --git a/libs/libsndfile/Win32/Makefile.am b/libs/libsndfile/Win32/Makefile.am
deleted file mode 100644
index 4fe8efa7b9..0000000000
--- a/libs/libsndfile/Win32/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README-precompiled-dll.txt testprog.c
-
diff --git a/libs/libsndfile/Win32/README-precompiled-dll.txt b/libs/libsndfile/Win32/README-precompiled-dll.txt
deleted file mode 100644
index bde8124219..0000000000
--- a/libs/libsndfile/Win32/README-precompiled-dll.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-Notes on Using the Pre-compiled libsndfile DLL.
-===============================================
-
-In order to use this pre-compiled DLL with Visual Studio, you will need to
-generate a .LIB file from the DLL.
-
-This can be achieved as follows:
-
-  1) In a CMD window, change to the directory containing this file and
-     run the command:
-
-          lib /machine:i386 /def:libsndfile-1.def
-
-You now have two files:
-
-        libsndfile-1.dll
-        libsndfile-1.lib
-
-to be used with VisualStudio.
-
-If the lib command fails with a command saying "'lib' is not recognized as
-an internal or external command, operable program or batch file", you need
-to find the location of "lib.exe" and add that directory to your PATH
-environment variable. Another alternative is to use the "Visual Studio 2005
-Command Prompt" Start menu item:
-
-   Start ->
-   		All Programs ->
-			Visual Studio 2005 ->
-				Visual Studio Tools ->
-					Visual Studio 2005 Command Prompt
-
-If for some reason these instructions don't work for you or you are still
-not able to use the libsndfile DLL with you project, please do not contact
-the main author of libsndfile. Instead, join the libsndfile-users mailing
-list :
-
-        http://www.mega-nerd.com/libsndfile/lists.html
-
-and ask a question there.
diff --git a/libs/libsndfile/Win32/testprog.c b/libs/libsndfile/Win32/testprog.c
deleted file mode 100644
index d26d844adf..0000000000
--- a/libs/libsndfile/Win32/testprog.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*	Simple test program to make sure that Win32 linking to libsndfile is
-**	working.
-*/
-
-#include <stdio.h>
-
-#include "sndfile.h"
-
-int
-main (void)
-{	static char strbuffer [256] ;
-	sf_command (NULL, SFC_GET_LIB_VERSION, strbuffer, sizeof (strbuffer)) ;
-	puts (strbuffer) ;
-	return 0 ;
-}
-
diff --git a/libs/libsndfile/acinclude.m4 b/libs/libsndfile/acinclude.m4
deleted file mode 100644
index c411cebbda..0000000000
--- a/libs/libsndfile/acinclude.m4
+++ /dev/null
@@ -1,637 +0,0 @@
-dnl By default, many hosts won't let programs access large files;
-dnl one must use special compiler options to get large-file access to work.
-dnl For more details about this brain damage please see:
-dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
-
-dnl Written by Paul Eggert <eggert@twinsun.com>.
-
-m4_include([M4/gcc_version.m4])
-m4_include([M4/octave.m4])
-m4_include([M4/mkoctfile_version.m4])
-m4_include([M4/extra_pkg.m4])
-m4_include([M4/lrint.m4])
-m4_include([M4/lrintf.m4])
-m4_include([M4/clang.m4])
-m4_include([M4/really_gcc.m4])
-m4_include([M4/stack_protect.m4])
-m4_include([M4/clip_mode.m4])
-m4_include([M4/add_cflags.m4])
-m4_include([M4/add_cxxflags.m4])
-m4_include([M4/flexible_array.m4])
-m4_include([M4/endian.m4])
-m4_include([M4/extra_largefile.m4])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_FLAGS],
-  [AC_CACHE_CHECK([for $1 value to request large file support],
-     ac_cv_sys_largefile_$1,
-     [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
-	ac_cv_sys_largefile_$1=no
-	ifelse($1, CFLAGS,
-	  [case "$host_os" in
-	   # IRIX 6.2 and later require cc -n32.
-changequote(, )dnl
-	   irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
-changequote([, ])dnl
-	     if test "$GCC" != yes; then
-	       ac_cv_sys_largefile_CFLAGS=-n32
-	     fi
-	     ac_save_CC="$CC"
-	     CC="$CC $ac_cv_sys_largefile_CFLAGS"
-	     AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
-	     CC="$ac_save_CC"
-	   esac])
-      }])])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND],
-  [case $2 in
-   no) ;;
-   ?*)
-     case "[$]$1" in
-     '') $1=$2 ;;
-     *) $1=[$]$1' '$2 ;;
-     esac ;;
-   esac])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE],
-  [AC_CACHE_CHECK([for $1], $2,
-     [$2=no
-changequote(, )dnl
-      $4
-      for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-	case "$ac_flag" in
-	-D$1)
-	  $2=1 ;;
-	-D$1=*)
-	  $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
-	esac
-      done
-changequote([, ])dnl
-      ])
-   if test "[$]$2" != no; then
-     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
-   fi])
-
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE],
-  [AC_REQUIRE([AC_CANONICAL_HOST])
-   AC_ARG_ENABLE(largefile,
-     [  --disable-largefile     omit support for large files])
-   if test "$enable_largefile" != no; then
-     AC_CHECK_TOOL(GETCONF, getconf)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(LIBS)
-
-     for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       no) ;;
-       -D_FILE_OFFSET_BITS=*) ;;
-       -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
-       -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
-       -D?* | -I?*)
-	 AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
-       *)
-	 AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
-       esac
-     done
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
-       ac_cv_sys_file_offset_bits,
-       [Number of bits in a file offset, on hosts where this is settable.])
-       [case "$host_os" in
-	# HP-UX 10.20 and later
-	hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-	  ac_cv_sys_file_offset_bits=64 ;;
-	esac]
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
-       ac_cv_sys_largefile_source,
-       [Define to make fseeko etc. visible, on some hosts.],
-       [case "$host_os" in
-	# HP-UX 10.20 and later
-	hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-	  ac_cv_sys_largefile_source=1 ;;
-	esac])
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
-       ac_cv_sys_large_files,
-       [Define for large files, on AIX-style hosts.],
-       [case "$host_os" in
-	# AIX 4.2 and later
-	aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
-	  ac_cv_sys_large_files=1 ;;
-	esac])
-   fi
-  ])
-
-
-
-
-
-
-dnl @synopsis AC_C_FIND_ENDIAN
-dnl
-dnl Determine endian-ness of target processor.
-dnl @version 1.1	Mar 03 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Majority written from scratch to replace the standard autoconf macro 
-dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
-dnl of the AC_TRY_RUN macro.
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-dnl Find endian-ness in the following way:
-dnl    1) Look in <endian.h>.
-dnl    2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
-dnl    3) If 1) and 2) fails and not cross compiling run a test program.
-dnl    4) If 1) and 2) fails and cross compiling then guess based on target.
-
-AC_DEFUN([AC_C_FIND_ENDIAN],
-[AC_CACHE_CHECK(processor byte ordering, 
-	ac_cv_c_byte_order,
-
-# Initialize to unknown
-ac_cv_c_byte_order=unknown
-
-if test x$ac_cv_header_endian_h = xyes ; then
-
-	# First try <endian.h> which should set BYTE_ORDER.
-
-	[AC_TRY_LINK([
-		#include <endian.h>
-		#if BYTE_ORDER != LITTLE_ENDIAN
-			not big endian
-		#endif
-		], return 0 ;, 
-			ac_cv_c_byte_order=little
-		)]
-				
-	[AC_TRY_LINK([
-		#include <endian.h>
-		#if BYTE_ORDER != BIG_ENDIAN
-			not big endian
-		#endif
-		], return 0 ;, 
-			ac_cv_c_byte_order=big
-		)]
-
-	fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-
-	[AC_TRY_LINK([
-		#include <sys/types.h>
-		#include <sys/param.h>
-		#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
-			bogus endian macros
-		#endif
-		], return 0 ;, 
-
-		[AC_TRY_LINK([
-			#include <sys/types.h>
-			#include <sys/param.h>
-			#if BYTE_ORDER != LITTLE_ENDIAN
-				not big endian
-			#endif
-			], return 0 ;, 
-				ac_cv_c_byte_order=little
-			)]
-				
-		[AC_TRY_LINK([
-			#include <sys/types.h>
-			#include <sys/param.h>
-			#if BYTE_ORDER != LITTLE_ENDIAN
-				not big endian
-			#endif
-			], return 0 ;, 
-				ac_cv_c_byte_order=little
-			)]
-
-		)]
-
- 	fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-	if test $cross_compiling = yes ; then
-		# This is the last resort. Try to guess the target processor endian-ness
-		# by looking at the target CPU type.	
-		[
-		case "$target_cpu" in
-			alpha* | i?86* | mipsel* | ia64*)
-				ac_cv_c_big_endian=0
-				ac_cv_c_little_endian=1
-				;;
-			
-			m68* | mips* | powerpc* | hppa* | sparc*)
-				ac_cv_c_big_endian=1
-				ac_cv_c_little_endian=0
-				;;
-	
-			esac
-		]
-	else
-		AC_TRY_RUN(
-		[[
-		int main (void) 
-		{	/* Are we little or big endian?  From Harbison&Steele.  */
-			union
-			{	long l ;
-				char c [sizeof (long)] ;
-			} u ;
-			u.l = 1 ;
-			return (u.c [sizeof (long) - 1] == 1);
-			}
-			]], , ac_cv_c_byte_order=big, 
-			ac_cv_c_byte_order=unknown
-			)
-
-		AC_TRY_RUN(
-		[[int main (void) 
-		{	/* Are we little or big endian?  From Harbison&Steele.  */
-			union
-			{	long l ;
-				char c [sizeof (long)] ;
-			} u ;
-			u.l = 1 ;
-			return (u.c [0] == 1);
-			}]], , ac_cv_c_byte_order=little, 
-			ac_cv_c_byte_order=unknown
-			)
-		fi	
-	fi
-
-)
-]
-
-if test $ac_cv_c_byte_order = big ; then
-	ac_cv_c_big_endian=1
-	ac_cv_c_little_endian=0
-elif test $ac_cv_c_byte_order = little ; then
-	ac_cv_c_big_endian=0
-	ac_cv_c_little_endian=1
-else
-	ac_cv_c_big_endian=0
-	ac_cv_c_little_endian=0
-
-	fi
-
-)# AC_C_FIND_ENDIAN
-
-
-
-
-
-dnl @synopsis AC_C99_FLEXIBLE_ARRAY
-dnl
-dnl Dose the compiler support the 1999 ISO C Standard "stuct hack".
-dnl @version 1.1	Mar 15 2004
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-AC_DEFUN([AC_C99_FLEXIBLE_ARRAY],
-[AC_CACHE_CHECK(C99 struct flexible array support, 
-	ac_cv_c99_flexible_array,
-
-# Initialize to unknown
-ac_cv_c99_flexible_array=no
-
-AC_TRY_LINK([[
-	#include <stdlib.h>
-	typedef struct {
-	int k;
-	char buffer [] ;
-	} MY_STRUCT ;
-	]], 
-	[  MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); ],
-	ac_cv_c99_flexible_array=yes,
-	ac_cv_c99_flexible_array=no
-	))]
-) # AC_C99_FLEXIBLE_ARRAY
-
-
-     
-
-
-dnl @synopsis AC_C99_FUNC_LRINT
-dnl
-dnl Check whether C99's lrint function is available.
-dnl @version 1.3	Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LRINT],
-[AC_CACHE_CHECK(for lrint,
-  ac_cv_c99_lrint,
-[
-lrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
-
-CFLAGS=$lrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrint" = yes; then
-  AC_DEFINE(HAVE_LRINT, 1,
-            [Define if you have C99's lrint function.])
-fi
-])# AC_C99_FUNC_LRINT
-dnl @synopsis AC_C99_FUNC_LRINTF
-dnl
-dnl Check whether C99's lrintf function is available.
-dnl @version 1.3	Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LRINTF],
-[AC_CACHE_CHECK(for lrintf,
-  ac_cv_c99_lrintf,
-[
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
-])
-
-if test "$ac_cv_c99_lrintf" = yes; then
-  AC_DEFINE(HAVE_LRINTF, 1,
-            [Define if you have C99's lrintf function.])
-fi
-])# AC_C99_FUNC_LRINTF
-
-
-
-
-dnl @synopsis AC_C99_FUNC_LLRINT
-dnl
-dnl Check whether C99's llrint function is available.
-dnl @version 1.1	Sep 30 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LLRINT],
-[AC_CACHE_CHECK(for llrint,
-  ac_cv_c99_llrint,
-[
-AC_TRY_LINK([
-#define		_ISOC9X_SOURCE	1
-#define 	_ISOC99_SOURCE	1
-#define		__USE_ISOC99	1
-#define 	__USE_ISOC9X	1
-
-#include <math.h>
-#include <stdint.h>
-], int64_t	x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
-])
-
-if test "$ac_cv_c99_llrint" = yes; then
-  AC_DEFINE(HAVE_LLRINT, 1,
-            [Define if you have C99's llrint function.])
-fi
-])# AC_C99_FUNC_LLRINT
-
-
-
-dnl @synopsis AC_C_CLIP_MODE
-dnl
-dnl Determine the clipping mode when converting float to int.
-dnl @version 1.0	May 17 2003
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-
-
-dnl Find the clipping mode in the following way:
-dnl    1) If we are not cross compiling test it.
-dnl    2) IF we are cross compiling, assume that clipping isn't done correctly.
-
-AC_DEFUN([AC_C_CLIP_MODE],
-[AC_CACHE_CHECK(processor clipping capabilities, 
-	ac_cv_c_clip_type,
-
-# Initialize to unknown
-ac_cv_c_clip_positive=unknown
-ac_cv_c_clip_negative=unknown
-
-if test $ac_cv_c_clip_positive = unknown ; then
-	AC_TRY_RUN(
-	[[
-	#define	_ISOC9X_SOURCE	1
-	#define _ISOC99_SOURCE	1
-	#define	__USE_ISOC99	1
-	#define __USE_ISOC9X	1
-	#include <math.h>
-	int main (void)
-	{	double	fval ;
-		int k, ival ;
-
-		fval = 1.0 * 0x7FFFFFFF ;
-		for (k = 0 ; k < 100 ; k++)
-		{	ival = (lrint (fval)) >> 24 ;
-			if (ival != 127)
-				return 1 ;
-		
-			fval *= 1.2499999 ;
-			} ;
-		
-			return 0 ;
-		}
-		]],
-		ac_cv_c_clip_positive=yes,
-		ac_cv_c_clip_positive=no,
-		ac_cv_c_clip_positive=unknown
-		)
-
-	AC_TRY_RUN(
-	[[
-	#define	_ISOC9X_SOURCE	1
-	#define _ISOC99_SOURCE	1
-	#define	__USE_ISOC99	1
-	#define __USE_ISOC9X	1
-	#include <math.h>
-	int main (void)
-	{	double	fval ;
-		int k, ival ;
-
-		fval = -8.0 * 0x10000000 ;
-		for (k = 0 ; k < 100 ; k++)
-		{	ival = (lrint (fval)) >> 24 ;
-			if (ival != -128)
-				return 1 ;
-		
-			fval *= 1.2499999 ;
-			} ;
-		
-			return 0 ;
-		}
-		]],
-		ac_cv_c_clip_negative=yes,
-		ac_cv_c_clip_negative=no,
-		ac_cv_c_clip_negative=unknown
-		)
-	fi
-
-if test $ac_cv_c_clip_positive = yes ; then
-	ac_cv_c_clip_positive=1
-else
-	ac_cv_c_clip_positive=0
-	fi
-
-if test $ac_cv_c_clip_negative = yes ; then
-	ac_cv_c_clip_negative=1
-else
-	ac_cv_c_clip_negative=0
-	fi
-
-[[
-case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
-	"00")
-		ac_cv_c_clip_type="none"
-		;;
-	"10")
-		ac_cv_c_clip_type="positive"
-		;;
-	"01")
-		ac_cv_c_clip_type="negative"
-		;;
-	"11")
-		ac_cv_c_clip_type="both"
-		;;
-	esac
-	]]
-
-)
-]
-
-)# AC_C_CLIP_MODE
-
-
-dnl @synopsis AC_ADD_CFLAGS
-dnl
-dnl Add the given option to CFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([AC_ADD_CFLAGS],
-[AC_MSG_CHECKING([if $CC accepts $1])
-	ac_add_cflags__old_cflags="$CFLAGS"
-	CFLAGS="$CFLAGS $1"
-	AC_TRY_LINK([#include <stdio.h>],
-		[printf("Hello, World!\n"); return 0;],
-		AC_MSG_RESULT([yes]),
-		AC_MSG_RESULT([no])
-		CFLAGS="$ac_add_cflags__old_cflags")
-])
-
-
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN([PKG_CHECK_MODULES], [
-  succeeded=no
-
-  if test -z "$PKG_CONFIG"; then
-    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-  fi
-
-  if test "$PKG_CONFIG" = "no" ; then
-     echo "*** The pkg-config script could not be found. Make sure it is"
-     echo "*** in your path, or set the PKG_CONFIG environment variable"
-     echo "*** to the full path to pkg-config."
-     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-  else
-     PKG_CONFIG_MIN_VERSION=0.9.0
-     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-        AC_MSG_CHECKING(for $2)
-
-        if $PKG_CONFIG --exists "$2" ; then
-            AC_MSG_RESULT(yes)
-            succeeded=yes
-
-            AC_MSG_CHECKING($1_CFLAGS)
-            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-            AC_MSG_RESULT($$1_CFLAGS)
-
-            AC_MSG_CHECKING($1_LIBS)
-            $1_LIBS=`$PKG_CONFIG --libs "$2"`
-            AC_MSG_RESULT($$1_LIBS)
-        else
-            $1_CFLAGS=""
-            $1_LIBS=""
-            ## If we have a custom action on failure, don't print errors, but 
-            ## do set a variable so people can do so.
-            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-            ifelse([$4], ,echo $$1_PKG_ERRORS,)
-        fi
-
-        AC_SUBST($1_CFLAGS)
-        AC_SUBST($1_LIBS)
-     else
-        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-        echo "*** See http://www.freedesktop.org/software/pkgconfig"
-     fi
-  fi
-
-  if test $succeeded = yes; then
-     ifelse([$3], , :, [$3])
-  else
-     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-  fi
-])
-
-
-
-
-ifelse(dnl	
-
- Do not edit or modify anything in this comment block.
- The arch-tag line is a file identity tag for the GNU Arch 
- revision control system.
-
- arch-tag: bc38294d-bb5c-42ad-90b9-779def5eaab7
-
-)dnl
diff --git a/libs/libsndfile/autogen.sh b/libs/libsndfile/autogen.sh
deleted file mode 100644
index 5047159fe4..0000000000
--- a/libs/libsndfile/autogen.sh
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/bin/sh
-# Run this to set up the build system: configure, makefiles, etc.
-# (based on the version in enlightenment's cvs)
-
-package="libsndfile"
-
-ACLOCAL_FLAGS="-I M4"
-
-olddir=`pwd`
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-cd "$srcdir"
-DIE=0
-
-printf "checking for autogen ... "
-result="yes"
-(autogen --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have GNU autogen installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-		result="no"
-        DIE=1
-}
-echo $result
-
-printf "checking for autoconf ... "
-result="yes"
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have autoconf installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-		result="no"
-        DIE=1
-}
-echo $result
-
-VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/"
-VERSIONMKMAJ="sed -e s/\([0-9][0-9]*\)[^0-9].*/\\1/"
-VERSIONMKMIN="sed -e s/.*[0-9][0-9]*\.//"
-
-# do we need automake?
-if test -r Makefile.am; then
-  AM_OPTIONS=`fgrep AUTOMAKE_OPTIONS Makefile.am`
-  AM_NEEDED=`echo $AM_OPTIONS | $VERSIONGREP`
-  if test x"$AM_NEEDED" = "x$AM_OPTIONS"; then
-    AM_NEEDED=""
-  fi
-  if test -z $AM_NEEDED; then
-    printf "checking for automake ... "
-    AUTOMAKE=automake
-    ACLOCAL=aclocal
-    if ($AUTOMAKE --version < /dev/null > /dev/null 2>&1); then
-      echo "yes"
-    else
-      echo "no"
-      AUTOMAKE=
-    fi
-  else
-    printf "checking for automake $AM_NEEDED or later ... "
-    majneeded=`echo $AM_NEEDED | $VERSIONMKMAJ`
-    minneeded=`echo $AM_NEEDED | $VERSIONMKMIN`
-    for am in automake-$AM_NEEDED automake$AM_NEEDED \
-	automake automake-1.7 automake-1.8 automake-1.9 automake-1.10; do
-      ($am --version < /dev/null > /dev/null 2>&1) || continue
-      ver=`$am --version < /dev/null | head -n 1 | $VERSIONGREP`
-      maj=`echo $ver | $VERSIONMKMAJ`
-      min=`echo $ver | $VERSIONMKMIN`
-      if test $maj -eq $majneeded -a $min -ge $minneeded; then
-        AUTOMAKE=$am
-        echo $AUTOMAKE
-        break
-      fi
-    done
-    test -z $AUTOMAKE &&  echo "no"
-    printf "checking for aclocal $AM_NEEDED or later ... "
-    for ac in aclocal-$AM_NEEDED aclocal$AM_NEEDED \
-	aclocal aclocal-1.7 aclocal-1.8 aclocal-1.9 aclocal-1.10; do
-      ($ac --version < /dev/null > /dev/null 2>&1) || continue
-      ver=`$ac --version < /dev/null | head -n 1 | $VERSIONGREP`
-      maj=`echo $ver | $VERSIONMKMAJ`
-      min=`echo $ver | $VERSIONMKMIN`
-      if test $maj -eq $majneeded -a $min -ge $minneeded; then
-        ACLOCAL=$ac
-        echo $ACLOCAL
-        break
-      fi
-    done
-    test -z $ACLOCAL && echo "no"
-  fi
-  test -z $AUTOMAKE || test -z $ACLOCAL && {
-        echo
-        echo "You must have automake installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-        exit 1
-  }
-fi
-
-printf "checking for libtool ... "
-for LIBTOOLIZE in libtoolize glibtoolize nope; do
-  ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 && break
-done
-if test x$LIBTOOLIZE = xnope; then
-  echo "nope."
-  LIBTOOLIZE=libtoolize
-else
-  echo $LIBTOOLIZE
-fi
-($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 || {
-	echo
-	echo "You must have libtool installed to compile $package."
-	echo "Download the appropriate package for your system,"
-	echo "or get the source from one of the GNU ftp sites"
-	echo "listed in http://www.gnu.org/order/ftp.html"
-	DIE=1
-}
-
-printf "checking for pkg-config ... "
-result="yes"
-(pkg-config --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have pkg-config installed to compile $package."
-        echo "Download the appropriate package for your distribution."
-		result="no"
-        DIE=1
-}
-echo $result
-
-
-printf "checking for python ... "
-result="yes"
-(python --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have Python installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at http://python.org/"
-		result="no"
-        DIE=1
-}
-echo $result
-
-if test "$DIE" -eq 1; then
-        exit 1
-fi
-
-if test ! -d Cfg ; then
-	echo "Creating 'Cfg' directory."
-	mkdir Cfg
-fi
-
-echo "Generating configuration files for $package, please wait ... "
-
-echo "  $ACLOCAL $ACLOCAL_FLAGS"
-$ACLOCAL $ACLOCAL_FLAGS || exit 1
-echo "  $LIBTOOLIZE --automake --force"
-$LIBTOOLIZE --automake --force || exit 1
-echo "  autoheader"
-autoheader || exit 1
-echo "  $AUTOMAKE --add-missing $AUTOMAKE_FLAGS"
-$AUTOMAKE --add-missing $AUTOMAKE_FLAGS || exit 1
-echo "  autoconf"
-autoconf || exit 1
-
-cd $olddir
-
-fprecommit=.git/hooks/pre-commit
-if test ! -f $fprecommit ; then
-	echo
-	echo "Installing git pre-commit hook for this project."
-	cat > $fprecommit << 'foobar'
-#!/bin/sh
-exec Scripts/git-pre-commit-hook
-foobar
-	chmod u+x $fprecommit
-	echo
-	fi
diff --git a/libs/libsndfile/binheader_readf_check.py b/libs/libsndfile/binheader_readf_check.py
deleted file mode 100644
index 774abcd988..0000000000
--- a/libs/libsndfile/binheader_readf_check.py
+++ /dev/null
@@ -1,62 +0,0 @@
-g#!/usr/bin/python
-
-import re, string, sys
-
-def trim_function_and_params (section):
-	k = string.find (section, "(") + 1
-	brackets = 1
-	section_len = len (section)
-	while k < section_len:
-		if section [k] == '(':
-			brackets += 1
-		elif section [k] == ')':
-			brackets -= 1
-		if brackets < 1:
-			return section [:k+1]
-		k += 1
-	print "Whoops!!!!"
-	sys.exit (1)
-
-def get_function_calls (filedata):
-	filedata = string.split (filedata, "psf_binheader_readf")
-	filedata = filedata [1:]
-
-	func_calls = []
-	for section in filedata:
-		section = "psf_binheader_readf" + section
-		func_calls.append (trim_function_and_params (section))
-
-	return func_calls
-
-def search_for_problems (filename):
-	filedata = open (filename, "r").read ()
-	
-	if len (filedata) < 1:
-		print "Error : file '%s' contains no data." % filename
-		sys.exit (1) 
-	
-	count = 0
-	
-	calls = get_function_calls (filedata)
-	for call in calls:
-		if string.find (call, "sizeof") > 0:
-			print "Found : ", call
-			count += 1
-	
-	if count == 0:
-		print "%-20s : No problems found." % filename
-	else:
-		print "\n%-20s : Found %d errors." % (filename, count)
-		sys.exit (1)
-	return 
-	
-
-#-------------------------------------------------------------------------------
-
-if len (sys.argv) < 2:
-	print "Usage : %s <file>" % sys.argv [0]
-	sys.exit (1) 
-
-for file in sys.argv [1:]:
-	search_for_problems (file)
-
diff --git a/libs/libsndfile/configure.ac b/libs/libsndfile/configure.ac
deleted file mode 100644
index 5893db2a66..0000000000
--- a/libs/libsndfile/configure.ac
+++ /dev/null
@@ -1,697 +0,0 @@
-# Copyright (C) 1999-2013  Erik de Castro Lopo <erikd@mega-nerd.com>.
-
-dnl Require autoconf version
-AC_PREREQ(2.57)
-
-AC_INIT([libsndfile],[1.0.26pre5],[sndfile@mega-nerd.com],
-		[libsndfile],[http://www.mega-nerd.com/libsndfile/])
-
-# Put config stuff in Cfg.
-AC_CONFIG_AUX_DIR(Cfg)
-
-AC_CONFIG_SRCDIR([src/sndfile.c])
-AC_CANONICAL_TARGET([])
-
-AC_CONFIG_MACRO_DIR([M4])
-AC_CONFIG_HEADERS([src/config.h])
-
-CFLAGS="$CFLAGS $CONFIGURE_CFLAGS"
-CXXFLAGS="$CXXFLAGS $CONFIGURE_CXXFLAGS"
-LDFLAGS="$LDFLAGS $CONFIGURE_LDFLAGS"
-
-AM_INIT_AUTOMAKE
-AC_SUBST(ACLOCAL_AMFLAGS, "-I M4")
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-AC_LANG([C])
-
-AC_PROG_CC_STDC
-AC_USE_SYSTEM_EXTENSIONS
-AM_PROG_CC_C_O
-AC_PROG_CXX
-
-MN_C_COMPILER_IS_CLANG
-MN_GCC_REALLY_IS_GCC
-
-AC_PROG_SED
-
-# Do not check for F77.
-define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
-
-AM_PROG_LIBTOOL
-LT_PROG_RC
-
-AC_PROG_INSTALL
-AC_PROG_LN_S
-
-AC_CHECK_PROG(HAVE_AUTOGEN, autogen, yes, no)
-AC_CHECK_PROG(HAVE_WINE, wine, yes, no)
-AC_CHECK_PROG(HAVE_XCODE_SELECT, xcode-select, yes, no)
-
-#------------------------------------------------------------------------------------
-# Rules for library version information:
-#
-#  1. Start with version information of `0:0:0' for each libtool library.
-#  2. Update the version information only immediately before a public release of
-#     your software. More frequent updates are unnecessary, and only guarantee
-#     that the current interface number gets larger faster.
-#  3. If the library source code has changed at all since the last update, then
-#     increment revision (`c:r:a' becomes `c:r+1:a').
-#  4. If any interfaces have been added, removed, or changed since the last update,
-#     increment current, and set revision to 0.
-#  5. If any interfaces have been added since the last public release, then increment
-#     age.
-#  6. If any interfaces have been removed since the last public release, then set age
-#     to 0.
-
-CLEAN_VERSION=`echo $PACKAGE_VERSION | $SED "s/p.*//"`
-VERSION_MINOR=`echo $CLEAN_VERSION | $SED "s/.*\.//"`
-
-SHARED_VERSION_INFO="1:$VERSION_MINOR:0"
-
-#------------------------------------------------------------------------------------
-
-AC_HEADER_STDC
-
-AC_CHECK_HEADERS(endian.h)
-AC_CHECK_HEADERS(byteswap.h)
-AC_CHECK_HEADERS(locale.h)
-AC_CHECK_HEADERS(sys/time.h)
-
-AC_HEADER_SYS_WAIT
-
-AC_CHECK_DECLS(S_IRGRP)
-if test x$ac_cv_have_decl_S_IRGRP = xyes ; then
-	AC_DEFINE_UNQUOTED([HAVE_DECL_S_IRGRP],1,[Set to 1 if S_IRGRP is defined.])
-else
-	AC_DEFINE_UNQUOTED([HAVE_DECL_S_IRGRP],0)
-	fi
-
-AM_CONDITIONAL([LINUX_MINGW_CROSS_TEST],
-	[test "$build_os:$target_os:$host_os:$HAVE_WINE" = "linux-gnu:mingw32msvc:mingw32msvc:yes"])
-
-#====================================================================================
-# Couple of initializations here. Fill in real values later.
-
-SHLIB_VERSION_ARG=""
-
-#====================================================================================
-# Finished checking, handle options.
-
-AC_ARG_ENABLE(experimental,
-	AC_HELP_STRING([--enable-experimental], [enable experimental code]))
-
-EXPERIMENTAL_CODE=0
-if test x$enable_experimental = xyes ; then
-	EXPERIMENTAL_CODE=1
-	fi
-AC_DEFINE_UNQUOTED([ENABLE_EXPERIMENTAL_CODE],${EXPERIMENTAL_CODE}, [Set to 1 to enable experimental code.])
-
-AC_ARG_ENABLE(werror,
-	AC_HELP_STRING([--enable-werror], [enable -Werror in all Makefiles]))
-
-AC_ARG_ENABLE(stack-smash-protection,
-       AC_HELP_STRING([--enable-stack-smash-protection], [Enable GNU GCC stack smash protection]))
-
-AC_ARG_ENABLE(gcc-pipe,
-	AC_HELP_STRING([--disable-gcc-pipe], [disable gcc -pipe option]))
-
-AC_ARG_ENABLE(gcc-opt,
-	AC_HELP_STRING([--disable-gcc-opt], [disable gcc optimisations]))
-
-AC_ARG_ENABLE(cpu-clip,
-	AC_HELP_STRING([--disable-cpu-clip], [disable tricky cpu specific clipper]))
-
-AC_ARG_ENABLE(bow-docs,
-	AC_HELP_STRING([--enable-bow-docs], [enable black-on-white html docs]))
-
-AC_ARG_ENABLE(sqlite,
-	AC_HELP_STRING([--disable-sqlite], [disable use of sqlite]))
-
-AC_ARG_ENABLE(alsa,
-	AC_HELP_STRING([--disable-alsa], [disable use of ALSA]))
-
-AC_ARG_ENABLE(external-libs,
-	AC_HELP_STRING([--disable-external-libs], [disable use of FLAC, Ogg and Vorbis [[default=no]]]))
-
-AC_ARG_ENABLE(octave,
-	AC_HELP_STRING([--enable-octave], [disable building of GNU Octave module]))
-
-AC_ARG_ENABLE(test-coverage,
-	AC_HELP_STRING([--enable-test-coverage], [enable test coverage]))
-AM_CONDITIONAL([ENABLE_TEST_COVERAGE], [test "$enable_test_coverage" = yes])
-
-#====================================================================================
-# Check types and their sizes.
-
-AC_CHECK_SIZEOF(wchar_t,4)
-AC_CHECK_SIZEOF(short,2)
-AC_CHECK_SIZEOF(int,4)
-AC_CHECK_SIZEOF(long,4)
-AC_CHECK_SIZEOF(float,4)
-AC_CHECK_SIZEOF(double,4)
-AC_CHECK_SIZEOF(void*,8)
-AC_CHECK_SIZEOF(size_t,4)
-AC_CHECK_SIZEOF(int64_t,8)
-AC_CHECK_SIZEOF(long long,8)
-
-#====================================================================================
-# Find an appropriate type for sf_count_t.
-# On systems supporting files larger than 2 Gig, sf_count_t must be a 64 bit value.
-# Unfortunately there is more than one way of ensuring this so need to do some
-# pretty rigourous testing here.
-
-# Check for common 64 bit file offset types.
-AC_CHECK_SIZEOF(off_t,1)
-AC_CHECK_SIZEOF(loff_t,1)
-AC_CHECK_SIZEOF(off64_t,1)
-
-if test "$enable_largefile:$ac_cv_sizeof_off_t" = "no:8" ; then
-	echo
-	echo "Error : Cannot disable large file support because sizeof (off_t) == 8."
-	echo
-	exit 1
-	fi
-
-
-case "$host_os" in
-	mingw32msvc | mingw32)
-		TYPEOF_SF_COUNT_T="__int64"
-		SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-		SIZEOF_SF_COUNT_T=8
-		AC_DEFINE([__USE_MINGW_ANSI_STDIO],1,[Set to 1 to use C99 printf/snprintf in MinGW.])
-		;;
-	*)
-		SIZEOF_SF_COUNT_T=0
-		if test "x$ac_cv_sizeof_off_t" = "x8" ; then
-			# If sizeof (off_t) is 8, no further checking is needed.
-			TYPEOF_SF_COUNT_T="int64_t"
-			SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-			SIZEOF_SF_COUNT_T=8
-		elif test "x$ac_cv_sizeof_loff_t" = "x8" ; then
-			TYPEOF_SF_COUNT_T="int64_t"
-			SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-			SIZEOF_SF_COUNT_T=8
-		elif test "x$ac_cv_sizeof_off64_t" = "x8" ; then
-			TYPEOF_SF_COUNT_T="int64_t"
-			SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-			SIZEOF_SF_COUNT_T=8
-		else
-			# Save the old sizeof (off_t) value  and then unset it to see if it
-			# changes when Large File Support is enabled.
-			pre_largefile_sizeof_off_t=$ac_cv_sizeof_off_t
-			unset ac_cv_sizeof_off_t
-
-			AC_SYS_LARGEFILE
-
-			if test "x$ac_cv_sys_largefile_CFLAGS" = "xno" ; then
-				ac_cv_sys_largefile_CFLAGS=""
-				fi
-			if test "x$ac_cv_sys_largefile_LDFLAGS" = "xno" ; then
-				ac_cv_sys_largefile_LDFLAGS=""
-				fi
-			if test "x$ac_cv_sys_largefile_LIBS" = "xno" ; then
-				ac_cv_sys_largefile_LIBS=""
-				fi
-
-			AC_CHECK_SIZEOF(off_t,1)
-
-			if test "x$ac_cv_sizeof_off_t" = "x8" ; then
-				TYPEOF_SF_COUNT_T="int64_t"
-				SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-			elif test "x$TYPEOF_SF_COUNT_T" = "xunknown" ; then
-				echo
-				echo "*** The configure process has determined that this system is capable"
-				echo "*** of Large File Support but has not been able to find a type which"
-				echo "*** is an unambiguous 64 bit file offset."
-				echo "*** Please contact the author to help resolve this problem."
-				echo
-				AC_MSG_ERROR([[Bad file offset type.]])
-				fi
-			fi
-		;;
-	esac
-
-if test $SIZEOF_SF_COUNT_T = 4 ; then
-	SF_COUNT_MAX="0x7FFFFFFF"
-	fi
-
-AC_DEFINE_UNQUOTED([TYPEOF_SF_COUNT_T],${TYPEOF_SF_COUNT_T}, [Set to long if unknown.])
-AC_SUBST(TYPEOF_SF_COUNT_T)
-
-AC_DEFINE_UNQUOTED([SIZEOF_SF_COUNT_T],${SIZEOF_SF_COUNT_T}, [Set to sizeof (long) if unknown.])
-AC_SUBST(SIZEOF_SF_COUNT_T)
-
-AC_DEFINE_UNQUOTED([SF_COUNT_MAX],${SF_COUNT_MAX}, [Set to maximum allowed value of sf_count_t type.])
-AC_SUBST(SF_COUNT_MAX)
-
-AC_CHECK_TYPES(ssize_t)
-AC_CHECK_SIZEOF(ssize_t,4)
-
-#====================================================================================
-# Determine endian-ness of target processor.
-
-MN_C_FIND_ENDIAN
-
-AC_DEFINE_UNQUOTED(CPU_IS_BIG_ENDIAN, ${ac_cv_c_big_endian},
-	[Target processor is big endian.])
-AC_DEFINE_UNQUOTED(CPU_IS_LITTLE_ENDIAN, ${ac_cv_c_little_endian},
-	[Target processor is little endian.])
-AC_DEFINE_UNQUOTED(WORDS_BIGENDIAN, ${ac_cv_c_big_endian},
-	[Target processor is big endian.])
-
-#====================================================================================
-# Check for functions.
-
-AC_CHECK_FUNCS(malloc calloc realloc free)
-AC_CHECK_FUNCS(open read write lseek lseek64)
-AC_CHECK_FUNCS(fstat fstat64 ftruncate fsync)
-AC_CHECK_FUNCS(snprintf vsnprintf)
-AC_CHECK_FUNCS(gmtime gmtime_r localtime localtime_r gettimeofday)
-AC_CHECK_FUNCS(mmap getpagesize)
-AC_CHECK_FUNCS(setlocale)
-AC_CHECK_FUNCS(pipe waitpid)
-
-AC_CHECK_LIB([m],floor)
-AC_CHECK_FUNCS(floor ceil fmod lround)
-
-MN_C99_FUNC_LRINT
-MN_C99_FUNC_LRINTF
-
-#====================================================================================
-# Check for requirements for building plugins for other languages/enviroments.
-
-dnl Octave maths environment http://www.octave.org/
-if test x$cross_compiling = xno ; then
-	if test x$enable_octave = xno ; then
-		AM_CONDITIONAL(BUILD_OCTAVE_MOD, false)
-	else
-		AC_OCTAVE_BUILD
-		fi
-else
-	AM_CONDITIONAL(BUILD_OCTAVE_MOD, false)
-	fi
-
-#====================================================================================
-# Check for Ogg, Vorbis and FLAC.
-
-HAVE_EXTERNAL_LIBS=0
-EXTERNAL_CFLAGS=""
-EXTERNAL_LIBS=""
-
-# Check for pkg-config outside the if statement.
-#PKG_PROG_PKG_CONFIG
-#m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
-
-#if test -n "$PKG_CONFIG" ; then
-#	if test x$enable_external_libs = xno ; then
-#		AC_MSG_WARN([[*** External libs (FLAC, Ogg, Vorbis) disabled. ***]])
-#	else
-#		PKG_CHECK_MOD_VERSION([FLAC], [flac >= 1.2.1], [ac_cv_flac=yes], [ac_cv_flac=no])
-
-		# Make sure the FLAC_CFLAGS value is sane.
-#		FLAC_CFLAGS=`echo $FLAC_CFLAGS | $SED "s|include/FLAC|include|"`
-
-#		PKG_CHECK_MOD_VERSION([OGG], [ogg >= 1.1.3], [ac_cv_ogg=yes], [ac_cv_ogg=no])
-
-#		if test x$enable_experimental = xyes ; then
-#			PKG_CHECK_MOD_VERSION([SPEEX], [speex >= 1.2], [ac_cv_speex=yes], [ac_cv_speex=no])
-#		else
-#			SPEEX_CFLAGS=""
-#			SPEEX_LIBS=""
-#			fi
-
-		# Vorbis versions earlier than 1.2.3 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
-#		PKG_CHECK_MOD_VERSION([VORBIS], [vorbis >= 1.2.3], [ac_cv_vorbis=yes], [ac_cv_vorbis=no])
-#		PKG_CHECK_MOD_VERSION([VORBISENC], [vorbisenc >= 1.2.3], [ac_cv_vorbisenc=yes], [ac_cv_vorbisenc=no])
-#		enable_external_libs=yes
-#		fi
-
-#	if test x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc = "xyesyesyesyes" ; then
-#		HAVE_EXTERNAL_LIBS=1
-#		enable_external_libs=yes
-
-#		EXTERNAL_CFLAGS="$FLAC_CFLAGS $OGG_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS"
-#		EXTERNAL_LIBS="$FLAC_LIBS $OGG_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS "
-#	else
-#		echo
-#		AC_MSG_WARN([[*** One or more of the external libraries (ie libflac, libogg and]])
-#		AC_MSG_WARN([[*** libvorbis) is either missing (possibly only the development]])
-#		AC_MSG_WARN([[*** headers) or is of an unsupported version.]])
-#		AC_MSG_WARN([[***]])
-#		AC_MSG_WARN([[*** Unfortunately, for ease of maintenance, the external libs]])
-#		AC_MSG_WARN([[*** are an all or nothing affair.]])
-#		echo
-#		enable_external_libs=no
-#		fi
-#	fi
-
-AC_DEFINE_UNQUOTED([HAVE_EXTERNAL_LIBS], $HAVE_EXTERNAL_LIBS, [Will be set to 1 if flac, ogg and vorbis are available.])
-
-#====================================================================================
-# Check for libsqlite3 (only used in regtest).
-
-ac_cv_sqlite3=no
-#if test x$enable_sqlite != xno ; then
-#	PKG_CHECK_MOD_VERSION([SQLITE3], [sqlite3 >= 3.2], [ac_cv_sqlite3=yes], [ac_cv_sqlite3=no])
-#	fi
-
-if test x$ac_cv_sqlite3 = "xyes" ; then
-	HAVE_SQLITE3=1
-else
-	HAVE_SQLITE3=0
-	fi
-
-AC_DEFINE_UNQUOTED([HAVE_SQLITE3],$HAVE_SQLITE3,[Set to 1 if you have libsqlite3.])
-
-#====================================================================================
-# Determine if the processor can do clipping on float to int conversions.
-
-if test x$enable_cpu_clip != "xno" ; then
-	MN_C_CLIP_MODE
-else
-	echo "checking processor clipping capabilities... disabled"
-	ac_cv_c_clip_positive=0
-	ac_cv_c_clip_negative=0
-	fi
-
-AC_DEFINE_UNQUOTED(CPU_CLIPS_POSITIVE, ${ac_cv_c_clip_positive},
-	[Target processor clips on positive float to int conversion.])
-AC_DEFINE_UNQUOTED(CPU_CLIPS_NEGATIVE, ${ac_cv_c_clip_negative},
-	[Target processor clips on negative float to int conversion.])
-
-#====================================================================================
-# Target OS specific stuff.
-
-OS_SPECIFIC_CFLAGS=""
-OS_SPECIFIC_LINKS=""
-os_is_win32=0
-use_windows_api=0
-osx_darwin_version=0
-
-case "$host_os" in
-	darwin* | rhapsody*)
-		osx_darwin_version=$(echo "$host_os" | sed 's/\..*//;s/darwin//g')
-		if test x$HAVE_XCODE_SELECT = xyes ; then
-			developer_path=`xcode-select --print-path`
-		else
-			developer_path="/Developer"
-			fi
-		OS_SPECIFIC_CFLAGS="-I${developer_path}/Headers/FlatCarbon"
-		OS_SPECIFIC_LINKS="-framework CoreAudio -framework AudioToolbox -framework CoreFoundation"
-		;;
-	mingw*)
-		os_is_win32=1
-		use_windows_api=1
-		OS_SPECIFIC_LINKS="-lwinmm"
-		;;
-	esac
-
-AC_DEFINE_UNQUOTED(OS_IS_WIN32, ${os_is_win32}, [Set to 1 if compiling for Win32])
-AC_DEFINE_UNQUOTED(USE_WINDOWS_API, ${use_windows_api}, [Set to 1 to use the native windows API])
-AC_DEFINE_UNQUOTED(OSX_DARWIN_VERSION, ${osx_darwin_version}, [The darwin version, no-zero is valid])
-AM_CONDITIONAL(USE_WIN_VERSION_FILE, test ${use_windows_api} -eq 1)
-
-#====================================================================================
-# Check for ALSA.
-
-ALSA_LIBS=""
-
-if test x$enable_alsa != xno ; then
-	AC_CHECK_HEADERS(alsa/asoundlib.h)
-	if test x$ac_cv_header_alsa_asoundlib_h = xyes ; then
-		ALSA_LIBS="-lasound"
-		enable_alsa=yes
-		fi
-	fi
-
-#====================================================================================
-# Check for OpenBSD's sndio.
-
-SNDIO_LIBS=""
-AC_CHECK_HEADERS(sndio.h)
-if test x$ac_cv_header_sndio_h = xyes ; then
-	SNDIO_LIBS="-lsndio"
-	fi
-
-#====================================================================================
-# Test for sanity when cross-compiling.
-
-if test $ac_cv_sizeof_short != 2 ; then
-	AC_MSG_WARN([[******************************************************************]])
-	AC_MSG_WARN([[*** sizeof (short) != 2.                                          ]])
-	AC_MSG_WARN([[******************************************************************]])
-	fi
-
-if test $ac_cv_sizeof_int != 4 ; then
-	AC_MSG_WARN([[******************************************************************]])
-	AC_MSG_WARN([[*** sizeof (int) != 4                                             ]])
-	AC_MSG_WARN([[******************************************************************]])
-	fi
-
-if test $ac_cv_sizeof_float != 4 ; then
-	AC_MSG_WARN([[******************************************************************]])
-	AC_MSG_WARN([[*** sizeof (float) != 4.                                          ]])
-	AC_MSG_WARN([[******************************************************************]])
-	fi
-
-if test $ac_cv_sizeof_double != 8 ; then
-	AC_MSG_WARN([[******************************************************************]])
-	AC_MSG_WARN([[*** sizeof (double) != 8.                                         ]])
-	AC_MSG_WARN([[******************************************************************]])
-	fi
-
-if test x"$ac_cv_prog_HAVE_AUTOGEN" = "xno" ; then
-	AC_MSG_WARN([[Touching files in directory tests/.]])
-	touch tests/*.c tests/*.h
-	fi
-
-#====================================================================================
-# Settings for the HTML documentation.
-
-if test x$enable_bow_docs = "xyes" ; then
-	HTML_BGCOLOUR="white"
-	HTML_FGCOLOUR="black"
-else
-	HTML_BGCOLOUR="black"
-	HTML_FGCOLOUR="white"
-	fi
-
-#====================================================================================
-# Now use the information from the checking stage.
-
-win32_target_dll=0
-COMPILER_IS_GCC=0
-
-if test x$ac_cv_c_compiler_gnu = xyes ; then
-	MN_ADD_CFLAGS(-std=gnu99)
-
-	MN_GCC_VERSION
-
-	if test "x$GCC_MAJOR_VERSION$GCC_MINOR_VERSION" = "x42" ; then
-		AC_MSG_WARN([****************************************************************])
-		AC_MSG_WARN([** GCC version 4.2 warns about the inline keyword for no good **])
-		AC_MSG_WARN([** reason but the maintainers do not see it as a bug.         **])
-		AC_MSG_WARN([** See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995      **])
-		AC_MSG_WARN([** Using -fgnu-inline to avoid this stupidity.                **])
-		AC_MSG_WARN([****************************************************************])
-		MN_ADD_CFLAGS([-fgnu89-inline])
-		fi
-
-	CFLAGS="$CFLAGS -Wall"
-	CXXFLAGS="$CXXFLAGS -Wall"
-
-	MN_ADD_CFLAGS([-Wextra])
-
-	AC_LANG_PUSH([C++])
-	MN_ADD_CXXFLAGS([-Wextra])
-	AC_LANG_POP([C++])
-
-	MN_ADD_CFLAGS([-Wdeclaration-after-statement])
-	MN_ADD_CFLAGS([-Wpointer-arith])
-	MN_ADD_CFLAGS([-funsigned-char])
-
-	MN_ADD_CFLAGS([-D_FORTIFY_SOURCE=2])
-
-	if test x$enable_stack_smash_protection = "xyes" ; then
-		XIPH_GCC_STACK_PROTECTOR
-		XIPH_GXX_STACK_PROTECTOR
-		fi
-
-	if test x$enable_test_coverage = "xyes" ; then
-		# MN_ADD_CFLAGS([-ftest-coverage])
-		MN_ADD_CFLAGS([-coverage])
-		fi
-
-	CFLAGS="$CFLAGS     -Wcast-align -Wcast-qual -Wshadow -Wbad-function-cast -Wwrite-strings -Wundef -Wuninitialized -Winit-self -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Waggregate-return"
-	# -Winline -Wconversion  -Wunreachable-code"
-	CXXFLAGS="$CXXFLAGS -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wreorder -Wsign-promo -Wundef -Wuninitialized -Winit-self"
-
-	if test "x$enable_gcc_opt" = "xno" ; then
-		temp_CFLAGS=`echo $CFLAGS | $SED "s/O2/O0/"`
-		CFLAGS=$temp_CFLAGS
-		AC_MSG_WARN([[*** Compiler optimisations switched off. ***]])
-		fi
-
-	# OS specific tweaks.
-	case "$host_os" in
-		darwin* | rhapsody*)
-			# Disable -Wall, -pedantic and -Wshadow for Apple Darwin/Rhapsody.
-			# System headers on these systems are broken.
-			temp_CFLAGS=`echo $CFLAGS | $SED "s/-Wall -pedantic//" | $SED "s/-Wshadow//" | $SED "s/-Waggregate-return//"`
-			CFLAGS=$temp_CFLAGS
-			SHLIB_VERSION_ARG="-Wl,-exported_symbols_list -Wl,\$(builddir)/Symbols.darwin"
-			;;
-		linux*|kfreebsd*-gnu*|gnu*)
-			SHLIB_VERSION_ARG="-Wl,--version-script=\$(builddir)/Symbols.gnu-binutils"
-			;;
-		mingw*)
-			# Linker flag '-Wl,--out-implib' does not work with mingw cross compiler
-			# so we don't use it here.
-			SHLIB_VERSION_ARG="-Wl,\$(builddir)/libsndfile-1.def"
-			win32_target_dll=1
-			if test x"$enable_shared" = xno ; then
-				win32_target_dll=0
-				fi
-			;;
-		os2*)
-			SHLIB_VERSION_ARG="-Wl,-export-symbols \$(builddir)/Symbols.os2"
-			;;
-		*)
-			;;
-		esac
-	if test x$enable_gcc_pipe != "xno" ; then
-	 	CFLAGS="$CFLAGS -pipe"
-	 	fi
-
-	COMPILER_IS_GCC=1
-	fi
-
-if test x$enable_werror = "xyes" ; then
-	MN_ADD_CFLAGS([-Werror])
-
-	AC_LANG_PUSH([C++])
-	MN_ADD_CXXFLAGS([-Werror])
-	AC_LANG_POP([C++])
-	fi
-
-
-AC_DEFINE_UNQUOTED([WIN32_TARGET_DLL], ${win32_target_dll}, [Set to 1 if windows DLL is being built.])
-AC_DEFINE_UNQUOTED([COMPILER_IS_GCC], ${COMPILER_IS_GCC}, [Set to 1 if the compile is GNU GCC.])
-
-CFLAGS="$CFLAGS $OS_SPECIFIC_CFLAGS"
-
-if test x"$CFLAGS" = x ; then
-	echo "Error in configure script. CFLAGS has been screwed up."
-	exit
-	fi
-
-HOST_TRIPLET="${host_cpu}-${host_vendor}-${host_os}"
-
-AC_DEFINE_UNQUOTED([HOST_TRIPLET], "${HOST_TRIPLET}", [The host triplet of the compiled binary.])
-
-if test "$HOST_TRIPLET" = "x86_64-w64-mingw32" ; then
-	OS_SPECIFIC_LINKS=" -static-libgcc $OS_SPECIFIC_LINKS"
-	fi
-
-WIN_RC_VERSION=`echo $PACKAGE_VERSION | $SED -e "s/p.*//" -e "s/\./,/g"`
-
-
-if test "$enable_static" = no ; then
-	SRC_BINDIR=src/.libs/
-	TEST_BINDIR=tests/.libs/
-else
-	SRC_BINDIR=src/
-	TEST_BINDIR=tests/
-	fi
-
-#-------------------------------------------------------------------------------
-
-AC_SUBST(HOST_TRIPLET)
-
-AC_SUBST(HTML_BGCOLOUR)
-AC_SUBST(HTML_FGCOLOUR)
-
-AC_SUBST(SHLIB_VERSION_ARG)
-AC_SUBST(SHARED_VERSION_INFO)
-AC_SUBST(CLEAN_VERSION)
-AC_SUBST(WIN_RC_VERSION)
-
-AC_SUBST(OS_SPECIFIC_CFLAGS)
-AC_SUBST(OS_SPECIFIC_LINKS)
-AC_SUBST(ALSA_LIBS)
-AC_SUBST(SNDIO_LIBS)
-
-AC_SUBST(EXTERNAL_CFLAGS)
-AC_SUBST(EXTERNAL_LIBS)
-AC_SUBST(SRC_BINDIR)
-AC_SUBST(TEST_BINDIR)
-
-dnl The following line causes the libtool distributed with the source
-dnl to be replaced if the build system has a more recent version.
-AC_SUBST(LIBTOOL_DEPS)
-
-AC_CONFIG_FILES([ \
-	src/Makefile man/Makefile examples/Makefile tests/Makefile regtest/Makefile \
-	M4/Makefile Win32/Makefile Octave/Makefile programs/Makefile \
-	Makefile \
-	src/version-metadata.rc tests/test_wrapper.sh tests/pedantic-header-test.sh \
-	doc/libsndfile.css Scripts/build-test-tarball.mk libsndfile.spec sndfile.pc \
-	src/sndfile.h \
-	echo-install-dirs
-	])
-AC_OUTPUT
-
-# Make sure these are executable.
-chmod u+x tests/test_wrapper.sh build-test-tarball.mk echo-install-dirs
-
-#====================================================================================
-
-AC_MSG_RESULT([
--=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-
-
-  Configuration summary :
-
-    libsndfile version : .................. ${VERSION}
-
-    Host CPU : ............................ ${host_cpu}
-    Host Vendor : ......................... ${host_vendor}
-    Host OS : ............................. ${host_os}
-
-    Experimental code : ................... ${enable_experimental:-no}
-    Using ALSA in example programs : ...... ${enable_alsa:-no}
-    External FLAC/Ogg/Vorbis : ............ ${enable_external_libs:-no}
-])
-
-if test -z "$PKG_CONFIG" ; then
-	echo "    *****************************************************************"
-	echo "    ***          The pkg-config program is missing.               ***"
-	echo "    *** External FLAC/Ogg/Vorbis libs cannot be found without it. ***"
-	echo "    ***       http://pkg-config.freedesktop.org/wiki/             ***"
-	echo "    *****************************************************************"
-	echo
-	fi
-
-echo "  Tools :"
-echo
-echo "    Compiler is Clang : ................... ${mn_cv_c_compiler_clang}"
-echo "    Compiler is GCC : ..................... ${ac_cv_c_compiler_gnu}"
-
-if test x$ac_cv_c_compiler_gnu = xyes ; then
-	echo "    GCC version : ......................... ${GCC_VERSION}"
-	if test $GCC_MAJOR_VERSION -lt 3 ; then
-		echo "\n"
-		echo "    ** This compiler version allows applications to write"
-		echo "    ** to static strings within the library."
-		echo "    ** Compile with GCC version 3.X or above to avoid this problem."
-		fi
-	fi
-
-./echo-install-dirs
-
-# Remove symlink created by Scripts/android-configure.sh.
-test -h gdbclient && rm -f gdbclient
-
-(cd src && make genfiles)
diff --git a/libs/libsndfile/configure.gnu b/libs/libsndfile/configure.gnu
deleted file mode 100644
index 80e107f2be..0000000000
--- a/libs/libsndfile/configure.gnu
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-srcpath=$(dirname $0 2>/dev/null )  || srcpath="." 
-$srcpath/configure "$@" --disable-sqlite --disable-shared --with-pic --disable-octave --disable-external-libs
-
diff --git a/libs/libsndfile/doc/FAQ.html b/libs/libsndfile/doc/FAQ.html
deleted file mode 100644
index 4465b77bd5..0000000000
--- a/libs/libsndfile/doc/FAQ.html
+++ /dev/null
@@ -1,851 +0,0 @@
-<!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 : I have libsndfile installed and now I want to use it. 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="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 : I have libsndfile installed and now I want to use it. 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="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> 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>
-
-<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 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/libs/libsndfile/doc/Makefile.am b/libs/libsndfile/doc/Makefile.am
deleted file mode 100644
index b89f1454aa..0000000000
--- a/libs/libsndfile/doc/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-html_DATA = index.html libsndfile.jpg libsndfile.css api.html command.html \
-			bugs.html sndfile_info.html new_file_type.HOWTO \
-			win32.html FAQ.html lists.html embedded_files.html octave.html \
-			dither.html tutorial.html
-
-EXTRA_DIST = $(html_DATA)
-
diff --git a/libs/libsndfile/doc/api.html b/libs/libsndfile/doc/api.html
deleted file mode 100644
index 33d53dd02f..0000000000
--- a/libs/libsndfile/doc/api.html
+++ /dev/null
@@ -1,781 +0,0 @@
-<!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 &lt;stdio.h&gt;
-      #include &lt;sndfile.h&gt;
-
-      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
-&lt;sndfile.h&gt; 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 &lt; 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/libs/libsndfile/doc/bugs.html b/libs/libsndfile/doc/bugs.html
deleted file mode 100644
index 3a441fef11..0000000000
--- a/libs/libsndfile/doc/bugs.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!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 submit a ticket on the libsnfile
-		<A HREF="https://github.com/erikd/libsndfile/issues">github issue tracker</A>.
-
-</P>
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/command.html b/libs/libsndfile/doc/command.html
deleted file mode 100644
index f2ed083760..0000000000
--- a/libs/libsndfile/doc/command.html
+++ /dev/null
@@ -1,1687 +0,0 @@
-<!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 &lt;sndfile.h&gt;.
-	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 Variable Bit Rate encoding quality</TD>
-</TR>
-
-<TR>
-	<TD><A HREF="#SFC_SET_COMPRESSION_LEVEL">SFC_SET_COMPRESSION_LEVEL</A></TD>
-	<TD>Set the compression level.</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_SET_CART_INFO">SFC_SET_CART_INFO</A></TD>
-	<TD>Set the Cart Chunk info</TD>
-</TR>
-
-<TR>
-	<TD><A HREF="#SFC_GET_CART_INFO">SFC_GET_CART_INFO</A></TD>
-	<TD>Retrieve the Cart 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="#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, &amp;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, &amp;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, &amp;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, &amp;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 &lt;sndfile.h&gt; 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 &lt;= format &lt;= 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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &amp;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 &lt;sndfile.h&gt; 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 &amp; SF_FORMAT_TYPEMASK) is a valid format then the struct
-is filled in with information about the given major type.
-If (format &amp; SF_FORMAT_TYPEMASK) is FALSE and (format &amp; 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, &amp;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, &amp;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, &amp;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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &amp;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, &amp;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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &amp;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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &amp;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, &amp;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, &amp;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 &lt;sndfile.h&gt; 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 Variable Bit Rate encoding quality.
-The encoding quality value should be between 0.0 (lowest quality) and 1.0
-(highest quality).
-Currenly this command is only implemented for FLAC and Ogg/Vorbis files.
-</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>SF_TRUE if VBR encoding quality was set.
-    SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_COMPRESSION_LEVEL"></A>
-<H2><BR><B>SFC_SET_COMPRESSION_LEVEL</B></H2>
-<P>
-Set the compression level.
-The compression level should be between 0.0 (minimum compression level) and 1.0
-(highest compression level).
-Currenly this command is only implemented for FLAC and Ogg/Vorbis files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_COMPRESSION_LEVEL
-        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>SF_TRUE if compression level was set.
-    SF_FALSE 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 &lt;sndfile.h&gt; 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_CART_INFO"></A>
-<H2><BR><B>SFC_GET_CART_INFO</B></H2>
-<P>Retrieve the Cart Chunk from WAV (and related) files.  Based on AES46 standard for CartChunk (see <a href="http://www.cartchunk.org/">CartChunk.org</a> for more information.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_CART_INFO
-        data     : a pointer to an SF_CART_INFO struct
-        datasize : sizeof (SF_CART_INFO)
-</PRE>
-<P>
-The SF_CART_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-#define SF_CART_INFO_VAR(p_tag_text_size) \
-                        struct
-                        {       char            version [4] ;
-                                char            title [64] ;
-                                char            artist [64] ;
-                                char            cut_id [64] ;
-                                char            client_id [64] ;
-                                char            category [64] ;
-                                char            classification [64] ;
-                                char            out_cue [64] ;
-                                char            start_date [10] ;
-                                char            start_time [8] ;
-                                char            end_date [10] ;
-                                char            end_time [8] ;
-                                char            producer_app_id [64] ;
-                                char            producer_app_version [64] ;
-                                char            user_def [64] ;
-                                long    level_reference ;
-                                SF_CART_TIMER   post_timers [8] ;
-                                char            reserved [276] ;
-                                char            url [1024] ;
-                                unsigned int    tag_text_size ;
-                                char            tag_text[p_tag_text_size] ;
-                        }
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-	<DD>SF_TRUE if the file contained a Cart chunk or SF_FALSE
-	otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_CART_INFO"></A>
-<H2><BR><B>SFC_SET_CART_INFO</B></H2>
-<P>
-Set the Cart Chunk for WAV (and related) files.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_CART_INFO
-        data     : a pointer to an SF_CART_INFO struct
-        datasize : sizeof (SF_CART_INFO)
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-	<DD>SF_TRUE if setting the Cart 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 &lt;sndfile.h&gt; 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, &amp;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 &lt;sndfile.h&gt; 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, &amp;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, &amp;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>
-
-<!-- ========================================================================= -->
-
-
-<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/libs/libsndfile/doc/development.html b/libs/libsndfile/doc/development.html
deleted file mode 100644
index 4236cdbb87..0000000000
--- a/libs/libsndfile/doc/development.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	libsndfile Development
-	</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 Development</H1>
-<!-- pepper -->
-<P>
-libsndfile is being developed by a small but growing community of users
-and hackers led by Erik de Castro Lopo.
-People interested in helping should join the libsndfile-devel
-	<A HREF="lists.html">mailing list</A>
-where most of the discussion about new features takes place.
-</P>
-<!-- pepper -->
-<P>
-The main repository can be found on Github:
-</P>
-<!-- pepper -->
-<center>
-<A HREF="https://github.com/erikd/libsndfile/">
-			https://github.com/erikd/libsndfile/</A>
-</center>
-<!-- pepper -->
-<P>
-and includes
-	<a href="https://github.com/erikd/libsndfile/blob/master/README.md">
-	instuctions</a>
-on how to build libsndfilefrom the Git repo.
-</P>
-<!-- pepper -->
-</BODY>
-</HTML>
-
diff --git a/libs/libsndfile/doc/dither.html b/libs/libsndfile/doc/dither.html
deleted file mode 100644
index 01a416f8b3..0000000000
--- a/libs/libsndfile/doc/dither.html
+++ /dev/null
@@ -1,1017 +0,0 @@
-<!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 &lt;sndfile.h&gt;.
-	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, &amp;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, &amp;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, &amp;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 &lt;sndfile.h&gt; 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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k < count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &amp;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 &lt;sndfile.h&gt; 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, &amp;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, &amp;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, &amp;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, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k < count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &amp;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, &amp;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, &amp;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, &amp;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, &amp;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, &amp;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/libs/libsndfile/doc/donate.html b/libs/libsndfile/doc/donate.html
deleted file mode 100644
index c611f47ffd..0000000000
--- a/libs/libsndfile/doc/donate.html
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	libsndfile : donate.
-	</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>
-
-<br/>
-<!-- pepper -->
-<center>
-	<IMG SRC="libsndfile.jpg" HEIGHT=98 WIDTH=367 ALT="libsndfile.jpg">
-</center>
-<!-- pepper -->
-<br/>
-
-<p>
-Dear libsndfile user,
-</p>
-<!-- pepper -->
-<p>
-This library was developed on Linux for Linux. I am not a Windows user and
-maintaining this library for Windows costs me significant amounts of time above
-and beyond the time taken to make it work on Linux and Unix-like systems.
-</p>
-<!-- pepper -->
-<p>
-I therefore ask Windows users of libsndfile to donate to ensure that libsndfile's
-support for Windows continues. As long as donations continue to flow in at a decent
-rate, I will continue to release precompiled Windows binaries in sync with the
-Linux/Unix version. If donations are poor, support for windows will fall behind.
-</p>
-<!-- pepper -->
-
-<p>
-You are free to donate any amount you chose.
-As a guideline:
-</p>
-<!-- pepper -->
-<ul>
-<li>If you are simply a user of libsndfile that would like to ensure that
-	the development of libsndfile continues, a donation of $10US would be more
-	than adequate.
-	</li>
-<li>If you are shareware author that distributes libsndfile with your app and
-	makes more than $1000 a year from your shareware, a one off donation of $50
-	would be appropriate.
-	</li>
-<li>If your company is a commercial software house that distributes one or more
-	products that ship with libsndfile, a donation of $100 every second or third
-	year would be appropriate.
-	</li>
-</ul>
-
-<!-- pepper -->
-<p>
-Donations can be made in Bitcoin to the Bitcoin address
-	<b>15hVWemFiH6DLJ22SBYPk9b4fgWtxBEvfQ</b>
-
-which can be verified by checking the following GPG signature.
-</p>
-
-<pre>
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-libsndfile Bitcoin address : 15hVWemFiH6DLJ22SBYPk9b4fgWtxBEvfQ
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.12 (GNU/Linux)
-
-iQIcBAEBCAAGBQJSK7MUAAoJEEXYQ7zIiotIgXEP/R8hy65tlV7TiPw9bY9BklXS
-/Vl8FU2RhDkBt61ZmxbfDTybyQ5Vce/3wWph15L4RvpoX1OyeintQFmwwuPjOGiq
-eIz0nT9vDorG37Xdo5NZNBu9Tp1Od9MNtxFaAsRWFrDfvKEKljBHrcfM972cYrAp
-DaFd0Ik+bHKom9iQXFB7TFd0w2V4uszVMQDUGqb/vRNeRURZS7ypeMNwc8tZyTKR
-waEGMTa5sxxRjs7MqGRxSovnFT7JV3TNfdkBInUliIR/XvrudFR9J4Fiv+8Dk9P8
-WNjm6uFxvgIqiu1G9bjrwwr+DsBju93ljGNcZoayAKw5vwbX6KTcCbc31k9dP8Hf
-p6YdmPlZVKZmva+P3nLSJBTlxNu24Jm+ha+ZM/svDXTaPFWC8l5FP17kK0Bj8wCq
-N7pDz6RchEn10u+HdhfT1XiUjxj0zNXrr0GGj9apjl0RlT0O49eBttV0oXIdBRLi
-nTEaOWITpCgu7ggw1kWXHIWEncuiaSuJy/iH8PgNepWVj/6PxQRMrTqG4ux2Snk8
-Ua4vO8YHLMZX/XvSUS7eMtgfM7AO6YjJ/ac9bQif9bh6LsYEVVklysMUin6ZRS7Z
-Cms23FnqeQKtJOzdvqSJiV06lK6fP+tYdM4WSYn+AfL4IfYl2v48xXVU8XOOK9BH
-bJPKMDcz1ZvfYtX5mSW1
-=WXGB
------END PGP SIGNATURE-----
-</pre>
-
-<p>
-Thanks and regards,
-<br/>
-Erik de Castro Lopo
-<br/>
-Main libsndfile author and maintainer
-</p>
-
-<!-- pepper -->
-
-	<img src=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|trgb=0;0;0|wxh=15;20|md=6|dd=B|st=1|sh=1|df=libsndfile-donate.dat"
-	HEIGHT=0 WIDTH=0 ALT="">
-
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/embedded_files.html b/libs/libsndfile/doc/embedded_files.html
deleted file mode 100644
index c73e86a3b5..0000000000
--- a/libs/libsndfile/doc/embedded_files.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!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/libs/libsndfile/doc/index.html b/libs/libsndfile/doc/index.html
deleted file mode 100644
index bdd25aad10..0000000000
--- a/libs/libsndfile/doc/index.html
+++ /dev/null
@@ -1,493 +0,0 @@
-<!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>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>&nbsp;</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>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>Signed 8 bit PCM</TD>
-	<TD>&nbsp;</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>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</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>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-	<TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</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>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>IMA ADPCM</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>MS ADPCM</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>GSM 6.10</TD>
-	<TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G721 ADPCM 32kbps</TD>
-	<TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G723 ADPCM 24kbps</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G723 ADPCM 40kbps</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>12 bit DWVW</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>16 bit DWVW</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>24 bit DWVW</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>Ok Dialogic ADPCM</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>8 bit DPCM</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>16 bit DPCM</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-	<TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</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="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="m&#97;ilt&#111;:&#101;rikd&#64;&#109;eg&#97;-&#110;erd.&#99;om">
-		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/libs/libsndfile/doc/libsndfile.css.in b/libs/libsndfile/doc/libsndfile.css.in
deleted file mode 100644
index 40fca0f145..0000000000
--- a/libs/libsndfile/doc/libsndfile.css.in
+++ /dev/null
@@ -1,92 +0,0 @@
-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 ;
-	margin-left : 6% ;
-	margin-right : 6% ;
-}
-a:link { color : #9090FF ; }
-a:visited { color : #5050FF ; }
-a:active { color : #FF00FF ; }
-a:hover { background-color : #202080 ; }
diff --git a/libs/libsndfile/doc/linux_games_programming.txt b/libs/libsndfile/doc/linux_games_programming.txt
deleted file mode 100644
index 747f59db26..0000000000
--- a/libs/libsndfile/doc/linux_games_programming.txt
+++ /dev/null
@@ -1,434 +0,0 @@
-# Here are some some emails I exchanged with a guy trying to use 
-# libsndfile version 1 with code from the book "Linux Games Programming"
-# by John Hall. The email addresses have been changed to foil the spam
-# bots.
-
-Date: Tue, 20 Jul 2004 22:49:21 +0100
-From: Paul <paul@fake-domain-name.co.uk>
-To: erikd@fake-domain-name.com
-Subject: Can you help with a problem?
-Date: Tue, 20 Jul 2004 22:49:21 +0100
-
-Hi,
-
-I'm trying to get the source examples in the "Programming Linux Games" 
-(NoStarch, Loki Software + John R. Hall) which use sndfile.h/libsndfile.
-
-While I can guess some of the newer versions of function calls and 
-enumerations, there are some which I cannot guess.
-
-Would you be able to translate them to the current version of 
-enumeration and function calls so that I can update the source?
-
-These are the three currently failing me:
-
-    sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename,SFM_READ, &sfinfo))
-    SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
-    SF_INFO.pcmbitwidth (guess: no idea!)
-
-There are probably more. I'm happy to send you the source files for 
-sound calls, scan the pages or anything else. Failing that, is there 
-somewhere with the changes listed so I can try and fix the code for myself?
-
-Thanks
-
-TTFN
-
-Paul
-
-================================================================================
-
-Date: Wed, 21 Jul 2004 17:38:08 +1000
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: Paul <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-
-On Tue, 20 Jul 2004 22:49:21 +0100
-Paul <paul@fake-domain-name.co.uk> wrote:
-
-> Hi,
-> 
-> I'm trying to get the source examples in the "Programming Linux Games" 
-> (NoStarch, Loki Software + John R. Hall) which use sndfile.h/libsndfile.
-> 
-> While I can guess some of the newer versions of function calls and 
-> enumerations, there are some which I cannot guess.
-> 
-> Would you be able to translate them to the current version of 
-> enumeration and function calls so that I can update the source?
-> 
-> These are the three currently failing me:
-> 
-> sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename, 
-> SFM_READ, &sfinfo))
-
-yes.
-
-> SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
-
-Actually this list:
-
-    SF_FORMAT_PCM_U8
-    SF_FORMAT_PCM_S8
-    SF_FORMAT_PCM_16
-    SF_FORMAT_PCM_24
-    SF_FORMAT_PCM_32
-
-> SF_INFO.pcmbitwidth (guess: no idea!)
-
-WIth the above change, pcmbitwidth becomes redundant.
-
-> There are probably more. I'm happy to send you the source files for 
-> sound calls, scan the pages or anything else. Failing that, is there 
-> somewhere with the changes listed so I can try and fix the code for
-> myself?
-
-Version 1.0.0 came out some time ago, but I think this:
-
-    http://www.mega-nerd.com/libsndfile/version-1.html
-
-lists most of the changes. You should also look at the API docs:
-
-    http://www.mega-nerd.com/libsndfile/api.html
-
-HTH,
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-"There is no reason why anyone would want a computer in their home"
-Ken Olson, DEC, 1977
-
-================================================================================
-
-From: PFJ <paul@fake-domain-name.co.uk>
-To: Erik de Castro Lopo <erikd@fake-domain-name.com>
-Subject: Re: Can you help with a problem?
-Date: Wed, 21 Jul 2004 09:07:39 +0100
-
-
-Hi Erik,
-
-Thanks for getting back to me.
-
-> > sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename, SFM_READ, &sfinfo))
->
-> yes.
-
-Yay!
-
-> > SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
->
-> Actually this list:
->
->     SF_FORMAT_PCM_U8
->     SF_FORMAT_PCM_S8
->     SF_FORMAT_PCM_16
->     SF_FORMAT_PCM_24
->     SF_FORMAT_PCM_32
-
-I know, but the source code explicitly has SF_FORMAT_PCM which given the
-code afterwards would equate to one of the above, but given that PCM
-files can have a varied bitwidth the author probably wanted to cover all
-bases.
-
-> Version 1.0.0 came out some time ago, but I think this:
->
->     http://www.mega-nerd.com/libsndfile/version-1.html
->
-> lists most of the changes. You should also look at the API docs:
->
->     http://www.mega-nerd.com/libsndfile/api.html
-
-I'll download them and see what I can gleen.
-
-Thanks again for getting back to me
-
-TTFN
-
-Paul
-
-================================================================================
-
-Date: Wed, 21 Jul 2004 18:20:29 +1000
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: PFJ <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-
-On Wed, 21 Jul 2004 09:07:39 +0100
-PFJ <paul@fake-domain-name.co.uk> wrote:
-
-> I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> code afterwards would equate to one of the above, but given that PCM
-> files can have a varied bitwidth the author probably wanted to cover all
-> bases.
-
-But surely the existing code does something like:
-
-    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
-    sfinfo.pcmbitwidth = 16;
-
-which can be directly translated to:
-
-    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
-
-and the same for pcmbitwitdhs of 24 and 32. For pcmbitwidth of 8
-you need to know that WAV files use SF_FORMAT_PCM_U8 and AIFF
-files use SF_FORMAT_PCM_S8. Thats all there is to it.
-
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-"Python addresses true pseudocode's two major failings: that it
-isn't standardized, and it isn't executable."
-- Grant R. Griffin  in comp.dsp
-
-================================================================================
-
-Subject: Re: Can you help with a problem?
-From: PFJ <paul@fake-domain-name.co.uk>
-To: Erik de Castro Lopo <erikd@fake-domain-name.com>
-Date: Wed, 21 Jul 2004 09:50:55 +0100
-
-Hi Erik,
-
-> > I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> > code afterwards would equate to one of the above, but given that PCM
-> > files can have a varied bitwidth the author probably wanted to cover all
-> > bases.
->
-> But surely the existing code does something like:
->
->     sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
->     sfinfo.pcmbitwidth = 16;
-
-If only!
-
-The actual code is this
-
-int LoadSoundFile(char *filename, sound_p sound)
-{
-    SNDFILE *file;
-    SF_INFO file_info;
-    short *buffer_short = NULL;
-    u_int8_t *buffer_8 = NULL;
-    int16_t *buffer_16 = NULL;
-    unsigned int i;
-
-    /* Open the file and retrieve sample information. */
-    file = sf_open_read(filename, &file_info);
-    // I've sorted this one already - PFJ
-
-    /* Make sure the format is acceptable. */
-    if ((file_info.format & 0x0F) != SF_FORMAT_PCM) {
-		printf("'%s' is not a PCM-based audio file.\n", filename);
-		sf_close(file);
-		return -1;
-    }
-
-    if ((file_info.pcmbitwidth == 8) && (file_info.channels == 1)) {
-		sound->format = AL_FORMAT_MONO8;
-    } else if ((file_info.pcmbitwidth == 8) && (file_info.channels == 2)) {
-		sound->format = AL_FORMAT_STEREO8;
-    } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 1)) {
-		sound->format = AL_FORMAT_MONO16;
-    } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 2)) {
-		sound->format = AL_FORMAT_STEREO16;
-    } else {
-		printf("Unknown sample format in %s.\n", filename);
-		sf_close(file);
-		return -1;
-    }
-
-    /* Allocate buffers. */
-    buffer_short = (short *)malloc(file_info.samples * file_info.channels * sizeof (short));
-
-    buffer_8 = (u_int8_t *)malloc(file_info.samples * file_info.channels * file_info.pcmbitwidth / 8);
-
-    buffer_16 = (int16_t *)buffer_8;
-
-    if (buffer_short == NULL || buffer_8 == NULL) {
-		printf("Unable to allocate enough memory for '%s'.\n", filename);
-		goto error_cleanup;
-    }
-
-    /* Read the entire sound file. */
-    if (sf_readf_short(file,buffer_short,file_info.samples) == (size_t)-1) {
-		printf("Error while reading samples from '%s'.\n", filename);
-		goto error_cleanup;
-    }
-
-<minor snip>
-
-    /* Fill in the sound data structure. */
-    sound->freq = file_info.samplerate;
-    sound->size = file_info.samples * file_info.channels * file_info.pcmbitwidth / 8;
-
-    /* Give our sound data to OpenAL. */
-    alGenBuffers(1, &sound->name);
-    if (alGetError() != AL_NO_ERROR) {
-		printf("Error creating an AL buffer name for %s.\n", filename);
-		goto error_cleanup;
-    }
-
-    alBufferData(sound->name, sound->format, buffer_8, sound->size,sound->freq);
-    if (alGetError() != AL_NO_ERROR) {
-		printf("Error sending buffer data to OpenAL for %s.\n", filename);
-		goto error_cleanup;
-    }
-
-    /* Close the file and return success. */
-    sf_close(file);
-    free(buffer_short);
-    free(buffer_8);
-
-    return 0;
-
- error_cleanup:
-    if (file != NULL) fclose(file);
-    free(buffer_short);
-    free(buffer_8);
-    return -1;
-}
-
-As you can see, the PCM material in the listing will not currently
-compile and for the other sndfile material, it probably won't either.
-
-Any help would be appreciated.
-
-TTFN
-
-Paul
-
-================================================================================
-
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: PFJ <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-Date: Wed, 21 Jul 2004 19:36:46 +1000
-
-On Wed, 21 Jul 2004 09:50:55 +0100
-PFJ <paul@fake-domain-name.co.uk> wrote:
-
-> Hi Erik,
-> 
-> > > I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> > > code afterwards would equate to one of the above, but given that PCM
-> > > files can have a varied bitwidth the author probably wanted to cover all
-> > > bases.
-> > 
-> > But surely the existing code does something like:
-> > 
-> >     sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
-> >     sfinfo.pcmbitwidth = 16;
-> 
-> If only!
-
-No, really.
-
-Drop this completely:
-
->     /* Make sure the format is acceptable. */
->     if ((file_info.format & 0x0F) != SF_FORMAT_PCM) {
-> 	printf("'%s' is not a PCM-based audio file.\n", filename);
-> 	sf_close(file);
-> 	return -1;
->     }
-
-Replace this block:
-
->     if ((file_info.pcmbitwidth == 8) && (file_info.channels == 1)) {
-> 	        sound->format = AL_FORMAT_MONO8;
->     } else if ((file_info.pcmbitwidth == 8) && (file_info.channels == 2)) {
->           sound->format = AL_FORMAT_STEREO8;
->     } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 1)) {
->           sound->format = AL_FORMAT_MONO16;
->     } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 2)) {
->           sound->format = AL_FORMAT_STEREO16;
->     } else {
->           printf("Unknown sample format in %s.\n", filename);
->           sf_close(file);
->           return -1;
->     }
-
-with:
-
-    int pcmbitwidth = 0;
-
-    if (file_info.format & SF_FORMAT_SUBMASK != SF_FORMAT_PCM_16)
-    { 	printf("'%s' is not a PCM-based audio file.\n", filename);
-        sf_close(file);
-        return -1;
-        }
-
-    if (file_info.channels < 1 || file_info.channels > 2)
-    { 	printf("'%s' bad channel count.\n", filename);
-        sf_close(file);
-        return -1;
-        }
-
-    switch (file_info.format & SF_FORMAT_SUBMASK + file_info.channels << 16)
-    {    case (SF_FORMAT_PCM_U8 + 1 << 16):
-             sound->format = AL_FORMAT_MONO8;
-             pcmbitwidth = 8;
-             break;
-         case (SF_FORMAT_PCM_U8 + 2 << 16):
-             sound->format = AL_FORMAT_STEREO8;
-             pcmbitwidth = 8;
-             break;
-         case (SF_FORMAT_PCM_16 + 1 << 16):
-             sound->format = AL_FORMAT_MONO16;
-             pcmbitwidth = 16;
-             break;
-         case (SF_FORMAT_PCM_16 + 2 << 16):
-             sound->format = AL_FORMAT_STEREO16;
-             pcmbitwidth = 16;
-             break;
-         default:
-             printf("Unknown sample format in %s.\n", filename);
-             sf_close(file);
-             return -1;
-         }
-
->     /* Allocate buffers. */
->     buffer_short = (short *)malloc(file_info.samples *
-> 				   file_info.channels * 
-> 				   sizeof (short));
-> 
->     buffer_8 = (u_int8_t *)malloc(file_info.samples *
-> 				  file_info.channels *
-> 				  file_info.pcmbitwidth / 8);
-
-Use pcmbitwidth as calculated above.
-
->     buffer_16 = (int16_t *)buffer_8;
-> 
->     if (buffer_short == NULL || buffer_8 == NULL) {
-> 	printf("Unable to allocate enough memory for '%s'.\n", filename);
-> 	goto error_cleanup;
->     }
-> 
->     /* Read the entire sound file. */
->     if (sf_readf_short(file,buffer_short,file_info.samples) == (size_t)- 1) {
-
-Replace "(size_t) - 1" with " < 0".
-
-> As you can see, the PCM material in the listing will not currently
-> compile and for the other sndfile material, it probably won't either.
-
-None of the changes above should have been very difficult to figure
-out.
-
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-Microsoft is finally bringing all of its Windows operating system families
-under one roof. It will combine all of the features of CE, stability and
-support of ME and the speed of NT.
-It will be called Windows CEMENT...
-
diff --git a/libs/libsndfile/doc/lists.html b/libs/libsndfile/doc/lists.html
deleted file mode 100644
index 7d95170271..0000000000
--- a/libs/libsndfile/doc/lists.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!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&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-		<A HREF="m&#97;ilt&#111;:li&#98;sndfile-announce-request@meg&#97;-nerd.&#99;om?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&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-		<A HREF="m&#97;ilt&#111;:li&#98;sndfile-devel-request@meg&#97;-nerd.&#99;om?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&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-		<A HREF="m&#97;ilt&#111;:li&#98;sndfile-users-request@meg&#97;-nerd.&#99;om?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/libs/libsndfile/doc/new_file_type.HOWTO b/libs/libsndfile/doc/new_file_type.HOWTO
deleted file mode 100644
index a6da80aeff..0000000000
--- a/libs/libsndfile/doc/new_file_type.HOWTO
+++ /dev/null
@@ -1,135 +0,0 @@
-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/libs/libsndfile/doc/octave.html b/libs/libsndfile/doc/octave.html
deleted file mode 100644
index b696e6b81a..0000000000
--- a/libs/libsndfile/doc/octave.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!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/audio/index.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/libs/libsndfile/doc/pkgconfig.html b/libs/libsndfile/doc/pkgconfig.html
deleted file mode 100644
index c89193d1ed..0000000000
--- a/libs/libsndfile/doc/pkgconfig.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!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/libs/libsndfile/doc/print.css b/libs/libsndfile/doc/print.css
deleted file mode 100644
index deb5b13da0..0000000000
--- a/libs/libsndfile/doc/print.css
+++ /dev/null
@@ -1,14 +0,0 @@
-body {
-	background:white;
-	color:black;
-}
-
-h1{
-	background:white;
-	color:black;
-}
-
-h2 {
-	background:white;
-	color:#666;
-}
diff --git a/libs/libsndfile/doc/sndfile_info.html b/libs/libsndfile/doc/sndfile_info.html
deleted file mode 100644
index a84f24150f..0000000000
--- a/libs/libsndfile/doc/sndfile_info.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!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/libs/libsndfile/doc/tutorial.html b/libs/libsndfile/doc/tutorial.html
deleted file mode 100644
index e3112393ad..0000000000
--- a/libs/libsndfile/doc/tutorial.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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/libs/libsndfile/doc/win32.html b/libs/libsndfile/doc/win32.html
deleted file mode 100644
index 6ee3153c7d..0000000000
--- a/libs/libsndfile/doc/win32.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!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>
diff --git a/libs/libsndfile/echo-install-dirs.in b/libs/libsndfile/echo-install-dirs.in
deleted file mode 100644
index 48d54b4e2d..0000000000
--- a/libs/libsndfile/echo-install-dirs.in
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# @configure_input@
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-bindir=@bindir@
-pkgconfigdir=@pkgconfigdir@
-datadir=@datadir@
-datarootdir=@datarootdir@
-docdir=@docdir@
-htmldir=@htmldir@
-
-echo "
-  Installation directories :
-
-    Library directory : ................... $libdir
-    Program directory : ................... $bindir
-    Pkgconfig directory : ................. $pkgconfigdir
-    HTML docs directory : ................. $htmldir
-"
-echo "Compiling some other packages against libsndfile may require"
-echo "the addition of '$pkgconfigdir' to the"
-echo "PKG_CONFIG_PATH environment variable."
-echo
diff --git a/libs/libsndfile/examples/Makefile.am b/libs/libsndfile/examples/Makefile.am
deleted file mode 100644
index da841fa218..0000000000
--- a/libs/libsndfile/examples/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-noinst_PROGRAMS = make_sine sfprocess list_formats generate sndfilehandle sndfile-to-text
-
-AM_CPPFLAGS = -I$(top_srcdir)/src
-
-sndfile_to_text_SOURCES = sndfile-to-text.c
-sndfile_to_text_LDADD = $(top_builddir)/src/libsndfile.la
-
-make_sine_SOURCES = make_sine.c
-make_sine_LDADD = $(top_builddir)/src/libsndfile.la
-
-sfprocess_SOURCES = sfprocess.c
-sfprocess_LDADD = $(top_builddir)/src/libsndfile.la
-
-list_formats_SOURCES = list_formats.c
-list_formats_LDADD = $(top_builddir)/src/libsndfile.la
-
-generate_SOURCES = generate.c
-generate_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfilehandle_SOURCES = sndfilehandle.cc
-sndfilehandle_LDADD = $(top_builddir)/src/libsndfile.la
-
-CLEANFILES = *~ *.exe
diff --git a/libs/libsndfile/examples/cooledit-fixer.c b/libs/libsndfile/examples/cooledit-fixer.c
deleted file mode 100644
index 06ceae6a92..0000000000
--- a/libs/libsndfile/examples/cooledit-fixer.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-** Copyright (C) 2002-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#define	BUFFER_LEN	1024
-
-static void usage_exit (char *progname) ;
-static int is_data_really_float (SNDFILE *sndfile) ;
-static void fix_file (char *filename) ;
-static off_t file_size (char *filename) ;
-
-static union
-{	int i [BUFFER_LEN] ;
-	float f [BUFFER_LEN] ;
-} buffer ;
-
-int
-main (int argc, char *argv [])
-{	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	int k, data_is_float, converted = 0 ;
-
-	puts ("\nCooledit Fixer.\n---------------") ;
-
-	if (argc < 2)
-		usage_exit (argv [0]) ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	if ((sndfile = sf_open (argv [k], SFM_READ, &sfinfo)) == NULL)
-		{	/*-printf ("Failed to open : %s\n", argv [k]) ;-*/
-			continue ;
-			} ;
-
-		if (sfinfo.format != (SF_FORMAT_WAV | SF_FORMAT_PCM_32))
-		{	/*-printf ("%-50s : not a 32 bit PCM WAV file.\n", argv [k]) ;-*/
-			sf_close (sndfile) ;
-			continue ;
-			} ;
-
-		data_is_float = is_data_really_float (sndfile) ;
-
-		sf_close (sndfile) ;
-
-		if (data_is_float == SF_FALSE)
-		{	/*-printf ("%-50s : not a Cooledit abomination.\n", argv [k]) ;-*/
-			continue ;
-			} ;
-
-		fix_file (argv [k]) ;
-		converted ++ ;
-		} ;
-
-	if (converted == 0)
-		puts ("\nNo files converted.") ;
-
-	puts ("") ;
-
-	return 0 ;
-} /* main */
-
-
-static void
-usage_exit (char *progname)
-{	char *cptr ;
-
-	if ((cptr = strrchr (progname, '/')))
-		progname = cptr + 1 ;
-	if ((cptr = strrchr (progname, '\\')))
-		progname = cptr + 1 ;
-
-	printf ("\n    Usage : %s <filename>\n", progname) ;
-	puts ("\n"
-		"Fix broken files created by Syntrillium's Cooledit. These files are \n"
-		"marked as containing PCM data but actually contain floating point \n"
-		"data. Only the broken files created by Cooledit are processed. All \n"
-		"other files remain untouched.\n"
-		"\n"
-		"More than one file may be included on the command line. \n"
-		) ;
-
-	exit (1) ;
-} /* usage_exit */
-
-static int
-is_data_really_float (SNDFILE *sndfile)
-{	int 	k, readcount ;
-
-	while ((readcount = sf_read_int (sndfile, buffer.i, BUFFER_LEN)) > 0)
-	{	for (k = 0 ; k < readcount ; k++)
-		{	if (buffer.i [k] == 0)
-				continue ;
-
-			if (fabs (buffer.f [k]) > 32768.0)
-				return SF_FALSE ;
-			} ;
-		} ;
-
-	return SF_TRUE ;
-} /* is_data_really_float */
-
-static void
-fix_file (char *filename)
-{	static	char	newfilename [512] ;
-
-	SNDFILE *infile, *outfile ;
-	SF_INFO	sfinfo ;
-	int		readcount, k ;
-	float	normfactor ;
-	char	*cptr ;
-
-	printf ("\nFixing : %s\n", filename) ;
-
-	if ((infile = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Not able to open input file %s\n", filename) ;
-		exit (1) ;
-		} ;
-
-	if (strlen (filename) >= sizeof (newfilename) - 1)
-	{	puts ("Error : Path name too long.\n") ;
-		exit (1) ;
-		} ;
-
-	strncpy (newfilename, filename, sizeof (newfilename)) ;
-	newfilename [sizeof (newfilename) - 1] = 0 ;
-
-	if ((cptr = strrchr (newfilename, '/')) == NULL)
-		cptr = strrchr (newfilename, '\\') ;
-
-	if (cptr)
-	{	cptr [1] = 0 ;
-		strncat (newfilename, "fixed.wav", sizeof (newfilename) - strlen (newfilename) - 1) ;
-		}
-	else
-		strncpy (newfilename, "fixed.wav", sizeof (newfilename) - 1) ;
-
-	newfilename [sizeof (newfilename) - 1] = 0 ;
-
-	printf ("    Output   : %s\n", newfilename) ;
-
-	sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT ;
-
-	if ((outfile = sf_open (newfilename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Not able to output open file %s\n", filename) ;
-		exit (1) ;
-		} ;
-
-	/* Find the file peak. sf-command (SFC_CALC_SIGNAL_MAX) cannot be used. */
-
-	normfactor = 0.0 ;
-
-	while ((readcount = sf_read_int (infile, buffer.i, BUFFER_LEN)) > 0)
-	{	for (k = 0 ; k < readcount ; k++)
-			if (fabs (buffer.f [k]) > normfactor)
-				normfactor = fabs (buffer.f [k]) ;
-		} ;
-
-	printf ("    Peak     : %g\n", normfactor) ;
-
-	normfactor = 1.0 / normfactor ;
-
-	sf_seek (infile, 0, SEEK_SET) ;
-
-	while ((readcount = sf_read_int (infile, buffer.i, BUFFER_LEN)) > 0)
-	{	for (k = 0 ; k < readcount ; k++)
-			buffer.f [k] *= normfactor ;
-		sf_write_float (outfile, buffer.f, readcount) ;
-		} ;
-
-	sf_close (infile) ;
-	sf_close (outfile) ;
-
-	if (abs (file_size (filename) - file_size (newfilename)) > 50)
-	{	puts ("Error : file size mismatch.\n") ;
-		exit (1) ;
-		} ;
-
-	printf ("    Renaming : %s\n", filename) ;
-
-	if (remove (filename) != 0)
-	{	perror ("rename") ;
-		exit (1) ;
-		} ;
-
-	if (rename (newfilename, filename) != 0)
-	{	perror ("rename") ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* fix_file */
-
-static off_t
-file_size (char *filename)
-{	struct stat buf ;
-
-	if (stat (filename, &buf) != 0)
-	{	perror ("stat") ;
-		exit (1) ;
-		} ;
-
-	return buf.st_size ;
-} /* file_size */
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 5475655e-3898-40ff-969b-c8ab2351b0e4
-*/
diff --git a/libs/libsndfile/examples/generate.c b/libs/libsndfile/examples/generate.c
deleted file mode 100644
index 884e8d79d3..0000000000
--- a/libs/libsndfile/examples/generate.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#define	BUFFER_LEN			4096
-
-static void encode_file (const char *infilename, const char *outfilename, int filetype) ;
-
-int
-main (int argc, char **argv)
-{
-	if (argc != 2)
-	{	puts ("\nEncode a single input file into a number of different output ") ;
-		puts ("encodings. These output encodings can then be moved to another ") ;
-		puts ("OS for testing.\n") ;
-		puts ("    Usage : generate <filename>\n") ;
-		exit (1) ;
-		} ;
-
-	/* A couple of standard WAV files. Make sure Win32 plays these. */
-	encode_file (argv [1], "pcmu8.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-	encode_file (argv [1], "pcm16.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-	encode_file (argv [1], "imaadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
-	encode_file (argv [1], "msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
-	encode_file (argv [1], "gsm610.wav"	, SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
-
-	/* Soundforge W64. */
-	encode_file (argv [1], "pcmu8.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-	encode_file (argv [1], "pcm16.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-	encode_file (argv [1], "imaadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ;
-	encode_file (argv [1], "msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ;
-	encode_file (argv [1], "gsm610.w64"	, SF_FORMAT_W64 | SF_FORMAT_GSM610) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Helper functions and macros.
-*/
-
-#define PUT_DOTS(k)					\
-			{	while (k--)			\
-					putchar ('.') ;	\
-				putchar (' ') ;		\
-				}
-
-/*========================================================================================
-*/
-
-static void
-encode_file (const char *infilename, const char *outfilename, int filetype)
-{	static float buffer [BUFFER_LEN] ;
-
-	SNDFILE		*infile, *outfile ;
-	SF_INFO		sfinfo ;
-	int			k, readcount ;
-
-	printf ("    %s -> %s ", infilename, outfilename) ;
-	fflush (stdout) ;
-
-	k = 16 - strlen (outfilename) ;
-	PUT_DOTS (k) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if (! (infile = sf_open (infilename, SFM_READ, &sfinfo)))
-	{	printf ("Error : could not open file : %s\n", infilename) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		}
-
-	sfinfo.format = filetype ;
-
-	if (! sf_format_check (&sfinfo))
-	{	sf_close (infile) ;
-		printf ("Invalid encoding\n") ;
-		return ;
-		} ;
-
-	if (! (outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)))
-	{	printf ("Error : could not open file : %s\n", outfilename) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	while ((readcount = sf_read_float (infile, buffer, BUFFER_LEN)) > 0)
-		sf_write_float (outfile, buffer, readcount) ;
-
-	sf_close (infile) ;
-	sf_close (outfile) ;
-
-	printf ("ok\n") ;
-
-	return ;
-} /* encode_file */
-
diff --git a/libs/libsndfile/examples/generate.cs b/libs/libsndfile/examples/generate.cs
deleted file mode 100644
index 1817856fa7..0000000000
--- a/libs/libsndfile/examples/generate.cs
+++ /dev/null
@@ -1,250 +0,0 @@
-/* (c) 2004 James Robson, http://www.arbingersys.com
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-**
-** ****************************
-**
-** How to use:
-**    - libsndfile.dll must have already been compiled and be in this
-**      application's search path
-**
-**    - You must edit this file to point to the file you want to convert. Set
-**    	the following line of code (found in the Main() function further below)
-**    	to the name of a .WAV file that exists on your system.
-**		186:	string sfn = "input.wav";
-**
-**    - From a command prompt type
-**    		csc generate.cs
-**
-**    - Run the resulting executable 'generate.exe'
-**
-**
-** Note: You will obviously need the csc compiler and the .NET runtime. I think
-** 	 these are freely available for download from Microsoft's website
-** 	 (part of the .NET SDK?).
-*/
-
-
-using System;
-using System.Runtime.InteropServices;
-using sf_count_t = System.Int64;	//alias; see SF_INFO struct
-
-#if PLATFORM_64
-using size_t = System.UInt64;
-#else
-using size_t = System.UInt32;
-#endif
-
-
-class lsndf_example {
-
-
-//sound file formats
-	public enum lsndf_frmts {
-		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 */
-
-		/* Subtypes from here on. */
-
-		SF_FORMAT_PCM_S8		= 0x0001,		/* Signed 8 bit data */
-		SF_FORMAT_PCM_16		= 0x0002,		/* Signed 16 bit data */
-		SF_FORMAT_PCM_24		= 0x0003,		/* Signed 24 bit data */
-		SF_FORMAT_PCM_32		= 0x0004,		/* Signed 32 bit data */
-
-		SF_FORMAT_PCM_U8		= 0x0005,		/* Unsigned 8 bit data (WAV and RAW only) */
-
-		SF_FORMAT_FLOAT			= 0x0006,		/* 32 bit float data */
-		SF_FORMAT_DOUBLE		= 0x0007,		/* 64 bit float data */
-
-		SF_FORMAT_ULAW			= 0x0010,		/* U-Law encoded. */
-		SF_FORMAT_ALAW			= 0x0011,		/* A-Law encoded. */
-		SF_FORMAT_IMA_ADPCM		= 0x0012,		/* IMA ADPCM. */
-		SF_FORMAT_MS_ADPCM		= 0x0013,		/* Microsoft ADPCM. */
-
-		SF_FORMAT_GSM610		= 0x0020,		/* GSM 6.10 encoding. */
-		SF_FORMAT_VOX_ADPCM		= 0x0021,		/* OKI / Dialogix ADPCM */
-
-		SF_FORMAT_G721_32		= 0x0030,		/* 32kbs G721 ADPCM encoding. */
-		SF_FORMAT_G723_24		= 0x0031,		/* 24kbs G723 ADPCM encoding. */
-		SF_FORMAT_G723_40		= 0x0032,		/* 40kbs G723 ADPCM encoding. */
-
-		SF_FORMAT_DWVW_12		= 0x0040, 		/* 12 bit Delta Width Variable Word encoding. */
-		SF_FORMAT_DWVW_16		= 0x0041, 		/* 16 bit Delta Width Variable Word encoding. */
-		SF_FORMAT_DWVW_24		= 0x0042, 		/* 24 bit Delta Width Variable Word encoding. */
-		SF_FORMAT_DWVW_N		= 0x0043, 		/* N bit Delta Width Variable Word encoding. */
-
-		SF_FORMAT_DPCM_8		= 0x0050,		/* 8 bit differential PCM (XI only) */
-		SF_FORMAT_DPCM_16		= 0x0051,		/* 16 bit differential PCM (XI only) */
-
-
-		/* Endian-ness options. */
-
-		SF_ENDIAN_FILE			= 0x00000000,	/* Default file endian-ness. */
-		SF_ENDIAN_LITTLE		= 0x10000000,	/* Force little endian-ness. */
-		SF_ENDIAN_BIG			= 0x20000000,	/* Force big endian-ness. */
-		SF_ENDIAN_CPU			= 0x30000000,	/* Force CPU endian-ness. */
-
-		SF_FORMAT_SUBMASK		= 0x0000FFFF,
-		SF_FORMAT_TYPEMASK		= 0x0FFF0000,
-		SF_FORMAT_ENDMASK		= 0x30000000
-	}
-
-
-//modes and other
-	public enum lsndf_tf
-	{	/* True and false */
-		SF_FALSE	= 0,
-		SF_TRUE		= 1,
-
-		/* Modes for opening files. */
-		SFM_READ	= 0x10,
-		SFM_WRITE	= 0x20,
-		SFM_RDWR	= 0x30
-	}
-
-
-//important SF_INFO structure
-	[StructLayout(LayoutKind.Sequential)]
-	public struct SF_INFO
-	{
-		public sf_count_t	frames ;		// Used to be called samples.  Changed to avoid confusion.
-		public int			samplerate ;
-		public int			channels ;
-		public int			format ;
-		public int			sections ;
-		public int			seekable ;
-	};
-
-
-//function declarations
-//Note: Not all functions have been prototyped here. Only the ones necessary to
-//	make this application work. The below code should give some clues as to
-//	how to add the rest since they have a lot of parameter and return type
-//	similarities.
-	[DllImport("libsndfile.dll")]
-	public static extern IntPtr sf_open ([MarshalAs(UnmanagedType.LPStr)] string path, int mode, ref SF_INFO sfinfo);
-
-	[DllImport("libsndfile.dll")]
-	static extern int sf_error (IntPtr sndfile);
-
-	[DllImport("libsndfile.dll")]
-	static extern IntPtr sf_strerror (IntPtr sndfile);
-
-	[DllImport("libsndfile.dll")]
-	static extern int sf_format_check (ref SF_INFO info);
-
-	[DllImport("libsndfile.dll")]
-	static extern sf_count_t sf_read_float	(IntPtr sndfile, float[] ptr, sf_count_t items);
-
-	[DllImport("libsndfile.dll")]
-	static extern sf_count_t sf_write_float	(IntPtr sndfile, float[] ptr, sf_count_t items);
-
-	[DllImport("libsndfile.dll")]
-    static extern int sf_close (IntPtr sndfile);
-
-
-	public const sf_count_t BUFFER_LEN = 4096;
-
-
-//program entry
-	static void Main(  ) {
-
-
-//declarations
-		SF_INFO sfinfo = new SF_INFO();
-		float[] buffer = new float[BUFFER_LEN];
-		sf_count_t rcnt;
-
-//set the input file
-		string sfn = "input.wav";	//set to a file on YOUR system
-		//string sfn = "noexist.wav"; 	//test with non-existent file
-
-//set the output file
-		string ofn = "output.wav";
-
-//read in sound file to convert
-		IntPtr infile = sf_open (sfn, (int)lsndf_tf.SFM_READ, ref sfinfo);
-
-//exit if error was thrown
-		if ( (int)infile == 0 ) {
-			Console.WriteLine("Error opening " + sfn);
-			Console.WriteLine("Error #" + sf_error(infile));
-			return;
-		}
-
-//set the file type for the output file
-//uncomment one and only one of the statements below to change the output
-//file encoding.
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_PCM_U8);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_PCM_16);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_MS_ADPCM);
-		sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_IMA_ADPCM);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_GSM610);
-		/* Soundforge W64. */
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_PCM_U8);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_PCM_16);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_MS_ADPCM);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_IMA_ADPCM);
-		//sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_GSM610);
-
-
-//check that SF_INFO is valid
-		if ( sf_format_check(ref sfinfo) == 0 ) {
-			Console.WriteLine("sf_format_check failed. Invalid encoding");
-			return;
-		}
-
-//open output file
-		IntPtr outfile = sf_open (ofn, (int)lsndf_tf.SFM_WRITE, ref sfinfo);
-
-//exit if error was thrown
-		if ( (int)outfile == 0 ) {
-			Console.WriteLine("Error opening " + ofn);
-			Console.WriteLine("Error #" + sf_error(outfile));
-			return;
-		}
-
-//infile -> outfile
-		Console.Write(sfn + " -> " + ofn);
-		while ( (rcnt = sf_read_float (infile, buffer, BUFFER_LEN)) > 0) {
-			Console.Write(".");
-			sf_write_float (outfile, buffer, BUFFER_LEN);
-		}
-		Console.WriteLine("done.");
-
-//close up shop
-		sf_close(infile);
-		sf_close(outfile);
-
-
-	} //main()
-
-
-} //class lsndf_example {}
-
diff --git a/libs/libsndfile/examples/list_formats.c b/libs/libsndfile/examples/list_formats.c
deleted file mode 100644
index 6d462f0790..0000000000
--- a/libs/libsndfile/examples/list_formats.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	<sndfile.h>
-
-int
-main (void)
-{	SF_FORMAT_INFO	info ;
-	SF_INFO 		sfinfo ;
-	char buffer [128] ;
-	int format, major_count, subtype_count, m, s ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	buffer [0] = 0 ;
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-	if (strlen (buffer) < 1)
-	{	printf ("Line %d: could not retrieve lib version.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	printf ("Version : %s\n\n", buffer) ;
-
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &subtype_count, sizeof (int)) ;
-
-	sfinfo.channels = 1 ;
-	for (m = 0 ; m < major_count ; m++)
-	{	info.format = m ;
-		sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-		printf ("%s  (extension \"%s\")\n", info.name, info.extension) ;
-
-		format = info.format ;
-
-		for (s = 0 ; s < subtype_count ; s++)
-		{	info.format = s ;
-			sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &info, sizeof (info)) ;
-
-			format = (format & SF_FORMAT_TYPEMASK) | info.format ;
-
-			sfinfo.format = format ;
-			if (sf_format_check (&sfinfo))
-				printf ("   %s\n", info.name) ;
-			} ;
-		puts ("") ;
-		} ;
-	puts ("") ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/make_sine.c b/libs/libsndfile/examples/make_sine.c
deleted file mode 100644
index 1db0e00d26..0000000000
--- a/libs/libsndfile/examples/make_sine.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	<sndfile.h>
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-#define		SAMPLE_RATE			44100
-#define		SAMPLE_COUNT		(SAMPLE_RATE * 4)	/* 4 seconds */
-#define		AMPLITUDE			(1.0 * 0x7F000000)
-#define		LEFT_FREQ			(344.0 / SAMPLE_RATE)
-#define		RIGHT_FREQ			(466.0 / SAMPLE_RATE)
-
-int
-main (void)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int		k ;
-	int	*buffer ;
-
-	if (! (buffer = malloc (2 * SAMPLE_COUNT * sizeof (int))))
-	{	printf ("Malloc failed.\n") ;
-		exit (0) ;
-		} ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= SAMPLE_COUNT ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= (SF_FORMAT_WAV | SF_FORMAT_PCM_24) ;
-
-	if (! (file = sf_open ("sine.wav", SFM_WRITE, &sfinfo)))
-	{	printf ("Error : Not able to open output file.\n") ;
-		return 1 ;
-		} ;
-
-	if (sfinfo.channels == 1)
-	{	for (k = 0 ; k < SAMPLE_COUNT ; k++)
-			buffer [k] = AMPLITUDE * sin (LEFT_FREQ * 2 * k * M_PI) ;
-		}
-	else if (sfinfo.channels == 2)
-	{	for (k = 0 ; k < SAMPLE_COUNT ; k++)
-		{	buffer [2 * k] = AMPLITUDE * sin (LEFT_FREQ * 2 * k * M_PI) ;
-			buffer [2 * k + 1] = AMPLITUDE * sin (RIGHT_FREQ * 2 * k * M_PI) ;
-			} ;
-		}
-	else
-	{	printf ("makesine can only generate mono or stereo files.\n") ;
-		exit (1) ;
-		} ;
-
-	if (sf_write_int (file, buffer, sfinfo.channels * SAMPLE_COUNT) !=
-											sfinfo.channels * SAMPLE_COUNT)
-		puts (sf_strerror (file)) ;
-
-	sf_close (file) ;
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/sfprocess.c b/libs/libsndfile/examples/sfprocess.c
deleted file mode 100644
index 1c141a4981..0000000000
--- a/libs/libsndfile/examples/sfprocess.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**	 * Redistributions of source code must retain the above copyright
-**	   notice, this list of conditions and the following disclaimer.
-**	 * Redistributions in binary form must reproduce the above copyright
-**	   notice, this list of conditions and the following disclaimer in
-**	   the documentation and/or other materials provided with the
-**	   distribution.
-**	 * Neither the author nor the names of any contributors may be used
-**	   to endorse or promote products derived from this software without
-**	   specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<string.h>
-
-/* Include this header file to use functions from libsndfile. */
-#include	<sndfile.h>
-
-/*	This will be the length of the buffer used to hold.frames while
-**	we process them.
-*/
-#define		BUFFER_LEN	1024
-
-/* libsndfile can handle more than 6 channels but we'll restrict it to 6. */
-#define		MAX_CHANNELS	6
-
-/* Function prototype. */
-static void process_data (double *data, int count, int channels) ;
-
-
-int
-main (void)
-{	/* This is a buffer of double precision floating point values
-	** which will hold our data while we process it.
-	*/
-	static double data [BUFFER_LEN] ;
-
-	/* A SNDFILE is very much like a FILE in the Standard C library. The
-	** sf_open function return an SNDFILE* pointer when they sucessfully
-	** open the specified file.
-	*/
-	SNDFILE	*infile, *outfile ;
-
-	/* A pointer to an SF_INFO struct is passed to sf_open.
-	** On read, the library fills this struct with information about the file.
-	** On write, the struct must be filled in before calling sf_open.
-	*/
-	SF_INFO		sfinfo ;
-	int			readcount ;
-	const char	*infilename = "input.wav" ;
-	const char	*outfilename = "output.wav" ;
-
-	/* The SF_INFO struct must be initialized before using it.
-	*/
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Here's where we open the input file. We pass sf_open the file name and
-	** a pointer to an SF_INFO struct.
-	** On successful open, sf_open returns a SNDFILE* pointer which is used
-	** for all subsequent operations on that file.
-	** If an error occurs during sf_open, the function returns a NULL pointer.
-	**
-	** If you are trying to open a raw headerless file you will need to set the
-	** format and channels fields of sfinfo before calling sf_open(). For
-	** instance to open a raw 16 bit stereo PCM file you would need the following
-	** two lines:
-	**
-	**		sfinfo.format   = SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-	**		sfinfo.channels = 2 ;
-	*/
-	if (! (infile = sf_open (infilename, SFM_READ, &sfinfo)))
-	{	/* Open failed so print an error message. */
-		printf ("Not able to open input file %s.\n", infilename) ;
-		/* Print the error message from libsndfile. */
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	if (sfinfo.channels > MAX_CHANNELS)
-	{	printf ("Not able to process more than %d channels\n", MAX_CHANNELS) ;
-		return 1 ;
-		} ;
-	/* Open the output file. */
-	if (! (outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)))
-	{	printf ("Not able to open output file %s.\n", outfilename) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	/* While there are.frames in the input file, read them, process
-	** them and write them to the output file.
-	*/
-	while ((readcount = sf_read_double (infile, data, BUFFER_LEN)))
-	{	process_data (data, readcount, sfinfo.channels) ;
-		sf_write_double (outfile, data, readcount) ;
-		} ;
-
-	/* Close input and output files. */
-	sf_close (infile) ;
-	sf_close (outfile) ;
-
-	return 0 ;
-} /* main */
-
-static void
-process_data (double *data, int count, int channels)
-{	double channel_gain [MAX_CHANNELS] = { 0.5, 0.8, 0.1, 0.4, 0.4, 0.9 } ;
-	int k, chan ;
-
-	/* Process the data here.
-	** If the soundfile contains more then 1 channel you need to take care of
-	** the data interleaving youself.
-	** Current we just apply a channel dependant gain.
-	*/
-
-	for (chan = 0 ; chan < channels ; chan ++)
-		for (k = chan ; k < count ; k+= channels)
-			data [k] *= channel_gain [chan] ;
-
-	return ;
-} /* process_data */
-
diff --git a/libs/libsndfile/examples/sndfile-convert.c b/libs/libsndfile/examples/sndfile-convert.c
deleted file mode 100644
index e1422579bd..0000000000
--- a/libs/libsndfile/examples/sndfile-convert.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
-** Copyright (C) 1999-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#define	 BUFFER_LEN	1024
-
-
-typedef	struct
-{	char	*infilename, *outfilename ;
-	SF_INFO	infileinfo, outfileinfo ;
-} OptionData ;
-
-typedef struct
-{	const char	*ext ;
-	int			len ;
-	int			format ;
-} OUTPUT_FORMAT_MAP ;
-
-static void copy_metadata (SNDFILE *outfile, SNDFILE *infile) ;
-static void copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-static void copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-static OUTPUT_FORMAT_MAP format_map [] =
-{
-	{	"aif",		3,	SF_FORMAT_AIFF	},
-	{	"wav", 		0,	SF_FORMAT_WAV	},
-	{	"au",		0,	SF_FORMAT_AU	},
-	{	"caf",		0,	SF_FORMAT_CAF	},
-	{	"flac",		0,	SF_FORMAT_FLAC	},
-	{	"snd",		0,	SF_FORMAT_AU	},
-	{	"svx",		0,	SF_FORMAT_SVX	},
-	{	"paf",		0,	SF_ENDIAN_BIG | SF_FORMAT_PAF	},
-	{	"fap",		0,	SF_ENDIAN_LITTLE | SF_FORMAT_PAF	},
-	{	"gsm",		0,	SF_FORMAT_RAW	},
-	{	"nist", 	0,	SF_FORMAT_NIST	},
-	{	"ircam",	0,	SF_FORMAT_IRCAM	},
-	{	"sf",		0, 	SF_FORMAT_IRCAM	},
-	{	"voc",		0, 	SF_FORMAT_VOC	},
-	{	"w64", 		0, 	SF_FORMAT_W64	},
-	{	"raw",		0,	SF_FORMAT_RAW	},
-	{	"mat4", 	0,	SF_FORMAT_MAT4	},
-	{	"mat5", 	0, 	SF_FORMAT_MAT5 	},
-	{	"mat",		0, 	SF_FORMAT_MAT4 	},
-	{	"pvf",		0, 	SF_FORMAT_PVF 	},
-	{	"sds",		0, 	SF_FORMAT_SDS 	},
-	{	"sd2",		0, 	SF_FORMAT_SD2 	},
-	{	"vox",		0, 	SF_FORMAT_RAW 	},
-	{	"xi",		0, 	SF_FORMAT_XI 	}
-} ; /* format_map */
-
-static int
-guess_output_file_type (char *str, int format)
-{	char	buffer [16], *cptr ;
-	int		k ;
-
-	format &= SF_FORMAT_SUBMASK ;
-
-	if ((cptr = strrchr (str, '.')) == NULL)
-		return 0 ;
-
-	strncpy (buffer, cptr + 1, 15) ;
-	buffer [15] = 0 ;
-
-	for (k = 0 ; buffer [k] ; k++)
-		buffer [k] = tolower ((buffer [k])) ;
-
-	if (strcmp (buffer, "gsm") == 0)
-		return SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-
-	if (strcmp (buffer, "vox") == 0)
-		return SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-
-	for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-	{	if (format_map [k].len > 0 && strncmp (buffer, format_map [k].ext, format_map [k].len) == 0)
-			return format_map [k].format | format ;
-		else if (strcmp (buffer, format_map [k].ext) == 0)
-			return format_map [k].format | format ;
-		} ;
-
-	return	0 ;
-} /* guess_output_file_type */
-
-
-static void
-print_usage (char *progname)
-{	SF_FORMAT_INFO	info ;
-
-	int k ;
-
-	printf ("\nUsage : %s [encoding] <input file> <output file>\n", progname) ;
-	puts ("\n"
-		"    where [encoding] may be one of the following:\n\n"
-		"        -pcms8     : force the output to signed 8 bit pcm\n"
-		"        -pcmu8     : force the output to unsigned 8 bit pcm\n"
-		"        -pcm16     : force the output to 16 bit pcm\n"
-		"        -pcm24     : force the output to 24 bit pcm\n"
-		"        -pcm32     : force the output to 32 bit pcm\n"
-		"        -float32   : force the output to 32 bit floating point"
-		) ;
-	puts (
-		"        -ulaw      : force the output ULAW\n"
-		"        -alaw      : force the output ALAW\n"
-		"        -ima-adpcm : force the output to IMA ADPCM (WAV only)\n"
-		"        -ms-adpcm  : force the output to MS ADPCM (WAV only)\n"
-		"        -gsm610    : force the GSM6.10 (WAV only)\n"
-		"        -dwvw12    : force the output to 12 bit DWVW (AIFF only)\n"
-		"        -dwvw16    : force the output to 16 bit DWVW (AIFF only)\n"
-		"        -dwvw24    : force the output to 24 bit DWVW (AIFF only)\n"
-		) ;
-
-	puts (
-		"    The format of the output file is determined by the file extension of the\n"
-		"    output file name. The following extensions are currently understood:\n"
-		) ;
-
-	for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-	{	info.format = format_map [k].format ;
-		sf_command (NULL, SFC_GET_FORMAT_INFO, &info, sizeof (info)) ;
-		printf ("        %-10s : %s\n", format_map [k].ext, info.name) ;
-		} ;
-
-	puts ("") ;
-} /* print_usage */
-
-int
-main (int argc, char * argv [])
-{	char 		*progname, *infilename, *outfilename ;
-	SNDFILE	 	*infile = NULL, *outfile = NULL ;
-	SF_INFO	 	sfinfo ;
-	int			k, outfilemajor, outfileminor = 0, infileminor ;
-
-	progname = strrchr (argv [0], '/') ;
-	progname = progname ? progname + 1 : argv [0] ;
-
-	if (argc < 3 || argc > 5)
-	{	print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	infilename = argv [argc-2] ;
-	outfilename = argv [argc-1] ;
-
-	if (strcmp (infilename, outfilename) == 0)
-	{	printf ("Error : Input and output filenames are the same.\n\n") ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	if (infilename [0] == '-')
-	{	printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	if (outfilename [0] == '-')
-	{	printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	for (k = 1 ; k < argc - 2 ; k++)
-	{	if (! strcmp (argv [k], "-pcms8"))
-		{	outfileminor = SF_FORMAT_PCM_S8 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcmu8"))
-		{	outfileminor = SF_FORMAT_PCM_U8 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm16"))
-		{	outfileminor = SF_FORMAT_PCM_16 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm24"))
-		{	outfileminor = SF_FORMAT_PCM_24 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm32"))
-		{	outfileminor = SF_FORMAT_PCM_32 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-float32"))
-		{	outfileminor = SF_FORMAT_FLOAT ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ulaw"))
-		{	outfileminor = SF_FORMAT_ULAW ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alaw"))
-		{	outfileminor = SF_FORMAT_ALAW ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ima-adpcm"))
-		{	outfileminor = SF_FORMAT_IMA_ADPCM ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ms-adpcm"))
-		{	outfileminor = SF_FORMAT_MS_ADPCM ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-gsm610"))
-		{	outfileminor = SF_FORMAT_GSM610 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw12"))
-		{	outfileminor = SF_FORMAT_DWVW_12 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw16"))
-		{	outfileminor = SF_FORMAT_DWVW_16 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw24"))
-		{	outfileminor = SF_FORMAT_DWVW_24 ;
-			continue ;
-			} ;
-
-		printf ("Error : Not able to decode argunment '%s'.\n", argv [k]) ;
-		exit (1) ;
-		} ;
-
-	if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Not able to open input file %s.\n", infilename) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	infileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-	if ((sfinfo.format = guess_output_file_type (outfilename, sfinfo.format)) == 0)
-	{	printf ("Error : Not able to determine output file type for %s.\n", outfilename) ;
-		return 1 ;
-		} ;
-
-	outfilemajor = sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_ENDMASK) ;
-
-	if (outfileminor == 0)
-		outfileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-	if (outfileminor != 0)
-		sfinfo.format = outfilemajor | outfileminor ;
-	else
-		sfinfo.format = outfilemajor | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-
-	if ((sfinfo.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-		switch (sfinfo.format & SF_FORMAT_SUBMASK)
-		{	case SF_FORMAT_PCM_16 :
-					sfinfo.format = outfilemajor | SF_FORMAT_DPCM_16 ;
-					break ;
-
-			case SF_FORMAT_PCM_S8 :
-			case SF_FORMAT_PCM_U8 :
-					sfinfo.format = outfilemajor | SF_FORMAT_DPCM_8 ;
-					break ;
-			} ;
-
-	if (sf_format_check (&sfinfo) == 0)
-	{	printf ("Error : output file format is invalid (0x%08X).\n", sfinfo.format) ;
-		return 1 ;
-		} ;
-
-	/* Open the output file. */
-	if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	/* Copy the metadata */
-	copy_metadata (outfile, infile) ;
-
-	if ((outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT) ||
-				(infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT))
-		copy_data_fp (outfile, infile, sfinfo.channels) ;
-	else
-		copy_data_int (outfile, infile, sfinfo.channels) ;
-
-	sf_close (infile) ;
-	sf_close (outfile) ;
-
-	return 0 ;
-} /* main */
-
-static void
-copy_metadata (SNDFILE *outfile, SNDFILE *infile)
-{	SF_INSTRUMENT inst ;
-	const char *str ;
-	int k, err = 0 ;
-
-	for (k = SF_STR_FIRST ; k <= SF_STR_LAST ; k++)
-	{	str = sf_get_string (infile, k) ;
-		if (str != NULL)
-			err = sf_set_string (outfile, k, str) ;
-		} ;
-
-	memset (&inst, 0, sizeof (inst)) ;
-	if (sf_command (infile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-		sf_command (outfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ;
-
-} /* copy_metadata */
-
-static void
-copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels)
-{	static double	data [BUFFER_LEN], max ;
-	int		frames, readcount, k ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ;
-
-	if (max < 1.0)
-	{	while (readcount > 0)
-		{	readcount = sf_readf_double (infile, data, frames) ;
-			sf_writef_double (outfile, data, readcount) ;
-			} ;
-		}
-	else
-	{	sf_command (infile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-		while (readcount > 0)
-		{	readcount = sf_readf_double (infile, data, frames) ;
-			for (k = 0 ; k < readcount * channels ; k++)
-				data [k] /= max ;
-			sf_writef_double (outfile, data, readcount) ;
-			} ;
-		} ;
-
-	return ;
-} /* copy_data_fp */
-
-static void
-copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels)
-{	static int	data [BUFFER_LEN] ;
-	int		frames, readcount ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	while (readcount > 0)
-	{	readcount = sf_readf_int (infile, data, frames) ;
-		sf_writef_int (outfile, data, readcount) ;
-		} ;
-
-	return ;
-} /* copy_data_int */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 259682b3-2887-48a6-b5bb-3cde00521ba3
-*/
diff --git a/libs/libsndfile/examples/sndfile-info.c b/libs/libsndfile/examples/sndfile-info.c
deleted file mode 100644
index 44e2ec174f..0000000000
--- a/libs/libsndfile/examples/sndfile-info.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-** Copyright (C) 1999-2006 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<math.h>
-
-#include	<sndfile.h>
-
-#define	BUFFER_LEN		(1 << 16)
-
-#if (defined (WIN32) || defined (_WIN32))
-#define	snprintf	_snprintf
-#endif
-
-static void print_version (void) ;
-static void print_usage (const char *progname) ;
-
-static void info_dump (const char *filename) ;
-static void instrument_dump (const char *filename) ;
-static void broadcast_dump (const char *filename) ;
-
-int
-main (int argc, char *argv [])
-{	int	k ;
-
-	print_version () ;
-
-	if (argc < 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-	{	char *progname ;
-
-		progname = strrchr (argv [0], '/') ;
-		progname = progname ? progname + 1 : argv [0] ;
-
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	if (strcmp (argv [1], "-i") == 0)
-	{	instrument_dump (argv [2]) ;
-		return 0 ;
-		} ;
-
-	if (strcmp (argv [1], "-b") == 0)
-	{	broadcast_dump (argv [2]) ;
-		return 0 ;
-		} ;
-
-	for (k = 1 ; k < argc ; k++)
-		info_dump (argv [k]) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-**	Print version and usage.
-*/
-
-static double	data [BUFFER_LEN] ;
-
-static void
-print_version (void)
-{	char buffer [256] ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-	printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-
-static void
-print_usage (const char *progname)
-{	printf ("Usage :\n  %s <file> ...\n", progname) ;
-	printf ("    Prints out information about one or more sound files.\n\n") ;
-	printf ("  %s -i <file>\n", progname) ;
-	printf ("    Prints out the instrument data for the given file.\n\n") ;
-	printf ("  %s -b <file>\n", progname) ;
-	printf ("    Prints out the broadcast WAV info for the given file.\n\n") ;
-#if (defined (_WIN32) || defined (WIN32))
-		printf ("This is a Unix style command line application which\n"
-				"should be run in a MSDOS box or Command Shell window.\n\n") ;
-		printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-		fflush (stdout) ;
-
-		/* This is the officially blessed by microsoft way but I can't get
-		** it to link.
-		**     Sleep (15) ;
-		** Instead, use this:
-		*/
-		_sleep (5 * 1000) ;
-#endif
-} /* print_usage */
-
-/*==============================================================================
-**	Dumping of sndfile info.
-*/
-
-static double	data [BUFFER_LEN] ;
-
-static double
-get_signal_max (SNDFILE *file)
-{	double	max, temp ;
-	int		readcount, k, save_state ;
-
-	save_state = sf_command (file, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	max = 0.0 ;
-	while ((readcount = sf_read_double (file, data, BUFFER_LEN)))
-	{	for (k = 0 ; k < readcount ; k++)
-		{	temp = fabs (data [k]) ;
-			if (temp > max)
-				max = temp ;
-			} ;
-		} ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-	return max ;
-} /* get_signal_max */
-
-static double
-calc_decibels (SF_INFO * sfinfo, double max)
-{	double decibels ;
-
-	switch (sfinfo->format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-			decibels = max / 0x80 ;
-			break ;
-
-		case SF_FORMAT_PCM_16 :
-			decibels = max / 0x8000 ;
-			break ;
-
-		case SF_FORMAT_PCM_24 :
-			decibels = max / 0x800000 ;
-			break ;
-
-		case SF_FORMAT_PCM_32 :
-			decibels = max / 0x80000000 ;
-			break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			decibels = max / 1.0 ;
-			break ;
-
-		default :
-			decibels = max / 0x8000 ;
-			break ;
-		} ;
-
-	return 20.0 * log10 (decibels) ;
-} /* calc_decibels */
-
-static const char *
-generate_duration_str (SF_INFO *sfinfo)
-{	static char str [128] ;
-
-	int seconds ;
-
-	memset (str, 0, sizeof (str)) ;
-
-	if (sfinfo->samplerate < 1)
-		return NULL ;
-
-	if (sfinfo->frames / sfinfo->samplerate > 0x7FFFFFFF)
-		return "unknown" ;
-
-	seconds = sfinfo->frames / sfinfo->samplerate ;
-
-	snprintf (str, sizeof (str) - 1, "%02d:", seconds / 60 / 60) ;
-
-	seconds = seconds % (60 * 60) ;
-	snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%02d:", seconds / 60) ;
-
-	seconds = seconds % 60 ;
-	snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%02d.", seconds) ;
-
-	seconds = ((1000 * sfinfo->frames) / sfinfo->samplerate) % 1000 ;
-	snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%03d", seconds) ;
-
-	return str ;
-} /* generate_duration_str */
-
-static void
-info_dump (const char *filename)
-{	static	char	strbuffer [BUFFER_LEN] ;
-	SNDFILE	 	*file ;
-	SF_INFO	 	sfinfo ;
-	double		signal_max, decibels ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-		puts (strbuffer) ;
-		puts (sf_strerror (NULL)) ;
-		return ;
-		} ;
-
-	printf ("========================================\n") ;
-	sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-	puts (strbuffer) ;
-	printf ("----------------------------------------\n") ;
-
-	if (file == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		}
-	else
-	{	printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
-		if (sfinfo.frames > 0x7FFFFFFF)
-			printf ("Frames      : unknown\n") ;
-		else
-			printf ("Frames      : %ld\n", (long) sfinfo.frames) ;
-		printf ("Channels    : %d\n", sfinfo.channels) ;
-		printf ("Format      : 0x%08X\n", sfinfo.format) ;
-		printf ("Sections    : %d\n", sfinfo.sections) ;
-		printf ("Seekable    : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
-		printf ("Duration    : %s\n", generate_duration_str (&sfinfo)) ;
-
-		/* Do not use sf_signal_max because it doesn work for non-seekable files . */
-		signal_max = get_signal_max (file) ;
-		decibels = calc_decibels (&sfinfo, signal_max) ;
-		printf ("Signal Max  : %g (%4.2f dB)\n\n", signal_max, decibels) ;
-		} ;
-
-	sf_close (file) ;
-
-} /* info_dump */
-
-/*==============================================================================
-**	Dumping of SF_INSTRUMENT data.
-*/
-
-static const char *
-str_of_type (int mode)
-{	switch (mode)
-	{	case SF_LOOP_NONE : return "none" ;
-		case SF_LOOP_FORWARD : return "fwd " ;
-		case SF_LOOP_BACKWARD : return "back" ;
-		case SF_LOOP_ALTERNATING : return "alt " ;
-		default : break ;
-		} ;
-
-	return "????" ;
-} /* str_of_mode */
-
-static void
-instrument_dump (const char *filename)
-{	SNDFILE	 *file ;
-	SF_INFO	 sfinfo ;
-	SF_INSTRUMENT inst ;
-	int got_inst, k ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return ;
-		} ;
-
-	got_inst = sf_command (file, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ;
-	sf_close (file) ;
-
-	if (got_inst == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain instrument data.\n\n", filename) ;
-		return ;
-		} ;
-
-	printf ("Instrument : %s\n\n", filename) ;
-	printf ("  Gain        : %d\n", inst.gain) ;
-	printf ("  Base note   : %d\n", inst.basenote) ;
-	printf ("  Velocity    : %d - %d\n", (int) inst.velocity_lo, (int) inst.velocity_hi) ;
-	printf ("  Key         : %d - %d\n", (int) inst.key_lo, (int) inst.key_hi) ;
-	printf ("  Loop points : %d\n", inst.loop_count) ;
-
-	for (k = 0 ; k < inst.loop_count ; k++)
-		printf ("  %-2d    Mode : %s    Start : %6d   End : %6d   Count : %6d\n", k, str_of_type (inst.loops [k].mode), inst.loops [k].start, inst.loops [k].end, inst.loops [k].count) ;
-
-	putchar ('\n') ;
-} /* instrument_dump */
-
-static void
-broadcast_dump (const char *filename)
-{	SNDFILE	 *file ;
-	SF_INFO	 sfinfo ;
-	SF_BROADCAST_INFO bext ;
-	int got_bext ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return ;
-		} ;
-
-	memset (&bext, 0, sizeof (SF_BROADCAST_INFO)) ;
-
-	got_bext = sf_command (file, SFC_GET_BROADCAST_INFO, &bext, sizeof (bext)) ;
-	sf_close (file) ;
-
-	if (got_bext == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain broadcast information.\n\n", filename) ;
-		return ;
-		} ;
-
-	printf ("Description      : %.*s\n", (int) sizeof (bext.description), bext.description) ;
-	printf ("Originator       : %.*s\n", (int) sizeof (bext.originator), bext.originator) ;
-	printf ("Origination ref  : %.*s\n", (int) sizeof (bext.originator_reference), bext.originator_reference) ;
-	printf ("Origination date : %.*s\n", (int) sizeof (bext.origination_date), bext.origination_date) ;
-	printf ("Origination time : %.*s\n", (int) sizeof (bext.origination_time), bext.origination_time) ;
-	printf ("BWF version      : %d\n", bext.version) ;
-	printf ("UMID             : %.*s\n", (int) sizeof (bext.umid), bext.umid) ;
-	printf ("Coding history   : %.*s\n", bext.coding_history_size, bext.coding_history) ;
-
-} /* broadcast_dump */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: f59a05db-a182-41de-aedd-d717ce2bb099
-*/
diff --git a/libs/libsndfile/examples/sndfile-play-beos.cpp b/libs/libsndfile/examples/sndfile-play-beos.cpp
deleted file mode 100644
index 56f7415119..0000000000
--- a/libs/libsndfile/examples/sndfile-play-beos.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-** Copyright (C) 2001 Marcus Overhagen <marcus@overhagen.de>
-**  
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-** 
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-** 
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software 
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<stdio.h>
-
-#include 	<Application.h>
-#include 	<SoundPlayer.h>
-#include 	<string.h>
-
-#include	<sndfile.h>
-
-#define	BUFFER_LEN		1024
-
-/*------------------------------------------------------------------------------
-**	BeOS functions for playing a sound.
-*/
-
-#if defined (__BEOS__)
-
-struct shared_data
-{
-	BSoundPlayer *player;
-	SNDFILE *sndfile;
-	SF_INFO sfinfo;	
-	sem_id finished;
-};
-
-static void 
-buffer_callback(void *theCookie, void *buf, size_t size, const media_raw_audio_format &format) 
-{
-	shared_data *data = (shared_data *)theCookie;
-	short *buffer = (short *)buf;
-	int count = size / sizeof(short);
-	int m, readcount;
-
-	if (!data->player->HasData())
-		return;
-
-	readcount = sf_read_short(data->sndfile, buffer, count);
-	if (readcount == 0) 
-	{	data->player->SetHasData(false);		
-		release_sem(data->finished);
-		}
-	if (readcount < count) 
-	{	for (m = readcount ; m < count ; m++)
-			buffer [m] = 0 ;
-		}
-	if (data->sfinfo.pcmbitwidth < 16) 
-	{	for (m = 0 ; m < count ; m++)
-			buffer [m] *= 256 ;
-		}
-}
-
-static void
-beos_play (int argc, char *argv [])
-{
-	shared_data data;
-	status_t status;
-	int	k;
-
-	/* BSoundPlayer requires a BApplication object */
-	BApplication app("application/x-vnd.MarcusOverhagen-sfplay");
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;	
-		if (! (data.sndfile = sf_open_read (argv [k], &data.sfinfo)))
-		{	sf_perror (NULL) ;
-			continue ;
-			} ;
-			
-		if (data.sfinfo.channels < 1 || data.sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", data.sfinfo.channels) ;
-			sf_close (data.sndfile) ;
-			continue ;
-			} ;		
-
-		data.finished = create_sem(0,"finished");			
-
-		media_raw_audio_format format = 
-		{ 	data.sfinfo.samplerate,
-			data.sfinfo.channels,
-			media_raw_audio_format::B_AUDIO_SHORT,
-			B_HOST_IS_LENDIAN ? B_MEDIA_LITTLE_ENDIAN : B_MEDIA_BIG_ENDIAN,
-			BUFFER_LEN * sizeof(short)
-			};
-
-		BSoundPlayer player(&format,"player",buffer_callback,NULL,&data);
-		data.player = &player;
-		
-		if ((status = player.InitCheck()) != B_OK) 
-		{
-			printf ("Error : BSoundPlayer init failed, %s.\n", strerror(status)) ;
-			delete_sem(data.finished);
-			sf_close (data.sndfile) ;
-			continue ;
-			}
-
-		player.SetVolume(1.0);
-		player.Start();
-		player.SetHasData(true);
-		acquire_sem(data.finished);
-		player.Stop();
-		delete_sem(data.finished);
-		
-		sf_close (data.sndfile) ;
-
-		} ;
-
-} /* beos_play */
-
-#endif
-
-/*==============================================================================
-**	Main function.
-*/
-
-int 
-main (int argc, char *argv [])
-{
-	if (argc < 2)
-	{	printf ("Usage : %s <input sound file>\n\n", argv [0]) ;
-		return 1 ;
-		} ;
-	
-	beos_play (argc, argv) ;
-
-	return 0 ;
-} /* main */
-		
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch 
-** revision control system.
-**
-** arch-tag: 5407a79d-88de-41c7-8d8e-9acf2cf13cc1
-*/
-
diff --git a/libs/libsndfile/examples/sndfile-play.c b/libs/libsndfile/examples/sndfile-play.c
deleted file mode 100644
index 7969693a44..0000000000
--- a/libs/libsndfile/examples/sndfile-play.c
+++ /dev/null
@@ -1,960 +0,0 @@
-/*
-** Copyright (C) 1999-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_ALSA_ASOUNDLIB_H
-	#define ALSA_PCM_NEW_HW_PARAMS_API
-	#define ALSA_PCM_NEW_SW_PARAMS_API
-	#include <alsa/asoundlib.h>
-	#include <sys/time.h>
-#endif
-
-#if defined (__linux__)
-	#include 	<fcntl.h>
-	#include 	<sys/ioctl.h>
-	#include 	<sys/soundcard.h>
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-	#include <Carbon.h>
-	#include <CoreAudio/AudioHardware.h>
-
-#elif (defined (sun) && defined (unix))
-	#include <fcntl.h>
-	#include <sys/ioctl.h>
-	#include <sys/audioio.h>
-
-#elif (OS_IS_WIN32 == 1)
-	#include <windows.h>
-	#include <mmsystem.h>
-
-#endif
-
-#include	<sndfile.h>
-
-#define	SIGNED_SIZEOF(x)	((int) sizeof (x))
-#define	BUFFER_LEN			(2048)
-
-/*------------------------------------------------------------------------------
-**	Linux/OSS functions for playing a sound.
-*/
-
-#if HAVE_ALSA_ASOUNDLIB_H
-
-static snd_pcm_t * alsa_open (int channels, unsigned srate, int realtime) ;
-static int alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels) ;
-
-static void
-alsa_play (int argc, char *argv [])
-{	static float buffer [BUFFER_LEN] ;
-	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	snd_pcm_t * alsa_dev ;
-	int		k, readcount, subformat ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		if ((alsa_dev = alsa_open (sfinfo.channels, (unsigned) sfinfo.samplerate, SF_FALSE)) == NULL)
-			continue ;
-
-		subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-		if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-		{	double	scale ;
-			int 	m ;
-
-			sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-			if (scale < 1e-10)
-				scale = 1.0 ;
-			else
-				scale = 32700.0 / scale ;
-
-			while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-			{	for (m = 0 ; m < readcount ; m++)
-					buffer [m] *= scale ;
-				alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-				} ;
-			}
-		else
-		{	while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-				alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-			} ;
-
-		snd_pcm_drain (alsa_dev) ;
-		snd_pcm_close (alsa_dev) ;
-
-		sf_close (sndfile) ;
-		} ;
-
-	return ;
-} /* alsa_play */
-
-static snd_pcm_t *
-alsa_open (int channels, unsigned samplerate, int realtime)
-{	const char * device = "plughw:0" ;
-	snd_pcm_t *alsa_dev = NULL ;
-	snd_pcm_hw_params_t *hw_params ;
-	snd_pcm_uframes_t buffer_size, xfer_align, start_threshold ;
-	snd_pcm_uframes_t alsa_period_size, alsa_buffer_frames ;
-	snd_pcm_sw_params_t *sw_params ;
-
-	int err ;
-
-	if (realtime)
-	{	alsa_period_size = 256 ;
-		alsa_buffer_frames = 3 * alsa_period_size ;
-		}
-	else
-	{	alsa_period_size = 1024 ;
-		alsa_buffer_frames = 4 * alsa_period_size ;
-		} ;
-
-	if ((err = snd_pcm_open (&alsa_dev, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
-	{	fprintf (stderr, "cannot open audio device \"%s\" (%s)\n", device, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_nonblock (alsa_dev, 0) ;
-
-	if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0)
-	{	fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_any (alsa_dev, hw_params)) < 0)
-	{	fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_access (alsa_dev, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-	{	fprintf (stderr, "cannot set access type (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_format (alsa_dev, hw_params, SND_PCM_FORMAT_FLOAT)) < 0)
-	{	fprintf (stderr, "cannot set sample format (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_rate_near (alsa_dev, hw_params, &samplerate, 0)) < 0)
-	{	fprintf (stderr, "cannot set sample rate (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_channels (alsa_dev, hw_params, channels)) < 0)
-	{	fprintf (stderr, "cannot set channel count (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_buffer_size_near (alsa_dev, hw_params, &alsa_buffer_frames)) < 0)
-	{	fprintf (stderr, "cannot set buffer size (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_period_size_near (alsa_dev, hw_params, &alsa_period_size, 0)) < 0)
-	{	fprintf (stderr, "cannot set period size (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params (alsa_dev, hw_params)) < 0)
-	{	fprintf (stderr, "cannot set parameters (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	/* extra check: if we have only one period, this code won't work */
-	snd_pcm_hw_params_get_period_size (hw_params, &alsa_period_size, 0) ;
-	snd_pcm_hw_params_get_buffer_size (hw_params, &buffer_size) ;
-	if (alsa_period_size == buffer_size)
-	{	fprintf (stderr, "Can't use period equal to buffer size (%lu == %lu)", alsa_period_size, buffer_size) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_hw_params_free (hw_params) ;
-
-	if ((err = snd_pcm_sw_params_malloc (&sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params_malloc: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_sw_params_current (alsa_dev, sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params_current: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	/* note: set start threshold to delay start until the ring buffer is full */
-	snd_pcm_sw_params_current (alsa_dev, sw_params) ;
-	if ((err = snd_pcm_sw_params_get_xfer_align (sw_params, &xfer_align)) < 0)
-	{	fprintf (stderr, "cannot get xfer align (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	/* round up to closest transfer boundary */
-	start_threshold = (buffer_size / xfer_align) * xfer_align ;
-	if (start_threshold < 1)
-		start_threshold = 1 ;
-	if ((err = snd_pcm_sw_params_set_start_threshold (alsa_dev, sw_params, start_threshold)) < 0)
-	{	fprintf (stderr, "cannot set start threshold (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_sw_params (alsa_dev, sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_sw_params_free (sw_params) ;
-
-	snd_pcm_reset (alsa_dev) ;
-
-catch_error :
-
-	if (err < 0 && alsa_dev != NULL)
-	{	snd_pcm_close (alsa_dev) ;
-		return NULL ;
-		} ;
-
-	return alsa_dev ;
-} /* alsa_open */
-
-static int
-alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels)
-{	static	int epipe_count = 0 ;
-
-	snd_pcm_status_t *status ;
-	int total = 0 ;
-	int retval ;
-
-	if (epipe_count > 0)
-		epipe_count -- ;
-
-	while (total < frames)
-	{	retval = snd_pcm_writei (alsa_dev, data + total * channels, frames - total) ;
-
-		if (retval >= 0)
-		{	total += retval ;
-			if (total == frames)
-				return total ;
-
-			continue ;
-			} ;
-
-		switch (retval)
-		{	case -EAGAIN :
-					puts ("alsa_write_float: EAGAIN") ;
-					continue ;
-					break ;
-
-			case -EPIPE :
-					if (epipe_count > 0)
-					{	printf ("alsa_write_float: EPIPE %d\n", epipe_count) ;
-						if (epipe_count > 140)
-							return retval ;
-						} ;
-					epipe_count += 100 ;
-
-					if (0)
-					{	snd_pcm_status_alloca (&status) ;
-						if ((retval = snd_pcm_status (alsa_dev, status)) < 0)
-							fprintf (stderr, "alsa_out: xrun. can't determine length\n") ;
-						else if (snd_pcm_status_get_state (status) == SND_PCM_STATE_XRUN)
-						{	struct timeval now, diff, tstamp ;
-
-							gettimeofday (&now, 0) ;
-							snd_pcm_status_get_trigger_tstamp (status, &tstamp) ;
-							timersub (&now, &tstamp, &diff) ;
-
-							fprintf (stderr, "alsa_write_float xrun: of at least %.3f msecs. resetting stream\n",
-									diff.tv_sec * 1000 + diff.tv_usec / 1000.0) ;
-							}
-						else
-							fprintf (stderr, "alsa_write_float: xrun. can't determine length\n") ;
-						} ;
-
-					snd_pcm_prepare (alsa_dev) ;
-					break ;
-
-			case -EBADFD :
-					fprintf (stderr, "alsa_write_float: Bad PCM state.n") ;
-					return 0 ;
-					break ;
-
-			case -ESTRPIPE :
-					fprintf (stderr, "alsa_write_float: Suspend event.n") ;
-					return 0 ;
-					break ;
-
-			case -EIO :
-					puts ("alsa_write_float: EIO") ;
-					return 0 ;
-
-			default :
-					fprintf (stderr, "alsa_write_float: retval = %d\n", retval) ;
-					return 0 ;
-					break ;
-			} ; /* switch */
-		} ; /* while */
-
-	return total ;
-} /* alsa_write_float */
-
-#endif /* HAVE_ALSA_ASOUNDLIB_H */
-
-/*------------------------------------------------------------------------------
-**	Linux/OSS functions for playing a sound.
-*/
-
-#if defined (__linux__)
-
-static	int	linux_open_dsp_device (int channels, int srate) ;
-
-static void
-linux_play (int argc, char *argv [])
-{	static short buffer [BUFFER_LEN] ;
-	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	int		k, audio_device, readcount, subformat ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		audio_device = linux_open_dsp_device (sfinfo.channels, sfinfo.samplerate) ;
-
-		subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-		if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-		{	static float float_buffer [BUFFER_LEN] ;
-			double	scale ;
-			int 	m ;
-
-			sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-			if (scale < 1e-10)
-				scale = 1.0 ;
-			else
-				scale = 32700.0 / scale ;
-
-			while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
-			{	for (m = 0 ; m < readcount ; m++)
-					buffer [m] = scale * float_buffer [m] ;
-				write (audio_device, buffer, readcount * sizeof (short)) ;
-				} ;
-			}
-		else
-		{	while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-				write (audio_device, buffer, readcount * sizeof (short)) ;
-			} ;
-
-		if (ioctl (audio_device, SNDCTL_DSP_POST, 0) == -1)
-			perror ("ioctl (SNDCTL_DSP_POST) ") ;
-
-		if (ioctl (audio_device, SNDCTL_DSP_SYNC, 0) == -1)
-			perror ("ioctl (SNDCTL_DSP_SYNC) ") ;
-
-		close (audio_device) ;
-
-		sf_close (sndfile) ;
-		} ;
-
-	return ;
-} /* linux_play */
-
-static int
-linux_open_dsp_device (int channels, int srate)
-{	int fd, stereo, fmt ;
-
-	if ((fd = open ("/dev/dsp", O_WRONLY, 0)) == -1 &&
-		(fd = open ("/dev/sound/dsp", O_WRONLY, 0)) == -1)
-	{	perror ("linux_open_dsp_device : open ") ;
-		exit (1) ;
-		} ;
-
-	stereo = 0 ;
-	if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) == -1)
-	{ 	/* Fatal error */
-		perror ("linux_open_dsp_device : stereo ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_RESET, 0))
-	{	perror ("linux_open_dsp_device : reset ") ;
-		exit (1) ;
-		} ;
-
-	fmt = CPU_IS_BIG_ENDIAN ? AFMT_S16_BE : AFMT_S16_LE ;
-	if (ioctl (fd, SOUND_PCM_SETFMT, &fmt) != 0)
-	{	perror ("linux_open_dsp_device : set format ") ;
-	    exit (1) ;
-  		} ;
-
-	if (ioctl (fd, SOUND_PCM_WRITE_CHANNELS, &channels) != 0)
-	{	perror ("linux_open_dsp_device : channels ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SOUND_PCM_WRITE_RATE, &srate) != 0)
-	{	perror ("linux_open_dsp_device : sample rate ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_SYNC, 0) != 0)
-	{	perror ("linux_open_dsp_device : sync ") ;
-		exit (1) ;
-		} ;
-
-	return 	fd ;
-} /* linux_open_dsp_device */
-
-#endif /* __linux__ */
-
-/*------------------------------------------------------------------------------
-**	Mac OS X functions for playing a sound.
-*/
-
-#if (defined (__MACH__) && defined (__APPLE__)) /* MacOSX */
-
-typedef struct
-{	AudioStreamBasicDescription		format ;
-
-	UInt32 			buf_size ;
-	AudioDeviceID 	device ;
-
-	SNDFILE 		*sndfile ;
-	SF_INFO 		sfinfo ;
-
-	int				fake_stereo ;
-	int				done_playing ;
-} MacOSXAudioData ;
-
-#include <math.h>
-
-static OSStatus
-macosx_audio_out_callback (AudioDeviceID device, const AudioTimeStamp* current_time,
-	const AudioBufferList* data_in, const AudioTimeStamp* time_in,
-	AudioBufferList*	data_out, const AudioTimeStamp* time_out,
-	void* client_data)
-{	MacOSXAudioData	*audio_data ;
-	int		size, sample_count, read_count, k ;
-	float	*buffer ;
-
-	/* Prevent compiler warnings. */
-	device = device ;
-	current_time = current_time ;
-	data_in = data_in ;
-	time_in = time_in ;
-	time_out = time_out ;
-
-	audio_data = (MacOSXAudioData*) client_data ;
-
-	size = data_out->mBuffers [0].mDataByteSize ;
-	sample_count = size / sizeof (float) ;
-
-	buffer = (float*) data_out->mBuffers [0].mData ;
-
-	if (audio_data->fake_stereo != 0)
-	{	read_count = sf_read_float (audio_data->sndfile, buffer, sample_count / 2) ;
-
-		for (k = read_count - 1 ; k >= 0 ; k--)
-		{	buffer [2 * k	] = buffer [k] ;
-			buffer [2 * k + 1] = buffer [k] ;
-			} ;
-		read_count *= 2 ;
-		}
-	else
-		read_count = sf_read_float (audio_data->sndfile, buffer, sample_count) ;
-
-	/* Fill the remainder with zeroes. */
-	if (read_count < sample_count)
-	{	if (audio_data->fake_stereo == 0)
-			memset (&(buffer [read_count]), 0, (sample_count - read_count) * sizeof (float)) ;
-		/* Tell the main application to terminate. */
-		audio_data->done_playing = SF_TRUE ;
-		} ;
-
-	return noErr ;
-} /* macosx_audio_out_callback */
-
-static void
-macosx_play (int argc, char *argv [])
-{	MacOSXAudioData 	audio_data ;
-	OSStatus	err ;
-	UInt32		count, buffer_size ;
-	int 		k ;
-
-	audio_data.fake_stereo = 0 ;
-	audio_data.device = kAudioDeviceUnknown ;
-
-	/*  get the default output device for the HAL */
-	count = sizeof (AudioDeviceID) ;
-	if ((err = AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
-				&count, (void *) &(audio_data.device))) != noErr)
-	{	printf ("AudioHardwareGetProperty (kAudioDevicePropertyDefaultOutputDevice) failed.\n") ;
-		return ;
-		} ;
-
-	/*  get the buffersize that the default device uses for IO */
-	count = sizeof (UInt32) ;
-	if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyBufferSize,
-				&count, &buffer_size)) != noErr)
-	{	printf ("AudioDeviceGetProperty (kAudioDevicePropertyBufferSize) failed.\n") ;
-		return ;
-		} ;
-
-	/*  get a description of the data format used by the default device */
-	count = sizeof (AudioStreamBasicDescription) ;
-	if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyStreamFormat,
-				&count, &(audio_data.format))) != noErr)
-	{	printf ("AudioDeviceGetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-		return ;
-		} ;
-
-	/* Base setup completed. Now play files. */
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-		if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-			continue ;
-			} ;
-
-		audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-
-		if (audio_data.sfinfo.channels == 1)
-		{	audio_data.format.mChannelsPerFrame = 2 ;
-			audio_data.fake_stereo = 1 ;
-			}
-		else
-		audio_data.format.mChannelsPerFrame = audio_data.sfinfo.channels ;
-
-		if ((err = AudioDeviceSetProperty (audio_data.device, NULL, 0, false, kAudioDevicePropertyStreamFormat,
-					sizeof (AudioStreamBasicDescription), &(audio_data.format))) != noErr)
-		{	printf ("AudioDeviceSetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-			return ;
-			} ;
-
-		/*  we want linear pcm */
-		if (audio_data.format.mFormatID != kAudioFormatLinearPCM)
-			return ;
-
-		/* Fire off the device. */
-		if ((err = AudioDeviceAddIOProc (audio_data.device, macosx_audio_out_callback,
-				(void *) &audio_data)) != noErr)
-		{	printf ("AudioDeviceAddIOProc failed.\n") ;
-			return ;
-			} ;
-
-		err = AudioDeviceStart (audio_data.device, macosx_audio_out_callback) ;
-		if	(err != noErr)
-			return ;
-
-		audio_data.done_playing = SF_FALSE ;
-
-		while (audio_data.done_playing == SF_FALSE)
-			usleep (10 * 1000) ; /* 10 000 milliseconds. */
-
-		if ((err = AudioDeviceStop (audio_data.device, macosx_audio_out_callback)) != noErr)
-		{	printf ("AudioDeviceStop failed.\n") ;
-			return ;
-			} ;
-
-		err = AudioDeviceRemoveIOProc (audio_data.device, macosx_audio_out_callback) ;
-		if (err != noErr)
-		{	printf ("AudioDeviceRemoveIOProc failed.\n") ;
-			return ;
-			} ;
-
-		sf_close (audio_data.sndfile) ;
-		} ;
-
-	return ;
-} /* macosx_play */
-
-#endif /* MacOSX */
-
-
-/*------------------------------------------------------------------------------
-**	Win32 functions for playing a sound.
-**
-**	This API sucks. Its needlessly complicated and is *WAY* too loose with
-**	passing pointers arounf in integers and and using char* pointers to
-**  point to data instead of short*. It plain sucks!
-*/
-
-#if (OS_IS_WIN32 == 1)
-
-#define	WIN32_BUFFER_LEN	(1<<15)
-
-typedef struct
-{	HWAVEOUT	hwave ;
-	WAVEHDR		whdr [2] ;
-
-	CRITICAL_SECTION	mutex ;		/* to control access to BuffersInUSe */
-	HANDLE		Event ;			/* signal that a buffer is free */
-
-	short		buffer [WIN32_BUFFER_LEN / sizeof (short)] ;
-	int			current, bufferlen ;
-	int			BuffersInUse ;
-
-	SNDFILE 	*sndfile ;
-	SF_INFO 	sfinfo ;
-
-	sf_count_t	remaining ;
-} Win32_Audio_Data ;
-
-
-static void
-win32_play_data (Win32_Audio_Data *audio_data)
-{	int thisread, readcount ;
-
-	/* fill a buffer if there is more data and we can read it sucessfully */
-	readcount = (audio_data->remaining > audio_data->bufferlen) ? audio_data->bufferlen : (int) audio_data->remaining ;
-
-	thisread = (int) sf_read_short (audio_data->sndfile, (short *) (audio_data->whdr [audio_data->current].lpData), readcount) ;
-
-	audio_data->remaining -= thisread ;
-
-	if (thisread > 0)
-	{	/* Fix buffer length if this is only a partial block. */
-		if (thisread < audio_data->bufferlen)
-			audio_data->whdr [audio_data->current].dwBufferLength = thisread * sizeof (short) ;
-
-		/* Queue the WAVEHDR */
-		waveOutWrite (audio_data->hwave, (LPWAVEHDR) &(audio_data->whdr [audio_data->current]), sizeof (WAVEHDR)) ;
-
-		/* count another buffer in use */
-		EnterCriticalSection (&audio_data->mutex) ;
-		audio_data->BuffersInUse ++ ;
-		LeaveCriticalSection (&audio_data->mutex) ;
-
-		/* use the other buffer next time */
-		audio_data->current = (audio_data->current + 1) % 2 ;
-		} ;
-
-	return ;
-} /* win32_play_data */
-
-static void CALLBACK
-win32_audio_out_callback (HWAVEOUT hwave, UINT msg, DWORD data, DWORD param1, DWORD param2)
-{	Win32_Audio_Data	*audio_data ;
-
-	/* Prevent compiler warnings. */
-	hwave = hwave ;
-	param1 = param2 ;
-
-	if (data == 0)
-		return ;
-
-	/*
-	** I consider this technique of passing a pointer via an integer as
-	** fundamentally broken but thats the way microsoft has defined the
-	** interface.
-	*/
-	audio_data = (Win32_Audio_Data*) data ;
-
-	/* let main loop know a buffer is free */
-	if (msg == MM_WOM_DONE)
-	{	EnterCriticalSection (&audio_data->mutex) ;
-		audio_data->BuffersInUse -- ;
-		LeaveCriticalSection (&audio_data->mutex) ;
-		SetEvent (audio_data->Event) ;
-		} ;
-
-	return ;
-} /* win32_audio_out_callback */
-
-/* This is needed for earlier versions of the M$ development tools. */
-#ifndef DWORD_PTR
-#define DWORD_PTR DWORD
-#endif
-
-static void
-win32_play (int argc, char *argv [])
-{	Win32_Audio_Data	audio_data ;
-
-	WAVEFORMATEX wf ;
-	int	k, error ;
-
-	audio_data.sndfile = NULL ;
-	audio_data.hwave = 0 ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-
-		if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		audio_data.remaining = audio_data.sfinfo.frames * audio_data.sfinfo.channels ;
-		audio_data.current = 0 ;
-
-		InitializeCriticalSection (&audio_data.mutex) ;
-		audio_data.Event = CreateEvent (0, FALSE, FALSE, 0) ;
-
-		wf.nChannels = audio_data.sfinfo.channels ;
-		wf.wFormatTag = WAVE_FORMAT_PCM ;
-		wf.cbSize = 0 ;
-		wf.wBitsPerSample = 16 ;
-
-		wf.nSamplesPerSec = audio_data.sfinfo.samplerate ;
-
-		wf.nBlockAlign = audio_data.sfinfo.channels * sizeof (short) ;
-
-		wf.nAvgBytesPerSec = wf.nBlockAlign * wf.nSamplesPerSec ;
-
-		error = waveOutOpen (&(audio_data.hwave), WAVE_MAPPER, &wf, (DWORD_PTR) win32_audio_out_callback,
-							(DWORD_PTR) &audio_data, CALLBACK_FUNCTION) ;
-		if (error)
-		{	puts ("waveOutOpen failed.") ;
-			audio_data.hwave = 0 ;
-			continue ;
-			} ;
-
-		audio_data.whdr [0].lpData = (char*) audio_data.buffer ;
-		audio_data.whdr [1].lpData = ((char*) audio_data.buffer) + sizeof (audio_data.buffer) / 2 ;
-
-		audio_data.whdr [0].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-		audio_data.whdr [1].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-
-		audio_data.whdr [0].dwFlags = 0 ;
-		audio_data.whdr [1].dwFlags = 0 ;
-
-		/* length of each audio buffer in samples */
-		audio_data.bufferlen = sizeof (audio_data.buffer) / 2 / sizeof (short) ;
-
-		/* Prepare the WAVEHDRs */
-		if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR))))
-		{	printf ("waveOutPrepareHeader [0] failed : %08X\n", error) ;
-			waveOutClose (audio_data.hwave) ;
-			continue ;
-			} ;
-
-		if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR))))
-		{	printf ("waveOutPrepareHeader [1] failed : %08X\n", error) ;
-			waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-			waveOutClose (audio_data.hwave) ;
-			continue ;
-			} ;
-
-		/* Fill up both buffers with audio data */
-		audio_data.BuffersInUse = 0 ;
-		win32_play_data (&audio_data) ;
-		win32_play_data (&audio_data) ;
-
-		/* loop until both buffers are released */
-		while (audio_data.BuffersInUse > 0)
-		{
-			/* wait for buffer to be released */
-			WaitForSingleObject (audio_data.Event, INFINITE) ;
-
-			/* refill the buffer if there is more data to play */
-			win32_play_data (&audio_data) ;
-			} ;
-
-		waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-		waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR)) ;
-
-		waveOutClose (audio_data.hwave) ;
-		audio_data.hwave = 0 ;
-
-		DeleteCriticalSection (&audio_data.mutex) ;
-
-		sf_close (audio_data.sndfile) ;
-		} ;
-
-} /* win32_play */
-
-#endif /* Win32 */
-
-/*------------------------------------------------------------------------------
-**	Solaris.
-*/
-
-#if (defined (sun) && defined (unix)) /* ie Solaris */
-
-static void
-solaris_play (int argc, char *argv [])
-{	static short 	buffer [BUFFER_LEN] ;
-	audio_info_t	audio_info ;
-	SNDFILE			*sndfile ;
-	SF_INFO			sfinfo ;
-	unsigned long	delay_time ;
-	long			k, start_count, output_count, write_count, read_count ;
-	int				audio_fd, error, done ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		/* open the audio device - write only, non-blocking */
-		if ((audio_fd = open ("/dev/audio", O_WRONLY | O_NONBLOCK)) < 0)
-		{	perror ("open (/dev/audio) failed") ;
-			return ;
-			} ;
-
-		/*	Retrive standard values. */
-		AUDIO_INITINFO (&audio_info) ;
-
-		audio_info.play.sample_rate = sfinfo.samplerate ;
-		audio_info.play.channels = sfinfo.channels ;
-		audio_info.play.precision = 16 ;
-		audio_info.play.encoding = AUDIO_ENCODING_LINEAR ;
-		audio_info.play.gain = AUDIO_MAX_GAIN ;
-		audio_info.play.balance = AUDIO_MID_BALANCE ;
-
-		if ((error = ioctl (audio_fd, AUDIO_SETINFO, &audio_info)))
-		{	perror ("ioctl (AUDIO_SETINFO) failed") ;
-			return ;
-			} ;
-
-		/* Delay time equal to 1/4 of a buffer in microseconds. */
-		delay_time = (BUFFER_LEN * 1000000) / (audio_info.play.sample_rate * 4) ;
-
-		done = 0 ;
-		while (! done)
-		{	read_count = sf_read_short (sndfile, buffer, BUFFER_LEN) ;
-			if (read_count < BUFFER_LEN)
-			{	memset (&(buffer [read_count]), 0, (BUFFER_LEN - read_count) * sizeof (short)) ;
-				/* Tell the main application to terminate. */
-				done = SF_TRUE ;
-				} ;
-
-			start_count = 0 ;
-			output_count = BUFFER_LEN * sizeof (short) ;
-
-			while (output_count > 0)
-			{	/* write as much data as possible */
-				write_count = write (audio_fd, &(buffer [start_count]), output_count) ;
-				if (write_count > 0)
-				{	output_count -= write_count ;
-					start_count += write_count ;
-					}
-				else
-				{	/*	Give the audio output time to catch up. */
-					usleep (delay_time) ;
-					} ;
-				} ; /* while (outpur_count > 0) */
-			} ; /* while (! done) */
-
-		close (audio_fd) ;
-		} ;
-
-	return ;
-} /* solaris_play */
-
-#endif /* Solaris */
-
-/*==============================================================================
-**	Main function.
-*/
-
-int
-main (int argc, char *argv [])
-{
-	if (argc < 2)
-	{
-		printf ("\nUsage : %s <input sound file>\n\n", argv [0]) ;
-#if (OS_IS_WIN32 == 1)
-		printf ("This is a Unix style command line application which\n"
-				"should be run in a MSDOS box or Command Shell window.\n\n") ;
-		printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-
-		/* This is the officially blessed by microsoft way but I can't get
-		** it to link.
-		**     Sleep (15) ;
-		** Instead, use this:
-		*/
-		_sleep (5 * 1000) ;
-#endif
-		return 1 ;
-		} ;
-
-#if defined (__linux__)
-	#if HAVE_ALSA_ASOUNDLIB_H
-		if (access ("/proc/asound/cards", R_OK) == 0)
-			alsa_play (argc, argv) ;
-		else
-	#endif
-		linux_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__))
-	macosx_play (argc, argv) ;
-#elif (defined (sun) && defined (unix))
-	solaris_play (argc, argv) ;
-#elif (OS_IS_WIN32 == 1)
-	win32_play (argc, argv) ;
-#elif defined (__BEOS__)
-	printf ("This program cannot be compiled on BeOS.\n") ;
-	printf ("Instead, compile the file sfplay_beos.cpp.\n") ;
-	return 1 ;
-#else
-	puts ("*** Playing sound not yet supported on this platform.") ;
-	puts ("*** Please feel free to submit a patch.") ;
-	return 1 ;
-#endif
-
-	return 0 ;
-} /* main */
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 8fc4110d-6cec-4e03-91df-0f384cabedac
-*/
diff --git a/libs/libsndfile/examples/sndfile-to-text.c b/libs/libsndfile/examples/sndfile-to-text.c
deleted file mode 100644
index 466bb860b5..0000000000
--- a/libs/libsndfile/examples/sndfile-to-text.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#define	BLOCK_SIZE 512
-
-static void
-print_usage (char *progname)
-{	printf ("\nUsage : %s <input file> <output file>\n", progname) ;
-	puts ("\n"
-		"    Where the output file will contain a line for each frame\n"
-		"    and a column for each channel.\n"
-		) ;
-
-} /* print_usage */
-
-static void
-convert_to_text (SNDFILE * infile, FILE * outfile, int channels)
-{	float buf [channels * BLOCK_SIZE] ;
-	int k, m, readcount ;
-
-	while ((readcount = sf_readf_float (infile, buf, BLOCK_SIZE)) > 0)
-	{	for (k = 0 ; k < readcount ; k++)
-		{	for (m = 0 ; m < channels ; m++)
-				fprintf (outfile, " % 12.10f", buf [k * channels + m]) ;
-			fprintf (outfile, "\n") ;
-			} ;
-		} ;
-
-	return ;
-} /* convert_to_text */
-
-int
-main (int argc, char * argv [])
-{	char 		*progname, *infilename, *outfilename ;
-	SNDFILE		*infile = NULL ;
-	FILE		*outfile = NULL ;
-	SF_INFO		sfinfo ;
-
-	progname = strrchr (argv [0], '/') ;
-	progname = progname ? progname + 1 : argv [0] ;
-
-	if (argc != 3)
-	{	print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	infilename = argv [1] ;
-	outfilename = argv [2] ;
-
-	if (strcmp (infilename, outfilename) == 0)
-	{	printf ("Error : Input and output filenames are the same.\n\n") ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	if (infilename [0] == '-')
-	{	printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	if (outfilename [0] == '-')
-	{	printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-		print_usage (progname) ;
-		return 1 ;
-		} ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Not able to open input file %s.\n", infilename) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	/* Open the output file. */
-	if ((outfile = fopen (outfilename, "w")) == NULL)
-	{	printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	fprintf (outfile, "# Converted from file %s.\n", infilename) ;
-	fprintf (outfile, "# Channels %d, Sample rate %d\n", sfinfo.channels, sfinfo.samplerate) ;
-
-	convert_to_text (infile, outfile, sfinfo.channels) ;
-
-	sf_close (infile) ;
-	fclose (outfile) ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/sndfilehandle.cc b/libs/libsndfile/examples/sndfilehandle.cc
deleted file mode 100644
index c9a1931aea..0000000000
--- a/libs/libsndfile/examples/sndfilehandle.cc
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<cstdio>
-#include	<cstring>
-
-#include	<sndfile.hh>
-
-#define		BUFFER_LEN		1024
-
-static void
-create_file (const char * fname, int format)
-{	static short buffer [BUFFER_LEN] ;
-
-	SndfileHandle file ;
-	int channels = 2 ;
-	int srate = 48000 ;
-
-	printf ("Creating file named '%s'\n", fname) ;
-
-	file = SndfileHandle (fname, SFM_WRITE, format, channels, srate) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	file.write (buffer, BUFFER_LEN) ;
-
-	puts ("") ;
-	/*
-	**	The SndfileHandle object will automatically close the file and
-	**	release all allocated memory when the object goes out of scope.
-	**	This is the Resource Acquisition Is Initailization idom.
-	**	See : http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
-	*/
-} /* create_file */
-
-static void
-read_file (const char * fname)
-{	static short buffer [BUFFER_LEN] ;
-
-	SndfileHandle file ;
-
-	file = SndfileHandle (fname) ;
-
-	printf ("Opened file '%s'\n", fname) ;
-	printf ("    Sample rate : %d\n", file.samplerate ()) ;
-	printf ("    Channels    : %d\n", file.channels ()) ;
-
-	file.read (buffer, BUFFER_LEN) ;
-
-	puts ("") ;
-
-	/* RAII takes care of destroying SndfileHandle object. */
-} /* read_file */
-
-int
-main (void)
-{	const char * fname = "test.wav" ;
-
-	puts ("\nSimple example showing usage of the C++ SndfileHandle object.\n") ;
-
-	create_file (fname, SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-	read_file (fname) ;
-
-	puts ("Done.\n") ;
-	return 0 ;
-} /* main */
-
-
diff --git a/libs/libsndfile/libsndfile.spec.in b/libs/libsndfile/libsndfile.spec.in
deleted file mode 100644
index d4427289a2..0000000000
--- a/libs/libsndfile/libsndfile.spec.in
+++ /dev/null
@@ -1,69 +0,0 @@
-
-%define name    @PACKAGE@
-%define version @VERSION@
-%define release 1
-
-Summary: A library to handle various audio file formats.
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Copyright: LGPL
-Group: Libraries/Sound
-Source: http://www.mega-nerd.com/libsndfile/libsndfile-%{version}.tar.gz
-Url: http://www.mega-nerd.com/libsndfile/
-BuildRoot: /var/tmp/%{name}-%{version}
-
-%description
-libsndfile is a C library for reading and writing sound files such as
-AIFF, AU and WAV files through one standard interface. It can currently
-read/write 8, 16, 24 and 32-bit PCM files as well as 32-bit floating
-point WAV files and a number of compressed formats.
-
-%package devel
-Summary: Libraries, includes, etc to develop libsndfile applications
-Group: Libraries
-
-%description devel
-Libraries, include files, etc you can use to develop libsndfile applications.
-
-%prep
-%setup
-
-%build
-%configure
-make
-
-%install
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-mkdir -p $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT install
-%clean
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-
-%files
-%defattr(-,root,root)
-%doc AUTHORS COPYING ChangeLog INSTALL NEWS README TODO doc
-%{_libdir}/libsndfile.so.*
-%{_bindir}/*
-%{_mandir}/man1/*
-%{_datadir}/octave/site/m/*
-%{_defaultdocdir}/libsndfile1-dev/html/*
-
-%files devel
-%defattr(-,root,root)
-%{_libdir}/libsndfile.a
-%{_libdir}/libsndfile.la
-%{_libdir}/libsndfile.so
-%{_includedir}/sndfile.h
-%{_libdir}/pkgconfig/sndfile.pc
-
-%changelog
-* Sun May 15 2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Add html files to the files section.
-* Tue Sep 16 2003 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Apply corrections from Andrew Schultz.
-* Mon Oct 21 2002 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Force installation of sndfile.pc file.
-* Thu Jul 6 2000 Josh Green <jgreen@users.sourceforge.net>
-- Created libsndfile.spec.in
-
diff --git a/libs/libsndfile/make_lite.py b/libs/libsndfile/make_lite.py
deleted file mode 100644
index eee69fc82d..0000000000
--- a/libs/libsndfile/make_lite.py
+++ /dev/null
@@ -1,491 +0,0 @@
-#!/usr/bin/python
-
-import commands, os, re, string, sys, time
-
-def count_enclosed_functions (source):
-	func_count = 0
-	open_brace = 0
-	close_brace = 0
-	for ch in source:
-		if ch == '{':
-			open_brace += 1
-		elif ch == '}':
-			close_brace += 1
-			if open_brace == close_brace:
-				func_count += 1
-		if open_brace < close_brace:
-			print "count_enclosed_functions : open_brace < close_brace"
-			return -1
-	return func_count
-
-def find_function_prototype (source, proto_name):
-	proto_re = "(^[a-zA-Z_ \t]+\s+%s[^a-zA-Z0-9_]\s*\([^\)]+\)\s+;\n)" % (proto_name)
-	proto_result = re.search (proto_re, source, re.MULTILINE | re.DOTALL)
-	if not proto_result:
-		return None
-	proto_text = proto_result.groups ()[0]
-	return proto_text
-
-def find_function_definition (source, func_name):
-	func_re = "(\n[a-zA-Z_ \t]+\n%s[^a-zA-Z0-9_].* /\* %s \*/\n)" % (func_name, func_name)
-	func_result = re.search (func_re, source, re.MULTILINE | re.DOTALL)
-	if not func_result:
-		sys.exit (1)
-		return None
-	func_text = func_result.groups ()[0]
-
-	# Now to check that we only have one enclosing function.
-	func_count = count_enclosed_functions (func_text)
-	if func_count != 1:
-		return None
-	return func_text
-
-def find_include (source, inc_name):
-	inc_re = "(^#include\s+[\<\"]%s[\"\>]\s*)" % inc_name
-	inc_result = re.search (inc_re, source, re.MULTILINE | re.DOTALL)
-	if not inc_result:
-		return None
-	inc_text = inc_result.groups ()[0]
-	return inc_text
-
-def find_assign_statement (source, var_name):
-	var_re = "(^\s+%s\s*=[^;]+;)" % var_name
-	var_result = re.search (var_re, source, re.MULTILINE | re.DOTALL)
-	if not var_result:
-		return None
-	assign_text = var_result.groups ()[0]
-	return assign_text
-
-#--------------------------------------------------------------------------------
-
-def remove_include (source, inc_name):
-	inc_text = find_include (source, inc_name)
-	if not inc_text:
-		print "remove_include : include '%s' not found. Exiting." % inc_name
-		sys.exit (1)
-
-	source = string.replace (source, inc_text, "")
-	return source
-
-def remove_assign (source, assign_name):
-	assign_text = find_assign (source, inc_name)
-	if not inc_text:
-		print "remove_include : include '%s' not found. Exiting." % inc_name
-		sys.exit (1)
-
-	source = string.replace (source, inc_text, "")
-	return source
-
-def remove_prototype (source, proto_name):
-	proto_text = find_function_prototype (source, proto_name)
-	if not proto_text:
-		print "remove_prototype : prototype '%s' not found. Exiting." % proto_name
-		sys.exit (1)
-
-	source = string.replace (source, proto_text, "")
-	return source
-
-def remove_function (source, func_name):
-	func_text = find_function_definition (source, func_name)
-	if not func_text:
-		print "remove_function : function '%s' not found. Exiting." % func_name
-		sys.exit (1)
-
-	source = string.replace (source, func_text, "/* Function %s() removed here. */\n" % func_name)
-	return source
-
-def remove_all_assignments (source, var):
-	count = 0
-	while 1:
-		assign_text = find_assign_statement (source, var)
-		if not assign_text:
-			if count != 0:
-				break
-			print "remove_all_assignments : variable '%s' not found. Exiting." % var
-			sys.exit (1)
-
-		source = string.replace (source, assign_text, "")
-		count += 1
-	return source
-
-
-
-#----------------------------------------------------------------
-
-def remove_funcs_and_protos_from_file (filename, func_list):
-	source_code = open (filename, 'r').read ()
-
-	for func in func_list:
-		source_code = remove_prototype (source_code, func) ;
-		source_code = remove_function (source_code, func) ;
-	open (filename, 'w').write (source_code)
-
-def remove_funcs_from_file (filename, func_list):
-	source_code = open (filename, 'r').read ()
-
-	for func in func_list:
-		source_code = remove_function (source_code, func) ;
-	open (filename, 'w').write (source_code)
-
-def remove_protos_from_file (filename, func_list):
-	source_code = open (filename, 'r').read ()
-
-	for func in func_list:
-		source_code = remove_prototype (source_code, func) ;
-	open (filename, 'w').write (source_code)
-
-def remove_includes_from_file (filename, inc_list):
-	source_code = open (filename, 'r').read ()
-
-	for inc in inc_list:
-		source_code = remove_include (source_code, inc) ;
-	open (filename, 'w').write (source_code)
-
-def remove_all_assignments_from_file (filename, var_list):
-	source_code = open (filename, 'r').read ()
-
-	for var in var_list:
-		source_code = remove_all_assignments (source_code, var) ;
-	open (filename, 'w').write (source_code)
-
-def remove_comment_start_end (filename, start_comment, end_comment):
-	source_code = open (filename, 'r').read ()
-
-	while 1:
-		start_index = string.find (source_code, start_comment)
-		end_index = string.find (source_code, end_comment)
-		if start_index < 0 or end_index < start_index:
-			break
-		end_index += len (end_comment)
-		source_code = source_code [:start_index-1] + source_code [end_index:] ;
-
-	open (filename, 'w').write (source_code)
-
-def remove_strings_from_file (filename, str_list):
-	file_text = open (filename, 'r').read ()
-	for current_str in str_list:
-		file_text = string.replace (file_text, current_str, '')
-	open (filename, 'w').write (file_text)
-
-def string_replace_in_file (filename, from_str, to_str):
-	file_text = open (filename, 'r').read ()
-	file_text = string.replace (file_text, from_str, to_str)
-	open (filename, 'w').write (file_text)
-
-def remove_regex_from_file (filename, regex_list):
-	file_text = open (filename, 'r').read ()
-	for regex in regex_list:
-		file_text = re.sub (regex, '', file_text, re.MULTILINE | re.DOTALL)
-	open (filename, 'w').write (file_text)
-
-#==========================================================================
-
-def find_configure_version (filename):
-	# AM_INIT_AUTOMAKE(libsndfile,0.0.21pre6)
-	file = open (filename)
-	while 1:
-		line = file.readline ()
-		if re.search ("AC_INIT", line):
-			x = re.sub ("[^\(]+\(", "", line)
-			x = re.sub ("\).*\n", "", x)
-			x = string.split (x, ",")
-			package = x [0]
-			version = x [1]
-			break
-	file.close ()
-	# version = re.escape (version)
-	return package, version
-
-def fix_configure_ac_file (filename):
-	data = open (filename, 'r').read ()
-	data = string.replace (data, "AM_INIT_AUTOMAKE(libsndfile,", "AM_INIT_AUTOMAKE(libsndfile_lite,", 1)
-
-	file = open (filename, 'w')
-	file.write (data)
-	file.close ()
-
-
-def make_dist_file (package, version):
-	print "Making dist file."
-	tar_gz_file = "%s-%s.tar.gz" % (package, version)
-	if os.path.exists (tar_gz_file):
-		return
-	if os.system ("make dist"):
-		sys.exit (1)
-	return
-
-def delete_files (file_list):
-	for file_name in file_list:
-		os.remove (file_name)
-
-#=======================================================================
-
-source_dir = os.getcwd ()
-
-conf_package, conf_version =  find_configure_version ('configure.ac')
-
-package_version = "%s-%s" % (conf_package, conf_version)
-lite_version = "%s_lite-%s" % (conf_package, conf_version)
-
-os.system ("rm -rf %s%s.tar.gz" % (source_dir, package_version))
-
-os.system ("make dist")
-
-make_dist_file (conf_package, conf_version)
-
-os.chdir ("/tmp")
-
-print "Uncompressing .tar.gz file."
-os.system ("rm -rf %s" % package_version)
-if os.system ("tar zxf %s/%s.tar.gz" % (source_dir, package_version)):
-	sys.exit (1)
-
-
-print "Renaming to libsndfile_lite."
-os.system ("rm -rf %s" % lite_version)
-os.rename (package_version, lite_version)
-
-print "Changing into libsndfile_lite directory."
-os.chdir (lite_version)
-
-print "Removing un-neeed directories."
-delete_dirs = [ 'src/G72x' ]
-
-for dir_name in delete_dirs:
-	os.system ("rm -rf %s" % dir_name)
-
-print "Removing un-needed files."
-delete_files ([ 'src/ircam.c', 'src/nist.c',
-	'src/ima_adpcm.c', 'src/ms_adpcm.c', 'src/au_g72x.c',
-	'src/mat4.c', 'src/mat5.c', 'src/dwvw.c', 'src/paf.c',
-	'src/ogg.c', 'src/pvf.c', 'src/xi.c', 'src/htk.c',
-	'src/sd2.c', 'src/rx2.c', 'src/txw.c', 'src/wve.c',
-	'src/dwd.c', 'src/svx.c', 'src/voc.c', 'src/vox_adpcm.c',
-	'src/sds.c'
-	])
-
-
-print "Hacking 'configure.ac' and 'src/Makefile.am'."
-remove_strings_from_file ('configure.ac', [ 'src/G72x/Makefile' ])
-remove_strings_from_file ('src/Makefile.am', [ 'G72x/libg72x.la', 'G72x',
-		'ircam.c', 'nist.c', 'ima_adpcm.c', 'ms_adpcm.c', 'au_g72x.c', 'mat4.c', 
-		'mat5.c', 'dwvw.c',  'paf.c', 'ogg.c', 'pvf.c', 'xi.c', 'htk.c', 
-		'sd2.c', 'rx2.c', 'txw.c', 'wve.c', 'dwd.c', 'svx.c', 'voc.c', 
-		'vox_adpcm.c', 'sds.c'
-		])
-
-#----------------------------------------------------------------------------
-
-print "Hacking header files."
-
-remove_protos_from_file ('src/common.h', [	'xi_open', 'sd2_open', 'ogg_open',
-	'dwvw_init', 'paf_open', 'svx_open', 'nist_open', 'rx2_open', 'mat4_open',
-	'voc_open', 'txw_open', 'dwd_open', 'htk_open', 'wve_open', 'mat5_open',
-	'pvf_open', 'ircam_open', 'sds_open',
-	'float32_init', 'double64_init', 'aiff_ima_init', 'vox_adpcm_init',
-	'wav_w64_ima_init', 'wav_w64_msadpcm_init'
-	])
-
-remove_protos_from_file ('src/au.h',
-		[ 'au_g72x_reader_init', 'au_g72x_writer_init' ])
-
-remove_protos_from_file ('src/wav_w64.h', [ 'msadpcm_write_adapt_coeffs' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking case statements."
-
-remove_comment_start_end ('src/sndfile.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/aiff.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/au.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/raw.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/w64.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/wav.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/double64.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/float32.c', '/* Lite remove start */' , '/* Lite remove end */')
-
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/pcm.c."
-remove_funcs_from_file ('src/pcm.c', [
-	'f2sc_array', 'f2sc_clip_array', 'f2uc_array', 'f2uc_clip_array',
-	'f2bes_array', 'f2bes_clip_array', 'f2les_array', 'f2les_clip_array',
-	'f2let_array', 'f2let_clip_array', 'f2bet_array', 'f2bet_clip_array',
-	'f2bei_array', 'f2bei_clip_array', 'f2lei_array', 'f2lei_clip_array',
-	'd2sc_array', 'd2sc_clip_array', 'd2uc_array', 'd2uc_clip_array',
-	'd2bes_array', 'd2bes_clip_array', 'd2les_array', 'd2les_clip_array',
-	'd2let_array', 'd2let_clip_array', 'd2bet_array', 'd2bet_clip_array',
-	'd2bei_array', 'd2bei_clip_array', 'd2lei_array', 'd2lei_clip_array',
-	])
-
-remove_funcs_and_protos_from_file ('src/pcm.c', [
-	'pcm_read_sc2f', 'pcm_read_uc2f', 'pcm_read_les2f', 'pcm_read_bes2f',
-	'pcm_read_let2f', 'pcm_read_bet2f', 'pcm_read_lei2f', 'pcm_read_bei2f',
-	'pcm_read_sc2d', 'pcm_read_uc2d', 'pcm_read_les2d', 'pcm_read_bes2d',
-	'pcm_read_let2d', 'pcm_read_bet2d', 'pcm_read_lei2d', 'pcm_read_bei2d',
-	'pcm_write_f2sc', 'pcm_write_f2uc', 'pcm_write_f2bes', 'pcm_write_f2les',
-	'pcm_write_f2bet', 'pcm_write_f2let', 'pcm_write_f2bei', 'pcm_write_f2lei',
-	'pcm_write_d2sc', 'pcm_write_d2uc', 'pcm_write_d2bes', 'pcm_write_d2les',
-	'pcm_write_d2bet', 'pcm_write_d2let', 'pcm_write_d2bei', 'pcm_write_d2lei',
-
-	'sc2f_array', 'uc2f_array', 'bes2f_array', 'les2f_array',
-	'bet2f_array', 'let2f_array', 'bei2f_array', 'lei2f_array',
-	'sc2d_array', 'uc2d_array', 'bes2d_array', 'les2d_array',
-	'bet2d_array', 'let2d_array', 'bei2d_array', 'lei2d_array'
-	])
-
-remove_includes_from_file ('src/pcm.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/pcm.c', [
-	'psf-\>write_float', 'psf\-\>write_double',
-	'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-print "Hacking src/ulaw.c."
-remove_funcs_and_protos_from_file ('src/ulaw.c', [
-	'ulaw_read_ulaw2f', 'ulaw_read_ulaw2d',
-	'ulaw_write_f2ulaw', 'ulaw_write_d2ulaw',
-	'ulaw2f_array', 'ulaw2d_array', 'f2ulaw_array', 'd2ulaw_array'
-	])
-
-remove_includes_from_file ('src/ulaw.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/ulaw.c', [
-	'psf-\>write_float', 'psf\-\>write_double',
-	'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/alaw.c."
-remove_funcs_and_protos_from_file ('src/alaw.c', [
-	'alaw_read_alaw2f', 'alaw_read_alaw2d',
-	'alaw_write_f2alaw', 'alaw_write_d2alaw',
-	'alaw2f_array', 'alaw2d_array', 'f2alaw_array', 'd2alaw_array'
-	])
-
-remove_includes_from_file ('src/alaw.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/alaw.c', [
-	'psf-\>write_float', 'psf\-\>write_double',
-	'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/gsm610.c."
-remove_funcs_and_protos_from_file ('src/gsm610.c', [
-	'gsm610_read_f', 'gsm610_read_d', 'gsm610_write_f', 'gsm610_write_d'
-	])
-
-remove_includes_from_file ('src/gsm610.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/gsm610.c', [
-	'psf-\>write_float', 'psf\-\>write_double',
-	'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/float32.c."
-
-# string_replace_in_file ('src/float32.c', '"float_cast.h"', '<math.h>')
-remove_funcs_from_file ('src/float32.c', [ 'float32_init'	])
-
-remove_funcs_and_protos_from_file ('src/float32.c', [
-	'host_read_f2s', 'host_read_f2i', 'host_read_f', 'host_read_f2d', 
-	'host_write_s2f', 'host_write_i2f', 'host_write_f', 'host_write_d2f', 
-	'f2s_array', 'f2i_array', 'f2d_array', 's2f_array', 'i2f_array', 'd2f_array', 
-	'float32_peak_update', 
-	'replace_read_f2s', 'replace_read_f2i', 'replace_read_f', 'replace_read_f2d', 
-	'replace_write_s2f', 'replace_write_i2f', 'replace_write_f', 'replace_write_d2f', 
-	'bf2f_array', 'f2bf_array', 
-	'float32_get_capability', 
-	])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/double64.c."
-remove_funcs_from_file ('src/double64.c', [ 'double64_init'	])
-
-remove_funcs_and_protos_from_file ('src/double64.c', [
-	'host_read_d2s', 'host_read_d2i', 'host_read_d2f', 'host_read_d',
-	'host_write_s2d', 'host_write_i2d', 'host_write_f2d', 'host_write_d',
-	'd2s_array', 'd2i_array', 'd2f_array',
-	's2d_array', 'i2d_array', 'f2d_array',
-	'double64_peak_update', 'double64_get_capability',
-	'replace_read_d2s', 'replace_read_d2i', 'replace_read_d2f', 'replace_read_d',
-	'replace_write_s2d', 'replace_write_i2d', 'replace_write_f2d', 'replace_write_d',
-	'd2bd_read', 'bd2d_write'
-	])
-
-#----------------------------------------------------------------------------
-
-print "Hacking test programs."
-delete_files ([ 'tests/dwvw_test.c', 'tests/floating_point_test.c', 
-	'tests/dft_cmp.c', 'tests/peak_chunk_test.c',
-	'tests/scale_clip_test.tpl', 'tests/scale_clip_test.def'
-	])
-
-remove_comment_start_end ('tests/write_read_test.def', '/* Lite remove start */', '/* Lite remove end */')
-remove_comment_start_end ('tests/write_read_test.tpl', '/* Lite remove start */', '/* Lite remove end */')
-
-remove_comment_start_end ('tests/Makefile.am', '# Lite remove start', '# Lite remove end')
-
-remove_strings_from_file ('tests/Makefile.am', [ 
-	'scale_clip_test.tpl', 'scale_clip_test.def',
-	'\n\t./dwvw_test',
-	'\n\t./floating_point_test', '\n\t./scale_clip_test', 
-	'\n\t./peak_chunk_test aiff', '\n\t./peak_chunk_test wav',
-	'\n\t./command_test norm', '\n\t./command_test peak',
-	'\n\t./lossy_comp_test wav_ima', '\n\t./lossy_comp_test wav_msadpcm',
-	'\n\t./lossy_comp_test au_g721', '\n\t./lossy_comp_test au_g723',
-	'\n\t./lossy_comp_test vox_adpcm', 
-	'\n\t./lossy_comp_test w64_ima', '\n\t./lossy_comp_test w64_msadpcm',
-	'peak_chunk_test', 'dwvw_test', 'floating_point_test', 'scale_clip_test',
-	
-	'paf-tests', 'svx-tests', 'nist-tests', 'ircam-tests', 'voc-tests',
-	'mat4-tests', 'mat5-tests', 'pvf-tests', 'xi-tests', 'htk-tests',
-	'sds-tests'
-	])
-
-remove_comment_start_end ('tests/pcm_test.c', '/* Lite remove start */', '/* Lite remove end */')
-remove_funcs_and_protos_from_file ('tests/pcm_test.c', [
-	'pcm_test_float', 'pcm_test_double' 
-	])
-
-remove_comment_start_end ('tests/lossy_comp_test.c', '/* Lite remove start */', '/* Lite remove end */')
-remove_funcs_and_protos_from_file ('tests/lossy_comp_test.c', [
-	'lcomp_test_float', 'lcomp_test_double', 'sdlcomp_test_float', 'sdlcomp_test_double',
-	'smoothed_diff_float', 'smoothed_diff_double'
-	])
-
-remove_comment_start_end ('tests/multi_file_test.c', '/* Lite remove start */', '/* Lite remove end */')
-
-remove_strings_from_file ('tests/stdio_test.c', [ 
-	'"paf",', '"svx",', '"nist",', '"ircam",', '"voc",', '"mat4",', '"mat5",', '"pvf",'
-	])
-
-remove_comment_start_end ('tests/pipe_test.c', '/* Lite remove start */', '/* Lite remove end */')
-
-#----------------------------------------------------------------------------
-
-print "Fixing configure.ac file."
-fix_configure_ac_file ('configure.ac')
-
-print "Building and testing source."
-	# Try --disable-shared --disable-gcc-opt
-if os.system ("./reconfigure.mk && ./configure --disable-shared --disable-gcc-opt && make check"):
-	os.system ('PS1="FIX > " bash --norc')
-	sys.exit (1)
-
-print "Making distcheck"
-if os.system ("make distcheck"):
-	os.system ('PS1="FIX > " bash --norc')
-	sys.exit (1)
-
-print "Copying tarball"
-if os.system ("cp %s.tar.gz %s" % (lite_version, source_dir)):
-	print "??? %s.tar.gz ???" % lite_version
-	os.system ('PS1="FIX > " bash --norc')
-	sys.exit (1)
-
-os.chdir (source_dir)
-
-os.system ("rm -rf /tmp/%s" % lite_version)
-
-print "Done."
diff --git a/libs/libsndfile/man/Makefile.am b/libs/libsndfile/man/Makefile.am
deleted file mode 100644
index 3f5d9efdc4..0000000000
--- a/libs/libsndfile/man/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-man_MANS = sndfile-info.1 sndfile-play.1 sndfile-convert.1 sndfile-cmp.1 \
-			sndfile-metadata-get.1 sndfile-metadata-set.1 sndfile-concat.1 \
-			sndfile-interleave.1 sndfile-deinterleave.1
-
-EXTRA_DIST = sndfile-info.1 sndfile-play.1 sndfile-convert.1 sndfile-cmp.1 \
-			sndfile-metadata-get.1 sndfile-concat.1 sndfile-interleave.1
-
-# Same manpage for both programs.
-sndfile-metadata-set.1 : sndfile-metadata-get.1
-	$(LN_S) $(srcdir)/sndfile-metadata-get.1 $@
-
-sndfile-deinterleave.1 : sndfile-interleave.1
-	$(LN_S) $(srcdir)/sndfile-interleave.1 $@
diff --git a/libs/libsndfile/man/sndfile-cmp.1 b/libs/libsndfile/man/sndfile-cmp.1
deleted file mode 100644
index 30870bdfc3..0000000000
--- a/libs/libsndfile/man/sndfile-cmp.1
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-CMP 1 "October 5, 2009"
-.SH NAME
-sndfile-cmp \- compares two audio files
-.SH SYNOPSIS
-.B sndfile-cmp
-.RI "file1 file2"
-.SH DESCRIPTION
-sndfile-cmp compares the audio data of two sound files. In particular most
-differences in the audio file header, particularly metadata like string info,
-are completely ignored.
-
-sndfile-cmp does its work using libsndfile
-(http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-concat.1 b/libs/libsndfile/man/sndfile-concat.1
deleted file mode 100644
index 1d95765f6c..0000000000
--- a/libs/libsndfile/man/sndfile-concat.1
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-CONCAT 1 "December 9, 2009"
-.SH NAME
-sndfile-concat \- concatenates two or more audio files
-.SH SYNOPSIS
-.B sndfile-concat
-.RI "infile1 infile2 .... outfile"
-.SH DESCRIPTION
-sndfile-concat generates a new output file by concatenating two or more input
-files. The format of the output file is the same as the format of the input
-file.
-
-sndfile-concat does its work using libsndfile
-(http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-convert.1 b/libs/libsndfile/man/sndfile-convert.1
deleted file mode 100644
index 583c9562c9..0000000000
--- a/libs/libsndfile/man/sndfile-convert.1
+++ /dev/null
@@ -1,22 +0,0 @@
-.TH SNDFILE-CONVERT 1 "October 09, 2002"
-.SH NAME
-sndfile-convert \- convert a sound files from one format to another
-.SH SYNOPSIS
-.B sndfile-convert
-.RI "[encoding] input_file output_file"
-.LP
-.B sndfile-convert
-.RI --help
-.SH DESCRIPTION
-sndfile-convert converts sound files from one format to another using
-libsndfile (http://www.mega-nerd.com/libsndfile/) to read and write
-the data.
-.LP
-The format of the output file is determined by the filename extension
-of the output file.
-.LP
-The optional encoding parameter allows setting of the data encoding for
-the output file. Run "sndfile\-convert \-\-help" for more information.
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-info.1 b/libs/libsndfile/man/sndfile-info.1
deleted file mode 100644
index b66875852d..0000000000
--- a/libs/libsndfile/man/sndfile-info.1
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-INFO 1 "July 28, 2002"
-.SH NAME
-sndfile-info \- display information about a sound file
-.SH SYNOPSIS
-.B sndfile-info
-.RI file
-.SH DESCRIPTION
-sndfile-info will display basic information about a sound file such as
-its format, its sample rate, and the number of channels. This information
-is obtained using libsndfile (http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was originally written by Joshua Haberman 
-<joshua@debian.org>, for the Debian GNU/Linux system (but may be used by 
-others). Further additions have been made by Erik de Castro Lopo 
-<erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-interleave.1 b/libs/libsndfile/man/sndfile-interleave.1
deleted file mode 100644
index 26ca345205..0000000000
--- a/libs/libsndfile/man/sndfile-interleave.1
+++ /dev/null
@@ -1,23 +0,0 @@
-.TH SNDFILE-INTERLEAVE 1 "December 14, 2009"
-.SH NAME
-sndfile-interleave \- convert multiple single channel files into a multi-channel file
-.br
-sndfile-deinterleave \- split a multi-channel into multiple single channel files
-.SH SYNOPSIS
-.B sndfile-interleave
-.RI "<input 1> <input 2> ... -o <output file>"
-.br
-.B sndfile-deinterleave
-.RI "filename"
-
-.SH DESCRIPTION
-sndfile-interleave and sndfile-deinterleave use libsndfile
-(http://www.mega-nerd.com/libsndfile/) to convert back and forth between multiple
-single channel files and a single multi-channel sound file.
-
-Run "sndfile\-interleave \-\-help" or "sndfile\-deinterleave \-\-help" for
-more information
-
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-metadata-get.1 b/libs/libsndfile/man/sndfile-metadata-get.1
deleted file mode 100644
index b97560ea39..0000000000
--- a/libs/libsndfile/man/sndfile-metadata-get.1
+++ /dev/null
@@ -1,26 +0,0 @@
-.TH SNDFILE-METADATA-GET 1 "October 6, 2009"
-.SH NAME
-sndfile-metadata-get \- retrieve metadata from a sound file
-.br
-sndfile-metadata-set \- set metadata in a sound file
-.SH SYNOPSIS
-.B sndfile-metadata-get
-.RI "[options] file"
-.br
-.B sndfile-metadata-set
-.RI "[options] file"
-.br
-.B sndfile-metadata-set
-.RI "[options] input-file output-file"
-
-.SH DESCRIPTION
-sndfile-metadata-get and sndfile-metadata-set use libsndfile
-(http://www.mega-nerd.com/libsndfile/) to retrieve metadata from or set metadata
-in a sound file.
-
-Run "sndfile\-metadata\-get \-\-help" or "sndfile\-metadata\-set \-\-help" for
-more information
-
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-play.1 b/libs/libsndfile/man/sndfile-play.1
deleted file mode 100644
index 0196461c19..0000000000
--- a/libs/libsndfile/man/sndfile-play.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.de EX
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH SNDFILE-PLAY 1 "July 28, 2002"
-.SH NAME
-sndfile-play \- play a sound file
-.SH SYNOPSIS
-.B sndfile-play
-.RI file
-.SH DESCRIPTION
-sndfile-play plays the specified sound file using :
-.EX
-ALSA on Linux
-/dev/dsp on systems supporting OSS (including Linux)
-/dev/audio on Sun Solaris
-CoreAudio on Apple MacOSX
-waveOut on Microsoft Win32
-.EE
-sndfile-play uses libsndfile (http://www.mega-nerd.com/libsndfile/)
-to read the file.
-.SH AUTHOR
-This manual page was originally written by Joshua Haberman 
-<joshua@debian.org>, for the Debian GNU/Linux system (but may be used by 
-others). Further additions have been made by Erik de Castro Lopo 
-<erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/programs/Makefile.am b/libs/libsndfile/programs/Makefile.am
deleted file mode 100644
index 81495539b3..0000000000
--- a/libs/libsndfile/programs/Makefile.am
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-bin_PROGRAMS = sndfile-info sndfile-play sndfile-convert sndfile-cmp \
-				sndfile-metadata-set sndfile-metadata-get sndfile-interleave \
-				sndfile-deinterleave sndfile-concat sndfile-salvage
-
-OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@
-OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
-
-AM_CPPFLAGS = -I$(top_srcdir)/src $(OS_SPECIFIC_CFLAGS)
-
-CLEANFILES = *~ sndfile-*.exe
-
-# This is the BeOS version of sndfile-play. It needs to be compiled with the C++
-# compiler.
-EXTRA_DIST = sndfile-play-beos.cpp test-sndfile-metadata-set.py
-
-sndfile_info_SOURCES = sndfile-info.c common.c common.h
-sndfile_info_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_play_SOURCES = sndfile-play.c common.c common.h
-sndfile_play_LDADD = $(top_builddir)/src/libsndfile.la $(OS_SPECIFIC_LINKS) $(ALSA_LIBS) $(SNDIO_LIBS)
-
-sndfile_convert_SOURCES = sndfile-convert.c common.c common.h
-sndfile_convert_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_cmp_SOURCES = sndfile-cmp.c common.c common.h
-sndfile_cmp_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_metadata_set_SOURCES = sndfile-metadata-set.c common.c common.h
-sndfile_metadata_set_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_metadata_get_SOURCES = sndfile-metadata-get.c common.c common.h
-sndfile_metadata_get_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_interleave_SOURCES = sndfile-interleave.c common.c common.h
-sndfile_interleave_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_deinterleave_SOURCES = sndfile-deinterleave.c common.c common.h
-sndfile_deinterleave_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_concat_SOURCES = sndfile-concat.c common.c common.h
-sndfile_concat_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_salvage_SOURCES = sndfile-salvage.c common.c common.h
-sndfile_salvage_LDADD = $(top_builddir)/src/libsndfile.la
-
diff --git a/libs/libsndfile/programs/common.c b/libs/libsndfile/programs/common.c
deleted file mode 100644
index 2811536f3f..0000000000
--- a/libs/libsndfile/programs/common.c
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN	4096
-
-#define	MIN(x, y)	((x) < (y) ? (x) : (y))
-
-void
-sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize)
-{	static double	data [BUFFER_LEN], max ;
-	int		frames, readcount, k ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ;
-
-	if (!normalize && max < 1.0)
-	{	while (readcount > 0)
-		{	readcount = sf_readf_double (infile, data, frames) ;
-			sf_writef_double (outfile, data, readcount) ;
-			} ;
-		}
-	else
-	{	sf_command (infile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-		while (readcount > 0)
-		{	readcount = sf_readf_double (infile, data, frames) ;
-			for (k = 0 ; k < readcount * channels ; k++)
-				data [k] /= max ;
-			sf_writef_double (outfile, data, readcount) ;
-			} ;
-		} ;
-
-	return ;
-} /* sfe_copy_data_fp */
-
-void
-sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels)
-{	static int	data [BUFFER_LEN] ;
-	int		frames, readcount ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	while (readcount > 0)
-	{	readcount = sf_readf_int (infile, data, frames) ;
-		sf_writef_int (outfile, data, readcount) ;
-		} ;
-
-	return ;
-} /* sfe_copy_data_int */
-
-/*==============================================================================
-*/
-
-static int
-merge_broadcast_info (SNDFILE * infile, SNDFILE * outfile, int format, const METADATA_INFO * info)
-{	SF_BROADCAST_INFO_2K binfo ;
-	int infileminor ;
-
-	memset (&binfo, 0, sizeof (binfo)) ;
-
-	if ((SF_FORMAT_TYPEMASK & format) != SF_FORMAT_WAV)
-	{	printf ("Error : This is not a WAV file and hence broadcast info cannot be added to it.\n\n") ;
-		return 1 ;
-		} ;
-
-	infileminor = SF_FORMAT_SUBMASK & format ;
-
-	switch (infileminor)
-	{	case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-			break ;
-
-		default :
-			printf (
-				"Warning : The EBU Technical Recommendation R68-2000 states that the only\n"
-				"          allowed encodings are Linear PCM and MPEG3. This file is not in\n"
-				"          the right format.\n\n"
-				) ;
-			break ;
-		} ;
-
-	if (sf_command (infile, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-	{	if (infile == outfile)
-		{	printf (
-				"Error : Attempting in-place broadcast info update, but file does not\n"
-				"        have a 'bext' chunk to modify. The solution is to specify both\n"
-				"        input and output files on the command line.\n\n"
-				) ;
-			return 1 ;
-			} ;
-		} ;
-
-#define REPLACE_IF_NEW(x) \
-		if (info->x != NULL) \
-		{	memset (binfo.x, 0, sizeof (binfo.x)) ; \
-			memcpy (binfo.x, info->x, MIN (strlen (info->x), sizeof (binfo.x))) ; \
-			} ;
-
-	REPLACE_IF_NEW (description) ;
-	REPLACE_IF_NEW (originator) ;
-	REPLACE_IF_NEW (originator_reference) ;
-	REPLACE_IF_NEW (origination_date) ;
-	REPLACE_IF_NEW (origination_time) ;
-	REPLACE_IF_NEW (umid) ;
-
-	/* Special case for Time Ref. */
-	if (info->time_ref != NULL)
-	{	uint64_t ts = atoll (info->time_ref) ;
-
-		binfo.time_reference_high = (ts >> 32) ;
-		binfo.time_reference_low = (ts & 0xffffffff) ;
-		} ;
-
-	/* Special case for coding_history because we may want to append. */
-	if (info->coding_history != NULL)
-	{	if (info->coding_hist_append)
-		{	int slen = strlen (binfo.coding_history) ;
-
-			while (slen > 1 && isspace (binfo.coding_history [slen - 1]))
-				slen -- ;
-
-			memcpy (binfo.coding_history + slen, info->coding_history, sizeof (binfo.coding_history) - slen) ;
-			}
-		else
-		{	size_t slen = MIN (strlen (info->coding_history), sizeof (binfo.coding_history)) ;
-
-			memset (binfo.coding_history, 0, sizeof (binfo.coding_history)) ;
-			memcpy (binfo.coding_history, info->coding_history, slen) ;
-			binfo.coding_history_size = slen ;
-			} ;
-		} ;
-
-	if (sf_command (outfile, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-	{	printf ("Error : Setting of broadcast info chunks failed.\n\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* merge_broadcast_info*/
-
-static void
-update_strings (SNDFILE * outfile, const METADATA_INFO * info)
-{
-	if (info->title != NULL)
-		sf_set_string (outfile, SF_STR_TITLE, info->title) ;
-
-	if (info->copyright != NULL)
-		sf_set_string (outfile, SF_STR_COPYRIGHT, info->copyright) ;
-
-	if (info->artist != NULL)
-		sf_set_string (outfile, SF_STR_ARTIST, info->artist) ;
-
-	if (info->comment != NULL)
-		sf_set_string (outfile, SF_STR_COMMENT, info->comment) ;
-
-	if (info->date != NULL)
-		sf_set_string (outfile, SF_STR_DATE, info->date) ;
-
-	if (info->album != NULL)
-		sf_set_string (outfile, SF_STR_ALBUM, info->album) ;
-
-	if (info->license != NULL)
-		sf_set_string (outfile, SF_STR_LICENSE, info->license) ;
-
-} /* update_strings */
-
-
-
-void
-sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info)
-{	SNDFILE *infile = NULL, *outfile = NULL ;
-	SF_INFO sfinfo ;
-	METADATA_INFO tmpinfo ;
-	int error_code = 0 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	memset (&tmpinfo, 0, sizeof (tmpinfo)) ;
-
-	if (filenames [1] == NULL)
-		infile = outfile = sf_open (filenames [0], SFM_RDWR, &sfinfo) ;
-	else
-	{	infile = sf_open (filenames [0], SFM_READ, &sfinfo) ;
-
-		/* Output must be WAV. */
-		sfinfo.format = SF_FORMAT_WAV | (SF_FORMAT_SUBMASK & sfinfo.format) ;
-		outfile = sf_open (filenames [1], SFM_WRITE, &sfinfo) ;
-		} ;
-
-	if (infile == NULL)
-	{	printf ("Error : Not able to open input file '%s' : %s\n", filenames [0], sf_strerror (infile)) ;
-		error_code = 1 ;
-		goto cleanup_exit ;
-		} ;
-
-	if (outfile == NULL)
-	{	printf ("Error : Not able to open output file '%s' : %s\n", filenames [1], sf_strerror (outfile)) ;
-		error_code = 1 ;
-		goto cleanup_exit ;
-		} ;
-
-	if (info->has_bext_fields && merge_broadcast_info (infile, outfile, sfinfo.format, info))
-	{	error_code = 1 ;
-		goto cleanup_exit ;
-		} ;
-
-	if (infile != outfile)
-	{	int infileminor = SF_FORMAT_SUBMASK & sfinfo.format ;
-
-		/* If the input file is not the same as the output file, copy the data. */
-		if ((infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT))
-			sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) ;
-		else
-			sfe_copy_data_int (outfile, infile, sfinfo.channels) ;
-		} ;
-
-	update_strings (outfile, info) ;
-
-cleanup_exit :
-
-	if (outfile != NULL && outfile != infile)
-		sf_close (outfile) ;
-
-	if (infile != NULL)
-		sf_close (infile) ;
-
-	if (error_code)
-		exit (error_code) ;
-
-	return ;
-} /* sfe_apply_metadata_changes */
-
-/*==============================================================================
-*/
-
-typedef struct
-{	const char	*ext ;
-	int			len ;
-	int			format ;
-} OUTPUT_FORMAT_MAP ;
-
-static OUTPUT_FORMAT_MAP format_map [] =
-{
-	{	"aif",		3,	SF_FORMAT_AIFF	},
-	{	"wav", 		0,	SF_FORMAT_WAV	},
-	{	"au",		0,	SF_FORMAT_AU	},
-	{	"caf",		0,	SF_FORMAT_CAF	},
-	{	"flac",		0,	SF_FORMAT_FLAC	},
-	{	"snd",		0,	SF_FORMAT_AU	},
-	{	"svx",		0,	SF_FORMAT_SVX	},
-	{	"paf",		0,	SF_ENDIAN_BIG | SF_FORMAT_PAF	},
-	{	"fap",		0,	SF_ENDIAN_LITTLE | SF_FORMAT_PAF	},
-	{	"gsm",		0,	SF_FORMAT_RAW	},
-	{	"nist", 	0,	SF_FORMAT_NIST	},
-	{	"htk",		0,	SF_FORMAT_HTK	},
-	{	"ircam",	0,	SF_FORMAT_IRCAM	},
-	{	"sf",		0, 	SF_FORMAT_IRCAM	},
-	{	"voc",		0, 	SF_FORMAT_VOC	},
-	{	"w64", 		0, 	SF_FORMAT_W64	},
-	{	"raw",		0,	SF_FORMAT_RAW	},
-	{	"mat4", 	0,	SF_FORMAT_MAT4	},
-	{	"mat5", 	0, 	SF_FORMAT_MAT5 	},
-	{	"mat",		0, 	SF_FORMAT_MAT4 	},
-	{	"pvf",		0, 	SF_FORMAT_PVF 	},
-	{	"sds",		0, 	SF_FORMAT_SDS 	},
-	{	"sd2",		0, 	SF_FORMAT_SD2 	},
-	{	"vox",		0, 	SF_FORMAT_RAW 	},
-	{	"xi",		0, 	SF_FORMAT_XI 	},
-	{	"wve",		0,	SF_FORMAT_WVE	},
-	{	"oga",		0,	SF_FORMAT_OGG	},
-	{	"ogg",		0,	SF_FORMAT_OGG	},
-	{	"mpc",		0,	SF_FORMAT_MPC2K	},
-	{	"rf64",		0,	SF_FORMAT_RF64	},
-} ; /* format_map */
-
-int
-sfe_file_type_of_ext (const char *str, int format)
-{	char	buffer [16], *cptr ;
-	int		k ;
-
-	format &= SF_FORMAT_SUBMASK ;
-
-	if ((cptr = strrchr (str, '.')) == NULL)
-		return 0 ;
-
-	strncpy (buffer, cptr + 1, 15) ;
-	buffer [15] = 0 ;
-
-	for (k = 0 ; buffer [k] ; k++)
-		buffer [k] = tolower ((buffer [k])) ;
-
-	if (strcmp (buffer, "gsm") == 0)
-		return SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-
-	if (strcmp (buffer, "vox") == 0)
-		return SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-
-	for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-	{	if (format_map [k].len > 0 && strncmp (buffer, format_map [k].ext, format_map [k].len) == 0)
-			return format_map [k].format | format ;
-		else if (strcmp (buffer, format_map [k].ext) == 0)
-			return format_map [k].format | format ;
-		} ;
-
-	/* Default if all the above fails. */
-	return (SF_FORMAT_WAV | SF_FORMAT_PCM_24) ;
-} /* sfe_file_type_of_ext */
-
-void
-sfe_dump_format_map (void)
-{	SF_FORMAT_INFO	info ;
-	int k ;
-
-	for (k = 0 ; k < ARRAY_LEN (format_map) ; k++)
-	{	info.format = format_map [k].format ;
-		sf_command (NULL, SFC_GET_FORMAT_INFO, &info, sizeof (info)) ;
-		printf ("        %-10s : %s\n", format_map [k].ext, info.name == NULL ? "????" : info.name) ;
-		} ;
-
-} /* sfe_dump_format_map */
-
-const char *
-program_name (const char * argv0)
-{	const char * tmp ;
-
-	tmp = strrchr (argv0, '/') ;
-	argv0 = tmp ? tmp + 1 : argv0 ;
-
-	tmp = strrchr (argv0, '/') ;
-	argv0 = tmp ? tmp + 1 : argv0 ;
-
-	/* Remove leading libtool name mangling. */
-	if (strstr (argv0, "lt-") == argv0)
-		return argv0 + 3 ;
-
-	return argv0 ;
-} /* program_name */
-
-const char *
-sfe_endian_name (int format)
-{
-	switch (format & SF_FORMAT_ENDMASK)
-	{	case SF_ENDIAN_FILE : return "file" ;
-		case SF_ENDIAN_LITTLE : return "little" ;
-		case SF_ENDIAN_BIG : return "big" ;
-		case SF_ENDIAN_CPU : return "cpu" ;
-		default : break ;
-		} ;
-
-	return "unknown" ;
-} /* sfe_endian_name */
-
-const char *
-sfe_container_name (int format)
-{
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_WAV : return "WAV" ;
-		case SF_FORMAT_AIFF : return "AIFF" ;
-		case SF_FORMAT_AU : return "AU" ;
-		case SF_FORMAT_RAW : return "RAW" ;
-		case SF_FORMAT_PAF : return "PAF" ;
-		case SF_FORMAT_SVX : return "SVX" ;
-		case SF_FORMAT_NIST : return "NIST" ;
-		case SF_FORMAT_VOC : return "VOC" ;
-		case SF_FORMAT_IRCAM : return "IRCAM" ;
-		case SF_FORMAT_W64 : return "W64" ;
-		case SF_FORMAT_MAT4 : return "MAT4" ;
-		case SF_FORMAT_MAT5 : return "MAT5" ;
-		case SF_FORMAT_PVF : return "PVF" ;
-		case SF_FORMAT_XI : return "XI" ;
-		case SF_FORMAT_HTK : return "HTK" ;
-		case SF_FORMAT_SDS : return "SDS" ;
-		case SF_FORMAT_AVR : return "AVR" ;
-		case SF_FORMAT_WAVEX : return "WAVEX" ;
-		case SF_FORMAT_SD2 : return "SD2" ;
-		case SF_FORMAT_FLAC : return "FLAC" ;
-		case SF_FORMAT_CAF : return "CAF" ;
-		case SF_FORMAT_WVE : return "WVE" ;
-		case SF_FORMAT_OGG : return "OGG" ;
-		case SF_FORMAT_MPC2K : return "MPC2K" ;
-		case SF_FORMAT_RF64 : return "RF64" ;
-		default : break ;
-		} ;
-
-	return "unknown" ;
-} /* sfe_container_name */
-
-const char *
-sfe_codec_name (int format)
-{
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_S8 : return "signed 8 bit PCM" ;
-		case SF_FORMAT_PCM_16 : return "16 bit PCM" ;
-		case SF_FORMAT_PCM_24 : return "24 bit PCM" ;
-		case SF_FORMAT_PCM_32 : return "32 bit PCM" ;
-		case SF_FORMAT_PCM_U8 : return "unsigned 8 bit PCM" ;
-		case SF_FORMAT_FLOAT : return "32 bit float" ;
-		case SF_FORMAT_DOUBLE : return "64 bit double" ;
-		case SF_FORMAT_ULAW : return "u-law" ;
-		case SF_FORMAT_ALAW : return "a-law" ;
-		case SF_FORMAT_IMA_ADPCM : return "IMA ADPCM" ;
-		case SF_FORMAT_MS_ADPCM : return "MS ADPCM" ;
-		case SF_FORMAT_GSM610 : return "gsm610" ;
-		case SF_FORMAT_VOX_ADPCM : return "Vox ADPCM" ;
-		case SF_FORMAT_G721_32 : return "g721 32kbps" ;
-		case SF_FORMAT_G723_24 : return "g723 24kbps" ;
-		case SF_FORMAT_G723_40 : return "g723 40kbps" ;
-		case SF_FORMAT_DWVW_12 : return "12 bit DWVW" ;
-		case SF_FORMAT_DWVW_16 : return "16 bit DWVW" ;
-		case SF_FORMAT_DWVW_24 : return "14 bit DWVW" ;
-		case SF_FORMAT_DWVW_N : return "DWVW" ;
-		case SF_FORMAT_DPCM_8 : return "8 bit DPCM" ;
-		case SF_FORMAT_DPCM_16 : return "16 bit DPCM" ;
-		case SF_FORMAT_VORBIS : return "Vorbis" ;
-		case SF_FORMAT_ALAC_16 : return "16 bit ALAC" ;
-		case SF_FORMAT_ALAC_20 : return "20 bit ALAC" ;
-		case SF_FORMAT_ALAC_24 : return "24 bit ALAC" ;
-		case SF_FORMAT_ALAC_32 : return "32 bit ALAC" ;
-		default : break ;
-		} ;
-	return "unknown" ;
-} /* sfe_codec_name */
-
diff --git a/libs/libsndfile/programs/common.h b/libs/libsndfile/programs/common.h
deleted file mode 100644
index eda2d7d743..0000000000
--- a/libs/libsndfile/programs/common.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-#define	ARRAY_LEN(x)	((int) (sizeof (x) / sizeof (x [0])))
-#define	MAX(a, b)		((a) > (b) ? (a) : (b))
-
-typedef struct
-{	const char * title ;
-	const char * copyright ;
-	const char * artist ;
-	const char * comment ;
-	const char * date ;
-	const char * album ;
-	const char * license ;
-
-
-	/* Stuff to go in the 'bext' chunk of WAV files. */
-	int has_bext_fields ;
-	int coding_hist_append ;
-
-	const char * description ;
-	const char * originator ;
-	const char * originator_reference ;
-	const char * origination_date ;
-	const char * origination_time ;
-	const char * umid ;
-	const char * coding_history ;
-	const char * time_ref ;
-} METADATA_INFO ;
-
-typedef SF_BROADCAST_INFO_VAR (2048) SF_BROADCAST_INFO_2K ;
-
-void sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info) ;
-
-void sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ;
-
-void sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-int sfe_file_type_of_ext (const char *filename, int format) ;
-
-void sfe_dump_format_map (void) ;
-
-const char * program_name (const char * argv0) ;
-
-const char * sfe_endian_name (int format) ;
-const char * sfe_container_name (int format) ;
-const char * sfe_codec_name (int format) ;
-
diff --git a/libs/libsndfile/programs/sndfile-cmp.c b/libs/libsndfile/programs/sndfile-cmp.c
deleted file mode 100644
index 121d25a629..0000000000
--- a/libs/libsndfile/programs/sndfile-cmp.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008 Conrad Parker <conrad@metadecks.org>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-/* Length of comparison data buffers in units of items */
-#define BUFLEN 65536
-
-static const char * progname = NULL ;
-static char * filename1 = NULL, * filename2 = NULL ;
-
-static int
-comparison_error (const char * what, sf_count_t frame_offset)
-{	char buffer [128] = "" ;
-
-	if (frame_offset >= 0)
-		snprintf (buffer, sizeof (buffer), " (at frame offset %" PRId64 ")", frame_offset) ;
-
-	printf ("%s: %s of files %s and %s differ%s.\n", progname, what, filename1, filename2, buffer) ;
-	return 1 ;
-} /* comparison_error */
-
-static int
-compare (void)
-{
-	double buf1 [BUFLEN], buf2 [BUFLEN] ;
-	SF_INFO sfinfo1, sfinfo2 ;
-	SNDFILE * sf1 = NULL, * sf2 = NULL ;
-	sf_count_t items, i, nread1, nread2, offset = 0 ;
-	int retval = 0 ;
-
-	memset (&sfinfo1, 0, sizeof (SF_INFO)) ;
-	sf1 = sf_open (filename1, SFM_READ, &sfinfo1) ;
-	if (sf1 == NULL)
-	{	printf ("Error opening %s.\n", filename1) ;
-		retval = 1 ;
-		goto out ;
-		} ;
-
-	memset (&sfinfo2, 0, sizeof (SF_INFO)) ;
-	sf2 = sf_open (filename2, SFM_READ, &sfinfo2) ;
-	if (sf2 == NULL)
-	{	printf ("Error opening %s.\n", filename2) ;
-		retval = 1 ;
-		goto out ;
-		} ;
-
-	if (sfinfo1.samplerate != sfinfo2.samplerate)
-	{	retval = comparison_error ("Samplerates", -1) ;
-		goto out ;
-		} ;
-
-	if (sfinfo1.channels != sfinfo2.channels)
-	{	retval = comparison_error ("Number of channels", -1) ;
-		goto out ;
-		} ;
-
-	/* Calculate the framecount that will fit in our data buffers */
-	items = BUFLEN / sfinfo1.channels ;
-
-	while ((nread1 = sf_readf_double (sf1, buf1, items)) > 0)
-	{	nread2 = sf_readf_double (sf2, buf2, nread1) ;
-		if (nread2 != nread1)
-		{	retval = comparison_error ("PCM data lengths", -1) ;
-			goto out ;
-			} ;
-		for (i = 0 ; i < nread1 * sfinfo1.channels ; i++)
-		{	if (buf1 [i] != buf2 [i])
-			{	retval = comparison_error ("PCM data", offset + i / sfinfo1.channels) ;
-				goto out ;
-				} ;
-			} ;
-		offset += nread1 ;
-		} ;
-
-	if ((nread2 = sf_readf_double (sf2, buf2, items)) != 0)
-	{	retval = comparison_error ("PCM data lengths", -1) ;
-		goto out ;
-		} ;
-
-out :
-	sf_close (sf1) ;
-	sf_close (sf2) ;
-
-	return retval ;
-} /* compare */
-
-static void
-print_version (void)
-{	char buffer [256] ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-	printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-static void
-usage_exit (void)
-{
-	print_version () ;
-
-	printf ("Usage : %s <filename> <filename>\n", progname) ;
-	printf ("	Compare the PCM data of two sound files.\n\n") ;
-	exit (0) ;
-} /* usage_exit */
-
-int
-main (int argc, char *argv [])
-{
-	progname = program_name (argv [0]) ;
-
-	if (argc != 3)
-	{	usage_exit () ;
-		return 1 ;
-		} ;
-
-	filename1 = argv [argc - 2] ;
-	filename2 = argv [argc - 1] ;
-
-	if (strcmp (filename1, filename2) == 0)
-	{	printf ("Error : Input filenames are the same.\n\n") ;
-		usage_exit () ;
-		return 1 ;
-		} ;
-
-	return compare () ;
-} /* main */
diff --git a/libs/libsndfile/programs/sndfile-concat.c b/libs/libsndfile/programs/sndfile-concat.c
deleted file mode 100644
index ef5312b693..0000000000
--- a/libs/libsndfile/programs/sndfile-concat.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	<sndfile.h>
-
-#include	"common.h"
-
-#define		BUFFER_LEN	(1 << 16)
-
-
-static void concat_data_fp (SNDFILE *wfile, SNDFILE *rofile, int channels) ;
-static void concat_data_int (SNDFILE *wfile, SNDFILE *rofile, int channels) ;
-
-static void
-usage_exit (const char *progname)
-{
-	printf ("\nUsage : %s <infile1> <infile2>  ... <outfile>\n\n", progname) ;
-	puts (
-		"    Create a new output file <outfile> containing the concatenated\n"
-		"    audio data from froms <infile1> <infile2> ....\n"
-		"\n"
-		"    The joined file will be encoded in the same format as the data\n"
-		"    in infile1, with all the data in subsequent files automatically\n"
-		"    converted to the correct encoding.\n"
-		"\n"
-		"    The only restriction is that the two files must have the same\n"
-		"    number of channels.\n"
-		) ;
-
-	exit (0) ;
-} /* usage_exit */
-
-int
-main (int argc, char *argv [])
-{	const char	*progname, *outfilename ;
-	SNDFILE		*outfile, **infiles ;
-	SF_INFO		sfinfo_out, sfinfo_in ;
-	void 		(*func) (SNDFILE*, SNDFILE*, int) ;
-	int			k ;
-
-	progname = program_name (argv [0]) ;
-
-	if (argc < 4)
-		usage_exit (progname) ;
-
-	argv ++ ;
-	argc -- ;
-
-	argc -- ;
-	outfilename = argv [argc] ;
-
-	if ((infiles = calloc (argc, sizeof (SNDFILE*))) == NULL)
-	{	printf ("\nError : Malloc failed.\n\n") ;
-		exit (1) ;
-		} ;
-
-	memset (&sfinfo_in, 0, sizeof (sfinfo_in)) ;
-
-	if ((infiles [0] = sf_open (argv [0], SFM_READ, &sfinfo_in)) == NULL)
-	{	printf ("\nError : failed to open file '%s'.\n\n", argv [0]) ;
-		exit (1) ;
-		} ;
-
-	sfinfo_out = sfinfo_in ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	if ((infiles [k] = sf_open (argv [k], SFM_READ, &sfinfo_in)) == NULL)
-		{	printf ("\nError : failed to open file '%s'.\n\n", argv [k]) ;
-			exit (1) ;
-			} ;
-
-		if (sfinfo_in.channels != sfinfo_out.channels)
-		{	printf ("\nError : File '%s' has %d channels (should have %d).\n\n", argv [k], sfinfo_in.channels, sfinfo_out.channels) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo_out)) == NULL)
-	{	printf ("\nError : Not able to open input file %s.\n", outfilename) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo_out.format & SF_FORMAT_SUBMASK) == SF_FORMAT_DOUBLE ||
-			(sfinfo_out.format & SF_FORMAT_SUBMASK) == SF_FORMAT_FLOAT)
-		func = concat_data_fp ;
-	else
-		func = concat_data_int ;
-
-	for (k = 0 ; k < argc ; k++)
-	{	func (outfile, infiles [k], sfinfo_out.channels) ;
-		sf_close (infiles [k]) ;
-		} ;
-
-	sf_close (outfile) ;
-
-	return 0 ;
-} /* main */
-
-static void
-concat_data_fp (SNDFILE *wfile, SNDFILE *rofile, int channels)
-{	static double	data [BUFFER_LEN] ;
-	int		frames, readcount ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	sf_seek (wfile, 0, SEEK_END) ;
-
-	while (readcount > 0)
-	{	readcount = sf_readf_double (rofile, data, frames) ;
-		sf_writef_double (wfile, data, readcount) ;
-		} ;
-
-	return ;
-} /* concat_data_fp */
-
-static void
-concat_data_int (SNDFILE *wfile, SNDFILE *rofile, int channels)
-{	static int	data [BUFFER_LEN] ;
-	int		frames, readcount ;
-
-	frames = BUFFER_LEN / channels ;
-	readcount = frames ;
-
-	sf_seek (wfile, 0, SEEK_END) ;
-
-	while (readcount > 0)
-	{	readcount = sf_readf_int (rofile, data, frames) ;
-		sf_writef_int (wfile, data, readcount) ;
-		} ;
-
-	return ;
-} /* concat_data_int */
-
diff --git a/libs/libsndfile/programs/sndfile-convert.c b/libs/libsndfile/programs/sndfile-convert.c
deleted file mode 100644
index c22cc9b16a..0000000000
--- a/libs/libsndfile/programs/sndfile-convert.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-
-typedef	struct
-{	char	*infilename, *outfilename ;
-	SF_INFO	infileinfo, outfileinfo ;
-} OptionData ;
-
-static void copy_metadata (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-static void
-usage_exit (const char *progname)
-{
-	printf ("\nUsage : %s [options] [encoding] <input file> <output file>\n", progname) ;
-	puts ("\n"
-		"    where [option] may be:\n\n"
-		"        -override-sample-rate=X  : force sample rate of input to X\n"
-		"        -endian=little           : force output file to little endian data\n"
-		"        -endian=big              : force output file to big endian data\n"
-		"        -endian=cpu              : force output file same endian-ness as the CPU\n"
-		"        -normalize               : normalize the data in the output file\n"
-		) ;
-
-	puts (
-		"    where [encoding] may be one of the following:\n\n"
-		"        -pcms8     : force the output to signed 8 bit pcm\n"
-		"        -pcmu8     : force the output to unsigned 8 bit pcm\n"
-		"        -pcm16     : force the output to 16 bit pcm\n"
-		"        -pcm24     : force the output to 24 bit pcm\n"
-		"        -pcm32     : force the output to 32 bit pcm\n"
-		"        -float32   : force the output to 32 bit floating point"
-		) ;
-	puts (
-		"        -ulaw      : force the output ULAW\n"
-		"        -alaw      : force the output ALAW\n"
-		"        -alac16    : force the output 16 bit ALAC (CAF only)\n"
-		"        -alac20    : force the output 20 bit ALAC (CAF only)\n"
-		"        -alac24    : force the output 24 bit ALAC (CAF only)\n"
-		"        -alac32    : force the output 32 bit ALAC (CAF only)\n"
-		"        -ima-adpcm : force the output to IMA ADPCM (WAV only)\n"
-		"        -ms-adpcm  : force the output to MS ADPCM (WAV only)\n"
-		"        -gsm610    : force the GSM6.10 (WAV only)\n"
-		"        -dwvw12    : force the output to 12 bit DWVW (AIFF only)\n"
-		"        -dwvw16    : force the output to 16 bit DWVW (AIFF only)\n"
-		"        -dwvw24    : force the output to 24 bit DWVW (AIFF only)\n"
-		"        -vorbis    : force the output to Vorbis (OGG only)\n"
-		) ;
-
-	puts (
-		"    If no encoding is specified, the program will try to use the encoding\n"
-		"    of the input file in the output file. This will not always work as\n"
-		"    most container formats (eg WAV, AIFF etc) only support a small subset\n"
-		"    of codec formats (eg 16 bit PCM, a-law, Vorbis etc).\n"
-		) ;
-
-	puts (
-		"    The format of the output file is determined by the file extension of the\n"
-		"    output file name. The following extensions are currently understood:\n"
-		) ;
-
-	sfe_dump_format_map () ;
-
-	puts ("") ;
-	exit (0) ;
-} /* usage_exit */
-
-static void
-report_format_error_exit (const char * argv0, SF_INFO * sfinfo)
-{	int old_format = sfinfo->format ;
-	int endian = sfinfo->format & SF_FORMAT_ENDMASK ;
-
-	sfinfo->format = old_format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (endian && sf_format_check (sfinfo))
-	{	printf ("Error : output file format does not support %s endian-ness.\n", sfe_endian_name (endian)) ;
-		exit (1) ;
-		} ;
-
-	printf ("\n"
-			"Error : output file format is invalid.\n"
-			"The '%s' container does not support '%s' codec data.\n"
-			"Run '%s --help' for clues.\n\n",
-			sfe_container_name (sfinfo->format), sfe_codec_name (sfinfo->format), program_name (argv0)) ;
-	exit (1) ;
-} /* report_format_error_exit */
-
-int
-main (int argc, char * argv [])
-{	const char	*progname, *infilename, *outfilename ;
-	SNDFILE		*infile = NULL, *outfile = NULL ;
-	SF_INFO		sfinfo ;
-	int			k, outfilemajor, outfileminor = 0, infileminor ;
-	int			override_sample_rate = 0 ; /* assume no sample rate override. */
-	int			endian = SF_ENDIAN_FILE, normalize = SF_FALSE ;
-
-	progname = program_name (argv [0]) ;
-
-	if (argc < 3 || argc > 5)
-	{	usage_exit (progname) ;
-		return 1 ;
-		} ;
-
-	infilename = argv [argc-2] ;
-	outfilename = argv [argc-1] ;
-
-	if (strcmp (infilename, outfilename) == 0)
-	{	printf ("Error : Input and output filenames are the same.\n\n") ;
-		usage_exit (progname) ;
-		return 1 ;
-		} ;
-
-	if (strlen (infilename) > 1 && infilename [0] == '-')
-	{	printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-		usage_exit (progname) ;
-		return 1 ;
-		} ;
-
-	if (outfilename [0] == '-')
-	{	printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-		usage_exit (progname) ;
-		return 1 ;
-		} ;
-
-	for (k = 1 ; k < argc - 2 ; k++)
-	{	if (! strcmp (argv [k], "-pcms8"))
-		{	outfileminor = SF_FORMAT_PCM_S8 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcmu8"))
-		{	outfileminor = SF_FORMAT_PCM_U8 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm16"))
-		{	outfileminor = SF_FORMAT_PCM_16 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm24"))
-		{	outfileminor = SF_FORMAT_PCM_24 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-pcm32"))
-		{	outfileminor = SF_FORMAT_PCM_32 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-float32"))
-		{	outfileminor = SF_FORMAT_FLOAT ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ulaw"))
-		{	outfileminor = SF_FORMAT_ULAW ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alaw"))
-		{	outfileminor = SF_FORMAT_ALAW ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alac16"))
-		{	outfileminor = SF_FORMAT_ALAC_16 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alac20"))
-		{	outfileminor = SF_FORMAT_ALAC_20 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alac24"))
-		{	outfileminor = SF_FORMAT_ALAC_24 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-alac32"))
-		{	outfileminor = SF_FORMAT_ALAC_32 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ima-adpcm"))
-		{	outfileminor = SF_FORMAT_IMA_ADPCM ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-ms-adpcm"))
-		{	outfileminor = SF_FORMAT_MS_ADPCM ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-gsm610"))
-		{	outfileminor = SF_FORMAT_GSM610 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw12"))
-		{	outfileminor = SF_FORMAT_DWVW_12 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw16"))
-		{	outfileminor = SF_FORMAT_DWVW_16 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-dwvw24"))
-		{	outfileminor = SF_FORMAT_DWVW_24 ;
-			continue ;
-			} ;
-		if (! strcmp (argv [k], "-vorbis"))
-		{	outfileminor = SF_FORMAT_VORBIS ;
-			continue ;
-			} ;
-
-		if (strstr (argv [k], "-override-sample-rate=") == argv [k])
-		{	const char *ptr ;
-
-			ptr = argv [k] + strlen ("-override-sample-rate=") ;
-			override_sample_rate = atoi (ptr) ;
-			continue ;
-			} ;
-
-		if (! strcmp (argv [k], "-endian=little"))
-		{	endian = SF_ENDIAN_LITTLE ;
-			continue ;
-			} ;
-
-		if (! strcmp (argv [k], "-endian=big"))
-		{	endian = SF_ENDIAN_BIG ;
-			continue ;
-			} ;
-
-		if (! strcmp (argv [k], "-endian=cpu"))
-		{	endian = SF_ENDIAN_CPU ;
-			continue ;
-			} ;
-
-		if (! strcmp (argv [k], "-endian=file"))
-		{	endian = SF_ENDIAN_FILE ;
-			continue ;
-			} ;
-
-		if (! strcmp (argv [k], "-normalize"))
-		{	normalize = SF_TRUE ;
-			continue ;
-			} ;
-
-		printf ("Error : Not able to decode argunment '%s'.\n", argv [k]) ;
-		exit (1) ;
-		} ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Not able to open input file %s.\n", infilename) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	/* Update sample rate if forced to something else. */
-	if (override_sample_rate)
-		sfinfo.samplerate = override_sample_rate ;
-
-	infileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-	if ((sfinfo.format = sfe_file_type_of_ext (outfilename, sfinfo.format)) == 0)
-	{	printf ("Error : Not able to determine output file type for %s.\n", outfilename) ;
-		return 1 ;
-		} ;
-
-	outfilemajor = sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_ENDMASK) ;
-
-	if (outfileminor == 0)
-		outfileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-	if (outfileminor != 0)
-		sfinfo.format = outfilemajor | outfileminor ;
-	else
-		sfinfo.format = outfilemajor | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-
-	sfinfo.format |= endian ;
-
-	if ((sfinfo.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-		switch (sfinfo.format & SF_FORMAT_SUBMASK)
-		{	case SF_FORMAT_PCM_16 :
-					sfinfo.format = outfilemajor | SF_FORMAT_DPCM_16 ;
-					break ;
-
-			case SF_FORMAT_PCM_S8 :
-			case SF_FORMAT_PCM_U8 :
-					sfinfo.format = outfilemajor | SF_FORMAT_DPCM_8 ;
-					break ;
-			} ;
-
-	if (sf_format_check (&sfinfo) == 0)
-		report_format_error_exit (argv [0], &sfinfo) ;
-
-	/* Open the output file. */
-	if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	/* Copy the metadata */
-	copy_metadata (outfile, infile, sfinfo.channels) ;
-
-	if (normalize
-			|| (outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT)
-			|| (infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT)
-			|| (infileminor == SF_FORMAT_VORBIS) || (outfileminor == SF_FORMAT_VORBIS))
-		sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) ;
-	else
-		sfe_copy_data_int (outfile, infile, sfinfo.channels) ;
-
-	sf_close (infile) ;
-	sf_close (outfile) ;
-
-	return 0 ;
-} /* main */
-
-static void
-copy_metadata (SNDFILE *outfile, SNDFILE *infile, int channels)
-{	SF_INSTRUMENT inst ;
-	SF_BROADCAST_INFO_2K binfo ;
-	const char *str ;
-	int k, chanmap [256] ;
-
-	for (k = SF_STR_FIRST ; k <= SF_STR_LAST ; k++)
-	{	str = sf_get_string (infile, k) ;
-		if (str != NULL)
-			sf_set_string (outfile, k, str) ;
-		} ;
-
-	memset (&inst, 0, sizeof (inst)) ;
-	memset (&binfo, 0, sizeof (binfo)) ;
-
-	if (channels < ARRAY_LEN (chanmap))
-	{	size_t size = channels * sizeof (chanmap [0]) ;
-
-		if (sf_command (infile, SFC_GET_CHANNEL_MAP_INFO, chanmap, size) == SF_TRUE)
-			sf_command (outfile, SFC_SET_CHANNEL_MAP_INFO, chanmap, size) ;
-		} ;
-
-	if (sf_command (infile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-		sf_command (outfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ;
-
-	if (sf_command (infile, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == SF_TRUE)
-		sf_command (outfile, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) ;
-
-} /* copy_metadata */
-
diff --git a/libs/libsndfile/programs/sndfile-deinterleave.c b/libs/libsndfile/programs/sndfile-deinterleave.c
deleted file mode 100644
index df80b04222..0000000000
--- a/libs/libsndfile/programs/sndfile-deinterleave.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN	4096
-#define	MAX_CHANNELS	16
-
-
-typedef struct
-{	SNDFILE * infile ;
-	SNDFILE * outfile [MAX_CHANNELS] ;
-
-	union
-	{	double	d [MAX_CHANNELS * BUFFER_LEN] ;
-		int		i [MAX_CHANNELS * BUFFER_LEN] ;
-	} din ;
-
-	union
-	{	double	d [BUFFER_LEN] ;
-		int		i [BUFFER_LEN] ;
-	} dout ;
-
-	int channels ;
-} STATE ;
-
-static void usage_exit (void) ;
-
-static void deinterleave_int (STATE * state) ;
-static void deinterleave_double (STATE * state) ;
-
-int
-main (int argc, char **argv)
-{	STATE state ;
-	SF_INFO sfinfo ;
-	char pathname [512], ext [32], *cptr ;
-	int ch, double_split ;
-
-	if (argc != 2)
-	{	if (argc != 1)
-			puts ("\nError : need a single input file.\n") ;
-		usage_exit () ;
-		} ;
-
-	memset (&state, 0, sizeof (state)) ;
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((state.infile = sf_open (argv [1], SFM_READ, &sfinfo)) == NULL)
-	{	printf ("\nError : Not able to open input file '%s'\n%s\n", argv [1], sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels < 2)
-	{	printf ("\nError : Input file '%s' only has one channel.\n", argv [1]) ;
-		exit (1) ;
-		} ;
-
-	state.channels = sfinfo.channels ;
-	sfinfo.channels = 1 ;
-
-	snprintf (pathname, sizeof (pathname), "%s", argv [1]) ;
-	if ((cptr = strrchr (pathname, '.')) == NULL)
-		ext [0] = 0 ;
-	else
-	{	snprintf (ext, sizeof (ext), "%s", cptr) ;
-		cptr [0] = 0 ;
-		} ;
-
-	printf ("Input file : %s\n", pathname) ;
-	puts ("Output files :") ;
-
-	for (ch = 0 ; ch < state.channels ; ch++)
-	{	char filename [520] ;
-
-		snprintf (filename, sizeof (filename), "%s_%02d%s", pathname, ch, ext) ;
-
-		if ((state.outfile [ch] = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-		{	printf ("Not able to open output file '%s'\n%s\n", filename, sf_strerror (NULL)) ;
-			exit (1) ;
-			} ;
-
-		printf ("    %s\n", filename) ;
-		} ;
-
-	switch (sfinfo.format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-		case SF_FORMAT_VORBIS :
-			double_split = 1 ;
-			break ;
-
-		default :
-			double_split = 0 ;
-			break ;
-		} ;
-
-	if (double_split)
-		deinterleave_double (&state) ;
-	else
-		deinterleave_int (&state) ;
-
-	sf_close (state.infile) ;
-	for (ch = 0 ; ch < MAX_CHANNELS ; ch++)
-		if (state.outfile [ch] != NULL)
-			sf_close (state.outfile [ch]) ;
-
-	return 0 ;
-} /* main */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-usage_exit (void)
-{	puts ("\nUsage : sndfile-deinterleave <filename>\n") ;
-	puts (
-		"Split a mutli-channel file into a set of mono files.\n"
-		"\n"
-		"If the input file is named 'a.wav', the output files will be named\n"
-		"a_00.wav, a_01.wav and so on.\n"
-		) ;
-	printf ("Using %s.\n\n", sf_version_string ()) ;
-	exit (0) ;
-} /* usage_exit */
-
-static void
-deinterleave_int (STATE * state)
-{	int read_len ;
-	int ch, k ;
-
-	do
-	{	read_len = sf_readf_int (state->infile, state->din.i, BUFFER_LEN) ;
-
-		for (ch = 0 ; ch < state->channels ; ch ++)
-		{	for (k = 0 ; k < read_len ; k++)
-				state->dout.i [k] = state->din.i [k * state->channels + ch] ;
-			sf_write_int (state->outfile [ch], state->dout.i, read_len) ;
-			} ;
-		}
-	while (read_len > 0) ;
-
-} /* deinterleave_int */
-
-static void
-deinterleave_double (STATE * state)
-{	int read_len ;
-	int ch, k ;
-
-	do
-	{	read_len = sf_readf_double (state->infile, state->din.d, BUFFER_LEN) ;
-
-		for (ch = 0 ; ch < state->channels ; ch ++)
-		{	for (k = 0 ; k < read_len ; k++)
-				state->dout.d [k] = state->din.d [k * state->channels + ch] ;
-			sf_write_double (state->outfile [ch], state->dout.d, read_len) ;
-			} ;
-		}
-	while (read_len > 0) ;
-
-} /* deinterleave_double */
diff --git a/libs/libsndfile/programs/sndfile-info.c b/libs/libsndfile/programs/sndfile-info.c
deleted file mode 100644
index 06982fd2c2..0000000000
--- a/libs/libsndfile/programs/sndfile-info.c
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<inttypes.h>
-#include	<ctype.h>
-#include	<math.h>
-
-#include	<sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN		(1 << 16)
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <windows.h>
-#endif
-
-static void print_version (void) ;
-static void usage_exit (const char *progname) ;
-
-static void info_dump (const char *filename) ;
-static int	instrument_dump (const char *filename) ;
-static int	broadcast_dump (const char *filename) ;
-static int	chanmap_dump (const char *filename) ;
-static int	cart_dump (const char *filename) ;
-static void total_dump (void) ;
-
-static double total_seconds = 0.0 ;
-
-int
-main (int argc, char *argv [])
-{	int	k ;
-
-	print_version () ;
-
-	if (argc < 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-	{	usage_exit (program_name (argv [0])) ;
-		return 1 ;
-		} ;
-
-	if (strcmp (argv [1], "--instrument") == 0)
-	{	int error = 0 ;
-
-		for (k = 2 ; k < argc ; k++)
-			error += instrument_dump (argv [k]) ;
-		return error ;
-		} ;
-
-	if (strcmp (argv [1], "--broadcast") == 0)
-	{	int error = 0 ;
-
-		for (k = 2 ; k < argc ; k++)
-			error += broadcast_dump (argv [k]) ;
-		return error ;
-		} ;
-
-	if (strcmp (argv [1], "--channel-map") == 0)
-	{	int error = 0 ;
-
-		for (k = 2 ; k < argc ; k++)
-			error += chanmap_dump (argv [k]) ;
-		return error ;
-		} ;
-
-	if (strcmp (argv [1], "--cart") == 0)
-	{	int error = 0 ;
-
-		for (k = 2 ; k < argc ; k++)
-			error += cart_dump (argv [k]) ;
-		return error ;
-		} ;
-
-	for (k = 1 ; k < argc ; k++)
-		info_dump (argv [k]) ;
-
-	if (argc > 2)
-		total_dump () ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-**	Print version and usage.
-*/
-
-static double	data [BUFFER_LEN] ;
-
-static void
-print_version (void)
-{	char buffer [256] ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-	printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-
-static void
-usage_exit (const char *progname)
-{	printf ("Usage :\n  %s <file> ...\n", progname) ;
-	printf ("    Prints out information about one or more sound files.\n\n") ;
-	printf ("  %s --instrument <file>\n", progname) ;
-	printf ("    Prints out the instrument data for the given file.\n\n") ;
-	printf ("  %s --broadcast <file>\n", progname) ;
-	printf ("    Prints out the broadcast WAV info for the given file.\n\n") ;
-	printf ("  %s --channel-map <file>\n", progname) ;
-	printf ("    Prints out the channel map for the given file.\n\n") ;
-	printf ("  %s --cart <file>\n", progname) ;
-	printf ("    Prints out the cart chunk WAV info for the given file.\n\n") ;
-#if (defined (_WIN32) || defined (WIN32))
-		printf ("This is a Unix style command line application which\n"
-				"should be run in a MSDOS box or Command Shell window.\n\n") ;
-		printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-		fflush (stdout) ;
-
-		/* This is the officially blessed by microsoft way but I can't get
-		** it to link.
-		**     Sleep (15) ;
-		** Instead, use this:
-		*/
-		Sleep (5 * 1000) ;
-#endif
-	exit (0) ;
-} /* usage_exit */
-
-/*==============================================================================
-**	Dumping of sndfile info.
-*/
-
-static double	data [BUFFER_LEN] ;
-
-static double
-calc_decibels (SF_INFO * sfinfo, double max)
-{	double decibels ;
-
-	switch (sfinfo->format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-			decibels = max / 0x80 ;
-			break ;
-
-		case SF_FORMAT_PCM_16 :
-			decibels = max / 0x8000 ;
-			break ;
-
-		case SF_FORMAT_PCM_24 :
-			decibels = max / 0x800000 ;
-			break ;
-
-		case SF_FORMAT_PCM_32 :
-			decibels = max / 0x80000000 ;
-			break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			decibels = max / 1.0 ;
-			break ;
-
-		default :
-			decibels = max / 0x8000 ;
-			break ;
-		} ;
-
-	return 20.0 * log10 (decibels) ;
-} /* calc_decibels */
-
-static const char *
-format_duration_str (double seconds)
-{	static char str [128] ;
-	int hrs, min ;
-	double sec ;
-
-	memset (str, 0, sizeof (str)) ;
-
-	hrs = (int) (seconds / 3600.0) ;
-	min = (int) ((seconds - (hrs * 3600.0)) / 60.0) ;
-	sec = seconds - (hrs * 3600.0) - (min * 60.0) ;
-
-	snprintf (str, sizeof (str) - 1, "%02d:%02d:%06.3f", hrs, min, sec) ;
-
-	return str ;
-} /* format_duration_str */
-
-static const char *
-generate_duration_str (SF_INFO *sfinfo)
-{
-	double seconds ;
-
-	if (sfinfo->samplerate < 1)
-		return NULL ;
-
-	if (sfinfo->frames / sfinfo->samplerate > 0x7FFFFFFF)
-		return "unknown" ;
-
-	seconds = (1.0 * sfinfo->frames) / sfinfo->samplerate ;
-
-	/* Accumulate the total of all known file durations */
-	total_seconds += seconds ;
-
-	return format_duration_str (seconds) ;
-} /* generate_duration_str */
-
-static void
-info_dump (const char *filename)
-{	static	char	strbuffer [BUFFER_LEN] ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		signal_max, decibels ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-		puts (strbuffer) ;
-		puts (sf_strerror (NULL)) ;
-		return ;
-		} ;
-
-	printf ("========================================\n") ;
-	sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-	puts (strbuffer) ;
-	printf ("----------------------------------------\n") ;
-
-	printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
-
-	if (sfinfo.frames == SF_COUNT_MAX)
-		printf ("Frames      : unknown\n") ;
-	else
-		printf ("Frames      : %" PRId64 "\n", sfinfo.frames) ;
-
-	printf ("Channels    : %d\n", sfinfo.channels) ;
-	printf ("Format      : 0x%08X\n", sfinfo.format) ;
-	printf ("Sections    : %d\n", sfinfo.sections) ;
-	printf ("Seekable    : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
-	printf ("Duration    : %s\n", generate_duration_str (&sfinfo)) ;
-
-	if (sfinfo.frames < 100 * 1024 * 1024)
-	{	/* Do not use sf_signal_max because it doesn't work for non-seekable files . */
-		sf_command (file, SFC_CALC_SIGNAL_MAX, &signal_max, sizeof (signal_max)) ;
-		decibels = calc_decibels (&sfinfo, signal_max) ;
-		printf ("Signal Max  : %g (%4.2f dB)\n", signal_max, decibels) ;
-		} ;
-	putchar ('\n') ;
-
-	sf_close (file) ;
-
-} /* info_dump */
-
-/*==============================================================================
-**	Dumping of SF_INSTRUMENT data.
-*/
-
-static const char *
-str_of_type (int mode)
-{	switch (mode)
-	{	case SF_LOOP_NONE : return "none" ;
-		case SF_LOOP_FORWARD : return "fwd " ;
-		case SF_LOOP_BACKWARD : return "back" ;
-		case SF_LOOP_ALTERNATING : return "alt " ;
-		default : break ;
-		} ;
-
-	return "????" ;
-} /* str_of_mode */
-
-static int
-instrument_dump (const char *filename)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	SF_INSTRUMENT inst ;
-	int got_inst, k ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	got_inst = sf_command (file, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ;
-	sf_close (file) ;
-
-	if (got_inst == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain instrument data.\n\n", filename) ;
-		return 1 ;
-		} ;
-
-	printf ("Instrument : %s\n\n", filename) ;
-	printf ("  Gain        : %d\n", inst.gain) ;
-	printf ("  Base note   : %d\n", inst.basenote) ;
-	printf ("  Velocity    : %d - %d\n", (int) inst.velocity_lo, (int) inst.velocity_hi) ;
-	printf ("  Key         : %d - %d\n", (int) inst.key_lo, (int) inst.key_hi) ;
-	printf ("  Loop points : %d\n", inst.loop_count) ;
-
-	for (k = 0 ; k < inst.loop_count ; k++)
-		printf ("  %-2d    Mode : %s    Start : %6d   End : %6d   Count : %6d\n", k, str_of_type (inst.loops [k].mode), inst.loops [k].start, inst.loops [k].end, inst.loops [k].count) ;
-
-	putchar ('\n') ;
-	return 0 ;
-} /* instrument_dump */
-
-static int
-broadcast_dump (const char *filename)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	SF_BROADCAST_INFO_2K bext ;
-	double time_ref_sec ;
-	int got_bext ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	memset (&bext, 0, sizeof (SF_BROADCAST_INFO_2K)) ;
-
-	got_bext = sf_command (file, SFC_GET_BROADCAST_INFO, &bext, sizeof (bext)) ;
-	sf_close (file) ;
-
-	if (got_bext == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain broadcast information.\n\n", filename) ;
-		return 1 ;
-		} ;
-
-	/*
-	**	From : http://www.ebu.ch/en/technical/publications/userguides/bwf_user_guide.php
-	**
-	**	Time Reference:
-	**		This field is a count from midnight in samples to the first sample
-	**		of the audio sequence.
-	*/
-
-	time_ref_sec = ((pow (2.0, 32) * bext.time_reference_high) + (1.0 * bext.time_reference_low)) / sfinfo.samplerate ;
-
-	printf ("Description      : %.*s\n", (int) sizeof (bext.description), bext.description) ;
-	printf ("Originator       : %.*s\n", (int) sizeof (bext.originator), bext.originator) ;
-	printf ("Origination ref  : %.*s\n", (int) sizeof (bext.originator_reference), bext.originator_reference) ;
-	printf ("Origination date : %.*s\n", (int) sizeof (bext.origination_date), bext.origination_date) ;
-	printf ("Origination time : %.*s\n", (int) sizeof (bext.origination_time), bext.origination_time) ;
-
-	if (bext.time_reference_high == 0 && bext.time_reference_low == 0)
-		printf ("Time ref         : 0\n") ;
-	else
-		printf ("Time ref         : 0x%x%08x (%.6f seconds)\n", bext.time_reference_high, bext.time_reference_low, time_ref_sec) ;
-
-	printf ("BWF version      : %d\n", bext.version) ;
-	printf ("UMID             : %.*s\n", (int) sizeof (bext.umid), bext.umid) ;
-	printf ("Coding history   : %.*s\n", bext.coding_history_size, bext.coding_history) ;
-
-	return 0 ;
-} /* broadcast_dump */
-
-static int
-chanmap_dump (const char *filename)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int * channel_map ;
-	int got_chanmap, k ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	if ((channel_map = calloc (sfinfo.channels, sizeof (int))) == NULL)
-	{	printf ("Error : malloc failed.\n\n") ;
-		return 1 ;
-		} ;
-
-	got_chanmap = sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map, sfinfo.channels * sizeof (int)) ;
-	sf_close (file) ;
-
-	if (got_chanmap == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain channel map information.\n\n", filename) ;
-		free (channel_map) ;
-		return 1 ;
-		} ;
-
-	printf ("File : %s\n\n", filename) ;
-
-	puts ("    Chan    Position") ;
-	for (k = 0 ; k < sfinfo.channels ; k ++)
-	{	const char * name ;
-
-#define CASE_NAME(x)	case x : name = #x ; break ;
-		switch (channel_map [k])
-		{	CASE_NAME (SF_CHANNEL_MAP_INVALID) ;
-			CASE_NAME (SF_CHANNEL_MAP_MONO) ;
-			CASE_NAME (SF_CHANNEL_MAP_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_FRONT_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_REAR_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_REAR_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_REAR_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_LFE) ;
-			CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_SIDE_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_SIDE_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_LEFT) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_RIGHT) ;
-			CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_CENTER) ;
-			CASE_NAME (SF_CHANNEL_MAP_MAX) ;
-			default : name = "default" ;
-				break ;
-			} ;
-
-		printf ("    %3d     %s\n", k, name) ;
-		} ;
-
-	putchar ('\n') ;
-	free (channel_map) ;
-
-	return 0 ;
-} /* chanmap_dump */
-
-static int
-cart_dump (const char *filename)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	SF_CART_INFO_VAR (1024) cart ;
-	int got_cart, k ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	memset (&cart, 0, sizeof (cart)) ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Not able to open input file %s.\n", filename) ;
-		fflush (stdout) ;
-		memset (data, 0, sizeof (data)) ;
-		puts (sf_strerror (NULL)) ;
-		return 1 ;
-		} ;
-
-	got_cart = sf_command (file, SFC_GET_CART_INFO, &cart, sizeof (cart)) ;
-	sf_close (file) ;
-
-	if (got_cart == SF_FALSE)
-	{	printf ("Error : File '%s' does not contain cart information.\n\n", filename) ;
-		return 1 ;
-		} ;
-
-	printf ("Version        : %.*s\n", (int) sizeof (cart.version), cart.version) ;
-	printf ("Title          : %.*s\n", (int) sizeof (cart.title), cart.title) ;
-	printf ("Artist         : %.*s\n", (int) sizeof (cart.artist), cart.artist) ;
-	printf ("Cut id         : %.*s\n", (int) sizeof (cart.cut_id), cart.cut_id) ;
-	printf ("Category       : %.*s\n", (int) sizeof (cart.category), cart.category) ;
-	printf ("Classification : %.*s\n", (int) sizeof (cart.classification), cart.classification) ;
-	printf ("Out cue        : %.*s\n", (int) sizeof (cart.out_cue), cart.out_cue) ;
-	printf ("Start date     : %.*s\n", (int) sizeof (cart.start_date), cart.start_date) ;
-	printf ("Start time     : %.*s\n", (int) sizeof (cart.start_time), cart.start_time) ;
-	printf ("End date       : %.*s\n", (int) sizeof (cart.end_date), cart.end_date) ;
-	printf ("End time       : %.*s\n", (int) sizeof (cart.end_time), cart.end_time) ;
-	printf ("App id         : %.*s\n", (int) sizeof (cart.producer_app_id), cart.producer_app_id) ;
-	printf ("App version    : %.*s\n", (int) sizeof (cart.producer_app_version), cart.producer_app_version) ;
-	printf ("User defined   : %.*s\n", (int) sizeof (cart.user_def), cart.user_def) ;
-	printf ("Level ref.     : %d\n", cart.level_reference) ;
-	printf ("Post timers    :\n") ;
-
-	for (k = 0 ; k < ARRAY_LEN (cart.post_timers) ; k++)
-		if (cart.post_timers [k].usage [0])
-			printf ("  %d   %.*s    %d\n", k, (int) sizeof (cart.post_timers [k].usage), cart.post_timers [k].usage, cart.post_timers [k].value) ;
-
-	printf ("Reserved       : %.*s\n", (int) sizeof (cart.reserved), cart.reserved) ;
-	printf ("Url            : %.*s\n", (int) sizeof (cart.url), cart.url) ;
-	printf ("Tag text       : %.*s\n", cart.tag_text_size, cart.tag_text) ;
-
-	return 0 ;
-} /* cart_dump */
-
-static void
-total_dump (void)
-{	printf ("========================================\n") ;
-	printf ("Total Duration : %s\n", format_duration_str (total_seconds)) ;
-} /* total_dump */
diff --git a/libs/libsndfile/programs/sndfile-interleave.c b/libs/libsndfile/programs/sndfile-interleave.c
deleted file mode 100644
index 24d6b9d874..0000000000
--- a/libs/libsndfile/programs/sndfile-interleave.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN	4096
-#define	MAX_INPUTS	16
-
-
-typedef struct
-{	SNDFILE * infile [MAX_INPUTS] ;
-	SNDFILE * outfile ;
-
-	union
-	{	double	d [BUFFER_LEN] ;
-		int		i [BUFFER_LEN] ;
-	} din ;
-
-	union
-
-	{	double	d [MAX_INPUTS * BUFFER_LEN] ;
-		int		i [MAX_INPUTS * BUFFER_LEN] ;
-	} dout ;
-
-	int channels ;
-} STATE ;
-
-
-static void usage_exit (void) ;
-static void interleave_int (STATE * state) ;
-static void interleave_double (STATE * state) ;
-
-
-int
-main (int argc, char **argv)
-{	STATE state ;
-	SF_INFO sfinfo ;
-	int k, double_merge = 0 ;
-
-	if (argc < 5)
-	{	if (argc > 1)
-			puts ("\nError : need at least 2 input files.") ;
-		usage_exit () ;
-		} ;
-
-	if (strcmp (argv [argc - 2], "-o") != 0)
-	{	puts ("\nError : second last command line parameter should be '-o'.\n") ;
-		usage_exit () ;
-		} ;
-
-	if (argc - 3 > MAX_INPUTS)
-	{	printf ("\nError : Cannot handle more than %d input channels.\n\n", MAX_INPUTS) ;
-		exit (1) ;
-		} ;
-
-	memset (&state, 0, sizeof (state)) ;
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	for (k = 1 ; k < argc - 2 ; k++)
-	{
-		if ((state.infile [k - 1] = sf_open (argv [k], SFM_READ, &sfinfo)) == NULL)
-		{	printf ("\nError : Not able to open input file '%s'\n%s\n", argv [k], sf_strerror (NULL)) ;
-			exit (1) ;
-			} ;
-
-		if (sfinfo.channels != 1)
-		{	printf ("\bError : Input file '%s' should be mono (has %d channels).\n", argv [k], sfinfo.channels) ;
-			exit (1) ;
-			} ;
-
-		switch (sfinfo.format & SF_FORMAT_SUBMASK)
-		{	case SF_FORMAT_FLOAT :
-			case SF_FORMAT_DOUBLE :
-			case SF_FORMAT_VORBIS :
-				double_merge = 1 ;
-				break ;
-
-			default :
-				break ;
-			} ;
-
-		state.channels ++ ;
-		} ;
-
-	sfinfo.channels = state.channels ;
-	sfinfo.format = sfe_file_type_of_ext (argv [argc - 1], sfinfo.format) ;
-
-	if ((state.outfile = sf_open (argv [argc - 1], SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Not able to open output file '%s'\n%s\n", argv [argc - 1], sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if (double_merge)
-		interleave_double (&state) ;
-	else
-		interleave_int (&state) ;
-
-	for (k = 0 ; k < MAX_INPUTS ; k++)
-		if (state.infile [k] != NULL)
-			sf_close (state.infile [k]) ;
-	sf_close (state.outfile) ;
-
-	return 0 ;
-} /* main */
-
-/*------------------------------------------------------------------------------
-*/
-
-
-static void
-usage_exit (void)
-{	puts ("\nUsage : sndfile-interleave <input 1> <input 2> ... -o <output file>\n") ;
-	puts ("Merge two or more mono files into a single multi-channel file.\n") ;
-	printf ("Using %s.\n\n", sf_version_string ()) ;
-	exit (0) ;
-} /* usage_exit */
-
-
-static void
-interleave_int (STATE * state)
-{	int max_read_len, read_len ;
-	int ch, k ;
-
-	do
-	{	max_read_len = 0 ;
-
-		for (ch = 0 ; ch < state->channels ; ch ++)
-		{	read_len = sf_read_int (state->infile [ch], state->din.i, BUFFER_LEN) ;
-			if (read_len < BUFFER_LEN)
-				memset (state->din.i + read_len, 0, sizeof (state->din.i [0]) * (BUFFER_LEN - read_len)) ;
-
-			for (k = 0 ; k < read_len ; k++)
-				state->dout.i [k * state->channels + ch] = state->din.i [k] ;
-
-			max_read_len = MAX (max_read_len, read_len) ;
-			} ;
-
-		sf_writef_int (state->outfile, state->dout.i, max_read_len) ;
-		}
-	while (max_read_len > 0) ;
-
-} /* interleave_int */
-
-
-static void
-interleave_double (STATE * state)
-{	int max_read_len, read_len ;
-	int ch, k ;
-
-	do
-	{	max_read_len = 0 ;
-
-		for (ch = 0 ; ch < state->channels ; ch ++)
-		{	read_len = sf_read_double (state->infile [ch], state->din.d, BUFFER_LEN) ;
-			if (read_len < BUFFER_LEN)
-				memset (state->din.d + read_len, 0, sizeof (state->din.d [0]) * (BUFFER_LEN - read_len)) ;
-
-			for (k = 0 ; k < read_len ; k++)
-				state->dout.d [k * state->channels + ch] = state->din.d [k] ;
-
-			max_read_len = MAX (max_read_len, read_len) ;
-			} ;
-
-		sf_writef_double (state->outfile, state->dout.d, max_read_len) ;
-		}
-	while (max_read_len > 0) ;
-
-} /* interleave_double */
diff --git a/libs/libsndfile/programs/sndfile-jackplay.c b/libs/libsndfile/programs/sndfile-jackplay.c
deleted file mode 100644
index 87b722de2f..0000000000
--- a/libs/libsndfile/programs/sndfile-jackplay.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-** Copyright (c) 2007-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 Jonatan Liljedahl <lijon@kymatica.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_JACK
-
-#include <math.h>
-#include <pthread.h>
-
-#include <jack/jack.h>
-#include <jack/ringbuffer.h>
-
-#include <sndfile.h>
-
-#define RB_SIZE (1 << 16)
-
-typedef struct _thread_info
-{	pthread_t thread_id ;
-	SNDFILE *sndfile ;
-	jack_nframes_t pos ;
-	jack_client_t *client ;
-	unsigned int channels ;
-	volatile int can_process ;
-	volatile int read_done ;
-	volatile int play_done ;
-} thread_info_t ;
-
-pthread_mutex_t disk_thread_lock = PTHREAD_MUTEX_INITIALIZER ;
-pthread_cond_t data_ready = PTHREAD_COND_INITIALIZER ;
-
-static jack_ringbuffer_t *ringbuf ;
-static jack_port_t **output_port ;
-static jack_default_audio_sample_t ** outs ;
-const size_t sample_size = sizeof (jack_default_audio_sample_t) ;
-
-static int
-process (jack_nframes_t nframes, void * arg)
-{
-	thread_info_t *info = (thread_info_t *) arg ;
-	jack_default_audio_sample_t buf [info->channels] ;
-	unsigned i, n ;
-
-	if (! info->can_process)
-		return 0 ;
-
-	for (n = 0 ; n < info->channels ; n++)
-		outs [n] = jack_port_get_buffer (output_port [n], nframes) ;
-
-	for (i = 0 ; i < nframes ; i++)
-	{	size_t read_cnt ;
-
-		/* Read one frame of audio. */
-		read_cnt = jack_ringbuffer_read (ringbuf, (void*) buf, sample_size*info->channels) ;
-		if (read_cnt == 0 && info->read_done)
-		{	/* File is done, so stop the main loop. */
-			info->play_done = 1 ;
-			return 0 ;
-			} ;
-
-		/* Update play-position counter. */
-		info->pos += read_cnt / (sample_size*info->channels) ;
-
-		/* Output each channel of the frame. */
-		for (n = 0 ; n < info->channels ; n++)
-			outs [n][i] = buf [n] ;
-		} ;
-
-	/* Wake up the disk thread to read more data. */
-	if (pthread_mutex_trylock (&disk_thread_lock) == 0)
-	{	pthread_cond_signal (&data_ready) ;
-		pthread_mutex_unlock (&disk_thread_lock) ;
-		} ;
-
-	return 0 ;
-} /* process */
-
-static void *
-disk_thread (void *arg)
-{	thread_info_t *info = (thread_info_t *) arg ;
-	sf_count_t buf_avail, read_frames ;
-	jack_ringbuffer_data_t vec [2] ;
-	size_t bytes_per_frame = sample_size*info->channels ;
-
-	pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) ;
-	pthread_mutex_lock (&disk_thread_lock) ;
-
-	while (1)
-	{	jack_ringbuffer_get_write_vector (ringbuf, vec) ;
-
-		read_frames = 0 ;
-
-		if (vec [0].len)
-		{	/* Fill the first part of the ringbuffer. */
-			buf_avail = vec [0].len / bytes_per_frame ;
-			read_frames = sf_readf_float (info->sndfile, (float *) vec [0].buf, buf_avail) ;
-			if (vec [1].len)
-			{	/* Fill the second part of the ringbuffer? */
-				buf_avail = vec [1].len / bytes_per_frame ;
-				read_frames += sf_readf_float (info->sndfile, (float *) vec [1].buf, buf_avail) ;
-				} ;
-			} ;
-
-		if (read_frames == 0)
-			break ; /* end of file? */
-
-		jack_ringbuffer_write_advance (ringbuf, read_frames * bytes_per_frame) ;
-
-		/* Tell process that we've filled the ringbuffer. */
-		info->can_process = 1 ;
-
-		/* Wait for the process thread to wake us up. */
-		pthread_cond_wait (&data_ready, &disk_thread_lock) ;
-		} ;
-
-	/* Tell that we're done reading the file. */
-	info->read_done = 1 ;
-	pthread_mutex_unlock (&disk_thread_lock) ;
-
-	return 0 ;
-} /* disk_thread */
-
-static void
-jack_shutdown (void *arg)
-{	(void) arg ;
-	exit (1) ;
-} /* jack_shutdown */
-
-static void
-print_time (jack_nframes_t pos, int jack_sr)
-{	float sec = pos / (1.0 * jack_sr) ;
-	int min = sec / 60.0 ;
-	fprintf (stderr, "%02d:%05.2f", min, fmod (sec, 60.0)) ;
-} /* print_time */
-
-int
-main (int narg, char * args [])
-{
-	SNDFILE *sndfile ;
-	SF_INFO sndfileinfo ;
-	jack_client_t *client ;
-	thread_info_t info ;
-	int i, jack_sr ;
-
-	if (narg < 2)
-	{	fprintf (stderr, "no soundfile given\n") ;
-		return 1 ;
-		} ;
-
-	// create jack client
-	if ((client = jack_client_new ("jackplay")) == 0)
-	{
-		fprintf (stderr, "Jack server not running?\n") ;
-		return 1 ;
-		} ;
-
-	jack_sr = jack_get_sample_rate (client) ;
-
-	/* Open the soundfile. */
-	sndfileinfo.format = 0 ;
-	sndfile = sf_open (args [1], SFM_READ, &sndfileinfo) ;
-	if (sndfile == NULL)
-	{	fprintf (stderr, "Could not open soundfile '%s'\n", args [1]) ;
-		return 1 ;
-		} ;
-
-	fprintf (stderr, "Channels    : %d\nSample rate : %d Hz\nDuration    : ", sndfileinfo.channels, sndfileinfo.samplerate) ;
-
-	print_time (sndfileinfo.frames, sndfileinfo.samplerate) ;
-	fprintf (stderr, "\n") ;
-
-	if (sndfileinfo.samplerate != jack_sr)
-		fprintf (stderr, "Warning: samplerate of soundfile (%d Hz) does not match jack server (%d Hz).\n", sndfileinfo.samplerate, jack_sr) ;
-
-	/* Init the thread info struct. */
-	memset (&info, 0, sizeof (info)) ;
-	info.can_process = 0 ;
-	info.read_done = 0 ;
-	info.play_done = 0 ;
-	info.sndfile = sndfile ;
-	info.channels = sndfileinfo.channels ;
-	info.client = client ;
-	info.pos = 0 ;
-
-	/* Set up callbacks. */
-	jack_set_process_callback (client, process, &info) ;
-	jack_on_shutdown (client, jack_shutdown, 0) ;
-
-	/* Allocate output ports. */
-	output_port = calloc (sndfileinfo.channels, sizeof (jack_port_t *)) ;
-	outs = calloc (sndfileinfo.channels, sizeof (jack_default_audio_sample_t *)) ;
-	for (i = 0 ; i < sndfileinfo.channels ; i++)
-	{	char name [16] ;
-
-		snprintf (name, sizeof (name), "out_%d", i + 1) ;
-		output_port [i] = jack_port_register (client, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0) ;
-		} ;
-
-	/* Allocate and clear ringbuffer. */
-	ringbuf = jack_ringbuffer_create (sizeof (jack_default_audio_sample_t) * RB_SIZE) ;
-	memset (ringbuf->buf, 0, ringbuf->size) ;
-
-	/* Activate client. */
-	if (jack_activate (client))
-	{	fprintf (stderr, "Cannot activate client.\n") ;
-		return 1 ;
-		} ;
-
-	/* Auto connect all channels. */
-	for (i = 0 ; i < sndfileinfo.channels ; i++)
-	{	char name [64] ;
-
-		snprintf (name, sizeof (name), "alsa_pcm:playback_%d", i + 1) ;
-
-		if (jack_connect (client, jack_port_name (output_port [i]), name))
-			fprintf (stderr, "Cannot connect output port %d (%s).\n", i, name) ;
-		} ;
-
-	/* Start the disk thread. */
-	pthread_create (&info.thread_id, NULL, disk_thread, &info) ;
-
-	/* Sit in a loop, displaying the current play position. */
-	while (! info.play_done)
-	{	fprintf (stderr, "\r-> ") ;
-		print_time (info.pos, jack_sr) ;
-		fflush (stdout) ;
-		usleep (50000) ;
-		} ;
-
-	/* Clean up. */
-	jack_client_close (client) ;
-	jack_ringbuffer_free (ringbuf) ;
-	sf_close (sndfile) ;
-	free (outs) ;
-	free (output_port) ;
-
-	puts ("") ;
-
-	return 0 ;
-} /* main */
-
-#else
-
-int
-main (void)
-{
-	puts (
-		"Sorry this program was compiled without libjack (which probably\n"
-		"only exists on Linux and Mac OSX) and hence doesn't work."
-		) ;
-
-	return 0 ;
-} /* main */
-
-#endif
diff --git a/libs/libsndfile/programs/sndfile-metadata-get.c b/libs/libsndfile/programs/sndfile-metadata-get.c
deleted file mode 100644
index b4aa9b60f0..0000000000
--- a/libs/libsndfile/programs/sndfile-metadata-get.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008-2010 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN		(1 << 16)
-
-static void usage_exit (const char *progname, int exit_code) ;
-static void process_args (SNDFILE * file, const SF_BROADCAST_INFO_2K * binfo, int argc, char * argv []) ;
-
-int
-main (int argc, char *argv [])
-{	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	SF_BROADCAST_INFO_2K binfo ;
-	const char *progname ;
-	const char * filename = NULL ;
-	int	start ;
-
-	/* Store the program name. */
-	progname = program_name (argv [0]) ;
-
-	/* Check if we've been asked for help. */
-	if (argc <= 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-		usage_exit (progname, 0) ;
-
-	if (argv [argc - 1][0] != '-')
-	{	filename = argv [argc - 1] ;
-		start = 1 ;
-		}
-	else if (argv [1][0] != '-')
-	{	filename = argv [1] ;
-		start = 2 ;
-		}
-	else
-	{	printf ("Error : Either the first or the last command line parameter should be a filename.\n\n") ;
-		exit (1) ;
-		} ;
-
-	/* Get the time in case we need it later. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("Error : Open of file '%s' failed : %s\n\n", filename, sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	memset (&binfo, 0, sizeof (binfo)) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-		memset (&binfo, 0, sizeof (binfo)) ;
-
-	process_args (file, &binfo, argc - 2, argv + start) ;
-
-	sf_close (file) ;
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-**	Print version and usage.
-*/
-
-static void
-usage_exit (const char *progname, int exit_code)
-{	printf ("\nUsage :\n  %s [options] <file>\n\nOptions:\n", progname) ;
-
-	puts (
-		"    --bext-description    Print the 'bext' description.\n"
-		"    --bext-originator     Print the 'bext; originator info.\n"
-		"    --bext-orig-ref       Print the 'bext' origination reference.\n"
-		"    --bext-umid           Print the 'bext' UMID.\n"
-		"    --bext-orig-date      Print the 'bext' origination date.\n"
-		"    --bext-orig-time      Print the 'bext' origination time.\n"
-		"    --bext-coding-hist    Print the 'bext' coding history.\n"
-		) ;
-
-	puts (
-		"    --str-title           Print the title metadata.\n"
-		"    --str-copyright       Print the copyright metadata.\n"
-		"    --str-artist          Print the artist metadata.\n"
-		"    --str-comment         Print the comment metadata.\n"
-		"    --str-date            Print the creation date metadata.\n"
-		"    --str-album           Print the album metadata.\n"
-		"    --str-license         Print the license metadata.\n"
-		) ;
-
-	printf ("Using %s.\n\n", sf_version_string ()) ;
-	exit (exit_code) ;
-} /* usage_exit */
-
-static void
-process_args (SNDFILE * file, const SF_BROADCAST_INFO_2K * binfo, int argc, char * argv [])
-{	const char * str ;
-	int k, do_all = 0 ;
-
-#define HANDLE_BEXT_ARG(cmd, name, field) \
-		if (do_all || strcmp (argv [k], cmd) == 0) \
-		{	printf ("%-20s : %.*s\n", name, (int) sizeof (binfo->field), binfo->field) ; \
-			if (! do_all) \
-				continue ; \
-			} ;
-
-#define HANDLE_STR_ARG(cmd, name, id) \
-		if (do_all || strcmp (argv [k], cmd) == 0) \
-		{	str = sf_get_string (file, id) ; \
-			printf ("%-20s : %s\n", name, str ? str : "") ; \
-			if (! do_all) continue ; \
-			} ;
-
-	for (k = 0 ; k < argc ; k++)
-	{	if (do_all || strcmp (argv [k], "--all") == 0)
-			do_all = 1 ;
-
-		HANDLE_BEXT_ARG ("--bext-description", "Description", description) ;
-		HANDLE_BEXT_ARG ("--bext-originator", "Originator", originator) ;
-		HANDLE_BEXT_ARG ("--bext-orig-ref", "Origination ref", originator_reference) ;
-		HANDLE_BEXT_ARG ("--bext-umid", "UMID", umid) ;
-		HANDLE_BEXT_ARG ("--bext-orig-date", "Origination date", origination_date) ;
-		HANDLE_BEXT_ARG ("--bext-orig-time", "Origination time", origination_time) ;
-		HANDLE_BEXT_ARG ("--bext-coding-hist", "Coding history", coding_history) ;
-
-		HANDLE_STR_ARG ("--str-title", "Name", SF_STR_TITLE) ;
-		HANDLE_STR_ARG ("--str-copyright", "Copyright", SF_STR_COPYRIGHT) ;
-		HANDLE_STR_ARG ("--str-artist", "Artist", SF_STR_ARTIST) ;
-		HANDLE_STR_ARG ("--str-comment", "Comment", SF_STR_COMMENT) ;
-		HANDLE_STR_ARG ("--str-date", "Create date", SF_STR_DATE) ;
-		HANDLE_STR_ARG ("--str-album", "Album", SF_STR_ALBUM) ;
-		HANDLE_STR_ARG ("--str-license", "License", SF_STR_LICENSE) ;
-
-		if (! do_all)
-		{	printf ("Error : Don't know what to do with command line arg '%s'.\n\n", argv [k]) ;
-			exit (1) ;
-			} ;
-		break ;
-		} ;
-
-	return ;
-} /* process_args */
diff --git a/libs/libsndfile/programs/sndfile-metadata-set.c b/libs/libsndfile/programs/sndfile-metadata-set.c
deleted file mode 100644
index b1d021a888..0000000000
--- a/libs/libsndfile/programs/sndfile-metadata-set.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008-2010 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define	BUFFER_LEN		(1 << 16)
-
-
-static void usage_exit (const char *progname, int exit_code) ;
-static void missing_param (const char * option) ;
-static void read_localtime (struct tm * timedata) ;
-static int has_bext_fields_set (const METADATA_INFO * info) ;
-
-int
-main (int argc, char *argv [])
-{	METADATA_INFO info ;
-	struct tm timedata ;
-	const char *progname ;
-	const char * filenames [2] = { NULL, NULL } ;
-	int	k ;
-
-	/* Store the program name. */
-	progname = program_name (argv [0]) ;
-
-	/* Check if we've been asked for help. */
-	if (argc < 3 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-		usage_exit (progname, 0) ;
-
-	/* Clear set all fields of the struct to zero bytes. */
-	memset (&info, 0, sizeof (info)) ;
-
-	/* Get the time in case we need it later. */
-	read_localtime (&timedata) ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	char tmp [20] ;
-
-		if (argv [k][0] != '-')
-		{	if (filenames [0] == NULL)
-				filenames [0] = argv [k] ;
-			else if (filenames [1] == NULL)
-				filenames [1] = argv [k] ;
-			else
-			{	printf ("Error : Already have two file names on the command line and then found '%s'.\n\n", argv [k]) ;
-				usage_exit (progname, 1) ;
-				} ;
-			continue ;
-			} ;
-
-#define HANDLE_BEXT_ARG(cmd, field) \
-		if (strcmp (argv [k], cmd) == 0) \
-		{	k ++ ; \
-			if (k == argc) missing_param (argv [k - 1]) ; \
-			info.field = argv [k] ; \
-			continue ; \
-			} ;
-
-		HANDLE_BEXT_ARG ("--bext-description", description) ;
-		HANDLE_BEXT_ARG ("--bext-originator", originator) ;
-		HANDLE_BEXT_ARG ("--bext-orig-ref", originator_reference) ;
-		HANDLE_BEXT_ARG ("--bext-umid", umid) ;
-		HANDLE_BEXT_ARG ("--bext-orig-date", origination_date) ;
-		HANDLE_BEXT_ARG ("--bext-orig-time", origination_time) ;
-		HANDLE_BEXT_ARG ("--bext-coding-hist", coding_history) ;
-		HANDLE_BEXT_ARG ("--bext-time-ref", time_ref) ;
-
-#define HANDLE_STR_ARG(cmd, field) \
-	if (strcmp (argv [k], cmd) == 0) \
-	{	k ++ ; \
-		if (k == argc) missing_param (argv [k - 1]) ; \
-		info.field = argv [k] ; \
-		continue ; \
-		} ;
-
-		HANDLE_STR_ARG ("--str-comment", comment) ;
-		HANDLE_STR_ARG ("--str-title", title) ;
-		HANDLE_STR_ARG ("--str-copyright", copyright) ;
-		HANDLE_STR_ARG ("--str-artist", artist) ;
-		HANDLE_STR_ARG ("--str-date", date) ;
-		HANDLE_STR_ARG ("--str-album", album) ;
-		HANDLE_STR_ARG ("--str-license", license) ;
-
-		/* Following options do not take an argument. */
-		if (strcmp (argv [k], "--bext-auto-time-date") == 0)
-		{	snprintf (tmp, sizeof (tmp), "%02d:%02d:%02d", timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-			info.origination_time = strdup (tmp) ;
-
-			snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-			info.origination_date = strdup (tmp) ;
-			continue ;
-			} ;
-
-		if (strcmp (argv [k], "--bext-auto-time") == 0)
-		{	snprintf (tmp, sizeof (tmp), "%02d:%02d:%02d", timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-			info.origination_time = strdup (tmp) ;
-			continue ;
-			} ;
-
-		if (strcmp (argv [k], "--bext-auto-date") == 0)
-		{	snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-			info.origination_date = strdup (tmp) ;
-			continue ;
-			} ;
-
-		if (strcmp (argv [k], "--str-auto-date") == 0)
-		{	snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-
-			info.date = strdup (tmp) ;
-			continue ;
-			} ;
-
-		printf ("Error : Don't know what to do with command line arg '%s'.\n\n", argv [k]) ;
-		usage_exit (progname, 1) ;
-		} ;
-
-	/* Find out if any of the 'bext' fields are set. */
-	info.has_bext_fields = has_bext_fields_set (&info) ;
-
-	if (filenames [0] == NULL)
-	{	printf ("Error : No input file specificed.\n\n") ;
-		exit (1) ;
-		} ;
-
-	if (filenames [1] != NULL && strcmp (filenames [0], filenames [1]) == 0)
-	{	printf ("Error : Input and output files are the same.\n\n") ;
-		exit (1) ;
-		} ;
-
-	if (info.coding_history != NULL && filenames [1] == NULL)
-	{	printf ("\n"
-			"Error : Trying to update coding history of an existing file which unfortunately\n"
-			"        is not supported. Instead, create a new file using :\n"
-			"\n"
-			"        %s --bext-coding-hist \"Coding history\" old_file.wav new_file.wav\n"
-			"\n",
-			progname) ;
-		exit (1) ;
-		} ;
-
-	sfe_apply_metadata_changes (filenames, &info) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-**	Print version and usage.
-*/
-
-static void
-usage_exit (const char *progname, int exit_code)
-{	printf ("\nUsage :\n\n"
-		"  %s [options] <file>\n"
-		"  %s [options] <input file> <output file>\n"
-		"\n",
-		progname, progname) ;
-
-	puts (
-		"Where an option is made up of a pair of a field to set (one of\n"
-		"the 'bext' or metadata fields below) and a string. Fields are\n"
-		"as follows :\n"
-		) ;
-
-	puts (
-		"    --bext-description       Set the 'bext' description.\n"
-		"    --bext-originator        Set the 'bext' originator.\n"
-		"    --bext-orig-ref          Set the 'bext' originator reference.\n"
-		"    --bext-umid              Set the 'bext' UMID.\n"
-		"    --bext-orig-date         Set the 'bext' origination date.\n"
-		"    --bext-orig-time         Set the 'bext' origination time.\n"
-		"    --bext-coding-hist       Set the 'bext' coding history.\n"
-		"    --bext-time-raf          Set the 'bext' Time ref.\n"
-		"\n"
-		"    --str-comment            Set the metadata comment.\n"
-		"    --str-title              Set the metadata title.\n"
-		"    --str-copyright          Set the metadata copyright.\n"
-		"    --str-artist             Set the metadata artist.\n"
-		"    --str-date               Set the metadata date.\n"
-		"    --str-album              Set the metadata album.\n"
-		"    --str-license            Set the metadata license.\n"
-		) ;
-
-	puts (
-		"There are also the following arguments which do not take a\n"
-		"parameter :\n\n"
-		"    --bext-auto-time-date    Set the 'bext' time and date to current time/date.\n"
-		"    --bext-auto-time         Set the 'bext' time to current time.\n"
-		"    --bext-auto-date         Set the 'bext' date to current date.\n"
-		"    --str-auto-date          Set the metadata date to current date.\n"
-		) ;
-
-	puts (
-		"Most of the above operations can be done in-place on an existing\n"
-		"file. If any operation cannot be performed, the application will\n"
-		"exit with an appropriate error message.\n"
-		) ;
-
-	printf ("Using %s.\n\n", sf_version_string ()) ;
-	exit (exit_code) ;
-} /* usage_exit */
-
-static void
-missing_param (const char * option)
-{
-	printf ("Error : Option '%s' needs a parameter but doesn't seem to have one.\n\n", option) ;
-	exit (1) ;
-} /* missing_param */
-
-/*==============================================================================
-*/
-
-static int
-has_bext_fields_set (const METADATA_INFO * info)
-{
-	if (info->description || info->originator || info->originator_reference)
-		return 1 ;
-
-	if (info->origination_date || info->origination_time || info->umid || info->coding_history || info->time_ref)
-		return 1 ;
-
-	return 0 ;
-} /* has_bext_fields_set */
-
-static void
-read_localtime (struct tm * timedata)
-{	time_t		current ;
-
-	time (&current) ;
-	memset (timedata, 0, sizeof (struct tm)) ;
-
-#if defined (HAVE_LOCALTIME_R)
-	/* If the re-entrant version is available, use it. */
-	localtime_r (&current, timedata) ;
-#elif defined (HAVE_LOCALTIME)
-	{
-		struct tm	*tmptr ;
-		/* Otherwise use the standard one and copy the data to local storage. */
-		if ((tmptr = localtime (&current)) != NULL)
-			memcpy (timedata, tmptr, sizeof (struct tm)) ;
-	}
-#endif
-
-	return ;
-} /* read_localtime */
-
diff --git a/libs/libsndfile/programs/sndfile-play-beos.cpp b/libs/libsndfile/programs/sndfile-play-beos.cpp
deleted file mode 100644
index fb3fde4cdc..0000000000
--- a/libs/libsndfile/programs/sndfile-play-beos.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-** Copyright (C) 2001 Marcus Overhagen <marcus@overhagen.de>
-**  
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-** 
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-** 
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software 
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<stdio.h>
-
-#include 	<Application.h>
-#include 	<SoundPlayer.h>
-#include 	<string.h>
-
-#include	<sndfile.h>
-
-#define	BUFFER_LEN		1024
-
-/*------------------------------------------------------------------------------
-**	BeOS functions for playing a sound.
-*/
-
-#if defined (__BEOS__)
-
-struct shared_data
-{
-	BSoundPlayer *player;
-	SNDFILE *sndfile;
-	SF_INFO sfinfo;	
-	sem_id finished;
-};
-
-static void 
-buffer_callback(void *theCookie, void *buf, size_t size, const media_raw_audio_format &format) 
-{
-	shared_data *data = (shared_data *)theCookie;
-	short *buffer = (short *)buf;
-	int count = size / sizeof(short);
-	int m, readcount;
-
-	if (!data->player->HasData())
-		return;
-
-	readcount = sf_read_short(data->sndfile, buffer, count);
-	if (readcount == 0) 
-	{	data->player->SetHasData(false);		
-		release_sem(data->finished);
-		}
-	if (readcount < count) 
-	{	for (m = readcount ; m < count ; m++)
-			buffer [m] = 0 ;
-		}
-	if (data->sfinfo.pcmbitwidth < 16) 
-	{	for (m = 0 ; m < count ; m++)
-			buffer [m] *= 256 ;
-		}
-}
-
-static void
-beos_play (int argc, char *argv [])
-{
-	shared_data data;
-	status_t status;
-	int	k;
-
-	/* BSoundPlayer requires a BApplication object */
-	BApplication app("application/x-vnd.MarcusOverhagen-sfplay");
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;	
-		if (! (data.sndfile = sf_open_read (argv [k], &data.sfinfo)))
-		{	sf_perror (NULL) ;
-			continue ;
-			} ;
-			
-		if (data.sfinfo.channels < 1 || data.sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", data.sfinfo.channels) ;
-			sf_close (data.sndfile) ;
-			continue ;
-			} ;		
-
-		data.finished = create_sem(0,"finished");			
-
-		media_raw_audio_format format = 
-		{ 	data.sfinfo.samplerate,
-			data.sfinfo.channels,
-			media_raw_audio_format::B_AUDIO_SHORT,
-			B_HOST_IS_LENDIAN ? B_MEDIA_LITTLE_ENDIAN : B_MEDIA_BIG_ENDIAN,
-			BUFFER_LEN * sizeof(short)
-			};
-
-		BSoundPlayer player(&format,"player",buffer_callback,NULL,&data);
-		data.player = &player;
-		
-		if ((status = player.InitCheck()) != B_OK) 
-		{
-			printf ("Error : BSoundPlayer init failed, %s.\n", strerror(status)) ;
-			delete_sem(data.finished);
-			sf_close (data.sndfile) ;
-			continue ;
-			}
-
-		player.SetVolume(1.0);
-		player.Start();
-		player.SetHasData(true);
-		acquire_sem(data.finished);
-		player.Stop();
-		delete_sem(data.finished);
-		
-		sf_close (data.sndfile) ;
-
-		} ;
-
-} /* beos_play */
-
-#endif
-
-/*==============================================================================
-**	Main function.
-*/
-
-int 
-main (int argc, char *argv [])
-{
-	if (argc < 2)
-	{	printf ("Usage : %s <input sound file>\n\n", argv [0]) ;
-		return 1 ;
-		} ;
-	
-	beos_play (argc, argv) ;
-
-	return 0 ;
-} /* main */
-		
diff --git a/libs/libsndfile/programs/sndfile-play.c b/libs/libsndfile/programs/sndfile-play.c
deleted file mode 100644
index f779f11a86..0000000000
--- a/libs/libsndfile/programs/sndfile-play.c
+++ /dev/null
@@ -1,1211 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#if HAVE_ALSA_ASOUNDLIB_H
-	#define ALSA_PCM_NEW_HW_PARAMS_API
-	#define ALSA_PCM_NEW_SW_PARAMS_API
-	#include <alsa/asoundlib.h>
-	#include <sys/time.h>
-#endif
-
-#if defined (__ANDROID__)
-
-#elif defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__)
-	#include 	<fcntl.h>
-	#include 	<sys/ioctl.h>
-	#include 	<sys/soundcard.h>
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-	#include <AvailabilityMacros.h>
-	#include <Availability.h>
-
-	#if (OSX_DARWIN_VERSION > 11)
-		/* Includes go here. */
-	#elif (OSX_DARWIN_VERSION == 11)
-		#include <AudioToolbox/AudioToolbox.h>
-	#elif (OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10)
-		#include <Carbon.h>
-		#include <CoreAudio/AudioHardware.h>
-	#endif
-
-#elif defined (HAVE_SNDIO_H)
-	#include <sndio.h>
-
-#elif (defined (sun) && defined (unix))
-	#include <fcntl.h>
-	#include <sys/ioctl.h>
-	#include <sys/audioio.h>
-
-#elif (OS_IS_WIN32 == 1)
-	#include <windows.h>
-	#include <mmsystem.h>
-
-#endif
-
-#define	SIGNED_SIZEOF(x)	((int) sizeof (x))
-#define	BUFFER_LEN			(2048)
-
-/*------------------------------------------------------------------------------
-**	Linux/OSS functions for playing a sound.
-*/
-
-#if HAVE_ALSA_ASOUNDLIB_H
-
-static snd_pcm_t * alsa_open (int channels, unsigned srate, int realtime) ;
-static int alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels) ;
-
-static void
-alsa_play (int argc, char *argv [])
-{	static float buffer [BUFFER_LEN] ;
-	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	snd_pcm_t * alsa_dev ;
-	int		k, readcount, subformat ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		if ((alsa_dev = alsa_open (sfinfo.channels, (unsigned) sfinfo.samplerate, SF_FALSE)) == NULL)
-			continue ;
-
-		subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-		if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-		{	double	scale ;
-			int 	m ;
-
-			sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-			if (scale < 1e-10)
-				scale = 1.0 ;
-			else
-				scale = 32700.0 / scale ;
-
-			while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-			{	for (m = 0 ; m < readcount ; m++)
-					buffer [m] *= scale ;
-				alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-				} ;
-			}
-		else
-		{	while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-				alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-			} ;
-
-		snd_pcm_drain (alsa_dev) ;
-		snd_pcm_close (alsa_dev) ;
-
-		sf_close (sndfile) ;
-		} ;
-
-	return ;
-} /* alsa_play */
-
-static snd_pcm_t *
-alsa_open (int channels, unsigned samplerate, int realtime)
-{	const char * device = "default" ;
-	snd_pcm_t *alsa_dev = NULL ;
-	snd_pcm_hw_params_t *hw_params ;
-	snd_pcm_uframes_t buffer_size ;
-	snd_pcm_uframes_t alsa_period_size, alsa_buffer_frames ;
-	snd_pcm_sw_params_t *sw_params ;
-
-	int err ;
-
-	if (realtime)
-	{	alsa_period_size = 256 ;
-		alsa_buffer_frames = 3 * alsa_period_size ;
-		}
-	else
-	{	alsa_period_size = 1024 ;
-		alsa_buffer_frames = 4 * alsa_period_size ;
-		} ;
-
-	if ((err = snd_pcm_open (&alsa_dev, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
-	{	fprintf (stderr, "cannot open audio device \"%s\" (%s)\n", device, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_nonblock (alsa_dev, 0) ;
-
-	if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0)
-	{	fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_any (alsa_dev, hw_params)) < 0)
-	{	fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_access (alsa_dev, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-	{	fprintf (stderr, "cannot set access type (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_format (alsa_dev, hw_params, SND_PCM_FORMAT_FLOAT)) < 0)
-	{	fprintf (stderr, "cannot set sample format (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_rate_near (alsa_dev, hw_params, &samplerate, 0)) < 0)
-	{	fprintf (stderr, "cannot set sample rate (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_channels (alsa_dev, hw_params, channels)) < 0)
-	{	fprintf (stderr, "cannot set channel count (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_buffer_size_near (alsa_dev, hw_params, &alsa_buffer_frames)) < 0)
-	{	fprintf (stderr, "cannot set buffer size (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params_set_period_size_near (alsa_dev, hw_params, &alsa_period_size, 0)) < 0)
-	{	fprintf (stderr, "cannot set period size (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_hw_params (alsa_dev, hw_params)) < 0)
-	{	fprintf (stderr, "cannot set parameters (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	/* extra check: if we have only one period, this code won't work */
-	snd_pcm_hw_params_get_period_size (hw_params, &alsa_period_size, 0) ;
-	snd_pcm_hw_params_get_buffer_size (hw_params, &buffer_size) ;
-	if (alsa_period_size == buffer_size)
-	{	fprintf (stderr, "Can't use period equal to buffer size (%lu == %lu)", alsa_period_size, buffer_size) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_hw_params_free (hw_params) ;
-
-	if ((err = snd_pcm_sw_params_malloc (&sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params_malloc: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_sw_params_current (alsa_dev, sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params_current: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	/* note: set start threshold to delay start until the ring buffer is full */
-	snd_pcm_sw_params_current (alsa_dev, sw_params) ;
-
-	if ((err = snd_pcm_sw_params_set_start_threshold (alsa_dev, sw_params, buffer_size)) < 0)
-	{	fprintf (stderr, "cannot set start threshold (%s)\n", snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	if ((err = snd_pcm_sw_params (alsa_dev, sw_params)) != 0)
-	{	fprintf (stderr, "%s: snd_pcm_sw_params: %s", __func__, snd_strerror (err)) ;
-		goto catch_error ;
-		} ;
-
-	snd_pcm_sw_params_free (sw_params) ;
-
-	snd_pcm_reset (alsa_dev) ;
-
-catch_error :
-
-	if (err < 0 && alsa_dev != NULL)
-	{	snd_pcm_close (alsa_dev) ;
-		return NULL ;
-		} ;
-
-	return alsa_dev ;
-} /* alsa_open */
-
-static int
-alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels)
-{	static	int epipe_count = 0 ;
-
-	int total = 0 ;
-	int retval ;
-
-	if (epipe_count > 0)
-		epipe_count -- ;
-
-	while (total < frames)
-	{	retval = snd_pcm_writei (alsa_dev, data + total * channels, frames - total) ;
-
-		if (retval >= 0)
-		{	total += retval ;
-			if (total == frames)
-				return total ;
-
-			continue ;
-			} ;
-
-		switch (retval)
-		{	case -EAGAIN :
-					puts ("alsa_write_float: EAGAIN") ;
-					continue ;
-					break ;
-
-			case -EPIPE :
-					if (epipe_count > 0)
-					{	printf ("alsa_write_float: EPIPE %d\n", epipe_count) ;
-						if (epipe_count > 140)
-							return retval ;
-						} ;
-					epipe_count += 100 ;
-
-#if 0
-					if (0)
-					{	snd_pcm_status_t *status ;
-
-						snd_pcm_status_alloca (&status) ;
-						if ((retval = snd_pcm_status (alsa_dev, status)) < 0)
-							fprintf (stderr, "alsa_out: xrun. can't determine length\n") ;
-						else if (snd_pcm_status_get_state (status) == SND_PCM_STATE_XRUN)
-						{	struct timeval now, diff, tstamp ;
-
-							gettimeofday (&now, 0) ;
-							snd_pcm_status_get_trigger_tstamp (status, &tstamp) ;
-							timersub (&now, &tstamp, &diff) ;
-
-							fprintf (stderr, "alsa_write_float xrun: of at least %.3f msecs. resetting stream\n",
-									diff.tv_sec * 1000 + diff.tv_usec / 1000.0) ;
-							}
-						else
-							fprintf (stderr, "alsa_write_float: xrun. can't determine length\n") ;
-						} ;
-#endif
-
-					snd_pcm_prepare (alsa_dev) ;
-					break ;
-
-			case -EBADFD :
-					fprintf (stderr, "alsa_write_float: Bad PCM state.n") ;
-					return 0 ;
-					break ;
-
-			case -ESTRPIPE :
-					fprintf (stderr, "alsa_write_float: Suspend event.n") ;
-					return 0 ;
-					break ;
-
-			case -EIO :
-					puts ("alsa_write_float: EIO") ;
-					return 0 ;
-
-			default :
-					fprintf (stderr, "alsa_write_float: retval = %d\n", retval) ;
-					return 0 ;
-					break ;
-			} ; /* switch */
-		} ; /* while */
-
-	return total ;
-} /* alsa_write_float */
-
-#endif /* HAVE_ALSA_ASOUNDLIB_H */
-
-/*------------------------------------------------------------------------------
-**	Linux/OSS functions for playing a sound.
-*/
-
-#if !defined (__ANDROID__) && (defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__))
-
-static	int	opensoundsys_open_device (int channels, int srate) ;
-
-static int
-opensoundsys_play (int argc, char *argv [])
-{	static short buffer [BUFFER_LEN] ;
-	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	int		k, audio_device, readcount, writecount, subformat ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		audio_device = opensoundsys_open_device (sfinfo.channels, sfinfo.samplerate) ;
-
-		subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-		if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-		{	static float float_buffer [BUFFER_LEN] ;
-			double	scale ;
-			int 	m ;
-
-			sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-			if (scale < 1e-10)
-				scale = 1.0 ;
-			else
-				scale = 32700.0 / scale ;
-
-			while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
-			{	for (m = 0 ; m < readcount ; m++)
-					buffer [m] = scale * float_buffer [m] ;
-				writecount = write (audio_device, buffer, readcount * sizeof (short)) ;
-				} ;
-			}
-		else
-		{	while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-				writecount = write (audio_device, buffer, readcount * sizeof (short)) ;
-			} ;
-
-		if (ioctl (audio_device, SNDCTL_DSP_POST, 0) == -1)
-			perror ("ioctl (SNDCTL_DSP_POST) ") ;
-
-		if (ioctl (audio_device, SNDCTL_DSP_SYNC, 0) == -1)
-			perror ("ioctl (SNDCTL_DSP_SYNC) ") ;
-
-		close (audio_device) ;
-
-		sf_close (sndfile) ;
-		} ;
-
-	return writecount ;
-} /* opensoundsys_play */
-
-static int
-opensoundsys_open_device (int channels, int srate)
-{	int fd, stereo, fmt ;
-
-	if ((fd = open ("/dev/dsp", O_WRONLY, 0)) == -1 &&
-		(fd = open ("/dev/sound/dsp", O_WRONLY, 0)) == -1)
-	{	perror ("opensoundsys_open_device : open ") ;
-		exit (1) ;
-		} ;
-
-	stereo = 0 ;
-	if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) == -1)
-	{ 	/* Fatal error */
-		perror ("opensoundsys_open_device : stereo ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_RESET, 0))
-	{	perror ("opensoundsys_open_device : reset ") ;
-		exit (1) ;
-		} ;
-
-	fmt = CPU_IS_BIG_ENDIAN ? AFMT_S16_BE : AFMT_S16_LE ;
-	if (ioctl (fd, SNDCTL_DSP_SETFMT, &fmt) != 0)
-	{	perror ("opensoundsys_open_device : set format ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_CHANNELS, &channels) != 0)
-	{	perror ("opensoundsys_open_device : channels ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_SPEED, &srate) != 0)
-	{	perror ("opensoundsys_open_device : sample rate ") ;
-		exit (1) ;
-		} ;
-
-	if (ioctl (fd, SNDCTL_DSP_SYNC, 0) != 0)
-	{	perror ("opensoundsys_open_device : sync ") ;
-		exit (1) ;
-		} ;
-
-	return 	fd ;
-} /* opensoundsys_open_device */
-
-#endif /* __linux__ */
-
-/*------------------------------------------------------------------------------
-**	Mac OS X functions for playing a sound.
-*/
-
-#if (OSX_DARWIN_VERSION > 11)
-/* MacOSX 10.8 use a new Audio API. Someone needs to write some code for it. */
-#endif /* OSX_DARWIN_VERSION > 11 */
-
-#if (OSX_DARWIN_VERSION == 11)
-/* MacOSX 10.7 use AudioQueue API */
-
-#define kBytesPerAudioBuffer	(1024 * 8)
-#define kNumberOfAudioBuffers	4
-
-typedef struct
-{	AudioStreamBasicDescription		format ;
-
-	AudioQueueRef		queue ;
-	AudioQueueBufferRef	queueBuffer [kNumberOfAudioBuffers] ;
-
-	UInt32 			buf_size ;
-
-	SNDFILE 		*sndfile ;
-	SF_INFO 		sfinfo ;
-
-	int				done_playing ;
-} MacOSXAudioData ;
-
-
-static void
-macosx_fill_buffer (MacOSXAudioData *audio_data, AudioQueueBufferRef audio_buffer)
-{	int		size, sample_count, read_count ;
-	short	*buffer ;
-
-	size = audio_buffer->mAudioDataBytesCapacity ;
-	sample_count = size / sizeof (short) ;
-
-	buffer = (short*) audio_buffer->mAudioData ;
-
-	read_count = sf_read_short (audio_data->sndfile, buffer, sample_count) ;
-
-	if (read_count > 0)
-	{	audio_buffer->mAudioDataByteSize = read_count * sizeof (short) ;
-		AudioQueueEnqueueBuffer (audio_data->queue, audio_buffer, 0, NULL) ;
-		}
-	else
-		AudioQueueStop (audio_data->queue, false) ;
-
-} /* macosx_fill_buffer */
-
-
-static void
-macosx_audio_out_callback (void *user_data, AudioQueueRef audio_queue, AudioQueueBufferRef audio_buffer)
-{	MacOSXAudioData *audio_data = (MacOSXAudioData *) user_data ;
-
-	if (audio_data->queue == audio_queue)
-		macosx_fill_buffer (audio_data, audio_buffer) ;
-
-} /* macosx_audio_out_callback */
-
-
-static void
-macosx_audio_out_property_callback (void *user_data, AudioQueueRef audio_queue, AudioQueuePropertyID prop)
-{	MacOSXAudioData *audio_data = (MacOSXAudioData *) user_data ;
-
-	if (prop == kAudioQueueProperty_IsRunning)
-	{	UInt32 is_running = 0 ;
-		UInt32 is_running_size = sizeof (is_running) ;
-
-		AudioQueueGetProperty (audio_queue, kAudioQueueProperty_IsRunning, &is_running, &is_running_size) ;
-
-		if (!is_running)
-		{	audio_data->done_playing = SF_TRUE ;
-			CFRunLoopStop (CFRunLoopGetCurrent ()) ;
-			} ;
-		} ;
-} /* macosx_audio_out_property_callback */
-
-
-
-static void
-macosx_play (int argc, char *argv [])
-{	MacOSXAudioData 	audio_data ;
-	OSStatus	err ;
-	int 		i ;
-	int 		k ;
-
-	memset (&audio_data, 0x55, sizeof (audio_data)) ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&(audio_data.sfinfo), 0, sizeof (audio_data.sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-			continue ;
-			} ;
-
-		/*  fill ASBD */
-		audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-		audio_data.format.mChannelsPerFrame	= audio_data.sfinfo.channels ;
-		audio_data.format.mFormatID			= kAudioFormatLinearPCM ;
-		audio_data.format.mFormatFlags		= kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked ;
-		audio_data.format.mBytesPerPacket	= audio_data.format.mChannelsPerFrame * 2 ;
-		audio_data.format.mFramesPerPacket	= 1 ;
-		audio_data.format.mBytesPerFrame	= audio_data.format.mBytesPerPacket ;
-		audio_data.format.mBitsPerChannel	= 16 ;
-		audio_data.format.mReserved			= 0 ;
-
-		/* create the queue */
-		if ((err = AudioQueueNewOutput (&(audio_data.format), macosx_audio_out_callback, &audio_data,
-					CFRunLoopGetCurrent (), kCFRunLoopCommonModes, 0, &(audio_data.queue))) != noErr)
-		{	printf ("AudioQueueNewOutput failed\n") ;
-			return ;
-			} ;
-
-		/*  add property listener */
-		if ((err = AudioQueueAddPropertyListener (audio_data.queue, kAudioQueueProperty_IsRunning, macosx_audio_out_property_callback, &audio_data)) != noErr)
-		{	printf ("AudioQueueAddPropertyListener failed\n") ;
-			return ;
-			} ;
-
-		/*  create the buffers */
-		for (i = 0 ; i < kNumberOfAudioBuffers ; i++)
-		{	if ((err = AudioQueueAllocateBuffer (audio_data.queue, kBytesPerAudioBuffer, &audio_data.queueBuffer [i])) != noErr)
-			{	printf ("AudioQueueAllocateBuffer failed\n") ;
-				return ;
-				} ;
-
-			macosx_fill_buffer (&audio_data, audio_data.queueBuffer [i]) ;
-			} ;
-
-		audio_data.done_playing = SF_FALSE ;
-
-		/* start queue */
-		if ((err = AudioQueueStart (audio_data.queue, NULL)) != noErr)
-		{	printf ("AudioQueueStart failed\n") ;
-			return ;
-		} ;
-
-		while (audio_data.done_playing == SF_FALSE)
-			CFRunLoopRun () ;
-
-		/*  free the buffers */
-		for (i = 0 ; i < kNumberOfAudioBuffers ; i++)
-		{	if ((err = AudioQueueFreeBuffer (audio_data.queue, audio_data.queueBuffer [i])) != noErr)
-			{	printf ("AudioQueueFreeBuffer failed\n") ;
-				return ;
-				} ;
-			} ;
-
-		/*  free the queue */
-		if ((err = AudioQueueDispose (audio_data.queue, true)) != noErr)
-		{	printf ("AudioQueueDispose failed\n") ;
-			return ;
-			} ;
-
-		sf_close (audio_data.sndfile) ;
-		} ;
-
-	return ;
-} /* macosx_play, AudioQueue implementation */
-
-#endif /* OSX_DARWIN_VERSION == 11 */
-
-#if (OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10)
-/* MacOSX 10.6 or earlier, use Carbon and AudioHardware API */
-
-typedef struct
-{	AudioStreamBasicDescription		format ;
-
-	UInt32 			buf_size ;
-	AudioDeviceID 	device ;
-
-	SNDFILE 		*sndfile ;
-	SF_INFO 		sfinfo ;
-
-	int				fake_stereo ;
-	int				done_playing ;
-} MacOSXAudioData ;
-
-#include <math.h>
-
-static OSStatus
-macosx_audio_out_callback (AudioDeviceID device, const AudioTimeStamp* current_time,
-	const AudioBufferList* data_in, const AudioTimeStamp* time_in,
-	AudioBufferList*	data_out, const AudioTimeStamp* time_out,
-	void* client_data)
-{	MacOSXAudioData	*audio_data ;
-	int		size, sample_count, read_count, k ;
-	float	*buffer ;
-
-	/* Prevent compiler warnings. */
-	device = device ;
-	current_time = current_time ;
-	data_in = data_in ;
-	time_in = time_in ;
-	time_out = time_out ;
-
-	audio_data = (MacOSXAudioData*) client_data ;
-
-	size = data_out->mBuffers [0].mDataByteSize ;
-	sample_count = size / sizeof (float) ;
-
-	buffer = (float*) data_out->mBuffers [0].mData ;
-
-	if (audio_data->fake_stereo != 0)
-	{	read_count = sf_read_float (audio_data->sndfile, buffer, sample_count / 2) ;
-
-		for (k = read_count - 1 ; k >= 0 ; k--)
-		{	buffer [2 * k	] = buffer [k] ;
-			buffer [2 * k + 1] = buffer [k] ;
-			} ;
-		read_count *= 2 ;
-		}
-	else
-		read_count = sf_read_float (audio_data->sndfile, buffer, sample_count) ;
-
-	/* Fill the remainder with zeroes. */
-	if (read_count < sample_count)
-	{	if (audio_data->fake_stereo == 0)
-			memset (&(buffer [read_count]), 0, (sample_count - read_count) * sizeof (float)) ;
-		/* Tell the main application to terminate. */
-		audio_data->done_playing = SF_TRUE ;
-		} ;
-
-	return noErr ;
-} /* macosx_audio_out_callback */
-
-static void
-macosx_play (int argc, char *argv [])
-{	MacOSXAudioData 	audio_data ;
-	OSStatus	err ;
-	UInt32		count, buffer_size ;
-	int 		k ;
-
-	audio_data.fake_stereo = 0 ;
-	audio_data.device = kAudioDeviceUnknown ;
-
-	/*  get the default output device for the HAL */
-	count = sizeof (AudioDeviceID) ;
-	if ((err = AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
-				&count, (void *) &(audio_data.device))) != noErr)
-	{	printf ("AudioHardwareGetProperty (kAudioDevicePropertyDefaultOutputDevice) failed.\n") ;
-		return ;
-		} ;
-
-	/*  get the buffersize that the default device uses for IO */
-	count = sizeof (UInt32) ;
-	if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyBufferSize,
-				&count, &buffer_size)) != noErr)
-	{	printf ("AudioDeviceGetProperty (kAudioDevicePropertyBufferSize) failed.\n") ;
-		return ;
-		} ;
-
-	/*  get a description of the data format used by the default device */
-	count = sizeof (AudioStreamBasicDescription) ;
-	if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyStreamFormat,
-				&count, &(audio_data.format))) != noErr)
-	{	printf ("AudioDeviceGetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-		return ;
-		} ;
-
-	/* Base setup completed. Now play files. */
-	for (k = 1 ; k < argc ; k++)
-	{	memset (&(audio_data.sfinfo), 0, sizeof (audio_data.sfinfo)) ;
-
-		printf ("Playing %s\n", argv [k]) ;
-		if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-			continue ;
-			} ;
-
-		audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-
-		if (audio_data.sfinfo.channels == 1)
-		{	audio_data.format.mChannelsPerFrame = 2 ;
-			audio_data.fake_stereo = 1 ;
-			}
-		else
-		audio_data.format.mChannelsPerFrame = audio_data.sfinfo.channels ;
-
-		if ((err = AudioDeviceSetProperty (audio_data.device, NULL, 0, false, kAudioDevicePropertyStreamFormat,
-					sizeof (AudioStreamBasicDescription), &(audio_data.format))) != noErr)
-		{	printf ("AudioDeviceSetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-			return ;
-			} ;
-
-		/*  we want linear pcm */
-		if (audio_data.format.mFormatID != kAudioFormatLinearPCM)
-			return ;
-
-		/* Fire off the device. */
-		if ((err = AudioDeviceAddIOProc (audio_data.device, macosx_audio_out_callback,
-				(void *) &audio_data)) != noErr)
-		{	printf ("AudioDeviceAddIOProc failed.\n") ;
-			return ;
-			} ;
-
-		err = AudioDeviceStart (audio_data.device, macosx_audio_out_callback) ;
-		if	(err != noErr)
-			return ;
-
-		audio_data.done_playing = SF_FALSE ;
-
-		while (audio_data.done_playing == SF_FALSE)
-			usleep (10 * 1000) ; /* 10 000 milliseconds. */
-
-		if ((err = AudioDeviceStop (audio_data.device, macosx_audio_out_callback)) != noErr)
-		{	printf ("AudioDeviceStop failed.\n") ;
-			return ;
-			} ;
-
-		err = AudioDeviceRemoveIOProc (audio_data.device, macosx_audio_out_callback) ;
-		if (err != noErr)
-		{	printf ("AudioDeviceRemoveIOProc failed.\n") ;
-			return ;
-			} ;
-
-		sf_close (audio_data.sndfile) ;
-		} ;
-
-	return ;
-} /* macosx_play, AudioHardware implementation */
-
-#endif /* OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10 */
-
-/*------------------------------------------------------------------------------
-**	Win32 functions for playing a sound.
-**
-**	This API sucks. Its needlessly complicated and is *WAY* too loose with
-**	passing pointers arounf in integers and and using char* pointers to
-**  point to data instead of short*. It plain sucks!
-*/
-
-#if (OS_IS_WIN32 == 1)
-
-#define	WIN32_BUFFER_LEN	(1 << 15)
-
-typedef struct
-{	HWAVEOUT	hwave ;
-	WAVEHDR		whdr [2] ;
-
-	CRITICAL_SECTION	mutex ;		/* to control access to BuffersInUSe */
-	HANDLE		Event ;			/* signal that a buffer is free */
-
-	short		buffer [WIN32_BUFFER_LEN / sizeof (short)] ;
-	int			current, bufferlen ;
-	int			BuffersInUse ;
-
-	SNDFILE 	*sndfile ;
-	SF_INFO 	sfinfo ;
-
-	sf_count_t	remaining ;
-} Win32_Audio_Data ;
-
-
-static void
-win32_play_data (Win32_Audio_Data *audio_data)
-{	int thisread, readcount ;
-
-	/* fill a buffer if there is more data and we can read it sucessfully */
-	readcount = (audio_data->remaining > audio_data->bufferlen) ? audio_data->bufferlen : (int) audio_data->remaining ;
-
-	thisread = (int) sf_read_short (audio_data->sndfile, (short *) (audio_data->whdr [audio_data->current].lpData), readcount) ;
-
-	audio_data->remaining -= thisread ;
-
-	if (thisread > 0)
-	{	/* Fix buffer length if this is only a partial block. */
-		if (thisread < audio_data->bufferlen)
-			audio_data->whdr [audio_data->current].dwBufferLength = thisread * sizeof (short) ;
-
-		/* Queue the WAVEHDR */
-		waveOutWrite (audio_data->hwave, (LPWAVEHDR) &(audio_data->whdr [audio_data->current]), sizeof (WAVEHDR)) ;
-
-		/* count another buffer in use */
-		EnterCriticalSection (&audio_data->mutex) ;
-		audio_data->BuffersInUse ++ ;
-		LeaveCriticalSection (&audio_data->mutex) ;
-
-		/* use the other buffer next time */
-		audio_data->current = (audio_data->current + 1) % 2 ;
-		} ;
-
-	return ;
-} /* win32_play_data */
-
-static void CALLBACK
-win32_audio_out_callback (HWAVEOUT hwave, UINT msg, DWORD_PTR data, DWORD param1, DWORD param2)
-{	Win32_Audio_Data	*audio_data ;
-
-	/* Prevent compiler warnings. */
-	(void) hwave ;
-	(void) param1 ;
-	(void) param2 ;
-
-	if (data == 0)
-		return ;
-
-	/*
-	** I consider this technique of passing a pointer via an integer as
-	** fundamentally broken but thats the way microsoft has defined the
-	** interface.
-	*/
-	audio_data = (Win32_Audio_Data*) data ;
-
-	/* let main loop know a buffer is free */
-	if (msg == MM_WOM_DONE)
-	{	EnterCriticalSection (&audio_data->mutex) ;
-		audio_data->BuffersInUse -- ;
-		LeaveCriticalSection (&audio_data->mutex) ;
-		SetEvent (audio_data->Event) ;
-		} ;
-
-	return ;
-} /* win32_audio_out_callback */
-
-static void
-win32_play (int argc, char *argv [])
-{	Win32_Audio_Data	audio_data ;
-
-	WAVEFORMATEX wf ;
-	int	k, error ;
-
-	audio_data.sndfile = NULL ;
-	audio_data.hwave = 0 ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-
-		if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		audio_data.remaining = audio_data.sfinfo.frames * audio_data.sfinfo.channels ;
-		audio_data.current = 0 ;
-
-		InitializeCriticalSection (&audio_data.mutex) ;
-		audio_data.Event = CreateEvent (0, FALSE, FALSE, 0) ;
-
-		wf.nChannels = audio_data.sfinfo.channels ;
-		wf.wFormatTag = WAVE_FORMAT_PCM ;
-		wf.cbSize = 0 ;
-		wf.wBitsPerSample = 16 ;
-
-		wf.nSamplesPerSec = audio_data.sfinfo.samplerate ;
-
-		wf.nBlockAlign = audio_data.sfinfo.channels * sizeof (short) ;
-
-		wf.nAvgBytesPerSec = wf.nBlockAlign * wf.nSamplesPerSec ;
-
-		error = waveOutOpen (&(audio_data.hwave), WAVE_MAPPER, &wf, (DWORD_PTR) win32_audio_out_callback,
-							(DWORD_PTR) &audio_data, CALLBACK_FUNCTION) ;
-		if (error)
-		{	puts ("waveOutOpen failed.") ;
-			audio_data.hwave = 0 ;
-			continue ;
-			} ;
-
-		audio_data.whdr [0].lpData = (char*) audio_data.buffer ;
-		audio_data.whdr [1].lpData = ((char*) audio_data.buffer) + sizeof (audio_data.buffer) / 2 ;
-
-		audio_data.whdr [0].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-		audio_data.whdr [1].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-
-		audio_data.whdr [0].dwFlags = 0 ;
-		audio_data.whdr [1].dwFlags = 0 ;
-
-		/* length of each audio buffer in samples */
-		audio_data.bufferlen = sizeof (audio_data.buffer) / 2 / sizeof (short) ;
-
-		/* Prepare the WAVEHDRs */
-		if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR))))
-		{	printf ("waveOutPrepareHeader [0] failed : %08X\n", error) ;
-			waveOutClose (audio_data.hwave) ;
-			continue ;
-			} ;
-
-		if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR))))
-		{	printf ("waveOutPrepareHeader [1] failed : %08X\n", error) ;
-			waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-			waveOutClose (audio_data.hwave) ;
-			continue ;
-			} ;
-
-		/* Fill up both buffers with audio data */
-		audio_data.BuffersInUse = 0 ;
-		win32_play_data (&audio_data) ;
-		win32_play_data (&audio_data) ;
-
-		/* loop until both buffers are released */
-		while (audio_data.BuffersInUse > 0)
-		{
-			/* wait for buffer to be released */
-			WaitForSingleObject (audio_data.Event, INFINITE) ;
-
-			/* refill the buffer if there is more data to play */
-			win32_play_data (&audio_data) ;
-			} ;
-
-		waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-		waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR)) ;
-
-		waveOutClose (audio_data.hwave) ;
-		audio_data.hwave = 0 ;
-
-		DeleteCriticalSection (&audio_data.mutex) ;
-
-		sf_close (audio_data.sndfile) ;
-		} ;
-
-} /* win32_play */
-
-#endif /* Win32 */
-
-/*------------------------------------------------------------------------------
-**	OpenBDS's sndio.
-*/
-
-#if defined (HAVE_SNDIO_H)
-
-static void
-sndio_play (int argc, char *argv [])
-{	struct sio_hdl	*hdl ;
-	struct sio_par	par ;
-	short buffer [BUFFER_LEN] ;
-	SNDFILE	*sndfile ;
-	SF_INFO	sfinfo ;
-	int		k, readcount ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		if ((hdl = sio_open (NULL, SIO_PLAY, 0)) == NULL)
-		{	fprintf (stderr, "open sndio device failed") ;
-			return ;
-			} ;
-
-		sio_initpar (&par) ;
-		par.rate = sfinfo.samplerate ;
-		par.pchan = sfinfo.channels ;
-		par.bits = 16 ;
-		par.sig = 1 ;
-		par.le = SIO_LE_NATIVE ;
-
-		if (! sio_setpar (hdl, &par) || ! sio_getpar (hdl, &par))
-		{	fprintf (stderr, "set sndio params failed") ;
-			return ;
-			} ;
-
-		if (! sio_start (hdl))
-		{	fprintf (stderr, "sndio start failed") ;
-			return ;
-			} ;
-
-		while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-			sio_write (hdl, buffer, readcount * sizeof (short)) ;
-
-		sio_close (hdl) ;
-		} ;
-
-	return ;
-} /* sndio_play */
-
-#endif /* sndio */
-
-/*------------------------------------------------------------------------------
-**	Solaris.
-*/
-
-#if (defined (sun) && defined (unix)) /* ie Solaris */
-
-static void
-solaris_play (int argc, char *argv [])
-{	static short 	buffer [BUFFER_LEN] ;
-	audio_info_t	audio_info ;
-	SNDFILE			*sndfile ;
-	SF_INFO			sfinfo ;
-	unsigned long	delay_time ;
-	long			k, start_count, output_count, write_count, read_count ;
-	int				audio_fd, error, done ;
-
-	for (k = 1 ; k < argc ; k++)
-	{	printf ("Playing %s\n", argv [k]) ;
-		if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-		{	puts (sf_strerror (NULL)) ;
-			continue ;
-			} ;
-
-		if (sfinfo.channels < 1 || sfinfo.channels > 2)
-		{	printf ("Error : channels = %d.\n", sfinfo.channels) ;
-			continue ;
-			} ;
-
-		/* open the audio device - write only, non-blocking */
-		if ((audio_fd = open ("/dev/audio", O_WRONLY | O_NONBLOCK)) < 0)
-		{	perror ("open (/dev/audio) failed") ;
-			return ;
-			} ;
-
-		/*	Retrive standard values. */
-		AUDIO_INITINFO (&audio_info) ;
-
-		audio_info.play.sample_rate = sfinfo.samplerate ;
-		audio_info.play.channels = sfinfo.channels ;
-		audio_info.play.precision = 16 ;
-		audio_info.play.encoding = AUDIO_ENCODING_LINEAR ;
-		audio_info.play.gain = AUDIO_MAX_GAIN ;
-		audio_info.play.balance = AUDIO_MID_BALANCE ;
-
-		if ((error = ioctl (audio_fd, AUDIO_SETINFO, &audio_info)))
-		{	perror ("ioctl (AUDIO_SETINFO) failed") ;
-			return ;
-			} ;
-
-		/* Delay time equal to 1/4 of a buffer in microseconds. */
-		delay_time = (BUFFER_LEN * 1000000) / (audio_info.play.sample_rate * 4) ;
-
-		done = 0 ;
-		while (! done)
-		{	read_count = sf_read_short (sndfile, buffer, BUFFER_LEN) ;
-			if (read_count < BUFFER_LEN)
-			{	memset (&(buffer [read_count]), 0, (BUFFER_LEN - read_count) * sizeof (short)) ;
-				/* Tell the main application to terminate. */
-				done = SF_TRUE ;
-				} ;
-
-			start_count = 0 ;
-			output_count = BUFFER_LEN * sizeof (short) ;
-
-			while (output_count > 0)
-			{	/* write as much data as possible */
-				write_count = write (audio_fd, &(buffer [start_count]), output_count) ;
-				if (write_count > 0)
-				{	output_count -= write_count ;
-					start_count += write_count ;
-					}
-				else
-				{	/*	Give the audio output time to catch up. */
-					usleep (delay_time) ;
-					} ;
-				} ; /* while (outpur_count > 0) */
-			} ; /* while (! done) */
-
-		close (audio_fd) ;
-		} ;
-
-	return ;
-} /* solaris_play */
-
-#endif /* Solaris */
-
-/*==============================================================================
-**	Main function.
-*/
-
-int
-main (int argc, char *argv [])
-{
-	if (argc < 2)
-	{
-		printf ("\nUsage : %s <input sound file>\n\n", program_name (argv [0])) ;
-		printf ("  Using %s.\n\n", sf_version_string ()) ;
-#if (OS_IS_WIN32 == 1)
-		printf ("This is a Unix style command line application which\n"
-				"should be run in a MSDOS box or Command Shell window.\n\n") ;
-		printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-
-		Sleep (5 * 1000) ;
-#endif
-		return 1 ;
-		} ;
-
-#if defined (__ANDROID__)
-	puts ("*** Playing sound not yet supported on Android.") ;
-	puts ("*** Please feel free to submit a patch.") ;
-	return 1 ;
-#elif defined (__linux__)
-	#if HAVE_ALSA_ASOUNDLIB_H
-		if (access ("/proc/asound/cards", R_OK) == 0)
-			alsa_play (argc, argv) ;
-		else
-	#endif
-		opensoundsys_play (argc, argv) ;
-#elif defined (__FreeBSD_kernel__) || defined (__FreeBSD__)
-	opensoundsys_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__) && OSX_DARWIN_VERSION <= 11)
-	macosx_play (argc, argv) ;
-#elif defined HAVE_SNDIO_H
-	sndio_play (argc, argv) ;
-#elif (defined (sun) && defined (unix))
-	solaris_play (argc, argv) ;
-#elif (OS_IS_WIN32 == 1)
-	win32_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__) && OSX_DARWIN_VERSION > 11)
-	printf ("OS X 10.8 and later have a new Audio API.\n") ;
-	printf ("Someone needs to write code to use that API.\n") ;
-	return 1 ;
-#elif defined (__BEOS__)
-	printf ("This program cannot be compiled on BeOS.\n") ;
-	printf ("Instead, compile the file sfplay_beos.cpp.\n") ;
-	return 1 ;
-#else
-	puts ("*** Playing sound not yet supported on this platform.") ;
-	puts ("*** Please feel free to submit a patch.") ;
-	return 1 ;
-#endif
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/programs/sndfile-salvage.c b/libs/libsndfile/programs/sndfile-salvage.c
deleted file mode 100644
index db55e60edd..0000000000
--- a/libs/libsndfile/programs/sndfile-salvage.c
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<inttypes.h>
-#include	<ctype.h>
-#include	<math.h>
-#include	<errno.h>
-#include	<unistd.h>
-#include	<fcntl.h>
-#include	<sys/stat.h>
-#include	<sys/types.h>
-
-#include	<sndfile.h>
-
-#include	"common.h"
-
-#define	BUFFER_LEN		(1 << 16)
-
-#define	NOT(x)			(! (x))
-
-
-static void usage_exit (const char *progname) ;
-static void salvage_file (const char * broken_wav, const char * fixed_w64) ;
-
-int
-main (int argc, char *argv [])
-{
-	if (argc != 3)
-		usage_exit (program_name (argv [0])) ;
-
-	salvage_file (argv [1], argv [2]) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void lseek_or_die (int fd, off_t offset, int whence) ;
-static sf_count_t get_file_length (int fd, const char * name) ;
-static sf_count_t find_data_offset (int fd, int format) ;
-static void copy_data (int fd, SNDFILE * sndfile, int readsize) ;
-
-
-static void
-usage_exit (const char *progname)
-{	printf ("Usage :\n\n  %s <broken wav file> <fixed w64 file>\n\n", progname) ;
-	puts ("Salvages the audio data from WAV files which are more than 4G in length.\n") ;
-	printf ("Using %s.\n\n", sf_version_string ()) ;
-	exit (0) ;
-} /* usage_exit */
-
-static void
-salvage_file (const char * broken_wav, const char * fixed_w64)
-{	SNDFILE * sndfile ;
-	SF_INFO sfinfo ;
-	sf_count_t broken_len, data_offset ;
-	int fd, read_size ;
-
-	if (strcmp (broken_wav, fixed_w64) == 0)
-	{	printf ("Error : Input and output files must be different.\n\n") ;
-		exit (1) ;
-		} ;
-
-	if ((fd = open (broken_wav, O_RDONLY)) < 0)
-	{	printf ("Error : Not able to open file '%s' : %s\n", broken_wav, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	broken_len = get_file_length (fd, broken_wav) ;
-	if (broken_len <= 0xffffffff)
-		printf ("File is not greater than 4Gig but salvaging anyway.\n") ;
-
-	/* Grab the format info from the broken file. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	if ((sndfile = sf_open (broken_wav, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("sf_open ('%s') failed : %s\n", broken_wav, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-	sf_close (sndfile) ;
-
-	data_offset = find_data_offset (fd, sfinfo.format & SF_FORMAT_TYPEMASK) ;
-
-	printf ("Offset to audio data : %" PRId64 "\n", data_offset) ;
-
-	switch (sfinfo.format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_WAV :
-		case SF_FORMAT_WAVEX :
-			sfinfo.format = SF_FORMAT_W64 | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-			break ;
-
-		default :
-			printf ("Don't currently support this file type.\n") ;
-			exit (1) ;
-		} ;
-
-	switch (sfinfo.format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-				read_size = 1 ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-				read_size = 2 ;
-				break ;
-
-		case SF_FORMAT_PCM_24 :
-				read_size = 3 ;
-				break ;
-
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-				read_size = 4 ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				read_size = 8 ;
-				break ;
-
-		default :
-			printf ("Sorry, don't currently support this file encoding type.\n") ;
-			exit (1) ;
-		} ;
-
-	read_size *= sfinfo.channels ;
-
-	if ((sndfile = sf_open (fixed_w64, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("sf_open ('%s') failed : %s\n", broken_wav, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	lseek_or_die (fd, data_offset, SEEK_SET) ;
-
-	copy_data (fd, sndfile, read_size) ;
-
-	sf_close (sndfile) ;
-
-	puts ("Done!") ;
-} /* salvage_file */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-lseek_or_die (int fd, off_t offset, int whence)
-{
-	if (lseek (fd, offset, whence) < 0)
-	{	printf ("lseek failed : %s\n", strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* lseek_or_die */
-
-
-static sf_count_t
-get_file_length (int fd, const char * name)
-{	struct stat sbuf ;
-
-	if (sizeof (sbuf.st_size) != 8)
-	{	puts ("Error : sizeof (sbuf.st_size) != 8. Was program compiled with\n"
-				"        64 bit file offsets?\n") ;
-		exit (1) ;
-		} ;
-
-	if (fstat (fd, &sbuf) != 0)
-	{	printf ("Error : fstat ('%s') failed : %s\n", name, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	return sbuf.st_size ;
-} /* get_file_length */
-
-static sf_count_t
-find_data_offset (int fd, int format)
-{	char buffer [8192], *cptr ;
-	const char * target = "XXXX" ;
-	sf_count_t offset = -1, extra ;
-	int rlen, slen ;
-
-	switch (format)
-	{	case SF_FORMAT_WAV :
-		case SF_FORMAT_WAVEX :
-			target = "data" ;
-			extra = 8 ;
-			break ;
-
-		case SF_FORMAT_AIFF :
-			target = "SSND" ;
-			extra = 16 ;
-			break ;
-
-		default :
-			puts ("Error : Sorry, don't handle this input file format.\n") ;
-			exit (1) ;
-		} ;
-
-	slen = strlen (target) ;
-
-	lseek_or_die (fd, 0, SEEK_SET) ;
-
-	printf ("Searching for '%s' maker.\n", target) ;
-
-	if ((rlen = read (fd, buffer, sizeof (buffer))) < 0)
-	{	printf ("Error : failed read : %s\n", strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	cptr = memchr (buffer, target [0], rlen - slen) ;
-	if (cptr && memcmp (cptr, target, slen) == 0)
-		offset = cptr - buffer ;
-	else
-	{	printf ("Error : Could not find data offset.\n") ;
-		exit (1) ;
-		} ;
-
-	return offset + extra ;
-} /* find_data_offset */
-
-static void
-copy_data (int fd, SNDFILE * sndfile, int readsize)
-{	static char * buffer ;
-	sf_count_t readlen, count ;
-	int bufferlen, done = 0 ;
-
-	bufferlen = readsize * 1024 ;
-	buffer = malloc (bufferlen) ;
-
-	while (NOT (done) && (readlen = read (fd, buffer, bufferlen)) >= 0)
-	{	if (readlen < bufferlen)
-		{	readlen -= readlen % readsize ;
-			done = 1 ;
-			} ;
-
-		if ((count = sf_write_raw (sndfile, buffer, readlen)) != readlen)
-		{	printf ("Error : sf_write_raw returned %" PRId64 " : %s\n", count, sf_strerror (sndfile)) ;
-			return ;
-			} ;
-		} ;
-
-	free (buffer) ;
-
-	return ;
-} /* copy_data */
-
diff --git a/libs/libsndfile/programs/test-sndfile-metadata-set.py b/libs/libsndfile/programs/test-sndfile-metadata-set.py
deleted file mode 100644
index a21a36b3d1..0000000000
--- a/libs/libsndfile/programs/test-sndfile-metadata-set.py
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Simple test script for the sndfile-metadata-set program.
-
-import commands, os, sys
-import time, datetime
-
-def print_test_name (name):
-	print "    %-30s :" % name,
-
-def assert_info (filename, arg, value):
-	cmd = "./sndfile-metadata-get %s %s" % (arg, filename)
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	if output.find (value) < 0:
-		print "\n\nError : not able to find '%s'." % value
-		print output
-		sys.exit (1)
-	return
-
-
-def check_executable (name):
-	if not (os.path.isfile (name)):
-		print "\n\nError : Can't find executable '%s'. Have you run make?" % name
-		sys.exit (1)
-
-def test_empty_fail ():
-	print_test_name ("Empty fail test")
-	cmd = "./sndfile-metadata-set --bext-description Alpha sine.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if not status:
-		print "\n\nError : command '%s' should have failed." % cmd
-		sys.exit (1)
-	print "ok"
-
-def test_copy ():
-	print_test_name ("Copy test")
-	cmd = "./sndfile-metadata-set --bext-description \"First Try\" sine.wav output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	assert_info ("output.wav", "--bext-description", "First Try")
-	print "ok"
-
-def test_update (tests):
-	print_test_name ("Update test")
-	for arg, value in tests:
-		cmd = "./sndfile-metadata-set %s \"%s\" output.wav" % (arg, value)
-		status, output = commands.getstatusoutput (cmd)
-		if status:
-			print "\n\nError : command '%s' should not have failed." % cmd
-			sys.exit (1)
-		assert_info ("output.wav", arg, value)
-	print "ok"
-
-def test_post_mod (tests):
-	print_test_name ("Post mod test")
-	for arg, value in tests:
-		assert_info ("output.wav", arg, value)
-	print "ok"
-
-def test_auto_date ():
-	print_test_name ("Auto date test")
-	cmd = "./sndfile-metadata-set --bext-auto-time-date sine.wav date-time.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	target = datetime.date.today ().__str__ ()
-	assert_info ("date-time.wav", "--bext-orig-date", target)
-	print "ok"
-
-
-#-------------------------------------------------------------------------------
-
-def test_coding_history ():
-	print_test_name ("Coding history test")
-	cmd = "./sndfile-metadata-set --bext-coding-hist \"alpha beta\" output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	cmd = "./sndfile-metadata-get --bext-coding-hist output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	print "ok"
-
-#-------------------------------------------------------------------------------
-
-def test_rewrite ():
-	print_test_name ("Rewrite test")
-	cmd = "./sndfile-metadata-set --bext-originator \"Really, really long string\" output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	cmd = "./sndfile-metadata-set --bext-originator \"Short\" output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	cmd = "./sndfile-metadata-get --bext-originator output.wav"
-	status, output = commands.getstatusoutput (cmd)
-	if status:
-		print "\n\nError : command '%s' should not have failed." % cmd
-		sys.exit (1)
-	if output.find ("really long") > 0:
-		print "\n\nError : output '%s' should not contain 'really long'." % output
-		sys.exit (1)
-	print "ok"
-
-#===============================================================================
-
-test_dir = "programs"
-
-if os.path.isdir (test_dir):
-	os.chdir (test_dir)
-
-for f in [ "sndfile-metadata-set", "sndfile-metadata-get", "../examples/make_sine" ]:
-	check_executable (f)
-
-os.system ("../examples/make_sine")
-if not os.path.isfile ("sine.wav"):
-	print "\n\nError : Can't file file 'sine.wav'."
-	sys.exit (1)
-
-print ""
-
-test_empty_fail ()
-test_copy ()
-
-tests = [
-	("--bext-description", "Alpha"), ("--bext-originator", "Beta"), ("--bext-orig-ref", "Charlie"),
-	("--bext-umid", "Delta"), ("--bext-orig-date", "2001-10-01"),  ("--bext-orig-time", "01:02:03"),
-	("--str-title", "Echo"), ("--str-artist", "Fox trot")
-	]
-
-test_auto_date ()
-test_update (tests)
-test_post_mod (tests)
-
-test_update ([ ("--str-artist", "Fox") ])
-
-# This never worked.
-# test_coding_history ()
-
-test_rewrite ()
-
-
-print ""
-
-sys.exit (0)
-
diff --git a/libs/libsndfile/reconfigure.mk b/libs/libsndfile/reconfigure.mk
deleted file mode 100644
index 5ec5943ea8..0000000000
--- a/libs/libsndfile/reconfigure.mk
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/make -f
-
-# The auto tools MUST be run in the following order:
-#
-#	1.  aclocal
-#	2.  libtoolize (if you use libtool)
-#	3.  autoconf
-#	4.  autoheader (if you use autoheader)
-#	5.  automake (if you use automake)
-#
-# The following makefile runs these in the correct order according to their
-# dependancies. It also makes up for Mac OSX's fucked-upped-ness.
-
-ACLOCAL = aclocal
-
-ifneq ($(shell uname -s), Darwin)
-  LIBTOOLIZE = libtoolize
-else
-  # Fuck Apple! Why the hell did they rename libtoolize????
-  LIBTOOLIZE = glibtoolize
-  # Fink sucks as well, but this seems necessary.
-  ACLOCAL_INC = -I /sw/share/aclocal
-endif
-
-genfiles : config.status
-	(cd src && make genfiles)
-	(cd tests && make genfiles)
-
-config.status: configure src/config.h.in Makefile.in src/Makefile.in tests/Makefile.in
-	./configure --enable-gcc-werror
-
-configure: ltmain.sh
-	autoconf
-
-Makefile.in: Makefile.am	
-	automake --copy --add-missing
-
-src/Makefile.in: src/Makefile.am	
-	automake --copy --add-missing
-
-tests/Makefile.in: tests/Makefile.am	
-	automake --copy --add-missing
-
-src/config.h.in: configure
-	autoheader
-
-libtool ltmain.sh: aclocal.m4
-	$(LIBTOOLIZE) --copy --force
-	
-# Need to re-run aclocal whenever acinclude.m4 is modified.
-aclocal.m4: acinclude.m4
-	$(ACLOCAL) $(ACLOCAL_INC)
-
-clean:
-	rm -f libtool ltmain.sh aclocal.m4 Makefile.in src/config.h.in config.cache config.status
-	find . -name .deps -type d -exec rm -rf {} \;
-
-
-# Do not edit or modify anything in this comment block.
-# The arch-tag line is a file identity tag for the GNU Arch 
-# revision control system.
-#
-# arch-tag: 2b02bfd0-d5ed-489b-a554-2bf36903cca9
diff --git a/libs/libsndfile/regtest/Makefile.am b/libs/libsndfile/regtest/Makefile.am
deleted file mode 100644
index a87d0c4f83..0000000000
--- a/libs/libsndfile/regtest/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-bin_PROGRAMS = sndfile-regtest
-
-noinst_HEADERS = regtest.h
-
-AM_CPPFLAGS = -I$(top_srcdir)/src $(SQLITE3_CFLAGS) $(OS_SPECIFIC_CFLAGS)
-
-sndfile_regtest_SOURCES = sndfile-regtest.c database.c checksum.c
-sndfile_regtest_LDADD = $(top_builddir)/src/libsndfile.la $(SQLITE3_LIBS)
-
-CLEANFILES = *~ *.exe
diff --git a/libs/libsndfile/regtest/Readme.txt b/libs/libsndfile/regtest/Readme.txt
deleted file mode 100644
index bc038d6429..0000000000
--- a/libs/libsndfile/regtest/Readme.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-sndfile-regtest
-===============
-
-The 'sndfile-regtest' program is a regression test-suite for libsndile.
-
-This program is intended to allow anyone who has an interest in the
-reliability and correctness of libsndfile to do their own regression
-testing. From the point of view of the libsndfile developers, this
-program now allows for distributed regression testing of libsndfile
-which will make libsndfile better.
-
-
-How Does it Work
-----------------
-Anyone who wishes to take part in the distributed regression testing of
-libsndfile can download the regression test program and install it.
-
-Once installed the user can start collecting files and adding them to
-their own personal database. Then, as new versions of libsndfile come
-out, the user should test the new library version against their database
-of files (instructions below).
-
-Any files which were successfully added to the database in the past but
-now fail the check with the new library version represent a regression.
-The user should then contact the libsndfile developers so that a copy
-of the test file can be made available to the developers.
-
-
-Requirements
-------------
-The regression test program uses sqlite3 as the database engine. On
-Debian, the required packages are :
-
-    sqlite3
-	libsqlite3-0
-	libsqlite3-dev
-
-but similar packages should be available on any other Linux style
-system.
-
-The regression test currently only compiles under Unix-like systems.
-At some time in the future the regression test will distributed along
-with the libsndfile source code distribution.
-
-
-Organization of Files
----------------------
-The regession test program keeps its database file in the directory it
-is run from. In addition, the database only contains information about
-the files, not the files themselves.
-
-This means that database file should probably be kept in the same
-directory (or a directory above) the test files.
-
-
-Setting it Up for the First Time
---------------------------------
-The sndfile-regtest program should be on your PATH. You can then cd into
-the directory where you intend to keep you test files and
-run the command:
-
-        sndfile-regtest --create-db
-
-which creates a file named '.sndfile-regtest.db' in the current directory.
-
-Files can then be added to the database using the command:
-
-        sndfile-regtest --add-file file1.wav
-
-The --add-file option allows more than one file to be added at a time
-using:
-
-        sndfile-regtest --add-file file1.wav file2.aif .....
-
-
-Checking Files
---------------
-One or more files that have already been added to the database can be
-checked using:
-
-        sndfile-regtest --check-file file1.wav file2.aif .....
-
-It is also possible to check all files in the database using:
-
-        sndfile-regtest --check-all
-
-
-Running a Regression Test
--------------------------
-Once you have a collection of files and a database it is possible to test
-new versions of libsndfile before you install them. If for instance you
-have just compiled a new version of libsndfile in the directory
-/usr/src/libsndfile-X.Y.Z, then you can use an existing sndfile-regtest
-binary with the new libsndfile using something like:
-
-    LD_PRELOAD=/usr/src/libsndfile-X.Y.Z/src/.libs/libsndfile.so.X.Y.Z \
-	sndfile-regtest --check-all
-
-
-Reporting Regressions
----------------------
-Any user who finds a file which was added to the regression database with
-an earlier version of libsndfile and then fails the check with a later
-version of the library should contact the author (erikd at mega dash nerd
-dot com). If possible place the file on a web server and email the author
-a link to it.
-
-
diff --git a/libs/libsndfile/regtest/checksum.c b/libs/libsndfile/regtest/checksum.c
deleted file mode 100644
index 7f433a41c8..0000000000
--- a/libs/libsndfile/regtest/checksum.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-**	Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**	This program is free software; you can redistribute it and/or modify
-**	it under the terms of the GNU General Public License as published by
-**	the Free Software Foundation; either version 2 of the License, or
-**	(at your option) any later version.
-**
-**	This program is distributed in the hope that it will be useful,
-**	but WITHOUT ANY WARRANTY; without even the implied warranty of
-**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**	GNU General Public License for more details.
-**
-**	You should have received a copy of the GNU General Public License
-**	along with this program; if not, write to the Free Software
-**	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
-**	A simple checksum for short, int and float data.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "regtest.h"
-
-#define	BIG_PRIME		999983
-
-#define	ARRAY_LEN(x)	((int) (sizeof (x)) / (sizeof ((x) [0])))
-
-static int short_checksum (SNDFILE * file, int start) ;
-static int int_checksum (SNDFILE * file, int start) ;
-static int float_checksum (SNDFILE * file, int start) ;
-
-int
-calc_checksum (SNDFILE * file, const SF_INFO * info)
-{	int start ;
-
-	/* Seed the checksum with data from the SF_INFO struct. */
-	start = info->samplerate ;
-	start = start * BIG_PRIME + info->channels ;
-	start = start * BIG_PRIME + info->format ;
-
-	switch (info->format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			return float_checksum (file, start) ;
-
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-			return int_checksum (file, start) ;
-
-		default :
-			return short_checksum (file, start) ;
-		} ;
-
-	return 0 ;
-} /* calc_checksum */
-
-/*------------------------------------------------------------------------------
-*/
-
-static union
-{	short	s [1 << 16] ;
-	int		i [1 << 15] ;
-	float	f [1 << 15] ;
-} data ;
-
-static int
-short_checksum (SNDFILE * file, int start)
-{	int k, count ;
-
-	do
-	{	count = (int) sf_read_short (file, data.s, ARRAY_LEN (data.s)) ;
-		for (k = 0 ; k < count ; k++)
-			start = start * BIG_PRIME + data.s [k] ;
-		}
-	while (count > 0) ;
-
-	return start ;
-} /* short_checksum */
-
-static int
-int_checksum (SNDFILE * file, int start)
-{	int k, count ;
-
-	do
-	{	count = (int) sf_read_int (file, data.i, ARRAY_LEN (data.i)) ;
-		for (k = 0 ; k < count ; k++)
-			start = start * BIG_PRIME + data.i [k] ;
-		}
-	while (count > 0) ;
-
-	return start ;
-} /* int_checksum */
-
-static int
-float_checksum (SNDFILE * file, int start)
-{	int k, count ;
-
-	do
-	{	count = (int) sf_read_float (file, data.f, ARRAY_LEN (data.f)) ;
-		for (k = 0 ; k < count ; k++)
-			start = start * BIG_PRIME + lrintf (0x7FFFFFFF * data.f [k]) ;
-		}
-	while (count > 0) ;
-
-	return start ;
-} /* float_checksum */
-
diff --git a/libs/libsndfile/regtest/database.c b/libs/libsndfile/regtest/database.c
deleted file mode 100644
index f800a2c873..0000000000
--- a/libs/libsndfile/regtest/database.c
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
-**	Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**	This program is free software; you can redistribute it and/or modify
-**	it under the terms of the GNU General Public License as published by
-**	the Free Software Foundation; either version 2 of the License, or
-**	(at your option) any later version.
-**
-**	This program is distributed in the hope that it will be useful,
-**	but WITHOUT ANY WARRANTY; without even the implied warranty of
-**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**	GNU General Public License for more details.
-**
-**	You should have received a copy of the GNU General Public License
-**	along with this program; if not, write to the Free Software
-**	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "regtest.h"
-
-#if HAVE_SQLITE3
-
-#include <sqlite3.h>
-
-typedef struct
-{	sqlite3 *sql ;
-
-	int count ;
-	int ekey_max ;
-
-	/* Filename and pathname for file. */
-	char filename [256] ;
-	char pathname [512] ;
-
-	/* Storage for createding SQL commands. Must be larger than logbuf below. */
-	char cmdbuf [1 << 15] ;
-
-	/* Storage for log buffer retrieved from SNDFILE* .*/
-	char logbuf [1 << 14] ;
-
-} REGTEST_DB ;
-
-/* In checksum.c */
-int calc_checksum (SNDFILE * file, const SF_INFO * info) ;
-
-static void get_filename_pathname (REGTEST_DB * db, const char *filepath) ;
-static void single_quote_replace (char * buf) ;
-
-static int get_ekey_from_filename (REGTEST_DB * db, const char *filepath) ;
-static int get_filename_pathname_by_ekey (REGTEST_DB * db, int ekey) ;
-static int check_file_by_ekey (REGTEST_DB * db, int ekey) ;
-
-static int count_callback (REGTEST_DB * db, int argc, char **argv, char **colname) ;
-static int ekey_max_callback (REGTEST_DB * db, int argc, char **argv, char **colname) ;
-static int callback (void *unused, int argc, char **argv, char **colname) ;
-
-REG_DB *
-db_open (const char * db_name)
-{	REGTEST_DB * db ;
-	int err ;
-
-	if ((db = malloc (sizeof (REGTEST_DB))) == NULL)
-	{	perror ("malloc") ;
-		exit (1) ;
-		} ;
-
-	if ((err = sqlite3_open (db_name, &(db->sql))) != 0)
-	{	printf ("Can't open database: %s\n", sqlite3_errmsg (db->sql)) ;
-        sqlite3_close (db->sql) ;
-		free (db) ;
-		exit (1) ;
-		} ;
-
-	return (REG_DB *) db ;
-} /* db_open */
-
-int
-db_create (const char * db_name)
-{	REGTEST_DB * db ;
-	const char *cmd ;
-	char * errmsg = NULL ;
-	int err ;
-
-	db = (REGTEST_DB *) db_open (db_name) ;
-
-	cmd = "create table sndfile (ekey INTEGER PRIMARY KEY,"
-			"fname VARCHAR(1),"
-			"fpath VARCHAR(1),"
-			"srate INTEGER,"
-			"frames VARCHAR(1),"
-			"channels INTEGER,"
-			"format VARCHAR(1),"
-			"checksum VARCHAR(1),"
-			"logbuf VARCHAR(1)"
-			");" ;
-
-	err = sqlite3_exec (db->sql, cmd, callback, 0, &errmsg) ;
-	if (err != SQLITE_OK)
-		printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-
-	sqlite3_close (db->sql) ;
-	free (db) ;
-
-	return 0 ;
-} /* db_create */
-
-int
-db_close (REG_DB * db_handle)
-{	REGTEST_DB * db ;
-
-	db = (REGTEST_DB *) db_handle ;
-
-	sqlite3_close (db->sql) ;
-	free (db) ;
-
-	return 0 ;
-} /* db_close */
-
-/*==============================================================================
-*/
-
-int
-db_file_exists (REG_DB * db_handle, const char * filename)
-{	REGTEST_DB * db ;
-	const char * cptr ;
-	char * errmsg ;
-	int err ;
-
-	db = (REGTEST_DB *) db_handle ;
-
-	if ((cptr = strrchr (filename, '/')) != NULL)
-		filename = cptr + 1 ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname from sndfile where fname='%s'", filename) ;
-
-	db->count = 0 ;
-	err = sqlite3_exec (db->sql, db->cmdbuf, (sqlite3_callback) count_callback, db, &errmsg) ;
-	if (err == 0 && db->count == 1)
-		return 1 ;
-
-	return 0 ;
-} /* db_file_exists */
-
-int
-db_add_file (REG_DB * db_handle, const char * filepath)
-{	REGTEST_DB * db ;
-	SNDFILE * sndfile ;
-	SF_INFO info ;
-	char * errmsg ;
-	int err, checksum ;
-
-	db = (REGTEST_DB *) db_handle ;
-
-	get_filename_pathname (db, filepath) ;
-
-	if (db_file_exists (db_handle, filepath))
-	{	printf ("    %s : already in database\n", db->filename) ;
-		return 0 ;
-		} ;
-
-	memset (&info, 0, sizeof (info)) ;
-	sndfile = sf_open (db->pathname, SFM_READ, &info) ;
-	sf_command (sndfile, SFC_GET_LOG_INFO, db->logbuf, sizeof (db->logbuf)) ;
-	checksum = (sndfile == NULL) ? 0 : calc_checksum (sndfile, &info) ;
-	sf_close (sndfile) ;
-
-	if (sndfile == NULL)
-	{	printf ("    %s : could not open : %s\n", db->filename, sf_strerror (NULL)) ;
-		puts (db->logbuf) ;
-		return 1 ;
-		} ;
-
-	single_quote_replace (db->logbuf) ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "insert into sndfile "
-		"(fname, fpath, srate, frames, channels, format, checksum, logbuf) values"
-		"('%s','%s',%d,'%ld', %d, '0x%08x', '0x%08x', '%s');",
-		db->filename, db->pathname, info.samplerate, (long) info.frames, info.channels, info.format, checksum, db->logbuf) ;
-
-	if (strlen (db->cmdbuf) >= sizeof (db->cmdbuf) - 1)
-	{	printf ("strlen (db->cmdbuf) too long.\n") ;
-		exit (1) ;
-		} ;
-
-	err = sqlite3_exec (db->sql, db->cmdbuf, callback, 0, &errmsg) ;
-	if (err != SQLITE_OK)
-	{	printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-		puts (db->cmdbuf) ;
-		} ;
-
-	return 0 ;
-} /* db_add_file */
-
-int
-db_check_file (REG_DB * db_handle, const char * filepath)
-{	REGTEST_DB * db ;
-	int ekey ;
-
-	if (db_file_exists (db_handle, filepath) == 0)
-	{	printf ("\nFile not in database.\n\n") ;
-		exit (0) ;
-		} ;
-
-	db = (REGTEST_DB *) db_handle ;
-
-	ekey = get_ekey_from_filename (db, filepath) ;
-
-	return check_file_by_ekey (db, ekey) ;
-} /* db_check_file */
-
-/*==============================================================================
-*/
-
-int
-db_check_all (REG_DB * db_handle)
-{	REGTEST_DB * db ;
-	char * errmsg ;
-	int err, ekey ;
-
-	db = (REGTEST_DB *) db_handle ;
-
-	db->ekey_max = 0 ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select ekey from sndfile") ;
-
-	err = sqlite3_exec (db->sql, db->cmdbuf, (sqlite3_callback) ekey_max_callback, db, &errmsg) ;
-	if (err != SQLITE_OK)
-	{	printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-		puts (db->cmdbuf) ;
-		} ;
-
-	for (ekey = 1 ; ekey <= db->ekey_max ; ekey++)
-		if (get_filename_pathname_by_ekey (db, ekey) != 0)
-			check_file_by_ekey (db, ekey) ;
-
-	return 0 ;
-} /* db_check_all */
-
-
-int
-db_list_all (REG_DB * db_handle)
-{
-	printf ("%s : %p\n", __func__, db_handle) ;
-	return 0 ;
-} /* db_list_all */
-
-int
-db_del_entry (REG_DB * db_handle, const char * entry)
-{
-	printf ("%s : %p %s\n", __func__, db_handle, entry) ;
-	return 0 ;
-} /* db_del_entry */
-
-/*==============================================================================
-*/
-
-static int
-get_ekey_from_filename (REGTEST_DB * db, const char *filepath)
-{	char * errmsg, **result ;
-	int err, ekey = 0, rows, cols ;
-
-	get_filename_pathname (db, filepath) ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select ekey from sndfile where fname='%s'", db->filename) ;
-
-	err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-	if (err != SQLITE_OK)
-	{	printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-		puts (db->cmdbuf) ;
-		} ;
-
-	if (cols != 1 || rows != 1)
-	{	printf ("Bad juju!! rows = %d cols = %d\n", rows, cols) ;
-		exit (1) ;
-		} ;
-
-	ekey = strtol (result [1], NULL, 10) ;
-
-	sqlite3_free_table (result) ;
-
-	return ekey ;
-} /* get_ekey_from_filename */
-
-static int
-get_filename_pathname_by_ekey (REGTEST_DB * db, int ekey)
-{	char *errmsg, **result ;
-	int err, rows, cols ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname,fpath from sndfile where ekey='%d'", ekey) ;
-
-	err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-	if (err != SQLITE_OK)
-	{	printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-		puts (db->cmdbuf) ;
-		return 0 ;
-		} ;
-
-	if (cols != 2 || rows != 1)
-	{	printf ("\nError (%s %d) : rows = %d cols = %d\n", __func__, __LINE__, rows, cols) ;
-		exit (1) ;
-		} ;
-
-	snprintf (db->filename, sizeof (db->filename), "%s", result [2]) ;
-	snprintf (db->pathname, sizeof (db->pathname), "%s", result [3]) ;
-
-	sqlite3_free_table (result) ;
-
-	return 1 ;
-} /* get_filename_pathname_by_ekey */
-
-static int
-check_file_by_ekey (REGTEST_DB * db, int ekey)
-{	SNDFILE * sndfile ;
-	SF_INFO info ;
-	char * errmsg, **result ;
-	int err, k, rows, cols, checksum ;
-
-	printf ("    %s : ", db->filename) ;
-	fflush (stdout) ;
-
-	memset (&info, 0, sizeof (info)) ;
-	sndfile = sf_open (db->pathname, SFM_READ, &info) ;
-	sf_command (sndfile, SFC_GET_LOG_INFO, db->logbuf, sizeof (db->logbuf)) ;
-	checksum = (sndfile == NULL) ? 0 : calc_checksum (sndfile, &info) ;
-	sf_close (sndfile) ;
-
-	if (sndfile == NULL)
-	{	printf ("\n\nError : Could not open '%s' : %s\n", db->pathname, sf_strerror (NULL)) ;
-		puts (db->logbuf) ;
-		exit (1) ;
-		} ;
-
-	single_quote_replace (db->logbuf) ;
-
-	snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname,srate,frames,channels,format,"
-			"checksum,logbuf from sndfile where ekey='%d'", ekey) ;
-
-	err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-	if (err != SQLITE_OK)
-	{	printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-		puts (db->cmdbuf) ;
-		} ;
-
-	for (k = 0 ; k < cols ; k++)
-	{	if (strcmp (result [k], "fname") == 0)
-		{	if (strcmp (result [k + cols], db->filename) == 0)
-				continue ;
-			printf ("\n\nError : fname doesn't match : %s != %s\n", result [k + cols], db->filename) ;
-			} ;
-
-		if (strcmp (result [k], "srate") == 0)
-		{	if (strtol (result [k + cols], NULL, 10) == info.samplerate)
-				continue ;
-			printf ("\n\nError : srate doesn't match : %s == %d\n", result [k + cols], info.samplerate) ;
-			} ;
-
-		if (strcmp (result [k], "frames") == 0)
-		{	if (strtoll (result [k + cols], NULL, 10) == info.frames)
-				continue ;
-			printf ("\n\nError : frames doesn't match : %s == %ld\n", result [k + cols], (long) info.frames) ;
-			} ;
-
-		if (strcmp (result [k], "channels") == 0)
-		{	if (strtol (result [k + cols], NULL, 10) == info.channels)
-				continue ;
-			printf ("\n\nError : channels doesn't match : %s == %d\n", result [k + cols], info.channels) ;
-			} ;
-
-		if (strcmp (result [k], "format") == 0)
-		{	if (strtol (result [k + cols], NULL, 16) == info.format)
-				continue ;
-			printf ("\n\nError : format doesn't match : %s == 0x%08x\n", result [k + cols], info.format) ;
-			} ;
-
-		if (strcmp (result [k], "checksum") == 0)
-		{	int db_val = (int) strtoll (result [k + cols], NULL, 16) ;
-
-			if (db_val == checksum)
-				continue ;
-			printf ("\n\nError : checksum doesn't match : 0x%08x == 0x%08x\n", db_val, checksum) ;
-			} ;
-
-		if (strcmp (result [k], "logbuf") == 0)
-			continue ;
-
-		printf ("\nHere is the old logubuffer :\n\n%s\n\nand the new :\n\n%s\n\n", result [2 * cols - 1], db->logbuf) ;
-		exit (1) ;
-		} ;
-
-	sqlite3_free_table (result) ;
-
-	puts ("ok") ;
-
-	return 0 ;
-} /* check_file_by_ekey */
-
-/*==============================================================================
-*/
-
-static void
-get_filename_pathname (REGTEST_DB * db, const char *filepath)
-{	const char * cptr ;
-	int slen ;
-
-	if (filepath [0] != '/')
-	{	memset (db->pathname, 0, sizeof (db->pathname)) ;
-		if (getcwd (db->pathname, sizeof (db->pathname)) == NULL)
-		{	perror ("\ngetcwd failed") ;
-			exit (1) ;
-			} ;
-
-		slen = strlen (db->pathname) ;
-		db->pathname [slen ++] = '/' ;
-		snprintf (db->pathname + slen, sizeof (db->pathname) - slen, "%s", filepath) ;
-		}
-	else
-		snprintf (db->pathname, sizeof (db->pathname), "%s", filepath) ;
-
-	if ((cptr = strrchr (db->pathname, '/')) == NULL)
-	{	printf ("\nError : bad pathname %s\n", filepath) ;
-		exit (1) ;
-		} ;
-
-	snprintf (db->filename, sizeof (db->filename), "%s", cptr + 1) ;
-} /* get filename_pathname */
-
-static void
-single_quote_replace (char * buf)
-{	while ((buf = strchr (buf, '\'')) != 0)
-		buf [0] = '"' ;
-} /* single_quote_replace */
-
-static int
-count_callback (REGTEST_DB * db, int argc, char **argv, char **colname)
-{	db->count ++ ;
-
-	(void) argc ;
-	(void) argv ;
-	(void) colname ;
-	return 0 ;
-} /* count_callback */
-
-static int
-ekey_max_callback (REGTEST_DB * db, int argc, char **argv, char **unused)
-{	int ekey ;
-
-	(void) argc ;
-	(void) unused ;
-
-	ekey = strtol (argv [0], NULL, 10) ;
-	if (ekey > db->ekey_max)
-		db->ekey_max = ekey ;
-
-	return 0 ;
-} /* ekey_max_callback */
-
-static int
-callback (void *unused, int argc, char **argv, char **colname)
-{	int k ;
-
-	(void) unused ;
-
-	for (k = 0 ; k < argc ; k++)
-		printf ("%s = %s\n", colname [k], argv [k] ? argv [k] : "NULL") ;
-
-	printf ("\n") ;
-
-	return 0 ;
-} /* callback */
-
-#else
-
-int dummy (void) ;
-
-int
-dummy (void)
-{	/*
-	**	Empty dummy fnction so tha compiler doesn't winge about an
-	**	empty file.
-	*/
-	return 0 ;
-} /* dummy */
-
-#endif
diff --git a/libs/libsndfile/regtest/regtest.h b/libs/libsndfile/regtest/regtest.h
deleted file mode 100644
index 567d97be28..0000000000
--- a/libs/libsndfile/regtest/regtest.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-**	Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**	This program is free software; you can redistribute it and/or modify
-**	it under the terms of the GNU General Public License as published by
-**	the Free Software Foundation; either version 2 of the License, or
-**	(at your option) any later version.
-**
-**	This program is distributed in the hope that it will be useful,
-**	but WITHOUT ANY WARRANTY; without even the implied warranty of
-**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**	GNU General Public License for more details.
-**
-**	You should have received a copy of the GNU General Public License
-**	along with this program; if not, write to the Free Software
-**	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-typedef struct REG_DB_tag REG_DB ;
-
-/* In database.c */
-REG_DB * db_open (const char * db_name) ;
-
-int db_create (const char * dbname) ;
-
-int db_close (REG_DB * db_handle) ;
-
-int db_file_exists (REG_DB * db_handle, const char * filename) ;
-int db_add_file (REG_DB * db_handle, const char * filename) ;
-int db_check_file (REG_DB * db_handle, const char * filename) ;
-
-int db_list_all (REG_DB * db_handle) ;
-int db_check_all (REG_DB * db_handle) ;
-int db_del_entry (REG_DB * db_handle, const char * entry) ;
-
-/* In checksum.c */
-int calc_checksum (SNDFILE * file, const SF_INFO * info) ;
-
diff --git a/libs/libsndfile/regtest/sndfile-regtest.c b/libs/libsndfile/regtest/sndfile-regtest.c
deleted file mode 100644
index a28caa2d84..0000000000
--- a/libs/libsndfile/regtest/sndfile-regtest.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-**	Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**	This program is free software; you can redistribute it and/or modify
-**	it under the terms of the GNU General Public License as published by
-**	the Free Software Foundation; either version 2 of the License, or
-**	(at your option) any later version.
-**
-**	This program is distributed in the hope that it will be useful,
-**	but WITHOUT ANY WARRANTY; without even the implied warranty of
-**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**	GNU General Public License for more details.
-**
-**	You should have received a copy of the GNU General Public License
-**	along with this program; if not, write to the Free Software
-**	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sndfile.h>
-
-#if HAVE_SQLITE3
-
-#include "regtest.h"
-
-enum
-{	OPT_ADD_FILE	= 0x0100,
-	OPT_CREATE_DB	= 0x0200,
-	OPT_DEL_ENTRY	= 0x0400,
-	OPT_LIST_ALL	= 0x0800,
-	OPT_TEST_ALL	= 0x1000,
-	OPT_VERBOSE		= 0x2000
-} ;
-
-static void print_libsndfile_version (void) ;
-
-int
-main (int argc, char * argv [])
-{	const char *db_name = "./.sndfile-regtest.db" ;
-	REG_DB *reg_db ;
-	int k, retval ;
-
-	if (argc < 2)
-	{	printf ("\nUsage message goes here.\n\n") ;
-		exit (0) ;
-		} ;
-
-	if (argc == 2 && strcmp (argv [1], "--create-db") == 0)
-		return db_create (db_name) ;
-
-	reg_db = db_open (db_name) ;
-
-	if (argc == 2)
-	{	if (strcmp (argv [1], "--list-all") == 0)
-			return db_list_all (reg_db) ;
-
-		if (strcmp (argv [1], "--check-all") == 0)
-		{	print_libsndfile_version () ;
-			retval = db_check_all (reg_db) ;
-			puts ("\nDone.\n") ;
-			return retval ;
-			} ;
-		} ;
-
-	if (argc == 3 && strcmp (argv [1], "--del-entry") == 0)
-	{	db_del_entry (reg_db, argv [2]) ;
-		db_close (reg_db) ;
-		return 0 ;
-		} ;
-
-	if (strcmp (argv [1], "--check-file") == 0)
-	{	print_libsndfile_version () ;
-
-		for (k = 2 ; k < argc ; k++)
-			db_check_file (reg_db, argv [k]) ;
-		db_close (reg_db) ;
-		return 0 ;
-		} ;
-
-	if (strcmp (argv [1], "--add-file") == 0)
-	{	print_libsndfile_version () ;
-
-		for (k = 2 ; k < argc ; k++)
-			db_add_file (reg_db, argv [k]) ;
-		db_close (reg_db) ;
-		return 0 ;
-		} ;
-
-	printf ("\nError : unhandled command line args :") ;
-	for (k = 1 ; k < argc ; k++)
-		printf (" %s", argv [k]) ;
-	puts ("\n") ;
-
-	return 1 ;
-} /* main */
-
-static void
-print_libsndfile_version (void)
-{	char version [64] ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, version, sizeof (version)) ;
-	printf ("\nsndfile-regtest : using %s\n\n", version) ;
-} /* print_lib_version */
-
-#else
-
-int
-main (void)
-{
-	puts ("\nThis program was not compiled with libsqlite3 and hence doesn't work.\n") ;
-
-	return 0 ;
-} /* main */
-
-#endif
-
diff --git a/libs/libsndfile/sndfile.pc.in b/libs/libsndfile/sndfile.pc.in
deleted file mode 100644
index 28269c19eb..0000000000
--- a/libs/libsndfile/sndfile.pc.in
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: sndfile
-Description: A library for reading and writing audio files
-Requires: 
-Version: @VERSION@
-Libs: -L${libdir} -lsndfile
-Libs.private: @EXTERNAL_LIBS@
-Cflags: -I${includedir} 
diff --git a/libs/libsndfile/src/ALAC/ALACAudioTypes.h b/libs/libsndfile/src/ALAC/ALACAudioTypes.h
deleted file mode 100644
index 4d120fa5e4..0000000000
--- a/libs/libsndfile/src/ALAC/ALACAudioTypes.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ALACAudioTypes.h
-*/
-
-#ifndef ALACAUDIOTYPES_H
-#define ALACAUDIOTYPES_H
-
-/* Force these Mac OS specific things to zero. */
-#define PRAGMA_STRUCT_ALIGN 0
-#define PRAGMA_STRUCT_PACKPUSH 0
-#define PRAGMA_STRUCT_PACK 0
-#define PRAGMA_ONCE 0
-#define PRAGMA_MARK 0
-
-
-#if PRAGMA_ONCE
-#pragma once
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-#include "sfendian.h"
-
-#if CPU_IS_BIG_ENDIAN == 1
-#define TARGET_RT_BIG_ENDIAN 1
-#else
-#define TARGET_RT_BIG_ENDIAN 0
-#endif
-
-#define kChannelAtomSize 12
-
-enum
-{
-    kALAC_UnimplementedError   = -4,
-    kALAC_FileNotFoundError    = -43,
-    kALAC_ParamError           = -50,
-    kALAC_MemFullError         = -108,
-    fALAC_FrameLengthError     = -666,
-};
-
-enum
-{
-    kALACFormatAppleLossless = MAKE_MARKER ('a', 'l', 'a', 'c'),
-    kALACFormatLinearPCM = MAKE_MARKER ('l', 'p', 'c', 'm')
-};
-
-enum
-{
-    kALACMaxChannels	= 8,
-    kALACMaxEscapeHeaderBytes = 8,
-    kALACMaxSearches	= 16,
-    kALACMaxCoefs		= 16,
-    kALACDefaultFramesPerPacket = 4096
-};
-
-typedef uint32_t ALACChannelLayoutTag;
-
-enum
-{
-    kALACFormatFlagIsFloat                     = (1 << 0),     // 0x1
-    kALACFormatFlagIsBigEndian                 = (1 << 1),     // 0x2
-    kALACFormatFlagIsSignedInteger             = (1 << 2),     // 0x4
-    kALACFormatFlagIsPacked                    = (1 << 3),     // 0x8
-    kALACFormatFlagIsAlignedHigh               = (1 << 4),     // 0x10
-};
-
-enum
-{
-#if TARGET_RT_BIG_ENDIAN
-    kALACFormatFlagsNativeEndian       = kALACFormatFlagIsBigEndian
-#else
-    kALACFormatFlagsNativeEndian       = 0
-#endif
-};
-
-// this is required to be an IEEE 64bit float
-typedef double alac_float64_t;
-
-// These are the Channel Layout Tags used in the Channel Layout Info portion of the ALAC magic cookie
-enum
-{
-    kALACChannelLayoutTag_Mono          = (100<<16) | 1,    // C
-    kALACChannelLayoutTag_Stereo        = (101<<16) | 2,	// L R
-    kALACChannelLayoutTag_MPEG_3_0_B    = (113<<16) | 3,	// C L R
-    kALACChannelLayoutTag_MPEG_4_0_B    = (116<<16) | 4,	// C L R Cs
-    kALACChannelLayoutTag_MPEG_5_0_D    = (120<<16) | 5,    // C L R Ls Rs
-    kALACChannelLayoutTag_MPEG_5_1_D    = (124<<16) | 6,	// C L R Ls Rs LFE
-    kALACChannelLayoutTag_AAC_6_1       = (142<<16) | 7,	// C L R Ls Rs Cs LFE
-    kALACChannelLayoutTag_MPEG_7_1_B	= (127<<16) | 8     // C Lc Rc L R Ls Rs LFE    (doc: IS-13818-7 MPEG2-AAC)
-};
-
-// ALAC currently only utilizes these channels layouts. There is a one for one correspondance between a
-// given number of channels and one of these layout tags
-static const ALACChannelLayoutTag	ALACChannelLayoutTags[kALACMaxChannels] =
-{
-    kALACChannelLayoutTag_Mono,         // C
-    kALACChannelLayoutTag_Stereo,		// L R
-    kALACChannelLayoutTag_MPEG_3_0_B,	// C L R
-    kALACChannelLayoutTag_MPEG_4_0_B,	// C L R Cs
-    kALACChannelLayoutTag_MPEG_5_0_D,	// C L R Ls Rs
-    kALACChannelLayoutTag_MPEG_5_1_D,	// C L R Ls Rs LFE
-    kALACChannelLayoutTag_AAC_6_1,		// C L R Ls Rs Cs LFE
-    kALACChannelLayoutTag_MPEG_7_1_B	// C Lc Rc L R Ls Rs LFE    (doc: IS-13818-7 MPEG2-AAC)
-};
-
-// AudioChannelLayout from CoreAudioTypes.h. We never need the AudioChannelDescription so we remove it
-struct ALACAudioChannelLayout
-{
-    ALACChannelLayoutTag          mChannelLayoutTag;
-    uint32_t                      mChannelBitmap;
-    uint32_t                      mNumberChannelDescriptions;
-};
-typedef struct ALACAudioChannelLayout ALACAudioChannelLayout;
-
-struct AudioFormatDescription
-{
-    alac_float64_t mSampleRate;
-    uint32_t  mFormatID;
-    uint32_t  mFormatFlags;
-    uint32_t  mBytesPerPacket;
-    uint32_t  mFramesPerPacket;
-    uint32_t  mBytesPerFrame;
-    uint32_t  mChannelsPerFrame;
-    uint32_t  mBitsPerChannel;
-    uint32_t  mReserved;
-};
-typedef struct AudioFormatDescription  AudioFormatDescription;
-
-/* Lossless Definitions */
-
-enum
-{
-	kALACCodecFormat		= MAKE_MARKER ('a', 'l', 'a', 'c'),
-	kALACVersion			= 0,
-	kALACCompatibleVersion	= kALACVersion,
-	kALACDefaultFrameSize	= 4096
-};
-
-// note: this struct is wrapped in an 'alac' atom in the sample description extension area
-// note: in QT movies, it will be further wrapped in a 'wave' atom surrounded by 'frma' and 'term' atoms
-typedef struct ALACSpecificConfig
-{
-	uint32_t				frameLength;
-	uint8_t					compatibleVersion;
-	uint8_t					bitDepth;							// max 32
-	uint8_t					pb;									// 0 <= pb <= 255
-	uint8_t					mb;
-	uint8_t					kb;
-	uint8_t					numChannels;
-	uint16_t				maxRun;
-	uint32_t				maxFrameBytes;
-	uint32_t				avgBitRate;
-	uint32_t				sampleRate;
-
-} ALACSpecificConfig;
-
-
-// The AudioChannelLayout atom type is not exposed yet so define it here
-enum
-{
-	AudioChannelLayoutAID = MAKE_MARKER ('c', 'h', 'a', 'n')
-};
-
-#if PRAGMA_STRUCT_ALIGN
-    #pragma options align=reset
-#elif PRAGMA_STRUCT_PACKPUSH
-    #pragma pack(pop)
-#elif PRAGMA_STRUCT_PACK
-    #pragma pack()
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* ALACAUDIOTYPES_H */
diff --git a/libs/libsndfile/src/ALAC/ALACBitUtilities.c b/libs/libsndfile/src/ALAC/ALACBitUtilities.c
deleted file mode 100644
index f385daff0c..0000000000
--- a/libs/libsndfile/src/ALAC/ALACBitUtilities.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*=============================================================================
-    File:		ALACBitUtilities.c
-
-	$NoKeywords: $
-=============================================================================*/
-
-#include <stdio.h>
-#include "ALACBitUtilities.h"
-
-#define PRAGMA_MARK 0
-
-// BitBufferInit
-//
-void BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize )
-{
-	bits->cur		= buffer;
-	bits->end		= bits->cur + byteSize;
-	bits->bitIndex	= 0;
-	bits->byteSize	= byteSize;
-}
-
-// BitBufferRead
-//
-uint32_t BitBufferRead( BitBuffer * bits, uint8_t numBits )
-{
-	uint32_t		returnBits;
-
-	//Assert( numBits <= 16 );
-
-	returnBits = ((uint32_t)bits->cur[0] << 16) | ((uint32_t)bits->cur[1] << 8) | ((uint32_t)bits->cur[2]);
-	returnBits = returnBits << bits->bitIndex;
-	returnBits &= 0x00FFFFFF;
-
-	bits->bitIndex += numBits;
-
-	returnBits = returnBits >> (24 - numBits);
-
-	bits->cur		+= (bits->bitIndex >> 3);
-	bits->bitIndex	&= 7;
-
-	//Assert( bits->cur <= bits->end );
-
-	return returnBits;
-}
-
-// BitBufferReadSmall
-//
-// Reads up to 8 bits
-uint8_t BitBufferReadSmall( BitBuffer * bits, uint8_t numBits )
-{
-	uint16_t		returnBits;
-
-	//Assert( numBits <= 8 );
-
-	returnBits = (bits->cur[0] << 8) | bits->cur[1];
-	returnBits = returnBits << bits->bitIndex;
-
-	bits->bitIndex += numBits;
-
-	returnBits = returnBits >> (16 - numBits);
-
-	bits->cur		+= (bits->bitIndex >> 3);
-	bits->bitIndex	&= 7;
-
-	//Assert( bits->cur <= bits->end );
-
-	return (uint8_t)returnBits;
-}
-
-// BitBufferReadOne
-//
-// Reads one byte
-uint8_t BitBufferReadOne( BitBuffer * bits )
-{
-	uint8_t		returnBits;
-
-	returnBits = (bits->cur[0] >> (7 - bits->bitIndex)) & 1;
-
-	bits->bitIndex++;
-
-	bits->cur		+= (bits->bitIndex >> 3);
-	bits->bitIndex	&= 7;
-
-	//Assert( bits->cur <= bits->end );
-
-	return returnBits;
-}
-
-// BitBufferPeek
-//
-uint32_t BitBufferPeek( BitBuffer * bits, uint8_t numBits )
-{
-	return ((((((uint32_t) bits->cur[0] << 16) | ((uint32_t) bits->cur[1] << 8) |
-			((uint32_t) bits->cur[2])) << bits->bitIndex) & 0x00FFFFFF) >> (24 - numBits));
-}
-
-// BitBufferPeekOne
-//
-uint32_t BitBufferPeekOne( BitBuffer * bits )
-{
-	return ((bits->cur[0] >> (7 - bits->bitIndex)) & 1);
-}
-
-// BitBufferUnpackBERSize
-//
-uint32_t BitBufferUnpackBERSize( BitBuffer * bits )
-{
-	uint32_t		size;
-	uint8_t		tmp;
-
-	for ( size = 0, tmp = 0x80u; tmp &= 0x80u; size = (size << 7u) | (tmp & 0x7fu) )
-		tmp = (uint8_t) BitBufferReadSmall( bits, 8 );
-
-	return size;
-}
-
-// BitBufferGetPosition
-//
-uint32_t BitBufferGetPosition( BitBuffer * bits )
-{
-	uint8_t *		begin;
-
-	begin = bits->end - bits->byteSize;
-
-	return ((uint32_t)(bits->cur - begin) * 8) + bits->bitIndex;
-}
-
-// BitBufferByteAlign
-//
-void BitBufferByteAlign( BitBuffer * bits, int32_t addZeros )
-{
-	// align bit buffer to next byte boundary, writing zeros if requested
-	if ( bits->bitIndex == 0 )
-		return;
-
-	if ( addZeros )
-		BitBufferWrite( bits, 0, 8 - bits->bitIndex );
-	else
-		BitBufferAdvance( bits, 8 - bits->bitIndex );
-}
-
-// BitBufferAdvance
-//
-void BitBufferAdvance( BitBuffer * bits, uint32_t numBits )
-{
-	if ( numBits )
-	{
-		bits->bitIndex += numBits;
-		bits->cur += (bits->bitIndex >> 3);
-		bits->bitIndex &= 7;
-	}
-}
-
-// BitBufferRewind
-//
-void BitBufferRewind( BitBuffer * bits, uint32_t numBits )
-{
-	uint32_t	numBytes;
-
-	if ( numBits == 0 )
-		return;
-
-	if ( bits->bitIndex >= numBits )
-	{
-		bits->bitIndex -= numBits;
-		return;
-	}
-
-	numBits -= bits->bitIndex;
-	bits->bitIndex = 0;
-
-	numBytes	= numBits / 8;
-	numBits		= numBits % 8;
-
-	bits->cur -= numBytes;
-
-	if ( numBits > 0 )
-	{
-		bits->bitIndex = 8 - numBits;
-		bits->cur--;
-	}
-
-	if ( bits->cur < (bits->end - bits->byteSize) )
-	{
-		//DebugCMsg("BitBufferRewind: Rewound too far.");
-
-		bits->cur		= (bits->end - bits->byteSize);
-		bits->bitIndex	= 0;
-	}
-}
-
-// BitBufferWrite
-//
-void BitBufferWrite( BitBuffer * bits, uint32_t bitValues, uint32_t numBits )
-{
-	uint32_t				invBitIndex;
-
-	RequireAction( bits != NULL, return; );
-	RequireActionSilent( numBits > 0, return; );
-
-	invBitIndex = 8 - bits->bitIndex;
-
-	while ( numBits > 0 )
-	{
-		uint32_t		tmp;
-		uint8_t		shift;
-		uint8_t		mask;
-		uint32_t		curNum;
-
-		curNum = MIN( invBitIndex, numBits );
-
-		tmp = bitValues >> (numBits - curNum);
-
-		shift  = (uint8_t)(invBitIndex - curNum);
-		mask   = 0xffu >> (8 - curNum);		// must be done in two steps to avoid compiler sequencing ambiguity
-		mask <<= shift;
-
-		bits->cur[0] = (bits->cur[0] & ~mask) | (((uint8_t) tmp << shift)  & mask);
-		numBits -= curNum;
-
-		// increment to next byte if need be
-		invBitIndex -= curNum;
-		if ( invBitIndex == 0 )
-		{
-			invBitIndex = 8;
-			bits->cur++;
-		}
-	}
-
-	bits->bitIndex = 8 - invBitIndex;
-}
-
-void	BitBufferReset( BitBuffer * bits )
-//void BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize )
-{
-	bits->cur		= bits->end - bits->byteSize;
-    bits->bitIndex	= 0;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
diff --git a/libs/libsndfile/src/ALAC/ALACBitUtilities.h b/libs/libsndfile/src/ALAC/ALACBitUtilities.h
deleted file mode 100644
index 5d3a4c1433..0000000000
--- a/libs/libsndfile/src/ALAC/ALACBitUtilities.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*=============================================================================
-    File:		ALACBitUtilities.h
-
-	$NoKeywords: $
-=============================================================================*/
-
-#ifndef __ALACBITUTILITIES_H
-#define __ALACBITUTILITIES_H
-
-#include <stdint.h>
-
-#ifndef MIN
-#define MIN(x, y) 			( (x)<(y) ?(x) :(y) )
-#endif //MIN
-#ifndef MAX
-#define MAX(x, y) 			( (x)>(y) ?(x): (y) )
-#endif //MAX
-
-#define RequireAction(condition, action)			if (!(condition)) { action }
-#define RequireActionSilent(condition, action)			if (!(condition)) { action }
-#define RequireNoErr(condition, action)			if ((condition)) { action }
-
-enum
-{
-    ALAC_noErr = 0
-};
-
-
-typedef enum
-{
-
-    ID_SCE = 0,						/* Single Channel Element   */
-    ID_CPE = 1,						/* Channel Pair Element     */
-    ID_CCE = 2,						/* Coupling Channel Element */
-    ID_LFE = 3,						/* LFE Channel Element      */
-    ID_DSE = 4,						/* not yet supported        */
-    ID_PCE = 5,
-    ID_FIL = 6,
-    ID_END = 7
-} ELEMENT_TYPE;
-
-// types
-typedef struct BitBuffer
-{
-	uint8_t *		cur;
-	uint8_t *		end;
-	uint32_t		bitIndex;
-	uint32_t		byteSize;
-
-} BitBuffer;
-
-/*
-	BitBuffer routines
-	- these routines take a fixed size buffer and read/write to it
-	- bounds checking must be done by the client
-*/
-void	BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize );
-uint32_t	BitBufferRead( BitBuffer * bits, uint8_t numBits );   // note: cannot read more than 16 bits at a time
-uint8_t	BitBufferReadSmall( BitBuffer * bits, uint8_t numBits );
-uint8_t	BitBufferReadOne( BitBuffer * bits );
-uint32_t	BitBufferPeek( BitBuffer * bits, uint8_t numBits );   // note: cannot read more than 16 bits at a time
-uint32_t	BitBufferPeekOne( BitBuffer * bits );
-uint32_t	BitBufferUnpackBERSize( BitBuffer * bits );
-uint32_t	BitBufferGetPosition( BitBuffer * bits );
-void	BitBufferByteAlign( BitBuffer * bits, int32_t addZeros );
-void	BitBufferAdvance( BitBuffer * bits, uint32_t numBits );
-void	BitBufferRewind( BitBuffer * bits, uint32_t numBits );
-void	BitBufferWrite( BitBuffer * bits, uint32_t value, uint32_t numBits );
-void	BitBufferReset( BitBuffer * bits);
-
-#endif	/* __BITUTILITIES_H */
diff --git a/libs/libsndfile/src/ALAC/ALACDecoder.h b/libs/libsndfile/src/ALAC/ALACDecoder.h
deleted file mode 100644
index baebd4fac4..0000000000
--- a/libs/libsndfile/src/ALAC/ALACDecoder.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ALACDecoder.h
-*/
-
-#ifndef _ALACDECODER_H
-#define _ALACDECODER_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-struct BitBuffer;
-
-class ALACDecoder
-{
-	public:
-		ALACDecoder();
-		~ALACDecoder();
-
-		int32_t	Init( void * inMagicCookie, uint32_t inMagicCookieSize );
-		int32_t	Decode( struct BitBuffer * bits, uint8_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples );
-
-	public:
-		// decoding parameters (public for use in the analyzer)
-		ALACSpecificConfig		mConfig;
-
-	protected:
-		int32_t	FillElement( struct BitBuffer * bits );
-		int32_t	DataStreamElement( struct BitBuffer * bits );
-
-		uint16_t					mActiveElements;
-
-		// decoding buffers
-		int32_t *				mMixBufferU;
-		int32_t *				mMixBufferV;
-		int32_t *				mPredictor;
-		uint16_t *				mShiftBuffer;	// note: this points to mPredictor's memory but different
-												//		 variable for clarity and type difference
-};
-
-#endif	/* _ALACDECODER_H */
diff --git a/libs/libsndfile/src/ALAC/ALACEncoder.h b/libs/libsndfile/src/ALAC/ALACEncoder.h
deleted file mode 100644
index 75a0a43721..0000000000
--- a/libs/libsndfile/src/ALAC/ALACEncoder.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ALACEncoder.h
-*/
-
-#pragma once
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-
-struct BitBuffer;
-
-class ALACEncoder
-{
-	public:
-		ALACEncoder();
-		virtual ~ALACEncoder();
-
-		virtual int32_t	Encode(AudioFormatDescription theInputFormat, AudioFormatDescription theOutputFormat,
-                                   unsigned char * theReadBuffer, unsigned char * theWriteBuffer, int32_t * ioNumBytes);
-		virtual int32_t	Finish( );
-
-		void				SetFastMode( bool fast ) { mFastMode = fast; };
-
-		// this must be called *before* InitializeEncoder()
-		void				SetFrameSize( uint32_t frameSize ) { mFrameSize = frameSize; };
-
-		void				GetConfig( ALACSpecificConfig & config );
-        uint32_t            GetMagicCookieSize(uint32_t inNumChannels);
-        void				GetMagicCookie( void * config, uint32_t * ioSize );
-
-        virtual int32_t	InitializeEncoder(AudioFormatDescription theOutputFormat);
-
-    protected:
-		virtual void		GetSourceFormat( const AudioFormatDescription * source, AudioFormatDescription * output );
-
-		int32_t			EncodeStereo( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-		int32_t			EncodeStereoFast( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-		int32_t			EncodeStereoEscape( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t numSamples );
-		int32_t			EncodeMono( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-
-
-		// ALAC encoder parameters
-		int16_t					mBitDepth;
-		bool					mFastMode;
-
-		// encoding state
-		int16_t					mLastMixRes[kALACMaxChannels];
-
-		// encoding buffers
-		int32_t *				mMixBufferU;
-		int32_t *				mMixBufferV;
-		int32_t *				mPredictorU;
-		int32_t *				mPredictorV;
-		uint16_t *				mShiftBufferUV;
-
-		uint8_t *					mWorkBuffer;
-
-		// per-channel coefficients buffers
-		int16_t					mCoefsU[kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-		int16_t					mCoefsV[kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-
-		// encoding statistics
-		uint32_t					mTotalBytesGenerated;
-		uint32_t					mAvgBitRate;
-		uint32_t					mMaxFrameBytes;
-        uint32_t                  mFrameSize;
-        uint32_t                  mMaxOutputBytes;
-        uint32_t                  mNumChannels;
-        uint32_t                  mOutputSampleRate;
-};
diff --git a/libs/libsndfile/src/ALAC/EndianPortable.h b/libs/libsndfile/src/ALAC/EndianPortable.h
deleted file mode 100644
index d0b132761f..0000000000
--- a/libs/libsndfile/src/ALAC/EndianPortable.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
-** Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-//
-//  EndianPortable.h
-//
-//  Copyright 2011 Apple Inc. All rights reserved.
-//
-
-#ifndef _EndianPortable_h
-#define _EndianPortable_h
-
-#include <sfendian.h>
-
-#define Swap16NtoB(x)	H2BE_16(x)
-#define Swap16BtoN(x)	BE2H_16(x)
-
-#define Swap32NtoB(x)	H2BE_32(x)
-#define Swap32BtoN(x)	BE2H_32(x)
-
-#endif
diff --git a/libs/libsndfile/src/ALAC/LICENSE b/libs/libsndfile/src/ALAC/LICENSE
deleted file mode 100644
index 7d8595490d..0000000000
--- a/libs/libsndfile/src/ALAC/LICENSE
+++ /dev/null
@@ -1,170 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and
-distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the
-copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other
-entities that control, are controlled by, or are under common control
-with that entity. For the purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management
-of such entity, whether by contract or otherwise, or (ii) ownership
-of fifty percent (50%) or more of the outstanding shares, or (iii)
-beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising
-permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications,
-including but not limited to software source code, documentation source,
-and configuration files.
-
-"Object" form shall mean any form resulting from mechanical
-transformation or translation of a Source form, including but not
-limited to compiled object code, generated documentation, and
-conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object
-form, made available under the License, as indicated by a copyright
-notice that is included in or attached to the work (an example is
-provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object
-form, that is based on (or derived from) the Work and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship. For the purposes
-of this License, Derivative Works shall not include works that remain
-separable from, or merely link (or bind by name) to the interfaces of,
-the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original
-version of the Work and any modifications or additions to that Work or
-Derivative Works thereof, that is intentionally submitted to Licensor
-for inclusion in the Work by the copyright owner or by an individual
-or Legal Entity authorized to submit on behalf of the copyright owner.
-For the purposes of this definition, "submitted" means any form of
-electronic, verbal, or written communication sent to the Licensor
-or its representatives, including but not limited to communication
-on electronic mailing lists, source code control systems, and issue
-tracking systems that are managed by, or on behalf of, the Licensor
-for the purpose of discussing and improving the Work, but excluding
-communication that is conspicuously marked or otherwise designated in
-writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity
-on behalf of whom a Contribution has been received by Licensor and
-subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions
-of this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-copyright license to reproduce, prepare Derivative Works of, publicly
-display, publicly perform, sublicense, and distribute the Work and such
-Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
-as stated in this section) patent license to make, have made, use,
-offer to sell, sell, import, and otherwise transfer the Work, where
-such license applies only to those patent claims licensable by such
-Contributor that are necessarily infringed by their Contribution(s)
-alone or by combination of their Contribution(s) with the Work to which
-such Contribution(s) was submitted. If You institute patent litigation
-against any entity (including a cross-claim or counterclaim in a
-lawsuit) alleging that the Work or a Contribution incorporated within
-the Work constitutes direct or contributory patent infringement, then
-any patent licenses granted to You under this License for that Work
-shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-Work or Derivative Works thereof in any medium, with or without
-modifications, and in Source or Object form, provided that You meet the
-following conditions:
-
-You must give any other recipients of the Work or Derivative Works a
-copy of this License; and
-
-You must cause any modified files to carry prominent notices stating
-that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You
-distribute, all copyright, patent, trademark, and attribution notices
-from the Source form of the Work, excluding those notices that do not
-pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution,
-then any Derivative Works that You distribute must include a readable
-copy of the attribution notices contained within such NOTICE file,
-excluding those notices that do not pertain to any part of the
-Derivative Works, in at least one of the following places: within a
-NOTICE text file distributed as part of the Derivative Works; within
-the Source form or documentation, if provided along with the Derivative
-Works; or, within a display generated by the Derivative Works, if and
-wherever such third-party notices normally appear. The contents of the
-NOTICE file are for informational purposes only and do not modify the
-License. You may add Your own attribution notices within Derivative
-Works that You distribute, alongside or as an addendum to the NOTICE
-text from the Work, provided that such additional attribution notices
-cannot be construed as modifying the License. You may add Your own
-copyright statement to Your modifications and may provide additional
-or different license terms and conditions for use, reproduction, or
-distribution of Your modifications, or for any such Derivative Works as
-a whole, provided Your use, reproduction, and distribution of the Work
-otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-any Contribution intentionally submitted for inclusion in the Work by
-You to the Licensor shall be under the terms and conditions of this
-License, without any additional terms or conditions. Notwithstanding
-the above, nothing herein shall supersede or modify the terms of any
-separate license agreement you may have executed with Licensor regarding
-such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-names, trademarks, service marks, or product names of the Licensor,
-except as required for reasonable and customary use in describing the
-origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed
-to in writing, Licensor provides the Work (and each Contributor
-provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, either express or implied, including, without
-limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
-solely responsible for determining the appropriateness of using or
-redistributing the Work and assume any risks associated with Your
-exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, unless
-required by applicable law (such as deliberate and grossly negligent
-acts) or agreed to in writing, shall any Contributor be liable to You
-for damages, including any direct, indirect, special, incidental, or
-consequential damages of any character arising as a result of this
-License or out of the use or inability to use the Work (including but
-not limited to damages for loss of goodwill, work stoppage, computer
-failure or malfunction, or any and all other commercial damages or
-losses), even if such Contributor has been advised of the possibility of
-such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the
-Work or Derivative Works thereof, You may choose to offer, and charge a
-fee for, acceptance of support, warranty, indemnity, or other liability
-obligations and/or rights consistent with this License. However, in
-accepting such obligations, You may act only on Your own behalf and
-on Your sole responsibility, not on behalf of any other Contributor,
-and only if You agree to indemnify, defend, and hold each Contributor
-harmless for any liability incurred by, or claims asserted against, such
-Contributor by reason of your accepting any such warranty or additional
-liability.
diff --git a/libs/libsndfile/src/ALAC/ag_dec.c b/libs/libsndfile/src/ALAC/ag_dec.c
deleted file mode 100644
index 81c18dc920..0000000000
--- a/libs/libsndfile/src/ALAC/ag_dec.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ag_dec.c
-
-	Contains:   Adaptive Golomb decode routines.
-
-	Copyright:	(c) 2001-2011 Apple, Inc.
-*/
-
-#include "aglib.h"
-#include "ALACBitUtilities.h"
-#include "ALACAudioTypes.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define CODE_TO_LONG_MAXBITS	32
-#define N_MAX_MEAN_CLAMP		0xffff
-#define N_MEAN_CLAMP_VAL		0xffff
-#define REPORT_VAL  40
-
-#if __GNUC__
-#define ALWAYS_INLINE		__attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-/*	And on the subject of the CodeWarrior x86 compiler and inlining, I reworked a lot of this
-	to help the compiler out.   In many cases this required manual inlining or a macro.  Sorry
-	if it is ugly but the performance gains are well worth it.
-	- WSK 5/19/04
-*/
-
-void set_standard_ag_params(AGParamRecPtr params, uint32_t fullwidth, uint32_t sectorwidth)
-{
-	/* Use
-		fullwidth = sectorwidth = numOfSamples, for analog 1-dimensional type-short data,
-		but use
-		fullwidth = full image width, sectorwidth = sector (patch) width
-		for such as image (2-dim.) data.
-	*/
-	set_ag_params( params, MB0, PB0, KB0, fullwidth, sectorwidth, MAX_RUN_DEFAULT );
-}
-
-void set_ag_params(AGParamRecPtr params, uint32_t m, uint32_t p, uint32_t k, uint32_t f, uint32_t s, uint32_t maxrun)
-{
-	params->mb = params->mb0 = m;
-	params->pb = p;
-	params->kb = k;
-	params->wb = (1u<<params->kb)-1;
-	params->qb = QB-params->pb;
-	params->fw = f;
-	params->sw = s;
-	params->maxrun = maxrun;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-
-// note: implementing this with some kind of "count leading zeros" assembly is a big performance win
-static inline int32_t lead( int32_t m )
-{
-	long j;
-	unsigned long c = (1ul << 31);
-
-	for(j=0; j < 32; j++)
-	{
-		if((c & m) != 0)
-			break;
-		c >>= 1;
-	}
-	return (j);
-}
-
-#define arithmin(a, b) ((a) < (b) ? (a) : (b))
-
-static inline int32_t ALWAYS_INLINE lg3a( int32_t x)
-{
-    int32_t result;
-
-    x += 3;
-    result = lead(x);
-
-    return 31 - result;
-}
-
-static inline uint32_t ALWAYS_INLINE read32bit( uint8_t * buffer )
-{
-	// embedded CPUs typically can't read unaligned 32-bit words so just read the bytes
-	uint32_t		value;
-
-	value = ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16) |
-			 ((uint32_t)buffer[2] << 8) | (uint32_t)buffer[3];
-	return value;
-
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-#define get_next_fromlong(inlong, suff)		((inlong) >> (32 - (suff)))
-
-
-static inline uint32_t ALWAYS_INLINE
-getstreambits( uint8_t *in, int32_t bitoffset, int32_t numbits )
-{
-	uint32_t	load1, load2;
-	uint32_t	byteoffset = bitoffset / 8;
-	uint32_t	result;
-
-	//Assert( numbits <= 32 );
-
-	load1 = read32bit( in + byteoffset );
-
-	if ( (numbits + (bitoffset & 0x7)) > 32)
-	{
-		int32_t load2shift;
-
-		result = load1 << (bitoffset & 0x7);
-		load2 = (uint32_t) in[byteoffset+4];
-		load2shift = (8-(numbits + (bitoffset & 0x7)-32));
-		load2 >>= load2shift;
-		result >>= (32-numbits);
-		result |= load2;
-	}
-	else
-	{
-		result = load1 >> (32-numbits-(bitoffset & 7));
-	}
-
-	// a shift of >= "the number of bits in the type of the value being shifted" results in undefined
-	// behavior so don't try to shift by 32
-	if ( numbits != (sizeof(result) * 8) )
-		result &= ~(0xfffffffful << numbits);
-
-	return result;
-}
-
-
-static inline int32_t dyn_get(unsigned char *in, uint32_t *bitPos, uint32_t m, uint32_t k)
-{
-    uint32_t	tempbits = *bitPos;
-    uint32_t		result;
-    uint32_t		pre = 0, v;
-    uint32_t		streamlong;
-
-	streamlong = read32bit( in + (tempbits >> 3) );
-    streamlong <<= (tempbits & 7);
-
-    /* find the number of bits in the prefix */
-    {
-        uint32_t	notI = ~streamlong;
-    	pre = lead( notI);
-    }
-
-    if(pre >= MAX_PREFIX_16)
-    {
-        pre = MAX_PREFIX_16;
-        tempbits += pre;
-        streamlong <<= pre;
-        result = get_next_fromlong(streamlong,MAX_DATATYPE_BITS_16);
-        tempbits += MAX_DATATYPE_BITS_16;
-
-    }
-    else
-    {
-        // all of the bits must fit within the long we have loaded
-        //Assert(pre+1+k <= 32);
-
-        tempbits += pre;
-        tempbits += 1;
-        streamlong <<= pre+1;
-        v = get_next_fromlong(streamlong, k);
-        tempbits += k;
-
-        result = pre*m + v-1;
-
-        if(v<2) {
-            result -= (v-1);
-            tempbits -= 1;
-        }
-    }
-
-    *bitPos = tempbits;
-    return result;
-}
-
-
-static inline int32_t dyn_get_32bit( uint8_t * in, uint32_t * bitPos, int32_t m, int32_t k, int32_t maxbits )
-{
-	uint32_t	tempbits = *bitPos;
-	uint32_t		v;
-	uint32_t		streamlong;
-	uint32_t		result;
-
-	streamlong = read32bit( in + (tempbits >> 3) );
-	streamlong <<= (tempbits & 7);
-
-	/* find the number of bits in the prefix */
-	{
-		uint32_t notI = ~streamlong;
-		result = lead( notI);
-	}
-
-	if(result >= MAX_PREFIX_32)
-	{
-		result = getstreambits(in, tempbits+MAX_PREFIX_32, maxbits);
-		tempbits += MAX_PREFIX_32 + maxbits;
-	}
-	else
-	{
-		/* all of the bits must fit within the long we have loaded*/
-		//Assert(k<=14);
-		//Assert(result<MAX_PREFIX_32);
-		//Assert(result+1+k <= 32);
-
-		tempbits += result;
-		tempbits += 1;
-
-		if (k != 1)
-		{
-			streamlong <<= result+1;
-			v = get_next_fromlong(streamlong, k);
-			tempbits += k;
-			tempbits -= 1;
-			result = result*m;
-
-			if(v>=2)
-			{
-				result += (v-1);
-				tempbits += 1;
-			}
-		}
-	}
-
-	*bitPos = tempbits;
-
-	return result;
-}
-
-int32_t dyn_decomp( AGParamRecPtr params, BitBuffer * bitstream, int32_t * pc, int32_t numSamples, int32_t maxSize, uint32_t * outNumBits )
-{
-    uint8_t 		*in;
-    int32_t			*outPtr = pc;
-    uint32_t 	bitPos, startPos, maxPos;
-    uint32_t		j, m, k, n, c, mz;
-    int32_t			del, zmode;
-    uint32_t 	mb;
-    uint32_t	pb_local = params->pb;
-    uint32_t	kb_local = params->kb;
-    uint32_t	wb_local = params->wb;
-    int32_t				status;
-
-	RequireAction( (bitstream != NULL) && (pc != NULL) && (outNumBits != NULL), return kALAC_ParamError; );
-	*outNumBits = 0;
-
-	in = bitstream->cur;
-	startPos = bitstream->bitIndex;
-	maxPos = bitstream->byteSize * 8;
-	bitPos = startPos;
-
-    mb = params->mb0;
-    zmode = 0;
-
-    c = 0;
-	status = ALAC_noErr;
-
-    while (c < (uint32_t) numSamples)
-    {
-		// bail if we've run off the end of the buffer
-    	RequireAction( bitPos < maxPos, status = kALAC_ParamError; goto Exit; );
-
-        m = (mb)>>QBSHIFT;
-        k = lg3a(m);
-
-        k = arithmin(k, kb_local);
-        m = (1<<k)-1;
-
-		n = dyn_get_32bit( in, &bitPos, m, k, maxSize );
-
-        // least significant bit is sign bit
-        {
-        	uint32_t	ndecode = n + zmode;
-            int32_t		multiplier = (- (ndecode&1));
-
-            multiplier |= 1;
-            del = ((ndecode+1) >> 1) * (multiplier);
-        }
-
-        *outPtr++ = del;
-
-        c++;
-
-        mb = pb_local*(n+zmode) + mb - ((pb_local*mb)>>QBSHIFT);
-
-		// update mean tracking
-		if (n > N_MAX_MEAN_CLAMP)
-			mb = N_MEAN_CLAMP_VAL;
-
-        zmode = 0;
-
-        if (((mb << MMULSHIFT) < QB) && (c < (uint32_t) numSamples))
-        {
-            zmode = 1;
-            k = lead(mb) - BITOFF+((mb+MOFF)>>MDENSHIFT);
-            mz = ((1<<k)-1) & wb_local;
-
-            n = dyn_get(in, &bitPos, mz, k);
-
-            RequireAction(c+n <= (uint32_t) numSamples, status = kALAC_ParamError; goto Exit; );
-
-            for(j=0; j < n; j++)
-            {
-                *outPtr++ = 0;
-                ++c;
-            }
-
-            if(n >= 65535)
-            	zmode = 0;
-
-            mb = 0;
-        }
-    }
-
-Exit:
-	*outNumBits = (bitPos - startPos);
-	BitBufferAdvance( bitstream, *outNumBits );
-	RequireAction( bitstream->cur <= bitstream->end, status = kALAC_ParamError; );
-
-    return status;
-}
diff --git a/libs/libsndfile/src/ALAC/ag_enc.c b/libs/libsndfile/src/ALAC/ag_enc.c
deleted file mode 100644
index 0916cc0852..0000000000
--- a/libs/libsndfile/src/ALAC/ag_enc.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ag_enc.c
-
-	Contains:   Adaptive Golomb encode routines.
-
-	Copyright:	(c) 2001-2011 Apple, Inc.
-*/
-
-#include "aglib.h"
-#include "ALACBitUtilities.h"
-#include "EndianPortable.h"
-#include "ALACAudioTypes.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define CODE_TO_LONG_MAXBITS	32
-#define N_MAX_MEAN_CLAMP		0xffff
-#define N_MEAN_CLAMP_VAL		0xffff
-#define REPORT_VAL  40
-
-#if __GNUC__
-#define ALWAYS_INLINE		__attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-
-/*	And on the subject of the CodeWarrior x86 compiler and inlining, I reworked a lot of this
-	to help the compiler out.   In many cases this required manual inlining or a macro.  Sorry
-	if it is ugly but the performance gains are well worth it.
-	- WSK 5/19/04
-*/
-
-// note: implementing this with some kind of "count leading zeros" assembly is a big performance win
-static inline int32_t lead( int32_t m )
-{
-	long j;
-	unsigned long c = (1ul << 31);
-
-	for(j=0; j < 32; j++)
-	{
-		if((c & m) != 0)
-			break;
-		c >>= 1;
-	}
-	return (j);
-}
-
-#define arithmin(a, b) ((a) < (b) ? (a) : (b))
-
-static inline int32_t ALWAYS_INLINE lg3a( int32_t x)
-{
-    int32_t result;
-
-    x += 3;
-    result = lead(x);
-
-    return 31 - result;
-}
-
-static inline int32_t ALWAYS_INLINE abs_func( int32_t a )
-{
-	// note: the CW PPC intrinsic __abs() turns into these instructions so no need to try and use it
-	int32_t isneg  = a >> 31;
-	int32_t xorval = a ^ isneg;
-	int32_t result = xorval-isneg;
-
-	return result;
-}
-
-static inline uint32_t ALWAYS_INLINE read32bit( uint8_t * buffer )
-{
-	// embedded CPUs typically can't read unaligned 32-bit words so just read the bytes
-	uint32_t		value;
-
-	value = ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16) |
-			 ((uint32_t)buffer[2] << 8) | (uint32_t)buffer[3];
-	return value;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-static inline int32_t dyn_code(int32_t m, int32_t k, int32_t n, uint32_t *outNumBits)
-{
-	uint32_t 	divx, mod, de;
-	uint32_t	numBits;
-	uint32_t	value;
-
-	//Assert( n >= 0 );
-
-	divx = n/m;
-
-	if(divx >= MAX_PREFIX_16)
-	{
-		numBits = MAX_PREFIX_16 + MAX_DATATYPE_BITS_16;
-		value = (((1<<MAX_PREFIX_16)-1)<<MAX_DATATYPE_BITS_16) + n;
-	}
-	else
-	{
-		mod = n%m;
-		de = (mod == 0);
-		numBits = divx + k + 1 - de;
-		value = (((1<<divx)-1)<<(numBits-divx)) + mod + 1 - de;
-
-		// if coding this way is bigger than doing escape, then do escape
-		if (numBits > MAX_PREFIX_16 + MAX_DATATYPE_BITS_16)
-		{
-		    numBits = MAX_PREFIX_16 + MAX_DATATYPE_BITS_16;
-		    value = (((1<<MAX_PREFIX_16)-1)<<MAX_DATATYPE_BITS_16) + n;
-		}
-	}
-
-	*outNumBits = numBits;
-
-	return (int32_t) value;
-}
-
-
-static inline int32_t dyn_code_32bit(int32_t maxbits, uint32_t m, uint32_t k, uint32_t n, uint32_t *outNumBits, uint32_t *outValue, uint32_t *overflow, uint32_t *overflowbits)
-{
-	uint32_t 	divx, mod, de;
-	uint32_t	numBits;
-	uint32_t	value;
-	int32_t			didOverflow = 0;
-
-	divx = n/m;
-
-	if (divx < MAX_PREFIX_32)
-	{
-		mod = n - (m * divx);
-
-		de = (mod == 0);
-		numBits = divx + k + 1 - de;
-		value = (((1<<divx)-1)<<(numBits-divx)) + mod + 1 - de;
-		if (numBits > 25)
-			goto codeasescape;
-	}
-	else
-	{
-codeasescape:
-		numBits = MAX_PREFIX_32;
-		value = (((1<<MAX_PREFIX_32)-1));
-		*overflow = n;
-		*overflowbits = maxbits;
-		didOverflow = 1;
-	}
-
-	*outNumBits = numBits;
-	*outValue = value;
-
-	return didOverflow;
-}
-
-
-static inline void ALWAYS_INLINE dyn_jam_noDeref(unsigned char *out, uint32_t bitPos, uint32_t numBits, uint32_t value)
-{
-	uint32_t	mask;
-	uint32_t	curr;
-	uint32_t	shift;
-
-	//Assert( numBits <= 32 );
-
-	curr = psf_get_be32 (out, bitPos >> 3);
-
-	shift = 32 - (bitPos & 7) - numBits;
-
-	mask = ~0u >> (32 - numBits);		// mask must be created in two steps to avoid compiler sequencing ambiguity
-	mask <<= shift;
-
-	value  = (value << shift) & mask;
-	value |= curr & ~mask;
-
-	psf_put_be32 (out, bitPos >> 3, value) ;
-}
-
-
-static inline void ALWAYS_INLINE dyn_jam_noDeref_large(unsigned char *out, uint32_t bitPos, uint32_t numBits, uint32_t value)
-{
-	uint32_t	w;
-	uint32_t	curr;
-	uint32_t	mask;
-	int32_t		shiftvalue = (32 - (bitPos&7) - numBits);
-
-	//Assert(numBits <= 32);
-
-	curr = psf_get_be32 (out, bitPos >> 3);
-
-	if (shiftvalue < 0)
-	{
-		uint8_t 	tailbyte;
-		uint8_t 	*tailptr;
-
-		w = value >> -shiftvalue;
-		mask = ~0u >> -shiftvalue;
-		w |= (curr & ~mask);
-
-		tailptr = out + (bitPos>>3) + 4;
-		tailbyte = (value << ((8+shiftvalue))) & 0xff;
-		*tailptr = (uint8_t)tailbyte;
-	}
-	else
-	{
-		mask = ~0u >> (32 - numBits);
-		mask <<= shiftvalue;			// mask must be created in two steps to avoid compiler sequencing ambiguity
-
-		w  = (value << shiftvalue) & mask;
-		w |= curr & ~mask;
-	}
-
-	psf_put_be32 (out, bitPos >> 3, w) ;
-}
-
-
-int32_t dyn_comp( AGParamRecPtr params, int32_t * pc, BitBuffer * bitstream, int32_t numSamples, int32_t bitSize, uint32_t * outNumBits )
-{
-    unsigned char *		out;
-    uint32_t		bitPos, startPos;
-    uint32_t			m, k, n, c, mz, nz;
-    uint32_t		numBits;
-    uint32_t			value;
-    int32_t				del, zmode;
-	uint32_t		overflow, overflowbits;
-    int32_t					status;
-
-    // shadow the variables in params so there's not the dereferencing overhead
-    uint32_t		mb, pb, kb, wb;
-    int32_t					rowPos = 0;
-    int32_t					rowSize = params->sw;
-    int32_t					rowJump = (params->fw) - rowSize;
-    int32_t *			inPtr = pc;
-
-	*outNumBits = 0;
-	RequireAction( (bitSize >= 1) && (bitSize <= 32), return kALAC_ParamError; );
-
-	out = bitstream->cur;
-	startPos = bitstream->bitIndex;
-    bitPos = startPos;
-
-    mb = params->mb = params->mb0;
-    pb = params->pb;
-    kb = params->kb;
-    wb = params->wb;
-    zmode = 0;
-
-    c=0;
-	status = ALAC_noErr;
-
-    while (c < (uint32_t) numSamples)
-    {
-        m  = mb >> QBSHIFT;
-        k = lg3a(m);
-        if ( k > kb)
-        {
-        	k = kb;
-        }
-        m = (1<<k)-1;
-
-        del = *inPtr++;
-        rowPos++;
-
-        n = (abs_func(del) << 1) - ((del >> 31) & 1) - zmode;
-		//Assert( 32-lead(n) <= bitSize );
-
-		if ( dyn_code_32bit(bitSize, m, k, n, &numBits, &value, &overflow, &overflowbits) )
-		{
-			dyn_jam_noDeref(out, bitPos, numBits, value);
-			bitPos += numBits;
-			dyn_jam_noDeref_large(out, bitPos, overflowbits, overflow);
-			bitPos += overflowbits;
-		}
-		else
-		{
-			dyn_jam_noDeref(out, bitPos, numBits, value);
-			bitPos += numBits;
-		}
-
-        c++;
-        if ( rowPos >= rowSize)
-        {
-        	rowPos = 0;
-        	inPtr += rowJump;
-        }
-
-        mb = pb * (n + zmode) + mb - ((pb *mb)>>QBSHIFT);
-
-		// update mean tracking if it's overflowed
-		if (n > N_MAX_MEAN_CLAMP)
-			mb = N_MEAN_CLAMP_VAL;
-
-        zmode = 0;
-
-        RequireAction(c <= (uint32_t) numSamples, status = kALAC_ParamError; goto Exit; );
-
-        if (((mb << MMULSHIFT) < QB) && (c < (uint32_t) numSamples))
-        {
-            zmode = 1;
-            nz = 0;
-
-            while(c<(uint32_t) numSamples && *inPtr == 0)
-            {
-            	/* Take care of wrap-around globals. */
-                ++inPtr;
-                ++nz;
-                ++c;
-                if ( ++rowPos >= rowSize)
-                {
-                	rowPos = 0;
-                	inPtr += rowJump;
-                }
-
-                if(nz >= 65535)
-                {
-                	zmode = 0;
-                	break;
-                }
-            }
-
-            k = lead(mb) - BITOFF+((mb+MOFF)>>MDENSHIFT);
-            mz = ((1<<k)-1) & wb;
-
-            value = dyn_code(mz, k, nz, &numBits);
-            dyn_jam_noDeref(out, bitPos, numBits, value);
-            bitPos += numBits;
-
-            mb = 0;
-        }
-    }
-
-    *outNumBits = (bitPos - startPos);
-	BitBufferAdvance( bitstream, *outNumBits );
-
-Exit:
-	return status;
-}
diff --git a/libs/libsndfile/src/ALAC/aglib.h b/libs/libsndfile/src/ALAC/aglib.h
deleted file mode 100644
index c14e9f62dd..0000000000
--- a/libs/libsndfile/src/ALAC/aglib.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		aglib.h
-
-	Copyright:	(C) 2001-2011 Apple, Inc.
-*/
-
-#ifndef AGLIB_H
-#define AGLIB_H
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define QBSHIFT 9
-#define QB (1<<QBSHIFT)
-#define PB0 40
-#define MB0 10
-#define KB0 14
-#define MAX_RUN_DEFAULT 255
-
-#define MMULSHIFT 2
-#define MDENSHIFT (QBSHIFT - MMULSHIFT - 1)
-#define MOFF ((1<<(MDENSHIFT-2)))
-
-#define BITOFF 24
-
-/* Max. prefix of 1's. */
-#define MAX_PREFIX_16			9
-#define MAX_PREFIX_TOLONG_16	15
-#define MAX_PREFIX_32			9
-
-/* Max. bits in 16-bit data type */
-#define MAX_DATATYPE_BITS_16	16
-
-typedef struct AGParamRec
-{
-    uint32_t mb, mb0, pb, kb, wb, qb;
-    uint32_t fw, sw;
-
-    uint32_t maxrun;
-
-    // fw = 1, sw = 1;
-
-} AGParamRec, *AGParamRecPtr;
-
-struct BitBuffer;
-
-void	set_standard_ag_params(AGParamRecPtr params, uint32_t fullwidth, uint32_t sectorwidth);
-void	set_ag_params(AGParamRecPtr params, uint32_t m, uint32_t p, uint32_t k, uint32_t f, uint32_t s, uint32_t maxrun);
-
-int32_t		dyn_comp(AGParamRecPtr params, int32_t * pc, struct BitBuffer * bitstream, int32_t numSamples, int32_t bitSize, uint32_t * outNumBits);
-int32_t		dyn_decomp(AGParamRecPtr params, struct BitBuffer * bitstream, int32_t * pc, int32_t numSamples, int32_t maxSize, uint32_t * outNumBits);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //#ifndef AGLIB_H
diff --git a/libs/libsndfile/src/ALAC/alac_codec.h b/libs/libsndfile/src/ALAC/alac_codec.h
deleted file mode 100644
index b9e5fa1ce2..0000000000
--- a/libs/libsndfile/src/ALAC/alac_codec.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		alac_codec.h
-*/
-
-#ifndef ALAC_CODEC_H
-#define ALAC_CODEC_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-#define		ALAC_FRAME_LENGTH	4096
-
-struct BitBuffer;
-
-typedef struct alac_decoder_s
-{
-	// decoding parameters (public for use in the analyzer)
-	ALACSpecificConfig		mConfig;
-
-	uint16_t				mActiveElements;
-
-	// decoding buffers
-	int32_t				mMixBufferU [ALAC_FRAME_LENGTH];
-	int32_t				mMixBufferV [ALAC_FRAME_LENGTH];
-	union
-	{
-		int32_t			mPredictor [ALAC_FRAME_LENGTH];
-		uint16_t		mShiftBuffer [ALAC_FRAME_LENGTH];
-	} ;
-} ALAC_DECODER ;
-
-typedef struct alac_encoder_s
-{
-	// ALAC encoder parameters
-	int16_t			mBitDepth;
-
-	// encoding state
-	int16_t			mLastMixRes [kALACMaxChannels];
-
-	int32_t			mFastMode;
-
-	// encoding buffers
-	int32_t			mMixBufferU [ALAC_FRAME_LENGTH] ;
-	int32_t			mMixBufferV [ALAC_FRAME_LENGTH] ;
-	int32_t			mPredictorU [ALAC_FRAME_LENGTH] ;
-	int32_t			mPredictorV [ALAC_FRAME_LENGTH] ;
-	uint16_t		mShiftBufferUV [2 * ALAC_FRAME_LENGTH] ;
-	uint8_t			mWorkBuffer [4 * ALAC_FRAME_LENGTH];
-
-	// per-channel coefficients buffers
-	int16_t			mCoefsU [kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-	int16_t			mCoefsV [kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-
-	// encoding statistics
-	uint32_t		mTotalBytesGenerated;
-	uint32_t		mAvgBitRate;
-	uint32_t		mMaxFrameBytes;
-	uint32_t		mFrameSize;
-	uint32_t		mMaxOutputBytes;
-	uint32_t		mNumChannels;
-	uint32_t		mOutputSampleRate;
-} ALAC_ENCODER ;
-
-
-int32_t	alac_decoder_init (ALAC_DECODER *p, void * inMagicCookie, uint32_t inMagicCookieSize) ;
-int32_t alac_encoder_init (ALAC_ENCODER *p, uint32_t samplerate, uint32_t channels, uint32_t format_flags, uint32_t frameSize) ;
-
-int32_t	alac_decode (ALAC_DECODER *, struct BitBuffer * bits, int32_t * sampleBuffer,
-					uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples) ;
-
-int32_t	alac_encode (ALAC_ENCODER *p, uint32_t numChannels, uint32_t numSamples,
-					int32_t * theReadBuffer, unsigned char * theWriteBuffer,
-					uint32_t * ioNumBytes) ;
-
-void alac_set_fastmode(ALAC_ENCODER * p, int32_t fast) ;
-
-uint32_t alac_get_magic_cookie_size(uint32_t inNumChannels) ;
-void	alac_get_magic_cookie(ALAC_ENCODER *p, void * config, uint32_t * ioSize) ;
-void	alac_get_source_format(ALAC_ENCODER *p, const AudioFormatDescription * source, AudioFormatDescription * output) ;
-
-#endif
diff --git a/libs/libsndfile/src/ALAC/alac_decoder.c b/libs/libsndfile/src/ALAC/alac_decoder.c
deleted file mode 100644
index 2681ef6275..0000000000
--- a/libs/libsndfile/src/ALAC/alac_decoder.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ALACDecoder.cpp
-*/
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-
-#include "alac_codec.h"
-
-#include "dplib.h"
-#include "aglib.h"
-#include "matrixlib.h"
-
-#include "ALACBitUtilities.h"
-#include "EndianPortable.h"
-
-typedef enum
-{	false = 0,
-	true = 1
-} bool ;
-
-// constants/data
-const uint32_t kMaxBitDepth = 32;			// max allowed bit depth is 32
-
-
-// prototypes
-static int32_t	alac_fill_element (struct BitBuffer * bits) ;
-static int32_t	alac_data_stream_element (struct BitBuffer * bits) ;
-
-static void Zero32( int32_t * buffer, uint32_t numItems, uint32_t stride );
-
-
-/*
-	Init()
-	- initialize the decoder with the given configuration
-*/
-int32_t
-alac_decoder_init (ALAC_DECODER *p, void * inMagicCookie, uint32_t inMagicCookieSize)
-{
-	int32_t		status = ALAC_noErr;
-    ALACSpecificConfig theConfig;
-    uint8_t * theActualCookie = (uint8_t *)inMagicCookie;
-    uint32_t theCookieBytesRemaining = inMagicCookieSize;
-
-    // For historical reasons the decoder needs to be resilient to magic cookies vended by older encoders.
-    // As specified in the ALACMagicCookieDescription.txt document, there may be additional data encapsulating
-    // the ALACSpecificConfig. This would consist of format ('frma') and 'alac' atoms which precede the
-    // ALACSpecificConfig.
-    // See ALACMagicCookieDescription.txt for additional documentation concerning the 'magic cookie'
-
-    // skip format ('frma') atom if present
-    if (theActualCookie[4] == 'f' && theActualCookie[5] == 'r' && theActualCookie[6] == 'm' && theActualCookie[7] == 'a')
-    {
-        theActualCookie += 12;
-        theCookieBytesRemaining -= 12;
-    }
-
-    // skip 'alac' atom header if present
-    if (theActualCookie[4] == 'a' && theActualCookie[5] == 'l' && theActualCookie[6] == 'a' && theActualCookie[7] == 'c')
-    {
-        theActualCookie += 12;
-        theCookieBytesRemaining -= 12;
-    }
-
-    // read the ALACSpecificConfig
-    if (theCookieBytesRemaining >= sizeof(ALACSpecificConfig))
-    {
-        theConfig.frameLength = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, frameLength)) ;
-
-		if (theConfig.frameLength > ALAC_FRAME_LENGTH)
-			return fALAC_FrameLengthError ;
-
-        theConfig.compatibleVersion = theActualCookie [offsetof (ALACSpecificConfig, compatibleVersion)] ;
-        theConfig.bitDepth = theActualCookie [offsetof (ALACSpecificConfig, bitDepth)] ;
-        theConfig.pb = theActualCookie [offsetof (ALACSpecificConfig, pb)] ;
-        theConfig.mb = theActualCookie [offsetof (ALACSpecificConfig, mb)] ;
-        theConfig.kb = theActualCookie [offsetof (ALACSpecificConfig, kb)] ;
-        theConfig.numChannels = theActualCookie [offsetof (ALACSpecificConfig, numChannels)] ;
-        theConfig.maxRun = psf_get_be16 (theActualCookie, offsetof (ALACSpecificConfig, maxRun)) ;
-        theConfig.maxFrameBytes = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, maxFrameBytes)) ;
-        theConfig.avgBitRate = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, avgBitRate)) ;
-        theConfig.sampleRate = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, sampleRate)) ;
-
-        p->mConfig = theConfig;
-
-        RequireAction( p->mConfig.compatibleVersion <= kALACVersion, return kALAC_ParamError; );
-
-        RequireAction( (p->mMixBufferU != NULL) && (p->mMixBufferV != NULL) && (p->mPredictor != NULL),
-                        status = kALAC_MemFullError; goto Exit; );
-     }
-    else
-    {
-        status = kALAC_ParamError;
-    }
-
-    // skip to Channel Layout Info
-    // theActualCookie += sizeof(ALACSpecificConfig);
-
-    // Currently, the Channel Layout Info portion of the magic cookie (as defined in the
-    // ALACMagicCookieDescription.txt document) is unused by the decoder.
-
-Exit:
-	return status;
-}
-
-/*
-	Decode()
-	- the decoded samples are interleaved into the output buffer in the order they arrive in
-	  the bitstream
-*/
-int32_t
-alac_decode (ALAC_DECODER *p, struct BitBuffer * bits, int32_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples)
-{
-	BitBuffer			shiftBits;
-	uint32_t            bits1, bits2;
-	uint8_t				tag;
-	uint8_t				elementInstanceTag;
-	AGParamRec			agParams;
-	uint32_t				channelIndex;
-	int16_t				coefsU[32];		// max possible size is 32 although NUMCOEPAIRS is the current limit
-	int16_t				coefsV[32];
-	uint8_t				numU, numV;
-	uint8_t				mixBits;
-	int8_t				mixRes;
-	uint16_t			unusedHeader;
-	uint8_t				escapeFlag;
-	uint32_t			chanBits;
-	uint8_t				bytesShifted;
-	uint32_t			shift;
-	uint8_t				modeU, modeV;
-	uint32_t			denShiftU, denShiftV;
-	uint16_t			pbFactorU, pbFactorV;
-	uint16_t			pb;
-	int32_t *			out32;
-	uint8_t				headerByte;
-	uint8_t				partialFrame;
-	uint32_t			extraBits;
-	int32_t				val;
-	uint32_t			i, j;
-	int32_t             status;
-
-	RequireAction( (bits != NULL) && (sampleBuffer != NULL) && (outNumSamples != NULL), return kALAC_ParamError; );
-	RequireAction( numChannels > 0, return kALAC_ParamError; );
-
-	p->mActiveElements = 0;
-	channelIndex	= 0;
-
-	status = ALAC_noErr;
-	*outNumSamples = numSamples;
-
-	while ( status == ALAC_noErr )
-	{
-		// bail if we ran off the end of the buffer
-    	RequireAction( bits->cur < bits->end, status = kALAC_ParamError; goto Exit; );
-
-		// copy global decode params for this element
-		pb = p->mConfig.pb;
-
-		// read element tag
-		tag = BitBufferReadSmall( bits, 3 );
-		switch ( tag )
-		{
-			case ID_SCE:
-			case ID_LFE:
-			{
-				// mono/LFE channel
-				elementInstanceTag = BitBufferReadSmall( bits, 4 );
-				p->mActiveElements |= (1u << elementInstanceTag);
-
-				// read the 12 unused header bits
-				unusedHeader = (uint16_t) BitBufferRead( bits, 12 );
-				RequireAction( unusedHeader == 0, status = kALAC_ParamError; goto Exit; );
-
-				// read the 1-bit "partial frame" flag, 2-bit "shift-off" flag & 1-bit "escape" flag
-				headerByte = (uint8_t) BitBufferRead( bits, 4 );
-
-				partialFrame = headerByte >> 3;
-
-				bytesShifted = (headerByte >> 1) & 0x3u;
-				RequireAction( bytesShifted != 3, status = kALAC_ParamError; goto Exit; );
-
-				shift = bytesShifted * 8;
-
-				escapeFlag = headerByte & 0x1;
-
-				chanBits = p->mConfig.bitDepth - (bytesShifted * 8);
-
-				// check for partial frame to override requested numSamples
-				if ( partialFrame != 0 )
-				{
-					numSamples  = BitBufferRead( bits, 16 ) << 16;
-					numSamples |= BitBufferRead( bits, 16 );
-				}
-
-				if ( escapeFlag == 0 )
-				{
-					// compressed frame, read rest of parameters
-					mixBits	= (uint8_t) BitBufferRead( bits, 8 );
-					mixRes	= (int8_t) BitBufferRead( bits, 8 );
-					//Assert( (mixBits == 0) && (mixRes == 0) );		// no mixing for mono
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					modeU		= headerByte >> 4;
-					denShiftU	= headerByte & 0xfu;
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					pbFactorU	= headerByte >> 5;
-					numU		= headerByte & 0x1fu;
-
-					for ( i = 0; i < numU; i++ )
-						coefsU[i] = (int16_t) BitBufferRead( bits, 16 );
-
-					// if shift active, skip the the shift buffer but remember where it starts
-					if ( bytesShifted != 0 )
-					{
-						shiftBits = *bits;
-						BitBufferAdvance( bits, (bytesShifted * 8) * numSamples );
-					}
-
-					// decompress
-					set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorU) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-					status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits1 );
-					RequireNoErr( status, goto Exit; );
-
-					if ( modeU == 0 )
-					{
-						unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-					}
-					else
-					{
-						// the special "numActive == 31" mode can be done in-place
-						unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-						unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-					}
-				}
-				else
-				{
-					//Assert( bytesShifted == 0 );
-
-					// uncompressed frame, copy data into the mix buffer to use common output code
-					shift = 32 - chanBits;
-					if ( chanBits <= 16 )
-					{
-						for ( i = 0; i < numSamples; i++ )
-						{
-							val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-							val = (val << shift) >> shift;
-							p->mMixBufferU[i] = val;
-						}
-					}
-					else
-					{
-						// BitBufferRead() can't read more than 16 bits at a time so break up the reads
-						extraBits = chanBits - 16;
-						for ( i = 0; i < numSamples; i++ )
-						{
-							val = (int32_t) BitBufferRead( bits, 16 );
-							val = (val << 16) >> shift;
-							p->mMixBufferU[i] = val | BitBufferRead( bits, (uint8_t) extraBits );
-						}
-					}
-
-					mixBits = mixRes = 0;
-					bits1 = chanBits * numSamples;
-					bytesShifted = 0;
-				}
-
-				// now read the shifted values into the shift buffer
-				if ( bytesShifted != 0 )
-				{
-					shift = bytesShifted * 8;
-					//Assert( shift <= 16 );
-
-					for ( i = 0; i < numSamples; i++ )
-						p->mShiftBuffer[i] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-				}
-
-				// convert 32-bit integers into output buffer
-				switch ( p->mConfig.bitDepth )
-				{
-					case 16:
-						out32 = sampleBuffer + channelIndex;
-						for ( i = 0, j = 0; i < numSamples; i++, j += numChannels )
-							out32[j] = p->mMixBufferU[i] << 16;
-						break;
-					case 20:
-						out32 = sampleBuffer + channelIndex;
-						copyPredictorTo20( p->mMixBufferU, out32, numChannels, numSamples );
-						break;
-					case 24:
-						out32 = sampleBuffer + channelIndex;
-						if ( bytesShifted != 0 )
-							copyPredictorTo24Shift( p->mMixBufferU, p->mShiftBuffer, out32, numChannels, numSamples, bytesShifted );
-						else
-							copyPredictorTo24( p->mMixBufferU, out32, numChannels, numSamples );
-						break;
-					case 32:
-						out32 = sampleBuffer + channelIndex;
-						if ( bytesShifted != 0 )
-							copyPredictorTo32Shift( p->mMixBufferU, p->mShiftBuffer, out32, numChannels, numSamples, bytesShifted );
-						else
-							copyPredictorTo32( p->mMixBufferU, out32, numChannels, numSamples);
-						break;
-				}
-
-				channelIndex += 1;
-				*outNumSamples = numSamples;
-				break;
-			}
-
-			case ID_CPE:
-			{
-				// if decoding this pair would take us over the max channels limit, bail
-				if ( (channelIndex + 2) > numChannels )
-					goto NoMoreChannels;
-
-				// stereo channel pair
-				elementInstanceTag = BitBufferReadSmall( bits, 4 );
-				p->mActiveElements |= (1u << elementInstanceTag);
-
-				// read the 12 unused header bits
-				unusedHeader = (uint16_t) BitBufferRead( bits, 12 );
-				RequireAction( unusedHeader == 0, status = kALAC_ParamError; goto Exit; );
-
-				// read the 1-bit "partial frame" flag, 2-bit "shift-off" flag & 1-bit "escape" flag
-				headerByte = (uint8_t) BitBufferRead( bits, 4 );
-
-				partialFrame = headerByte >> 3;
-
-				bytesShifted = (headerByte >> 1) & 0x3u;
-				RequireAction( bytesShifted != 3, status = kALAC_ParamError; goto Exit; );
-
-				shift = bytesShifted * 8;
-
-				escapeFlag = headerByte & 0x1;
-
-				chanBits = p->mConfig.bitDepth - (bytesShifted * 8) + 1;
-
-				// check for partial frame length to override requested numSamples
-				if ( partialFrame != 0 )
-				{
-					numSamples  = BitBufferRead( bits, 16 ) << 16;
-					numSamples |= BitBufferRead( bits, 16 );
-				}
-
-				if ( escapeFlag == 0 )
-				{
-					// compressed frame, read rest of parameters
-					mixBits		= (uint8_t) BitBufferRead( bits, 8 );
-					mixRes		= (int8_t) BitBufferRead( bits, 8 );
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					modeU		= headerByte >> 4;
-					denShiftU	= headerByte & 0xfu;
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					pbFactorU	= headerByte >> 5;
-					numU		= headerByte & 0x1fu;
-					for ( i = 0; i < numU; i++ )
-						coefsU[i] = (int16_t) BitBufferRead( bits, 16 );
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					modeV		= headerByte >> 4;
-					denShiftV	= headerByte & 0xfu;
-
-					headerByte	= (uint8_t) BitBufferRead( bits, 8 );
-					pbFactorV	= headerByte >> 5;
-					numV		= headerByte & 0x1fu;
-					for ( i = 0; i < numV; i++ )
-						coefsV[i] = (int16_t) BitBufferRead( bits, 16 );
-
-					// if shift active, skip the interleaved shifted values but remember where they start
-					if ( bytesShifted != 0 )
-					{
-						shiftBits = *bits;
-						BitBufferAdvance( bits, (bytesShifted * 8) * 2 * numSamples );
-					}
-
-					// decompress and run predictor for "left" channel
-					set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorU) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-					status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits1 );
-					RequireNoErr( status, goto Exit; );
-
-					if ( modeU == 0 )
-					{
-						unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-					}
-					else
-					{
-						// the special "numActive == 31" mode can be done in-place
-						unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-						unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-					}
-
-					// decompress and run predictor for "right" channel
-					set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorV) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-					status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits2 );
-					RequireNoErr( status, goto Exit; );
-
-					if ( modeV == 0 )
-					{
-						unpc_block( p->mPredictor, p->mMixBufferV, numSamples, &coefsV[0], numV, chanBits, denShiftV );
-					}
-					else
-					{
-						// the special "numActive == 31" mode can be done in-place
-						unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-						unpc_block( p->mPredictor, p->mMixBufferV, numSamples, &coefsV[0], numV, chanBits, denShiftV );
-					}
-				}
-				else
-				{
-					//Assert( bytesShifted == 0 );
-
-					// uncompressed frame, copy data into the mix buffers to use common output code
-					chanBits = p->mConfig.bitDepth;
-					shift = 32 - chanBits;
-					if ( chanBits <= 16 )
-					{
-						for ( i = 0; i < numSamples; i++ )
-						{
-							val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-							val = (val << shift) >> shift;
-							p->mMixBufferU[i] = val;
-
-							val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-							val = (val << shift) >> shift;
-							p->mMixBufferV[i] = val;
-						}
-					}
-					else
-					{
-						// BitBufferRead() can't read more than 16 bits at a time so break up the reads
-						extraBits = chanBits - 16;
-						for ( i = 0; i < numSamples; i++ )
-						{
-							val = (int32_t) BitBufferRead( bits, 16 );
-							val = (val << 16) >> shift;
-							p->mMixBufferU[i] = val | BitBufferRead( bits, (uint8_t)extraBits );
-
-							val = (int32_t) BitBufferRead( bits, 16 );
-							val = (val << 16) >> shift;
-							p->mMixBufferV[i] = val | BitBufferRead( bits, (uint8_t)extraBits );
-						}
-					}
-
-					bits1 = chanBits * numSamples;
-					bits2 = chanBits * numSamples;
-					mixBits = mixRes = 0;
-					bytesShifted = 0;
-				}
-
-				// now read the shifted values into the shift buffer
-				if ( bytesShifted != 0 )
-				{
-					shift = bytesShifted * 8;
-					//Assert( shift <= 16 );
-
-					for ( i = 0; i < (numSamples * 2); i += 2 )
-					{
-						p->mShiftBuffer[i + 0] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-						p->mShiftBuffer[i + 1] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-					}
-				}
-
-				// un-mix the data and convert to output format
-				// - note that mixRes = 0 means just interleave so we use that path for uncompressed frames
-				switch ( p->mConfig.bitDepth )
-				{
-					case 16:
-						out32 = sampleBuffer + channelIndex;
-						unmix16( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples, mixBits, mixRes );
-						break;
-					case 20:
-						out32 = sampleBuffer + channelIndex;
-						unmix20( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples, mixBits, mixRes );
-						break;
-					case 24:
-						out32 = sampleBuffer + channelIndex;
-						unmix24( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples,
-									mixBits, mixRes, p->mShiftBuffer, bytesShifted );
-						break;
-					case 32:
-						out32 = sampleBuffer + channelIndex;
-						unmix32( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples,
-									mixBits, mixRes, p->mShiftBuffer, bytesShifted );
-						break;
-				}
-
-				channelIndex += 2;
-				*outNumSamples = numSamples;
-				break;
-			}
-
-			case ID_CCE:
-			case ID_PCE:
-			{
-				// unsupported element, bail
-				//AssertNoErr( tag );
-				status = kALAC_ParamError;
-				break;
-			}
-
-			case ID_DSE:
-			{
-				// data stream element -- parse but ignore
-				status = alac_data_stream_element (bits) ;
-				break;
-			}
-
-			case ID_FIL:
-			{
-				// fill element -- parse but ignore
-				status = alac_fill_element (bits) ;
-				break;
-			}
-
-			case ID_END:
-			{
-				// frame end, all done so byte align the frame and check for overruns
-				BitBufferByteAlign( bits, false );
-				//Assert( bits->cur == bits->end );
-				goto Exit;
-			}
-		}
-
-#if 0 // ! DEBUG
-		// if we've decoded all of our channels, bail (but not in debug b/c we want to know if we're seeing bad bits)
-		// - this also protects us if the config does not match the bitstream or crap data bits follow the audio bits
-		if ( channelIndex >= numChannels )
-			break;
-#endif
-	}
-
-NoMoreChannels:
-
-	// if we get here and haven't decoded all of the requested channels, fill the remaining channels with zeros
-	for ( ; channelIndex < numChannels; channelIndex++ )
-	{
-		int32_t *	fill32 = sampleBuffer + channelIndex;
-		Zero32( fill32, numSamples, numChannels );
-	}
-
-Exit:
-	return status;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-	FillElement()
-	- they're just filler so we don't need 'em
-*/
-static int32_t
-alac_fill_element (struct BitBuffer * bits)
-{
-	int16_t		count;
-
-	// 4-bit count or (4-bit + 8-bit count) if 4-bit count == 15
-	// - plus this weird -1 thing I still don't fully understand
-	count = BitBufferReadSmall( bits, 4 );
-	if ( count == 15 )
-		count += (int16_t) BitBufferReadSmall( bits, 8 ) - 1;
-
-	BitBufferAdvance( bits, count * 8 );
-
-	RequireAction( bits->cur <= bits->end, return kALAC_ParamError; );
-
-	return ALAC_noErr;
-}
-
-/*
-	DataStreamElement()
-	- we don't care about data stream elements so just skip them
-*/
-static int32_t
-alac_data_stream_element (struct BitBuffer * bits)
-{
-	int32_t		data_byte_align_flag;
-	uint16_t		count;
-
-	// the tag associates this data stream element with a given audio element
-
-	/* element_instance_tag = */ BitBufferReadSmall( bits, 4 );
-
-	data_byte_align_flag = BitBufferReadOne( bits );
-
-	// 8-bit count or (8-bit + 8-bit count) if 8-bit count == 255
-	count = BitBufferReadSmall( bits, 8 );
-	if ( count == 255 )
-		count += BitBufferReadSmall( bits, 8 );
-
-	// the align flag means the bitstream should be byte-aligned before reading the following data bytes
-	if ( data_byte_align_flag )
-		BitBufferByteAlign( bits, false );
-
-	// skip the data bytes
-	BitBufferAdvance( bits, count * 8 );
-
-	RequireAction( bits->cur <= bits->end, return kALAC_ParamError; );
-
-	return ALAC_noErr;
-}
-
-/*
-	ZeroN()
-	- helper routines to clear out output channel buffers when decoding fewer channels than requested
-*/
-static void Zero32( int32_t * buffer, uint32_t numItems, uint32_t stride )
-{
-	uint32_t indx;
-
-	if ( stride == 1 )
-	{
-		memset( buffer, 0, numItems * sizeof(int32_t) );
-	}
-	else
-	{
-		for ( indx = 0; indx < (numItems * stride); indx += stride )
-			buffer[indx] = 0;
-	}
-}
diff --git a/libs/libsndfile/src/ALAC/alac_decoder.h b/libs/libsndfile/src/ALAC/alac_decoder.h
deleted file mode 100644
index 78f3cb29ca..0000000000
--- a/libs/libsndfile/src/ALAC/alac_decoder.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		alac_decoder.h
-*/
-
-#ifndef ALAC_DECODER_H
-#define ALAC_DECODER_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-typedef enum
-{
-	false = 0,
-	ALAC_TRUE = 1
-} bool ;
-
-struct BitBuffer;
-
-typedef struct alac_decoder
-{
-		// decoding parameters (public for use in the analyzer)
-		ALACSpecificConfig		mConfig;
-
-		uint16_t					mActiveElements;
-
-		// decoding buffers
-		int32_t *				mMixBufferU;
-		int32_t *				mMixBufferV;
-		int32_t *				mPredictor;
-		uint16_t *				mShiftBuffer;	// note: this points to mPredictor's memory but different
-												//		 variable for clarity and type difference
-} alac_decoder ;
-
-alac_decoder * alac_decoder_new (void) ;
-void alac_decoder_delete (alac_decoder *) ;
-
-int32_t	alac_init (alac_decoder *p, void * inMagicCookie, uint32_t inMagicCookieSize) ;
-int32_t	alac_decode (alac_decoder *, struct BitBuffer * bits, uint8_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples) ;
-
-#endif	/* ALAC_DECODER_H */
diff --git a/libs/libsndfile/src/ALAC/alac_encoder.c b/libs/libsndfile/src/ALAC/alac_encoder.c
deleted file mode 100644
index 02210ee51b..0000000000
--- a/libs/libsndfile/src/ALAC/alac_encoder.c
+++ /dev/null
@@ -1,1342 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		ALACEncoder.cpp
-*/
-
-// build stuff
-#define VERBOSE_DEBUG		0
-#define DebugMsg			printf
-
-// headers
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sfendian.h"
-
-#include "alac_codec.h"
-
-#include "aglib.h"
-#include "dplib.h"
-#include "matrixlib.h"
-
-#include "ALACBitUtilities.h"
-#include "ALACAudioTypes.h"
-#include "EndianPortable.h"
-
-typedef enum
-{
-	false = 0,
-	true = 1
-} bool ;
-
-static void	GetConfig(ALAC_ENCODER *p, ALACSpecificConfig * config );
-
-static int32_t	EncodeStereo(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-static int32_t	EncodeStereoFast(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-static int32_t	EncodeStereoEscape(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t numSamples );
-static int32_t	EncodeMono(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-
-
-
-// Note: in C you can't typecast to a 2-dimensional array pointer but that's what we need when
-// picking which coefs to use so we declare this typedef b/c we *can* typecast to this type
-typedef int16_t (*SearchCoefs)[kALACMaxCoefs];
-
-// defines/constants
-const uint32_t kALACEncoderMagic	= MAKE_MARKER ('d', 'p', 'g', 'e');
-const uint32_t kMaxSampleSize		= 32;			// max allowed bit width is 32
-const uint32_t kDefaultMixBits		= 2;
-const uint32_t kDefaultMixRes		= 0;
-const uint32_t kMaxRes				= 4;
-const uint32_t kDefaultNumUV		= 8;
-const uint32_t kMinUV				= 4;
-const uint32_t kMaxUV				= 8;
-
-// static functions
-#if VERBOSE_DEBUG
-static void AddFiller( BitBuffer * bits, int32_t numBytes );
-#endif
-
-
-/*
-	Map Format: 3-bit field per channel which is the same as the "element tag" that should be placed
-				at the beginning of the frame for that channel.  Indicates whether SCE, CPE, or LFE.
-				Each particular field is accessed via the current channel indx.  Note that the channel
-				indx increments by two for channel pairs.
-
-	For example:
-
-			C L R 3-channel input		= (ID_CPE << 3) | (ID_SCE)
-				indx 0 value = (map & (0x7ul << (0 * 3))) >> (0 * 3)
-				indx 1 value = (map & (0x7ul << (1 * 3))) >> (1 * 3)
-
-			C L R Ls Rs LFE 5.1-channel input = (ID_LFE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE)
-				indx 0 value = (map & (0x7ul << (0 * 3))) >> (0 * 3)
-				indx 1 value = (map & (0x7ul << (1 * 3))) >> (1 * 3)
-				indx 3 value = (map & (0x7ul << (3 * 3))) >> (3 * 3)
-				indx 5 value = (map & (0x7ul << (5 * 3))) >> (5 * 3)
-				indx 7 value = (map & (0x7ul << (7 * 3))) >> (7 * 3)
-*/
-static const uint32_t	sChannelMaps[kALACMaxChannels] =
-{
-	ID_SCE,
-	ID_CPE,
-	(ID_CPE << 3) | (ID_SCE),
-	(ID_SCE << 9) | (ID_CPE << 3) | (ID_SCE),
-	(ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-	(ID_SCE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-	(ID_SCE << 18) | (ID_SCE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-	(ID_SCE << 21) | (ID_CPE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE)
-};
-
-static const uint32_t sSupportediPodSampleRates[] =
-{
-	8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
-};
-
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-void
-alac_set_fastmode (ALAC_ENCODER * p, int32_t fast )
-{
-	p->mFastMode = fast;
-}
-
-
-/*
-	HEADER SPECIFICATION
-
-        For every segment we adopt the following header:
-
-			1 byte reserved			(always 0)
-			1 byte flags			(see below)
-			[4 byte frame length]	(optional, see below)
-			     ---Next, the per-segment ALAC parameters---
-			1 byte mixBits			(middle-side parameter)
-			1 byte mixRes			(middle-side parameter, interpreted as signed char)
-
-			1 byte shiftU			(4 bits modeU, 4 bits denShiftU)
-			1 byte filterU			(3 bits pbFactorU, 5 bits numU)
-			(numU) shorts			(signed DP coefficients for V channel)
-			     ---Next, 2nd-channel ALAC parameters in case of stereo mode---
-			1 byte shiftV			(4 bits modeV, 4 bits denShiftV)
-			1 byte filterV			(3 bits pbFactorV, 5 bits numV)
-			(numV) shorts			(signed DP coefficients for V channel)
-			     ---After this come the shift-off bytes for (>= 24)-bit data (n-byte shift) if indicated---
-			     ---Then comes the AG-compressor bitstream---
-
-
-        FLAGS
-        -----
-
-		The presence of certain flag bits changes the header format such that the parameters might
-		not even be sent.  The currently defined flags format is:
-
-			0000psse
-
-			where		0 	= reserved, must be 0
-						p	= 1-bit field "partial frame" flag indicating 32-bit frame length follows this byte
-						ss	= 2-bit field indicating "number of shift-off bytes ignored by compression"
-						e	= 1-bit field indicating "escape"
-
-		The "partial frame" flag means that the following segment is not equal to the frame length specified
-		in the out-of-band decoder configuration.  This allows the decoder to deal with end-of-file partial
-		segments without incurring the 32-bit overhead for each segment.
-
-		The "shift-off" field indicates the number of bytes at the bottom of the word that were passed through
-		uncompressed.  The reason for this is that the entropy inherent in the LS bytes of >= 24-bit words
-		quite often means that the frame would have to be "escaped" b/c the compressed size would be >= the
-		uncompressed size.  However, by shifting the input values down and running the remaining bits through
-		the normal compression algorithm, a net win can be achieved.  If this field is non-zero, it means that
-		the shifted-off bytes follow after the parameter section of the header and before the compressed
-		bitstream.  Note that doing this also allows us to use matrixing on 32-bit inputs after one or more
-		bytes are shifted off the bottom which helps the eventual compression ratio.  For stereo channels,
-		the shifted off bytes are interleaved.
-
-        The "escape" flag means that this segment was not compressed b/c the compressed size would be
-        >= uncompressed size.  In that case, the audio data was passed through uncompressed after the header.
-        The other header parameter bytes will not be sent.
-
-
-		PARAMETERS
-		----------
-
-		If the segment is not a partial or escape segment, the total header size (in bytes) is given exactly by:
-
-			4 + (2 + 2 * numU)                   (mono mode)
-			4 + (2 + 2 * numV) + (2 + 2 * numV)  (stereo mode)
-
-        where the ALAC filter-lengths numU, numV are bounded by a
-        constant (in the current source, numU, numV <= NUMCOEPAIRS), and
-        this forces an absolute upper bound on header size.
-
-        Each segment-decode process loads up these bytes from the front of the
-        local stream, in the above order, then follows with the entropy-encoded
-        bits for the given segment.
-
-        To generalize middle-side, there are various mixing modes including middle-side, each lossless,
-        as embodied in the mix() and unmix() functions.  These functions exploit a generalized middle-side
-        transformation:
-
-        u := [(rL + (m-r)R)/m];
-        v := L - R;
-
-        where [ ] denotes integer floor.  The (lossless) inverse is
-
-        L = u + v - [rV/m];
-        R = L - v;
-
-        In the segment header, m and r are encoded in mixBits and mixRes.
-        Classical "middle-side" is obtained with m = 2, r = 1, but now
-        we have more generalized mixes.
-
-        NOTES
-        -----
-        The relevance of the ALAC coefficients is explained in detail
-        in patent documents.
-*/
-
-/*
-	EncodeStereo()
-	- encode a channel pair
-*/
-static int32_t
-EncodeStereo(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-	BitBuffer		workBits;
-	BitBuffer		startBits = *bitstream;			// squirrel away copy of current state in case we need to go back and do an escape packet
-	AGParamRec		agParams;
-	uint32_t        bits1, bits2;
-	uint32_t		dilate;
-	int32_t			mixBits, mixRes, maxRes;
-	uint32_t		minBits, minBits1, minBits2;
-	uint32_t		numU, numV;
-	uint32_t		mode;
-	uint32_t		pbFactor;
-	uint32_t		chanBits;
-	uint8_t			bytesShifted;
-	SearchCoefs		coefsU;
-	SearchCoefs		coefsV;
-	uint32_t		indx;
-	uint8_t			partialFrame;
-	uint32_t		escapeBits;
-	bool			doEscape;
-	int32_t			status = ALAC_noErr;
-	int32_t			bestRes;
-	uint32_t numUV, converge;
-
-	// make sure we handle this bit-depth before we get going
-	RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-	// reload coefs pointers for this channel pair
-	// - note that, while you might think they should be re-initialized per block, retaining state across blocks
-	//	 actually results in better overall compression
-	// - strangely, re-using the same coefs for the different passes of the "mixRes" search loop instead of using
-	//	 different coefs for the different passes of "mixRes" results in even better compression
-	coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-	coefsV = (SearchCoefs) p->mCoefsV[channelIndex];
-
-	// matrix encoding adds an extra bit but 32-bit inputs cannot be matrixed b/c 33 is too many
-	// so enable 16-bit "shift off" and encode in 17-bit mode
-	// - in addition, 24-bit mode really improves with one byte shifted off
-	if ( p->mBitDepth == 32 )
-		bytesShifted = 2;
-	else if ( p->mBitDepth >= 24 )
-		bytesShifted = 1;
-	else
-		bytesShifted = 0;
-
-	chanBits = p->mBitDepth - (bytesShifted * 8) + 1;
-
-	// flag whether or not this is a partial frame
-	partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-	// brute-force encode optimization loop
-	// - run over variations of the encoding params to find the best choice
-	mixBits		= kDefaultMixBits;
-	maxRes		= kMaxRes;
-	numU = numV = kDefaultNumUV;
-	mode		= 0;
-	pbFactor	= 4;
-	dilate		= 8;
-
-	minBits	= minBits1 = minBits2 = 1ul << 31;
-
-    bestRes = p->mLastMixRes[channelIndex];
-
-    for ( mixRes = 0; mixRes <= maxRes; mixRes++ )
-    {
-        // mix the stereo inputs
-        switch ( p->mBitDepth )
-        {
-            case 16:
-                mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate, mixBits, mixRes );
-                break;
-            case 20:
-                mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate, mixBits, mixRes );
-                break;
-            case 24:
-                // includes extraction of shifted-off bytes
-                mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate,
-                        mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                break;
-            case 32:
-                // includes extraction of shifted-off bytes
-                mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate,
-                        mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                break;
-        }
-
-        BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-        // run the dynamic predictors
-        pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-        pc_block( p->mMixBufferV, p->mPredictorV, numSamples/dilate, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-
-        // run the lossless compressor on each channel
-        set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-        status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-        RequireNoErr( status, goto Exit; );
-
-        set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-        status = dyn_comp( &agParams, p->mPredictorV, &workBits, numSamples/dilate, chanBits, &bits2 );
-        RequireNoErr( status, goto Exit; );
-
-        // look for best match
-        if ( (bits1 + bits2) < minBits1 )
-        {
-            minBits1 = bits1 + bits2;
-            bestRes = mixRes;
-        }
-    }
-
-    p->mLastMixRes[channelIndex] = (int16_t)bestRes;
-
-	// mix the stereo inputs with the current best mixRes
-	mixRes = p->mLastMixRes[channelIndex];
-	switch ( p->mBitDepth )
-	{
-		case 16:
-			mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-			break;
-		case 20:
-			mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-			break;
-		case 24:
-			// also extracts the shifted off bytes into the shift buffers
-			mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-					mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-			break;
-		case 32:
-			// also extracts the shifted off bytes into the shift buffers
-			mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-					mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-			break;
-	}
-
-	// now it's time for the predictor coefficient search loop
-	numU = numV = kMinUV;
-	minBits1 = minBits2 = 1ul << 31;
-
-	for ( numUV = kMinUV; numUV <= kMaxUV; numUV += 4 )
-	{
-		BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-		dilate = 32;
-
-		// run the predictor over the same data multiple times to help it converge
-		for ( converge = 0; converge < 8; converge++ )
-		{
-		    pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numUV-1], numUV, chanBits, DENSHIFT_DEFAULT );
-		    pc_block( p->mMixBufferV, p->mPredictorV, numSamples/dilate, coefsV[numUV-1], numUV, chanBits, DENSHIFT_DEFAULT );
-		}
-
-		dilate = 8;
-
-		set_ag_params( &agParams, MB0, (pbFactor * PB0)/4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-		status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-
-		if ( (bits1 * dilate + 16 * numUV) < minBits1 )
-		{
-			minBits1 = bits1 * dilate + 16 * numUV;
-			numU = numUV;
-		}
-
-		set_ag_params( &agParams, MB0, (pbFactor * PB0)/4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-		status = dyn_comp( &agParams, p->mPredictorV, &workBits, numSamples/dilate, chanBits, &bits2 );
-
-		if ( (bits2 * dilate + 16 * numUV) < minBits2 )
-		{
-			minBits2 = bits2 * dilate + 16 * numUV;
-			numV = numUV;
-		}
-	}
-
-	// test for escape hatch if best calculated compressed size turns out to be more than the input size
-	minBits = minBits1 + minBits2 + (8 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-	if ( bytesShifted != 0 )
-		minBits += (numSamples * (bytesShifted * 8) * 2);
-
-	escapeBits = (numSamples * p->mBitDepth * 2) + ((partialFrame == true) ? 32 : 0) + (2 * 8);	/* 2 common header bytes */
-
-	doEscape = (minBits >= escapeBits) ? true : false;
-
-	if ( doEscape == false )
-	{
-		// write bitstream header and coefs
-		BitBufferWrite( bitstream, 0, 12 );
-		BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-		if ( partialFrame )
-			BitBufferWrite( bitstream, numSamples, 32 );
-		BitBufferWrite( bitstream, mixBits, 8 );
-		BitBufferWrite( bitstream, mixRes, 8 );
-
-		//Assert( (mode < 16) && (DENSHIFT_DEFAULT < 16) );
-		//Assert( (pbFactor < 8) && (numU < 32) );
-		//Assert( (pbFactor < 8) && (numV < 32) );
-
-		BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-		BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-		for ( indx = 0; indx < numU; indx++ )
-			BitBufferWrite( bitstream, coefsU[numU - 1][indx], 16 );
-
-		BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-		BitBufferWrite( bitstream, (pbFactor << 5) | numV, 8 );
-		for ( indx = 0; indx < numV; indx++ )
-			BitBufferWrite( bitstream, coefsV[numV - 1][indx], 16 );
-
-		// if shift active, write the interleaved shift buffers
-		if ( bytesShifted != 0 )
-		{
-			uint32_t		bitShift = bytesShifted * 8;
-
-			//Assert( bitShift <= 16 );
-
-			for ( indx = 0; indx < (numSamples * 2); indx += 2 )
-			{
-				uint32_t			shiftedVal;
-
-				shiftedVal = ((uint32_t) p->mShiftBufferUV[indx + 0] << bitShift) | (uint32_t) p->mShiftBufferUV[indx + 1];
-				BitBufferWrite( bitstream, shiftedVal, bitShift * 2 );
-			}
-		}
-
-		// run the dynamic predictor and lossless compression for the "left" channel
-		// - note: to avoid allocating more buffers, we're mixing and matching between the available buffers instead
-		//		   of only using "U" buffers for the U-channel and "V" buffers for the V-channel
-		if ( mode == 0 )
-		{
-			pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-		}
-		else
-		{
-			pc_block( p->mMixBufferU, p->mPredictorV, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-			pc_block( p->mPredictorV, p->mPredictorU, numSamples, NULL, 31, chanBits, 0 );
-		}
-
-		set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-		status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-		RequireNoErr( status, goto Exit; );
-
-		// run the dynamic predictor and lossless compression for the "right" channel
-		if ( mode == 0 )
-		{
-			pc_block( p->mMixBufferV, p->mPredictorV, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-		}
-		else
-		{
-			pc_block( p->mMixBufferV, p->mPredictorU, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-			pc_block( p->mPredictorU, p->mPredictorV, numSamples, NULL, 31, chanBits, 0 );
-		}
-
-		set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-		status = dyn_comp( &agParams, p->mPredictorV, bitstream, numSamples, chanBits, &bits2 );
-		RequireNoErr( status, goto Exit; );
-
-		/*	if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-			chuck it and do an escape packet
-		*/
-		minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-		if ( minBits >= escapeBits )
-		{
-			*bitstream = startBits;		// reset bitstream state
-			doEscape = true;
-			printf( "compressed frame too big: %u vs. %u \n", minBits, escapeBits );
-		}
-	}
-
-	if ( doEscape == true )
-	{
-		/* escape */
-		status = EncodeStereoEscape(p, bitstream, inputBuffer, stride, numSamples );
-
-#if VERBOSE_DEBUG
-		DebugMsg( "escape!: %u vs %u\n", minBits, escapeBits );
-#endif
-	}
-
-Exit:
-	return status;
-}
-
-/*
-	EncodeStereoFast()
-	- encode a channel pair without the search loop for maximum possible speed
-*/
-static int32_t
-EncodeStereoFast(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-	BitBuffer		startBits = *bitstream;			// squirrel away current bit position in case we decide to use escape hatch
-	AGParamRec		agParams;
-	uint32_t		bits1, bits2;
-	int32_t			mixBits, mixRes;
-	uint32_t		minBits, minBits1, minBits2;
-	uint32_t		numU, numV;
-	uint32_t		mode;
-	uint32_t		pbFactor;
-	uint32_t		chanBits;
-	uint8_t			bytesShifted;
-	SearchCoefs		coefsU;
-	SearchCoefs		coefsV;
-	uint32_t		indx;
-	uint8_t			partialFrame;
-	uint32_t		escapeBits;
-	bool			doEscape;
-	int32_t			status;
-
-	// make sure we handle this bit-depth before we get going
-	RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-	// reload coefs pointers for this channel pair
-	// - note that, while you might think they should be re-initialized per block, retaining state across blocks
-	//	 actually results in better overall compression
-	// - strangely, re-using the same coefs for the different passes of the "mixRes" search loop instead of using
-	//	 different coefs for the different passes of "mixRes" results in even better compression
-	coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-	coefsV = (SearchCoefs) p->mCoefsV[channelIndex];
-
-	// matrix encoding adds an extra bit but 32-bit inputs cannot be matrixed b/c 33 is too many
-	// so enable 16-bit "shift off" and encode in 17-bit mode
-	// - in addition, 24-bit mode really improves with one byte shifted off
-	if ( p->mBitDepth == 32 )
-		bytesShifted = 2;
-	else if ( p->mBitDepth >= 24 )
-		bytesShifted = 1;
-	else
-		bytesShifted = 0;
-
-	chanBits = p->mBitDepth - (bytesShifted * 8) + 1;
-
-	// flag whether or not this is a partial frame
-	partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-	// set up default encoding parameters for "fast" mode
-	mixBits		= kDefaultMixBits;
-	mixRes		= kDefaultMixRes;
-	numU = numV = kDefaultNumUV;
-	mode		= 0;
-	pbFactor	= 4;
-
-	minBits	= minBits1 = minBits2 = 1ul << 31;
-
-	// mix the stereo inputs with default mixBits/mixRes
-	switch ( p->mBitDepth )
-	{
-		case 16:
-			mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-			break;
-		case 20:
-			mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-			break;
-		case 24:
-			// also extracts the shifted off bytes into the shift buffers
-			mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-					mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-			break;
-		case 32:
-			// also extracts the shifted off bytes into the shift buffers
-			mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-					mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-			break;
-	}
-
-	/* speculatively write the bitstream assuming the compressed version will be smaller */
-
-	// write bitstream header and coefs
-	BitBufferWrite( bitstream, 0, 12 );
-	BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-	if ( partialFrame )
-		BitBufferWrite( bitstream, numSamples, 32 );
-	BitBufferWrite( bitstream, mixBits, 8 );
-	BitBufferWrite( bitstream, mixRes, 8 );
-
-	//Assert( (mode < 16) && (DENSHIFT_DEFAULT < 16) );
-	//Assert( (pbFactor < 8) && (numU < 32) );
-	//Assert( (pbFactor < 8) && (numV < 32) );
-
-	BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-	BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-	for ( indx = 0; indx < numU; indx++ )
-		BitBufferWrite( bitstream, coefsU[numU - 1][indx], 16 );
-
-	BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-	BitBufferWrite( bitstream, (pbFactor << 5) | numV, 8 );
-	for ( indx = 0; indx < numV; indx++ )
-		BitBufferWrite( bitstream, coefsV[numV - 1][indx], 16 );
-
-	// if shift active, write the interleaved shift buffers
-	if ( bytesShifted != 0 )
-	{
-		uint32_t		bitShift = bytesShifted * 8;
-
-		//Assert( bitShift <= 16 );
-
-		for ( indx = 0; indx < (numSamples * 2); indx += 2 )
-		{
-			uint32_t			shiftedVal;
-
-			shiftedVal = ((uint32_t) p->mShiftBufferUV[indx + 0] << bitShift) | (uint32_t) p->mShiftBufferUV[indx + 1];
-			BitBufferWrite( bitstream, shiftedVal, bitShift * 2 );
-		}
-	}
-
-	// run the dynamic predictor and lossless compression for the "left" channel
-	// - note: we always use mode 0 in the "fast" path so we don't need the code for mode != 0
-	pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-
-	set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-	status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-	RequireNoErr( status, goto Exit; );
-
-	// run the dynamic predictor and lossless compression for the "right" channel
-	pc_block( p->mMixBufferV, p->mPredictorV, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-
-	set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-	status = dyn_comp( &agParams, p->mPredictorV, bitstream, numSamples, chanBits, &bits2 );
-	RequireNoErr( status, goto Exit; );
-
-	// do bit requirement calculations
-	minBits1 = bits1 + (numU * sizeof(int16_t) * 8);
-	minBits2 = bits2 + (numV * sizeof(int16_t) * 8);
-
-	// test for escape hatch if best calculated compressed size turns out to be more than the input size
-	minBits = minBits1 + minBits2 + (8 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-	if ( bytesShifted != 0 )
-		minBits += (numSamples * (bytesShifted * 8) * 2);
-
-	escapeBits = (numSamples * p->mBitDepth * 2) + ((partialFrame == true) ? 32 : 0) + (2 * 8);	/* 2 common header bytes */
-
-	doEscape = (minBits >= escapeBits) ? true : false;
-
-	if ( doEscape == false )
-	{
-		/*	if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-			chuck it and do an escape packet
-		*/
-		minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-		if ( minBits >= escapeBits )
-		{
-			doEscape = true;
-			printf( "compressed frame too big: %u vs. %u\n", minBits, escapeBits );
-		}
-
-	}
-
-	if ( doEscape == true )
-	{
-		/* escape */
-
-		// reset bitstream position since we speculatively wrote the compressed version
-		*bitstream = startBits;
-
-		// write escape frame
-		status = EncodeStereoEscape(p, bitstream, inputBuffer, stride, numSamples );
-
-#if VERBOSE_DEBUG
-		DebugMsg( "escape!: %u vs %u\n", minBits, (numSamples * p->mBitDepth * 2) );
-#endif
-	}
-
-Exit:
-	return status;
-}
-
-/*
-	EncodeStereoEscape()
-	- encode stereo escape frame
-*/
-static int32_t
-EncodeStereoEscape(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t numSamples )
-{
-	uint8_t			partialFrame;
-	uint32_t		indx;
-
-	// flag whether or not this is a partial frame
-	partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-	// write bitstream header
-	BitBufferWrite( bitstream, 0, 12 );
-	BitBufferWrite( bitstream, (partialFrame << 3) | 1, 4 );	// LSB = 1 means "frame not compressed"
-	if ( partialFrame )
-		BitBufferWrite( bitstream, numSamples, 32 );
-
-	// just copy the input data to the output buffer
-	switch ( p->mBitDepth )
-	{
-		case 16:
-			for ( indx = 0; indx < (numSamples * stride); indx += stride )
-			{
-				BitBufferWrite( bitstream, inputBuffer[indx + 0] >> 16, 16 );
-				BitBufferWrite( bitstream, inputBuffer[indx + 1] >> 16, 16 );
-			}
-			break;
-		case 20:
-			for ( indx = 0; indx < (numSamples * stride); indx += stride )
-			{
-				BitBufferWrite( bitstream, inputBuffer[indx + 0] >> 12, 16 );
-				BitBufferWrite( bitstream, inputBuffer[indx + 1] >> 12, 16 );
-			}
-			break;
-		case 24:
-			// mix24() with mixres param = 0 means de-interleave so use it to simplify things
-			mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, 0, 0, p->mShiftBufferUV, 0 );
-			for ( indx = 0; indx < numSamples; indx++ )
-			{
-				BitBufferWrite( bitstream, p->mMixBufferU[indx] >> 8, 24 );
-				BitBufferWrite( bitstream, p->mMixBufferV[indx] >> 8, 24 );
-			}
-			break;
-		case 32:
-			for ( indx = 0; indx < (numSamples * stride); indx += stride )
-			{
-				BitBufferWrite( bitstream, inputBuffer[indx + 0], 32 );
-				BitBufferWrite( bitstream, inputBuffer[indx + 1], 32 );
-			}
-			break;
-	}
-
-	return ALAC_noErr;
-}
-
-/*
-	EncodeMono()
-	- encode a mono input buffer
-*/
-static int32_t
-EncodeMono(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-	BitBuffer		startBits = *bitstream;			// squirrel away copy of current state in case we need to go back and do an escape packet
-	AGParamRec		agParams;
-	uint32_t		bits1;
-	uint32_t		numU;
-	SearchCoefs		coefsU;
-	uint32_t		dilate;
-	uint32_t		minBits, bestU;
-	uint32_t		minU, maxU;
-	uint32_t		indx, indx2;
-	uint8_t			bytesShifted;
-	uint32_t		shift;
-	uint32_t		mask;
-	uint32_t		chanBits;
-	uint8_t			pbFactor;
-	uint8_t			partialFrame;
-	uint32_t		escapeBits;
-	bool			doEscape;
-	int32_t			status = ALAC_noErr;
-	uint32_t converge;
-
-
-	// make sure we handle this bit-depth before we get going
-	RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-	// reload coefs array from previous frame
-	coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-
-	// pick bit depth for actual encoding
-	// - we lop off the lower byte(s) for 24-/32-bit encodings
-	if ( p->mBitDepth == 32 )
-		bytesShifted = 2;
-	else if ( p->mBitDepth >= 24 )
-		bytesShifted = 1;
-	else
-		bytesShifted = 0;
-
-	shift = bytesShifted * 8;
-	mask = (1ul << shift) - 1;
-	chanBits = p->mBitDepth - (bytesShifted * 8);
-
-	// flag whether or not this is a partial frame
-	partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-	// convert N-bit data to 32-bit for predictor
-	switch ( p->mBitDepth )
-	{
-		case 16:
-			// convert 16-bit data to 32-bit for predictor
-			for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-				p->mMixBufferU[indx] = inputBuffer[indx2] >> 16;
-			break;
-
-		case 20:
-			// convert 20-bit data to 32-bit for predictor
-			for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-				p->mMixBufferU[indx] = inputBuffer[indx2] >> 12;
-			break;
-		case 24:
-			// convert 24-bit data to 32-bit for the predictor and extract the shifted off byte(s)
-			for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-			{
-				p->mMixBufferU[indx] = inputBuffer[indx2] >> 8;
-				p->mShiftBufferUV[indx] = (uint16_t)(p->mMixBufferU[indx] & mask);
-				p->mMixBufferU[indx] >>= shift;
-			}
-
-			break;
-		case 32:
-			// just copy the 32-bit input data for the predictor and extract the shifted off byte(s)
-			for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-			{
-				p->mShiftBufferUV[indx] = (uint16_t)(inputBuffer[indx2] & mask);
-				p->mMixBufferU[indx] = inputBuffer[indx2] >> shift;
-			}
-			break;
-	}
-
-	// brute-force encode optimization loop (implied "encode depth" of 0 if comparing to cmd line tool)
-	// - run over variations of the encoding params to find the best choice
-	minU		= 4;
-	maxU		= 8;
-	minBits		= 1ul << 31;
-	pbFactor	= 4;
-
-	bestU	= minU;
-
-	for ( numU = minU; numU <= maxU; numU += 4 )
-	{
-		BitBuffer		workBits;
-		uint32_t		numBits;
-
-		BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-		dilate = 32;
-		for ( converge = 0; converge < 7; converge++ )
-			pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-		dilate = 8;
-		pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-		set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-		status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-		RequireNoErr( status, goto Exit; );
-
-		numBits = (dilate * bits1) + (16 * numU);
-		if ( numBits < minBits )
-		{
-			bestU	= numU;
-			minBits = numBits;
-		}
-	}
-
-	// test for escape hatch if best calculated compressed size turns out to be more than the input size
-	// - first, add bits for the header bytes mixRes/maxRes/shiftU/filterU
-	minBits += (4 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-	if ( bytesShifted != 0 )
-		minBits += (numSamples * (bytesShifted * 8));
-
-	escapeBits = (numSamples * p->mBitDepth) + ((partialFrame == true) ? 32 : 0) + (2 * 8);	/* 2 common header bytes */
-
-	doEscape = (minBits >= escapeBits) ? true : false;
-
-	if ( doEscape == false )
-	{
-		// write bitstream header
-		BitBufferWrite( bitstream, 0, 12 );
-		BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-		if ( partialFrame )
-			BitBufferWrite( bitstream, numSamples, 32 );
-		BitBufferWrite( bitstream, 0, 16 );								// mixBits = mixRes = 0
-
-		// write the params and predictor coefs
-		numU = bestU;
-		BitBufferWrite( bitstream, (0 << 4) | DENSHIFT_DEFAULT, 8 );	// modeU = 0
-		BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-		for ( indx = 0; indx < numU; indx++ )
-			BitBufferWrite( bitstream, coefsU[numU-1][indx], 16 );
-
-		// if shift active, write the interleaved shift buffers
-		if ( bytesShifted != 0 )
-		{
-			for ( indx = 0; indx < numSamples; indx++ )
-				BitBufferWrite( bitstream, p->mShiftBufferUV[indx], shift );
-		}
-
-		// run the dynamic predictor with the best result
-		pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-		// do lossless compression
-		set_standard_ag_params( &agParams, numSamples, numSamples );
-		status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-		//AssertNoErr( status );
-
-
-		/*	if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-			chuck it and do an escape packet
-		*/
-		minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-		if ( minBits >= escapeBits )
-		{
-			*bitstream = startBits;		// reset bitstream state
-			doEscape = true;
-			printf( "compressed frame too big: %u vs. %u\n", minBits, escapeBits );
-		}
-	}
-
-	if ( doEscape == true )
-	{
-		// write bitstream header and coefs
-		BitBufferWrite( bitstream, 0, 12 );
-		BitBufferWrite( bitstream, (partialFrame << 3) | 1, 4 );	// LSB = 1 means "frame not compressed"
-		if ( partialFrame )
-			BitBufferWrite( bitstream, numSamples, 32 );
-
-		// just copy the input data to the output buffer
-		switch ( p->mBitDepth )
-		{
-			case 16:
-				for ( indx = 0; indx < (numSamples * stride); indx += stride )
-					BitBufferWrite( bitstream, inputBuffer[indx] >> 16, 16 );
-				break;
-			case 20:
-				// convert 20-bit data to 32-bit for simplicity
-				for ( indx = 0; indx < (numSamples * stride); indx += stride )
-					BitBufferWrite( bitstream, inputBuffer[indx] >> 12, 20 );
-				break;
-			case 24:
-				// convert 24-bit data to 32-bit for simplicity
-				for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-				{
-					p->mMixBufferU[indx] = inputBuffer[indx2] >> 8;
-					BitBufferWrite( bitstream, p->mMixBufferU[indx], 24 );
-				}
-				break;
-			case 32:
-				for ( indx = 0; indx < (numSamples * stride); indx += stride )
-					BitBufferWrite( bitstream, inputBuffer[indx], 32 );
-				break;
-		}
-#if VERBOSE_DEBUG
-		DebugMsg( "escape!: %u vs %u\n", minBits, (numSamples * p->mBitDepth) );
-#endif
-	}
-
-Exit:
-	return status;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-	Encode()
-	- encode the next block of samples
-*/
-int32_t
-alac_encode(ALAC_ENCODER *p, uint32_t numChannels, uint32_t		numSamples,
-								   int32_t * theReadBuffer, unsigned char * theWriteBuffer, uint32_t * ioNumBytes)
-{
-	uint32_t		outputSize;
-	BitBuffer		bitstream;
-	int32_t			status;
-
-	// create a bit buffer structure pointing to our output buffer
-	BitBufferInit( &bitstream, theWriteBuffer, p->mMaxOutputBytes );
-
-	if ( numChannels == 2 )
-	{
-		// add 3-bit frame start tag ID_CPE = channel pair & 4-bit element instance tag = 0
-		BitBufferWrite( &bitstream, ID_CPE, 3 );
-		BitBufferWrite( &bitstream, 0, 4 );
-
-		// encode stereo input buffer
-		if ( p->mFastMode == false )
-			status = EncodeStereo(p, &bitstream, theReadBuffer, 2, 0, numSamples );
-		else
-			status = EncodeStereoFast(p, &bitstream, theReadBuffer, 2, 0, numSamples );
-		RequireNoErr( status, goto Exit; );
-	}
-	else if ( numChannels == 1 )
-	{
-		// add 3-bit frame start tag ID_SCE = mono channel & 4-bit element instance tag = 0
-		BitBufferWrite( &bitstream, ID_SCE, 3 );
-		BitBufferWrite( &bitstream, 0, 4 );
-
-		// encode mono input buffer
-		status = EncodeMono(p, &bitstream, theReadBuffer, 1, 0, numSamples );
-		RequireNoErr( status, goto Exit; );
-	}
-	else
-	{
-		int32_t *			inputBuffer;
-		uint32_t			tag;
-		uint32_t			channelIndex;
-		uint32_t			inputIncrement;
-		uint8_t				stereoElementTag;
-		uint8_t				monoElementTag;
-		uint8_t				lfeElementTag;
-
-		inputBuffer		= theReadBuffer;
-		inputIncrement	= ((p->mBitDepth + 7) / 8);
-
-		stereoElementTag	= 0;
-		monoElementTag		= 0;
-		lfeElementTag		= 0;
-
-		for ( channelIndex = 0; channelIndex < numChannels; )
-		{
-			tag = (sChannelMaps[numChannels - 1] & (0x7ul << (channelIndex * 3))) >> (channelIndex * 3);
-
-			BitBufferWrite( &bitstream, tag, 3 );
-			switch ( tag )
-			{
-				case ID_SCE:
-					// mono
-					BitBufferWrite( &bitstream, monoElementTag, 4 );
-
-					status = EncodeMono(p, &bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-					inputBuffer += inputIncrement;
-					channelIndex++;
-					monoElementTag++;
-					break;
-
-				case ID_CPE:
-					// stereo
-					BitBufferWrite( &bitstream, stereoElementTag, 4 );
-
-					status = EncodeStereo(p,&bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-					inputBuffer += (inputIncrement * 2);
-					channelIndex += 2;
-					stereoElementTag++;
-					break;
-
-				case ID_LFE:
-					// LFE channel (subwoofer)
-					BitBufferWrite( &bitstream, lfeElementTag, 4 );
-
-					status = EncodeMono(p, &bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-					inputBuffer += inputIncrement;
-					channelIndex++;
-					lfeElementTag++;
-					break;
-
-				default:
-					printf( "That ain't right! (%u)\n", tag );
-					status = kALAC_ParamError;
-					goto Exit;
-			}
-
-			RequireNoErr( status, goto Exit; );
-		}
-	}
-
-#if VERBOSE_DEBUG
-{
-	// if there is room left in the output buffer, add some random fill data to test decoder
-	int32_t			bitsLeft;
-	int32_t			bytesLeft;
-
-	bitsLeft = BitBufferGetPosition( &bitstream ) - 3;	// - 3 for ID_END tag
-	bytesLeft = bitstream.byteSize - ((bitsLeft + 7) / 8);
-
-	if ( (bytesLeft > 20) && ((bytesLeft & 0x4u) != 0) )
-		AddFiller( &bitstream, bytesLeft );
-}
-#endif
-
-	// add 3-bit frame end tag: ID_END
-	BitBufferWrite( &bitstream, ID_END, 3 );
-
-	// byte-align the output data
-	BitBufferByteAlign( &bitstream, true );
-
-	outputSize = BitBufferGetPosition( &bitstream ) / 8;
-	//Assert( outputSize <= mMaxOutputBytes );
-
-
-	// all good, let iTunes know what happened and remember the total number of input sample frames
-	*ioNumBytes = outputSize;
-	//mEncodedFrames		   	   += encodeMsg->numInputSamples;
-
-	// gather encoding stats
-	p->mTotalBytesGenerated += outputSize;
-	p->mMaxFrameBytes = MAX( p->mMaxFrameBytes, outputSize );
-
-	status = ALAC_noErr;
-
-Exit:
-	return status;
-}
-
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-	GetConfig()
-*/
-void
-GetConfig(ALAC_ENCODER *p, ALACSpecificConfig * config )
-{
-	config->frameLength			= Swap32NtoB(p->mFrameSize);
-	config->compatibleVersion	= (uint8_t) kALACCompatibleVersion;
-	config->bitDepth			= (uint8_t) p->mBitDepth;
-	config->pb					= (uint8_t) PB0;
-	config->kb					= (uint8_t) KB0;
-	config->mb					= (uint8_t) MB0;
-	config->numChannels			= (uint8_t) p->mNumChannels;
-	config->maxRun				= Swap16NtoB((uint16_t) MAX_RUN_DEFAULT);
-	config->maxFrameBytes		= Swap32NtoB(p->mMaxFrameBytes);
-	config->avgBitRate			= Swap32NtoB(p->mAvgBitRate);
-	config->sampleRate			= Swap32NtoB(p->mOutputSampleRate);
-}
-
-uint32_t
-alac_get_magic_cookie_size(uint32_t inNumChannels)
-{
-    if (inNumChannels > 2)
-    {
-        return sizeof(ALACSpecificConfig) + kChannelAtomSize + sizeof(ALACAudioChannelLayout);
-    }
-    else
-    {
-        return sizeof(ALACSpecificConfig);
-    }
-}
-
-void
-alac_get_magic_cookie(ALAC_ENCODER *p, void * outCookie, uint32_t * ioSize )
-{
-    ALACSpecificConfig theConfig = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    ALACAudioChannelLayout theChannelLayout = {0, 0, 0};
-    uint8_t theChannelAtom[kChannelAtomSize] = {0, 0, 0, 0, 'c', 'h', 'a', 'n', 0, 0, 0, 0};
-    uint32_t theCookieSize = sizeof(ALACSpecificConfig);
-    uint8_t * theCookiePointer = (uint8_t *)outCookie;
-
-    GetConfig(p, &theConfig);
-    if (theConfig.numChannels > 2)
-    {
-        theChannelLayout.mChannelLayoutTag = Swap32NtoB(ALACChannelLayoutTags[theConfig.numChannels - 1]);
-        theCookieSize += (sizeof(ALACAudioChannelLayout) + kChannelAtomSize);
-    }
-     if (*ioSize >= theCookieSize)
-    {
-        memcpy(theCookiePointer, &theConfig, sizeof(ALACSpecificConfig));
-        theChannelAtom[3] = (sizeof(ALACAudioChannelLayout) + kChannelAtomSize);
-        if (theConfig.numChannels > 2)
-        {
-            theCookiePointer += sizeof(ALACSpecificConfig);
-            memcpy(theCookiePointer, theChannelAtom, kChannelAtomSize);
-            theCookiePointer += kChannelAtomSize;
-            memcpy(theCookiePointer, &theChannelLayout, sizeof(ALACAudioChannelLayout));
-        }
-        *ioSize = theCookieSize;
-    }
-    else
-    {
-        *ioSize = 0; // no incomplete cookies
-    }
-}
-
-/*
-	alac_encoder_init()
-	- initialize the encoder component with the current config
-*/
-int32_t
-alac_encoder_init (ALAC_ENCODER *p, uint32_t samplerate, uint32_t channels, uint32_t format_flags, uint32_t frameSize)
-{
-	int32_t			status;
-	uint32_t indx;
-	int32_t channel, search;
-
-	p->mFrameSize = (frameSize > 0 && frameSize <= ALAC_FRAME_LENGTH) ? frameSize : ALAC_FRAME_LENGTH ;
-
-    p->mOutputSampleRate = samplerate;
-    p->mNumChannels = channels;
-    switch (format_flags)
-    {
-        case 1:
-            p->mBitDepth = 16;
-            break;
-        case 2:
-            p->mBitDepth = 20;
-            break;
-        case 3:
-            p->mBitDepth = 24;
-            break;
-        case 4:
-            p->mBitDepth = 32;
-            break;
-        default:
-            break;
-    }
-
-	// set up default encoding parameters and state
-	// - note: mFrameSize is set in the constructor or via alac_set_frame_size() which must be called before this routine
-	for ( indx = 0; indx < kALACMaxChannels; indx++ )
-		p->mLastMixRes[indx] = kDefaultMixRes;
-
-	// the maximum output frame size can be no bigger than (samplesPerBlock * numChannels * ((10 + sampleSize)/8) + 1)
-	// but note that this can be bigger than the input size!
-	// - since we don't yet know what our input format will be, use our max allowed sample size in the calculation
-	p->mMaxOutputBytes = p->mFrameSize * p->mNumChannels * ((10 + kMaxSampleSize) / 8)  + 1;
-
-	status = ALAC_noErr;
-
-	// initialize coefs arrays once b/c retaining state across blocks actually improves the encode ratio
-	for ( channel = 0; channel < (int32_t) p->mNumChannels; channel++ )
-	{
-		for ( search = 0; search < kALACMaxSearches; search++ )
-		{
-			init_coefs( p->mCoefsU[channel][search], DENSHIFT_DEFAULT, kALACMaxCoefs );
-			init_coefs( p->mCoefsV[channel][search], DENSHIFT_DEFAULT, kALACMaxCoefs );
-		}
-	}
-
-	return status;
-}
-
-/*
-	alac_get_source_format()
-	- given the input format, return one of our supported formats
-*/
-void
-alac_get_source_format(ALAC_ENCODER *p, const AudioFormatDescription * source, AudioFormatDescription * output )
-{
-	(void) output ;
-	// default is 16-bit native endian
-	// - note: for float input we assume that's coming from one of our decoders (mp3, aac) so it only makes sense
-	//		   to encode to 16-bit since the source was lossy in the first place
-	// - note: if not a supported bit depth, find the closest supported bit depth to the input one
-	if ( (source->mFormatID != kALACFormatLinearPCM) || ((source->mFormatFlags & kALACFormatFlagIsFloat) != 0) ||
-		( source->mBitsPerChannel <= 16 ) )
-		p->mBitDepth = 16;
-	else if ( source->mBitsPerChannel <= 20 )
-		p->mBitDepth = 20;
-	else if ( source->mBitsPerChannel <= 24 )
-		p->mBitDepth = 24;
-	else
-		p->mBitDepth = 32;
-
-	// we support 16/20/24/32-bit integer data at any sample rate and our target number of channels
-	// and sample rate were specified when we were configured
-	/*
-    MakeUncompressedAudioFormat( mNumChannels, (float) mOutputSampleRate, mBitDepth, kAudioFormatFlagsNativeIntegerPacked, output );
-     */
-}
-
-
-
-#if VERBOSE_DEBUG
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-	AddFiller()
-	- add fill and data stream elements to the bitstream to test the decoder
-*/
-static void AddFiller( BitBuffer * bits, int32_t numBytes )
-{
-	uint8_t		tag;
-	int32_t		indx;
-
-	// out of lameness, subtract 6 bytes to deal with header + alignment as required for fill/data elements
-	numBytes -= 6;
-	if ( numBytes <= 0 )
-		return;
-
-	// randomly pick Fill or Data Stream Element based on numBytes requested
-	tag = (numBytes & 0x8) ? ID_FIL : ID_DSE;
-
-	BitBufferWrite( bits, tag, 3 );
-	if ( tag == ID_FIL )
-	{
-		// can't write more than 269 bytes in a fill element
-		numBytes = (numBytes > 269) ? 269 : numBytes;
-
-		// fill element = 4-bit size unless >= 15 then 4-bit size + 8-bit extension size
-		if ( numBytes >= 15 )
-		{
-			uint16_t			extensionSize;
-
-			BitBufferWrite( bits, 15, 4 );
-
-			// 8-bit extension count field is "extra + 1" which is weird but I didn't define the syntax
-			// - otherwise, there's no way to represent 15
-			// - for example, to really mean 15 bytes you must encode extensionSize = 1
-			// - why it's not like data stream elements I have no idea
-			extensionSize = (numBytes - 15) + 1;
-			//Assert( extensionSize <= 255 );
-			BitBufferWrite( bits, extensionSize, 8 );
-		}
-		else
-			BitBufferWrite( bits, numBytes, 4 );
-
-		BitBufferWrite( bits, 0x10, 8 );		// extension_type = FILL_DATA = b0001 or'ed with fill_nibble = b0000
-		for ( indx = 0; indx < (numBytes - 1); indx++ )
-			BitBufferWrite( bits, 0xa5, 8 );	// fill_byte = b10100101 = 0xa5
-	}
-	else
-	{
-		// can't write more than 510 bytes in a data stream element
-		numBytes = (numBytes > 510) ? 510 : numBytes;
-
-		BitBufferWrite( bits, 0, 4 );			// element instance tag
-		BitBufferWrite( bits, 1, 1 );			// byte-align flag = true
-
-		// data stream element = 8-bit size unless >= 255 then 8-bit size + 8-bit size
-		if ( numBytes >= 255 )
-		{
-			BitBufferWrite( bits, 255, 8 );
-			BitBufferWrite( bits, numBytes - 255, 8 );
-		}
-		else
-			BitBufferWrite( bits, numBytes, 8 );
-
-		BitBufferByteAlign( bits, true );		// byte-align with zeros
-
-		for ( indx = 0; indx < numBytes; indx++ )
-			BitBufferWrite( bits, 0x5a, 8 );
-	}
-}
-
-#endif	/* VERBOSE_DEBUG */
diff --git a/libs/libsndfile/src/ALAC/dp_dec.c b/libs/libsndfile/src/ALAC/dp_dec.c
deleted file mode 100644
index 45aae7a9e1..0000000000
--- a/libs/libsndfile/src/ALAC/dp_dec.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		dp_dec.c
-
-	Contains:	Dynamic Predictor decode routines
-
-	Copyright:	(c) 2001-2011 Apple, Inc.
-*/
-
-
-#include "dplib.h"
-#include <string.h>
-
-#if __GNUC__
-#define ALWAYS_INLINE		__attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-#define LOOP_ALIGN
-
-static inline int32_t ALWAYS_INLINE sign_of_int( int32_t i )
-{
-    int32_t negishift;
-
-    negishift = ((uint32_t)-i) >> 31;
-    return negishift | (i >> 31);
-}
-
-void unpc_block( int32_t * pc1, int32_t * out, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift )
-{
-	register int16_t	a0, a1, a2, a3;
-	register int32_t	b0, b1, b2, b3;
-	int32_t					j, k, lim;
-	int32_t				sum1, sg, sgn, top, dd;
-	int32_t *			pout;
-	int32_t				del, del0;
-	uint32_t			chanshift = 32 - chanbits;
-	int32_t				denhalf = 1<<(denshift-1);
-
-	out[0] = pc1[0];
-	if ( numactive == 0 )
-	{
-		// just copy if numactive == 0 (but don't bother if in/out pointers the same)
-		if ( (num > 1)  && (pc1 != out) )
-			memcpy( &out[1], &pc1[1], (num - 1) * sizeof(int32_t) );
-		return;
-	}
-	if ( numactive == 31 )
-	{
-		// short-circuit if numactive == 31
-		int32_t		prev;
-
-		/*	this code is written such that the in/out buffers can be the same
-			to conserve buffer space on embedded devices like the iPod
-
-			(original code)
-			for ( j = 1; j < num; j++ )
-				del = pc1[j] + out[j-1];
-				out[j] = (del << chanshift) >> chanshift;
-		*/
-		prev = out[0];
-		for ( j = 1; j < num; j++ )
-		{
-			del = pc1[j] + prev;
-			prev = (del << chanshift) >> chanshift;
-			out[j] = prev;
-		}
-		return;
-	}
-
-	for ( j = 1; j <= numactive; j++ )
-	{
-		del = pc1[j] + out[j-1];
-		out[j] = (del << chanshift) >> chanshift;
-	}
-
-	lim = numactive + 1;
-
-	if ( numactive == 4 )
-	{
-		// optimization for numactive == 4
-		register int16_t	ia0, ia1, ia2, ia3;
-		register int32_t	ib0, ib1, ib2, ib3;
-
-		ia0 = coefs[0];
-		ia1 = coefs[1];
-		ia2 = coefs[2];
-		ia3 = coefs[3];
-
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			top = out[j - lim];
-			pout = out + j - 1;
-
-			ib0 = top - pout[0];
-			ib1 = top - pout[-1];
-			ib2 = top - pout[-2];
-			ib3 = top - pout[-3];
-
-			sum1 = (denhalf - ia0 * ib0 - ia1 * ib1 - ia2 * ib2 - ia3 * ib3) >> denshift;
-
-			del = pc1[j];
-			del0 = del;
-			sg = sign_of_int(del);
-			del += top + sum1;
-
-			out[j] = (del << chanshift) >> chanshift;
-
-			if ( sg > 0 )
-			{
-				sgn = sign_of_int( ib3 );
-				ia3 -= sgn;
-				del0 -= (4 - 3) * ((sgn * ib3) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( ib2 );
-				ia2 -= sgn;
-				del0 -= (4 - 2) * ((sgn * ib2) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( ib1 );
-				ia1 -= sgn;
-				del0 -= (4 - 1) * ((sgn * ib1) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				ia0 -= sign_of_int( ib0 );
-			}
-			else if ( sg < 0 )
-			{
-				// note: to avoid unnecessary negations, we flip the value of "sgn"
-				sgn = -sign_of_int( ib3 );
-				ia3 -= sgn;
-				del0 -= (4 - 3) * ((sgn * ib3) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( ib2 );
-				ia2 -= sgn;
-				del0 -= (4 - 2) * ((sgn * ib2) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( ib1 );
-				ia1 -= sgn;
-				del0 -= (4 - 1) * ((sgn * ib1) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				ia0 += sign_of_int( ib0 );
-			}
-		}
-
-		coefs[0] = ia0;
-		coefs[1] = ia1;
-		coefs[2] = ia2;
-		coefs[3] = ia3;
-	}
-	else if ( numactive == 8 )
-	{
-		register int16_t	a4, a5, a6, a7;
-		register int32_t	b4, b5, b6, b7;
-
-		// optimization for numactive == 8
-		a0 = coefs[0];
-		a1 = coefs[1];
-		a2 = coefs[2];
-		a3 = coefs[3];
-		a4 = coefs[4];
-		a5 = coefs[5];
-		a6 = coefs[6];
-		a7 = coefs[7];
-
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			top = out[j - lim];
-			pout = out + j - 1;
-
-			b0 = top - (*pout--);
-			b1 = top - (*pout--);
-			b2 = top - (*pout--);
-			b3 = top - (*pout--);
-			b4 = top - (*pout--);
-			b5 = top - (*pout--);
-			b6 = top - (*pout--);
-			b7 = top - (*pout);
-			pout += 8;
-
-			sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3
-					- a4 * b4 - a5 * b5 - a6 * b6 - a7 * b7) >> denshift;
-
-			del = pc1[j];
-			del0 = del;
-			sg = sign_of_int(del);
-			del += top + sum1;
-
-			out[j] = (del << chanshift) >> chanshift;
-
-			if ( sg > 0 )
-			{
-				sgn = sign_of_int( b7 );
-				a7 -= sgn;
-				del0 -= 1 * ((sgn * b7) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b6 );
-				a6 -= sgn;
-				del0 -= 2 * ((sgn * b6) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b5 );
-				a5 -= sgn;
-				del0 -= 3 * ((sgn * b5) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b4 );
-				a4 -= sgn;
-				del0 -= 4 * ((sgn * b4) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= 5 * ((sgn * b3) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= 6 * ((sgn * b2) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= 7 * ((sgn * b1) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				a0 -= sign_of_int( b0 );
-			}
-			else if ( sg < 0 )
-			{
-				// note: to avoid unnecessary negations, we flip the value of "sgn"
-				sgn = -sign_of_int( b7 );
-				a7 -= sgn;
-				del0 -= 1 * ((sgn * b7) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b6 );
-				a6 -= sgn;
-				del0 -= 2 * ((sgn * b6) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b5 );
-				a5 -= sgn;
-				del0 -= 3 * ((sgn * b5) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b4 );
-				a4 -= sgn;
-				del0 -= 4 * ((sgn * b4) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= 5 * ((sgn * b3) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= 6 * ((sgn * b2) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= 7 * ((sgn * b1) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				a0 += sign_of_int( b0 );
-			}
-		}
-
-		coefs[0] = a0;
-		coefs[1] = a1;
-		coefs[2] = a2;
-		coefs[3] = a3;
-		coefs[4] = a4;
-		coefs[5] = a5;
-		coefs[6] = a6;
-		coefs[7] = a7;
-	}
-	else
-	{
-		// general case
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			sum1 = 0;
-			pout = out + j - 1;
-			top = out[j-lim];
-
-			for ( k = 0; k < numactive; k++ )
-				sum1 += coefs[k] * (pout[-k] - top);
-
-			del = pc1[j];
-			del0 = del;
-			sg = sign_of_int( del );
-			del += top + ((sum1 + denhalf) >> denshift);
-			out[j] = (del << chanshift) >> chanshift;
-
-			if ( sg > 0 )
-			{
-				for ( k = (numactive - 1); k >= 0; k-- )
-				{
-					dd = top - pout[-k];
-					sgn = sign_of_int( dd );
-					coefs[k] -= sgn;
-					del0 -= (numactive - k) * ((sgn * dd) >> denshift);
-					if ( del0 <= 0 )
-						break;
-				}
-			}
-			else if ( sg < 0 )
-			{
-				for ( k = (numactive - 1); k >= 0; k-- )
-				{
-					dd = top - pout[-k];
-					sgn = sign_of_int( dd );
-					coefs[k] += sgn;
-					del0 -= (numactive - k) * ((-sgn * dd) >> denshift);
-					if ( del0 >= 0 )
-						break;
-				}
-			}
-		}
-	}
-}
diff --git a/libs/libsndfile/src/ALAC/dp_enc.c b/libs/libsndfile/src/ALAC/dp_enc.c
deleted file mode 100644
index f81cdba520..0000000000
--- a/libs/libsndfile/src/ALAC/dp_enc.c
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		dp_enc.c
-
-	Contains:	Dynamic Predictor encode routines
-
-	Copyright:	(c) 2001-2011 Apple, Inc.
-*/
-
-#include "dplib.h"
-#include <string.h>
-
-#if __GNUC__
-#define ALWAYS_INLINE		__attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-#define LOOP_ALIGN
-
-void init_coefs( int16_t * coefs, uint32_t denshift, int32_t numPairs )
-{
-	int32_t		k;
-	int32_t		den = 1 << denshift;
-
-	coefs[0] = (AINIT * den) >> 4;
-	coefs[1] = (BINIT * den) >> 4;
-	coefs[2] = (CINIT * den) >> 4;
-	for ( k = 3; k < numPairs; k++ )
-		coefs[k]  = 0;
-}
-
-void copy_coefs( int16_t * srcCoefs, int16_t * dstCoefs, int32_t numPairs )
-{
-	int32_t k;
-
-	for ( k = 0; k < numPairs; k++ )
-		dstCoefs[k] = srcCoefs[k];
-}
-
-static inline int32_t ALWAYS_INLINE sign_of_int( int32_t i )
-{
-    int32_t negishift;
-
-    negishift = ((uint32_t)-i) >> 31;
-    return negishift | (i >> 31);
-}
-
-void pc_block( int32_t * in, int32_t * pc1, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift )
-{
-	register int16_t	a0, a1, a2, a3;
-	register int32_t	b0, b1, b2, b3;
-	int32_t					j, k, lim;
-	int32_t *			pin;
-	int32_t				sum1, dd;
-	int32_t				sg, sgn;
-	int32_t				top;
-	int32_t				del, del0;
-	uint32_t			chanshift = 32 - chanbits;
-	int32_t				denhalf = 1 << (denshift - 1);
-
-	pc1[0] = in[0];
-	if ( numactive == 0 )
-	{
-		// just copy if numactive == 0 (but don't bother if in/out pointers the same)
-		if ( (num > 1) && (in != pc1) )
-			memcpy( &pc1[1], &in[1], (num - 1) * sizeof(int32_t) );
-		return;
-	}
-	if ( numactive == 31 )
-	{
-		// short-circuit if numactive == 31
-		for( j = 1; j < num; j++ )
-		{
-			del = in[j] - in[j-1];
-			pc1[j] = (del << chanshift) >> chanshift;
-		}
-		return;
-	}
-
-	for ( j = 1; j <= numactive; j++ )
-	{
-		del = in[j] - in[j-1];
-		pc1[j] = (del << chanshift) >> chanshift;
-	}
-
-	lim = numactive + 1;
-
-	if ( numactive == 4 )
-	{
-		// optimization for numactive == 4
-		a0 = coefs[0];
-		a1 = coefs[1];
-		a2 = coefs[2];
-		a3 = coefs[3];
-
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			top = in[j - lim];
-			pin = in + j - 1;
-
-			b0 = top - pin[0];
-			b1 = top - pin[-1];
-			b2 = top - pin[-2];
-			b3 = top - pin[-3];
-
-			sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3) >> denshift;
-
-			del = in[j] - top - sum1;
-			del = (del << chanshift) >> chanshift;
-			pc1[j] = del;
-			del0 = del;
-
-			sg = sign_of_int(del);
-			if ( sg > 0 )
-			{
-				sgn = sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= (4 - 3) * ((sgn * b3) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= (4 - 2) * ((sgn * b2) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= (4 - 1) * ((sgn * b1) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				a0 -= sign_of_int( b0 );
-			}
-			else if ( sg < 0 )
-			{
-				// note: to avoid unnecessary negations, we flip the value of "sgn"
-				sgn = -sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= (4 - 3) * ((sgn * b3) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= (4 - 2) * ((sgn * b2) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= (4 - 1) * ((sgn * b1) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				a0 += sign_of_int( b0 );
-			}
-		}
-
-		coefs[0] = a0;
-		coefs[1] = a1;
-		coefs[2] = a2;
-		coefs[3] = a3;
-	}
-	else if ( numactive == 8 )
-	{
-		// optimization for numactive == 8
-		register int16_t	a4, a5, a6, a7;
-		register int32_t	b4, b5, b6, b7;
-
-		a0 = coefs[0];
-		a1 = coefs[1];
-		a2 = coefs[2];
-		a3 = coefs[3];
-		a4 = coefs[4];
-		a5 = coefs[5];
-		a6 = coefs[6];
-		a7 = coefs[7];
-
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			top = in[j - lim];
-			pin = in + j - 1;
-
-			b0 = top - (*pin--);
-			b1 = top - (*pin--);
-			b2 = top - (*pin--);
-			b3 = top - (*pin--);
-			b4 = top - (*pin--);
-			b5 = top - (*pin--);
-			b6 = top - (*pin--);
-			b7 = top - (*pin);
-			pin += 8;
-
-			sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3
-					- a4 * b4 - a5 * b5 - a6 * b6 - a7 * b7) >> denshift;
-
-			del = in[j] - top - sum1;
-			del = (del << chanshift) >> chanshift;
-			pc1[j] = del;
-			del0 = del;
-
-			sg = sign_of_int(del);
-			if ( sg > 0 )
-			{
-				sgn = sign_of_int( b7 );
-				a7 -= sgn;
-				del0 -= 1 * ((sgn * b7) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b6 );
-				a6 -= sgn;
-				del0 -= 2 * ((sgn * b6) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b5 );
-				a5 -= sgn;
-				del0 -= 3 * ((sgn * b5) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b4 );
-				a4 -= sgn;
-				del0 -= 4 * ((sgn * b4) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= 5 * ((sgn * b3) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= 6 * ((sgn * b2) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				sgn = sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= 7 * ((sgn * b1) >> denshift);
-				if ( del0 <= 0 )
-					continue;
-
-				a0 -= sign_of_int( b0 );
-			}
-			else if ( sg < 0 )
-			{
-				// note: to avoid unnecessary negations, we flip the value of "sgn"
-				sgn = -sign_of_int( b7 );
-				a7 -= sgn;
-				del0 -= 1 * ((sgn * b7) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b6 );
-				a6 -= sgn;
-				del0 -= 2 * ((sgn * b6) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b5 );
-				a5 -= sgn;
-				del0 -= 3 * ((sgn * b5) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b4 );
-				a4 -= sgn;
-				del0 -= 4 * ((sgn * b4) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b3 );
-				a3 -= sgn;
-				del0 -= 5 * ((sgn * b3) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b2 );
-				a2 -= sgn;
-				del0 -= 6 * ((sgn * b2) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				sgn = -sign_of_int( b1 );
-				a1 -= sgn;
-				del0 -= 7 * ((sgn * b1) >> denshift);
-				if ( del0 >= 0 )
-					continue;
-
-				a0 += sign_of_int( b0 );
-			}
-		}
-
-		coefs[0] = a0;
-		coefs[1] = a1;
-		coefs[2] = a2;
-		coefs[3] = a3;
-		coefs[4] = a4;
-		coefs[5] = a5;
-		coefs[6] = a6;
-		coefs[7] = a7;
-	}
-	else
-	{
-//pc_block_general:
-		// general case
-		for ( j = lim; j < num; j++ )
-		{
-			LOOP_ALIGN
-
-			top = in[j - lim];
-			pin = in + j - 1;
-
-			sum1 = 0;
-			for ( k = 0; k < numactive; k++ )
-				sum1 -= coefs[k] * (top - pin[-k]);
-
-			del = in[j] - top - ((sum1 + denhalf) >> denshift);
-			del = (del << chanshift) >> chanshift;
-			pc1[j] = del;
-			del0 = del;
-
-			sg = sign_of_int( del );
-			if ( sg > 0 )
-			{
-				for ( k = (numactive - 1); k >= 0; k-- )
-				{
-					dd = top - pin[-k];
-					sgn = sign_of_int( dd );
-					coefs[k] -= sgn;
-					del0 -= (numactive - k) * ((sgn * dd) >> denshift);
-					if ( del0 <= 0 )
-						break;
-				}
-			}
-			else if ( sg < 0 )
-			{
-				for ( k = (numactive - 1); k >= 0; k-- )
-				{
-					dd = top - pin[-k];
-					sgn = sign_of_int( dd );
-					coefs[k] += sgn;
-					del0 -= (numactive - k) * ((-sgn * dd) >> denshift);
-					if ( del0 >= 0 )
-						break;
-				}
-			}
-		}
-	}
-}
diff --git a/libs/libsndfile/src/ALAC/dplib.h b/libs/libsndfile/src/ALAC/dplib.h
deleted file mode 100644
index 37d3353313..0000000000
--- a/libs/libsndfile/src/ALAC/dplib.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		dplib.h
-
-	Contains:	Dynamic Predictor routines
-
-	Copyright:	Copyright (C) 2001-2011 Apple, Inc.
-*/
-
-#ifndef __DPLIB_H__
-#define __DPLIB_H__
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// defines
-
-#define DENSHIFT_MAX  15
-#define DENSHIFT_DEFAULT 9
-#define AINIT 38
-#define BINIT (-29)
-#define CINIT (-2)
-#define NUMCOEPAIRS 16
-
-// prototypes
-
-void init_coefs( int16_t * coefs, uint32_t denshift, int32_t numPairs );
-void copy_coefs( int16_t * srcCoefs, int16_t * dstCoefs, int32_t numPairs );
-
-// NOTE: these routines read at least "numactive" samples so the i/o buffers must be at least that big
-
-void pc_block( int32_t * in, int32_t * pc, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift );
-void unpc_block( int32_t * pc, int32_t * out, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* __DPLIB_H__ */
diff --git a/libs/libsndfile/src/ALAC/matrix_dec.c b/libs/libsndfile/src/ALAC/matrix_dec.c
deleted file mode 100644
index cb812d1d4d..0000000000
--- a/libs/libsndfile/src/ALAC/matrix_dec.c
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		matrix_dec.c
-
-	Contains:	ALAC mixing/matrixing decode routines.
-
-	Copyright:	(c) 2004-2011 Apple, Inc.
-*/
-
-#include "matrixlib.h"
-#include "ALACAudioTypes.h"
-
-// up to 24-bit "offset" macros for the individual bytes of a 20/24-bit word
-#if TARGET_RT_BIG_ENDIAN
-	#define LBYTE	2
-	#define MBYTE	1
-	#define HBYTE	0
-#else
-	#define LBYTE	0
-	#define MBYTE	1
-	#define HBYTE	2
-#endif
-
-/*
-    There is no plain middle-side option; instead there are various mixing
-    modes including middle-side, each lossless, as embodied in the mix()
-    and unmix() functions.  These functions exploit a generalized middle-side
-    transformation:
-
-    u := [(rL + (m-r)R)/m];
-    v := L - R;
-
-    where [ ] denotes integer floor.  The (lossless) inverse is
-
-    L = u + v - [rV/m];
-    R = L - v;
-*/
-
-// 16-bit routines
-
-void unmix16( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-	int32_t 	j;
-
-	if ( mixres != 0 )
-	{
-		/* matrixed stereo */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			int32_t		l, r;
-
-			l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-			r = l - v[j];
-
-			out[0] = l << 16;
-			out[1] = r << 16;
-			out += stride;
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			out[0] = u[j] << 16;
-			out[1] = v[j] << 16;
-			out += stride;
-		}
-	}
-}
-
-// 20-bit routines
-// - the 20 bits of data are left-justified in 3 bytes of storage but right-aligned for input/output predictor buffers
-
-void unmix20( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-	int32_t 	j;
-
-	if ( mixres != 0 )
-	{
-		/* matrixed stereo */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			int32_t		l, r;
-
-			l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-			r = l - v[j];
-
-			out[0] = l << 12;
-			out[1] = r << 12;
-			out += stride;
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			out[0] = u[j] << 12;
-			out[1] = v[j] << 12;
-			out += stride;
-		}
-	}
-}
-
-// 24-bit routines
-// - the 24 bits of data are right-justified in the input/output predictor buffers
-
-void unmix24( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-				int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-	int32_t		shift = bytesShifted * 8;
-	int32_t		l, r;
-	int32_t 		j, k;
-
-	if ( mixres != 0 )
-	{
-		/* matrixed stereo */
-		if ( bytesShifted != 0 )
-		{
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-				r = l - v[j];
-
-				l = (l << shift) | (uint32_t) shiftUV[k + 0];
-				r = (r << shift) | (uint32_t) shiftUV[k + 1];
-
-				out[0] = l << 8;
-				out[1] = r << 8;
-				out += stride;
-			}
-		}
-		else
-		{
-			for ( j = 0; j < numSamples; j++ )
-			{
-				l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-				r = l - v[j];
-
-				out[0] = l << 8;
-				out[1] = r << 8;
-				out += stride;
-			}
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		if ( bytesShifted != 0 )
-		{
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				l = u[j];
-				r = v[j];
-
-				l = (l << shift) | (uint32_t) shiftUV[k + 0];
-				r = (r << shift) | (uint32_t) shiftUV[k + 1];
-
-				out[0] = l << 8;
-				out[1] = r << 8;
-				out += stride;
-			}
-		}
-		else
-		{
-			for ( j = 0; j < numSamples; j++ )
-			{
-				out[0] = u[j] << 8;
-				out[1] = v[j] << 8;
-				out += stride;
-			}
-		}
-	}
-}
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32 but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the "shift" buffers
-
-void unmix32( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-				int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-	int32_t		shift = bytesShifted * 8;
-	int32_t		l, r;
-	int32_t 	j, k;
-
-	if ( mixres != 0 )
-	{
-		//Assert( bytesShifted != 0 );
-
-		/* matrixed stereo with shift */
-		for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-		{
-			int32_t		lt, rt;
-
-			lt = u[j];
-			rt = v[j];
-
-			l = lt + rt - ((mixres * rt) >> mixbits);
-			r = l - rt;
-
-			out[0] = (l << shift) | (uint32_t) shiftUV[k + 0];
-			out[1] = (r << shift) | (uint32_t) shiftUV[k + 1];
-			out += stride;
-		}
-	}
-	else
-	{
-		if ( bytesShifted == 0 )
-		{
-			/* interleaving w/o shift */
-			for ( j = 0; j < numSamples; j++ )
-			{
-				out[0] = u[j];
-				out[1] = v[j];
-				out += stride;
-			}
-		}
-		else
-		{
-			/* interleaving with shift */
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				out[0] = (u[j] << shift) | (uint32_t) shiftUV[k + 0];
-				out[1] = (v[j] << shift) | (uint32_t) shiftUV[k + 1];
-				out += stride;
-			}
-		}
-	}
-}
-
-// 20/24-bit <-> 32-bit helper routines (not really matrixing but convenient to put here)
-
-void copyPredictorTo24( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-	int32_t		j;
-
-	for ( j = 0; j < numSamples; j++ )
-	{
-		out[0] = in[j] << 8;
-		out += stride;
-	}
-}
-
-void copyPredictorTo24Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted )
-{
-	int32_t		shiftVal = bytesShifted * 8;
-	int32_t		j;
-
-	//Assert( bytesShifted != 0 );
-
-	for ( j = 0; j < numSamples; j++ )
-	{
-		int32_t		val = in[j];
-
-		val = (val << shiftVal) | (uint32_t) shift[j];
-		out[0] = val << 8;
-		out += stride;
-	}
-}
-
-void copyPredictorTo20( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-	int32_t		j;
-
-	// 32-bit predictor values are right-aligned but 20-bit output values should be left-aligned
-	// in the 24-bit output buffer
-	for ( j = 0; j < numSamples; j++ )
-	{
-		out[0] = in[j] << 12;
-		out += stride;
-	}
-}
-
-void copyPredictorTo32( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-	int32_t			i, j;
-
-	// this is only a subroutine to abstract the "iPod can only output 16-bit data" problem
-	for ( i = 0, j = 0; i < numSamples; i++, j += stride )
-		out[j] = in[i] << 8;
-}
-
-void copyPredictorTo32Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted )
-{
-	int32_t *		op = out;
-	uint32_t		shiftVal = bytesShifted * 8;
-	int32_t			j;
-
-	//Assert( bytesShifted != 0 );
-
-	// this is only a subroutine to abstract the "iPod can only output 16-bit data" problem
-	for ( j = 0; j < numSamples; j++ )
-	{
-		op[0] = (in[j] << shiftVal) | (uint32_t) shift[j];
-		op += stride;
-	}
-}
diff --git a/libs/libsndfile/src/ALAC/matrix_enc.c b/libs/libsndfile/src/ALAC/matrix_enc.c
deleted file mode 100644
index 5b4d1589eb..0000000000
--- a/libs/libsndfile/src/ALAC/matrix_enc.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		matrix_enc.c
-
-	Contains:	ALAC mixing/matrixing encode routines.
-
-	Copyright:	(c) 2004-2011 Apple, Inc.
-*/
-
-#include "matrixlib.h"
-#include "ALACAudioTypes.h"
-
-/*
-    There is no plain middle-side option; instead there are various mixing
-    modes including middle-side, each lossless, as embodied in the mix()
-    and unmix() functions.  These functions exploit a generalized middle-side
-    transformation:
-
-    u := [(rL + (m-r)R)/m];
-    v := L - R;
-
-    where [ ] denotes integer floor.  The (lossless) inverse is
-
-    L = u + v - [rV/m];
-    R = L - v;
-*/
-
-// 16-bit routines
-
-void mix16( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-	int32_t		j;
-
-	if ( mixres != 0 )
-	{
-		int32_t		mod = 1 << mixbits;
-		int32_t		m2;
-
-		/* matrixed stereo */
-		m2 = mod - mixres;
-		for ( j = 0; j < numSamples; j++ )
-		{
-			int32_t		l, r;
-
-			l = in[0] >> 16;
-			r = in[1] >> 16;
-			in += stride;
-			u[j] = (mixres * l + m2 * r) >> mixbits;
-			v[j] = l - r;
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			u[j] = in[0] >> 16;
-			v[j] = in[1] >> 16;
-			in += stride;
-		}
-	}
-}
-
-// 20-bit routines
-// - the 20 bits of data are left-justified in 3 bytes of storage but right-aligned for input/output predictor buffers
-
-void mix20( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-	int32_t		l, r;
-	int32_t		j;
-
-	if ( mixres != 0 )
-	{
-		/* matrixed stereo */
-		int32_t		mod = 1 << mixbits;
-		int32_t		m2 = mod - mixres;
-
-		for ( j = 0; j < numSamples; j++ )
-		{
-			l = in[0] >> 12;
-			r = in[1] >> 12;
-			in += stride;
-
-			u[j] = (mixres * l + m2 * r) >> mixbits;
-			v[j] = l - r;
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		for ( j = 0; j < numSamples; j++ )
-		{
-			u[j] = in[0] >> 12;
-			v[j] = in[1] >> 12;
-			in += stride;
-		}
-	}
-}
-
-// 24-bit routines
-// - the 24 bits of data are right-justified in the input/output predictor buffers
-
-void mix24( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-			int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-	int32_t		l, r;
-	int32_t		shift = bytesShifted * 8;
-	uint32_t	mask  = (1ul << shift) - 1;
-	int32_t		j, k;
-
-	if ( mixres != 0 )
-	{
-		/* matrixed stereo */
-		int32_t		mod = 1 << mixbits;
-		int32_t		m2 = mod - mixres;
-
-		if ( bytesShifted != 0 )
-		{
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				l = in[0] >> 8;
-				r = in[1] >> 8;
-				in += stride;
-
-				shiftUV[k + 0] = (uint16_t)(l & mask);
-				shiftUV[k + 1] = (uint16_t)(r & mask);
-
-				l >>= shift;
-				r >>= shift;
-
-				u[j] = (mixres * l + m2 * r) >> mixbits;
-				v[j] = l - r;
-			}
-		}
-		else
-		{
-			for ( j = 0; j < numSamples; j++ )
-			{
-				l = in[0] >> 8;
-				r = in[1] >> 8;
-				in += stride;
-
-				u[j] = (mixres * l + m2 * r) >> mixbits;
-				v[j] = l - r;
-			}
-		}
-	}
-	else
-	{
-		/* Conventional separated stereo. */
-		if ( bytesShifted != 0 )
-		{
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				l = in[0] >> 8;
-				r = in[1] >> 8;
-				in += stride;
-
-				shiftUV[k + 0] = (uint16_t)(l & mask);
-				shiftUV[k + 1] = (uint16_t)(r & mask);
-
-				l >>= shift;
-				r >>= shift;
-
-				u[j] = l;
-				v[j] = r;
-			}
-		}
-		else
-		{
-			for ( j = 0; j < numSamples; j++ )
-			{
-				l = in[0] >> 8;
-				r = in[1] >> 8;
-				in += stride;
-			}
-		}
-	}
-}
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32 but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the "shift" buffers
-
-void mix32( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-			int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-	int32_t		shift = bytesShifted * 8;
-	uint32_t	mask  = (1ul << shift) - 1;
-	int32_t		l, r;
-	int32_t		j, k;
-
-	if ( mixres != 0 )
-	{
-		int32_t		mod = 1 << mixbits;
-		int32_t		m2;
-
-		//Assert( bytesShifted != 0 );
-
-		/* matrixed stereo with shift */
-		m2 = mod - mixres;
-		for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-		{
-			l = in[0];
-			r = in[1];
-			in += stride;
-
-			shiftUV[k + 0] = (uint16_t)(l & mask);
-			shiftUV[k + 1] = (uint16_t)(r & mask);
-
-			l >>= shift;
-			r >>= shift;
-
-			u[j] = (mixres * l + m2 * r) >> mixbits;
-			v[j] = l - r;
-		}
-	}
-	else
-	{
-		if ( bytesShifted == 0 )
-		{
-			/* de-interleaving w/o shift */
-			for ( j = 0; j < numSamples; j++ )
-			{
-				u[j] = in[0];
-				v[j] = in[1];
-				in += stride;
-			}
-		}
-		else
-		{
-			/* de-interleaving with shift */
-			for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-			{
-				l = in[0];
-				r = in[1];
-				in += stride;
-
-				shiftUV[k + 0] = (uint16_t)(l & mask);
-				shiftUV[k + 1] = (uint16_t)(r & mask);
-
-				l >>= shift;
-				r >>= shift;
-
-				u[j] = l;
-				v[j] = r;
-			}
-		}
-	}
-}
-
diff --git a/libs/libsndfile/src/ALAC/matrixlib.h b/libs/libsndfile/src/ALAC/matrixlib.h
deleted file mode 100644
index d405cbcd20..0000000000
--- a/libs/libsndfile/src/ALAC/matrixlib.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-	File:		matrixlib.h
-
-	Contains:	ALAC mixing/matrixing routines to/from 32-bit predictor buffers.
-
-	Copyright:	Copyright (C) 2004 to 2011 Apple, Inc.
-*/
-
-#ifndef __MATRIXLIB_H
-#define __MATRIXLIB_H
-
-#pragma once
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// 16-bit routines
-void	mix16( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres );
-void	unmix16( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres );
-
-// 20-bit routines
-void	mix20( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres );
-void	unmix20( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres );
-
-// 24-bit routines
-// - 24-bit data sometimes compresses better by shifting off the bottom byte so these routines deal with
-//	 the specified "unused lower bytes" in the combined "shift" buffer
-void	mix24( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-				int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-void	unmix24( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-				 int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32-bit but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the combined "shift" buffer
-void	mix32( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-				int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-void	unmix32( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-				 int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-
-// 20/24/32-bit <-> 32-bit helper routines (not really matrixing but convenient to put here)
-void	copy20ToPredictor( int32_t * in, uint32_t stride, int32_t * out, int32_t numSamples );
-void	copy24ToPredictor( int32_t * in, uint32_t stride, int32_t * out, int32_t numSamples );
-
-void	copyPredictorTo24( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-void	copyPredictorTo24Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted );
-void	copyPredictorTo20( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-
-void	copyPredictorTo32( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-void	copyPredictorTo32Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif	/* __MATRIXLIB_H */
diff --git a/libs/libsndfile/src/G72x/ChangeLog b/libs/libsndfile/src/G72x/ChangeLog
deleted file mode 100644
index aa108dff7f..0000000000
--- a/libs/libsndfile/src/G72x/ChangeLog
+++ /dev/null
@@ -1,50 +0,0 @@
-2001-06-05  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-	* g72x.c
-	Added {} in function update () to prevent 'ambiguous else' warning messages.
-
-2000-07-14  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-	* g72x.c
-	Modified g72x_init_state () to fit in with the new structure of the code.
-	Implemented g72x_encode_block () and g72x_decode_block ().
-
-2000-07-12  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-    * g72x.h
-    Moved nearly all definitions and function prototypes from this file have been 
-    moved to private.h.
-    Added an enum defining the 4 different G72x ADPCM codecs.
-    Added new function prototypes to define a cleaner interface to the encoder 
-    and decoder. This new interface also allows samples to be processed in blocks
-    rather than on a sample by sample basis like the original code.
-    
-    * private.h
-    Added prototypes moved from g72x.h.
-    Changed struct g72x_state to a typedef struct { .. } G72x_PRIVATE.
-    Added fields to G72x_PRIVATE required for working on blocks of samples.
-
-2000-06-07  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-    * g72x.c
-    Fixed all compiler warnings.
-    Removed functions tandem_adjust() which is not required by libsndfile.
-    
-    * g721.c
-    Fixed all compiler warnings.
-    Removed functions tandem_adjust_alaw() and tandem_adjust_ulaw () which are not 
-    required by libsndfile.
-    Removed second parameter to g721_encoder () which is not required.
-
-    * g72x.h
-    Removed in_coding and out_coding parameters from all functions. These allowed
-    g72x encoding/decoding to/from A-law or u-law and are not required by libsndfile.
-    Removed unneeded defines for A-law, u-law and linear encoding.
-
-    * g723_16.c
-    Removed second parameter (in_coding) for g723_16_encoder().    
-    Removed second parameter (out_coding) for g723_16_decoder().
-    
-    * private.h
-    New file containing prototypes and tyepdefs private to G72x code.
-    
diff --git a/libs/libsndfile/src/G72x/Makefile.am b/libs/libsndfile/src/G72x/Makefile.am
deleted file mode 100644
index 62a0aa112f..0000000000
--- a/libs/libsndfile/src/G72x/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README README.original ChangeLog
-
-noinst_HEADERS = g72x.h g72x_priv.h
-noinst_LTLIBRARIES = libg72x.la
-
-noinst_PROGRAMS = g72x_test
-
-CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c
-
-libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS)
-
-g72x_test_SOURCES = g72x_test.c
-g72x_test_LDADD = ./libg72x.la -lm
-
-check: g72x_test$(EXEEXT)
-	./g72x_test$(EXEEXT) all
-
-# Disable autoheader.
-AUTOHEADER=echo
-
diff --git a/libs/libsndfile/src/G72x/README b/libs/libsndfile/src/G72x/README
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/libs/libsndfile/src/G72x/README.original b/libs/libsndfile/src/G72x/README.original
deleted file mode 100644
index 23b0e7dd50..0000000000
--- a/libs/libsndfile/src/G72x/README.original
+++ /dev/null
@@ -1,94 +0,0 @@
-The files in this directory comprise ANSI-C language reference implementations
-of the CCITT (International Telegraph and Telephone Consultative Committee)
-G.711, G.721 and G.723 voice compressions.  They have been tested on Sun
-SPARCstations and passed 82 out of 84 test vectors published by CCITT
-(Dec. 20, 1988) for G.721 and G.723.  [The two remaining test vectors,
-which the G.721 decoder implementation for u-law samples did not pass,
-may be in error because they are identical to two other vectors for G.723_40.]
-
-This source code is released by Sun Microsystems, Inc. to the public domain.
-Please give your acknowledgement in product literature if this code is used
-in your product implementation.
-
-Sun Microsystems supports some CCITT audio formats in Solaris 2.0 system
-software.  However, Sun's implementations have been optimized for higher
-performance on SPARCstations.
-
-
-The source files for CCITT conversion routines in this directory are:
-
-	g72x.h		header file for g721.c, g723_24.c and g723_40.c
-	g711.c		CCITT G.711 u-law and A-law compression
-	g72x.c		common denominator of G.721 and G.723 ADPCM codes
-	g721.c		CCITT G.721 32Kbps ADPCM coder (with g72x.c)
-	g723_24.c	CCITT G.723 24Kbps ADPCM coder (with g72x.c)
-	g723_40.c	CCITT G.723 40Kbps ADPCM coder (with g72x.c)
-
-
-Simple conversions between u-law, A-law, and 16-bit linear PCM are invoked
-as follows:
-
-	unsigned char		ucode, acode;
-	short			pcm_val;
-
-	ucode = linear2ulaw(pcm_val);
-	ucode = alaw2ulaw(acode);
-
-	acode = linear2alaw(pcm_val);
-	acode = ulaw2alaw(ucode);
-
-	pcm_val = ulaw2linear(ucode);
-	pcm_val = alaw2linear(acode);
-
-
-The other CCITT compression routines are invoked as follows:
-
-	#include "g72x.h"
-
-	struct g72x_state	state;
-	int			sample, code;
-
-	g72x_init_state(&state);
-	code = {g721,g723_24,g723_40}_encoder(sample, coding, &state);
-	sample = {g721,g723_24,g723_40}_decoder(code, coding, &state);
-
-where
-	coding = AUDIO_ENCODING_ULAW	for 8-bit u-law samples
-		 AUDIO_ENCODING_ALAW	for 8-bit A-law samples
-		 AUDIO_ENCODING_LINEAR	for 16-bit linear PCM samples
-
-
-
-This directory also includes the following sample programs:
-
-	encode.c	CCITT ADPCM encoder
-	decode.c	CCITT ADPCM decoder
-	Makefile	makefile for the sample programs
-
-
-The sample programs contain examples of how to call the various compression
-routines and pack/unpack the bits.  The sample programs read byte streams from
-stdin and write to stdout.  The input/output data is raw data (no file header
-or other identifying information is embedded).  The sample programs are
-invoked as follows:
-
-	encode [-3|4|5] [-a|u|l] <infile >outfile
-	decode [-3|4|5] [-a|u|l] <infile >outfile
-where:
-	-3	encode to (decode from) G.723 24kbps (3-bit) data
-	-4	encode to (decode from) G.721 32kbps (4-bit) data [the default]
-	-5	encode to (decode from) G.723 40kbps (5-bit) data
-	-a	encode from (decode to) A-law data
-	-u	encode from (decode to) u-law data [the default]
-	-l	encode from (decode to) 16-bit linear data
-
-Examples:
-	# Read 16-bit linear and output G.721
-	encode -4 -l <pcmfile >g721file
-
-	# Read 40Kbps G.723 and output A-law
-	decode -5 -a <g723file >alawfile
-
-	# Compress and then decompress u-law data using 24Kbps G.723
-	encode -3 <ulawin | deoced -3 >ulawout
-
diff --git a/libs/libsndfile/src/G72x/g721.c b/libs/libsndfile/src/G72x/g721.c
deleted file mode 100644
index d305ba8f0d..0000000000
--- a/libs/libsndfile/src/G72x/g721.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g721.c
- *
- * Description:
- *
- * g721_encoder(), g721_decoder()
- *
- * These routines comprise an implementation of the CCITT G.721 ADPCM
- * coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which
- * take advantage of work station attributes, such as hardware 2's
- * complement arithmetic and large memory.  Specifically, certain time
- * consuming operations such as multiplications are replaced
- * with lookup tables and software 2's complement operations are
- * replaced with hardware 2's complement.
- *
- * The deviation from the bit level specification (lookup tables)
- * preserves the bit level performance specifications.
- *
- * As outlined in the G.721 Recommendation, the algorithm is broken
- * down into modules.  Each section of code below is preceded by
- * the name of the module which it is implementing.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-static short qtab_721[7] = {-124, 80, 178, 246, 300, 349, 400};
-/*
- * Maps G.721 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static short	_dqlntab[16] = {-2048, 4, 135, 213, 273, 323, 373, 425,
-				425, 373, 323, 273, 213, 135, 4, -2048};
-
-/* Maps G.721 code word to log of scale factor multiplier. */
-static short	_witab[16] = {-12, 18, 41, 64, 112, 198, 355, 1122,
-				1122, 355, 198, 112, 64, 41, 18, -12};
-/*
- * Maps G.721 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short	_fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00,
-				0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0};
-
-/*
- * g721_encoder()
- *
- * Encodes the input vale of linear PCM, A-law or u-law data sl and returns
- * the resulting code. -1 is returned for unknown input coding value.
- */
-int
-g721_encoder(
-	int		sl,
-	G72x_STATE *state_ptr)
-{
-	short		sezi, se, sez;		/* ACCUM */
-	short		d;			/* SUBTA */
-	short		sr;			/* ADDB */
-	short		y;			/* MIX */
-	short		dqsez;			/* ADDC */
-	short		dq, i;
-
-	/* linearize input sample to 14-bit PCM */
-	sl >>= 2;			/* 14-bit dynamic range */
-
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	se = (sezi + predictor_pole(state_ptr)) >> 1;	/* estimated signal */
-
-	d = sl - se;				/* estimation difference */
-
-	/* quantize the prediction difference */
-	y = step_size(state_ptr);		/* quantizer step size */
-	i = quantize(d, y, qtab_721, 7);	/* i = ADPCM code */
-
-	dq = reconstruct(i & 8, _dqlntab[i], y);	/* quantized est diff */
-
-	sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq;	/* reconst. signal */
-
-	dqsez = sr + sez - se;			/* pole prediction diff. */
-
-	update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
-
-	return (i);
-}
-
-/*
- * g721_decoder()
- *
- * Description:
- *
- * Decodes a 4-bit code of G.721 encoded data of i and
- * returns the resulting linear PCM, A-law or u-law value.
- * return -1 for unknown out_coding value.
- */
-int
-g721_decoder(
-	int		i,
-	G72x_STATE *state_ptr)
-{
-	short		sezi, sei, sez, se;	/* ACCUM */
-	short		y;			/* MIX */
-	short		sr;			/* ADDB */
-	short		dq;
-	short		dqsez;
-
-	i &= 0x0f;			/* mask to get proper bits */
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	sei = sezi + predictor_pole(state_ptr);
-	se = sei >> 1;			/* se = estimated signal */
-
-	y = step_size(state_ptr);	/* dynamic quantizer step size */
-
-	dq = reconstruct(i & 0x08, _dqlntab[i], y); /* quantized diff. */
-
-	sr = (dq < 0) ? (se - (dq & 0x3FFF)) : se + dq;	/* reconst. signal */
-
-	dqsez = sr - se + sez;			/* pole prediction diff. */
-
-	update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
-
-	/* sr was 14-bit dynamic range */
-	return (sr << 2);	
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_16.c b/libs/libsndfile/src/G72x/g723_16.c
deleted file mode 100644
index ae90b6c438..0000000000
--- a/libs/libsndfile/src/G72x/g723_16.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-/* 16kbps version created, used 24kbps code and changing as little as possible.
- * G.726 specs are available from ITU's gopher or WWW site (http://www.itu.ch)
- * If any errors are found, please contact me at mrand@tamu.edu
- *      -Marc Randolph
- */
-
-/*
- * g723_16.c
- *
- * Description:
- *
- * g723_16_encoder(), g723_16_decoder()
- *
- * These routines comprise an implementation of the CCITT G.726 16 Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which take advantage
- * of workstation attributes, such as hardware 2's complement arithmetic.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_16 code word to reconstructed scale factor normalized log
- * magnitude values.  Comes from Table 11/G.726
- */
-static short   _dqlntab[4] = { 116, 365, 365, 116}; 
-
-/* Maps G.723_16 code word to log of scale factor multiplier.
- *
- * _witab[4] is actually {-22 , 439, 439, -22}, but FILTD wants it
- * as WI << 5  (multiplied by 32), so we'll do that here 
- */
-static short   _witab[4] = {-704, 14048, 14048, -704};
-
-/*
- * Maps G.723_16 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-
-/* Comes from FUNCTF */
-static short   _fitab[4] = {0, 0xE00, 0xE00, 0};
-
-/* Comes from quantizer decision level tables (Table 7/G.726)
- */
-static short qtab_723_16[1] = {261};
-
-
-/*
- * g723_16_encoder()
- *
- * Encodes a linear PCM, A-law or u-law input sample and returns its 2-bit code.
- * Returns -1 if invalid input coding value.
- */
-int
-g723_16_encoder(
-       int             sl,
-       G72x_STATE *state_ptr)
-{
-       short           sei, sezi, se, sez;     /* ACCUM */
-       short           d;                      /* SUBTA */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dqsez;                  /* ADDC */
-       short           dq, i;
-
-		/* linearize input sample to 14-bit PCM */
-		sl >>= 2;               /* sl of 14-bit dynamic range */
-
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       d = sl - se;                    /* d = estimation diff. */
-
-       /* quantize prediction difference d */
-       y = step_size(state_ptr);       /* quantizer step size */
-       i = quantize(d, y, qtab_723_16, 1);  /* i = ADPCM code */
-
-             /* Since quantize() only produces a three level output
-              * (1, 2, or 3), we must create the fourth one on our own
-              */
-       if (i == 3)                          /* i code for the zero region */
-         if ((d & 0x8000) == 0)             /* If d > 0, i=3 isn't right... */
-           i = 0;
-           
-       dq = reconstruct(i & 2, _dqlntab[i], y); /* quantized diff. */
-
-       sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
-
-       dqsez = sr + sez - se;          /* pole prediction diff. */
-
-       update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (i);
-}
-
-/*
- * g723_16_decoder()
- *
- * Decodes a 2-bit CCITT G.723_16 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int
-g723_16_decoder(
-       int             i,
-       G72x_STATE *state_ptr)
-{
-       short           sezi, sei, sez, se;     /* ACCUM */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dq;
-       short           dqsez;
-
-       i &= 0x03;                      /* mask to get proper bits */
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       y = step_size(state_ptr);       /* adaptive quantizer step size */
-       dq = reconstruct(i & 0x02, _dqlntab[i], y); /* unquantize pred diff */
-
-       sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
-
-       dqsez = sr - se + sez;                  /* pole prediction diff. */
-
-       update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-		/* sr was of 14-bit dynamic range */
-		return (sr << 2);       
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_24.c b/libs/libsndfile/src/G72x/g723_24.c
deleted file mode 100644
index 02b6c24a05..0000000000
--- a/libs/libsndfile/src/G72x/g723_24.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g723_24.c
- *
- * Description:
- *
- * g723_24_encoder(), g723_24_decoder()
- *
- * These routines comprise an implementation of the CCITT G.723 24 Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which take advantage
- * of workstation attributes, such as hardware 2's complement arithmetic.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_24 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static short	_dqlntab[8] = {-2048, 135, 273, 373, 373, 273, 135, -2048};
-
-/* Maps G.723_24 code word to log of scale factor multiplier. */
-static short	_witab[8] = {-128, 960, 4384, 18624, 18624, 4384, 960, -128};
-
-/*
- * Maps G.723_24 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short	_fitab[8] = {0, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0};
-
-static short qtab_723_24[3] = {8, 218, 331};
-
-/*
- * g723_24_encoder()
- *
- * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
- * Returns -1 if invalid input coding value.
- */
-int
-g723_24_encoder(
-	int		sl,
-	G72x_STATE *state_ptr)
-{
-	short		sei, sezi, se, sez;	/* ACCUM */
-	short		d;			/* SUBTA */
-	short		y;			/* MIX */
-	short		sr;			/* ADDB */
-	short		dqsez;			/* ADDC */
-	short		dq, i;
-
-	/* linearize input sample to 14-bit PCM */
-	sl >>= 2;		/* sl of 14-bit dynamic range */
-
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	sei = sezi + predictor_pole(state_ptr);
-	se = sei >> 1;			/* se = estimated signal */
-
-	d = sl - se;			/* d = estimation diff. */
-
-	/* quantize prediction difference d */
-	y = step_size(state_ptr);	/* quantizer step size */
-	i = quantize(d, y, qtab_723_24, 3);	/* i = ADPCM code */
-	dq = reconstruct(i & 4, _dqlntab[i], y); /* quantized diff. */
-
-	sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
-
-	dqsez = sr + sez - se;		/* pole prediction diff. */
-
-	update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-	return (i);
-}
-
-/*
- * g723_24_decoder()
- *
- * Decodes a 3-bit CCITT G.723_24 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int
-g723_24_decoder(
-	int		i,
-	G72x_STATE *state_ptr)
-{
-	short		sezi, sei, sez, se;	/* ACCUM */
-	short		y;			/* MIX */
-	short		sr;			/* ADDB */
-	short		dq;
-	short		dqsez;
-
-	i &= 0x07;			/* mask to get proper bits */
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	sei = sezi + predictor_pole(state_ptr);
-	se = sei >> 1;			/* se = estimated signal */
-
-	y = step_size(state_ptr);	/* adaptive quantizer step size */
-	dq = reconstruct(i & 0x04, _dqlntab[i], y); /* unquantize pred diff */
-
-	sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
-
-	dqsez = sr - se + sez;			/* pole prediction diff. */
-
-	update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-	return (sr << 2);	/* sr was of 14-bit dynamic range */
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_40.c b/libs/libsndfile/src/G72x/g723_40.c
deleted file mode 100644
index d520395340..0000000000
--- a/libs/libsndfile/src/G72x/g723_40.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g723_40.c
- *
- * Description:
- *
- * g723_40_encoder(), g723_40_decoder()
- *
- * These routines comprise an implementation of the CCITT G.723 40Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which
- * take advantage of workstation attributes, such as hardware 2's
- * complement arithmetic.
- *
- * The deviation from the bit level specification (lookup tables),
- * preserves the bit level performance specifications.
- *
- * As outlined in the G.723 Recommendation, the algorithm is broken
- * down into modules.  Each section of code below is preceded by
- * the name of the module which it is implementing.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_40 code word to ructeconstructed scale factor normalized log
- * magnitude values.
- */
-static short	_dqlntab[32] = {-2048, -66, 28, 104, 169, 224, 274, 318,
-				358, 395, 429, 459, 488, 514, 539, 566,
-				566, 539, 514, 488, 459, 429, 395, 358,
-				318, 274, 224, 169, 104, 28, -66, -2048};
-
-/* Maps G.723_40 code word to log of scale factor multiplier. */
-static short	_witab[32] = {448, 448, 768, 1248, 1280, 1312, 1856, 3200,
-			4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272,
-			22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512,
-			3200, 1856, 1312, 1280, 1248, 768, 448, 448};
-
-/*
- * Maps G.723_40 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short	_fitab[32] = {0, 0, 0, 0, 0, 0x200, 0x200, 0x200,
-			0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00,
-			0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200,
-			0x200, 0x200, 0x200, 0, 0, 0, 0, 0};
-
-static short qtab_723_40[15] = {-122, -16, 68, 139, 198, 250, 298, 339,
-				378, 413, 445, 475, 502, 528, 553};
-
-/*
- * g723_40_encoder()
- *
- * Encodes a 16-bit linear PCM, A-law or u-law input sample and retuens
- * the resulting 5-bit CCITT G.723 40Kbps code.
- * Returns -1 if the input coding value is invalid.
- */
-int	g723_40_encoder (int sl, G72x_STATE *state_ptr)
-{
-	short		sei, sezi, se, sez;	/* ACCUM */
-	short		d;			/* SUBTA */
-	short		y;			/* MIX */
-	short		sr;			/* ADDB */
-	short		dqsez;			/* ADDC */
-	short		dq, i;
-
-	/* linearize input sample to 14-bit PCM */
-	sl >>= 2;		/* sl of 14-bit dynamic range */
-
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	sei = sezi + predictor_pole(state_ptr);
-	se = sei >> 1;			/* se = estimated signal */
-
-	d = sl - se;			/* d = estimation difference */
-
-	/* quantize prediction difference */
-	y = step_size(state_ptr);	/* adaptive quantizer step size */
-	i = quantize(d, y, qtab_723_40, 15);	/* i = ADPCM code */
-
-	dq = reconstruct(i & 0x10, _dqlntab[i], y);	/* quantized diff */
-
-	sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */
-
-	dqsez = sr + sez - se;		/* dqsez = pole prediction diff. */
-
-	update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-	return (i);
-}
-
-/*
- * g723_40_decoder()
- *
- * Decodes a 5-bit CCITT G.723 40Kbps code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int	g723_40_decoder	(int i, G72x_STATE *state_ptr)
-{
-	short		sezi, sei, sez, se;	/* ACCUM */
-	short		y ;			/* MIX */
-	short		sr;			/* ADDB */
-	short		dq;
-	short		dqsez;
-
-	i &= 0x1f;			/* mask to get proper bits */
-	sezi = predictor_zero(state_ptr);
-	sez = sezi >> 1;
-	sei = sezi + predictor_pole(state_ptr);
-	se = sei >> 1;			/* se = estimated signal */
-
-	y = step_size(state_ptr);	/* adaptive quantizer step size */
-	dq = reconstruct(i & 0x10, _dqlntab[i], y);	/* estimation diff. */
-
-	sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq); /* reconst. signal */
-
-	dqsez = sr - se + sez;		/* pole prediction diff. */
-
-	update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-	return (sr << 2);	/* sr was of 14-bit dynamic range */
-}
-
diff --git a/libs/libsndfile/src/G72x/g72x.c b/libs/libsndfile/src/G72x/g72x.c
deleted file mode 100644
index 3fae81aa8e..0000000000
--- a/libs/libsndfile/src/G72x/g72x.c
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g72x.c
- *
- * Common routines for G.721 and G.723 conversions.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-static G72x_STATE * g72x_state_new (void) ;
-static int unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples) ;
-static int pack_bytes (int bits, const short * samples, unsigned char * block) ;
-
-static
-short power2 [15] =
-{	1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80,
-	0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000
-} ;
-
-/*
- * quan()
- *
- * quantizes the input val against the table of size short integers.
- * It returns i if table[i - 1] <= val < table[i].
- *
- * Using linear search for simple coding.
- */
-static
-int quan (int val, short *table, int size)
-{
-	int		i;
-
-	for (i = 0; i < size; i++)
-		if (val < *table++)
-			break;
-	return (i);
-}
-
-/*
- * fmult()
- *
- * returns the integer product of the 14-bit integer "an" and
- * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
- */
-static
-int fmult (int an, int srn)
-{
-	short		anmag, anexp, anmant;
-	short		wanexp, wanmant;
-	short		retval;
-
-	anmag = (an > 0) ? an : ((-an) & 0x1FFF);
-	anexp = quan(anmag, power2, 15) - 6;
-	anmant = (anmag == 0) ? 32 :
-	    (anexp >= 0) ? anmag >> anexp : anmag << -anexp;
-	wanexp = anexp + ((srn >> 6) & 0xF) - 13;
-
-	/*
-	** The original was :
-	**		wanmant = (anmant * (srn & 0x3F) + 0x30) >> 4 ;
-	** but could see no valid reason for the + 0x30.
-	** Removed it and it improved the SNR of the codec.
-	*/
-
-	wanmant = (anmant * (srn & 0x3F)) >> 4 ;
-
-	retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) :
-	    (wanmant >> -wanexp);
-
-	return (((an ^ srn) < 0) ? -retval : retval);
-}
-
-static G72x_STATE * g72x_state_new (void)
-{	return calloc (1, sizeof (G72x_STATE)) ;
-}
-
-/*
- * private_init_state()
- *
- * This routine initializes and/or resets the G72x_PRIVATE structure
- * pointed to by 'state_ptr'.
- * All the initial state values are specified in the CCITT G.721 document.
- */
-void private_init_state (G72x_STATE *state_ptr)
-{
-	int		cnta;
-
-	state_ptr->yl = 34816;
-	state_ptr->yu = 544;
-	state_ptr->dms = 0;
-	state_ptr->dml = 0;
-	state_ptr->ap = 0;
-	for (cnta = 0; cnta < 2; cnta++) {
-		state_ptr->a[cnta] = 0;
-		state_ptr->pk[cnta] = 0;
-		state_ptr->sr[cnta] = 32;
-	}
-	for (cnta = 0; cnta < 6; cnta++) {
-		state_ptr->b[cnta] = 0;
-		state_ptr->dq[cnta] = 32;
-	}
-	state_ptr->td = 0;
-}	/* private_init_state */
-
-struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock)
-{	G72x_STATE *pstate ;
-
-	if ((pstate = g72x_state_new ()) == NULL)
-		return NULL ;
-
-	private_init_state (pstate) ;
-
-	pstate->encoder = NULL ;
-
-	switch (codec)
-	{	case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
-				pstate->decoder = g723_16_decoder ;
-				*blocksize = G723_16_BYTES_PER_BLOCK ;
-				*samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 2 ;
-				pstate->blocksize = G723_16_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
-				pstate->decoder = g723_24_decoder ;
-				*blocksize = G723_24_BYTES_PER_BLOCK ;
-				*samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 3 ;
-				pstate->blocksize = G723_24_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
-				pstate->decoder = g721_decoder ;
-				*blocksize = G721_32_BYTES_PER_BLOCK ;
-				*samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 4 ;
-				pstate->blocksize = G721_32_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
-				pstate->decoder = g723_40_decoder ;
-				*blocksize = G721_40_BYTES_PER_BLOCK ;
-				*samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 5 ;
-				pstate->blocksize = G721_40_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-				break ;
-
-		default :
-				free (pstate) ;
-				return NULL ;
-		} ;
-
-	return pstate ;
-}	/* g72x_reader_init */
-
-struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock)
-{	G72x_STATE *pstate ;
-
-	if ((pstate = g72x_state_new ()) == NULL)
-		return NULL ;
-
-	private_init_state (pstate) ;
-	pstate->decoder = NULL ;
-
-	switch (codec)
-	{	case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
-				pstate->encoder = g723_16_encoder ;
-				*blocksize = G723_16_BYTES_PER_BLOCK ;
-				*samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 2 ;
-				pstate->blocksize = G723_16_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
-				pstate->encoder = g723_24_encoder ;
-				*blocksize = G723_24_BYTES_PER_BLOCK ;
-				*samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 3 ;
-				pstate->blocksize = G723_24_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
-				pstate->encoder = g721_encoder ;
-				*blocksize = G721_32_BYTES_PER_BLOCK ;
-				*samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 4 ;
-				pstate->blocksize = G721_32_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-				break ;
-
-		case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
-				pstate->encoder = g723_40_encoder ;
-				*blocksize = G721_40_BYTES_PER_BLOCK ;
-				*samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-				pstate->codec_bits = 5 ;
-				pstate->blocksize = G721_40_BYTES_PER_BLOCK ;
-				pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-				break ;
-
-		default :
-				free (pstate) ;
-				return NULL ;
-		} ;
-
-	return pstate ;
-}	/* g72x_writer_init */
-
-int g72x_decode_block (G72x_STATE *pstate, const unsigned char *block, short *samples)
-{	int	k, count ;
-
-	count = unpack_bytes (pstate->codec_bits, pstate->blocksize, block, samples) ;
-
-	for (k = 0 ; k < count ; k++)
-		samples [k] = pstate->decoder (samples [k], pstate) ;
-
-	return 0 ;
-}	/* g72x_decode_block */
-
-int g72x_encode_block (G72x_STATE *pstate, short *samples, unsigned char *block)
-{	int k, count ;
-
-	for (k = 0 ; k < pstate->samplesperblock ; k++)
-		samples [k] = pstate->encoder (samples [k], pstate) ;
-
-	count = pack_bytes (pstate->codec_bits, samples, block) ;
-
-	return count ;
-}	/* g72x_encode_block */
-
-/*
- * predictor_zero()
- *
- * computes the estimated signal from 6-zero predictor.
- *
- */
-int  predictor_zero (G72x_STATE *state_ptr)
-{
-	int		i;
-	int		sezi;
-
-	sezi = fmult(state_ptr->b[0] >> 2, state_ptr->dq[0]);
-	for (i = 1; i < 6; i++)			/* ACCUM */
-		sezi += fmult(state_ptr->b[i] >> 2, state_ptr->dq[i]);
-	return (sezi);
-}
-/*
- * predictor_pole()
- *
- * computes the estimated signal from 2-pole predictor.
- *
- */
-int  predictor_pole(G72x_STATE *state_ptr)
-{
-	return (fmult(state_ptr->a[1] >> 2, state_ptr->sr[1]) +
-	    fmult(state_ptr->a[0] >> 2, state_ptr->sr[0]));
-}
-/*
- * step_size()
- *
- * computes the quantization step size of the adaptive quantizer.
- *
- */
-int  step_size (G72x_STATE *state_ptr)
-{
-	int		y;
-	int		dif;
-	int		al;
-
-	if (state_ptr->ap >= 256)
-		return (state_ptr->yu);
-	else {
-		y = state_ptr->yl >> 6;
-		dif = state_ptr->yu - y;
-		al = state_ptr->ap >> 2;
-		if (dif > 0)
-			y += (dif * al) >> 6;
-		else if (dif < 0)
-			y += (dif * al + 0x3F) >> 6;
-		return (y);
-	}
-}
-
-/*
- * quantize()
- *
- * Given a raw sample, 'd', of the difference signal and a
- * quantization step size scale factor, 'y', this routine returns the
- * ADPCM codeword to which that sample gets quantized.  The step
- * size scale factor division operation is done in the log base 2 domain
- * as a subtraction.
- */
-int quantize(
-	int		d,	/* Raw difference signal sample */
-	int		y,	/* Step size multiplier */
-	short	*table,	/* quantization table */
-	int		size)	/* table size of short integers */
-{
-	short		dqm;	/* Magnitude of 'd' */
-	short		expon;	/* Integer part of base 2 log of 'd' */
-	short		mant;	/* Fractional part of base 2 log */
-	short		dl;	/* Log of magnitude of 'd' */
-	short		dln;	/* Step size scale factor normalized log */
-	int		i;
-
-	/*
-	 * LOG
-	 *
-	 * Compute base 2 log of 'd', and store in 'dl'.
-	 */
-	dqm = abs(d);
-	expon = quan(dqm >> 1, power2, 15);
-	mant = ((dqm << 7) >> expon) & 0x7F;	/* Fractional portion. */
-	dl = (expon << 7) + mant;
-
-	/*
-	 * SUBTB
-	 *
-	 * "Divide" by step size multiplier.
-	 */
-	dln = dl - (y >> 2);
-
-	/*
-	 * QUAN
-	 *
-	 * Obtain codword i for 'd'.
-	 */
-	i = quan(dln, table, size);
-	if (d < 0)			/* take 1's complement of i */
-		return ((size << 1) + 1 - i);
-	else if (i == 0)		/* take 1's complement of 0 */
-		return ((size << 1) + 1); /* new in 1988 */
-	else
-		return (i);
-}
-/*
- * reconstruct()
- *
- * Returns reconstructed difference signal 'dq' obtained from
- * codeword 'i' and quantization step size scale factor 'y'.
- * Multiplication is performed in log base 2 domain as addition.
- */
-int
-reconstruct(
-	int		sign,	/* 0 for non-negative value */
-	int		dqln,	/* G.72x codeword */
-	int		y)	/* Step size multiplier */
-{
-	short		dql;	/* Log of 'dq' magnitude */
-	short		dex;	/* Integer part of log */
-	short		dqt;
-	short		dq;	/* Reconstructed difference signal sample */
-
-	dql = dqln + (y >> 2);	/* ADDA */
-
-	if (dql < 0) {
-		return ((sign) ? -0x8000 : 0);
-	} else {		/* ANTILOG */
-		dex = (dql >> 7) & 15;
-		dqt = 128 + (dql & 127);
-		dq = (dqt << 7) >> (14 - dex);
-		return ((sign) ? (dq - 0x8000) : dq);
-	}
-}
-
-
-/*
- * update()
- *
- * updates the state variables for each output code
- */
-void
-update(
-	int		code_size,	/* distinguish 723_40 with others */
-	int		y,		/* quantizer step size */
-	int		wi,		/* scale factor multiplier */
-	int		fi,		/* for long/short term energies */
-	int		dq,		/* quantized prediction difference */
-	int		sr,		/* reconstructed signal */
-	int		dqsez,		/* difference from 2-pole predictor */
-	G72x_STATE *state_ptr)	/* coder state pointer */
-{
-	int		cnt;
-	short		mag, expon;	/* Adaptive predictor, FLOAT A */
-	short		a2p = 0;	/* LIMC */
-	short		a1ul;		/* UPA1 */
-	short		pks1;		/* UPA2 */
-	short		fa1;
-	char		tr;		/* tone/transition detector */
-	short		ylint, thr2, dqthr;
-	short  		ylfrac, thr1;
-	short		pk0;
-
-	pk0 = (dqsez < 0) ? 1 : 0;	/* needed in updating predictor poles */
-
-	mag = dq & 0x7FFF;		/* prediction difference magnitude */
-	/* TRANS */
-	ylint = state_ptr->yl >> 15;	/* exponent part of yl */
-	ylfrac = (state_ptr->yl >> 10) & 0x1F;	/* fractional part of yl */
-	thr1 = (32 + ylfrac) << ylint;		/* threshold */
-	thr2 = (ylint > 9) ? 31 << 10 : thr1;	/* limit thr2 to 31 << 10 */
-	dqthr = (thr2 + (thr2 >> 1)) >> 1;	/* dqthr = 0.75 * thr2 */
-	if (state_ptr->td == 0)		/* signal supposed voice */
-		tr = 0;
-	else if (mag <= dqthr)		/* supposed data, but small mag */
-		tr = 0;			/* treated as voice */
-	else				/* signal is data (modem) */
-		tr = 1;
-
-	/*
-	 * Quantizer scale factor adaptation.
-	 */
-
-	/* FUNCTW & FILTD & DELAY */
-	/* update non-steady state step size multiplier */
-	state_ptr->yu = y + ((wi - y) >> 5);
-
-	/* LIMB */
-	if (state_ptr->yu < 544)	/* 544 <= yu <= 5120 */
-		state_ptr->yu = 544;
-	else if (state_ptr->yu > 5120)
-		state_ptr->yu = 5120;
-
-	/* FILTE & DELAY */
-	/* update steady state step size multiplier */
-	state_ptr->yl += state_ptr->yu + ((-state_ptr->yl) >> 6);
-
-	/*
-	 * Adaptive predictor coefficients.
-	 */
-	if (tr == 1) {			/* reset a's and b's for modem signal */
-		state_ptr->a[0] = 0;
-		state_ptr->a[1] = 0;
-		state_ptr->b[0] = 0;
-		state_ptr->b[1] = 0;
-		state_ptr->b[2] = 0;
-		state_ptr->b[3] = 0;
-		state_ptr->b[4] = 0;
-		state_ptr->b[5] = 0;
-	} else {			/* update a's and b's */
-		pks1 = pk0 ^ state_ptr->pk[0];		/* UPA2 */
-
-		/* update predictor pole a[1] */
-		a2p = state_ptr->a[1] - (state_ptr->a[1] >> 7);
-		if (dqsez != 0) {
-			fa1 = (pks1) ? state_ptr->a[0] : -state_ptr->a[0];
-			if (fa1 < -8191)	/* a2p = function of fa1 */
-				a2p -= 0x100;
-			else if (fa1 > 8191)
-				a2p += 0xFF;
-			else
-				a2p += fa1 >> 5;
-
-			if (pk0 ^ state_ptr->pk[1])
-			{	/* LIMC */
-				if (a2p <= -12160)
-					a2p = -12288;
-				else if (a2p >= 12416)
-					a2p = 12288;
-				else
-					a2p -= 0x80;
-				}
-			else if (a2p <= -12416)
-				a2p = -12288;
-			else if (a2p >= 12160)
-				a2p = 12288;
-			else
-				a2p += 0x80;
-		}
-
-		/* TRIGB & DELAY */
-		state_ptr->a[1] = a2p;
-
-		/* UPA1 */
-		/* update predictor pole a[0] */
-		state_ptr->a[0] -= state_ptr->a[0] >> 8;
-		if (dqsez != 0)
-		{	if (pks1 == 0)
-				state_ptr->a[0] += 192;
-			else
-				state_ptr->a[0] -= 192;
-			} ;
-
-		/* LIMD */
-		a1ul = 15360 - a2p;
-		if (state_ptr->a[0] < -a1ul)
-			state_ptr->a[0] = -a1ul;
-		else if (state_ptr->a[0] > a1ul)
-			state_ptr->a[0] = a1ul;
-
-		/* UPB : update predictor zeros b[6] */
-		for (cnt = 0; cnt < 6; cnt++) {
-			if (code_size == 5)		/* for 40Kbps G.723 */
-				state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
-			else			/* for G.721 and 24Kbps G.723 */
-				state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8;
-			if (dq & 0x7FFF) {			/* XOR */
-				if ((dq ^ state_ptr->dq[cnt]) >= 0)
-					state_ptr->b[cnt] += 128;
-				else
-					state_ptr->b[cnt] -= 128;
-			}
-		}
-	}
-
-	for (cnt = 5; cnt > 0; cnt--)
-		state_ptr->dq[cnt] = state_ptr->dq[cnt-1];
-	/* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
-	if (mag == 0) {
-		state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
-	} else {
-		expon = quan(mag, power2, 15);
-		state_ptr->dq[0] = (dq >= 0) ?
-		    (expon << 6) + ((mag << 6) >> expon) :
-		    (expon << 6) + ((mag << 6) >> expon) - 0x400;
-	}
-
-	state_ptr->sr[1] = state_ptr->sr[0];
-	/* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
-	if (sr == 0) {
-		state_ptr->sr[0] = 0x20;
-	} else if (sr > 0) {
-		expon = quan(sr, power2, 15);
-		state_ptr->sr[0] = (expon << 6) + ((sr << 6) >> expon);
-	} else if (sr > -32768) {
-		mag = -sr;
-		expon = quan(mag, power2, 15);
-		state_ptr->sr[0] =  (expon << 6) + ((mag << 6) >> expon) - 0x400;
-	} else
-		state_ptr->sr[0] = (short) 0xFC20;
-
-	/* DELAY A */
-	state_ptr->pk[1] = state_ptr->pk[0];
-	state_ptr->pk[0] = pk0;
-
-	/* TONE */
-	if (tr == 1)		/* this sample has been treated as data */
-		state_ptr->td = 0;	/* next one will be treated as voice */
-	else if (a2p < -11776)	/* small sample-to-sample correlation */
-		state_ptr->td = 1;	/* signal may be data */
-	else				/* signal is voice */
-		state_ptr->td = 0;
-
-	/*
-	 * Adaptation speed control.
-	 */
-	state_ptr->dms += (fi - state_ptr->dms) >> 5;		/* FILTA */
-	state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7);	/* FILTB */
-
-	if (tr == 1)
-		state_ptr->ap = 256;
-	else if (y < 1536)					/* SUBTC */
-		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-	else if (state_ptr->td == 1)
-		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-	else if (abs((state_ptr->dms << 2) - state_ptr->dml) >=
-	    (state_ptr->dml >> 3))
-		state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-	else
-		state_ptr->ap += (-state_ptr->ap) >> 4;
-
-	return ;
-} /* update */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples)
-{	unsigned int    in_buffer = 0 ;
-	unsigned char	in_byte ;
-	int				k, in_bits = 0, bindex = 0 ;
-
-	for (k = 0 ; bindex <= blocksize && k < G72x_BLOCK_SIZE ; k++)
-	{	if (in_bits < bits)
-		{	in_byte = block [bindex++] ;
-
-			in_buffer |= (in_byte << in_bits);
-			in_bits += 8;
-			}
-		samples [k] = in_buffer & ((1 << bits) - 1);
-		in_buffer >>= bits;
-		in_bits -= bits;
-		} ;
-
-	return k ;
-} /* unpack_bytes */
-
-static int
-pack_bytes (int bits, const short * samples, unsigned char * block)
-{
-	unsigned int	out_buffer = 0 ;
-	int				k, bindex = 0, out_bits = 0 ;
-	unsigned char	out_byte ;
-
-	for (k = 0 ; k < G72x_BLOCK_SIZE ; k++)
-	{	out_buffer |= (samples [k] << out_bits) ;
-		out_bits += bits ;
-		if (out_bits >= 8)
-		{	out_byte = out_buffer & 0xFF ;
-			out_bits -= 8 ;
-			out_buffer >>= 8 ;
-			block [bindex++] = out_byte ;
-			}
-		} ;
-
-	return bindex ;
-} /* pack_bytes */
-
diff --git a/libs/libsndfile/src/G72x/g72x.h b/libs/libsndfile/src/G72x/g72x.h
deleted file mode 100644
index d7631e6d8e..0000000000
--- a/libs/libsndfile/src/G72x/g72x.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** This file is not the same as the original file from Sun Microsystems. Nearly
-** all the original definitions and function prototypes that were in the file
-** of this name have been moved to g72x_priv.h.
-*/
-
-#ifndef G72X_HEADER_FILE
-#define	G72X_HEADER_FILE
-
-/*
-** Number of samples per block to process.
-** Must be a common multiple of possible bits per sample : 2, 3, 4, 5 and 8.
-*/
-#define	G72x_BLOCK_SIZE		(3 * 5 * 8)
-
-/*
-**	Identifiers for the differing kinds of G72x ADPCM codecs.
-**	The identifiers also define the number of encoded bits per sample.
-*/
-
-enum
-{	G723_16_BITS_PER_SAMPLE = 2,
-	G723_24_BITS_PER_SAMPLE = 3,
-	G723_40_BITS_PER_SAMPLE = 5,
-
-	G721_32_BITS_PER_SAMPLE = 4,
-	G721_40_BITS_PER_SAMPLE = 5,
-
-	G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
-	G723_24_SAMPLES_PER_BLOCK = G723_24_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_24_BITS_PER_SAMPLE),
-	G723_40_SAMPLES_PER_BLOCK = G723_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_40_BITS_PER_SAMPLE),
-
-	G721_32_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
-	G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE),
-
-	G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-	G723_24_BYTES_PER_BLOCK = (G723_24_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-	G723_40_BYTES_PER_BLOCK = (G723_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-
-	G721_32_BYTES_PER_BLOCK = (G721_32_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-	G721_40_BYTES_PER_BLOCK = (G721_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8
-} ;
-
-/* Forward declaration of of g72x_state. */
-
-struct g72x_state ;
-
-/* External function definitions. */
-
-struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock) ;
-struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock) ;
-/*
-**	Initialize the ADPCM state table for the given codec.
-**	Return 0 on success, 1 on fail.
-*/
-
-int g72x_decode_block (struct g72x_state *pstate, const unsigned char *block, short *samples) ;
-/*
-**	The caller fills data->block with data->bytes bytes before calling the
-**	function. The value data->bytes must be an integer multiple of
-**	data->blocksize and be <= data->max_bytes.
-**	When it returns, the caller can read out data->samples samples.
-*/
-
-int g72x_encode_block (struct g72x_state *pstate, short *samples, unsigned char *block) ;
-/*
-**	The caller fills state->samples some integer multiple data->samples_per_block
-**	(up to G72x_BLOCK_SIZE) samples before calling the function.
-**	When it returns, the caller can read out bytes encoded bytes.
-*/
-
-#endif /* !G72X_HEADER_FILE */
-
diff --git a/libs/libsndfile/src/G72x/g72x_priv.h b/libs/libsndfile/src/G72x/g72x_priv.h
deleted file mode 100644
index 867c64b385..0000000000
--- a/libs/libsndfile/src/G72x/g72x_priv.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-#ifndef G72X_PRIVATE_H
-#define G72X_PRIVATE_H
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-
-/*
-** The following is the definition of the state structure used by the
-** G.721/G.723 encoder and decoder to preserve their internal state
-** between successive calls.  The meanings of the majority of the state
-** structure fields are explained in detail in the CCITT Recommendation
-** G.721.  The field names are essentially identical to variable names
-** in the bit level description of the coding algorithm included in this
-** Recommendation.
-*/
-
-struct g72x_state
-{	long  yl;	/* Locked or steady state step size multiplier. */
-	short yu;	/* Unlocked or non-steady state step size multiplier. */
-	short dms;	/* Short term energy estimate. */
-	short dml;	/* Long term energy estimate. */
-	short ap;	/* Linear weighting coefficient of 'yl' and 'yu'. */
-
-	short a[2];	/* Coefficients of pole portion of prediction filter. */
-	short b[6];	/* Coefficients of zero portion of prediction filter. */
-	short pk[2];	/*
-					** Signs of previous two samples of a partially
-					** reconstructed signal.
-					**/
-	short dq[6];	/*
-					** Previous 6 samples of the quantized difference
-					** signal represented in an internal floating point
-					** format.
-					**/
-	short sr[2];	/*
-			 		** Previous 2 samples of the quantized difference
-					** signal represented in an internal floating point
-					** format.
-					*/
-	char td;	/* delayed tone detect, new in 1988 version */
-
-	/*	The following struct members were added for libsndfile. The original
-	**	code worked by calling a set of functions on a sample by sample basis
-	**	which is slow on architectures like Intel x86. For libsndfile, this
-	**	was changed so that the encoding and decoding routines could work on
-	**	a block of samples at a time to reduce the function call overhead.
-	*/
-	int		(*encoder) (int, struct g72x_state* state) ;
-	int		(*decoder) (int, struct g72x_state* state) ;
-
-	int		codec_bits, blocksize, samplesperblock ;
-} ;
-
-typedef struct g72x_state G72x_STATE ;
-
-int	predictor_zero (G72x_STATE *state_ptr);
-
-int	predictor_pole (G72x_STATE *state_ptr);
-
-int	step_size (G72x_STATE *state_ptr);
-
-int	quantize (int d, int	y, short *table, int size);
-
-int	reconstruct (int sign, int dqln,	int y);
-
-void update (int code_size, int y, int wi, int fi, int dq, int sr, int dqsez, G72x_STATE *state_ptr);
-
-int g721_encoder	(int sample, G72x_STATE *state_ptr);
-int g721_decoder	(int code, G72x_STATE *state_ptr);
-
-int g723_16_encoder	(int sample, G72x_STATE *state_ptr);
-int g723_16_decoder	(int code, G72x_STATE *state_ptr);
-
-int g723_24_encoder	(int sample, G72x_STATE *state_ptr);
-int g723_24_decoder	(int code, G72x_STATE *state_ptr);
-
-int g723_40_encoder	(int sample, G72x_STATE *state_ptr);
-int g723_40_decoder	(int code, G72x_STATE *state_ptr);
-
-void private_init_state (G72x_STATE *state_ptr) ;
-
-#endif /* G72X_PRIVATE_H */
diff --git a/libs/libsndfile/src/G72x/g72x_test.c b/libs/libsndfile/src/G72x/g72x_test.c
deleted file mode 100644
index 79cabce11b..0000000000
--- a/libs/libsndfile/src/G72x/g72x_test.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-#define		BUFFER_SIZE		(1<<14) /* Should be (1<<14) */
-#define		SAMPLE_RATE		11025
-
-
-static void g721_test	(void) ;
-static void g723_test	(double margin) ;
-
-static void	gen_signal_double (double *data, double scale, int datalen) ;
-static int error_function (double data, double orig, double margin) ;
-
-static int	oct_save_short	(short *a, short *b, int len) ;
-
-int
-main (int argc, char *argv [])
-{	int		bDoAll = 0 ;
-	int		nTests = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           g721  - test G721 encoder and decoder\n") ;
-		printf ("           g723  - test G721 encoder and decoder\n") ;
-		printf ("           all   - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	bDoAll=!strcmp (argv [1], "all");
-
-	if (bDoAll || ! strcmp (argv [1], "g721"))
-	{	g721_test	() ;
-		nTests++ ;
-		} ;
-
-	if (bDoAll || ! strcmp (argv [1], "g723"))
-	{	g723_test	(0.53) ;
-		nTests++ ;
-		} ;
-
-	if (nTests == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-static void
-g721_test	(void)
-{
-	return ;
-} /* g721_test */
-
-static void
-g723_test	(double margin)
-{	static double	orig_buffer [BUFFER_SIZE] ;
-	static short 	orig [BUFFER_SIZE] ;
-	static short 	data [BUFFER_SIZE] ;
-
-	G72x_STATE encoder_state, decoder_state ;
-
-	long	k ;
-	int 	code, position, max_err ;
-
-	private_init_state (&encoder_state) ;
-	encoder_state.encoder = g723_24_encoder ;
-	encoder_state.codec_bits = 3 ;
-
-	private_init_state (&decoder_state) ;
-	decoder_state.decoder = g723_24_decoder ;
-	decoder_state.codec_bits = 3 ;
-
-	memset (data, 0, BUFFER_SIZE * sizeof (short)) ;
-	memset (orig, 0, BUFFER_SIZE * sizeof (short)) ;
-
-	printf ("    g723_test    : ") ;
-	fflush (stdout) ;
-
-	gen_signal_double (orig_buffer, 32000.0, BUFFER_SIZE) ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		orig [k] = (short) orig_buffer [k] ;
-
-	/* Write and read data here. */
-	position = 0 ;
-	max_err = 0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-	{	code = encoder_state.encoder (orig [k], &encoder_state) ;
-		data [k] = decoder_state.decoder (code, &decoder_state) ;
-		if (abs (orig [k] - data [k]) > max_err)
-		{	position = k ;
-			max_err = abs (orig [k] - data [k]) ;
-			} ;
-		} ;
-
-	printf ("\n\nMax error of %d at postion %d.\n", max_err, position) ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-	{	if (error_function (data [k], orig [k], margin))
-		{	printf ("Line %d: Incorrect sample A (#%ld : %d should be %d).\n", __LINE__, k, data [k], orig [k]) ;
-			oct_save_short (orig, data, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-		} ;
-
-
-	printf ("ok\n") ;
-
-	return ;
-} /* g723_test */
-
-
-#define		SIGNAL_MAXVAL	30000.0
-#define		DECAY_COUNT		1000
-
-static void
-gen_signal_double (double *gendata, double scale, int gendatalen)
-{	int		k, ramplen ;
-	double	amp = 0.0 ;
-
-	ramplen = DECAY_COUNT ;
-
-	for (k = 0 ; k < gendatalen ; k++)
-	{	if (k <= ramplen)
-			amp = scale * k / ((double) ramplen) ;
-		else if (k > gendatalen - ramplen)
-			amp = scale * (gendatalen - k) / ((double) ramplen) ;
-
-		gendata [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-						+ 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-		} ;
-
-	return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{	double error ;
-
-	if (fabs (orig) <= 500.0)
-		error = fabs (fabs (data) - fabs(orig)) / 2000.0 ;
-	else if (fabs (orig) <= 1000.0)
-		error = fabs (data - orig) / 3000.0 ;
-	else
-		error = fabs (data - orig) / fabs (orig) ;
-
-	if (error > margin)
-	{	printf ("\n\n*******************\nError : %f\n", error) ;
-		return 1 ;
-		} ;
-	return 0 ;
-} /* error_function */
-
-static int
-oct_save_short	(short *a, short *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen ("error.dat", "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_short */
-
diff --git a/libs/libsndfile/src/GSM610/COPYRIGHT b/libs/libsndfile/src/GSM610/COPYRIGHT
deleted file mode 100644
index eba0e523bb..0000000000
--- a/libs/libsndfile/src/GSM610/COPYRIGHT
+++ /dev/null
@@ -1,16 +0,0 @@
-Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universitaet Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universitaet Berlin
-are deemed to have made any representations as to the suitability of this
-software for any purpose nor are held responsible for any defects of
-this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
-As a matter of courtesy, the authors request to be informed about uses
-this software has found, about bugs in this software, and about any
-improvements that may be of general interest.
-
-Berlin, 28.11.1994
-Jutta Degener
-Carsten Bormann
diff --git a/libs/libsndfile/src/GSM610/ChangeLog b/libs/libsndfile/src/GSM610/ChangeLog
deleted file mode 100644
index 24f524882d..0000000000
--- a/libs/libsndfile/src/GSM610/ChangeLog
+++ /dev/null
@@ -1,56 +0,0 @@
-2004-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * gsm610_priv.h
-    Replace ugly macros with inline functions.
-
-    * *.c
-    Remove temporary variables used by macros and other minor fixes required by
-    above change.
-
-2003-06-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * rpe.c
-	Renamed variables "exp" to "expon" to avoid shadowed parameter warnigns.
-
-2002-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * long_term.c
-	Changes tp removed compiler warnings about shadowed parameters.
-
-2002-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * private.h
-	Made declarations of gsm_A, gsm_B, gsm_MIC etc extern. This fixed a compile
-	problem on MacOSX.
-
-2002-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-	* *.[ch]
-	Removed all pre-ANSI prototype kludges. Removed proto.h and unproto.h. 
-	Started work on making GSM 6.10 files seekable. Currently they are not.
-
-    * code.c private.h
-	Function Gsm_Coder () used a statically defined array. This was obviously
-	not re-entrant so moved it to struct gsm_state.
-
-2001-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * code.c
-    Added #includes for string.h and stdlib.h.
-
-2000-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * config.h
-    Removed some commented out #defines (ie //*efine) which were causing problems on
-	the Sun cc compiler.
-
-2000-02-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * private.h
-    Added #defines to emulate normal compile time options.
-
-2000-02-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * everthing
-    Created this directory and copied files from libgsm.
-    http://kbs.cs.tu-berlin.de/~jutta/toast.html
diff --git a/libs/libsndfile/src/GSM610/Makefile.am b/libs/libsndfile/src/GSM610/Makefile.am
deleted file mode 100644
index a7358f283b..0000000000
--- a/libs/libsndfile/src/GSM610/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README COPYRIGHT ChangeLog
-
-noinst_HEADERS = gsm.h config.h gsm610_priv.h
-noinst_LTLIBRARIES = libgsm.la
-
-CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \
-	short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c
-
-libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS)
-
-# Disable autoheader. 
-AUTOHEADER=echo
-
-
diff --git a/libs/libsndfile/src/GSM610/README b/libs/libsndfile/src/GSM610/README
deleted file mode 100644
index b57132b051..0000000000
--- a/libs/libsndfile/src/GSM610/README
+++ /dev/null
@@ -1,36 +0,0 @@
-GSM 06.10 13 kbit/s RPE/LTP speech codec
-----------------------------------------
-
-All the file in this directory were written by Jutta Degener
-and Carsten Borman for The Communications and Operating Systems 
-Research Group (KBS) at the Technische Universitaet Berlin.
-
-Their work was released under the following license which is 
-assumed to be compatible with The GNU Lesser General Public License.
-
-----------------------------------------------------------------------------
-
-Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universitaet Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universitaet Berlin
-are deemed to have made any representations as to the suitability of this
-software for any purpose nor are held responsible for any defects of
-this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
-As a matter of courtesy, the authors request to be informed about uses
-this software has found, about bugs in this software, and about any
-improvements that may be of general interest.
-
-Berlin, 28.11.1994
-Jutta Degener (jutta@cs.tu-berlin.de)
-Carsten Bormann (cabo@cs.tu-berlin.de)
-
-----------------------------------------------------------------------------
-
-Jutta Degener and Carsten Bormann's work can be found on their homepage
-at:
-
-    http://kbs.cs.tu-berlin.de/~jutta/toast.html
-	
diff --git a/libs/libsndfile/src/GSM610/add.c b/libs/libsndfile/src/GSM610/add.c
deleted file mode 100644
index 6f4eb5cc5f..0000000000
--- a/libs/libsndfile/src/GSM610/add.c
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-/*
- *  See private.h for the more commonly used macro versions.
- */
-
-#include	<stdio.h>
-#include	<assert.h>
-
-#include	"gsm610_priv.h"
-
-#define	saturate(x) 	\
-	((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
-
-word gsm_add ( word a, word b)
-{
-	longword sum = (longword)a + (longword)b;
-	return saturate(sum);
-}
-
-word gsm_sub ( word a, word b)
-{
-	longword diff = (longword)a - (longword)b;
-	return saturate(diff);
-}
-
-word gsm_mult ( word a, word b)
-{
-	if (a == MIN_WORD && b == MIN_WORD)
-		return MAX_WORD;
-	
-	return SASR_L( (longword)a * (longword)b, 15 );
-}
-
-word gsm_mult_r ( word a, word b)
-{
-	if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD;
-	else {
-		longword prod = (longword)a * (longword)b + 16384;
-		prod >>= 15;
-		return prod & 0xFFFF;
-	}
-}
-
-word gsm_abs (word a)
-{
-	return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a;
-}
-
-longword gsm_L_mult (word a, word b)
-{
-	assert( a != MIN_WORD || b != MIN_WORD );
-	return ((longword)a * (longword)b) << 1;
-}
-
-longword gsm_L_add ( longword a, longword b)
-{
-	if (a < 0) {
-		if (b >= 0) return a + b;
-		else {
-			ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1);
-			return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2;
-		}
-	}
-	else if (b <= 0) return a + b;
-	else {
-		ulongword A = (ulongword)a + (ulongword)b;
-		return A > MAX_LONGWORD ? MAX_LONGWORD : A;
-	}
-}
-
-longword gsm_L_sub ( longword a, longword b)
-{
-	if (a >= 0) {
-		if (b >= 0) return a - b;
-		else {
-			/* a>=0, b<0 */
-
-			ulongword A = (ulongword)a + -(b + 1);
-			return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1);
-		}
-	}
-	else if (b <= 0) return a - b;
-	else {
-		/* a<0, b>0 */  
-
-		ulongword A = (ulongword)-(a + 1) + b;
-		return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1;
-	}
-}
-
-static unsigned char const bitoff[ 256 ] = {
-	 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
-	 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-	 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-	 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-	 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-word gsm_norm (longword a )
-/*
- * the number of left shifts needed to normalize the 32 bit
- * variable L_var1 for positive values on the interval
- *
- * with minimum of
- * minimum of 1073741824  (01000000000000000000000000000000) and 
- * maximum of 2147483647  (01111111111111111111111111111111)
- *
- *
- * and for negative values on the interval with
- * minimum of -2147483648 (-10000000000000000000000000000000) and
- * maximum of -1073741824 ( -1000000000000000000000000000000).
- *
- * in order to normalize the result, the following
- * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 );
- *
- * (That's 'ffs', only from the left, not the right..)
- */
-{
-	assert(a != 0);
-
-	if (a < 0) {
-		if (a <= -1073741824) return 0;
-		a = ~a;
-	}
-
-	return    a & 0xffff0000 
-		? ( a & 0xff000000
-		  ?  -1 + bitoff[ 0xFF & (a >> 24) ]
-		  :   7 + bitoff[ 0xFF & (a >> 16) ] )
-		: ( a & 0xff00
-		  ?  15 + bitoff[ 0xFF & (a >> 8) ]
-		  :  23 + bitoff[ 0xFF & a ] );
-}
-
-longword gsm_L_asl (longword a, int n)
-{
-	if (n >= 32) return 0;
-	if (n <= -32) return -(a < 0);
-	if (n < 0) return gsm_L_asr(a, -n);
-	return a << n;
-}
-
-word gsm_asr (word a, int n)
-{
-	if (n >= 16) return -(a < 0);
-	if (n <= -16) return 0;
-	if (n < 0) return a << -n;
-
-	return SASR_W (a, (word) n);
-}
-
-word gsm_asl (word a, int n)
-{
-	if (n >= 16) return 0;
-	if (n <= -16) return -(a < 0);
-	if (n < 0) return gsm_asr(a, -n);
-	return a << n;
-}
-
-longword gsm_L_asr (longword a, int n)
-{
-	if (n >= 32) return -(a < 0);
-	if (n <= -32) return 0;
-	if (n < 0) return a << -n;
-
-	return SASR_L (a, (word) n);
-}
-
-/*
-**	word gsm_asr (word a, int n)
-**	{
-**		if (n >= 16) return -(a < 0);
-**		if (n <= -16) return 0;
-**		if (n < 0) return a << -n;
-**	
-**	#	ifdef	SASR_W
-**			return a >> n;
-**	#	else
-**			if (a >= 0) return a >> n;
-**			else return -(word)( -(uword)a >> n );
-**	#	endif
-**	}
-**	
-*/
-/* 
- *  (From p. 46, end of section 4.2.5)
- *
- *  NOTE: The following lines gives [sic] one correct implementation
- *  	  of the div(num, denum) arithmetic operation.  Compute div
- *        which is the integer division of num by denum: with denum
- *	  >= num > 0
- */
-
-word gsm_div (word num, word denum)
-{
-	longword	L_num   = num;
-	longword	L_denum = denum;
-	word		div 	= 0;
-	int		k 	= 15;
-
-	/* The parameter num sometimes becomes zero.
-	 * Although this is explicitly guarded against in 4.2.5,
-	 * we assume that the result should then be zero as well.
-	 */
-
-	/* assert(num != 0); */
-
-	assert(num >= 0 && denum >= num);
-	if (num == 0)
-	    return 0;
-
-	while (k--) {
-		div   <<= 1;
-		L_num <<= 1;
-
-		if (L_num >= L_denum) {
-			L_num -= L_denum;
-			div++;
-		}
-	}
-
-	return div;
-}
-
diff --git a/libs/libsndfile/src/GSM610/code.c b/libs/libsndfile/src/GSM610/code.c
deleted file mode 100644
index 78cb853c1d..0000000000
--- a/libs/libsndfile/src/GSM610/code.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-
-#include	<stdlib.h>
-#include	<string.h>
-
-#include	"gsm610_priv.h"
-
-/* 
- *  4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER 
- */
-
-void Gsm_Coder (
-
-	struct gsm_state	* State,
-
-	word	* s,	/* [0..159] samples		  	IN	*/
-
-/*
- * The RPE-LTD coder works on a frame by frame basis.  The length of
- * the frame is equal to 160 samples.  Some computations are done
- * once per frame to produce at the output of the coder the
- * LARc[1..8] parameters which are the coded LAR coefficients and 
- * also to realize the inverse filtering operation for the entire
- * frame (160 samples of signal d[0..159]).  These parts produce at
- * the output of the coder:
- */
-
-	word	* LARc,	/* [0..7] LAR coefficients		OUT	*/
-
-/*
- * Procedure 4.2.11 to 4.2.18 are to be executed four times per
- * frame.  That means once for each sub-segment RPE-LTP analysis of
- * 40 samples.  These parts produce at the output of the coder:
- */
-
-	word	* Nc,	/* [0..3] LTP lag			OUT 	*/
-	word	* bc,	/* [0..3] coded LTP gain		OUT 	*/
-	word	* Mc,	/* [0..3] RPE grid selection		OUT     */
-	word	* xmaxc,/* [0..3] Coded maximum amplitude	OUT	*/
-	word	* xMc	/* [13*4] normalized RPE samples	OUT	*/
-)
-{
-	int	k;
-	word	* dp  = State->dp0 + 120;	/* [ -120...-1 ] */
-	word	* dpp = dp;		/* [ 0...39 ]	 */
-
-	word	so[160];
-
-	Gsm_Preprocess			(State, s, so);
-	Gsm_LPC_Analysis		(State, so, LARc);
-	Gsm_Short_Term_Analysis_Filter	(State, LARc, so);
-
-	for (k = 0; k <= 3; k++, xMc += 13) {
-
-		Gsm_Long_Term_Predictor	( State,
-					 so+k*40, /* d      [0..39] IN	*/
-					 dp,	  /* dp  [-120..-1] IN	*/
-					State->e + 5,	  /* e      [0..39] OUT	*/
-					dpp,	  /* dpp    [0..39] OUT */
-					 Nc++,
-					 bc++);
-
-		Gsm_RPE_Encoding	( /*-S,-*/
-					State->e + 5,	/* e	  ][0..39][ IN/OUT */
-					  xmaxc++, Mc++, xMc );
-		/*
-		 * Gsm_Update_of_reconstructed_short_time_residual_signal
-		 *			( dpp, State->e + 5, dp );
-		 */
-
-		{ register int i;
-		  for (i = 0; i <= 39; i++)
-			dp[ i ] = GSM_ADD( State->e[5 + i], dpp[i] );
-		}
-		dp  += 40;
-		dpp += 40;
-
-	}
-	(void)memcpy( (char *)State->dp0, (char *)(State->dp0 + 160),
-		120 * sizeof(*State->dp0) );
-}
-
diff --git a/libs/libsndfile/src/GSM610/config.h b/libs/libsndfile/src/GSM610/config.h
deleted file mode 100644
index f3eeb82e89..0000000000
--- a/libs/libsndfile/src/GSM610/config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef	CONFIG_H
-#define	CONFIG_H
-
-#define	HAS_STDLIB_H	1		/* /usr/include/stdlib.h	*/
-#define	HAS_FCNTL_H	1		/* /usr/include/fcntl.h		*/
-
-#define	HAS_FSTAT 	1		/* fstat syscall		*/
-#define	HAS_FCHMOD 	1		/* fchmod syscall		*/
-#define	HAS_CHMOD 	1		/* chmod syscall		*/
-#define	HAS_FCHOWN 	1		/* fchown syscall		*/
-#define	HAS_CHOWN 	1		/* chown syscall		*/
-
-#define	HAS_STRING_H 	1		/* /usr/include/string.h 	*/
-
-#define	HAS_UNISTD_H	1		/* /usr/include/unistd.h	*/
-#define	HAS_UTIME	1		/* POSIX utime(path, times)	*/
-#define	HAS_UTIME_H	1		/* UTIME header file		*/
-
-#endif	/* CONFIG_H */
-
diff --git a/libs/libsndfile/src/GSM610/decode.c b/libs/libsndfile/src/GSM610/decode.c
deleted file mode 100644
index 350df12969..0000000000
--- a/libs/libsndfile/src/GSM610/decode.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-
-#include	"gsm610_priv.h"
-
-/*
- *  4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
- */
-
-static void Postprocessing (
-	struct gsm_state	* S,
-	register word 		* s)
-{
-	register int		k;
-	register word		msr = S->msr;
-	register word		tmp;
-
-	for (k = 160; k--; s++) {
-		tmp = GSM_MULT_R( msr, 28180 );
-		msr = GSM_ADD(*s, tmp);  	   /* Deemphasis 	     */
-		*s  = GSM_ADD(msr, msr) & 0xFFF8;  /* Truncation & Upscaling */
-	}
-	S->msr = msr;
-}
-
-void Gsm_Decoder (
-	struct gsm_state	* S,
-
-	word		* LARcr,	/* [0..7]		IN	*/
-
-	word		* Ncr,		/* [0..3] 		IN 	*/
-	word		* bcr,		/* [0..3]		IN	*/
-	word		* Mcr,		/* [0..3] 		IN 	*/
-	word		* xmaxcr,	/* [0..3]		IN 	*/
-	word		* xMcr,		/* [0..13*4]		IN	*/
-
-	word		* s)		/* [0..159]		OUT 	*/
-{
-	int		j, k;
-	word		erp[40], wt[160];
-	word		* drp = S->dp0 + 120;
-
-	for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) {
-
-		Gsm_RPE_Decoding( /*-S,-*/ *xmaxcr, *Mcr, xMcr, erp );
-		Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
-
-		for (k = 0; k <= 39; k++) wt[ j * 40 + k ] =  drp[ k ];
-	}
-
-	Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
-	Postprocessing(S, s);
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm.h b/libs/libsndfile/src/GSM610/gsm.h
deleted file mode 100644
index 48aecc75aa..0000000000
--- a/libs/libsndfile/src/GSM610/gsm.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef	GSM_H
-#define	GSM_H
-
-#include	<stdio.h>		/* for FILE * 	*/
-
-/*
- *	Interface
- */
-
-typedef struct gsm_state * 	gsm;
-typedef short		   		gsm_signal;		/* signed 16 bit */
-typedef unsigned char		gsm_byte;
-typedef gsm_byte 			gsm_frame[33];		/* 33 * 8 bits	 */
-
-#define	GSM_MAGIC		0xD		  	/* 13 kbit/s RPE-LTP */
-
-#define	GSM_PATCHLEVEL		10
-#define	GSM_MINOR			0
-#define	GSM_MAJOR			1
-
-#define	GSM_OPT_VERBOSE		1
-#define	GSM_OPT_FAST		2
-#define	GSM_OPT_LTP_CUT		3
-#define	GSM_OPT_WAV49		4
-#define	GSM_OPT_FRAME_INDEX	5
-#define	GSM_OPT_FRAME_CHAIN	6
-
-gsm  gsm_create 	(void);
-
-/* Added for libsndfile : May 6, 2002 */
-void gsm_init (gsm);	
-
-void gsm_destroy (gsm);	
-
-int  gsm_print   (FILE *, gsm, gsm_byte  *);
-int  gsm_option  (gsm, int, int *);
-
-void gsm_encode  (gsm, gsm_signal *, gsm_byte  *);
-int  gsm_decode  (gsm, gsm_byte   *, gsm_signal *);
-
-int  gsm_explode (gsm, gsm_byte   *, gsm_signal *);
-void gsm_implode (gsm, gsm_signal *, gsm_byte   *);
-
-#endif	/* GSM_H */
-
-
diff --git a/libs/libsndfile/src/GSM610/gsm610_priv.h b/libs/libsndfile/src/GSM610/gsm610_priv.h
deleted file mode 100644
index e121c1c34e..0000000000
--- a/libs/libsndfile/src/GSM610/gsm610_priv.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef	PRIVATE_H
-#define	PRIVATE_H
-
-/* Added by Erik de Castro Lopo */
-#define	USE_FLOAT_MUL
-#define	FAST
-#define	WAV49
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-/* Added by Erik de Castro Lopo */
-
-
-
-typedef short				word;		/* 16 bit signed int	*/
-typedef int					longword;	/* 32 bit signed int	*/
-
-typedef unsigned short		uword;		/* unsigned word	*/
-typedef unsigned int		ulongword;	/* unsigned longword	*/
-
-struct gsm_state
-{	word			dp0[ 280 ] ;
-
-	word			z1;			/* preprocessing.c, Offset_com. */
-	longword		L_z2;		/*                  Offset_com. */
-	int				mp;			/*                  Preemphasis	*/
-
-	word			u[8] ;			/* short_term_aly_filter.c	*/
-	word			LARpp[2][8] ; 	/*                              */
-	word			j;				/*                              */
-
-	word	        ltp_cut;        /* long_term.c, LTP crosscorr.  */
-	word			nrp; 			/* 40 */	/* long_term.c, synthesis	*/
-	word			v[9] ;			/* short_term.c, synthesis	*/
-	word			msr;			/* decoder.c,	Postprocessing	*/
-
-	char			verbose;		/* only used if !NDEBUG		*/
-	char			fast;			/* only used if FAST		*/
-
-	char			wav_fmt;		/* only used if WAV49 defined	*/
-	unsigned char	frame_index;	/*            odd/even chaining	*/
-	unsigned char	frame_chain;	/*   half-byte to carry forward	*/
-
-	/* Moved here from code.c where it was defined as static */
-	word e[50] ;
-} ;
-
-typedef struct gsm_state GSM_STATE ;
-
-#define	MIN_WORD	(-32767 - 1)
-#define	MAX_WORD	  32767
-
-#define	MIN_LONGWORD	(-2147483647 - 1)
-#define	MAX_LONGWORD	  2147483647
-
-/* Signed arithmetic shift right. */
-static inline word
-SASR_W (word x, word by)
-{	return (x >> by) ;
-} /* SASR */
-
-static inline longword
-SASR_L (longword x, word by)
-{	return (x >> by) ;
-} /* SASR */
-
-/*
- *	Prototypes from add.c
- */
-word	gsm_mult 		(word a, word b) ;
-longword gsm_L_mult 	(word a, word b) ;
-word	gsm_mult_r		(word a, word b) ;
-
-word	gsm_div  		(word num, word denum) ;
-
-word	gsm_add 		(word a, word b ) ;
-longword gsm_L_add 	(longword a, longword b ) ;
-
-word	gsm_sub 		(word a, word b) ;
-longword gsm_L_sub 	(longword a, longword b) ;
-
-word	gsm_abs 		(word a) ;
-
-word	gsm_norm 		(longword a ) ;
-
-longword gsm_L_asl  	(longword a, int n) ;
-word	gsm_asl 		(word a, int n) ;
-
-longword gsm_L_asr  	(longword a, int n) ;
-word	gsm_asr  		(word a, int n) ;
-
-/*
- *  Inlined functions from add.h
- */
-
-static inline longword
-GSM_MULT_R (word a, word b)
-{	return (((longword) (a)) * ((longword) (b)) + 16384) >> 15 ;
-} /* GSM_MULT_R */
-
-static inline longword
-GSM_MULT (word a, word b)
-{	return (((longword) (a)) * ((longword) (b))) >> 15 ;
-} /* GSM_MULT */
-
-static inline longword
-GSM_L_MULT (word a, word b)
-{	return ((longword) (a)) * ((longword) (b)) << 1 ;
-} /* GSM_L_MULT */
-
-static inline longword
-GSM_L_ADD (longword a, longword b)
-{	ulongword utmp ;
-
-	if (a < 0 && b < 0)
-	{	utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1) ;
-		return (utmp >= (ulongword) MAX_LONGWORD) ? MIN_LONGWORD : -(longword)utmp-2 ;
-		} ;
-
-	if (a > 0 && b > 0)
-	{	utmp = (ulongword) a + (ulongword) b ;
-		return (utmp >= (ulongword) MAX_LONGWORD) ? MAX_LONGWORD : utmp ;
-		} ;
-
-	return a + b ;
-} /* GSM_L_ADD */
-
-static inline longword
-GSM_ADD (word a, word b)
-{	longword ltmp ;
-
-	ltmp = ((longword) a) + ((longword) b) ;
-
-	if (ltmp >= MAX_WORD)
-		return MAX_WORD ;
-	if (ltmp <= MIN_WORD)
-		return MIN_WORD ;
-
-	return ltmp ;
-} /* GSM_ADD */
-
-static inline longword
-GSM_SUB (word a, word b)
-{	longword ltmp ;
-
-	ltmp = ((longword) a) - ((longword) b) ;
-
-	if (ltmp >= MAX_WORD)
-		ltmp = MAX_WORD ;
-	else if (ltmp <= MIN_WORD)
-		ltmp = MIN_WORD ;
-
-	return ltmp ;
-} /* GSM_SUB */
-
-static inline word
-GSM_ABS (word a)
-{
-	if (a > 0)
-		return a ;
-	if (a == MIN_WORD)
-		return MAX_WORD ;
-	return -a ;
-} /* GSM_ADD */
-
-
-/*
- *  More prototypes from implementations..
- */
-void Gsm_Coder (
-		struct gsm_state	* S,
-		word	* s,	/* [0..159] samples		IN	*/
-		word	* LARc,	/* [0..7] LAR coefficients	OUT	*/
-		word	* Nc,	/* [0..3] LTP lag		OUT 	*/
-		word	* bc,	/* [0..3] coded LTP gain	OUT 	*/
-		word	* Mc,	/* [0..3] RPE grid selection	OUT     */
-		word	* xmaxc,/* [0..3] Coded maximum amplitude OUT	*/
-		word	* xMc) ;/* [13*4] normalized RPE samples OUT	*/
-
-void Gsm_Long_Term_Predictor (		/* 4x for 160 samples */
-		struct gsm_state * S,
-		word	* d,	/* [0..39]   residual signal	IN	*/
-		word	* dp,	/* [-120..-1] d'		IN	*/
-		word	* e,	/* [0..40] 			OUT	*/
-		word	* dpp,	/* [0..40] 			OUT	*/
-		word	* Nc,	/* correlation lag		OUT	*/
-		word	* bc) ;	/* gain factor			OUT	*/
-
-void Gsm_LPC_Analysis (
-		struct gsm_state * S,
-		word * s,		/* 0..159 signals	IN/OUT	*/
-		word * LARc) ;   /* 0..7   LARc's	OUT	*/
-
-void Gsm_Preprocess (
-		struct gsm_state * S,
-		word * s, word * so) ;
-
-void Gsm_Encoding (
-		struct gsm_state * S,
-		word	* e,
-		word	* ep,
-		word	* xmaxc,
-		word	* Mc,
-		word	* xMc) ;
-
-void Gsm_Short_Term_Analysis_Filter (
-		struct gsm_state * S,
-		word	* LARc,	/* coded log area ratio [0..7]  IN	*/
-		word	* d) ;	/* st res. signal [0..159]	IN/OUT	*/
-
-void Gsm_Decoder (
-		struct gsm_state * S,
-		word	* LARcr,	/* [0..7]		IN	*/
-		word	* Ncr,		/* [0..3] 		IN 	*/
-		word	* bcr,		/* [0..3]		IN	*/
-		word	* Mcr,		/* [0..3] 		IN 	*/
-		word	* xmaxcr,	/* [0..3]		IN 	*/
-		word	* xMcr,		/* [0..13*4]		IN	*/
-		word	* s) ;		/* [0..159]		OUT 	*/
-
-void Gsm_Decoding (
-		struct gsm_state * S,
-		word 	xmaxcr,
-		word	Mcr,
-		word	* xMcr,  	/* [0..12]		IN	*/
-		word	* erp) ; 	/* [0..39]		OUT 	*/
-
-void Gsm_Long_Term_Synthesis_Filtering (
-		struct gsm_state* S,
-		word	Ncr,
-		word	bcr,
-		word	* erp,		/* [0..39]		  IN 	*/
-		word	* drp) ; 	/* [-120..-1] IN, [0..40] OUT 	*/
-
-void Gsm_RPE_Decoding (
-	/*-struct gsm_state *S,-*/
-		word xmaxcr,
-		word Mcr,
-		word * xMcr,  /* [0..12], 3 bits             IN      */
-		word * erp) ; /* [0..39]                     OUT     */
-
-void Gsm_RPE_Encoding (
-		/*-struct gsm_state * S,-*/
-		word    * e,            /* -5..-1][0..39][40..44     IN/OUT  */
-		word    * xmaxc,        /*                              OUT */
-		word    * Mc,           /*                              OUT */
-		word    * xMc) ;        /* [0..12]                      OUT */
-
-void Gsm_Short_Term_Synthesis_Filter (
-		struct gsm_state * S,
-		word	* LARcr, 	/* log area ratios [0..7]  IN	*/
-		word	* drp,		/* received d [0...39]	   IN	*/
-		word	* s) ;		/* signal   s [0..159]	  OUT	*/
-
-void Gsm_Update_of_reconstructed_short_time_residual_signal (
-		word	* dpp,		/* [0...39]	IN	*/
-		word	* ep,		/* [0...39]	IN	*/
-		word	* dp) ;		/* [-120...-1]  IN/OUT 	*/
-
-/*
- *  Tables from table.c
- */
-#ifndef	GSM_TABLE_C
-
-extern word gsm_A [8], gsm_B [8], gsm_MIC [8], gsm_MAC [8] ;
-extern word gsm_INVA [8] ;
-extern word gsm_DLB [4], gsm_QLB [4] ;
-extern word gsm_H [11] ;
-extern word gsm_NRFAC [8] ;
-extern word gsm_FAC [8] ;
-
-#endif	/* GSM_TABLE_C */
-
-/*
- *  Debugging
- */
-#ifdef NDEBUG
-
-#	define	gsm_debug_words(a, b, c, d)		/* nil */
-#	define	gsm_debug_longwords(a, b, c, d)		/* nil */
-#	define	gsm_debug_word(a, b)			/* nil */
-#	define	gsm_debug_longword(a, b)		/* nil */
-
-#else	/* !NDEBUG => DEBUG */
-
-	void  gsm_debug_words     (char * name, int, int, word *) ;
-	void  gsm_debug_longwords (char * name, int, int, longword *) ;
-	void  gsm_debug_longword  (char * name, longword) ;
-	void  gsm_debug_word      (char * name, word) ;
-
-#endif /* !NDEBUG */
-
-#endif	/* PRIVATE_H */
-
diff --git a/libs/libsndfile/src/GSM610/gsm_create.c b/libs/libsndfile/src/GSM610/gsm_create.c
deleted file mode 100644
index 2bb430776d..0000000000
--- a/libs/libsndfile/src/GSM610/gsm_create.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include	"config.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-
-
-
-#include "gsm.h"
-#include "gsm610_priv.h"
-
-gsm gsm_create (void)
-{
-	gsm  r;
-
-	r = malloc (sizeof(struct gsm_state));
-	if (!r) return r;
-	
-	memset((char *)r, 0, sizeof (struct gsm_state));
-	r->nrp = 40;
-
-	return r;
-}
-
-/* Added for libsndfile : May 6, 2002. Not sure if it works. */
-void gsm_init (gsm state)
-{
-	memset (state, 0, sizeof (struct gsm_state)) ;
-	state->nrp = 40 ;
-} 
-
diff --git a/libs/libsndfile/src/GSM610/gsm_decode.c b/libs/libsndfile/src/GSM610/gsm_decode.c
deleted file mode 100644
index b13308a807..0000000000
--- a/libs/libsndfile/src/GSM610/gsm_decode.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-
-#include "gsm.h"
-
-int gsm_decode (gsm s, gsm_byte * c, gsm_signal * target)
-{
-	word  	LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
-
-#ifdef WAV49
-	if (s->wav_fmt) {
-
-		uword sr = 0;
-
-		s->frame_index = !s->frame_index;
-		if (s->frame_index) {
-
-			sr = *c++;
-			LARc[0] = sr & 0x3f;  sr >>= 6;
-			sr |= (uword)*c++ << 2;
-			LARc[1] = sr & 0x3f;  sr >>= 6;
-			sr |= (uword)*c++ << 4;
-			LARc[2] = sr & 0x1f;  sr >>= 5;
-			LARc[3] = sr & 0x1f;  sr >>= 5;
-			sr |= (uword)*c++ << 2;
-			LARc[4] = sr & 0xf;  sr >>= 4;
-			LARc[5] = sr & 0xf;  sr >>= 4;
-			sr |= (uword)*c++ << 2;			/* 5 */
-			LARc[6] = sr & 0x7;  sr >>= 3;
-			LARc[7] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 4;
-			Nc[0] = sr & 0x7f;  sr >>= 7;
-			bc[0] = sr & 0x3;  sr >>= 2;
-			Mc[0] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 1;
-			xmaxc[0] = sr & 0x3f;  sr >>= 6;
-			xmc[0] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[1] = sr & 0x7;  sr >>= 3;
-			xmc[2] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[3] = sr & 0x7;  sr >>= 3;
-			xmc[4] = sr & 0x7;  sr >>= 3;
-			xmc[5] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;			/* 10 */
-			xmc[6] = sr & 0x7;  sr >>= 3;
-			xmc[7] = sr & 0x7;  sr >>= 3;
-			xmc[8] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[9] = sr & 0x7;  sr >>= 3;
-			xmc[10] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[11] = sr & 0x7;  sr >>= 3;
-			xmc[12] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 4;
-			Nc[1] = sr & 0x7f;  sr >>= 7;
-			bc[1] = sr & 0x3;  sr >>= 2;
-			Mc[1] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 1;
-			xmaxc[1] = sr & 0x3f;  sr >>= 6;
-			xmc[13] = sr & 0x7;  sr >>= 3;
-			sr = *c++;				/* 15 */
-			xmc[14] = sr & 0x7;  sr >>= 3;
-			xmc[15] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[16] = sr & 0x7;  sr >>= 3;
-			xmc[17] = sr & 0x7;  sr >>= 3;
-			xmc[18] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[19] = sr & 0x7;  sr >>= 3;
-			xmc[20] = sr & 0x7;  sr >>= 3;
-			xmc[21] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[22] = sr & 0x7;  sr >>= 3;
-			xmc[23] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[24] = sr & 0x7;  sr >>= 3;
-			xmc[25] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 4;			/* 20 */
-			Nc[2] = sr & 0x7f;  sr >>= 7;
-			bc[2] = sr & 0x3;  sr >>= 2;
-			Mc[2] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 1;
-			xmaxc[2] = sr & 0x3f;  sr >>= 6;
-			xmc[26] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[27] = sr & 0x7;  sr >>= 3;
-			xmc[28] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[29] = sr & 0x7;  sr >>= 3;
-			xmc[30] = sr & 0x7;  sr >>= 3;
-			xmc[31] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[32] = sr & 0x7;  sr >>= 3;
-			xmc[33] = sr & 0x7;  sr >>= 3;
-			xmc[34] = sr & 0x7;  sr >>= 3;
-			sr = *c++;				/* 25 */
-			xmc[35] = sr & 0x7;  sr >>= 3;
-			xmc[36] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[37] = sr & 0x7;  sr >>= 3;
-			xmc[38] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 4;
-			Nc[3] = sr & 0x7f;  sr >>= 7;
-			bc[3] = sr & 0x3;  sr >>= 2;
-			Mc[3] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 1;
-			xmaxc[3] = sr & 0x3f;  sr >>= 6;
-			xmc[39] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[40] = sr & 0x7;  sr >>= 3;
-			xmc[41] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;			/* 30 */
-			xmc[42] = sr & 0x7;  sr >>= 3;
-			xmc[43] = sr & 0x7;  sr >>= 3;
-			xmc[44] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[45] = sr & 0x7;  sr >>= 3;
-			xmc[46] = sr & 0x7;  sr >>= 3;
-			xmc[47] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[48] = sr & 0x7;  sr >>= 3;
-			xmc[49] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[50] = sr & 0x7;  sr >>= 3;
-			xmc[51] = sr & 0x7;  sr >>= 3;
-
-			s->frame_chain = sr & 0xf;
-		}
-		else {
-			sr = s->frame_chain;
-			sr |= (uword)*c++ << 4;			/* 1 */
-			LARc[0] = sr & 0x3f;  sr >>= 6;
-			LARc[1] = sr & 0x3f;  sr >>= 6;
-			sr = *c++;
-			LARc[2] = sr & 0x1f;  sr >>= 5;
-			sr |= (uword)*c++ << 3;
-			LARc[3] = sr & 0x1f;  sr >>= 5;
-			LARc[4] = sr & 0xf;  sr >>= 4;
-			sr |= (uword)*c++ << 2;
-			LARc[5] = sr & 0xf;  sr >>= 4;
-			LARc[6] = sr & 0x7;  sr >>= 3;
-			LARc[7] = sr & 0x7;  sr >>= 3;
-			sr = *c++;				/* 5 */
-			Nc[0] = sr & 0x7f;  sr >>= 7;
-			sr |= (uword)*c++ << 1;
-			bc[0] = sr & 0x3;  sr >>= 2;
-			Mc[0] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 5;
-			xmaxc[0] = sr & 0x3f;  sr >>= 6;
-			xmc[0] = sr & 0x7;  sr >>= 3;
-			xmc[1] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[2] = sr & 0x7;  sr >>= 3;
-			xmc[3] = sr & 0x7;  sr >>= 3;
-			xmc[4] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[5] = sr & 0x7;  sr >>= 3;
-			xmc[6] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;			/* 10 */
-			xmc[7] = sr & 0x7;  sr >>= 3;
-			xmc[8] = sr & 0x7;  sr >>= 3;
-			xmc[9] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[10] = sr & 0x7;  sr >>= 3;
-			xmc[11] = sr & 0x7;  sr >>= 3;
-			xmc[12] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			Nc[1] = sr & 0x7f;  sr >>= 7;
-			sr |= (uword)*c++ << 1;
-			bc[1] = sr & 0x3;  sr >>= 2;
-			Mc[1] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 5;
-			xmaxc[1] = sr & 0x3f;  sr >>= 6;
-			xmc[13] = sr & 0x7;  sr >>= 3;
-			xmc[14] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;			/* 15 */
-			xmc[15] = sr & 0x7;  sr >>= 3;
-			xmc[16] = sr & 0x7;  sr >>= 3;
-			xmc[17] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[18] = sr & 0x7;  sr >>= 3;
-			xmc[19] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[20] = sr & 0x7;  sr >>= 3;
-			xmc[21] = sr & 0x7;  sr >>= 3;
-			xmc[22] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[23] = sr & 0x7;  sr >>= 3;
-			xmc[24] = sr & 0x7;  sr >>= 3;
-			xmc[25] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			Nc[2] = sr & 0x7f;  sr >>= 7;
-			sr |= (uword)*c++ << 1;			/* 20 */
-			bc[2] = sr & 0x3;  sr >>= 2;
-			Mc[2] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 5;
-			xmaxc[2] = sr & 0x3f;  sr >>= 6;
-			xmc[26] = sr & 0x7;  sr >>= 3;
-			xmc[27] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;	
-			xmc[28] = sr & 0x7;  sr >>= 3;
-			xmc[29] = sr & 0x7;  sr >>= 3;
-			xmc[30] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			xmc[31] = sr & 0x7;  sr >>= 3;
-			xmc[32] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[33] = sr & 0x7;  sr >>= 3;
-			xmc[34] = sr & 0x7;  sr >>= 3;
-			xmc[35] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;			/* 25 */
-			xmc[36] = sr & 0x7;  sr >>= 3;
-			xmc[37] = sr & 0x7;  sr >>= 3;
-			xmc[38] = sr & 0x7;  sr >>= 3;
-			sr = *c++;
-			Nc[3] = sr & 0x7f;  sr >>= 7;
-			sr |= (uword)*c++ << 1;		
-			bc[3] = sr & 0x3;  sr >>= 2;
-			Mc[3] = sr & 0x3;  sr >>= 2;
-			sr |= (uword)*c++ << 5;
-			xmaxc[3] = sr & 0x3f;  sr >>= 6;
-			xmc[39] = sr & 0x7;  sr >>= 3;
-			xmc[40] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[41] = sr & 0x7;  sr >>= 3;
-			xmc[42] = sr & 0x7;  sr >>= 3;
-			xmc[43] = sr & 0x7;  sr >>= 3;
-			sr = *c++;				/* 30 */
-			xmc[44] = sr & 0x7;  sr >>= 3;
-			xmc[45] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 2;
-			xmc[46] = sr & 0x7;  sr >>= 3;
-			xmc[47] = sr & 0x7;  sr >>= 3;
-			xmc[48] = sr & 0x7;  sr >>= 3;
-			sr |= (uword)*c++ << 1;
-			xmc[49] = sr & 0x7;  sr >>= 3;
-			xmc[50] = sr & 0x7;  sr >>= 3;
-			xmc[51] = sr & 0x7;  sr >>= 3;
-		}
-	}
-	else
-#endif
-	{
-		/* GSM_MAGIC  = (*c >> 4) & 0xF; */
-
-		if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
-
-		LARc[0]  = (*c++ & 0xF) << 2;		/* 1 */
-		LARc[0] |= (*c >> 6) & 0x3;
-		LARc[1]  = *c++ & 0x3F;
-		LARc[2]  = (*c >> 3) & 0x1F;
-		LARc[3]  = (*c++ & 0x7) << 2;
-		LARc[3] |= (*c >> 6) & 0x3;
-		LARc[4]  = (*c >> 2) & 0xF;
-		LARc[5]  = (*c++ & 0x3) << 2;
-		LARc[5] |= (*c >> 6) & 0x3;
-		LARc[6]  = (*c >> 3) & 0x7;
-		LARc[7]  = *c++ & 0x7;
-		Nc[0]  = (*c >> 1) & 0x7F;
-		bc[0]  = (*c++ & 0x1) << 1;
-		bc[0] |= (*c >> 7) & 0x1;
-		Mc[0]  = (*c >> 5) & 0x3;
-		xmaxc[0]  = (*c++ & 0x1F) << 1;
-		xmaxc[0] |= (*c >> 7) & 0x1;
-		xmc[0]  = (*c >> 4) & 0x7;
-		xmc[1]  = (*c >> 1) & 0x7;
-		xmc[2]  = (*c++ & 0x1) << 2;
-		xmc[2] |= (*c >> 6) & 0x3;
-		xmc[3]  = (*c >> 3) & 0x7;
-		xmc[4]  = *c++ & 0x7;
-		xmc[5]  = (*c >> 5) & 0x7;
-		xmc[6]  = (*c >> 2) & 0x7;
-		xmc[7]  = (*c++ & 0x3) << 1;		/* 10 */
-		xmc[7] |= (*c >> 7) & 0x1;
-		xmc[8]  = (*c >> 4) & 0x7;
-		xmc[9]  = (*c >> 1) & 0x7;
-		xmc[10]  = (*c++ & 0x1) << 2;
-		xmc[10] |= (*c >> 6) & 0x3;
-		xmc[11]  = (*c >> 3) & 0x7;
-		xmc[12]  = *c++ & 0x7;
-		Nc[1]  = (*c >> 1) & 0x7F;
-		bc[1]  = (*c++ & 0x1) << 1;
-		bc[1] |= (*c >> 7) & 0x1;
-		Mc[1]  = (*c >> 5) & 0x3;
-		xmaxc[1]  = (*c++ & 0x1F) << 1;
-		xmaxc[1] |= (*c >> 7) & 0x1;
-		xmc[13]  = (*c >> 4) & 0x7;
-		xmc[14]  = (*c >> 1) & 0x7;
-		xmc[15]  = (*c++ & 0x1) << 2;
-		xmc[15] |= (*c >> 6) & 0x3;
-		xmc[16]  = (*c >> 3) & 0x7;
-		xmc[17]  = *c++ & 0x7;
-		xmc[18]  = (*c >> 5) & 0x7;
-		xmc[19]  = (*c >> 2) & 0x7;
-		xmc[20]  = (*c++ & 0x3) << 1;
-		xmc[20] |= (*c >> 7) & 0x1;
-		xmc[21]  = (*c >> 4) & 0x7;
-		xmc[22]  = (*c >> 1) & 0x7;
-		xmc[23]  = (*c++ & 0x1) << 2;
-		xmc[23] |= (*c >> 6) & 0x3;
-		xmc[24]  = (*c >> 3) & 0x7;
-		xmc[25]  = *c++ & 0x7;
-		Nc[2]  = (*c >> 1) & 0x7F;
-		bc[2]  = (*c++ & 0x1) << 1;		/* 20 */
-		bc[2] |= (*c >> 7) & 0x1;
-		Mc[2]  = (*c >> 5) & 0x3;
-		xmaxc[2]  = (*c++ & 0x1F) << 1;
-		xmaxc[2] |= (*c >> 7) & 0x1;
-		xmc[26]  = (*c >> 4) & 0x7;
-		xmc[27]  = (*c >> 1) & 0x7;
-		xmc[28]  = (*c++ & 0x1) << 2;
-		xmc[28] |= (*c >> 6) & 0x3;
-		xmc[29]  = (*c >> 3) & 0x7;
-		xmc[30]  = *c++ & 0x7;
-		xmc[31]  = (*c >> 5) & 0x7;
-		xmc[32]  = (*c >> 2) & 0x7;
-		xmc[33]  = (*c++ & 0x3) << 1;
-		xmc[33] |= (*c >> 7) & 0x1;
-		xmc[34]  = (*c >> 4) & 0x7;
-		xmc[35]  = (*c >> 1) & 0x7;
-		xmc[36]  = (*c++ & 0x1) << 2;
-		xmc[36] |= (*c >> 6) & 0x3;
-		xmc[37]  = (*c >> 3) & 0x7;
-		xmc[38]  = *c++ & 0x7;
-		Nc[3]  = (*c >> 1) & 0x7F;
-		bc[3]  = (*c++ & 0x1) << 1;
-		bc[3] |= (*c >> 7) & 0x1;
-		Mc[3]  = (*c >> 5) & 0x3;
-		xmaxc[3]  = (*c++ & 0x1F) << 1;
-		xmaxc[3] |= (*c >> 7) & 0x1;
-		xmc[39]  = (*c >> 4) & 0x7;
-		xmc[40]  = (*c >> 1) & 0x7;
-		xmc[41]  = (*c++ & 0x1) << 2;
-		xmc[41] |= (*c >> 6) & 0x3;
-		xmc[42]  = (*c >> 3) & 0x7;
-		xmc[43]  = *c++ & 0x7;			/* 30  */
-		xmc[44]  = (*c >> 5) & 0x7;
-		xmc[45]  = (*c >> 2) & 0x7;
-		xmc[46]  = (*c++ & 0x3) << 1;
-		xmc[46] |= (*c >> 7) & 0x1;
-		xmc[47]  = (*c >> 4) & 0x7;
-		xmc[48]  = (*c >> 1) & 0x7;
-		xmc[49]  = (*c++ & 0x1) << 2;
-		xmc[49] |= (*c >> 6) & 0x3;
-		xmc[50]  = (*c >> 3) & 0x7;
-		xmc[51]  = *c & 0x7;			/* 33 */
-	}
-
-	Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
-
-	return 0;
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_destroy.c b/libs/libsndfile/src/GSM610/gsm_destroy.c
deleted file mode 100644
index 9b417116d8..0000000000
--- a/libs/libsndfile/src/GSM610/gsm_destroy.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm.h"
-#include "config.h"
-
-#ifdef	HAS_STDLIB_H
-#	include	<stdlib.h>
-#else
-#	ifdef	HAS_MALLOC_H
-#		include 	<malloc.h>
-#	else
-		extern void free();
-#	endif
-#endif
-
-void gsm_destroy (gsm S)
-{
-	if (S) free((char *)S);
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_encode.c b/libs/libsndfile/src/GSM610/gsm_encode.c
deleted file mode 100644
index 5c9e1ab33e..0000000000
--- a/libs/libsndfile/src/GSM610/gsm_encode.c
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-#include "gsm.h"
-
-void gsm_encode (gsm s, gsm_signal * source, gsm_byte * c)
-{
-	word	 	LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
-
-	Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
-
-
-	/*	variable	size
-
-		GSM_MAGIC	4
-
-		LARc[0]		6
-		LARc[1]		6
-		LARc[2]		5
-		LARc[3]		5
-		LARc[4]		4
-		LARc[5]		4
-		LARc[6]		3
-		LARc[7]		3
-
-		Nc[0]		7
-		bc[0]		2
-		Mc[0]		2
-		xmaxc[0]	6
-		xmc[0]		3
-		xmc[1]		3
-		xmc[2]		3
-		xmc[3]		3
-		xmc[4]		3
-		xmc[5]		3
-		xmc[6]		3
-		xmc[7]		3
-		xmc[8]		3
-		xmc[9]		3
-		xmc[10]		3
-		xmc[11]		3
-		xmc[12]		3
-
-		Nc[1]		7
-		bc[1]		2
-		Mc[1]		2
-		xmaxc[1]	6
-		xmc[13]		3
-		xmc[14]		3
-		xmc[15]		3
-		xmc[16]		3
-		xmc[17]		3
-		xmc[18]		3
-		xmc[19]		3
-		xmc[20]		3
-		xmc[21]		3
-		xmc[22]		3
-		xmc[23]		3
-		xmc[24]		3
-		xmc[25]		3
-
-		Nc[2]		7
-		bc[2]		2
-		Mc[2]		2
-		xmaxc[2]	6
-		xmc[26]		3
-		xmc[27]		3
-		xmc[28]		3
-		xmc[29]		3
-		xmc[30]		3
-		xmc[31]		3
-		xmc[32]		3
-		xmc[33]		3
-		xmc[34]		3
-		xmc[35]		3
-		xmc[36]		3
-		xmc[37]		3
-		xmc[38]		3
-
-		Nc[3]		7
-		bc[3]		2
-		Mc[3]		2
-		xmaxc[3]	6
-		xmc[39]		3
-		xmc[40]		3
-		xmc[41]		3
-		xmc[42]		3
-		xmc[43]		3
-		xmc[44]		3
-		xmc[45]		3
-		xmc[46]		3
-		xmc[47]		3
-		xmc[48]		3
-		xmc[49]		3
-		xmc[50]		3
-		xmc[51]		3
-	*/
-
-#ifdef WAV49
-
-	if (s->wav_fmt) {
-		s->frame_index = !s->frame_index;
-		if (s->frame_index) {
-
-			uword sr;
-
-			sr = 0;
-			sr = sr >> 6 | LARc[0] << 10;
-			sr = sr >> 6 | LARc[1] << 10;
-			*c++ = sr >> 4;
-			sr = sr >> 5 | LARc[2] << 11;
-			*c++ = sr >> 7;
-			sr = sr >> 5 | LARc[3] << 11;
-			sr = sr >> 4 | LARc[4] << 12;
-			*c++ = sr >> 6;
-			sr = sr >> 4 | LARc[5] << 12;
-			sr = sr >> 3 | LARc[6] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | LARc[7] << 13;
-			sr = sr >> 7 | Nc[0] << 9;
-			*c++ = sr >> 5;
-			sr = sr >> 2 | bc[0] << 14;
-			sr = sr >> 2 | Mc[0] << 14;
-			sr = sr >> 6 | xmaxc[0] << 10;
-			*c++ = sr >> 3;
-			sr = sr >> 3 | xmc[0] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[1] << 13;
-			sr = sr >> 3 | xmc[2] << 13;
-			sr = sr >> 3 | xmc[3] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[4] << 13;
-			sr = sr >> 3 | xmc[5] << 13;
-			sr = sr >> 3 | xmc[6] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[7] << 13;
-			sr = sr >> 3 | xmc[8] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[9] << 13;
-			sr = sr >> 3 | xmc[10] << 13;
-			sr = sr >> 3 | xmc[11] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[12] << 13;
-			sr = sr >> 7 | Nc[1] << 9;
-			*c++ = sr >> 5;
-			sr = sr >> 2 | bc[1] << 14;
-			sr = sr >> 2 | Mc[1] << 14;
-			sr = sr >> 6 | xmaxc[1] << 10;
-			*c++ = sr >> 3;
-			sr = sr >> 3 | xmc[13] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[14] << 13;
-			sr = sr >> 3 | xmc[15] << 13;
-			sr = sr >> 3 | xmc[16] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[17] << 13;
-			sr = sr >> 3 | xmc[18] << 13;
-			sr = sr >> 3 | xmc[19] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[20] << 13;
-			sr = sr >> 3 | xmc[21] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[22] << 13;
-			sr = sr >> 3 | xmc[23] << 13;
-			sr = sr >> 3 | xmc[24] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[25] << 13;
-			sr = sr >> 7 | Nc[2] << 9;
-			*c++ = sr >> 5;
-			sr = sr >> 2 | bc[2] << 14;
-			sr = sr >> 2 | Mc[2] << 14;
-			sr = sr >> 6 | xmaxc[2] << 10;
-			*c++ = sr >> 3;
-			sr = sr >> 3 | xmc[26] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[27] << 13;
-			sr = sr >> 3 | xmc[28] << 13;
-			sr = sr >> 3 | xmc[29] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[30] << 13;
-			sr = sr >> 3 | xmc[31] << 13;
-			sr = sr >> 3 | xmc[32] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[33] << 13;
-			sr = sr >> 3 | xmc[34] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[35] << 13;
-			sr = sr >> 3 | xmc[36] << 13;
-			sr = sr >> 3 | xmc[37] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[38] << 13;
-			sr = sr >> 7 | Nc[3] << 9;
-			*c++ = sr >> 5;
-			sr = sr >> 2 | bc[3] << 14;
-			sr = sr >> 2 | Mc[3] << 14;
-			sr = sr >> 6 | xmaxc[3] << 10;
-			*c++ = sr >> 3;
-			sr = sr >> 3 | xmc[39] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[40] << 13;
-			sr = sr >> 3 | xmc[41] << 13;
-			sr = sr >> 3 | xmc[42] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[43] << 13;
-			sr = sr >> 3 | xmc[44] << 13;
-			sr = sr >> 3 | xmc[45] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[46] << 13;
-			sr = sr >> 3 | xmc[47] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[48] << 13;
-			sr = sr >> 3 | xmc[49] << 13;
-			sr = sr >> 3 | xmc[50] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[51] << 13;
-			sr = sr >> 4;
-			*c = sr >> 8;
-			s->frame_chain = *c;
-		}
-		else {
-			uword sr;
-
-			sr = 0;
-			sr = sr >> 4 | s->frame_chain << 12;
-			sr = sr >> 6 | LARc[0] << 10;
-			*c++ = sr >> 6;
-			sr = sr >> 6 | LARc[1] << 10;
-			*c++ = sr >> 8;
-			sr = sr >> 5 | LARc[2] << 11;
-			sr = sr >> 5 | LARc[3] << 11;
-			*c++ = sr >> 6;
-			sr = sr >> 4 | LARc[4] << 12;
-			sr = sr >> 4 | LARc[5] << 12;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | LARc[6] << 13;
-			sr = sr >> 3 | LARc[7] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 7 | Nc[0] << 9;
-			sr = sr >> 2 | bc[0] << 14;
-			*c++ = sr >> 7;
-			sr = sr >> 2 | Mc[0] << 14;
-			sr = sr >> 6 | xmaxc[0] << 10;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[0] << 13;
-			sr = sr >> 3 | xmc[1] << 13;
-			sr = sr >> 3 | xmc[2] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[3] << 13;
-			sr = sr >> 3 | xmc[4] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[5] << 13;
-			sr = sr >> 3 | xmc[6] << 13;
-			sr = sr >> 3 | xmc[7] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[8] << 13;
-			sr = sr >> 3 | xmc[9] << 13;
-			sr = sr >> 3 | xmc[10] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[11] << 13;
-			sr = sr >> 3 | xmc[12] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 7 | Nc[1] << 9;
-			sr = sr >> 2 | bc[1] << 14;
-			*c++ = sr >> 7;
-			sr = sr >> 2 | Mc[1] << 14;
-			sr = sr >> 6 | xmaxc[1] << 10;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[13] << 13;
-			sr = sr >> 3 | xmc[14] << 13;
-			sr = sr >> 3 | xmc[15] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[16] << 13;
-			sr = sr >> 3 | xmc[17] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[18] << 13;
-			sr = sr >> 3 | xmc[19] << 13;
-			sr = sr >> 3 | xmc[20] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[21] << 13;
-			sr = sr >> 3 | xmc[22] << 13;
-			sr = sr >> 3 | xmc[23] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[24] << 13;
-			sr = sr >> 3 | xmc[25] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 7 | Nc[2] << 9;
-			sr = sr >> 2 | bc[2] << 14;
-			*c++ = sr >> 7;
-			sr = sr >> 2 | Mc[2] << 14;
-			sr = sr >> 6 | xmaxc[2] << 10;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[26] << 13;
-			sr = sr >> 3 | xmc[27] << 13;
-			sr = sr >> 3 | xmc[28] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[29] << 13;
-			sr = sr >> 3 | xmc[30] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[31] << 13;
-			sr = sr >> 3 | xmc[32] << 13;
-			sr = sr >> 3 | xmc[33] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[34] << 13;
-			sr = sr >> 3 | xmc[35] << 13;
-			sr = sr >> 3 | xmc[36] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[37] << 13;
-			sr = sr >> 3 | xmc[38] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 7 | Nc[3] << 9;
-			sr = sr >> 2 | bc[3] << 14;
-			*c++ = sr >> 7;
-			sr = sr >> 2 | Mc[3] << 14;
-			sr = sr >> 6 | xmaxc[3] << 10;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[39] << 13;
-			sr = sr >> 3 | xmc[40] << 13;
-			sr = sr >> 3 | xmc[41] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[42] << 13;
-			sr = sr >> 3 | xmc[43] << 13;
-			*c++ = sr >> 8;
-			sr = sr >> 3 | xmc[44] << 13;
-			sr = sr >> 3 | xmc[45] << 13;
-			sr = sr >> 3 | xmc[46] << 13;
-			*c++ = sr >> 7;
-			sr = sr >> 3 | xmc[47] << 13;
-			sr = sr >> 3 | xmc[48] << 13;
-			sr = sr >> 3 | xmc[49] << 13;
-			*c++ = sr >> 6;
-			sr = sr >> 3 | xmc[50] << 13;
-			sr = sr >> 3 | xmc[51] << 13;
-			*c++ = sr >> 8;
-		}
-	}
-
-	else
-
-#endif	/* WAV49 */
-	{
-
-		*c++ =   ((GSM_MAGIC & 0xF) << 4)		/* 1 */
-		       | ((LARc[0] >> 2) & 0xF);
-		*c++ =   ((LARc[0] & 0x3) << 6)
-		       | (LARc[1] & 0x3F);
-		*c++ =   ((LARc[2] & 0x1F) << 3)
-		       | ((LARc[3] >> 2) & 0x7);
-		*c++ =   ((LARc[3] & 0x3) << 6)
-		       | ((LARc[4] & 0xF) << 2)
-		       | ((LARc[5] >> 2) & 0x3);
-		*c++ =   ((LARc[5] & 0x3) << 6)
-		       | ((LARc[6] & 0x7) << 3)
-		       | (LARc[7] & 0x7);
-		*c++ =   ((Nc[0] & 0x7F) << 1)
-		       | ((bc[0] >> 1) & 0x1);
-		*c++ =   ((bc[0] & 0x1) << 7)
-		       | ((Mc[0] & 0x3) << 5)
-		       | ((xmaxc[0] >> 1) & 0x1F);
-		*c++ =   ((xmaxc[0] & 0x1) << 7)
-		       | ((xmc[0] & 0x7) << 4)
-		       | ((xmc[1] & 0x7) << 1)
-		       | ((xmc[2] >> 2) & 0x1);
-		*c++ =   ((xmc[2] & 0x3) << 6)
-		       | ((xmc[3] & 0x7) << 3)
-		       | (xmc[4] & 0x7);
-		*c++ =   ((xmc[5] & 0x7) << 5)			/* 10 */
-		       | ((xmc[6] & 0x7) << 2)
-		       | ((xmc[7] >> 1) & 0x3);
-		*c++ =   ((xmc[7] & 0x1) << 7)
-		       | ((xmc[8] & 0x7) << 4)
-		       | ((xmc[9] & 0x7) << 1)
-		       | ((xmc[10] >> 2) & 0x1);
-		*c++ =   ((xmc[10] & 0x3) << 6)
-		       | ((xmc[11] & 0x7) << 3)
-		       | (xmc[12] & 0x7);
-		*c++ =   ((Nc[1] & 0x7F) << 1)
-		       | ((bc[1] >> 1) & 0x1);
-		*c++ =   ((bc[1] & 0x1) << 7)
-		       | ((Mc[1] & 0x3) << 5)
-		       | ((xmaxc[1] >> 1) & 0x1F);
-		*c++ =   ((xmaxc[1] & 0x1) << 7)
-		       | ((xmc[13] & 0x7) << 4)
-		       | ((xmc[14] & 0x7) << 1)
-		       | ((xmc[15] >> 2) & 0x1);
-		*c++ =   ((xmc[15] & 0x3) << 6)
-		       | ((xmc[16] & 0x7) << 3)
-		       | (xmc[17] & 0x7);
-		*c++ =   ((xmc[18] & 0x7) << 5)
-		       | ((xmc[19] & 0x7) << 2)
-		       | ((xmc[20] >> 1) & 0x3);
-		*c++ =   ((xmc[20] & 0x1) << 7)
-		       | ((xmc[21] & 0x7) << 4)
-		       | ((xmc[22] & 0x7) << 1)
-		       | ((xmc[23] >> 2) & 0x1);
-		*c++ =   ((xmc[23] & 0x3) << 6)
-		       | ((xmc[24] & 0x7) << 3)
-		       | (xmc[25] & 0x7);
-		*c++ =   ((Nc[2] & 0x7F) << 1)			/* 20 */
-		       | ((bc[2] >> 1) & 0x1);
-		*c++ =   ((bc[2] & 0x1) << 7)
-		       | ((Mc[2] & 0x3) << 5)
-		       | ((xmaxc[2] >> 1) & 0x1F);
-		*c++ =   ((xmaxc[2] & 0x1) << 7)
-		       | ((xmc[26] & 0x7) << 4)
-		       | ((xmc[27] & 0x7) << 1)
-		       | ((xmc[28] >> 2) & 0x1);
-		*c++ =   ((xmc[28] & 0x3) << 6)
-		       | ((xmc[29] & 0x7) << 3)
-		       | (xmc[30] & 0x7);
-		*c++ =   ((xmc[31] & 0x7) << 5)
-		       | ((xmc[32] & 0x7) << 2)
-		       | ((xmc[33] >> 1) & 0x3);
-		*c++ =   ((xmc[33] & 0x1) << 7)
-		       | ((xmc[34] & 0x7) << 4)
-		       | ((xmc[35] & 0x7) << 1)
-		       | ((xmc[36] >> 2) & 0x1);
-		*c++ =   ((xmc[36] & 0x3) << 6)
-		       | ((xmc[37] & 0x7) << 3)
-		       | (xmc[38] & 0x7);
-		*c++ =   ((Nc[3] & 0x7F) << 1)
-		       | ((bc[3] >> 1) & 0x1);
-		*c++ =   ((bc[3] & 0x1) << 7)
-		       | ((Mc[3] & 0x3) << 5)
-		       | ((xmaxc[3] >> 1) & 0x1F);
-		*c++ =   ((xmaxc[3] & 0x1) << 7)
-		       | ((xmc[39] & 0x7) << 4)
-		       | ((xmc[40] & 0x7) << 1)
-		       | ((xmc[41] >> 2) & 0x1);
-		*c++ =   ((xmc[41] & 0x3) << 6)			/* 30 */
-		       | ((xmc[42] & 0x7) << 3)
-		       | (xmc[43] & 0x7);
-		*c++ =   ((xmc[44] & 0x7) << 5)
-		       | ((xmc[45] & 0x7) << 2)
-		       | ((xmc[46] >> 1) & 0x3);
-		*c++ =   ((xmc[46] & 0x1) << 7)
-		       | ((xmc[47] & 0x7) << 4)
-		       | ((xmc[48] & 0x7) << 1)
-		       | ((xmc[49] >> 2) & 0x1);
-		*c++ =   ((xmc[49] & 0x3) << 6)
-		       | ((xmc[50] & 0x7) << 3)
-		       | (xmc[51] & 0x7);
-
-	}
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_option.c b/libs/libsndfile/src/GSM610/gsm_option.c
deleted file mode 100644
index 0139c353f7..0000000000
--- a/libs/libsndfile/src/GSM610/gsm_option.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-
-#include "gsm.h"
-
-int gsm_option (gsm r, int opt, int * val)
-{
-	int 	result = -1;
-
-	switch (opt) {
-	case GSM_OPT_LTP_CUT:
-#ifdef 	LTP_CUT
-		result = r->ltp_cut;
-		if (val) r->ltp_cut = *val;
-#endif
-		break;
-
-	case GSM_OPT_VERBOSE:
-#ifndef	NDEBUG
-		result = r->verbose;
-		if (val) r->verbose = *val;
-#endif
-		break;
-
-	case GSM_OPT_FAST:
-
-#if	defined(FAST) && defined(USE_FLOAT_MUL)
-		result = r->fast;
-		if (val) r->fast = !!*val;
-#endif
-		break;
-
-	case GSM_OPT_FRAME_CHAIN:
-
-#ifdef WAV49
-		result = r->frame_chain;
-		if (val) r->frame_chain = *val;
-#endif
-		break;
-
-	case GSM_OPT_FRAME_INDEX:
-
-#ifdef WAV49
-		result = r->frame_index;
-		if (val) r->frame_index = *val;
-#endif
-		break;
-
-	case GSM_OPT_WAV49:
-
-#ifdef WAV49 
-		result = r->wav_fmt;
-		if (val) r->wav_fmt = !!*val;
-#endif
-		break;
-
-	default:
-		break;
-	}
-	return result;
-}
diff --git a/libs/libsndfile/src/GSM610/long_term.c b/libs/libsndfile/src/GSM610/long_term.c
deleted file mode 100644
index 0d2cd0ff47..0000000000
--- a/libs/libsndfile/src/GSM610/long_term.c
+++ /dev/null
@@ -1,959 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
- */
-
-
-/*
- * This module computes the LTP gain (bc) and the LTP lag (Nc)
- * for the long term analysis filter.   This is done by calculating a
- * maximum of the cross-correlation function between the current
- * sub-segment short term residual signal d[0..39] (output of
- * the short term analysis filter; for simplification the index
- * of this array begins at 0 and ends at 39 for each sub-segment of the
- * RPE-LTP analysis) and the previous reconstructed short term
- * residual signal dp[ -120 .. -1 ].  A dynamic scaling must be
- * performed to avoid overflow.
- */
-
- /* The next procedure exists in six versions.  First two integer
-  * version (if USE_FLOAT_MUL is not defined); then four floating
-  * point versions, twice with proper scaling (USE_FLOAT_MUL defined),
-  * once without (USE_FLOAT_MUL and FAST defined, and fast run-time
-  * option used).  Every pair has first a Cut version (see the -C
-  * option to toast or the LTP_CUT option to gsm_option()), then the
-  * uncut one.  (For a detailed explanation of why this is altogether
-  * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered
-  * Harmful''.)
-  */
-
-#ifndef  USE_FLOAT_MUL
-
-#ifdef	LTP_CUT
-
-static void Cut_Calculation_of_the_LTP_parameters (
-
-	struct gsm_state * st,
-
-	register word	* d,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	word		Nc, bc;
-	word		wt[40];
-
-	longword	L_result;
-	longword	L_max, L_power;
-	word		R, S, dmax, scal, best_k;
-	word		ltp_cut;
-
-	register word	temp, wt_k;
-
-	/*  Search of the optimum scaling of d[0..39].
-	 */
-	dmax = 0;
-	for (k = 0; k <= 39; k++) {
-		temp = d[k];
-		temp = GSM_ABS( temp );
-		if (temp > dmax) {
-			dmax = temp;
-			best_k = k;
-		}
-	}
-	temp = 0;
-	if (dmax == 0) scal = 0;
-	else {
-		assert(dmax > 0);
-		temp = gsm_norm( (longword)dmax << 16 );
-	}
-	if (temp > 6) scal = 0;
-	else scal = 6 - temp;
-	assert(scal >= 0);
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-	wt_k  = SASR_W(d[best_k], scal);
-
-	for (lambda = 40; lambda <= 120; lambda++) {
-		L_result = (longword)wt_k * dp[best_k - lambda];
-		if (L_result > L_max) {
-			Nc    = lambda;
-			L_max = L_result;
-		}
-	}
-	*Nc_out = Nc;
-	L_max <<= 1;
-
-	/*  Rescaling of L_max
-	 */
-	assert(scal <= 100 && scal >= -100);
-	L_max = L_max >> (6 - scal);	/* sub(6, scal) */
-
-	assert( Nc <= 120 && Nc >= 40);
-
-	/*   Compute the power of the reconstructed short term residual
-	 *   signal dp[..]
-	 */
-	L_power = 0;
-	for (k = 0; k <= 39; k++) {
-
-		register longword L_temp;
-
-		L_temp   = SASR_W( dp[k - Nc], 3 );
-		L_power += L_temp * L_temp;
-	}
-	L_power <<= 1;	/* from L_MULT */
-
-	/*  Normalization of L_max and L_power
-	 */
-
-	if (L_max <= 0)  {
-		*bc_out = 0;
-		return;
-	}
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	temp = gsm_norm( L_power );
-
-	R = SASR( L_max   << temp, 16 );
-	S = SASR( L_power << temp, 16 );
-
-	/*  Coding of the LTP gain
-	 */
-
-	/*  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-	*bc_out = bc;
-}
-
-#endif 	/* LTP_CUT */
-
-static void Calculation_of_the_LTP_parameters (
-	register word	* d,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	word		Nc, bc;
-	word		wt[40];
-
-	longword	L_max, L_power;
-	word		R, S, dmax, scal;
-	register word	temp;
-
-	/*  Search of the optimum scaling of d[0..39].
-	 */
-	dmax = 0;
-
-	for (k = 0; k <= 39; k++) {
-		temp = d[k];
-		temp = GSM_ABS( temp );
-		if (temp > dmax) dmax = temp;
-	}
-
-	temp = 0;
-	if (dmax == 0) scal = 0;
-	else {
-		assert(dmax > 0);
-		temp = gsm_norm( (longword)dmax << 16 );
-	}
-
-	if (temp > 6) scal = 0;
-	else scal = 6 - temp;
-
-	assert(scal >= 0);
-
-	/*  Initialization of a working array wt
-	 */
-
-	for (k = 0; k <= 39; k++) wt[k] = SASR_W( d[k], scal );
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-
-	for (lambda = 40; lambda <= 120; lambda++) {
-
-# undef STEP
-#		define STEP(k) 	(longword)wt[k] * dp[k - lambda]
-
-		register longword L_result;
-
-		L_result  = STEP(0)  ; L_result += STEP(1) ;
-		L_result += STEP(2)  ; L_result += STEP(3) ;
-		L_result += STEP(4)  ; L_result += STEP(5)  ;
-		L_result += STEP(6)  ; L_result += STEP(7)  ;
-		L_result += STEP(8)  ; L_result += STEP(9)  ;
-		L_result += STEP(10) ; L_result += STEP(11) ;
-		L_result += STEP(12) ; L_result += STEP(13) ;
-		L_result += STEP(14) ; L_result += STEP(15) ;
-		L_result += STEP(16) ; L_result += STEP(17) ;
-		L_result += STEP(18) ; L_result += STEP(19) ;
-		L_result += STEP(20) ; L_result += STEP(21) ;
-		L_result += STEP(22) ; L_result += STEP(23) ;
-		L_result += STEP(24) ; L_result += STEP(25) ;
-		L_result += STEP(26) ; L_result += STEP(27) ;
-		L_result += STEP(28) ; L_result += STEP(29) ;
-		L_result += STEP(30) ; L_result += STEP(31) ;
-		L_result += STEP(32) ; L_result += STEP(33) ;
-		L_result += STEP(34) ; L_result += STEP(35) ;
-		L_result += STEP(36) ; L_result += STEP(37) ;
-		L_result += STEP(38) ; L_result += STEP(39) ;
-
-		if (L_result > L_max) {
-
-			Nc    = lambda;
-			L_max = L_result;
-		}
-	}
-
-	*Nc_out = Nc;
-
-	L_max <<= 1;
-
-	/*  Rescaling of L_max
-	 */
-	assert(scal <= 100 && scal >=  -100);
-	L_max = L_max >> (6 - scal);	/* sub(6, scal) */
-
-	assert( Nc <= 120 && Nc >= 40);
-
-	/*   Compute the power of the reconstructed short term residual
-	 *   signal dp[..]
-	 */
-	L_power = 0;
-	for (k = 0; k <= 39; k++) {
-
-		register longword L_temp;
-
-		L_temp   = SASR_W( dp[k - Nc], 3 );
-		L_power += L_temp * L_temp;
-	}
-	L_power <<= 1;	/* from L_MULT */
-
-	/*  Normalization of L_max and L_power
-	 */
-
-	if (L_max <= 0)  {
-		*bc_out = 0;
-		return;
-	}
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	temp = gsm_norm( L_power );
-
-	R = SASR_L( L_max   << temp, 16 );
-	S = SASR_L( L_power << temp, 16 );
-
-	/*  Coding of the LTP gain
-	 */
-
-	/*  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-	*bc_out = bc;
-}
-
-#else	/* USE_FLOAT_MUL */
-
-#ifdef	LTP_CUT
-
-static void Cut_Calculation_of_the_LTP_parameters (
-	struct gsm_state * st,		/*              IN 	*/
-	register word	* d,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	word		Nc, bc;
-	word		ltp_cut;
-
-	float		wt_float[40];
-	float		dp_float_base[120], * dp_float = dp_float_base + 120;
-
-	longword	L_max, L_power;
-	word		R, S, dmax, scal;
-	register word	temp;
-
-	/*  Search of the optimum scaling of d[0..39].
-	 */
-	dmax = 0;
-
-	for (k = 0; k <= 39; k++) {
-		temp = d[k];
-		temp = GSM_ABS( temp );
-		if (temp > dmax) dmax = temp;
-	}
-
-	temp = 0;
-	if (dmax == 0) scal = 0;
-	else {
-		assert(dmax > 0);
-		temp = gsm_norm( (longword)dmax << 16 );
-	}
-
-	if (temp > 6) scal = 0;
-	else scal = 6 - temp;
-
-	assert(scal >= 0);
-	ltp_cut = (longword)SASR_W(dmax, scal) * st->ltp_cut / 100; 
-
-
-	/*  Initialization of a working array wt
-	 */
-
-	for (k = 0; k < 40; k++) {
-		register word w = SASR_W( d[k], scal );
-		if (w < 0 ? w > -ltp_cut : w < ltp_cut) {
-			wt_float[k] = 0.0;
-		}
-		else {
-			wt_float[k] =  w;
-		}
-	}
-	for (k = -120; k <  0; k++) dp_float[k] =  dp[k];
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-
-	for (lambda = 40; lambda <= 120; lambda += 9) {
-
-		/*  Calculate L_result for l = lambda .. lambda + 9.
-		 */
-		register float *lp = dp_float - lambda;
-
-		register float	W;
-		register float	a = lp[-8], b = lp[-7], c = lp[-6],
-				d = lp[-5], e = lp[-4], f = lp[-3],
-				g = lp[-2], h = lp[-1];
-		register float  E; 
-		register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-				S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#		undef STEP
-#		define	STEP(K, a, b, c, d, e, f, g, h) \
-			if ((W = wt_float[K]) != 0.0) {	\
-			E = W * a; S8 += E;		\
-			E = W * b; S7 += E;		\
-			E = W * c; S6 += E;		\
-			E = W * d; S5 += E;		\
-			E = W * e; S4 += E;		\
-			E = W * f; S3 += E;		\
-			E = W * g; S2 += E;		\
-			E = W * h; S1 += E;		\
-			a  = lp[K];			\
-			E = W * a; S0 += E; } else (a = lp[K])
-
-#		define	STEP_A(K)	STEP(K, a, b, c, d, e, f, g, h)
-#		define	STEP_B(K)	STEP(K, b, c, d, e, f, g, h, a)
-#		define	STEP_C(K)	STEP(K, c, d, e, f, g, h, a, b)
-#		define	STEP_D(K)	STEP(K, d, e, f, g, h, a, b, c)
-#		define	STEP_E(K)	STEP(K, e, f, g, h, a, b, c, d)
-#		define	STEP_F(K)	STEP(K, f, g, h, a, b, c, d, e)
-#		define	STEP_G(K)	STEP(K, g, h, a, b, c, d, e, f)
-#		define	STEP_H(K)	STEP(K, h, a, b, c, d, e, f, g)
-
-		STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-		STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-		STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-		STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-		STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-		STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-		STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-		STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-		STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-		STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-#		undef STEP_A
-#		undef STEP_B
-#		undef STEP_C
-#		undef STEP_D
-#		undef STEP_E
-#		undef STEP_F
-#		undef STEP_G
-#		undef STEP_H
-
-		if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-		if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-		if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-		if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-		if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-		if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-		if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-		if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-		if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-
-	}
-	*Nc_out = Nc;
-
-	L_max <<= 1;
-
-	/*  Rescaling of L_max
-	 */
-	assert(scal <= 100 && scal >=  -100);
-	L_max = L_max >> (6 - scal);	/* sub(6, scal) */
-
-	assert( Nc <= 120 && Nc >= 40);
-
-	/*   Compute the power of the reconstructed short term residual
-	 *   signal dp[..]
-	 */
-	L_power = 0;
-	for (k = 0; k <= 39; k++) {
-
-		register longword L_temp;
-
-		L_temp   = SASR_W( dp[k - Nc], 3 );
-		L_power += L_temp * L_temp;
-	}
-	L_power <<= 1;	/* from L_MULT */
-
-	/*  Normalization of L_max and L_power
-	 */
-
-	if (L_max <= 0)  {
-		*bc_out = 0;
-		return;
-	}
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	temp = gsm_norm( L_power );
-
-	R = SASR( L_max   << temp, 16 );
-	S = SASR( L_power << temp, 16 );
-
-	/*  Coding of the LTP gain
-	 */
-
-	/*  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-	*bc_out = bc;
-}
-
-#endif /* LTP_CUT */
-
-static void Calculation_of_the_LTP_parameters (
-	register word	* din,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	word		Nc, bc;
-
-	float		wt_float[40];
-	float		dp_float_base[120], * dp_float = dp_float_base + 120;
-
-	longword	L_max, L_power;
-	word		R, S, dmax, scal;
-	register word	temp;
-
-	/*  Search of the optimum scaling of d[0..39].
-	 */
-	dmax = 0;
-
-	for (k = 0; k <= 39; k++) {
-		temp = din [k] ;
-		temp = GSM_ABS (temp) ;
-		if (temp > dmax) dmax = temp;
-	}
-
-	temp = 0;
-	if (dmax == 0) scal = 0;
-	else {
-		assert(dmax > 0);
-		temp = gsm_norm( (longword)dmax << 16 );
-	}
-
-	if (temp > 6) scal = 0;
-	else scal = 6 - temp;
-
-	assert(scal >= 0);
-
-	/*  Initialization of a working array wt
-	 */
-
-	for (k =    0; k < 40; k++) wt_float[k] =  SASR_W (din [k], scal) ;
-	for (k = -120; k <  0; k++) dp_float[k] =  dp[k];
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-
-	for (lambda = 40; lambda <= 120; lambda += 9) {
-
-		/*  Calculate L_result for l = lambda .. lambda + 9.
-		 */
-		register float *lp = dp_float - lambda;
-
-		register float	W;
-		register float	a = lp[-8], b = lp[-7], c = lp[-6],
-				d = lp[-5], e = lp[-4], f = lp[-3],
-				g = lp[-2], h = lp[-1];
-		register float  E; 
-		register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-				S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#		undef STEP
-#		define	STEP(K, a, b, c, d, e, f, g, h) \
-			W = wt_float[K];		\
-			E = W * a; S8 += E;		\
-			E = W * b; S7 += E;		\
-			E = W * c; S6 += E;		\
-			E = W * d; S5 += E;		\
-			E = W * e; S4 += E;		\
-			E = W * f; S3 += E;		\
-			E = W * g; S2 += E;		\
-			E = W * h; S1 += E;		\
-			a  = lp[K];			\
-			E = W * a; S0 += E
-
-#		define	STEP_A(K)	STEP(K, a, b, c, d, e, f, g, h)
-#		define	STEP_B(K)	STEP(K, b, c, d, e, f, g, h, a)
-#		define	STEP_C(K)	STEP(K, c, d, e, f, g, h, a, b)
-#		define	STEP_D(K)	STEP(K, d, e, f, g, h, a, b, c)
-#		define	STEP_E(K)	STEP(K, e, f, g, h, a, b, c, d)
-#		define	STEP_F(K)	STEP(K, f, g, h, a, b, c, d, e)
-#		define	STEP_G(K)	STEP(K, g, h, a, b, c, d, e, f)
-#		define	STEP_H(K)	STEP(K, h, a, b, c, d, e, f, g)
-
-		STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-		STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-		STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-		STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-		STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-		STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-		STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-		STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-		STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-		STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-#		undef STEP_A
-#		undef STEP_B
-#		undef STEP_C
-#		undef STEP_D
-#		undef STEP_E
-#		undef STEP_F
-#		undef STEP_G
-#		undef STEP_H
-
-		if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-		if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-		if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-		if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-		if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-		if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-		if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-		if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-		if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-	}
-	*Nc_out = Nc;
-
-	L_max <<= 1;
-
-	/*  Rescaling of L_max
-	 */
-	assert(scal <= 100 && scal >=  -100);
-	L_max = L_max >> (6 - scal);	/* sub(6, scal) */
-
-	assert( Nc <= 120 && Nc >= 40);
-
-	/*   Compute the power of the reconstructed short term residual
-	 *   signal dp[..]
-	 */
-	L_power = 0;
-	for (k = 0; k <= 39; k++) {
-
-		register longword L_temp;
-
-		L_temp   = SASR_W( dp[k - Nc], 3 );
-		L_power += L_temp * L_temp;
-	}
-	L_power <<= 1;	/* from L_MULT */
-
-	/*  Normalization of L_max and L_power
-	 */
-
-	if (L_max <= 0)  {
-		*bc_out = 0;
-		return;
-	}
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	temp = gsm_norm( L_power );
-
-	R = SASR_L ( L_max   << temp, 16 );
-	S = SASR_L ( L_power << temp, 16 );
-
-	/*  Coding of the LTP gain
-	 */
-
-	/*  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-	*bc_out = bc;
-}
-
-#ifdef	FAST
-#ifdef	LTP_CUT
-
-static void Cut_Fast_Calculation_of_the_LTP_parameters (
-	struct gsm_state * st,		/*              IN	*/
-	register word	* d,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	register float	wt_float;
-	word		Nc, bc;
-	word		wt_max, best_k, ltp_cut;
-
-	float		dp_float_base[120], * dp_float = dp_float_base + 120;
-
-	register float	L_result, L_max, L_power;
-
-	wt_max = 0;
-
-	for (k = 0; k < 40; ++k) {
-		if      ( d[k] > wt_max) wt_max =  d[best_k = k];
-		else if (-d[k] > wt_max) wt_max = -d[best_k = k];
-	}
-
-	assert(wt_max >= 0);
-	wt_float = (float)wt_max;
-
-	for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k];
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-
-	for (lambda = 40; lambda <= 120; lambda++) {
-		L_result = wt_float * dp_float[best_k - lambda];
-		if (L_result > L_max) {
-			Nc    = lambda;
-			L_max = L_result;
-		}
-	}
-
-	*Nc_out = Nc;
-	if (L_max <= 0.)  {
-		*bc_out = 0;
-		return;
-	}
-
-	/*  Compute the power of the reconstructed short term residual
-	 *  signal dp[..]
-	 */
-	dp_float -= Nc;
-	L_power = 0;
-	for (k = 0; k < 40; ++k) {
-		register float f = dp_float[k];
-		L_power += f * f;
-	}
-
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	/*  Coding of the LTP gain
-	 *  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	lambda = L_max / L_power * 32768.;
-	for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
-	*bc_out = bc;
-}
-
-#endif /* LTP_CUT */
-
-static void Fast_Calculation_of_the_LTP_parameters (
-	register word	* din,		/* [0..39]	IN	*/
-	register word	* dp,		/* [-120..-1]	IN	*/
-	word		* bc_out,	/* 		OUT	*/
-	word		* Nc_out	/* 		OUT	*/
-)
-{
-	register int  	k, lambda;
-	word		Nc, bc;
-
-	float		wt_float[40];
-	float		dp_float_base[120], * dp_float = dp_float_base + 120;
-
-	register float	L_max, L_power;
-
-	for (k = 0; k < 40; ++k) wt_float[k] = (float) din [k] ;
-	for (k = -120; k < 0; ++k) dp_float[k] = (float) dp [k] ;
-
-	/* Search for the maximum cross-correlation and coding of the LTP lag
-	 */
-	L_max = 0;
-	Nc    = 40;	/* index for the maximum cross-correlation */
-
-	for (lambda = 40; lambda <= 120; lambda += 9) {
-
-		/*  Calculate L_result for l = lambda .. lambda + 9.
-		 */
-		register float *lp = dp_float - lambda;
-
-		register float	W;
-		register float	a = lp[-8], b = lp[-7], c = lp[-6],
-				d = lp[-5], e = lp[-4], f = lp[-3],
-				g = lp[-2], h = lp[-1];
-		register float  E; 
-		register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-				S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#		undef STEP
-#		define	STEP(K, a, b, c, d, e, f, g, h) \
-			W = wt_float[K];		\
-			E = W * a; S8 += E;		\
-			E = W * b; S7 += E;		\
-			E = W * c; S6 += E;		\
-			E = W * d; S5 += E;		\
-			E = W * e; S4 += E;		\
-			E = W * f; S3 += E;		\
-			E = W * g; S2 += E;		\
-			E = W * h; S1 += E;		\
-			a  = lp[K];			\
-			E = W * a; S0 += E
-
-#		define	STEP_A(K)	STEP(K, a, b, c, d, e, f, g, h)
-#		define	STEP_B(K)	STEP(K, b, c, d, e, f, g, h, a)
-#		define	STEP_C(K)	STEP(K, c, d, e, f, g, h, a, b)
-#		define	STEP_D(K)	STEP(K, d, e, f, g, h, a, b, c)
-#		define	STEP_E(K)	STEP(K, e, f, g, h, a, b, c, d)
-#		define	STEP_F(K)	STEP(K, f, g, h, a, b, c, d, e)
-#		define	STEP_G(K)	STEP(K, g, h, a, b, c, d, e, f)
-#		define	STEP_H(K)	STEP(K, h, a, b, c, d, e, f, g)
-
-		STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-		STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-		STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-		STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-		STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-		STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-		STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-		STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-		STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-		STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-		if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-		if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-		if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-		if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-		if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-		if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-		if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-		if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-		if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-	}
-	*Nc_out = Nc;
-
-	if (L_max <= 0.)  {
-		*bc_out = 0;
-		return;
-	}
-
-	/*  Compute the power of the reconstructed short term residual
-	 *  signal dp[..]
-	 */
-	dp_float -= Nc;
-	L_power = 0;
-	for (k = 0; k < 40; ++k) {
-		register float f = dp_float[k];
-		L_power += f * f;
-	}
-
-	if (L_max >= L_power) {
-		*bc_out = 3;
-		return;
-	}
-
-	/*  Coding of the LTP gain
-	 *  Table 4.3a must be used to obtain the level DLB[i] for the
-	 *  quantization of the LTP gain b to get the coded version bc.
-	 */
-	lambda = L_max / L_power * 32768.;
-	for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
-	*bc_out = bc;
-}
-
-#endif	/* FAST 	 */
-#endif	/* USE_FLOAT_MUL */
-
-
-/* 4.2.12 */
-
-static void Long_term_analysis_filtering (
-	word		bc,	/* 					IN  */
-	word		Nc,	/* 					IN  */
-	register word	* dp,	/* previous d	[-120..-1]		IN  */
-	register word	* d,	/* d		[0..39]			IN  */
-	register word	* dpp,	/* estimate	[0..39]			OUT */
-	register word	* e	/* long term res. signal [0..39]	OUT */
-)
-/*
- *  In this part, we have to decode the bc parameter to compute
- *  the samples of the estimate dpp[0..39].  The decoding of bc needs the
- *  use of table 4.3b.  The long term residual signal e[0..39]
- *  is then calculated to be fed to the RPE encoding section.
- */
-{
-	register int      k;
-
-#	undef STEP
-#	define STEP(BP)					\
-	for (k = 0; k <= 39; k++) {			\
-		dpp[k]  = GSM_MULT_R( BP, dp[k - Nc]);	\
-		e[k]	= GSM_SUB( d[k], dpp[k] );	\
-	}
-
-	switch (bc) {
-	case 0:	STEP(  3277 ); break;
-	case 1:	STEP( 11469 ); break;
-	case 2: STEP( 21299 ); break;
-	case 3: STEP( 32767 ); break; 
-	}
-}
-
-void Gsm_Long_Term_Predictor (	/* 4x for 160 samples */
-
-	struct gsm_state	* S,
-
-	word	* d,	/* [0..39]   residual signal	IN	*/
-	word	* dp,	/* [-120..-1] d'		IN	*/
-
-	word	* e,	/* [0..39] 			OUT	*/
-	word	* dpp,	/* [0..39] 			OUT	*/
-	word	* Nc,	/* correlation lag		OUT	*/
-	word	* bc	/* gain factor			OUT	*/
-)
-{
-	assert( d  ); assert( dp ); assert( e  );
-	assert( dpp); assert( Nc ); assert( bc );
-
-#if defined(FAST) && defined(USE_FLOAT_MUL)
-	if (S->fast) 
-#if   defined (LTP_CUT)
-		if (S->ltp_cut)
-			Cut_Fast_Calculation_of_the_LTP_parameters(S,
-				d, dp, bc, Nc);
-		else
-#endif /* LTP_CUT */
-			Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc );
-	else 
-#endif /* FAST & USE_FLOAT_MUL */
-#ifdef LTP_CUT
-		if (S->ltp_cut)
-			Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc);
-		else
-#endif
-			Calculation_of_the_LTP_parameters(d, dp, bc, Nc);
-
-	Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e );
-}
-
-/* 4.3.2 */
-void Gsm_Long_Term_Synthesis_Filtering (
-	struct gsm_state	* S,
-
-	word			Ncr,
-	word			bcr,
-	register word		* erp,	   /* [0..39]		  	 IN */
-	register word		* drp	   /* [-120..-1] IN, [-120..40] OUT */
-)
-/*
- *  This procedure uses the bcr and Ncr parameter to realize the
- *  long term synthesis filtering.  The decoding of bcr needs
- *  table 4.3b.
- */
-{
-	register int 		k;
-	word			brp, drpp, Nr;
-
-	/*  Check the limits of Nr.
-	 */
-	Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr;
-	S->nrp = Nr;
-	assert(Nr >= 40 && Nr <= 120);
-
-	/*  Decoding of the LTP gain bcr
-	 */
-	brp = gsm_QLB[ bcr ];
-
-	/*  Computation of the reconstructed short term residual 
-	 *  signal drp[0..39]
-	 */
-	assert(brp != MIN_WORD);
-
-	for (k = 0; k <= 39; k++) {
-		drpp   = GSM_MULT_R( brp, drp[ k - Nr ] );
-		drp[k] = GSM_ADD( erp[k], drpp );
-	}
-
-	/*
-	 *  Update of the reconstructed short term residual signal
-	 *  drp[ -1..-120 ]
-	 */
-
-	for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ];
-}
diff --git a/libs/libsndfile/src/GSM610/lpc.c b/libs/libsndfile/src/GSM610/lpc.c
deleted file mode 100644
index 0e776e3639..0000000000
--- a/libs/libsndfile/src/GSM610/lpc.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
- */
-
-/* 4.2.4 */
-
-
-static void Autocorrelation (
-	word     * s,		/* [0..159]	IN/OUT  */
- 	longword * L_ACF)	/* [0..8]	OUT     */
-/*
- *  The goal is to compute the array L_ACF[k].  The signal s[i] must
- *  be scaled in order to avoid an overflow situation.
- */
-{
-	register int	k, i;
-
-	word		temp, smax, scalauto;
-
-#ifdef	USE_FLOAT_MUL
-	float		float_s[160];
-#endif
-
-	/*  Dynamic scaling of the array  s[0..159]
-	 */
-
-	/*  Search for the maximum.
-	 */
-	smax = 0;
-	for (k = 0; k <= 159; k++) {
-		temp = GSM_ABS( s[k] );
-		if (temp > smax) smax = temp;
-	}
-
-	/*  Computation of the scaling factor.
-	 */
-	if (smax == 0) scalauto = 0;
-	else {
-		assert(smax > 0);
-		scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */
-	}
-
-	/*  Scaling of the array s[0...159]
-	 */
-
-	if (scalauto > 0) {
-
-# ifdef USE_FLOAT_MUL
-#   define SCALE(n)	\
-	case n: for (k = 0; k <= 159; k++) \
-			float_s[k] = (float)	\
-				(s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\
-		break;
-# else 
-#   define SCALE(n)	\
-	case n: for (k = 0; k <= 159; k++) \
-			s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
-		break;
-# endif /* USE_FLOAT_MUL */
-
-		switch (scalauto) {
-		SCALE(1)
-		SCALE(2)
-		SCALE(3)
-		SCALE(4)
-		}
-# undef	SCALE
-	}
-# ifdef	USE_FLOAT_MUL
-	else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k];
-# endif
-
-	/*  Compute the L_ACF[..].
-	 */
-	{
-# ifdef	USE_FLOAT_MUL
-		register float * sp = float_s;
-		register float   sl = *sp;
-
-#		define STEP(k)	 L_ACF[k] += (longword)(sl * sp[ -(k) ]);
-# else
-		word  * sp = s;
-		word    sl = *sp;
-
-#		define STEP(k)	 L_ACF[k] += ((longword)sl * sp[ -(k) ]);
-# endif
-
-#	define NEXTI	 sl = *++sp
-
-
-	for (k = 9; k--; L_ACF[k] = 0) ;
-
-	STEP (0);
-	NEXTI;
-	STEP(0); STEP(1);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2); STEP(3);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
-	NEXTI;
-	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
-
-	for (i = 8; i <= 159; i++) {
-
-		NEXTI;
-
-		STEP(0);
-		STEP(1); STEP(2); STEP(3); STEP(4);
-		STEP(5); STEP(6); STEP(7); STEP(8);
-	}
-
-	for (k = 9; k--; L_ACF[k] <<= 1) ; 
-
-	}
-	/*   Rescaling of the array s[0..159]
-	 */
-	if (scalauto > 0) {
-		assert(scalauto <= 4); 
-		for (k = 160; k--; *s++ <<= scalauto) ;
-	}
-}
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-
-static void Fast_Autocorrelation (
-	word * s,		/* [0..159]	IN/OUT  */
- 	longword * L_ACF)	/* [0..8]	OUT     */
-{
-	register int	k, i;
-	float f_L_ACF[9];
-	float scale;
-
-	float          s_f[160];
-	register float *sf = s_f;
-
-	for (i = 0; i < 160; ++i) sf[i] = s[i];
-	for (k = 0; k <= 8; k++) {
-		register float L_temp2 = 0;
-		register float *sfl = sf - k;
-		for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i];
-		f_L_ACF[k] = L_temp2;
-	}
-	scale = MAX_LONGWORD / f_L_ACF[0];
-
-	for (k = 0; k <= 8; k++) {
-		L_ACF[k] = f_L_ACF[k] * scale;
-	}
-}
-#endif	/* defined (USE_FLOAT_MUL) && defined (FAST) */
-
-/* 4.2.5 */
-
-static void Reflection_coefficients (
-	longword	* L_ACF,		/* 0...8	IN	*/
-	register word	* r			/* 0...7	OUT 	*/
-)
-{
-	register int	i, m, n;
-	register word	temp;
-	word		ACF[9];	/* 0..8 */
-	word		P[  9];	/* 0..8 */
-	word		K[  9]; /* 2..8 */
-
-	/*  Schur recursion with 16 bits arithmetic.
-	 */
-
-	if (L_ACF[0] == 0) {
-		for (i = 8; i--; *r++ = 0) ;
-		return;
-	}
-
-	assert( L_ACF[0] != 0 );
-	temp = gsm_norm( L_ACF[0] );
-
-	assert(temp >= 0 && temp < 32);
-
-	/* ? overflow ? */
-	for (i = 0; i <= 8; i++) ACF[i] = SASR_L( L_ACF[i] << temp, 16 );
-
-	/*   Initialize array P[..] and K[..] for the recursion.
-	 */
-
-	for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
-	for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
-
-	/*   Compute reflection coefficients
-	 */
-	for (n = 1; n <= 8; n++, r++) {
-
-		temp = P[1];
-		temp = GSM_ABS(temp);
-		if (P[0] < temp) {
-			for (i = n; i <= 8; i++) *r++ = 0;
-			return;
-		}
-
-		*r = gsm_div( temp, P[0] );
-
-		assert(*r >= 0);
-		if (P[1] > 0) *r = -*r;		/* r[n] = sub(0, r[n]) */
-		assert (*r != MIN_WORD);
-		if (n == 8) return; 
-
-		/*  Schur recursion
-		 */
-		temp = GSM_MULT_R( P[1], *r );
-		P[0] = GSM_ADD( P[0], temp );
-
-		for (m = 1; m <= 8 - n; m++) {
-			temp     = GSM_MULT_R( K[ m   ],    *r );
-			P[m]     = GSM_ADD(    P[ m+1 ],  temp );
-
-			temp     = GSM_MULT_R( P[ m+1 ],    *r );
-			K[m]     = GSM_ADD(    K[ m   ],  temp );
-		}
-	}
-}
-
-/* 4.2.6 */
-
-static void Transformation_to_Log_Area_Ratios (
-	register word	* r 			/* 0..7	   IN/OUT */
-)
-/*
- *  The following scaling for r[..] and LAR[..] has been used:
- *
- *  r[..]   = integer( real_r[..]*32768. ); -1 <= real_r < 1.
- *  LAR[..] = integer( real_LAR[..] * 16384 );
- *  with -1.625 <= real_LAR <= 1.625
- */
-{
-	register word	temp;
-	register int	i;
-
-
-	/* Computation of the LAR[0..7] from the r[0..7]
-	 */
-	for (i = 1; i <= 8; i++, r++) {
-
-		temp = *r;
-		temp = GSM_ABS(temp);
-		assert(temp >= 0);
-
-		if (temp < 22118) {
-			temp >>= 1;
-		} else if (temp < 31130) {
-			assert( temp >= 11059 );
-			temp -= 11059;
-		} else {
-			assert( temp >= 26112 );
-			temp -= 26112;
-			temp <<= 2;
-		}
-
-		*r = *r < 0 ? -temp : temp;
-		assert( *r != MIN_WORD );
-	}
-}
-
-/* 4.2.7 */
-
-static void Quantization_and_coding (
-	register word * LAR    	/* [0..7]	IN/OUT	*/
-)
-{
-	register word	temp;
-
-	/*  This procedure needs four tables; the following equations
-	 *  give the optimum scaling for the constants:
-	 *  
-	 *  A[0..7] = integer( real_A[0..7] * 1024 )
-	 *  B[0..7] = integer( real_B[0..7] *  512 )
-	 *  MAC[0..7] = maximum of the LARc[0..7]
-	 *  MIC[0..7] = minimum of the LARc[0..7]
-	 */
-
-#	undef STEP
-#	define	STEP( A, B, MAC, MIC )		\
-		temp = GSM_MULT( A,   *LAR );	\
-		temp = GSM_ADD(  temp,   B );	\
-		temp = GSM_ADD(  temp, 256 );	\
-		temp = SASR_W(     temp,   9 );	\
-		*LAR  =  temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
-		LAR++;
-
-	STEP(  20480,     0,  31, -32 );
-	STEP(  20480,     0,  31, -32 );
-	STEP(  20480,  2048,  15, -16 );
-	STEP(  20480, -2560,  15, -16 );
-
-	STEP(  13964,    94,   7,  -8 );
-	STEP(  15360, -1792,   7,  -8 );
-	STEP(   8534,  -341,   3,  -4 );
-	STEP(   9036, -1144,   3,  -4 );
-
-#	undef	STEP
-}
-
-void Gsm_LPC_Analysis (
-	struct gsm_state *S,
-	word 		 * s,		/* 0..159 signals	IN/OUT	*/
-        word 		 * LARc)	/* 0..7   LARc's	OUT	*/
-{
-	longword	L_ACF[9];
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-	if (S->fast) Fast_Autocorrelation (s,	  L_ACF );
-	else
-#endif
-	Autocorrelation			  (s,	  L_ACF	);
-	Reflection_coefficients		  (L_ACF, LARc	);
-	Transformation_to_Log_Area_Ratios (LARc);
-	Quantization_and_coding		  (LARc);
-}
diff --git a/libs/libsndfile/src/GSM610/preprocess.c b/libs/libsndfile/src/GSM610/preprocess.c
deleted file mode 100644
index 723e226a56..0000000000
--- a/libs/libsndfile/src/GSM610/preprocess.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include	<stdio.h>
-#include	<assert.h>
-
-#include "gsm610_priv.h"
-
-/*	4.2.0 .. 4.2.3	PREPROCESSING SECTION
- *  
- *  	After A-law to linear conversion (or directly from the
- *   	Ato D converter) the following scaling is assumed for
- * 	input to the RPE-LTP algorithm:
- *
- *      in:  0.1.....................12
- *	     S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
- *
- *	Where S is the sign bit, v a valid bit, and * a "don't care" bit.
- * 	The original signal is called sop[..]
- *
- *      out:   0.1................... 12 
- *	     S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
- */
-
-
-void Gsm_Preprocess (
-	struct gsm_state * S,
-	word		 * s,
-	word 		 * so )		/* [0..159] 	IN/OUT	*/
-{
-
-	word       z1 = S->z1;
-	longword L_z2 = S->L_z2;
-	word 	   mp = S->mp;
-
-	word 	   	s1;
-	longword      L_s2;
-
-	longword      L_temp;
-
-	word		msp, lsp;
-	word		SO;
-
-	register int		k = 160;
-
-	while (k--) {
-
-	/*  4.2.1   Downscaling of the input signal
-	 */
-		SO = SASR_W( *s, 3 ) << 2;
-		s++;
-
-		assert (SO >= -0x4000);	/* downscaled by     */
-		assert (SO <=  0x3FFC);	/* previous routine. */
-
-
-	/*  4.2.2   Offset compensation
-	 * 
-	 *  This part implements a high-pass filter and requires extended
-	 *  arithmetic precision for the recursive part of this filter.
-	 *  The input of this procedure is the array so[0...159] and the
-	 *  output the array sof[ 0...159 ].
-	 */
-		/*   Compute the non-recursive part
-		 */
-
-		s1 = SO - z1;			/* s1 = gsm_sub( *so, z1 ); */
-		z1 = SO;
-
-		assert(s1 != MIN_WORD);
-
-		/*   Compute the recursive part
-		 */
-		L_s2 = s1;
-		L_s2 <<= 15;
-
-		/*   Execution of a 31 bv 16 bits multiplication
-		 */
-
-		msp = SASR_L( L_z2, 15 );
-		lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */
-
-		L_s2  += GSM_MULT_R( lsp, 32735 );
-		L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/
-		L_z2   = GSM_L_ADD( L_temp, L_s2 );
-
-		/*    Compute sof[k] with rounding
-		 */
-		L_temp = GSM_L_ADD( L_z2, 16384 );
-
-	/*   4.2.3  Preemphasis
-	 */
-
-		msp   = GSM_MULT_R( mp, -28180 );
-		mp    = SASR_L( L_temp, 15 );
-		*so++ = GSM_ADD( mp, msp );
-	}
-
-	S->z1   = z1;
-	S->L_z2 = L_z2;
-	S->mp   = mp;
-}
diff --git a/libs/libsndfile/src/GSM610/rpe.c b/libs/libsndfile/src/GSM610/rpe.c
deleted file mode 100644
index d8f931e214..0000000000
--- a/libs/libsndfile/src/GSM610/rpe.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*  4.2.13 .. 4.2.17  RPE ENCODING SECTION
- */
-
-/* 4.2.13 */
-
-static void Weighting_filter (
-	register word	* e,		/* signal [-5..0.39.44]	IN  */
-	word		* x		/* signal [0..39]	OUT */
-)
-/*
- *  The coefficients of the weighting filter are stored in a table
- *  (see table 4.4).  The following scaling is used:
- *
- *	H[0..10] = integer( real_H[ 0..10] * 8192 ); 
- */
-{
-	/* word			wt[ 50 ]; */
-
-	register longword	L_result;
-	register int		k /* , i */ ;
-
-	/*  Initialization of a temporary working array wt[0...49]
-	 */
-
-	/* for (k =  0; k <=  4; k++) wt[k] = 0;
-	 * for (k =  5; k <= 44; k++) wt[k] = *e++;
-	 * for (k = 45; k <= 49; k++) wt[k] = 0;
-	 *
-	 *  (e[-5..-1] and e[40..44] are allocated by the caller,
-	 *  are initially zero and are not written anywhere.)
-	 */
-	e -= 5;
-
-	/*  Compute the signal x[0..39]
-	 */ 
-	for (k = 0; k <= 39; k++) {
-
-		L_result = 8192 >> 1;
-
-		/* for (i = 0; i <= 10; i++) {
-		 *	L_temp   = GSM_L_MULT( wt[k+i], gsm_H[i] );
-		 *	L_result = GSM_L_ADD( L_result, L_temp );
-		 * }
-		 */
-
-#undef	STEP
-#define	STEP( i, H )	(e[ k + i ] * (longword)H)
-
-		/*  Every one of these multiplications is done twice --
-		 *  but I don't see an elegant way to optimize this. 
-		 *  Do you?
-		 */
-
-#ifdef	STUPID_COMPILER
-		L_result += STEP(	0, 	-134 ) ;
-		L_result += STEP(	1, 	-374 )  ;
-	               /* + STEP(	2, 	0    )  */
-		L_result += STEP(	3, 	2054 ) ;
-		L_result += STEP(	4, 	5741 ) ;
-		L_result += STEP(	5, 	8192 ) ;
-		L_result += STEP(	6, 	5741 ) ;
-		L_result += STEP(	7, 	2054 ) ;
-	 	       /* + STEP(	8, 	0    )  */
-		L_result += STEP(	9, 	-374 ) ;
-		L_result += STEP(	10, 	-134 ) ;
-#else
-		L_result +=
-		  STEP(	0, 	-134 ) 
-		+ STEP(	1, 	-374 ) 
-	     /* + STEP(	2, 	0    )  */
-		+ STEP(	3, 	2054 ) 
-		+ STEP(	4, 	5741 ) 
-		+ STEP(	5, 	8192 ) 
-		+ STEP(	6, 	5741 ) 
-		+ STEP(	7, 	2054 ) 
-	     /* + STEP(	8, 	0    )  */
-		+ STEP(	9, 	-374 ) 
-		+ STEP(10, 	-134 )
-		;
-#endif
-
-		/* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *)
-		 * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *)
-		 *
-		 * x[k] = SASR( L_result, 16 );
-		 */
-
-		/* 2 adds vs. >>16 => 14, minus one shift to compensate for
-		 * those we lost when replacing L_MULT by '*'.
-		 */
-
-		L_result = SASR_L( L_result, 13 );
-		x[k] =  (  L_result < MIN_WORD ? MIN_WORD
-			: (L_result > MAX_WORD ? MAX_WORD : L_result ));
-	}
-}
-
-/* 4.2.14 */
-
-static void RPE_grid_selection (
-	word		* x,		/* [0..39]		IN  */ 
-	word		* xM,		/* [0..12]		OUT */
-	word		* Mc_out	/*			OUT */
-)
-/*
- *  The signal x[0..39] is used to select the RPE grid which is
- *  represented by Mc.
- */
-{
-	/* register word	temp1;	*/
-	register int		/* m, */  i;
-	register longword	L_result, L_temp;
-	longword		EM;	/* xxx should be L_EM? */
-	word			Mc;
-
-	longword		L_common_0_3;
-
-	EM = 0;
-	Mc = 0;
-
-	/* for (m = 0; m <= 3; m++) {
-	 *	L_result = 0;
-	 *
-	 *
-	 *	for (i = 0; i <= 12; i++) {
-	 *
-	 *		temp1    = SASR_W( x[m + 3*i], 2 );
-	 *
-	 *		assert(temp1 != MIN_WORD);
-	 *
-	 *		L_temp   = GSM_L_MULT( temp1, temp1 );
-	 *		L_result = GSM_L_ADD( L_temp, L_result );
-	 *	}
-	 * 
-	 *	if (L_result > EM) {
-	 *		Mc = m;
-	 *		EM = L_result;
-	 *	}
-	 * }
-	 */
-
-#undef	STEP
-#define	STEP( m, i )		L_temp = SASR_W( x[m + 3 * i], 2 );	\
-				L_result += L_temp * L_temp;
-
-	/* common part of 0 and 3 */
-
-	L_result = 0;
-	STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 );
-	STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 );
-	STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12);
-	L_common_0_3 = L_result;
-
-	/* i = 0 */
-
-	STEP( 0, 0 );
-	L_result <<= 1;	/* implicit in L_MULT */
-	EM = L_result;
-
-	/* i = 1 */
-
-	L_result = 0;
-	STEP( 1, 0 );
-	STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 );
-	STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 );
-	STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12);
-	L_result <<= 1;
-	if (L_result > EM) {
-		Mc = 1;
-	 	EM = L_result;
-	}
-
-	/* i = 2 */
-
-	L_result = 0;
-	STEP( 2, 0 );
-	STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 );
-	STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 );
-	STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12);
-	L_result <<= 1;
-	if (L_result > EM) {
-		Mc = 2;
-	 	EM = L_result;
-	}
-
-	/* i = 3 */
-
-	L_result = L_common_0_3;
-	STEP( 3, 12 );
-	L_result <<= 1;
-	if (L_result > EM) {
-		Mc = 3;
-	 	EM = L_result;
-	}
-
-	/**/
-
-	/*  Down-sampling by a factor 3 to get the selected xM[0..12]
-	 *  RPE sequence.
-	 */
-	for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i];
-	*Mc_out = Mc;
-}
-
-/* 4.12.15 */
-
-static void APCM_quantization_xmaxc_to_exp_mant (
-	word		xmaxc,		/* IN 	*/
-	word		* expon_out,	/* OUT	*/
-	word		* mant_out )	/* OUT  */
-{
-	word	expon, mant;
-
-	/* Compute expononent and mantissa of the decoded version of xmaxc
-	 */
-
-	expon = 0;
-	if (xmaxc > 15) expon = SASR_W(xmaxc, 3) - 1;
-	mant = xmaxc - (expon << 3);
-
-	if (mant == 0) {
-		expon  = -4;
-		mant = 7;
-	}
-	else {
-		while (mant <= 7) {
-			mant = mant << 1 | 1;
-			expon--;
-		}
-		mant -= 8;
-	}
-
-	assert( expon  >= -4 && expon <= 6 );
-	assert( mant >= 0 && mant <= 7 );
-
-	*expon_out  = expon;
-	*mant_out = mant;
-}
-
-static void APCM_quantization (
-	word		* xM,		/* [0..12]		IN	*/
-	word		* xMc,		/* [0..12]		OUT	*/
-	word		* mant_out,	/* 			OUT	*/
-	word		* expon_out,	/*			OUT	*/
-	word		* xmaxc_out	/*			OUT	*/
-)
-{
-	int	i, itest;
-
-	word	xmax, xmaxc, temp, temp1, temp2;
-	word	expon, mant;
-
-
-	/*  Find the maximum absolute value xmax of xM[0..12].
-	 */
-
-	xmax = 0;
-	for (i = 0; i <= 12; i++) {
-		temp = xM[i];
-		temp = GSM_ABS(temp);
-		if (temp > xmax) xmax = temp;
-	}
-
-	/*  Qantizing and coding of xmax to get xmaxc.
-	 */
-
-	expon   = 0;
-	temp  = SASR_W( xmax, 9 );
-	itest = 0;
-
-	for (i = 0; i <= 5; i++) {
-
-		itest |= (temp <= 0);
-		temp = SASR_W( temp, 1 );
-
-		assert(expon <= 5);
-		if (itest == 0) expon++;		/* expon = add (expon, 1) */
-	}
-
-	assert(expon <= 6 && expon >= 0);
-	temp = expon + 5;
-
-	assert(temp <= 11 && temp >= 0);
-	xmaxc = gsm_add( SASR_W(xmax, temp), (word) (expon << 3) );
-
-	/*   Quantizing and coding of the xM[0..12] RPE sequence
-	 *   to get the xMc[0..12]
-	 */
-
-	APCM_quantization_xmaxc_to_exp_mant( xmaxc, &expon, &mant );
-
-	/*  This computation uses the fact that the decoded version of xmaxc
-	 *  can be calculated by using the expononent and the mantissa part of
-	 *  xmaxc (logarithmic table).
-	 *  So, this method avoids any division and uses only a scaling
-	 *  of the RPE samples by a function of the expononent.  A direct 
-	 *  multiplication by the inverse of the mantissa (NRFAC[0..7]
-	 *  found in table 4.5) gives the 3 bit coded version xMc[0..12]
-	 *  of the RPE samples.
-	 */
-
-
-	/* Direct computation of xMc[0..12] using table 4.5
-	 */
-
-	assert( expon <= 4096 && expon >= -4096);
-	assert( mant >= 0 && mant <= 7 ); 
-
-	temp1 = 6 - expon;		/* normalization by the expononent */
-	temp2 = gsm_NRFAC[ mant ];  	/* inverse mantissa 		 */
-
-	for (i = 0; i <= 12; i++) {
-
-		assert(temp1 >= 0 && temp1 < 16);
-
-		temp = xM[i] << temp1;
-		temp = GSM_MULT( temp, temp2 );
-		temp = SASR_W(temp, 12);
-		xMc[i] = temp + 4;		/* see note below */
-	}
-
-	/*  NOTE: This equation is used to make all the xMc[i] positive.
-	 */
-
-	*mant_out  = mant;
-	*expon_out   = expon;
-	*xmaxc_out = xmaxc;
-}
-
-/* 4.2.16 */
-
-static void APCM_inverse_quantization (
-	register word	* xMc,	/* [0..12]			IN 	*/
-	word		mant,
-	word		expon,
-	register word	* xMp)	/* [0..12]			OUT 	*/
-/* 
- *  This part is for decoding the RPE sequence of coded xMc[0..12]
- *  samples to obtain the xMp[0..12] array.  Table 4.6 is used to get
- *  the mantissa of xmaxc (FAC[0..7]).
- */
-{
-	int	i;
-	word	temp, temp1, temp2, temp3;
-
-	assert( mant >= 0 && mant <= 7 ); 
-
-	temp1 = gsm_FAC[ mant ];	/* see 4.2-15 for mant */
-	temp2 = gsm_sub( 6, expon );	/* see 4.2-15 for exp  */
-	temp3 = gsm_asl( 1, gsm_sub( temp2, 1 ));
-
-	for (i = 13; i--;) {
-
-		assert( *xMc <= 7 && *xMc >= 0 ); 	/* 3 bit unsigned */
-
-		/* temp = gsm_sub( *xMc++ << 1, 7 ); */
-		temp = (*xMc++ << 1) - 7;	        /* restore sign   */
-		assert( temp <= 7 && temp >= -7 ); 	/* 4 bit signed   */
-
-		temp <<= 12;				/* 16 bit signed  */
-		temp = GSM_MULT_R( temp1, temp );
-		temp = GSM_ADD( temp, temp3 );
-		*xMp++ = gsm_asr( temp, temp2 );
-	}
-}
-
-/* 4.2.17 */
-
-static void RPE_grid_positioning (
-	word		Mc,		/* grid position	IN	*/
-	register word	* xMp,		/* [0..12]		IN	*/
-	register word	* ep		/* [0..39]		OUT	*/
-)
-/*
- *  This procedure computes the reconstructed long term residual signal
- *  ep[0..39] for the LTP analysis filter.  The inputs are the Mc
- *  which is the grid position selection and the xMp[0..12] decoded
- *  RPE samples which are upsampled by a factor of 3 by inserting zero
- *  values.
- */
-{
-	int	i = 13;
-
-	assert(0 <= Mc && Mc <= 3);
-
-        switch (Mc) {
-                case 3: *ep++ = 0;
-                case 2:  do {
-                                *ep++ = 0;
-                case 1:         *ep++ = 0;
-                case 0:         *ep++ = *xMp++;
-                         } while (--i);
-        }
-        while (++Mc < 4) *ep++ = 0;
-
-	/*
-
-	int i, k;
-	for (k = 0; k <= 39; k++) ep[k] = 0;
-	for (i = 0; i <= 12; i++) {
-		ep[ Mc + (3*i) ] = xMp[i];
-	}
-	*/
-}
-
-/* 4.2.18 */
-
-/*  This procedure adds the reconstructed long term residual signal
- *  ep[0..39] to the estimated signal dpp[0..39] from the long term
- *  analysis filter to compute the reconstructed short term residual
- *  signal dp[-40..-1]; also the reconstructed short term residual
- *  array dp[-120..-41] is updated.
- */
-
-#if 0	/* Has been inlined in code.c */
-void Gsm_Update_of_reconstructed_short_time_residual_signal (
-	word	* dpp,		/* [0...39]	IN	*/
-	word	* ep,		/* [0...39]	IN	*/
-	word	* dp)		/* [-120...-1]  IN/OUT 	*/
-{
-	int 		k;
-
-	for (k = 0; k <= 79; k++) 
-		dp[ -120 + k ] = dp[ -80 + k ];
-
-	for (k = 0; k <= 39; k++)
-		dp[ -40 + k ] = gsm_add( ep[k], dpp[k] );
-}
-#endif	/* Has been inlined in code.c */
-
-void Gsm_RPE_Encoding (
-	/*-struct gsm_state * S,-*/
-
-	word	* e,		/* -5..-1][0..39][40..44	IN/OUT  */
-	word	* xmaxc,	/* 				OUT */
-	word	* Mc,		/* 			  	OUT */
-	word	* xMc)		/* [0..12]			OUT */
-{
-	word	x[40];
-	word	xM[13], xMp[13];
-	word	mant, expon;
-
-	Weighting_filter(e, x);
-	RPE_grid_selection(x, xM, Mc);
-
-	APCM_quantization(	xM, xMc, &mant, &expon, xmaxc);
-	APCM_inverse_quantization(  xMc,  mant,  expon, xMp);
-
-	RPE_grid_positioning( *Mc, xMp, e );
-
-}
-
-void Gsm_RPE_Decoding (
-	/*-struct gsm_state	* S,-*/
-
-	word 		xmaxcr,
-	word		Mcr,
-	word		* xMcr,  /* [0..12], 3 bits 		IN	*/
-	word		* erp	 /* [0..39]			OUT 	*/
-)
-{
-	word	expon, mant;
-	word	xMp[ 13 ];
-
-	APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &expon, &mant );
-	APCM_inverse_quantization( xMcr, mant, expon, xMp );
-	RPE_grid_positioning( Mcr, xMp, erp );
-
-}
diff --git a/libs/libsndfile/src/GSM610/short_term.c b/libs/libsndfile/src/GSM610/short_term.c
deleted file mode 100644
index 904856318f..0000000000
--- a/libs/libsndfile/src/GSM610/short_term.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  SHORT TERM ANALYSIS FILTERING SECTION
- */
-
-/* 4.2.8 */
-
-static void Decoding_of_the_coded_Log_Area_Ratios (
-	word 	* LARc,		/* coded log area ratio	[0..7] 	IN	*/
-	word	* LARpp)	/* out: decoded ..			*/
-{
-	register word	temp1 /* , temp2 */;
-
-	/*  This procedure requires for efficient implementation
-	 *  two tables.
- 	 *
-	 *  INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
-	 *  MIC[1..8]  = minimum value of the LARc[1..8]
-	 */
-
-	/*  Compute the LARpp[1..8]
-	 */
-
-	/* 	for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
-	 *
-	 *		temp1  = GSM_ADD( *LARc, *MIC ) << 10;
-	 *		temp2  = *B << 1;
-	 *		temp1  = GSM_SUB( temp1, temp2 );
-	 *
-	 *		assert(*INVA != MIN_WORD);
-	 *
-	 *		temp1  = GSM_MULT_R( *INVA, temp1 );
-	 *		*LARpp = GSM_ADD( temp1, temp1 );
-	 *	}
-	 */
-
-#undef	STEP
-#define	STEP( B, MIC, INVA )	\
-		temp1    = GSM_ADD( *LARc++, MIC ) << 10;	\
-		temp1    = GSM_SUB( temp1, B << 1 );		\
-		temp1    = GSM_MULT_R( INVA, temp1 );		\
-		*LARpp++ = GSM_ADD( temp1, temp1 );
-
-	STEP(      0,  -32,  13107 );
-	STEP(      0,  -32,  13107 );
-	STEP(   2048,  -16,  13107 );
-	STEP(  -2560,  -16,  13107 );
-
-	STEP(     94,   -8,  19223 );
-	STEP(  -1792,   -8,  17476 );
-	STEP(   -341,   -4,  31454 );
-	STEP(  -1144,   -4,  29708 );
-
-	/* NOTE: the addition of *MIC is used to restore
-	 * 	 the sign of *LARc.
-	 */
-}
-
-/* 4.2.9 */
-/* Computation of the quantized reflection coefficients 
- */
-
-/* 4.2.9.1  Interpolation of the LARpp[1..8] to get the LARp[1..8]
- */
-
-/*
- *  Within each frame of 160 analyzed speech samples the short term
- *  analysis and synthesis filters operate with four different sets of
- *  coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
- *  and the actual set of decoded LARs (LARpp(j))
- *
- * (Initial value: LARpp(j-1)[1..8] = 0.)
- */
-
-static void Coefficients_0_12 (
-	register word * LARpp_j_1,
-	register word * LARpp_j,
-	register word * LARp)
-{
-	register int 	i;
-
-	for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
-		*LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 ));
-		*LARp = GSM_ADD( *LARp,  SASR_W( *LARpp_j_1, 1));
-	}
-}
-
-static void Coefficients_13_26 (
-	register word * LARpp_j_1,
-	register word * LARpp_j,
-	register word * LARp)
-{
-	register int i;
-	for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
-		*LARp = GSM_ADD( SASR_W( *LARpp_j_1, 1), SASR_W( *LARpp_j, 1 ));
-	}
-}
-
-static void Coefficients_27_39 (
-	register word * LARpp_j_1,
-	register word * LARpp_j,
-	register word * LARp)
-{
-	register int i;
-
-	for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
-		*LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 ));
-		*LARp = GSM_ADD( *LARp, SASR_W( *LARpp_j, 1 ));
-	}
-}
-
-
-static void Coefficients_40_159 (
-	register word * LARpp_j,
-	register word * LARp)
-{
-	register int i;
-
-	for (i = 1; i <= 8; i++, LARp++, LARpp_j++)
-		*LARp = *LARpp_j;
-}
-
-/* 4.2.9.2 */
-
-static void LARp_to_rp (
-	register word * LARp)	/* [0..7] IN/OUT  */
-/*
- *  The input of this procedure is the interpolated LARp[0..7] array.
- *  The reflection coefficients, rp[i], are used in the analysis
- *  filter and in the synthesis filter.
- */
-{
-	register int 		i;
-	register word		temp;
-
-	for (i = 1; i <= 8; i++, LARp++) {
-
-		/* temp = GSM_ABS( *LARp );
-	         *
-		 * if (temp < 11059) temp <<= 1;
-		 * else if (temp < 20070) temp += 11059;
-		 * else temp = GSM_ADD( temp >> 2, 26112 );
-		 *
-		 * *LARp = *LARp < 0 ? -temp : temp;
-		 */
-
-		if (*LARp < 0) {
-			temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
-			*LARp = - ((temp < 11059) ? temp << 1
-				: ((temp < 20070) ? temp + 11059
-				:  GSM_ADD( (word) (temp >> 2), (word) 26112 )));
-		} else {
-			temp  = *LARp;
-			*LARp =    (temp < 11059) ? temp << 1
-				: ((temp < 20070) ? temp + 11059
-				:  GSM_ADD( (word) (temp >> 2), (word) 26112 ));
-		}
-	}
-}
-
-
-/* 4.2.10 */
-static void Short_term_analysis_filtering (
-	struct gsm_state * S,
-	register word	* rp,	/* [0..7]	IN	*/
-	register int 	k_n, 	/*   k_end - k_start	*/
-	register word	* s	/* [0..n-1]	IN/OUT	*/
-)
-/*
- *  This procedure computes the short term residual signal d[..] to be fed
- *  to the RPE-LTP loop from the s[..] signal and from the local rp[..]
- *  array (quantized reflection coefficients).  As the call of this
- *  procedure can be done in many ways (see the interpolation of the LAR
- *  coefficient), it is assumed that the computation begins with index
- *  k_start (for arrays d[..] and s[..]) and stops with index k_end
- *  (k_start and k_end are defined in 4.2.9.1).  This procedure also
- *  needs to keep the array u[0..7] in memory for each call.
- */
-{
-	register word		* u = S->u;
-	register int		i;
-	register word		di, zzz, ui, sav, rpi;
-
-	for (; k_n--; s++) {
-
-		di = sav = *s;
-
-		for (i = 0; i < 8; i++) {		/* YYY */
-
-			ui    = u[i];
-			rpi   = rp[i];
-			u[i]  = sav;
-
-			zzz   = GSM_MULT_R(rpi, di);
-			sav   = GSM_ADD(   ui,  zzz);
-
-			zzz   = GSM_MULT_R(rpi, ui);
-			di    = GSM_ADD(   di,  zzz );
-		}
-
-		*s = di;
-	}
-}
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-
-static void Fast_Short_term_analysis_filtering (
-	struct gsm_state * S,
-	register word	* rp,	/* [0..7]	IN	*/
-	register int 	k_n, 	/*   k_end - k_start	*/
-	register word	* s	/* [0..n-1]	IN/OUT	*/
-)
-{
-	register word		* u = S->u;
-	register int		i;
-
-	float 	  uf[8],
-		 rpf[8];
-
-	register float scalef = 3.0517578125e-5;
-	register float		sav, di, temp;
-
-	for (i = 0; i < 8; ++i) {
-		uf[i]  = u[i];
-		rpf[i] = rp[i] * scalef;
-	}
-	for (; k_n--; s++) {
-		sav = di = *s;
-		for (i = 0; i < 8; ++i) {
-			register float rpfi = rpf[i];
-			register float ufi  = uf[i];
-
-			uf[i] = sav;
-			temp  = rpfi * di + ufi;
-			di   += rpfi * ufi;
-			sav   = temp;
-		}
-		*s = di;
-	}
-	for (i = 0; i < 8; ++i) u[i] = uf[i];
-}
-#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */
-
-static void Short_term_synthesis_filtering (
-	struct gsm_state * S,
-	register word	* rrp,	/* [0..7]	IN	*/
-	register int	k,	/* k_end - k_start	*/
-	register word	* wt,	/* [0..k-1]	IN	*/
-	register word	* sr	/* [0..k-1]	OUT	*/
-)
-{
-	register word		* v = S->v;
-	register int		i;
-	register word		sri, tmp1, tmp2;
-
-	while (k--) {
-		sri = *wt++;
-		for (i = 8; i--;) {
-
-			/* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
-			 */
-			tmp1 = rrp[i];
-			tmp2 = v[i];
-			tmp2 =  ( tmp1 == MIN_WORD && tmp2 == MIN_WORD
-				? MAX_WORD
-				: 0x0FFFF & (( (longword)tmp1 * (longword)tmp2
-					     + 16384) >> 15)) ;
-
-			sri  = GSM_SUB( sri, tmp2 );
-
-			/* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
-			 */
-			tmp1  = ( tmp1 == MIN_WORD && sri == MIN_WORD
-				? MAX_WORD
-				: 0x0FFFF & (( (longword)tmp1 * (longword)sri
-					     + 16384) >> 15)) ;
-
-			v[i+1] = GSM_ADD( v[i], tmp1);
-		}
-		*sr++ = v[0] = sri;
-	}
-}
-
-
-#if defined(FAST) && defined(USE_FLOAT_MUL)
-
-static void Fast_Short_term_synthesis_filtering (
-	struct gsm_state * S,
-	register word	* rrp,	/* [0..7]	IN	*/
-	register int	k,	/* k_end - k_start	*/
-	register word	* wt,	/* [0..k-1]	IN	*/
-	register word	* sr	/* [0..k-1]	OUT	*/
-)
-{
-	register word		* v = S->v;
-	register int		i;
-
-	float va[9], rrpa[8];
-	register float scalef = 3.0517578125e-5, temp;
-
-	for (i = 0; i < 8; ++i) {
-		va[i]   = v[i];
-		rrpa[i] = (float)rrp[i] * scalef;
-	}
-	while (k--) {
-		register float sri = *wt++;
-		for (i = 8; i--;) {
-			sri -= rrpa[i] * va[i];
-			if     (sri < -32768.) sri = -32768.;
-			else if (sri > 32767.) sri =  32767.;
-
-			temp = va[i] + rrpa[i] * sri;
-			if     (temp < -32768.) temp = -32768.;
-			else if (temp > 32767.) temp =  32767.;
-			va[i+1] = temp;
-		}
-		*sr++ = va[0] = sri;
-	}
-	for (i = 0; i < 9; ++i) v[i] = va[i];
-}
-
-#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */
-
-void Gsm_Short_Term_Analysis_Filter (
-
-	struct gsm_state * S,
-
-	word	* LARc,		/* coded log area ratio [0..7]  IN	*/
-	word	* s		/* signal [0..159]		IN/OUT	*/
-)
-{
-	word		* LARpp_j	= S->LARpp[ S->j      ];
-	word		* LARpp_j_1	= S->LARpp[ S->j ^= 1 ];
-
-	word		LARp[8];
-
-#undef	FILTER
-#if 	defined(FAST) && defined(USE_FLOAT_MUL)
-# 	define	FILTER 	(* (S->fast			\
-			   ? Fast_Short_term_analysis_filtering	\
-		    	   : Short_term_analysis_filtering	))
-
-#else
-# 	define	FILTER	Short_term_analysis_filtering
-#endif
-
-	Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
-
-	Coefficients_0_12(  LARpp_j_1, LARpp_j, LARp );
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 13, s);
-
-	Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 14, s + 13);
-
-	Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 13, s + 27);
-
-	Coefficients_40_159( LARpp_j, LARp);
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 120, s + 40);
-}
-
-void Gsm_Short_Term_Synthesis_Filter (
-	struct gsm_state * S,
-
-	word	* LARcr,	/* received log area ratios [0..7] IN  */
-	word	* wt,		/* received d [0..159]		   IN  */
-
-	word	* s		/* signal   s [0..159]		  OUT  */
-)
-{
-	word		* LARpp_j	= S->LARpp[ S->j     ];
-	word		* LARpp_j_1	= S->LARpp[ S->j ^=1 ];
-
-	word		LARp[8];
-
-#undef	FILTER
-#if 	defined(FAST) && defined(USE_FLOAT_MUL)
-
-# 	define	FILTER 	(* (S->fast			\
-			   ? Fast_Short_term_synthesis_filtering	\
-		    	   : Short_term_synthesis_filtering	))
-#else
-#	define	FILTER	Short_term_synthesis_filtering
-#endif
-
-	Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
-
-	Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 13, wt, s );
-
-	Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 14, wt + 13, s + 13 );
-
-	Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
-	LARp_to_rp( LARp );
-	FILTER( S, LARp, 13, wt + 27, s + 27 );
-
-	Coefficients_40_159( LARpp_j, LARp );
-	LARp_to_rp( LARp );
-	FILTER(S, LARp, 120, wt + 40, s + 40);
-}
diff --git a/libs/libsndfile/src/GSM610/table.c b/libs/libsndfile/src/GSM610/table.c
deleted file mode 100644
index 8b83f78cf5..0000000000
--- a/libs/libsndfile/src/GSM610/table.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-/*  Most of these tables are inlined at their point of use.
- */
-
-/*  4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP
- *      CODER AND DECODER
- *
- *	(Most of them inlined, so watch out.)
- */
-
-#define	GSM_TABLE_C
-#include "gsm610_priv.h"
-
-/*  Table 4.1  Quantization of the Log.-Area Ratios
- */
-/* i 		     1      2      3        4      5      6        7       8 */
-word gsm_A[8]   = {20480, 20480, 20480,  20480,  13964,  15360,   8534,  9036};
-word gsm_B[8]   = {    0,     0,  2048,  -2560,     94,  -1792,   -341, -1144};
-word gsm_MIC[8] = { -32,   -32,   -16,    -16,     -8,     -8,     -4,    -4 };
-word gsm_MAC[8] = {  31,    31,    15,     15,      7,      7,      3,     3 };
-
-
-/*  Table 4.2  Tabulation  of 1/A[1..8]
- */
-word gsm_INVA[8]={ 13107, 13107,  13107, 13107,  19223, 17476,  31454, 29708 };
-
-
-/*   Table 4.3a  Decision level of the LTP gain quantizer
- */
-/*  bc		      0	        1	  2	     3			*/
-word gsm_DLB[4] = {  6554,    16384,	26214,	   32767	};
-
-
-/*   Table 4.3b   Quantization levels of the LTP gain quantizer
- */
-/* bc		      0          1        2          3			*/
-word gsm_QLB[4] = {  3277,    11469,	21299,	   32767	};
-
-
-/*   Table 4.4	 Coefficients of the weighting filter
- */
-/* i		    0      1   2    3   4      5      6     7   8   9    10  */
-word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 };
-
-
-/*   Table 4.5 	 Normalized inverse mantissa used to compute xM/xmax 
- */
-/* i		 	0        1    2      3      4      5     6      7   */
-word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 };
-
-
-/*   Table 4.6	 Normalized direct mantissa used to compute xM/xmax
- */
-/* i                  0      1       2      3      4      5      6      7   */
-word gsm_FAC[8]	= { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
diff --git a/libs/libsndfile/src/Makefile.am b/libs/libsndfile/src/Makefile.am
deleted file mode 100644
index 7c307a8b42..0000000000
--- a/libs/libsndfile/src/Makefile.am
+++ /dev/null
@@ -1,134 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-AUTOMAKE_OPTIONS = subdir-objects
-
-AM_CPPFLAGS = @EXTERNAL_CFLAGS@
-
-lib_LTLIBRARIES = libsndfile.la
-include_HEADERS = sndfile.hh
-nodist_include_HEADERS = sndfile.h
-
-noinst_LTLIBRARIES =  GSM610/libgsm.la G72x/libg72x.la ALAC/libalac.la libcommon.la
-
-OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@
-OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
-
-SYMBOL_FILES = Symbols.gnu-binutils Symbols.darwin libsndfile-1.def Symbols.os2 Symbols.static
-
-EXTRA_DIST = sndfile.h.in config.h.in test_endswap.tpl test_endswap.def \
-			create_symbols_file.py binheader_writef_check.py \
-			GSM610/README GSM610/COPYRIGHT GSM610/ChangeLog \
-			G72x/README G72x/README.original G72x/ChangeLog \
-			make-static-lib-hidden-privates.sh
-
-noinst_HEADERS = common.h sfconfig.h sfendian.h wav_w64.h sf_unistd.h ogg.h chanmap.h
-
-noinst_PROGRAMS =
-
-COMMON = common.c file_io.c command.c pcm.c ulaw.c alaw.c float32.c \
-		double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \
-		interleave.c strings.c dither.c cart.c broadcast.c audio_detect.c \
- 		ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
-		windows.c id3.c $(WIN_VERSION_FILE)
-
-FILESPECIFIC = sndfile.c aiff.c au.c avr.c caf.c dwd.c flac.c g72x.c htk.c ircam.c \
-		macbinary3.c macos.c mat4.c mat5.c nist.c paf.c pvf.c raw.c rx2.c sd2.c \
-		sds.c svx.c txw.c voc.c wve.c w64.c wav_w64.c wav.c xi.c mpc2k.c rf64.c \
-		ogg_vorbis.c ogg_speex.c ogg_pcm.c ogg_opus.c
-
-CLEANFILES = *~ *.exe G72x/*.exe
-
-if USE_WIN_VERSION_FILE
-WIN_VERSION_FILE = version-metadata.rc
-else
-WIN_VERSION_FILE =
-endif
-
-#===============================================================================
-# MinGW requires -no-undefined if a DLL is to be built.
-libsndfile_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @SHLIB_VERSION_ARG@
-libsndfile_la_SOURCES = $(FILESPECIFIC) $(noinst_HEADERS)
-nodist_libsndfile_la_SOURCES = $(nodist_include_HEADERS)
-libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la ALAC/libalac.la \
-		libcommon.la @EXTERNAL_LIBS@ -lm
-
-libcommon_la_SOURCES = $(COMMON)
-
-#======================================================================
-# Subdir libraries.
-
-GSM610_libgsm_la_SOURCES = GSM610/config.h GSM610/gsm.h GSM610/gsm610_priv.h \
-		GSM610/add.c GSM610/code.c GSM610/decode.c GSM610/gsm_create.c \
-		GSM610/gsm_decode.c GSM610/gsm_destroy.c GSM610/gsm_encode.c \
-		GSM610/gsm_option.c GSM610/long_term.c GSM610/lpc.c GSM610/preprocess.c \
-		GSM610/rpe.c GSM610/short_term.c GSM610/table.c
-
-G72x_libg72x_la_SOURCES = G72x/g72x.h G72x/g72x_priv.h \
-		G72x/g721.c G72x/g723_16.c G72x/g723_24.c G72x/g723_40.c G72x/g72x.c
-
-ALAC_libalac_la_SOURCES = ALAC/ALACAudioTypes.h ALAC/ALACBitUtilities.h \
-		ALAC/EndianPortable.h ALAC/aglib.h ALAC/dplib.h ALAC/matrixlib.h \
-		ALAC/alac_codec.h \
-		ALAC/ALACBitUtilities.c ALAC/ag_dec.c \
-		ALAC/ag_enc.c ALAC/dp_dec.c ALAC/dp_enc.c ALAC/matrix_dec.c \
-		ALAC/matrix_enc.c ALAC/alac_decoder.c ALAC/alac_encoder.c
-
-#===============================================================================
-# Test programs.
-
-#test_main_SOURCES = test_main.c test_main.h test_conversions.c test_float.c test_endswap.c \
-#					test_audio_detect.c test_log_printf.c test_file_io.c test_ima_oki_adpcm.c \
-#					test_strncpy_crlf.c test_broadcast_var.c test_cart_var.c
-#test_main_LDADD = libcommon.la
-
-#G72x_g72x_test_SOURCES = G72x/g72x_test.c
-#G72x_g72x_test_LDADD = G72x/libg72x.la
-
-#test_endswap.c: test_endswap.def test_endswap.tpl
-#	cd $(srcdir) && autogen --writable test_endswap.def && cd $(abs_builddir)
-
-genfiles : #$(SYMBOL_FILES)
-
-check :
-	@if [ -x /usr/bin/python ]; then $(srcdir)/binheader_writef_check.py $(srcdir)/*.c ; fi
-#	G72x/g72x_test$(EXEEXT) all
-	./test_main$(EXEEXT)
-
-# Need this target to force building of test programs.
-checkprograms : $(check_PROGRAMS)
-
-#======================================================================
-# Generate an OS specific Symbols files. This is done when the author
-# builds the distribution tarball. There should be not need for the
-# end user to create these files.
-
-Symbols.gnu-binutils: create_symbols_file.py
-	python $(srcdir)/create_symbols_file.py linux $(VERSION) > $@
-
-Symbols.darwin: create_symbols_file.py
-	python $(srcdir)/create_symbols_file.py darwin $(VERSION) > $@
-
-libsndfile-1.def: create_symbols_file.py
-	python $(srcdir)/create_symbols_file.py win32 $(VERSION) > $@
-
-Symbols.os2: create_symbols_file.py
-	python $(srcdir)/create_symbols_file.py os2 $(VERSION) > $@
-
-Symbols.static: create_symbols_file.py
-	python $(srcdir)/create_symbols_file.py static $(VERSION) > $@
-
-# Fake dependancy to force the creation of these files.
-#sndfile.o : $(SYMBOL_FILES)
-
-#======================================================================
-# Building windows resource files (if needed).
-
-.rc.lo:
-	$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) $< -o $@
-
-#======================================================================
-# Disable autoheader.
-AUTOHEADER=echo
-
-
-
diff --git a/libs/libsndfile/src/Symbols.darwin b/libs/libsndfile/src/Symbols.darwin
deleted file mode 100644
index a671460756..0000000000
--- a/libs/libsndfile/src/Symbols.darwin
+++ /dev/null
@@ -1,37 +0,0 @@
-# Auto-generated by create_symbols_file.py
-
-_sf_command
-_sf_open
-_sf_close
-_sf_seek
-_sf_error
-_sf_perror
-_sf_error_str
-_sf_error_number
-_sf_format_check
-_sf_read_raw
-_sf_readf_short
-_sf_readf_int
-_sf_readf_float
-_sf_readf_double
-_sf_read_short
-_sf_read_int
-_sf_read_float
-_sf_read_double
-_sf_write_raw
-_sf_writef_short
-_sf_writef_int
-_sf_writef_float
-_sf_writef_double
-_sf_write_short
-_sf_write_int
-_sf_write_float
-_sf_write_double
-_sf_strerror
-_sf_get_string
-_sf_set_string
-_sf_version_string
-_sf_open_fd
-_sf_open_virtual
-_sf_write_sync
-
diff --git a/libs/libsndfile/src/Symbols.linux b/libs/libsndfile/src/Symbols.linux
deleted file mode 100644
index 163346f700..0000000000
--- a/libs/libsndfile/src/Symbols.linux
+++ /dev/null
@@ -1,42 +0,0 @@
-# Auto-generated by create_symbols_file.py
-
-libsndfile.so.1.0
-{
-  global:
-    sf_command ;
-    sf_open ;
-    sf_close ;
-    sf_seek ;
-    sf_error ;
-    sf_perror ;
-    sf_error_str ;
-    sf_error_number ;
-    sf_format_check ;
-    sf_read_raw ;
-    sf_readf_short ;
-    sf_readf_int ;
-    sf_readf_float ;
-    sf_readf_double ;
-    sf_read_short ;
-    sf_read_int ;
-    sf_read_float ;
-    sf_read_double ;
-    sf_write_raw ;
-    sf_writef_short ;
-    sf_writef_int ;
-    sf_writef_float ;
-    sf_writef_double ;
-    sf_write_short ;
-    sf_write_int ;
-    sf_write_float ;
-    sf_write_double ;
-    sf_strerror ;
-    sf_get_string ;
-    sf_set_string ;
-    sf_open_fd ;
-    sf_open_virtual ;
-    sf_write_sync ;
-  local:
-    * ;
-} ;
-
diff --git a/libs/libsndfile/src/Symbols.os2 b/libs/libsndfile/src/Symbols.os2
deleted file mode 100644
index 118ceba728..0000000000
--- a/libs/libsndfile/src/Symbols.os2
+++ /dev/null
@@ -1,43 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY sndfile1
-INITINSTANCE TERMINSTANCE
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE MULTIPLE NONSHARED
-EXPORTS
-
-_sf_command           @1
-_sf_open              @2
-_sf_close             @3
-_sf_seek              @4
-_sf_error             @7
-_sf_perror            @8
-_sf_error_str         @9
-_sf_error_number      @10
-_sf_format_check      @11
-_sf_read_raw          @16
-_sf_readf_short       @17
-_sf_readf_int         @18
-_sf_readf_float       @19
-_sf_readf_double      @20
-_sf_read_short        @21
-_sf_read_int          @22
-_sf_read_float        @23
-_sf_read_double       @24
-_sf_write_raw         @32
-_sf_writef_short      @33
-_sf_writef_int        @34
-_sf_writef_float      @35
-_sf_writef_double     @36
-_sf_write_short       @37
-_sf_write_int         @38
-_sf_write_float       @39
-_sf_write_double      @40
-_sf_strerror          @50
-_sf_get_string        @60
-_sf_set_string        @61
-_sf_version_string    @68
-_sf_open_fd           @70
-_sf_open_virtual      @80
-_sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/aiff.c b/libs/libsndfile/src/aiff.c
deleted file mode 100644
index c0175b2f24..0000000000
--- a/libs/libsndfile/src/aiff.c
+++ /dev/null
@@ -1,1778 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "chanmap.h"
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
- */
-
-#define FORM_MARKER		(MAKE_MARKER ('F', 'O', 'R', 'M'))
-#define AIFF_MARKER		(MAKE_MARKER ('A', 'I', 'F', 'F'))
-#define AIFC_MARKER		(MAKE_MARKER ('A', 'I', 'F', 'C'))
-#define COMM_MARKER		(MAKE_MARKER ('C', 'O', 'M', 'M'))
-#define SSND_MARKER		(MAKE_MARKER ('S', 'S', 'N', 'D'))
-#define MARK_MARKER		(MAKE_MARKER ('M', 'A', 'R', 'K'))
-#define INST_MARKER		(MAKE_MARKER ('I', 'N', 'S', 'T'))
-#define APPL_MARKER		(MAKE_MARKER ('A', 'P', 'P', 'L'))
-#define CHAN_MARKER		(MAKE_MARKER ('C', 'H', 'A', 'N'))
-
-#define c_MARKER		(MAKE_MARKER ('(', 'c', ')', ' '))
-#define NAME_MARKER		(MAKE_MARKER ('N', 'A', 'M', 'E'))
-#define AUTH_MARKER		(MAKE_MARKER ('A', 'U', 'T', 'H'))
-#define ANNO_MARKER		(MAKE_MARKER ('A', 'N', 'N', 'O'))
-#define COMT_MARKER		(MAKE_MARKER ('C', 'O', 'M', 'T'))
-#define FVER_MARKER		(MAKE_MARKER ('F', 'V', 'E', 'R'))
-#define SFX_MARKER		(MAKE_MARKER ('S', 'F', 'X', '!'))
-
-#define PEAK_MARKER		(MAKE_MARKER ('P', 'E', 'A', 'K'))
-#define basc_MARKER		(MAKE_MARKER ('b', 'a', 's', 'c'))
-
-/* Supported AIFC encodings.*/
-#define NONE_MARKER		(MAKE_MARKER ('N', 'O', 'N', 'E'))
-#define sowt_MARKER		(MAKE_MARKER ('s', 'o', 'w', 't'))
-#define twos_MARKER		(MAKE_MARKER ('t', 'w', 'o', 's'))
-#define raw_MARKER		(MAKE_MARKER ('r', 'a', 'w', ' '))
-#define in24_MARKER		(MAKE_MARKER ('i', 'n', '2', '4'))
-#define ni24_MARKER		(MAKE_MARKER ('4', '2', 'n', '1'))
-#define in32_MARKER		(MAKE_MARKER ('i', 'n', '3', '2'))
-#define ni32_MARKER		(MAKE_MARKER ('2', '3', 'n', 'i'))
-
-#define fl32_MARKER		(MAKE_MARKER ('f', 'l', '3', '2'))
-#define FL32_MARKER		(MAKE_MARKER ('F', 'L', '3', '2'))
-#define fl64_MARKER		(MAKE_MARKER ('f', 'l', '6', '4'))
-#define FL64_MARKER		(MAKE_MARKER ('F', 'L', '6', '4'))
-
-#define ulaw_MARKER		(MAKE_MARKER ('u', 'l', 'a', 'w'))
-#define ULAW_MARKER		(MAKE_MARKER ('U', 'L', 'A', 'W'))
-#define alaw_MARKER		(MAKE_MARKER ('a', 'l', 'a', 'w'))
-#define ALAW_MARKER		(MAKE_MARKER ('A', 'L', 'A', 'W'))
-
-#define DWVW_MARKER		(MAKE_MARKER ('D', 'W', 'V', 'W'))
-#define GSM_MARKER		(MAKE_MARKER ('G', 'S', 'M', ' '))
-#define ima4_MARKER		(MAKE_MARKER ('i', 'm', 'a', '4'))
-
-/*
-**	This value is officially assigned to Mega Nerd Pty Ltd by Apple
-**	Corportation as the Application marker for libsndfile.
-**
-**	See : http://developer.apple.com/faq/datatype.html
-*/
-#define m3ga_MARKER		(MAKE_MARKER ('m', '3', 'g', 'a'))
-
-/* Unsupported AIFC encodings.*/
-
-#define MAC3_MARKER		(MAKE_MARKER ('M', 'A', 'C', '3'))
-#define MAC6_MARKER		(MAKE_MARKER ('M', 'A', 'C', '6'))
-#define ADP4_MARKER		(MAKE_MARKER ('A', 'D', 'P', '4'))
-
-/* Predfined chunk sizes. */
-#define SIZEOF_AIFF_COMM		18
-#define SIZEOF_AIFC_COMM_MIN	22
-#define SIZEOF_AIFC_COMM		24
-#define SIZEOF_SSND_CHUNK		8
-#define SIZEOF_INST_CHUNK		20
-
-/* Is it constant? */
-
-/* AIFC/IMA4 defines. */
-#define AIFC_IMA4_BLOCK_LEN				34
-#define AIFC_IMA4_SAMPLES_PER_BLOCK		64
-
-#define AIFF_PEAK_CHUNK_SIZE(ch)	(2 * sizeof (int) + ch * (sizeof (float) + sizeof (int)))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
- */
-
-enum
-{	HAVE_FORM		= 0x01,
-	HAVE_AIFF		= 0x02,
-	HAVE_AIFC		= 0x04,
-	HAVE_FVER		= 0x08,
-	HAVE_COMM		= 0x10,
-	HAVE_SSND		= 0x20
-} ;
-
-typedef struct
-{	unsigned int	size ;
-	short			numChannels ;
-	unsigned int	numSampleFrames ;
-	short			sampleSize ;
-	unsigned char	sampleRate [10] ;
-	unsigned int	encoding ;
-	char			zero_bytes [2] ;
-} COMM_CHUNK ;
-
-typedef struct
-{	unsigned int	offset ;
-	unsigned int	blocksize ;
-} SSND_CHUNK ;
-
-typedef struct
-{	short			playMode ;
-	unsigned short	beginLoop ;
-	unsigned short	endLoop ;
-} INST_LOOP ;
-
-typedef struct
-{	char		baseNote ;		/* all notes are MIDI note numbers */
-	char		detune ;		/* cents off, only -50 to +50 are significant */
-	char		lowNote ;
-	char		highNote ;
-	char		lowVelocity ;	/* 1 to 127 */
-	char		highVelocity ;	/* 1 to 127 */
-	short		gain ;			/* in dB, 0 is normal */
-	INST_LOOP	sustain_loop ;
-	INST_LOOP	release_loop ;
-} INST_CHUNK ;
-
-
-enum
-{	basc_SCALE_MINOR = 1,
-	basc_SCALE_MAJOR,
-	basc_SCALE_NEITHER,
-	basc_SCALE_BOTH
-} ;
-
-enum
-{	basc_TYPE_LOOP = 0,
-	basc_TYPE_ONE_SHOT
-} ;
-
-
-typedef struct
-{	unsigned int	version ;
-	unsigned int	numBeats ;
-	unsigned short	rootNote ;
-	unsigned short	scaleType ;
-	unsigned short	sigNumerator ;
-	unsigned short	sigDenominator ;
-	unsigned short	loopType ;
-} basc_CHUNK ;
-
-typedef struct
-{	unsigned short	markerID ;
-	unsigned int	position ;
-} MARK_ID_POS ;
-
-typedef struct
-{	sf_count_t	comm_offset ;
-	sf_count_t	ssnd_offset ;
-
-	int chanmap_tag ;
-
-	MARK_ID_POS *markstr ;
-} AIFF_PRIVATE ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int	aiff_close (SF_PRIVATE *psf) ;
-
-static int	tenbytefloat2int (unsigned char *bytes) ;
-static void uint2tenbytefloat (unsigned int num, unsigned char *bytes) ;
-
-static int	aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ;
-
-static int	aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ;
-
-static int	aiff_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	aiff_write_tailer (SF_PRIVATE *psf) ;
-static void	aiff_write_strings (SF_PRIVATE *psf, int location) ;
-
-static int	aiff_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-
-static const char *get_loop_mode_str (short mode) ;
-
-static short get_loop_mode (short mode) ;
-
-static int aiff_read_basc_chunk (SF_PRIVATE * psf, int) ;
-
-static int aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword) ;
-
-static unsigned int marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize) ;
-
-static int aiff_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * aiff_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int aiff_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int aiff_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-aiff_open (SF_PRIVATE *psf)
-{	COMM_CHUNK comm_fmt ;
-	int error, subformat ;
-
-	memset (&comm_fmt, 0, sizeof (comm_fmt)) ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if ((psf->container_data = calloc (1, sizeof (AIFF_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = aiff_read_header (psf, &comm_fmt)))
-			return error ;
-
-		psf->next_chunk_iterator = aiff_next_chunk_iterator ;
-		psf->get_chunk_size = aiff_get_chunk_size ;
-		psf->get_chunk_data = aiff_get_chunk_data ;
-
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AIFF)
-			return SFE_BAD_OPEN_FORMAT ;
-
-		if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-		{	if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-				return SFE_MALLOC_FAILED ;
-			psf->peak_info->peak_loc = SF_PEAK_START ;
-			} ;
-
-		if (psf->file.mode != SFM_RDWR || psf->filelength < 40)
-		{	psf->filelength = 0 ;
-			psf->datalength = 0 ;
-			psf->dataoffset = 0 ;
-			psf->sf.frames = 0 ;
-			} ;
-
-		psf->strings.flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ;
-
-		if ((error = aiff_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header	= aiff_write_header ;
-		psf->set_chunk		= aiff_set_chunk ;
-		} ;
-
-	psf->container_close = aiff_close ;
-	psf->command = aiff_command ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_U8 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_S8 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ULAW :
-				error = ulaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				error = alaw_init (psf) ;
-				break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-				error = float32_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				error = double64_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DWVW_12 :
-				error = dwvw_init (psf, 12) ;
-				break ;
-
-		case SF_FORMAT_DWVW_16 :
-				error = dwvw_init (psf, 16) ;
-				break ;
-
-		case SF_FORMAT_DWVW_24 :
-				error = dwvw_init (psf, 24) ;
-				break ;
-
-		case SF_FORMAT_DWVW_N :
-				if (psf->file.mode != SFM_READ)
-				{	error = SFE_DWVW_BAD_BITWIDTH ;
-					break ;
-					} ;
-				if (comm_fmt.sampleSize >= 8 && comm_fmt.sampleSize < 24)
-				{	error = dwvw_init (psf, comm_fmt.sampleSize) ;
-					psf->sf.frames = comm_fmt.numSampleFrames ;
-					break ;
-					} ;
-				psf_log_printf (psf, "AIFC/DWVW : Bad bitwidth %d\n", comm_fmt.sampleSize) ;
-				error = SFE_DWVW_BAD_BITWIDTH ;
-				break ;
-
-		case SF_FORMAT_IMA_ADPCM :
-				/*
-				**	IMA ADPCM encoded AIFF files always have a block length
-				**	of 34 which decodes to 64 samples.
-				*/
-				error = aiff_ima_init (psf, AIFC_IMA4_BLOCK_LEN, AIFC_IMA4_SAMPLES_PER_BLOCK) ;
-				break ;
-		/* Lite remove end */
-
-		case SF_FORMAT_GSM610 :
-				error = gsm610_init (psf) ;
-				break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-
-	return error ;
-} /* aiff_open */
-
-/*==========================================================================================
-** Private functions.
-*/
-
-/* This function ought to check size */
-static unsigned int
-marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize)
-{	int i ;
-
-	for (i = 0 ; i < marksize ; i++)
-		if (m [i].markerID == n)
-			return m [i].position ;
-	return 0 ;
-} /* marker_to_position */
-
-static int
-aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
-{	SSND_CHUNK	ssnd_fmt ;
-	AIFF_PRIVATE *paiff ;
-	BUF_UNION	ubuf ;
-	unsigned	chunk_size = 0, FORMsize, SSNDsize, bytesread ;
-	int			k, found_chunk = 0, done = 0, error = 0 ;
-	char		*cptr ;
-	int			instr_found = 0, mark_found = 0, mark_count = 0 ;
-
-	if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-		psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-	if ((paiff = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	paiff->comm_offset = 0 ;
-	paiff->ssnd_offset = 0 ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "p", 0) ;
-
-	memset (comm_fmt, 0, sizeof (COMM_CHUNK)) ;
-
-	/* Until recently AIF* file were all BIG endian. */
-	psf->endian = SF_ENDIAN_BIG ;
-
-	/*	AIFF files can apparently have their chunks in any order. However, they
-	**	must have a FORM chunk. Approach here is to read all the chunks one by
-	**	one and then check for the mandatory chunks at the end.
-	*/
-	while (! done)
-	{	unsigned	marker ;
-		size_t jump = chunk_size & 1 ;
-
-		marker = chunk_size = 0 ;
-		psf_binheader_readf (psf, "Ejm4", jump, &marker, &chunk_size) ;
-		if (marker == 0)
-		{	psf_log_printf (psf, "Have 0 marker.\n") ;
-			break ;
-			} ;
-
-		if (psf->file.mode == SFM_RDWR && (found_chunk & HAVE_SSND))
-			return SFE_AIFF_RW_SSND_NOT_LAST ;
-
-		psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-		switch (marker)
-		{	case FORM_MARKER :
-					if (found_chunk)
-						return SFE_AIFF_NO_FORM ;
-
-					FORMsize = chunk_size ;
-
-					found_chunk |= HAVE_FORM ;
-					psf_binheader_readf (psf, "m", &marker) ;
-					switch (marker)
-					{	case AIFC_MARKER :
-						case AIFF_MARKER :
-							found_chunk |= (marker == AIFC_MARKER) ? (HAVE_AIFC | HAVE_AIFF) : HAVE_AIFF ;
-							break ;
-						default :
-							break ;
-						} ;
-
-					if (psf->fileoffset > 0 && psf->filelength > FORMsize + 8)
-					{	/* Set file length. */
-						psf->filelength = FORMsize + 8 ;
-						psf_log_printf (psf, "FORM : %u\n %M\n", FORMsize, marker) ;
-						}
-					else if (FORMsize != psf->filelength - 2 * SIGNED_SIZEOF (chunk_size))
-					{	chunk_size = psf->filelength - 2 * sizeof (chunk_size) ;
-						psf_log_printf (psf, "FORM : %u (should be %u)\n %M\n", FORMsize, chunk_size, marker) ;
-						FORMsize = chunk_size ;
-						}
-					else
-						psf_log_printf (psf, "FORM : %u\n %M\n", FORMsize, marker) ;
-					/* Set this to 0, so we don't jump a byte when parsing the next marker. */
-					chunk_size = 0 ;
-					break ;
-
-
-			case COMM_MARKER :
-					paiff->comm_offset = psf_ftell (psf) - 8 ;
-					chunk_size += chunk_size & 1 ;
-					comm_fmt->size = chunk_size ;
-					if ((error = aiff_read_comm_chunk (psf, comm_fmt)) != 0)
-						return error ;
-
-					found_chunk |= HAVE_COMM ;
-					break ;
-
-			case PEAK_MARKER :
-					/* Must have COMM chunk before PEAK chunk. */
-					if ((found_chunk & (HAVE_FORM | HAVE_AIFF | HAVE_COMM)) != (HAVE_FORM | HAVE_AIFF | HAVE_COMM))
-						return SFE_AIFF_PEAK_B4_COMM ;
-
-					psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-					if (chunk_size != AIFF_PEAK_CHUNK_SIZE (psf->sf.channels))
-					{	psf_binheader_readf (psf, "j", chunk_size) ;
-						psf_log_printf (psf, "*** File PEAK chunk too big.\n") ;
-						return SFE_WAV_BAD_PEAK ;
-						} ;
-
-					if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-						return SFE_MALLOC_FAILED ;
-
-					/* read in rest of PEAK chunk. */
-					psf_binheader_readf (psf, "E44", &(psf->peak_info->version), &(psf->peak_info->timestamp)) ;
-
-					if (psf->peak_info->version != 1)
-						psf_log_printf (psf, "  version    : %d *** (should be version 1)\n", psf->peak_info->version) ;
-					else
-						psf_log_printf (psf, "  version    : %d\n", psf->peak_info->version) ;
-
-					psf_log_printf (psf, "  time stamp : %d\n", psf->peak_info->timestamp) ;
-					psf_log_printf (psf, "    Ch   Position       Value\n") ;
-
-					cptr = ubuf.cbuf ;
-					for (k = 0 ; k < psf->sf.channels ; k++)
-					{	float value ;
-						unsigned int position ;
-
-						psf_binheader_readf (psf, "Ef4", &value, &position) ;
-						psf->peak_info->peaks [k].value = value ;
-						psf->peak_info->peaks [k].position = position ;
-
-						snprintf (cptr, sizeof (ubuf.scbuf), "    %2d   %-12" PRId64 "   %g\n",
-								k, psf->peak_info->peaks [k].position, psf->peak_info->peaks [k].value) ;
-						cptr [sizeof (ubuf.scbuf) - 1] = 0 ;
-						psf_log_printf (psf, "%s", cptr) ;
-						} ;
-
-					psf->peak_info->peak_loc = ((found_chunk & HAVE_SSND) == 0) ? SF_PEAK_START : SF_PEAK_END ;
-					break ;
-
-			case SSND_MARKER :
-					if ((found_chunk & HAVE_AIFC) && (found_chunk & HAVE_FVER) == 0)
-						psf_log_printf (psf, "*** Valid AIFC files should have an FVER chunk.\n") ;
-
-					paiff->ssnd_offset = psf_ftell (psf) - 8 ;
-					SSNDsize = chunk_size ;
-					psf_binheader_readf (psf, "E44", &(ssnd_fmt.offset), &(ssnd_fmt.blocksize)) ;
-
-					psf->datalength = SSNDsize - sizeof (ssnd_fmt) ;
-					psf->dataoffset = psf_ftell (psf) ;
-
-					if (psf->datalength > psf->filelength - psf->dataoffset || psf->datalength < 0)
-					{	psf_log_printf (psf, " SSND : %u (should be %D)\n", SSNDsize, psf->filelength - psf->dataoffset + sizeof (SSND_CHUNK)) ;
-						psf->datalength = psf->filelength - psf->dataoffset ;
-						}
-					else
-						psf_log_printf (psf, " SSND : %u\n", SSNDsize) ;
-
-					if (ssnd_fmt.offset == 0 || psf->dataoffset + ssnd_fmt.offset == ssnd_fmt.blocksize)
-					{	psf_log_printf (psf, "  Offset     : %u\n", ssnd_fmt.offset) ;
-						psf_log_printf (psf, "  Block Size : %u\n", ssnd_fmt.blocksize) ;
-
-						psf->dataoffset += ssnd_fmt.offset ;
-						psf->datalength -= ssnd_fmt.offset ;
-						}
-					else
-					{	psf_log_printf (psf, "  Offset     : %u\n", ssnd_fmt.offset) ;
-						psf_log_printf (psf, "  Block Size : %u ???\n", ssnd_fmt.blocksize) ;
-						psf->dataoffset += ssnd_fmt.offset ;
-						psf->datalength -= ssnd_fmt.offset ;
-						} ;
-
-					/* Only set dataend if there really is data at the end. */
-					if (psf->datalength + psf->dataoffset < psf->filelength)
-						psf->dataend = psf->datalength + psf->dataoffset ;
-
-					found_chunk |= HAVE_SSND ;
-
-					if (! psf->sf.seekable)
-						break ;
-
-					/* Seek to end of SSND chunk. */
-					psf_fseek (psf, psf->dataoffset + psf->datalength, SEEK_SET) ;
-					break ;
-
-			case c_MARKER :
-					if (chunk_size == 0)
-						break ;
-					if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf))
-					{	psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-						return SFE_INTERNAL ;
-						} ;
-
-					cptr = ubuf.cbuf ;
-					psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-					cptr [chunk_size] = 0 ;
-
-					psf_sanitize_string (cptr, chunk_size) ;
-
-					psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-					psf_store_string (psf, SF_STR_COPYRIGHT, cptr) ;
-					chunk_size += chunk_size & 1 ;
-					break ;
-
-			case AUTH_MARKER :
-					if (chunk_size == 0)
-						break ;
-					if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 1)
-					{	psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-						return SFE_INTERNAL ;
-						} ;
-
-					cptr = ubuf.cbuf ;
-					psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-					cptr [chunk_size] = 0 ;
-					psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-					psf_store_string (psf, SF_STR_ARTIST, cptr) ;
-					chunk_size += chunk_size & 1 ;
-					break ;
-
-			case COMT_MARKER :
-				{	unsigned short count, id, len ;
-					unsigned int timestamp, bytes ;
-
-					if (chunk_size == 0)
-						break ;
-					bytes = chunk_size ;
-					bytes -= psf_binheader_readf (psf, "E2", &count) ;
-					psf_log_printf (psf, " %M : %d\n  count  : %d\n", marker, chunk_size, count) ;
-
-					for (k = 0 ; k < count ; k++)
-					{	bytes -= psf_binheader_readf (psf, "E422", &timestamp, &id, &len) ;
-						psf_log_printf (psf, "   time   : 0x%x\n   marker : %x\n   length : %d\n", timestamp, id, len) ;
-
-						if (len + 1 > SIGNED_SIZEOF (ubuf.scbuf))
-						{	psf_log_printf (psf, "\nError : string length (%d) too big.\n", len) ;
-							return SFE_INTERNAL ;
-							} ;
-
-						cptr = ubuf.cbuf ;
-						bytes -= psf_binheader_readf (psf, "b", cptr, len) ;
-						cptr [len] = 0 ;
-						psf_log_printf (psf, "   string : %s\n", cptr) ;
-						} ;
-
-					if (bytes > 0)
-						psf_binheader_readf (psf, "j", bytes) ;
-					} ;
-					break ;
-
-			case APPL_MARKER :
-				{	unsigned appl_marker ;
-
-					if (chunk_size == 0)
-						break ;
-					if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 1)
-					{	psf_log_printf (psf, " %M : %d (too big, skipping)\n", marker, chunk_size) ;
-						psf_binheader_readf (psf, "j", chunk_size + (chunk_size & 1)) ;
-						break ;
-						} ;
-
-					if (chunk_size < 4)
-					{	psf_log_printf (psf, " %M : %d (too small, skipping)\n", marker, chunk_size) ;
-						psf_binheader_readf (psf, "j", chunk_size + (chunk_size & 1)) ;
-						break ;
-						} ;
-
-					cptr = ubuf.cbuf ;
-					psf_binheader_readf (psf, "mb", &appl_marker, cptr, chunk_size + (chunk_size & 1) - 4) ;
-					cptr [chunk_size] = 0 ;
-
-					for (k = 0 ; k < (int) chunk_size ; k++)
-						if (! psf_isprint (cptr [k]))
-						{	cptr [k] = 0 ;
-							break ;
-							} ;
-
-					psf_log_printf (psf, " %M : %d\n  AppSig : %M\n  Name   : %s\n", marker, chunk_size, appl_marker, cptr) ;
-					psf_store_string (psf, SF_STR_SOFTWARE, cptr) ;
-					chunk_size += chunk_size & 1 ;
-					} ;
-					break ;
-
-			case NAME_MARKER :
-					if (chunk_size == 0)
-						break ;
-					if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 2)
-					{	psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-						return SFE_INTERNAL ;
-						} ;
-
-					cptr = ubuf.cbuf ;
-					psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-					cptr [chunk_size] = 0 ;
-					psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-					psf_store_string (psf, SF_STR_TITLE, cptr) ;
-					chunk_size += chunk_size & 1 ;
-					break ;
-
-			case ANNO_MARKER :
-					if (chunk_size == 0)
-						break ;
-					if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 2)
-					{	psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-						return SFE_INTERNAL ;
-						} ;
-
-					cptr = ubuf.cbuf ;
-					psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-					cptr [chunk_size] = 0 ;
-					psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-					psf_store_string (psf, SF_STR_COMMENT, cptr) ;
-					chunk_size += chunk_size & 1 ;
-					break ;
-
-			case INST_MARKER :
-					if (chunk_size != SIZEOF_INST_CHUNK)
-					{	psf_log_printf (psf, " %M : %d (should be %d)\n", marker, chunk_size, SIZEOF_INST_CHUNK) ;
-						psf_binheader_readf (psf, "j", chunk_size) ;
-						break ;
-						} ;
-					psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-					{	unsigned char bytes [6] ;
-						short gain ;
-
-						if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-							return SFE_MALLOC_FAILED ;
-
-						psf_binheader_readf (psf, "b", bytes, 6) ;
-						psf_log_printf (psf, "  Base Note : %u\n  Detune    : %u\n"
-											"  Low  Note : %u\n  High Note : %u\n"
-											"  Low  Vel. : %u\n  High Vel. : %u\n",
-											bytes [0], bytes [1], bytes [2], bytes [3], bytes [4], bytes [5]) ;
-						psf->instrument->basenote = bytes [0] ;
-						psf->instrument->detune = bytes [1] ;
-						psf->instrument->key_lo = bytes [2] ;
-						psf->instrument->key_hi = bytes [3] ;
-						psf->instrument->velocity_lo = bytes [4] ;
-						psf->instrument->velocity_hi = bytes [5] ;
-						psf_binheader_readf (psf, "E2", &gain) ;
-						psf->instrument->gain = gain ;
-						psf_log_printf (psf, "  Gain (dB) : %d\n", gain) ;
-						} ;
-					{	short	mode ; /* 0 - no loop, 1 - forward looping, 2 - backward looping */
-						const char	*loop_mode ;
-						unsigned short begin, end ;
-
-						psf_binheader_readf (psf, "E222", &mode, &begin, &end) ;
-						loop_mode = get_loop_mode_str (mode) ;
-						mode = get_loop_mode (mode) ;
-						if (mode == SF_LOOP_NONE)
-						{	psf->instrument->loop_count = 0 ;
-							psf->instrument->loops [0].mode = SF_LOOP_NONE ;
-							}
-						else
-						{	psf->instrument->loop_count = 1 ;
-							psf->instrument->loops [0].mode = SF_LOOP_FORWARD ;
-							psf->instrument->loops [0].start = begin ;
-							psf->instrument->loops [0].end = end ;
-							psf->instrument->loops [0].count = 0 ;
-							} ;
-						psf_log_printf (psf, "  Sustain\n   mode  : %d => %s\n   begin : %u\n   end   : %u\n",
-											mode, loop_mode, begin, end) ;
-						psf_binheader_readf (psf, "E222", &mode, &begin, &end) ;
-						loop_mode = get_loop_mode_str (mode) ;
-						mode = get_loop_mode (mode) ;
-						if (mode == SF_LOOP_NONE)
-							psf->instrument->loops [1].mode = SF_LOOP_NONE ;
-						else
-						{	psf->instrument->loop_count += 1 ;
-							psf->instrument->loops [1].mode = SF_LOOP_FORWARD ;
-							psf->instrument->loops [1].start = begin ;
-							psf->instrument->loops [1].end = end ;
-							psf->instrument->loops [1].count = 0 ;
-							} ;
-						psf_log_printf (psf, "  Release\n   mode  : %d => %s\n   begin : %u\n   end   : %u\n",
-										mode, loop_mode, begin, end) ;
-						} ;
-					instr_found++ ;
-					break ;
-
-			case basc_MARKER :
-					psf_log_printf (psf, " basc : %u\n", chunk_size) ;
-
-					if ((error = aiff_read_basc_chunk (psf, chunk_size)))
-						return error ;
-					break ;
-
-			case MARK_MARKER :
-					psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-					{	unsigned short mark_id, n = 0 ;
-						unsigned int position ;
-
-						bytesread = psf_binheader_readf (psf, "E2", &n) ;
-						mark_count = n ;
-						psf_log_printf (psf, "  Count : %d\n", mark_count) ;
-						if (paiff->markstr != NULL)
-						{	psf_log_printf (psf, "*** Second MARK chunk found. Throwing away the first.\n") ;
-							free (paiff->markstr) ;
-							} ;
-						paiff->markstr = calloc (mark_count, sizeof (MARK_ID_POS)) ;
-						if (paiff->markstr == NULL)
-							return SFE_MALLOC_FAILED ;
-
-						for (n = 0 ; n < mark_count && bytesread < chunk_size ; n++)
-						{	unsigned int pstr_len ;
-							unsigned char ch ;
-
-							bytesread += psf_binheader_readf (psf, "E241", &mark_id, &position, &ch) ;
-							psf_log_printf (psf, "   Mark ID  : %u\n   Position : %u\n", mark_id, position) ;
-
-							pstr_len = (ch & 1) ? ch : ch + 1 ;
-
-							if (pstr_len < sizeof (ubuf.scbuf) - 1)
-							{	bytesread += psf_binheader_readf (psf, "b", ubuf.scbuf, pstr_len) ;
-								ubuf.scbuf [pstr_len] = 0 ;
-								}
-							else
-							{	unsigned int read_len = pstr_len - (sizeof (ubuf.scbuf) - 1) ;
-								bytesread += psf_binheader_readf (psf, "bj", ubuf.scbuf, read_len, pstr_len - read_len) ;
-								ubuf.scbuf [sizeof (ubuf.scbuf) - 1] = 0 ;
-								}
-
-							psf_log_printf (psf, "   Name     : %s\n", ubuf.scbuf) ;
-
-							paiff->markstr [n].markerID = mark_id ;
-							paiff->markstr [n].position = position ;
-							/*
-							**	TODO if ubuf.scbuf is equal to
-							**	either Beg_loop, Beg loop or beg loop and spam
-							**	if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-							**		return SFE_MALLOC_FAILED ;
-							*/
-							} ;
-						} ;
-					mark_found++ ;
-					psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-					break ;
-
-			case FVER_MARKER :
-					found_chunk |= HAVE_FVER ;
-					/* Fall through to next case. */
-
-			case SFX_MARKER :
-					psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-					psf_binheader_readf (psf, "j", chunk_size) ;
-					break ;
-
-			case NONE_MARKER :
-					/* Fix for broken AIFC files with incorrect COMM chunk length. */
-					chunk_size = (chunk_size >> 24) - 3 ;
-					psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-					psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-					break ;
-
-			case CHAN_MARKER :
-					if (chunk_size < 12)
-					{	psf_log_printf (psf, " %M : %d (should be >= 12)\n", marker, chunk_size) ;
-						psf_binheader_readf (psf, "j", chunk_size) ;
-						break ;
-						}
-
-					psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-
-					if ((error = aiff_read_chanmap (psf, chunk_size)))
-						return error ;
-					break ;
-
-			default :
-					if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-						&& psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-					{	psf_log_printf (psf, " %M : %d (unknown marker)\n", marker, chunk_size) ;
-
-						psf_binheader_readf (psf, "j", chunk_size) ;
-						break ;
-						} ;
-					if ((chunk_size = psf_ftell (psf)) & 0x03)
-					{	psf_log_printf (psf, "  Unknown chunk marker %X at position %d. Resyncing.\n", marker, chunk_size - 4) ;
-
-						psf_binheader_readf (psf, "j", -3) ;
-						break ;
-						} ;
-					psf_log_printf (psf, "*** Unknown chunk marker %X at position %D. Exiting parser.\n", marker, psf_ftell (psf)) ;
-					done = 1 ;
-					break ;
-			} ;	/* switch (marker) */
-
-		if ((! psf->sf.seekable) && (found_chunk & HAVE_SSND))
-			break ;
-
-		if (psf_ftell (psf) >= psf->filelength - (2 * SIGNED_SIZEOF (int32_t)))
-			break ;
-		} ; /* while (1) */
-
-	if (instr_found && mark_found)
-	{	int j ;
-
-		for (j = 0 ; j < psf->instrument->loop_count ; j ++)
-		{	if (j < ARRAY_LEN (psf->instrument->loops))
-			{	psf->instrument->loops [j].start = marker_to_position (paiff->markstr, psf->instrument->loops [j].start, mark_count) ;
-				psf->instrument->loops [j].end = marker_to_position (paiff->markstr, psf->instrument->loops [j].end, mark_count) ;
-				psf->instrument->loops [j].mode = SF_LOOP_FORWARD ;
-				} ;
-			} ;
-		} ;
-
-	if (! (found_chunk & HAVE_FORM))
-		return SFE_AIFF_NO_FORM ;
-
-	if (! (found_chunk & HAVE_AIFF))
-		return SFE_AIFF_COMM_NO_FORM ;
-
-	if (! (found_chunk & HAVE_COMM))
-		return SFE_AIFF_SSND_NO_COMM ;
-
-	if (! psf->dataoffset)
-		return SFE_AIFF_NO_DATA ;
-
-	return 0 ;
-} /* aiff_read_header */
-
-static int
-aiff_close (SF_PRIVATE *psf)
-{	AIFF_PRIVATE *paiff = psf->container_data ;
-
-	if (paiff != NULL && paiff->markstr != NULL)
-	{	free (paiff->markstr) ;
-		paiff->markstr = NULL ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	aiff_write_tailer (psf) ;
-		aiff_write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* aiff_close */
-
-static int
-aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
-{	BUF_UNION	ubuf ;
-	int subformat, samplerate ;
-
-	ubuf.scbuf [0] = 0 ;
-
-	/* The COMM chunk has an int aligned to an odd word boundary. Some
-	** procesors are not able to deal with this (ie bus fault) so we have
-	** to take special care.
-	*/
-
-	psf_binheader_readf (psf, "E242b", &(comm_fmt->numChannels), &(comm_fmt->numSampleFrames),
-				&(comm_fmt->sampleSize), &(comm_fmt->sampleRate), SIGNED_SIZEOF (comm_fmt->sampleRate)) ;
-
-	if (comm_fmt->size > 0x10000 && (comm_fmt->size & 0xffff) == 0)
-	{	psf_log_printf (psf, " COMM : %d (0x%x) *** should be ", comm_fmt->size, comm_fmt->size) ;
-		comm_fmt->size = ENDSWAP_32 (comm_fmt->size) ;
-		psf_log_printf (psf, "%d (0x%x)\n", comm_fmt->size, comm_fmt->size) ;
-		}
-	else
-		psf_log_printf (psf, " COMM : %d\n", comm_fmt->size) ;
-
-	if (comm_fmt->size == SIZEOF_AIFF_COMM)
-		comm_fmt->encoding = NONE_MARKER ;
-	else if (comm_fmt->size == SIZEOF_AIFC_COMM_MIN)
-		psf_binheader_readf (psf, "Em", &(comm_fmt->encoding)) ;
-	else if (comm_fmt->size >= SIZEOF_AIFC_COMM)
-	{	unsigned char encoding_len ;
-		unsigned read_len ;
-
-		psf_binheader_readf (psf, "Em1", &(comm_fmt->encoding), &encoding_len) ;
-
-		comm_fmt->size = SF_MIN (sizeof (ubuf.scbuf), make_size_t (comm_fmt->size)) ;
-		memset (ubuf.scbuf, 0, comm_fmt->size) ;
-		read_len = comm_fmt->size - SIZEOF_AIFC_COMM + 1 ;
-		psf_binheader_readf (psf, "b", ubuf.scbuf, read_len) ;
-		ubuf.scbuf [read_len + 1] = 0 ;
-		} ;
-
-	samplerate = tenbytefloat2int (comm_fmt->sampleRate) ;
-
-	psf_log_printf (psf, "  Sample Rate : %d\n", samplerate) ;
-	psf_log_printf (psf, "  Frames      : %u%s\n", comm_fmt->numSampleFrames, (comm_fmt->numSampleFrames == 0 && psf->filelength > 104) ? " (Should not be 0)" : "") ;
-	psf_log_printf (psf, "  Channels    : %d\n", comm_fmt->numChannels) ;
-
-	/* Found some broken 'fl32' files with comm.samplesize == 16. Fix it here. */
-	if ((comm_fmt->encoding == fl32_MARKER || comm_fmt->encoding == FL32_MARKER) && comm_fmt->sampleSize != 32)
-	{	psf_log_printf (psf, "  Sample Size : %d (should be 32)\n", comm_fmt->sampleSize) ;
-		comm_fmt->sampleSize = 32 ;
-		}
-	else if ((comm_fmt->encoding == fl64_MARKER || comm_fmt->encoding == FL64_MARKER) && comm_fmt->sampleSize != 64)
-	{	psf_log_printf (psf, "  Sample Size : %d (should be 64)\n", comm_fmt->sampleSize) ;
-		comm_fmt->sampleSize = 64 ;
-		}
-	else
-		psf_log_printf (psf, "  Sample Size : %d\n", comm_fmt->sampleSize) ;
-
-	subformat = s_bitwidth_to_subformat (comm_fmt->sampleSize) ;
-
-	psf->sf.samplerate = samplerate ;
-	psf->sf.frames = comm_fmt->numSampleFrames ;
-	psf->sf.channels = comm_fmt->numChannels ;
-	psf->bytewidth = BITWIDTH2BYTES (comm_fmt->sampleSize) ;
-
-	psf->endian = SF_ENDIAN_BIG ;
-
-	switch (comm_fmt->encoding)
-	{	case NONE_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | subformat) ;
-				break ;
-
-		case twos_MARKER :
-		case in24_MARKER :
-		case in32_MARKER :
-				psf->sf.format = (SF_ENDIAN_BIG | SF_FORMAT_AIFF | subformat) ;
-				break ;
-
-		case sowt_MARKER :
-		case ni24_MARKER :
-		case ni32_MARKER :
-				psf->endian = SF_ENDIAN_LITTLE ;
-				psf->sf.format = (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | subformat) ;
-				break ;
-
-		case fl32_MARKER :
-		case FL32_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-				break ;
-
-		case ulaw_MARKER :
-		case ULAW_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ULAW) ;
-				break ;
-
-		case alaw_MARKER :
-		case ALAW_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ALAW) ;
-				break ;
-
-		case fl64_MARKER :
-		case FL64_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_DOUBLE) ;
-				break ;
-
-		case raw_MARKER :
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-				break ;
-
-		case DWVW_MARKER :
-				psf->sf.format = SF_FORMAT_AIFF ;
-				switch (comm_fmt->sampleSize)
-				{	case 12 :
-						psf->sf.format |= SF_FORMAT_DWVW_12 ;
-						break ;
-					case 16 :
-						psf->sf.format |= SF_FORMAT_DWVW_16 ;
-						break ;
-					case 24 :
-						psf->sf.format |= SF_FORMAT_DWVW_24 ;
-						break ;
-
-					default :
-						psf->sf.format |= SF_FORMAT_DWVW_N ;
-						break ;
-					} ;
-				break ;
-
-		case GSM_MARKER :
-				psf->sf.format = SF_FORMAT_AIFF ;
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_GSM610) ;
-				break ;
-
-
-		case ima4_MARKER :
-				psf->endian = SF_ENDIAN_BIG ;
-				psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM) ;
-				break ;
-
-		default :
-			psf_log_printf (psf, "AIFC : Unimplemented format : %M\n", comm_fmt->encoding) ;
-			return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (! ubuf.scbuf [0])
-		psf_log_printf (psf, "  Encoding    : %M\n", comm_fmt->encoding) ;
-	else
-		psf_log_printf (psf, "  Encoding    : %M => %s\n", comm_fmt->encoding, ubuf.scbuf) ;
-
-	return 0 ;
-} /* aiff_read_comm_chunk */
-
-
-/*==========================================================================================
-*/
-
-static void
-aiff_rewrite_header (SF_PRIVATE *psf)
-{
-	/* Assuming here that the header has already been written and just
-	** needs to be corrected for new data length. That means that we
-	** only change the length fields of the FORM and SSND chunks ;
-	** everything else can be skipped over.
-	*/
-	int k, ch, comm_size, comm_frames ;
-
-	psf_fseek (psf, 0, SEEK_SET) ;
-	psf_fread (psf->header, psf->dataoffset, 1, psf) ;
-
-	psf->headindex = 0 ;
-
-	/* FORM chunk. */
-	psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
-
-	/* COMM chunk. */
-	if ((k = psf_find_read_chunk_m32 (&psf->rchunks, COMM_MARKER)) >= 0)
-	{	psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-		comm_frames = psf->sf.frames ;
-		comm_size = psf->rchunks.chunks [k].len ;
-		psf_binheader_writef (psf, "Em42t4", COMM_MARKER, comm_size, psf->sf.channels, comm_frames) ;
-		} ;
-
-	/* PEAK chunk. */
-	if ((k = psf_find_read_chunk_m32 (&psf->rchunks, PEAK_MARKER)) >= 0)
-	{	psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-		psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-		for (ch = 0 ; ch < psf->sf.channels ; ch++)
-			psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [ch].value, psf->peak_info->peaks [ch].position) ;
-		} ;
-
-
-	/* SSND chunk. */
-	if ((k = psf_find_read_chunk_m32 (&psf->rchunks, SSND_MARKER)) >= 0)
-	{	psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-		psf_binheader_writef (psf, "Etm8", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK) ;
-		} ;
-
-	/* Header mangling complete so write it out. */
-	psf_fseek (psf, 0, SEEK_SET) ;
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	return ;
-} /* aiff_rewrite_header */
-
-static int
-aiff_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t		current ;
-	AIFF_PRIVATE	*paiff ;
-	unsigned char	comm_sample_rate [10], comm_zero_bytes [2] = { 0, 0 } ;
-	unsigned int	comm_type, comm_size, comm_encoding, comm_frames = 0, uk ;
-	int				k, endian, has_data = SF_FALSE ;
-	short			bit_width ;
-
-	if ((paiff = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	current = psf_ftell (psf) ;
-
-	if (current > psf->dataoffset)
-		has_data = SF_TRUE ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		if (psf->bytewidth > 0)
-			psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	if (psf->file.mode == SFM_RDWR && psf->dataoffset > 0 && psf->rchunks.count > 0)
-	{	aiff_rewrite_header (psf) ;
-		if (current > 0)
-			psf_fseek (psf, current, SEEK_SET) ;
-		return 0 ;
-		} ;
-
-	endian = SF_ENDIAN (psf->sf.format) ;
-	if (CPU_IS_LITTLE_ENDIAN && endian == SF_ENDIAN_CPU)
-		endian = SF_ENDIAN_LITTLE ;
-
-	/* Standard value here. */
-	bit_width = psf->bytewidth * 8 ;
-	comm_frames = (psf->sf.frames > 0xFFFFFFFF) ? 0xFFFFFFFF : psf->sf.frames ;
-
-	switch (SF_CODEC (psf->sf.format) | endian)
-	{	case SF_FORMAT_PCM_S8 | SF_ENDIAN_BIG :
-			psf->endian = SF_ENDIAN_BIG ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = twos_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_S8 | SF_ENDIAN_LITTLE :
-			psf->endian = SF_ENDIAN_LITTLE ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = sowt_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_16 | SF_ENDIAN_BIG :
-			psf->endian = SF_ENDIAN_BIG ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = twos_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE :
-			psf->endian = SF_ENDIAN_LITTLE ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = sowt_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_24 | SF_ENDIAN_BIG :
-			psf->endian = SF_ENDIAN_BIG ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = in24_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_24 | SF_ENDIAN_LITTLE :
-			psf->endian = SF_ENDIAN_LITTLE ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = ni24_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_32 | SF_ENDIAN_BIG :
-			psf->endian = SF_ENDIAN_BIG ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = in32_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_32 | SF_ENDIAN_LITTLE :
-			psf->endian = SF_ENDIAN_LITTLE ;
-			comm_type = AIFC_MARKER ;
-			comm_size = SIZEOF_AIFC_COMM ;
-			comm_encoding = ni32_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_S8 :			/* SF_ENDIAN_FILE */
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-			psf->endian = SF_ENDIAN_BIG ;
-			comm_type = AIFF_MARKER ;
-			comm_size = SIZEOF_AIFF_COMM ;
-			comm_encoding = 0 ;
-			break ;
-
-		case SF_FORMAT_FLOAT :					/* Big endian floating point. */
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = FL32_MARKER ;	/* Use 'FL32' because its easier to read. */
-				break ;
-
-		case SF_FORMAT_DOUBLE :					/* Big endian double precision floating point. */
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = FL64_MARKER ;	/* Use 'FL64' because its easier to read. */
-				break ;
-
-		case SF_FORMAT_ULAW :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = ulaw_MARKER ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = alaw_MARKER ;
-				break ;
-
-		case SF_FORMAT_PCM_U8 :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = raw_MARKER ;
-				break ;
-
-		case SF_FORMAT_DWVW_12 :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = DWVW_MARKER ;
-
-				/* Override standard value here.*/
-				bit_width = 12 ;
-				break ;
-
-		case SF_FORMAT_DWVW_16 :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = DWVW_MARKER ;
-
-				/* Override standard value here.*/
-				bit_width = 16 ;
-				break ;
-
-		case SF_FORMAT_DWVW_24 :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = DWVW_MARKER ;
-
-				/* Override standard value here.*/
-				bit_width = 24 ;
-				break ;
-
-		case SF_FORMAT_GSM610 :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = GSM_MARKER ;
-
-				/* Override standard value here.*/
-				bit_width = 16 ;
-				break ;
-
-		case SF_FORMAT_IMA_ADPCM :
-				psf->endian = SF_ENDIAN_BIG ;
-				comm_type = AIFC_MARKER ;
-				comm_size = SIZEOF_AIFC_COMM ;
-				comm_encoding = ima4_MARKER ;
-
-				/* Override standard value here.*/
-				bit_width = 16 ;
-				comm_frames = psf->sf.frames / AIFC_IMA4_SAMPLES_PER_BLOCK ;
-				break ;
-
-		default : return SFE_BAD_OPEN_FORMAT ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
-
-	/* Write AIFF/AIFC marker and COM chunk. */
-	if (comm_type == AIFC_MARKER)
-		/* AIFC must have an FVER chunk. */
-		psf_binheader_writef (psf, "Emm44", comm_type, FVER_MARKER, 4, 0xA2805140) ;
-	else
-		psf_binheader_writef (psf, "Em", comm_type) ;
-
-	paiff->comm_offset = psf->headindex - 8 ;
-
-	memset (comm_sample_rate, 0, sizeof (comm_sample_rate)) ;
-	uint2tenbytefloat (psf->sf.samplerate, comm_sample_rate) ;
-
-	psf_binheader_writef (psf, "Em42t42", COMM_MARKER, comm_size, psf->sf.channels, comm_frames, bit_width) ;
-	psf_binheader_writef (psf, "b", comm_sample_rate, sizeof (comm_sample_rate)) ;
-
-	/* AIFC chunks have some extra data. */
-	if (comm_type == AIFC_MARKER)
-		psf_binheader_writef (psf, "mb", comm_encoding, comm_zero_bytes, sizeof (comm_zero_bytes)) ;
-
-	if (psf->channel_map && paiff->chanmap_tag)
-		psf_binheader_writef (psf, "Em4444", CHAN_MARKER, 12, paiff->chanmap_tag, 0, 0) ;
-
-	if (psf->instrument != NULL)
-	{	MARK_ID_POS	m [4] ;
-		INST_CHUNK ch ;
-		unsigned short ct = 0 ;
-
-		memset (m, 0, sizeof (m)) ;
-		memset (&ch, 0, sizeof (ch)) ;
-
-		ch.baseNote = psf->instrument->basenote ;
-		ch.detune = psf->instrument->detune ;
-		ch.lowNote = psf->instrument->key_lo ;
-		ch.highNote = psf->instrument->key_hi ;
-		ch.lowVelocity = psf->instrument->velocity_lo ;
-		ch.highVelocity = psf->instrument->velocity_hi ;
-		ch.gain = psf->instrument->gain ;
-		if (psf->instrument->loops [0].mode != SF_LOOP_NONE)
-		{	ch.sustain_loop.playMode = 1 ;
-			ch.sustain_loop.beginLoop = ct ;
-			m [0].markerID = ct++ ;
-			m [0].position = psf->instrument->loops [0].start ;
-			ch.sustain_loop.endLoop = ct ;
-			m [1].markerID = ct++ ;
-			m [1].position = psf->instrument->loops [0].end ;
-			} ;
-		if (psf->instrument->loops [1].mode != SF_LOOP_NONE)
-		{	ch.release_loop.playMode = 1 ;
-			ch.release_loop.beginLoop = ct ;
-			m [2].markerID = ct++ ;
-			m [2].position = psf->instrument->loops [1].start ;
-			ch.release_loop.endLoop = ct ;
-			m [3].markerID = ct++ ;
-			m [3].position = psf->instrument->loops [1].end ;
-			}
-		else
-		{	ch.release_loop.playMode = 0 ;
-			ch.release_loop.beginLoop = 0 ;
-			ch.release_loop.endLoop = 0 ;
-			} ;
-
-		psf_binheader_writef (psf, "Em4111111", INST_MARKER, SIZEOF_INST_CHUNK, ch.baseNote, ch.detune,
-						ch.lowNote, ch.highNote, ch.lowVelocity, ch.highVelocity) ;
-		psf_binheader_writef (psf, "2222222", ch.gain, ch.sustain_loop.playMode,
-						ch.sustain_loop.beginLoop, ch.sustain_loop.endLoop, ch.release_loop.playMode,
-						ch.release_loop.beginLoop, ch.release_loop.endLoop) ;
-
-		if (ct == 2)
-			psf_binheader_writef (psf, "Em42241b241b",
-					MARK_MARKER, 2 + 2 * (2 + 4 + 1 + 9), 2,
-					m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9),
-					m [1].markerID, m [1].position, 8, "end loop", make_size_t (9)) ;
-		else if (ct == 4)
-			psf_binheader_writef (psf, "Em42 241b 241b 241b 241b",
-					MARK_MARKER, 2 + 4 * (2 + 4 + 1 + 9), 4,
-					m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9),
-					m [1].markerID, m [1].position, 8, "end loop", make_size_t (9),
-					m [2].markerID, m [2].position, 8, "beg loop", make_size_t (9),
-					m [3].markerID, m [3].position, 8, "end loop", make_size_t (9)) ;
-		} ;
-
-	if (psf->strings.flags & SF_STR_LOCATE_START)
-		aiff_write_strings (psf, SF_STR_LOCATE_START) ;
-
-	if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-	{	psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-	/* Write custom headers. */
-	for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-		psf_binheader_writef (psf, "Em4b", psf->wchunks.chunks [uk].mark32, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-	/* Write SSND chunk. */
-	paiff->ssnd_offset = psf->headindex ;
-	psf_binheader_writef (psf, "Etm844", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK, 0, 0) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	if (has_data && psf->dataoffset != psf->headindex)
-		return psf->error = SFE_INTERNAL ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (! has_data)
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-	else if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* aiff_write_header */
-
-static int
-aiff_write_tailer (SF_PRIVATE *psf)
-{	int		k ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	psf->dataend = psf_fseek (psf, 0, SEEK_END) ;
-
-	/* Make sure tailer data starts at even byte offset. Pad if necessary. */
-	if (psf->dataend % 2 == 1)
-	{	psf_fwrite (psf->header, 1, 1, psf) ;
-		psf->dataend ++ ;
-		} ;
-
-	if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END)
-	{	psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-	if (psf->strings.flags & SF_STR_LOCATE_END)
-		aiff_write_strings (psf, SF_STR_LOCATE_END) ;
-
-	/* Write the tailer. */
-	if (psf->headindex > 0)
-		psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	return 0 ;
-} /* aiff_write_tailer */
-
-static void
-aiff_write_strings (SF_PRIVATE *psf, int location)
-{	int	k, slen ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-	{	if (psf->strings.data [k].type == 0)
-			break ;
-
-		if (psf->strings.data [k].flags != location)
-			continue ;
-
-		switch (psf->strings.data [k].type)
-		{	case SF_STR_SOFTWARE :
-				slen = strlen (psf->strings.storage + psf->strings.data [k].offset) ;
-				psf_binheader_writef (psf, "Em4mb", APPL_MARKER, slen + 4, m3ga_MARKER, psf->strings.storage + psf->strings.data [k].offset, make_size_t (slen + (slen & 1))) ;
-				break ;
-
-			case SF_STR_TITLE :
-				psf_binheader_writef (psf, "EmS", NAME_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_COPYRIGHT :
-				psf_binheader_writef (psf, "EmS", c_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_ARTIST :
-				psf_binheader_writef (psf, "EmS", AUTH_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_COMMENT :
-				psf_binheader_writef (psf, "EmS", ANNO_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			/*
-			case SF_STR_DATE :
-				psf_binheader_writef (psf, "Ems", ICRD_MARKER, psf->strings.data [k].str) ;
-				break ;
-			*/
-			} ;
-		} ;
-
-	return ;
-} /* aiff_write_strings */
-
-static int
-aiff_command (SF_PRIVATE * psf, int command, void * UNUSED (data), int UNUSED (datasize))
-{	AIFF_PRIVATE	*paiff ;
-
-	if ((paiff = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	switch (command)
-	{	case SFC_SET_CHANNEL_MAP_INFO :
-			paiff->chanmap_tag = aiff_caf_find_channel_layout_tag (psf->channel_map, psf->sf.channels) ;
-			return (paiff->chanmap_tag != 0) ;
-
-		default :
-			break ;
-	} ;
-
-	return 0 ;
-} /* aiff_command */
-
-static const char*
-get_loop_mode_str (short mode)
-{	switch (mode)
-	{	case 0 : return "none" ;
-		case 1 : return "forward" ;
-		case 2 : return "backward" ;
-		} ;
-
-	return "*** unknown" ;
-} /* get_loop_mode_str */
-
-static short
-get_loop_mode (short mode)
-{	switch (mode)
-	{	case 0 : return SF_LOOP_NONE ;
-		case 1 : return SF_LOOP_FORWARD ;
-		case 2 : return SF_LOOP_BACKWARD ;
-		} ;
-
-	return SF_LOOP_NONE ;
-} /* get_loop_mode */
-
-/*==========================================================================================
-**	Rough hack at converting from 80 bit IEEE float in AIFF header to an int and
-**	back again. It assumes that all sample rates are between 1 and 800MHz, which
-**	should be OK as other sound file formats use a 32 bit integer to store sample
-**	rate.
-**	There is another (probably better) version in the source code to the SoX but it
-**	has a copyright which probably prevents it from being allowable as GPL/LGPL.
-*/
-
-static int
-tenbytefloat2int (unsigned char *bytes)
-{	int val = 3 ;
-
-	if (bytes [0] & 0x80)	/* Negative number. */
-		return 0 ;
-
-	if (bytes [0] <= 0x3F)	/* Less than 1. */
-		return 1 ;
-
-	if (bytes [0] > 0x40)	/* Way too big. */
-		return 0x4000000 ;
-
-	if (bytes [0] == 0x40 && bytes [1] > 0x1C) /* Too big. */
-		return 800000000 ;
-
-	/* Ok, can handle it. */
-
-	val = (bytes [2] << 23) | (bytes [3] << 15) | (bytes [4] << 7) | (bytes [5] >> 1) ;
-
-	val >>= (29 - bytes [1]) ;
-
-	return val ;
-} /* tenbytefloat2int */
-
-static void
-uint2tenbytefloat (unsigned int num, unsigned char *bytes)
-{	unsigned int mask = 0x40000000 ;
-	int	count ;
-
-	if (num <= 1)
-	{	bytes [0] = 0x3F ;
-		bytes [1] = 0xFF ;
-		bytes [2] = 0x80 ;
-		return ;
-		} ;
-
-	bytes [0] = 0x40 ;
-
-	if (num >= mask)
-	{	bytes [1] = 0x1D ;
-		return ;
-		} ;
-
-	for (count = 0 ; count <= 32 ; count ++)
-	{	if (num & mask)
-			break ;
-		mask >>= 1 ;
-		} ;
-
-	num <<= count + 1 ;
-	bytes [1] = 29 - count ;
-	bytes [2] = (num >> 24) & 0xFF ;
-	bytes [3] = (num >> 16) & 0xFF ;
-	bytes [4] = (num >> 8) & 0xFF ;
-	bytes [5] = num & 0xFF ;
-
-} /* uint2tenbytefloat */
-
-static int
-aiff_read_basc_chunk (SF_PRIVATE * psf, int datasize)
-{	const char * type_str ;
-	basc_CHUNK bc ;
-	int count ;
-
-	count = psf_binheader_readf (psf, "E442", &bc.version, &bc.numBeats, &bc.rootNote) ;
-	count += psf_binheader_readf (psf, "E222", &bc.scaleType, &bc.sigNumerator, &bc.sigDenominator) ;
-	count += psf_binheader_readf (psf, "E2j", &bc.loopType, datasize - sizeof (bc)) ;
-
-	psf_log_printf (psf, "  Version ? : %u\n  Num Beats : %u\n  Root Note : 0x%x\n",
-						bc.version, bc.numBeats, bc.rootNote) ;
-
-	switch (bc.scaleType)
-	{	case basc_SCALE_MINOR :
-				type_str = "MINOR" ;
-				break ;
-		case basc_SCALE_MAJOR :
-				type_str = "MAJOR" ;
-				break ;
-		case basc_SCALE_NEITHER :
-				type_str = "NEITHER" ;
-				break ;
-		case basc_SCALE_BOTH :
-				type_str = "BOTH" ;
-				break ;
-		default :
-				type_str = "!!WRONG!!" ;
-				break ;
-		} ;
-
-	psf_log_printf (psf, "  ScaleType : 0x%x (%s)\n", bc.scaleType, type_str) ;
-	psf_log_printf (psf, "  Time Sig  : %d/%d\n", bc.sigNumerator, bc.sigDenominator) ;
-
-	switch (bc.loopType)
-	{	case basc_TYPE_ONE_SHOT :
-				type_str = "One Shot" ;
-				break ;
-		case basc_TYPE_LOOP :
-				type_str = "Loop" ;
-				break ;
-		default:
-				type_str = "!!WRONG!!" ;
-				break ;
-		} ;
-
-	psf_log_printf (psf, "  Loop Type : 0x%x (%s)\n", bc.loopType, type_str) ;
-
-	if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->loop_info->time_sig_num	= bc.sigNumerator ;
-	psf->loop_info->time_sig_den	= bc.sigDenominator ;
-	psf->loop_info->loop_mode		= (bc.loopType == basc_TYPE_ONE_SHOT) ? SF_LOOP_NONE : SF_LOOP_FORWARD ;
-	psf->loop_info->num_beats		= bc.numBeats ;
-
-	/* Can always be recalculated from other known fields. */
-	psf->loop_info->bpm = (1.0 / psf->sf.frames) * psf->sf.samplerate
-							* ((bc.numBeats * 4.0) / bc.sigDenominator) * 60.0 ;
-	psf->loop_info->root_key = bc.rootNote ;
-
-	if (count < datasize)
-		psf_binheader_readf (psf, "j", datasize - count) ;
-
-	return 0 ;
-} /* aiff_read_basc_chunk */
-
-
-static int
-aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword)
-{	const AIFF_CAF_CHANNEL_MAP * map_info ;
-	unsigned channel_bitmap, channel_decriptions, bytesread ;
-	int layout_tag ;
-
-	bytesread = psf_binheader_readf (psf, "444", &layout_tag, &channel_bitmap, &channel_decriptions) ;
-
-	if ((map_info = aiff_caf_of_channel_layout_tag (layout_tag)) == NULL)
-		return 0 ;
-
-	psf_log_printf (psf, "  Tag    : %x\n", layout_tag) ;
-	if (map_info)
-		psf_log_printf (psf, "  Layout : %s\n", map_info->name) ;
-
-	if (bytesread < dword)
-		psf_binheader_readf (psf, "j", dword - bytesread) ;
-
-	if (map_info->channel_map != NULL)
-	{	size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ;
-
-		free (psf->channel_map) ;
-
-		if ((psf->channel_map = malloc (chanmap_size)) == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		memcpy (psf->channel_map, map_info->channel_map, chanmap_size) ;
-		} ;
-
-	return 0 ;
-} /* aiff_read_chanmap */
-
-/*==============================================================================
-*/
-
-static int
-aiff_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{	return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* aiff_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-aiff_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{	return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* aiff_next_chunk_iterator */
-
-static int
-aiff_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	int indx ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-	return SFE_NO_ERROR ;
-} /* aiff_get_chunk_size */
-
-static int
-aiff_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	sf_count_t pos ;
-	int indx ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	if (chunk_info->data == NULL)
-		return SFE_BAD_CHUNK_DATA_PTR ;
-
-	chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-	memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-	pos = psf_ftell (psf) ;
-	psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-	psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-	psf_fseek (psf, pos, SEEK_SET) ;
-
-	return SFE_NO_ERROR ;
-} /* aiff_get_chunk_data */
diff --git a/libs/libsndfile/src/alac.c b/libs/libsndfile/src/alac.c
deleted file mode 100644
index 747e032769..0000000000
--- a/libs/libsndfile/src/alac.c
+++ /dev/null
@@ -1,964 +0,0 @@
-/*
-** Copyright (C) 2011-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-#include	<errno.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"ALAC/alac_codec.h"
-#include	"ALAC/ALACBitUtilities.h"
-
-#define		ALAC_MAX_FRAME_SIZE		8192
-#define		ALAC_BYTE_BUFFER_SIZE	82000
-
-
-typedef struct
-{	uint32_t	current, count, allocated ;
-	uint32_t	packet_size [] ;
-} PAKT_INFO ;
-
-typedef struct
-{	sf_count_t	input_data_pos ;
-
-	PAKT_INFO	* pakt_info ;
-
-	int			channels, final_write_block ;
-
-	uint32_t	frames_this_block, partial_block_frames, frames_per_block ;
-	uint32_t	bits_per_sample, kuki_size ;
-
-
-	/* Can't have a decoder and an encoder at the same time so stick
-	** them in an un-named union.
-	*/
-	union
-	{	ALAC_DECODER decoder ;
-		ALAC_ENCODER encoder ;
-	} ;
-
-	char enctmpname [512] ;
-	FILE *enctmp ;
-
-	int	buffer	[] ;
-
-} ALAC_PRIVATE ;
-
-/*============================================================================================
-*/
-
-static int alac_reader_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info) ;
-static int alac_writer_init (SF_PRIVATE *psf) ;
-
-static sf_count_t alac_reader_calc_frames (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-
-static sf_count_t alac_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t alac_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t alac_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t alac_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t alac_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t alac_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t alac_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t alac_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t	alac_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int	alac_close		(SF_PRIVATE *psf) ;
-static int	alac_byterate	(SF_PRIVATE *psf) ;
-
-static int alac_decode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-static int alac_encode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-
-static uint32_t alac_kuki_read (SF_PRIVATE * psf, uint32_t kuki_offset, uint8_t * kuki, size_t kuki_maxlen) ;
-
-static PAKT_INFO * alac_pakt_alloc (uint32_t initial_count) ;
-static PAKT_INFO * alac_pakt_read_decode (SF_PRIVATE * psf, uint32_t pakt_offset) ;
-static PAKT_INFO * alac_pakt_append (PAKT_INFO * info, uint32_t value) ;
-static uint8_t * alac_pakt_encode (const SF_PRIVATE *psf, uint32_t * pakt_size) ;
-static sf_count_t alac_pakt_block_offset (const PAKT_INFO *info, uint32_t block) ;
-
-/*============================================================================================
-** ALAC Reader initialisation function.
-*/
-
-int
-alac_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info)
-{	int error ;
-
-	if ((psf->codec_data = calloc (1, sizeof (ALAC_PRIVATE) + psf->sf.channels * sizeof (int) * ALAC_MAX_FRAME_SIZE)) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_close = alac_close ;
-
-	switch (psf->file.mode)
-	{	case SFM_RDWR :
-			return SFE_BAD_MODE_RW ;
-
-		case SFM_READ :
-			if ((error = alac_reader_init (psf, info)))
-				return error ;
-			break ;
-
-		case SFM_WRITE :
-			if ((error = alac_writer_init (psf)))
-				return error ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "%s : Bad psf->file.mode.\n", __func__) ;
-			return SFE_INTERNAL ;
-		} ;
-
-	psf->byterate = alac_byterate ;
-
-	return 0 ;
-} /* aiff_alac_init */
-
-void
-alac_get_desc_chunk_items (int subformat, uint32_t *fmt_flags, uint32_t *frames_per_packet)
-{	switch (subformat)
-	{	case SF_FORMAT_ALAC_16 :
-			*fmt_flags = 1 ;
-			break ;
-		case SF_FORMAT_ALAC_20 :
-			*fmt_flags = 2 ;
-			break ;
-		case SF_FORMAT_ALAC_24 :
-			*fmt_flags = 3 ;
-			break ;
-		case SF_FORMAT_ALAC_32 :
-			*fmt_flags = 4 ;
-			break ;
-		default :
-			break ;
-		} ;
-	*frames_per_packet = ALAC_FRAME_LENGTH ;
-} /* alac_get_desc_chunk_items */
-
-static int
-alac_close	(SF_PRIVATE *psf)
-{	ALAC_PRIVATE *plac ;
-	BUF_UNION	ubuf ;
-
-	plac = psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	ALAC_ENCODER *penc = &plac->encoder ;
-		SF_CHUNK_INFO chunk_info ;
-		sf_count_t readcount ;
-		uint32_t pakt_size = 0, saved_partial_block_frames ;
-#ifndef _MSC_VER
-		uint8_t *kuki_data [plac->kuki_size];
-#else
-		uint8_t *kuki_data = (uint8_t *)_alloca(plac->kuki_size);
-#endif
-
-		plac->final_write_block = 1 ;
-		saved_partial_block_frames = plac->partial_block_frames ;
-
-		/*	If a block has been partially assembled, write it out as the final block. */
-		if (plac->partial_block_frames && plac->partial_block_frames < plac->frames_per_block)
-			alac_encode_block (psf, plac) ;
-
-		plac->partial_block_frames = saved_partial_block_frames ;
-
-		alac_get_magic_cookie (penc, kuki_data, &plac->kuki_size) ;
-
-		memset (&chunk_info, 0, sizeof (chunk_info)) ;
-		chunk_info.id_size = snprintf (chunk_info.id, sizeof (chunk_info.id), "kuki") ;
-		chunk_info.data = kuki_data ;
-		chunk_info.datalen = plac->kuki_size ;
-		psf_save_write_chunk (&psf->wchunks, &chunk_info) ;
-
-		memset (&chunk_info, 0, sizeof (chunk_info)) ;
-		chunk_info.id_size = snprintf (chunk_info.id, sizeof (chunk_info.id), "pakt") ;
-		chunk_info.data = alac_pakt_encode (psf, &pakt_size) ;
-		chunk_info.datalen = pakt_size ;
-		psf_save_write_chunk (&psf->wchunks, &chunk_info) ;
-
-		free (chunk_info.data) ;
-		chunk_info.data = NULL ;
-
-		psf->write_header (psf, 1) ;
-
-		if (plac->enctmp != NULL)
-		{	fseek (plac->enctmp, 0, SEEK_SET) ;
-
-			while ((readcount = fread (ubuf.ucbuf, 1, sizeof (ubuf.ucbuf), plac->enctmp)) > 0)
-				psf_fwrite (ubuf.ucbuf, 1, readcount, psf) ;
-			fclose (plac->enctmp) ;
-			remove (plac->enctmpname) ;
-			} ;
-			free(kuki_data);
-		} ;
-
-	if (plac->pakt_info)
-		free (plac->pakt_info) ;
-	plac->pakt_info = NULL ;
-
-	return 0 ;
-} /* alac_close */
-
-static int
-alac_byterate	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ)
-		return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-	return -1 ;
-} /* alac_byterate */
-
-/*============================================================================================
-** ALAC initialisation Functions.
-*/
-
-static int
-alac_reader_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info)
-{	ALAC_PRIVATE	*plac ;
-	uint32_t		kuki_size ;
-	union			{ uint8_t kuki [512] ; uint32_t alignment ; } u ;
-
-	if (info == NULL)
-	{	psf_log_printf (psf, "%s : ALAC_DECODER_INFO is NULL.\n", __func__) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	plac = psf->codec_data ;
-
-	plac->channels			= psf->sf.channels ;
-	plac->frames_per_block	= info->frames_per_packet ;
-	plac->bits_per_sample	= info->bits_per_sample ;
-
-	if (plac->pakt_info != NULL)
-		free (plac->pakt_info) ;
-	plac->pakt_info = alac_pakt_read_decode (psf, info->pakt_offset) ;
-
-
-	if (plac->pakt_info == NULL)
-	{	psf_log_printf (psf, "%s : alac_pkt_read() returns NULL.\n", __func__) ;
-		return SFE_MALLOC_FAILED ;
-		} ;
-
-	/* Read in the ALAC cookie data and pass it to the init function. */
-	kuki_size = alac_kuki_read (psf, info->kuki_offset, u.kuki, sizeof (u.kuki)) ;
-
-	alac_decoder_init (&plac->decoder, u.kuki, kuki_size) ;
-
-	switch (info->bits_per_sample)
-	{	case 16 :
-		case 20 :
-		case 24 :
-		case 32 :
-			psf->read_short		= alac_read_s ;
-			psf->read_int		= alac_read_i ;
-			psf->read_float		= alac_read_f ;
-			psf->read_double	= alac_read_d ;
-			break ;
-
-		default :
-			printf ("%s : info->bits_per_sample %u\n", __func__, info->bits_per_sample) ;
-			return SFE_UNSUPPORTED_ENCODING ;
-		} ;
-
-	psf->codec_close	= alac_close ;
-	psf->seek			= alac_seek ;
-
-	psf->sf.frames		= alac_reader_calc_frames (psf, plac) ;
-	alac_seek (psf, SFM_READ, 0) ;
-
-	return 0 ;
-} /* alac_reader_init */
-
-static int
-alac_writer_init (SF_PRIVATE *psf)
-{	ALAC_PRIVATE	*plac ;
-	uint32_t		alac_format_flags = 0 ;
-
-	plac = psf->codec_data ;
-
-	if (psf->file.mode != SFM_WRITE)
-		return SFE_BAD_MODE_RW ;
-
-	plac->channels	= psf->sf.channels ;
-	plac->kuki_size = alac_get_magic_cookie_size (psf->sf.channels) ;
-
-	psf->write_short	= alac_write_s ;
-	psf->write_int		= alac_write_i ;
-	psf->write_float	= alac_write_f ;
-	psf->write_double	= alac_write_d ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_ALAC_16 :
-			alac_format_flags	= 1 ;
-			plac->bits_per_sample = 16 ;
-			break ;
-
-		case SF_FORMAT_ALAC_20 :
-			alac_format_flags	= 2 ;
-			plac->bits_per_sample = 20 ;
-			break ;
-
-		case SF_FORMAT_ALAC_24 :
-			alac_format_flags	= 3 ;
-			plac->bits_per_sample = 24 ;
-			break ;
-
-		case SF_FORMAT_ALAC_32 :
-			alac_format_flags	= 4 ;
-			plac->bits_per_sample = 32 ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "%s : Can't figure out bits per sample.\n", __func__) ;
-			return SFE_UNIMPLEMENTED ;
-		} ;
-
-	plac->frames_per_block = ALAC_FRAME_LENGTH ;
-
-	plac->pakt_info = alac_pakt_alloc (2000) ;
-
-	if ((plac->enctmp = psf_open_tmpfile (plac->enctmpname, sizeof (plac->enctmpname))) == NULL)
-	{	psf_log_printf (psf, "Error : Failed to open temp file '%s' : \n", plac->enctmpname, strerror (errno)) ;
-		return SFE_ALAC_FAIL_TMPFILE ;
-		} ;
-
-	alac_encoder_init (&plac->encoder, psf->sf.samplerate, psf->sf.channels, alac_format_flags, ALAC_FRAME_LENGTH) ;
-
-	return 0 ;
-} /* alac_writer_init */
-
-/*============================================================================================
-** ALAC block decoder and encoder.
-*/
-
-static inline uint32_t
-alac_reader_next_packet_size (PAKT_INFO * info)
-{	if (info->current >= info->count)
-		return 0 ;
-	return info->packet_size [info->current++] ;
-} /* alac_reader_next_packet_size */
-
-static sf_count_t
-alac_reader_calc_frames (SF_PRIVATE *psf, ALAC_PRIVATE *plac)
-{	sf_count_t	frames = 0 ;
-	uint32_t	current_pos = 1, blocks = 0 ;
-
-	plac->pakt_info->current = 0 ;
-
-	while (current_pos < psf->filelength && current_pos > 0)
-	{	current_pos = alac_reader_next_packet_size (plac->pakt_info) ;
-		blocks = current_pos > 0 ? blocks + 1 : blocks ;
-		} ;
-
-	if (blocks == 0)
-		return 0 ;
-
-	/* Only count full blocks. */
-	frames = plac->frames_per_block * (blocks - 1) ;
-
-	alac_seek (psf, SFM_READ, frames) ;
-	alac_decode_block (psf, plac) ;
-	frames += plac->frames_this_block ;
-
-	plac->pakt_info->current = 0 ;
-
-	return frames ;
-} /* alac_reader_calc_frames */
-
-static int
-alac_decode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac)
-{	ALAC_DECODER *pdec = &plac->decoder ;
-	uint8_t		byte_buffer [ALAC_BYTE_BUFFER_SIZE] ;
-	uint32_t	packet_size ;
-	BitBuffer	bit_buffer ;
-
-	packet_size = alac_reader_next_packet_size (plac->pakt_info) ;
-	if (packet_size == 0)
-	{	if (plac->pakt_info->current < plac->pakt_info->count)
-			psf_log_printf (psf, "packet_size is 0 (%d of %d)\n", plac->pakt_info->current, plac->pakt_info->count) ;
-		return 0 ;
-		} ;
-
-	psf_fseek (psf, plac->input_data_pos, SEEK_SET) ;
-
-	if (packet_size > SIGNED_SIZEOF (byte_buffer))
-	{	psf_log_printf (psf, "%s : bad packet_size (%u)\n", __func__, packet_size) ;
-		return 0 ;
-		} ;
-
-	if ((packet_size != psf_fread (byte_buffer, 1, packet_size, psf)))
-		return 0 ;
-
-	BitBufferInit (&bit_buffer, byte_buffer, packet_size) ;
-
-	plac->input_data_pos += packet_size ;
-	plac->frames_this_block = 0 ;
-	alac_decode (pdec, &bit_buffer, plac->buffer, plac->frames_per_block, psf->sf.channels, &plac->frames_this_block) ;
-
-	plac->partial_block_frames = 0 ;
-
-	return 1 ;
-} /* alac_decode_block */
-
-
-static int
-alac_encode_block (SF_PRIVATE * psf, ALAC_PRIVATE *plac)
-{	ALAC_ENCODER *penc = &plac->encoder ;
-	uint32_t num_bytes = 0 ;
-#ifndef _MSC_VER
-	uint8_t byte_buffer [psf->sf.channels * ALAC_BYTE_BUFFER_SIZE] ;
-#else
-	uint8_t* byte_buffer = (uint8_t*)_alloca (psf->sf.channels * ALAC_BYTE_BUFFER_SIZE) ;
-#endif
-
-	alac_encode (penc, plac->channels, plac->partial_block_frames, plac->buffer, byte_buffer, &num_bytes) ;
-
-	if (fwrite (byte_buffer, 1, num_bytes, plac->enctmp) != num_bytes)
-	{
-		free (byte_buffer);
-		return 0 ;
-	}
-	free(byte_buffer);
-
-	if ((plac->pakt_info = alac_pakt_append (plac->pakt_info, num_bytes)) == NULL)
-		return 0 ;
-
-	plac->partial_block_frames = 0 ;
-
-	return 1 ;
-} /* alac_encode_block */
-
-/*============================================================================================
-** ALAC read functions.
-*/
-
-static sf_count_t
-alac_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	while (len > 0)
-	{	if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-			break ;
-
-		readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-		readcount = readcount > len ? len : readcount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = iptr [k] >> 16 ;
-
-		plac->partial_block_frames += readcount / plac->channels ;
-		total += readcount ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alac_read_s */
-
-static sf_count_t
-alac_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	while (len > 0)
-	{	if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-			break ;
-
-		readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-		readcount = readcount > len ? len : readcount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = iptr [k] ;
-
-		plac->partial_block_frames += readcount / plac->channels ;
-		total += readcount ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alac_read_i */
-
-static sf_count_t
-alac_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, readcount ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-	while (len > 0)
-	{	if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-			break ;
-
-		readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-		readcount = readcount > len ? len : readcount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-
-		plac->partial_block_frames += readcount / plac->channels ;
-		total += readcount ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alac_read_f */
-
-static sf_count_t
-alac_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-	while (len > 0)
-	{	if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-			break ;
-
-		readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-		readcount = readcount > len ? len : readcount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-
-		plac->partial_block_frames += readcount / plac->channels ;
-		total += readcount ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alac_read_d */
-
-/*============================================================================================
-*/
-
-static sf_count_t
-alac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	ALAC_PRIVATE *plac ;
-	int			newblock, newsample ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	plac = (ALAC_PRIVATE*) psf->codec_data ;
-
-	if (psf->datalength < 0 || psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (offset == 0)
-	{	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-		plac->frames_this_block = 0 ;
-		plac->input_data_pos = psf->dataoffset ;
-		plac->pakt_info->current = 0 ;
-		return 0 ;
-		} ;
-
-	if (offset < 0 || offset > plac->pakt_info->count * plac->frames_per_block)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	newblock	= offset / plac->frames_per_block ;
-	newsample	= offset % plac->frames_per_block ;
-
-	if (mode == SFM_READ)
-	{	plac->input_data_pos = psf->dataoffset + alac_pakt_block_offset (plac->pakt_info, newblock) ;
-
-		plac->pakt_info->current = newblock ;
-		alac_decode_block (psf, plac) ;
-		plac->partial_block_frames = newsample ;
-		}
-	else
-	{	/* What to do about write??? */
-		psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	return newblock * plac->frames_per_block + newsample ;
-} /* alac_seek */
-
-/*==========================================================================================
-** ALAC Write Functions.
-*/
-
-static sf_count_t
-alac_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	while (len > 0)
-	{	writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-		writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = ptr [total + k] << 16 ;
-
-		plac->partial_block_frames += writecount / plac->channels ;
-		total += writecount ;
-		len -= writecount ;
-
-		if (plac->partial_block_frames >= plac->frames_per_block)
-			alac_encode_block (psf, plac) ;
-		} ;
-
-	return total ;
-} /* alac_write_s */
-
-static sf_count_t
-alac_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	int			*iptr ;
-	int			k, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	while (len > 0)
-	{	writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-		writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = ptr [total + k] ;
-
-		plac->partial_block_frames += writecount / plac->channels ;
-		total += writecount ;
-		len -= writecount ;
-
-		if (plac->partial_block_frames >= plac->frames_per_block)
-			alac_encode_block (psf, plac) ;
-		} ;
-
-	return total ;
-} /* alac_write_i */
-
-static sf_count_t
-alac_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	void		(*convert) (const float *, int *t, int, int) ;
-	int			*iptr ;
-	int			writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	convert = (psf->add_clipping) ? psf_f2i_clip_array : psf_f2i_array ;
-
-	while (len > 0)
-	{	writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-		writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		convert (ptr, iptr, writecount, psf->norm_float) ;
-
-		plac->partial_block_frames += writecount / plac->channels ;
-		total += writecount ;
-		len -= writecount ;
-
-		if (plac->partial_block_frames >= plac->frames_per_block)
-			alac_encode_block (psf, plac) ;
-		} ;
-
-	return total ;
-} /* alac_write_f */
-
-static sf_count_t
-alac_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	ALAC_PRIVATE *plac ;
-	void		(*convert) (const double *, int *t, int, int) ;
-	int			*iptr ;
-	int			writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	convert = (psf->add_clipping) ? psf_d2i_clip_array : psf_d2i_array ;
-
-	while (len > 0)
-	{	writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-		writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-		iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-		convert (ptr, iptr, writecount, psf->norm_float) ;
-
-		plac->partial_block_frames += writecount / plac->channels ;
-		total += writecount ;
-		len -= writecount ;
-
-		if (plac->partial_block_frames >= plac->frames_per_block)
-			alac_encode_block (psf, plac) ;
-		} ;
-
-	return total ;
-} /* alac_write_d */
-
-/*==============================================================================
-** PAKT_INFO handling.
-*/
-
-static PAKT_INFO *
-alac_pakt_alloc (uint32_t initial_count)
-{	PAKT_INFO * info ;
-
-	if ((info = calloc (1, sizeof (PAKT_INFO) + initial_count * sizeof (info->packet_size [0]))) == NULL)
-		return NULL ;
-
-	info->allocated = initial_count ;
-	info->current = 0 ;
-	info->count = 0 ;
-
-	return info ;
-} /* alac_pakt_alloc */
-
-static PAKT_INFO *
-alac_pakt_append (PAKT_INFO * info, uint32_t value)
-{
-	if (info->count >= info->allocated)
-	{	PAKT_INFO * temp ;
-		uint32_t newcount = info->allocated + info->allocated / 2 ;
-
-		if ((temp = realloc (info, sizeof (PAKT_INFO) + newcount * sizeof (info->packet_size [0]))) == NULL)
-			return NULL ;
-
-		info = temp ;
-		info->allocated = newcount ;
-		} ;
-
-	info->packet_size [info->count++] = value ;
-	return info ;
-} /* alac_pakt_append */
-
-static PAKT_INFO *
-alac_pakt_read_decode (SF_PRIVATE * psf, uint32_t UNUSED (pakt_offset))
-{	SF_CHUNK_INFO chunk_info ;
-	PAKT_INFO * info = NULL ;
-	uint8_t *pakt_data = NULL ;
-	uint32_t bcount, value = 1, pakt_size ;
-	SF_CHUNK_ITERATOR * chunk_iterator ;
-
-
-	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-	snprintf (chunk_info.id, sizeof (chunk_info.id), "pakt") ;
-	chunk_info.id_size = 4 ;
-
-	if ((chunk_iterator = psf_get_chunk_iterator (psf, chunk_info.id)) == NULL)
-	{	printf ("%s %d : no chunk iterator found\n\n", __func__, __LINE__) ;
-		free (chunk_info.data) ;
-		chunk_info.data = NULL ;
-		return NULL ;
-		} ;
-
-	psf->get_chunk_size (psf, chunk_iterator, &chunk_info) ;
-
-	pakt_size = chunk_info.datalen ;
-	chunk_info.data = pakt_data = malloc (pakt_size + 5) ;
-
-	if ((bcount = psf->get_chunk_data (psf, chunk_iterator, &chunk_info)) != SF_ERR_NO_ERROR)
-	{	printf ("%s %d : %s\n\n", __func__, __LINE__, sf_error_number (bcount)) ;
-		while (chunk_iterator)
-			chunk_iterator = psf->next_chunk_iterator (psf, chunk_iterator) ;
-		free (chunk_info.data) ;
-		chunk_info.data = NULL ;
-		return NULL ;
-		} ;
-
-	while (chunk_iterator)
-		chunk_iterator = psf->next_chunk_iterator (psf, chunk_iterator) ;
-
-	info = alac_pakt_alloc (pakt_size / 4) ;
-
-	/* Start at 24 bytes in, skipping over the 'pakt' chunks header. */
-	for (bcount = 24 ; bcount < pakt_size && value != 0 ; )
-	{	uint8_t byte ;
-		int32_t count = 0 ;
-
-		value = 0 ;
-		do
-		{	byte = pakt_data [bcount + count] ;
-			value = (value << 7) + (byte & 0x7F) ;
-
-			count ++ ;
-			if (count > 5 || bcount + count > pakt_size)
-			{	printf ("%s %d : Ooops! count %d    bcount %d\n", __func__, __LINE__, count, bcount) ;
-				value = 0 ;
-				break ;
-				} ;
-			}
-			while (byte & 0x80) ;
-
-		bcount += count ;
-
-		if ((info = alac_pakt_append (info, value)) == NULL)
-			goto FreeExit ;
-		} ;
-
-	free (pakt_data) ;
-
-	return info ;
-
-FreeExit :
-	free (pakt_data) ;
-	free (info) ;
-	return NULL ;
-} /* alac_pakt_read_decode */
-
-static uint8_t *
-alac_pakt_encode (const SF_PRIVATE *psf, uint32_t * pakt_size_out)
-{	const ALAC_PRIVATE *plac ;
-	const PAKT_INFO *info ;
-	uint8_t	*data ;
-	uint32_t k, allocated, pakt_size ;
-
-	plac = psf->codec_data ;
-	info = plac->pakt_info ;
-
-	allocated = 100 + 2 * info->count ;
-	if ((data = calloc (1, allocated)) == NULL)
-		return NULL ;
-
-	psf_put_be64 (data, 0, info->count) ;
-	psf_put_be64 (data, 8, psf->sf.frames) ;
-	psf_put_be32 (data, 20, kALACDefaultFramesPerPacket - plac->partial_block_frames) ;
-
-	/* Real 'pakt' data starts after 24 byte header. */
-	pakt_size = 24 ;
-
-	for (k = 0 ; k < info->count ; k++)
-	{	int32_t value = info->packet_size [k] ;
-
-		if ((value & 0x7f) == value)
-		{	data [pakt_size++] = value ;
-			continue ;
-			} ;
-
-		if ((value & 0x3fff) == value)
-		{	data [pakt_size++] = (value >> 7) | 0x80 ;
-			data [pakt_size++] = value & 0x7f ;
-			continue ;
-			} ;
-
-		if ((value & 0x1fffff) == value)
-		{	data [pakt_size++] = (value >> 14) | 0x80 ;
-			data [pakt_size++] = ((value >> 7) & 0x7f) | 0x80 ;
-			data [pakt_size++] = value & 0x7f ;
-			continue ;
-		} ;
-
-		if ((value & 0x0fffffff) == value)
-		{	data [pakt_size++] = (value >> 21) | 0x80 ;
-			data [pakt_size++] = ((value >> 14) & 0x7f) | 0x80 ;
-			data [pakt_size++] = ((value >> 7) & 0x7f) | 0x80 ;
-			data [pakt_size++] = value & 0x7f ;
-			continue ;
-			} ;
-
-		*pakt_size_out = 0 ;
-		free (data) ;
-		return NULL ;
-		} ;
-
-	*pakt_size_out = pakt_size ;
-	return data ;
-} /* alac_pakt_encode */
-
-static sf_count_t
-alac_pakt_block_offset (const PAKT_INFO *info, uint32_t block)
-{	sf_count_t offset = 0 ;
-	uint32_t k ;
-
-	for (k = 0 ; k < block ; k++)
-		offset += info->packet_size [k] ;
-
-	return offset ;
-} /* alac_pakt_block_offset */
-
-static uint32_t
-alac_kuki_read (SF_PRIVATE * psf, uint32_t kuki_offset, uint8_t * kuki, size_t kuki_maxlen)
-{	uint32_t marker ;
-	uint64_t kuki_size ;
-
-	if (psf_fseek (psf, kuki_offset, SEEK_SET) != kuki_offset)
-		return 0 ;
-
-	psf_fread (&marker, 1, sizeof (marker), psf) ;
-	if (marker != MAKE_MARKER ('k', 'u', 'k', 'i'))
-		return 0 ;
-
-	psf_fread (&kuki_size, 1, sizeof (kuki_size), psf) ;
-	kuki_size = BE2H_64 (kuki_size) ;
-
-	if (kuki_size == 0 || kuki_size > kuki_maxlen)
-	{	psf_log_printf (psf, "%s : Bad size (%D) of 'kuki' chunk.\n", __func__, kuki_size) ;
-		return 0 ;
-		} ;
-
-	psf_fread (kuki, 1, kuki_size, psf) ;
-
-	return kuki_size ;
-} /* alac_kuki_read */
diff --git a/libs/libsndfile/src/alaw.c b/libs/libsndfile/src/alaw.c
deleted file mode 100644
index 81d7696863..0000000000
--- a/libs/libsndfile/src/alaw.c
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-static sf_count_t alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t alaw_write_s2alaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_i2alaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_f2alaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_d2alaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void alaw2s_array (unsigned char *buffer, int count, short *ptr) ;
-static void alaw2i_array (unsigned char *buffer, int count, int *ptr) ;
-static void alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact) ;
-static void alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact) ;
-
-static void s2alaw_array (const short *buffer, int count, unsigned char *ptr) ;
-static void i2alaw_array (const int *buffer, int count, unsigned char *ptr) ;
-static void f2alaw_array (const float *buffer, int count, unsigned char *ptr, float normfact) ;
-static void d2alaw_array (const double *buffer, int count, unsigned char *ptr, double normfact) ;
-
-
-int
-alaw_init (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	psf->read_short		= alaw_read_alaw2s ;
-		psf->read_int		= alaw_read_alaw2i ;
-		psf->read_float		= alaw_read_alaw2f ;
-		psf->read_double	= alaw_read_alaw2d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->write_short	= alaw_write_s2alaw ;
-		psf->write_int		= alaw_write_i2alaw ;
-		psf->write_float	= alaw_write_f2alaw ;
-		psf->write_double	= alaw_write_d2alaw ;
-		} ;
-
-	psf->bytewidth = 1 ;
-	psf->blockwidth = psf->sf.channels ;
-
-	if (psf->filelength > psf->dataoffset)
-		psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ;
-	else
-		psf->datalength = 0 ;
-
-	psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-	return 0 ;
-} /* alaw_init */
-
-/*==============================================================================
- *	Private static functions and data.
- */
-
-static
-short alaw_decode [256] =
-{	-5504,	-5248,	-6016,	-5760,	-4480,	-4224,	-4992,	-4736,
-	-7552,	-7296,	-8064,	-7808,	-6528,	-6272,	-7040,	-6784,
-	-2752,	-2624,	-3008,	-2880,	-2240,	-2112,	-2496,	-2368,
-	-3776,	-3648,	-4032,	-3904,	-3264,	-3136,	-3520,	-3392,
-	-22016,	-20992,	-24064,	-23040,	-17920,	-16896,	-19968,	-18944,
-	-30208,	-29184,	-32256,	-31232,	-26112,	-25088,	-28160,	-27136,
-	-11008,	-10496,	-12032,	-11520,	-8960,	-8448,	-9984,	-9472,
-	-15104,	-14592,	-16128,	-15616,	-13056,	-12544,	-14080,	-13568,
-	-344,	-328,	-376,	-360,	-280,	-264,	-312,	-296,
-	-472,	-456,	-504,	-488,	-408,	-392,	-440,	-424,
-	-88,	-72,	-120,	-104,	-24,	-8,		-56,	-40,
-	-216,	-200,	-248,	-232,	-152,	-136,	-184,	-168,
-	-1376,	-1312,	-1504,	-1440,	-1120,	-1056,	-1248,	-1184,
-	-1888,	-1824,	-2016,	-1952,	-1632,	-1568,	-1760,	-1696,
-	-688,	-656,	-752,	-720,	-560,	-528,	-624,	-592,
-	-944,	-912,	-1008,	-976,	-816,	-784,	-880,	-848,
-	5504,	5248,	6016,	5760,	4480,	4224,	4992,	4736,
-	7552,	7296,	8064,	7808,	6528,	6272,	7040,	6784,
-	2752,	2624,	3008,	2880,	2240,	2112,	2496,	2368,
-	3776,	3648,	4032,	3904,	3264,	3136,	3520,	3392,
-	22016,	20992,	24064,	23040,	17920,	16896,	19968,	18944,
-	30208,	29184,	32256,	31232,	26112,	25088,	28160,	27136,
-	11008,	10496,	12032,	11520,	8960,	8448,	9984,	9472,
-	15104,	14592,	16128,	15616,	13056,	12544,	14080,	13568,
-	344,	328,	376,	360,	280,	264,	312,	296,
-	472,	456,	504,	488,	408,	392,	440,	424,
-	88,		72,		120,	104,	24,		8,		56,		40,
-	216,	200,	248,	232,	152,	136,	184,	168,
-	1376,	1312,	1504,	1440,	1120,	1056,	1248,	1184,
-	1888,	1824,	2016,	1952,	1632,	1568,	1760,	1696,
-	688,	656,	752,	720,	560,	528,	624,	592,
-	944,	912,	1008,	976,	816,	784,	880,	848
-} ; /* alaw_decode */
-
-static
-unsigned char alaw_encode [2048 + 1] =
-{	0xd5, 0xd4, 0xd7, 0xd6, 0xd1, 0xd0, 0xd3, 0xd2, 0xdd, 0xdc, 0xdf, 0xde,
-	0xd9, 0xd8, 0xdb, 0xda, 0xc5, 0xc4, 0xc7, 0xc6, 0xc1, 0xc0, 0xc3, 0xc2,
-	0xcd, 0xcc, 0xcf, 0xce, 0xc9, 0xc8, 0xcb, 0xca, 0xf5, 0xf5, 0xf4, 0xf4,
-	0xf7, 0xf7, 0xf6, 0xf6, 0xf1, 0xf1, 0xf0, 0xf0, 0xf3, 0xf3, 0xf2, 0xf2,
-	0xfd, 0xfd, 0xfc, 0xfc, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xf9, 0xf8, 0xf8,
-	0xfb, 0xfb, 0xfa, 0xfa, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4,
-	0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe1, 0xe1, 0xe1, 0xe1,
-	0xe0, 0xe0, 0xe0, 0xe0, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2,
-	0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xef, 0xef, 0xef, 0xef,
-	0xee, 0xee, 0xee, 0xee, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8,
-	0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-	0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-	0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-	0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-	0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-	0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-	0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-	0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb3, 0xb3, 0xb3, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-	0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-	0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-	0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-	0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-	0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-	0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-	0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xb9, 0xb9, 0xb9, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-	0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-	0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba,
-	0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-	0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-	0xba, 0xba, 0xba, 0xba, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
-} ; /* alaw_encode */
-
-static inline void
-alaw2s_array (unsigned char *buffer, int count, short *ptr)
-{	while (--count >= 0)
-		ptr [count] = alaw_decode [(int) buffer [count]] ;
-} /* alaw2s_array */
-
-static inline void
-alaw2i_array (unsigned char *buffer, int count, int *ptr)
-{	while (--count >= 0)
-		ptr [count] = alaw_decode [(int) buffer [count]] << 16 ;
-} /* alaw2i_array */
-
-static inline void
-alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact)
-{	while (--count >= 0)
-		ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;
-} /* alaw2f_array */
-
-static inline void
-alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact)
-{	while (--count >= 0)
-		ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;
-} /* alaw2d_array */
-
-static inline void
-s2alaw_array (const short *ptr, int count, unsigned char *buffer)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = alaw_encode [ptr [count] / 16] ;
-		else
-			buffer [count] = 0x7F & alaw_encode [ptr [count] / -16] ;
-		} ;
-} /* s2alaw_array */
-
-static inline void
-i2alaw_array (const int *ptr, int count, unsigned char *buffer)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ;
-		else
-			buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ;
-		} ;
-} /* i2alaw_array */
-
-static inline void
-f2alaw_array (const float *ptr, int count, unsigned char *buffer, float normfact)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = alaw_encode [lrintf (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & alaw_encode [- lrintf (normfact * ptr [count])] ;
-		} ;
-} /* f2alaw_array */
-
-static inline void
-d2alaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ;
-		} ;
-} /* d2alaw_array */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		alaw2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alaw_read_alaw2s */
-
-static sf_count_t
-alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		alaw2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alaw_read_alaw2i */
-
-static sf_count_t
-alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		alaw2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alaw_read_alaw2f */
-
-static sf_count_t
-alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double	normfact ;
-
-	normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		alaw2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* alaw_read_alaw2d */
-
-/*=============================================================================================
-*/
-
-static sf_count_t
-alaw_write_s2alaw	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2alaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* alaw_write_s2alaw */
-
-static sf_count_t
-alaw_write_i2alaw	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2alaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* alaw_write_i2alaw */
-
-static sf_count_t
-alaw_write_f2alaw	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2alaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* alaw_write_f2alaw */
-
-static sf_count_t
-alaw_write_d2alaw	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double	normfact ;
-
-	normfact = (psf->norm_double) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		d2alaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* alaw_write_d2alaw */
-
diff --git a/libs/libsndfile/src/au.c b/libs/libsndfile/src/au.c
deleted file mode 100644
index bcd869a70a..0000000000
--- a/libs/libsndfile/src/au.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define DOTSND_MARKER	(MAKE_MARKER ('.', 's', 'n', 'd'))
-#define DNSDOT_MARKER	(MAKE_MARKER ('d', 'n', 's', '.'))
-
-#define AU_DATA_OFFSET	24
-
-/*------------------------------------------------------------------------------
-** Known AU file encoding types.
-*/
-
-enum
-{	AU_ENCODING_ULAW_8					= 1,	/* 8-bit u-law samples */
-	AU_ENCODING_PCM_8					= 2,	/* 8-bit linear samples */
-	AU_ENCODING_PCM_16					= 3,	/* 16-bit linear samples */
-	AU_ENCODING_PCM_24					= 4,	/* 24-bit linear samples */
-	AU_ENCODING_PCM_32					= 5,	/* 32-bit linear samples */
-
-	AU_ENCODING_FLOAT					= 6,	/* floating-point samples */
-	AU_ENCODING_DOUBLE					= 7,	/* double-precision float samples */
-	AU_ENCODING_INDIRECT				= 8,	/* fragmented sampled data */
-	AU_ENCODING_NESTED					= 9,	/* ? */
-	AU_ENCODING_DSP_CORE				= 10,	/* DSP program */
-	AU_ENCODING_DSP_DATA_8				= 11,	/* 8-bit fixed-point samples */
-	AU_ENCODING_DSP_DATA_16				= 12,	/* 16-bit fixed-point samples */
-	AU_ENCODING_DSP_DATA_24				= 13,	/* 24-bit fixed-point samples */
-	AU_ENCODING_DSP_DATA_32				= 14,	/* 32-bit fixed-point samples */
-
-	AU_ENCODING_DISPLAY					= 16,	/* non-audio display data */
-	AU_ENCODING_MULAW_SQUELCH			= 17,	/* ? */
-	AU_ENCODING_EMPHASIZED				= 18,	/* 16-bit linear with emphasis */
-	AU_ENCODING_NEXT					= 19,	/* 16-bit linear with compression (NEXT) */
-	AU_ENCODING_COMPRESSED_EMPHASIZED	= 20,	/* A combination of the two above */
-	AU_ENCODING_DSP_COMMANDS			= 21,	/* Music Kit DSP commands */
-	AU_ENCODING_DSP_COMMANDS_SAMPLES	= 22,	/* ? */
-
-	AU_ENCODING_ADPCM_G721_32			= 23,	/* G721 32 kbs ADPCM - 4 bits per sample. */
-	AU_ENCODING_ADPCM_G722				= 24,	/* G722 64 kbs ADPCM */
-	AU_ENCODING_ADPCM_G723_24			= 25,	/* G723 24 kbs ADPCM - 3 bits per sample. */
-	AU_ENCODING_ADPCM_G723_40			= 26,	/* G723 40 kbs ADPCM - 5 bits per sample. */
-
-	AU_ENCODING_ALAW_8					= 27
-} ;
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef	struct
-{	int		dataoffset ;
-	int		datasize ;
-	int		encoding ;
-	int		samplerate ;
-	int		channels ;
-} AU_FMT ;
-
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		au_close		(SF_PRIVATE *psf) ;
-
-static	int 	au_format_to_encoding	(int format) ;
-
-static int		au_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		au_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-au_open	(SF_PRIVATE *psf)
-{	int		subformat ;
-	int		error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = au_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AU)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-			psf->endian = SF_ENDIAN_LITTLE ;
-		else if (psf->endian != SF_ENDIAN_LITTLE)
-			psf->endian = SF_ENDIAN_BIG ;
-
-		if (au_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = au_write_header ;
-		} ;
-
-	psf->container_close = au_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_ULAW :	/* 8-bit Ulaw encoding. */
-				ulaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_S8 :	/* 8-bit linear PCM. */
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :	/* 16-bit linear PCM. */
-		case SF_FORMAT_PCM_24 :	/* 24-bit linear PCM */
-		case SF_FORMAT_PCM_32 :	/* 32-bit linear PCM. */
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :	/* 8-bit Alaw encoding. */
-				alaw_init (psf) ;
-				break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :	/* 32-bit floats. */
-				error = float32_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :	/* 64-bit double precision floats. */
-				error = double64_init (psf) ;
-				break ;
-
-		case SF_FORMAT_G721_32 :
-				error = g72x_init (psf) ;
-				psf->sf.seekable = SF_FALSE ;
-				break ;
-
-		case SF_FORMAT_G723_24 :
-				error = g72x_init (psf) ;
-				psf->sf.seekable = SF_FALSE ;
-				break ;
-
-		case SF_FORMAT_G723_40 :
-				error = g72x_init (psf) ;
-				psf->sf.seekable = SF_FALSE ;
-				break ;
-		/* Lite remove end */
-
-		default :	break ;
-		} ;
-
-	return error ;
-} /* au_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-au_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		au_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* au_close */
-
-static int
-au_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int			encoding, datalength ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-		} ;
-
-	encoding = au_format_to_encoding (SF_CODEC (psf->sf.format)) ;
-	if (! encoding)
-		return (psf->error = SFE_BAD_OPEN_FORMAT) ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	/*
-	** Only attempt to seek if we are not writng to a pipe. If we are
-	** writing to a pipe we shouldn't be here anyway.
-	*/
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	/*
-	**	AU format files allow a datalength value of -1 if the datalength
-	**	is not know at the time the header is written.
-	**	Also use this value of -1 if the datalength > 2 gigabytes.
-	*/
-	if (psf->datalength	< 0 || psf->datalength > 0x7FFFFFFF)
-		datalength = -1 ;
-	else
-		datalength = (int) (psf->datalength & 0x7FFFFFFF) ;
-
-	if (psf->endian == SF_ENDIAN_BIG)
-	{	psf_binheader_writef (psf, "Em4", DOTSND_MARKER, AU_DATA_OFFSET) ;
-		psf_binheader_writef (psf, "E4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
-		}
-	else if (psf->endian == SF_ENDIAN_LITTLE)
-	{	psf_binheader_writef (psf, "em4", DNSDOT_MARKER, AU_DATA_OFFSET) ;
-		psf_binheader_writef (psf, "e4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
-		}
-	else
-		return (psf->error = SFE_BAD_OPEN_FORMAT) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* au_write_header */
-
-static int
-au_format_to_encoding (int format)
-{
-	switch (format)
-	{	case SF_FORMAT_PCM_S8 : 	return AU_ENCODING_PCM_8 ;
-		case SF_FORMAT_PCM_16 :		return AU_ENCODING_PCM_16 ;
-		case SF_FORMAT_PCM_24 : 	return AU_ENCODING_PCM_24 ;
-		case SF_FORMAT_PCM_32 : 	return AU_ENCODING_PCM_32 ;
-
-		case SF_FORMAT_FLOAT :		return AU_ENCODING_FLOAT ;
-		case SF_FORMAT_DOUBLE :		return AU_ENCODING_DOUBLE ;
-
-		case SF_FORMAT_ULAW :		return AU_ENCODING_ULAW_8 ;
-		case SF_FORMAT_ALAW :		return AU_ENCODING_ALAW_8 ;
-
-		case SF_FORMAT_G721_32 : 	return AU_ENCODING_ADPCM_G721_32 ;
-		case SF_FORMAT_G723_24 :	return AU_ENCODING_ADPCM_G723_24 ;
-		case SF_FORMAT_G723_40 :	return AU_ENCODING_ADPCM_G723_40 ;
-
-		default : break ;
-		} ;
-	return 0 ;
-} /* au_format_to_encoding */
-
-static int
-au_read_header (SF_PRIVATE *psf)
-{	AU_FMT	au_fmt ;
-	int		marker, dword ;
-
-	memset (&au_fmt, 0, sizeof (au_fmt)) ;
-	psf_binheader_readf (psf, "pm", 0, &marker) ;
-	psf_log_printf (psf, "%M\n", marker) ;
-
-	if (marker == DOTSND_MARKER)
-	{	psf->endian = SF_ENDIAN_BIG ;
-
-		psf_binheader_readf (psf, "E44444", &(au_fmt.dataoffset), &(au_fmt.datasize),
-					&(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ;
-		}
-	else if (marker == DNSDOT_MARKER)
-	{	psf->endian = SF_ENDIAN_LITTLE ;
-		psf_binheader_readf (psf, "e44444", &(au_fmt.dataoffset), &(au_fmt.datasize),
-					&(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ;
-		}
-	else
-		return SFE_AU_NO_DOTSND ;
-
-	psf_log_printf (psf, "  Data Offset : %d\n", au_fmt.dataoffset) ;
-
-	if (psf->fileoffset > 0 && au_fmt.datasize == -1)
-	{	psf_log_printf (psf, "  Data Size   : -1\n") ;
-		return SFE_AU_EMBED_BAD_LEN ;
-		} ;
-
-	if (psf->fileoffset > 0)
-	{	psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
-		psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-		}
-	else if (au_fmt.datasize == -1 || au_fmt.dataoffset + au_fmt.datasize == psf->filelength)
-		psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-	else if (au_fmt.dataoffset + au_fmt.datasize < psf->filelength)
-	{	psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
-		psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-		}
-	else
-	{	dword = psf->filelength - au_fmt.dataoffset ;
-		psf_log_printf (psf, "  Data Size   : %d (should be %d)\n", au_fmt.datasize, dword) ;
-		au_fmt.datasize = dword ;
-		} ;
-
- 	psf->dataoffset = au_fmt.dataoffset ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	if (psf_ftell (psf) < psf->dataoffset)
-		psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ;
-
-	psf->sf.samplerate	= au_fmt.samplerate ;
-	psf->sf.channels 	= au_fmt.channels ;
-
-	/* Only fill in type major. */
-	if (psf->endian == SF_ENDIAN_BIG)
-		psf->sf.format = SF_FORMAT_AU ;
-	else if (psf->endian == SF_ENDIAN_LITTLE)
-		psf->sf.format = SF_ENDIAN_LITTLE | SF_FORMAT_AU ;
-
-	psf_log_printf (psf, "  Encoding    : %d => ", au_fmt.encoding) ;
-
-	psf->sf.format = SF_ENDIAN (psf->sf.format) ;
-
-	switch (au_fmt.encoding)
-	{	case AU_ENCODING_ULAW_8 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ULAW ;
-				psf->bytewidth = 1 ;	/* Before decoding */
-				psf_log_printf (psf, "8-bit ISDN u-law\n") ;
-				break ;
-
-		case AU_ENCODING_PCM_8 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_S8 ;
-				psf->bytewidth = 1 ;
-				psf_log_printf (psf, "8-bit linear PCM\n") ;
-				break ;
-
-		case AU_ENCODING_PCM_16 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_16 ;
-				psf->bytewidth = 2 ;
-				psf_log_printf (psf, "16-bit linear PCM\n") ;
-				break ;
-
-		case AU_ENCODING_PCM_24 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_24 ;
-				psf->bytewidth = 3 ;
-				psf_log_printf (psf, "24-bit linear PCM\n") ;
-				break ;
-
-		case AU_ENCODING_PCM_32 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_32 ;
-				psf->bytewidth = 4 ;
-				psf_log_printf (psf, "32-bit linear PCM\n") ;
-				break ;
-
-		case AU_ENCODING_FLOAT :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-				psf->bytewidth = 4 ;
-				psf_log_printf (psf, "32-bit float\n") ;
-				break ;
-
-		case AU_ENCODING_DOUBLE :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-				psf->bytewidth = 8 ;
-				psf_log_printf (psf, "64-bit double precision float\n") ;
-				break ;
-
-		case AU_ENCODING_ALAW_8 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ALAW ;
-				psf->bytewidth = 1 ;	/* Before decoding */
-				psf_log_printf (psf, "8-bit ISDN A-law\n") ;
-				break ;
-
-		case AU_ENCODING_ADPCM_G721_32 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G721_32 ;
-				psf->bytewidth = 0 ;
-				psf_log_printf (psf, "G721 32kbs ADPCM\n") ;
-				break ;
-
-		case AU_ENCODING_ADPCM_G723_24 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_24 ;
-				psf->bytewidth = 0 ;
-				psf_log_printf (psf, "G723 24kbs ADPCM\n") ;
-				break ;
-
-		case AU_ENCODING_ADPCM_G723_40 :
-				psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_40 ;
-				psf->bytewidth = 0 ;
-				psf_log_printf (psf, "G723 40kbs ADPCM\n") ;
-				break ;
-
-		case AU_ENCODING_ADPCM_G722 :
-				psf_log_printf (psf, "G722 64 kbs ADPCM (unsupported)\n") ;
-				break ;
-
-		case AU_ENCODING_NEXT :
-				psf_log_printf (psf, "Weird NeXT encoding format (unsupported)\n") ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "Unknown!!\n") ;
-				break ;
-		} ;
-
-	psf_log_printf (psf, "  Sample Rate : %d\n", au_fmt.samplerate) ;
-	if (au_fmt.channels < 1)
-	{	psf_log_printf (psf, "  Channels    : %d  **** should be >= 1\n", au_fmt.channels) ;
-		return SFE_CHANNEL_COUNT_ZERO ;
-		}
-	else
-		psf_log_printf (psf, "  Channels    : %d\n", au_fmt.channels) ;
-
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-	if (! psf->sf.frames && psf->blockwidth)
-		psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	return 0 ;
-} /* au_read_header */
-
diff --git a/libs/libsndfile/src/audio_detect.c b/libs/libsndfile/src/audio_detect.c
deleted file mode 100644
index 9cac83bcff..0000000000
--- a/libs/libsndfile/src/audio_detect.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include "common.h"
-
-typedef struct
-{	int le_float ;
-	int be_float ;
-	int le_int_24_32 ;
-	int be_int_24_32 ;
-} VOTE ;
-
-
-static void vote_for_format (VOTE * vote, const unsigned char * data, int datalen) ;
-
-int
-audio_detect (SF_PRIVATE * psf, AUDIO_DETECT *ad, const unsigned char * data, int datalen)
-{	VOTE vote ;
-
-	if (psf == NULL)
-		return 0 ;
-
-	if (ad == NULL || datalen < 256)
-		return 0 ;
-
-	vote_for_format (&vote, data, datalen) ;
-
-	psf_log_printf (psf, "audio_detect :\n"
-			"    le_float     : %d\n"
-			"    be_float     : %d\n"
-			"    le_int_24_32 : %d\n"
-			"    be_int_24_32 : %d\n",
-			vote.le_float, vote.be_float, vote.le_int_24_32, vote.be_int_24_32) ;
-
-	if (0) puts (psf->parselog.buf) ;
-
-	if (ad->endianness == SF_ENDIAN_LITTLE && vote.le_float > (3 * datalen) / 4)
-	{	/* Almost certainly 32 bit floats. */
-		return SF_FORMAT_FLOAT ;
-		} ;
-
-	if (ad->endianness == SF_ENDIAN_LITTLE && vote.le_int_24_32 > (3 * datalen) / 4)
-	{	/* Almost certainly 24 bit data stored in 32 bit ints. */
-		return SF_FORMAT_PCM_32 ;
-		} ;
-
-	return 0 ;
-} /* data_detect */
-
-static void
-vote_for_format (VOTE * vote, const unsigned char * data, int datalen)
-{
-	int k ;
-
-	memset (vote, 0, sizeof (VOTE)) ;
-
-	datalen -= datalen % 4 ;
-
-	for (k = 0 ; k < datalen ; k ++)
-	{	if ((k % 4) == 0)
-		{	if (data [k] == 0 && data [k + 1] != 0)
-				vote->le_int_24_32 += 4 ;
-
-			if (data [2] != 0 && data [3] == 0)
-				vote->le_int_24_32 += 4 ;
-
-			if (data [0] != 0 && data [3] > 0x43 && data [3] < 0x4B)
-				vote->le_float += 4 ;
-
-			if (data [3] != 0 && data [0] > 0x43 && data [0] < 0x4B)
-				vote->be_float += 4 ;
-			} ;
-		} ;
-
-	return ;
-} /* vote_for_format */
-
diff --git a/libs/libsndfile/src/avr.c b/libs/libsndfile/src/avr.c
deleted file mode 100644
index a235b0d7a4..0000000000
--- a/libs/libsndfile/src/avr.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-** Copyright (C) 2004-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#define TWOBIT_MARKER	(MAKE_MARKER ('2', 'B', 'I', 'T'))
-#define	AVR_HDR_SIZE	128
-
-#define	SFE_AVR_X	666
-
-/*
-** From: hyc@hanauma.Jpl.Nasa.Gov (Howard Chu)
-**
-** A lot of PD software exists to play Mac .snd files on the ST. One other
-** format that seems pretty popular (used by a number of commercial packages)
-** is the AVR format (from Audio Visual Research). This format has a 128 byte
-** header that looks like this (its actually packed, but thats not portable):
-*/
-
-typedef struct
-{	int		marker ;	/* 2BIT */
-	char	name [8] ;	/* null-padded sample name */
-	short	mono ;		/* 0 = mono, 0xffff = stereo */
-	short	rez ;		/* 8 = 8 bit, 16 = 16 bit */
-	short	sign ;		/* 0 = unsigned, 0xffff = signed */
-
-	short	loop ;		/* 0 = no loop, 0xffff = looping sample */
-	short	midi ;		/* 0xffff = no MIDI note assigned,  */
-						/*	0xffXX = single key note assignment */
-						/*	0xLLHH = key split, low/hi note */
-	int		srate ;		/* sample frequency in hertz */
-	int		frames ;	/* sample length in bytes or words (see rez) */
-	int		lbeg ;		/* offset to start of loop in bytes or words. */
-						/* set to zero if unused */
-	int		lend ;		/* offset to end of loop in bytes or words. */
-						/* set to sample length if unused */
-	short	res1 ;		/* Reserved, MIDI keyboard split */
-	short	res2 ;		/* Reserved, sample compression */
-	short	res3 ;		/* Reserved */
-	char	ext [20] ;	/* Additional filename space, used if (name[7] != 0) */
-	char	user [64] ; /* User defined. Typically ASCII message */
-} AVR_HEADER ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int		avr_close (SF_PRIVATE *psf) ;
-
-static int		avr_read_header (SF_PRIVATE *psf) ;
-static int		avr_write_header (SF_PRIVATE *psf, int calc_length) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-avr_open	(SF_PRIVATE *psf)
-{	int		error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = avr_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AVR)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->endian = SF_ENDIAN_BIG ;
-
-		if (avr_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = avr_write_header ;
-		} ;
-
-	psf->container_close = avr_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	error = pcm_init (psf) ;
-
-	return error ;
-} /* avr_open */
-
-static int
-avr_read_header (SF_PRIVATE *psf)
-{	AVR_HEADER	hdr ;
-
-	memset (&hdr, 0, sizeof (hdr)) ;
-
-	psf_binheader_readf (psf, "pmb", 0, &hdr.marker, &hdr.name, sizeof (hdr.name)) ;
-	psf_log_printf (psf, "%M\n", hdr.marker) ;
-
-	if (hdr.marker != TWOBIT_MARKER)
-		return SFE_AVR_X ;
-
-	psf_log_printf (psf, "  Name        : %s\n", hdr.name) ;
-
-	psf_binheader_readf (psf, "E22222", &hdr.mono, &hdr.rez, &hdr.sign, &hdr.loop, &hdr.midi) ;
-
-	psf->sf.channels = (hdr.mono & 1) + 1 ;
-
-	psf_log_printf (psf, "  Channels    : %d\n  Bit width   : %d\n  Signed      : %s\n",
-			(hdr.mono & 1) + 1, hdr.rez, hdr.sign ? "yes" : "no") ;
-
-	switch ((hdr.rez << 16) + (hdr.sign & 1))
-	{	case ((8 << 16) + 0) :
-			psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_U8 ;
-			psf->bytewidth = 1 ;
-			break ;
-
-		case ((8 << 16) + 1) :
-			psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_S8 ;
-			psf->bytewidth = 1 ;
-			break ;
-
-		case ((16 << 16) + 1) :
-			psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_16 ;
-			psf->bytewidth = 2 ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "Error : bad rez/sign combination.\n") ;
-			return SFE_AVR_X ;
-		} ;
-
-	psf_binheader_readf (psf, "E4444", &hdr.srate, &hdr.frames, &hdr.lbeg, &hdr.lend) ;
-
-	psf->sf.frames = hdr.frames ;
-	psf->sf.samplerate = hdr.srate ;
-
-	psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-	psf_log_printf (psf, "  Sample rate : %d\n", psf->sf.samplerate) ;
-
-	psf_binheader_readf (psf, "E222", &hdr.res1, &hdr.res2, &hdr.res3) ;
-	psf_binheader_readf (psf, "bb", hdr.ext, sizeof (hdr.ext), hdr.user, sizeof (hdr.user)) ;
-
-	psf_log_printf (psf, "  Ext         : %s\n  User        : %s\n", hdr.ext, hdr.user) ;
-
-	psf->endian = SF_ENDIAN_BIG ;
-
- 	psf->dataoffset = AVR_HDR_SIZE ;
-	psf->datalength = hdr.frames * (hdr.rez / 8) ;
-
-	if (psf->fileoffset > 0)
-		psf->filelength = AVR_HDR_SIZE + psf->datalength ;
-
-	if (psf_ftell (psf) != psf->dataoffset)
-		psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ;
-
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-	if (psf->sf.frames == 0 && psf->blockwidth)
-		psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	return 0 ;
-} /* avr_read_header */
-
-static int
-avr_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int			sign ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	/*
-	** Only attempt to seek if we are not writng to a pipe. If we are
-	** writing to a pipe we shouldn't be here anyway.
-	*/
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_binheader_writef (psf, "Emz22", TWOBIT_MARKER, make_size_t (8),
-			psf->sf.channels == 2 ? 0xFFFF : 0, psf->bytewidth * 8) ;
-
-	sign = ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_U8) ? 0 : 0xFFFF ;
-
-	psf_binheader_writef (psf, "E222", sign, 0, 0xFFFF) ;
-	psf_binheader_writef (psf, "E4444", psf->sf.samplerate, psf->sf.frames, 0, 0) ;
-
-	psf_binheader_writef (psf, "E222zz", 0, 0, 0, make_size_t (20), make_size_t (64)) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* avr_write_header */
-
-static int
-avr_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		avr_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* avr_close */
-
diff --git a/libs/libsndfile/src/binheader_writef_check.py b/libs/libsndfile/src/binheader_writef_check.py
deleted file mode 100644
index 6ee609e010..0000000000
--- a/libs/libsndfile/src/binheader_writef_check.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-# This parses C code using regexes (yes, thats horrible) and makes sure
-# that calling conventions to the function psf_binheader_writef are
-# correct.
-
-
-
-import re, string, sys
-
-_whitespace_re = re.compile ("\s+", re.MULTILINE)
-
-def find_binheader_writefs (data):
-	lst = re.findall ('psf_binheader_writef\s*\(\s*[a-zA-Z_]+\s*,\s*\"[^;]+;', data, re.MULTILINE)
-	return [_whitespace_re.sub (" ", x) for x in lst]
-
-def find_format_string (s):
-	fmt = re.search ('"([^"]+)"', s)
-	if not fmt:
-		print ("Bad format in :\n\n\t%s\n\n" % s)
-		sys.exit (1)
-	fmt = fmt.groups ()
-	if len (fmt) != 1:
-		print ("Bad format in :\n\n\t%s\n\n" % s)
-		sys.exit (1)
-	return _whitespace_re.sub ("", fmt [0])
-
-def get_param_list (data):
-	dlist = re.search ("\((.+)\)\s*;", data)
-	dlist = dlist.groups ()[0]
-	dlist = dlist.split(",")
-	dlist = [x.strip() for x in dlist]
-	return dlist [2:]
-
-def handle_file (fname):
-	errors = 0
-	data = open (fname, "r").read ()
-
-	writefs = find_binheader_writefs (data)
-	for item in writefs:
-		fmt = find_format_string (item)
-		params = get_param_list (item)
-		param_index = 0
-
-		# print item
-
-		for ch in fmt:
-			if ch in 'Eet ':
-				continue
-
-			# print "    param [%d] %c : %s" % (param_index, ch, params [param_index])
-
-			if ch != 'b':
-				param_index += 1
-				continue
-
-			# print item
-			# print "    param [%d] %c : %s <-> %s" % (param_index, ch, params [param_index], params [param_index + 1])
-
-			# print (params [param_index + 1])
-			if params [param_index + 1].find ("sizeof") < 0 \
-						and params [param_index + 1].find ("make_size_t") < 0 \
-						and params [param_index + 1].find ("strlen") < 0:
-				if errors == 0: sys.stdout.write ("\n")
-				print ("\n%s :" % fname)
-				print ("    param [%d] %c : %s <-> %s" % (param_index, ch, params [param_index], params [param_index + 1]))
-				print ("    %s" % item)
-				errors += 1
-			param_index += 2
-
-	return errors
-
-#===============================================================================
-
-if len (sys.argv) > 1:
-	sys.stdout.write ("\n    binheader_writef_check                   :")
-	sys.stdout.flush ()
-	errors = 0
-	for fname in sys.argv [1:]:
-		errors += handle_file (fname)
-	if errors > 0:
-		print ("\nErrors : %d\n" % errors)
-		sys.exit (1)
-
-print ("ok\n")
-
diff --git a/libs/libsndfile/src/broadcast.c b/libs/libsndfile/src/broadcast.c
deleted file mode 100644
index 128a6a2c55..0000000000
--- a/libs/libsndfile/src/broadcast.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-** Copyright (C) 2006-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2006 Paul Davis <paul@linuxaudiosystems.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-
-#include "common.h"
-
-
-static int gen_coding_history (char * added_history, int added_history_max, const SF_INFO * psfinfo) ;
-
-static inline size_t
-bc_min_size (const SF_BROADCAST_INFO* info)
-{	if (info == NULL)
-		return 0 ;
-
-	return offsetof (SF_BROADCAST_INFO, coding_history) + info->coding_history_size ;
-} /* bc_min_size */
-
-SF_BROADCAST_INFO_16K*
-broadcast_var_alloc (void)
-{	return calloc (1, sizeof (SF_BROADCAST_INFO_16K)) ;
-} /* broadcast_var_alloc */
-
-int
-broadcast_var_set (SF_PRIVATE *psf, const SF_BROADCAST_INFO * info, size_t datasize)
-{	size_t len ;
-
-	if (info == NULL)
-		return SF_FALSE ;
-
-	if (bc_min_size (info) > datasize)
-	{	psf->error = SFE_BAD_BROADCAST_INFO_SIZE ;
-		return SF_FALSE ;
-		} ;
-
-	if (datasize >= sizeof (SF_BROADCAST_INFO_16K))
-	{	psf->error = SFE_BAD_BROADCAST_INFO_TOO_BIG ;
-		return SF_FALSE ;
-		} ;
-
-	if (psf->broadcast_16k == NULL)
-	{	if ((psf->broadcast_16k = broadcast_var_alloc ()) == NULL)
-		{	psf->error = SFE_MALLOC_FAILED ;
-			return SF_FALSE ;
-			} ;
-		} ;
-
-	/* Only copy the first part of the struct. */
-	memcpy (psf->broadcast_16k, info, offsetof (SF_BROADCAST_INFO, coding_history)) ;
-
-	psf_strlcpy_crlf (psf->broadcast_16k->coding_history, info->coding_history, sizeof (psf->broadcast_16k->coding_history), datasize - offsetof (SF_BROADCAST_INFO, coding_history)) ;
-	len = strlen (psf->broadcast_16k->coding_history) ;
-
-	if (len > 0 && psf->broadcast_16k->coding_history [len - 1] != '\n')
-		psf_strlcat (psf->broadcast_16k->coding_history, sizeof (psf->broadcast_16k->coding_history), "\r\n") ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	char added_history [256] ;
-
-		gen_coding_history (added_history, sizeof (added_history), &(psf->sf)) ;
-		psf_strlcat (psf->broadcast_16k->coding_history, sizeof (psf->broadcast_16k->coding_history), added_history) ;
-		} ;
-
-	/* Force coding_history_size to be even. */
-	len = strlen (psf->broadcast_16k->coding_history) ;
-	len += (len & 1) ? 1 : 0 ;
-	psf->broadcast_16k->coding_history_size = len ;
-
-	/* Currently writing this version. */
-	psf->broadcast_16k->version = 1 ;
-
-	return SF_TRUE ;
-} /* broadcast_var_set */
-
-
-int
-broadcast_var_get (SF_PRIVATE *psf, SF_BROADCAST_INFO * data, size_t datasize)
-{	size_t size ;
-
-	if (psf->broadcast_16k == NULL)
-		return SF_FALSE ;
-
-	size = SF_MIN (datasize, bc_min_size ((const SF_BROADCAST_INFO *) psf->broadcast_16k)) ;
-
-	memcpy (data, psf->broadcast_16k, size) ;
-
-	return SF_TRUE ;
-} /* broadcast_var_get */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-gen_coding_history (char * added_history, int added_history_max, const SF_INFO * psfinfo)
-{	char chnstr [16] ;
-	int count, width ;
-
-	/*
-	**	From : http://www.sr.se/utveckling/tu/bwf/docs/codhist2.htm
-	**
-	**	Parameter            Variable string <allowed option>                 Unit
-	**	==========================================================================================
-	**	Coding Algorithm     A=<ANALOGUE, PCM, MPEG1L1, MPEG1L2, MPEG1L3,
-	**	                    MPEG2L1, MPEG2L2, MPEG2L3>
-	**	Sampling frequency   F=<11000,22050,24000,32000,44100,48000>          [Hz]
-	**	Bit-rate             B=<any bit-rate allowed in MPEG 2 (ISO/IEC       [kbit/s per channel]
-	**	                    13818-3)>
-	**	Word Length          W=<8, 12, 14, 16, 18, 20, 22, 24>                [bits]
-	**	Mode                 M=<mono, stereo, dual-mono, joint-stereo>
-	**	Text, free string    T=<a free ASCII-text string for in house use.
-	**	                    This string should contain no commas (ASCII
-	**	                    2Chex). Examples of the contents: ID-No; codec
-	**	                    type; A/D type>
-	*/
-
-	switch (psfinfo->channels)
-	{	case 0 :
-			return SF_FALSE ;
-
-		case 1 :
-			psf_strlcpy (chnstr, sizeof (chnstr), "mono") ;
-			break ;
-
-		case 2 :
-			psf_strlcpy (chnstr, sizeof (chnstr), "stereo") ;
-			break ;
-
-		default :
-			snprintf (chnstr, sizeof (chnstr), "%uchn", psfinfo->channels) ;
-			break ;
-		} ;
-
-	switch (SF_CODEC (psfinfo->format))
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-			width = 8 ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			width = 16 ;
-			break ;
-		case SF_FORMAT_PCM_24 :
-			width = 24 ;
-			break ;
-		case SF_FORMAT_PCM_32 :
-			width = 32 ;
-			break ;
-		case SF_FORMAT_FLOAT :
-			width = 24 ; /* Bits in the mantissa + 1 */
-			break ;
-		case SF_FORMAT_DOUBLE :
-			width = 53 ; /* Bits in the mantissa + 1 */
-			break ;
-		case SF_FORMAT_ULAW :
-		case SF_FORMAT_ALAW :
-			width = 12 ;
-			break ;
-		default :
-			width = 42 ;
-			break ;
-		} ;
-
-	count = snprintf (added_history, added_history_max,
-							"A=PCM,F=%u,W=%d,M=%s,T=%s-%s\r\n",
-							psfinfo->samplerate, width, chnstr, PACKAGE, VERSION) ;
-
-	if (count >= added_history_max)
-		return 0 ;
-
-	return count ;
-} /* gen_coding_history */
-
diff --git a/libs/libsndfile/src/caf.c b/libs/libsndfile/src/caf.c
deleted file mode 100644
index 8f95d781eb..0000000000
--- a/libs/libsndfile/src/caf.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
-** Copyright (C) 2005-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<math.h>
-#ifdef HAVE_INTTYPES_H
-#include	<inttypes.h>
-#endif
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"chanmap.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define aac_MARKER		MAKE_MARKER ('a', 'a', 'c', ' ')
-#define alac_MARKER		MAKE_MARKER ('a', 'l', 'a', 'c')
-#define alaw_MARKER		MAKE_MARKER ('a', 'l', 'a', 'w')
-#define caff_MARKER		MAKE_MARKER ('c', 'a', 'f', 'f')
-#define chan_MARKER		MAKE_MARKER ('c', 'h', 'a', 'n')
-#define data_MARKER		MAKE_MARKER ('d', 'a', 't', 'a')
-#define desc_MARKER		MAKE_MARKER ('d', 'e', 's', 'c')
-#define edct_MARKER		MAKE_MARKER ('e', 'd', 'c', 't')
-#define free_MARKER		MAKE_MARKER ('f', 'r', 'e', 'e')
-#define ima4_MARKER		MAKE_MARKER ('i', 'm', 'a', '4')
-#define info_MARKER		MAKE_MARKER ('i', 'n', 'f', 'o')
-#define inst_MARKER		MAKE_MARKER ('i', 'n', 's', 't')
-#define kuki_MARKER		MAKE_MARKER ('k', 'u', 'k', 'i')
-#define lpcm_MARKER		MAKE_MARKER ('l', 'p', 'c', 'm')
-#define mark_MARKER		MAKE_MARKER ('m', 'a', 'r', 'k')
-#define midi_MARKER		MAKE_MARKER ('m', 'i', 'd', 'i')
-#define mp1_MARKER		MAKE_MARKER ('.', 'm', 'p', '1')
-#define mp2_MARKER		MAKE_MARKER ('.', 'm', 'p', '2')
-#define mp3_MARKER		MAKE_MARKER ('.', 'm', 'p', '3')
-#define ovvw_MARKER		MAKE_MARKER ('o', 'v', 'v', 'w')
-#define pakt_MARKER		MAKE_MARKER ('p', 'a', 'k', 't')
-#define peak_MARKER		MAKE_MARKER ('p', 'e', 'a', 'k')
-#define regn_MARKER		MAKE_MARKER ('r', 'e', 'g', 'n')
-#define strg_MARKER		MAKE_MARKER ('s', 't', 'r', 'g')
-#define umid_MARKER		MAKE_MARKER ('u', 'm', 'i', 'd')
-#define uuid_MARKER		MAKE_MARKER ('u', 'u', 'i', 'd')
-#define ulaw_MARKER		MAKE_MARKER ('u', 'l', 'a', 'w')
-#define MAC3_MARKER		MAKE_MARKER ('M', 'A', 'C', '3')
-#define MAC6_MARKER		MAKE_MARKER ('M', 'A', 'C', '6')
-
-#define CAF_PEAK_CHUNK_SIZE(ch) 	((int) (sizeof (int) + ch * (sizeof (float) + 8)))
-
-#define SFE_CAF_NOT_CAF	666
-#define SFE_CAF_NO_DESC	667
-#define SFE_CAF_BAD_PEAK 668
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef struct
-{	uint8_t		srate [8] ;
-	uint32_t	fmt_id ;
-	uint32_t	fmt_flags ;
-	uint32_t	pkt_bytes ;
-	uint32_t	frames_per_packet ;
-	uint32_t	channels_per_frame ;
-	uint32_t	bits_per_chan ;
-} DESC_CHUNK ;
-
-typedef struct
-{	int			chanmap_tag ;
-
-	ALAC_DECODER_INFO	alac ;
-} CAF_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	caf_close (SF_PRIVATE *psf) ;
-static int	caf_read_header (SF_PRIVATE *psf) ;
-static int	caf_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	caf_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int	caf_read_chanmap (SF_PRIVATE * psf, sf_count_t chunk_size) ;
-
-static int caf_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * caf_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int caf_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int caf_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-caf_open (SF_PRIVATE *psf)
-{	CAF_PRIVATE * pcaf ;
-	int	subformat, format, error = 0 ;
-
-	if ((psf->container_data = calloc (1, sizeof (CAF_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	pcaf = psf->container_data ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = caf_read_header (psf)))
-			return error ;
-
-		psf->next_chunk_iterator = caf_next_chunk_iterator ;
-		psf->get_chunk_size = caf_get_chunk_size ;
-		psf->get_chunk_data = caf_get_chunk_data ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		format = SF_CONTAINER (psf->sf.format) ;
-		if (format != SF_FORMAT_CAF)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-		if (psf->file.mode != SFM_RDWR || psf->filelength < 44)
-		{	psf->filelength = 0 ;
-			psf->datalength = 0 ;
-			psf->dataoffset = 0 ;
-			psf->sf.frames = 0 ;
-			} ;
-
-		psf->strings.flags = SF_STR_ALLOW_START ;
-
-		/*
-		**	By default, add the peak chunk to floating point files. Default behaviour
-		**	can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE).
-		*/
-		if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-		{	if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-				return SFE_MALLOC_FAILED ;
-			psf->peak_info->peak_loc = SF_PEAK_START ;
-			} ;
-
-		if ((error = caf_write_header (psf, SF_FALSE)) != 0)
-			return error ;
-
-		psf->write_header	= caf_write_header ;
-		psf->set_chunk		= caf_set_chunk ;
-		} ;
-
-	psf->container_close = caf_close ;
-	psf->command = caf_command ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					error = ulaw_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					error = alaw_init (psf) ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-					error = float32_init (psf) ;
-					break ;
-
-		case SF_FORMAT_DOUBLE :
-					error = double64_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ALAC_16 :
-		case SF_FORMAT_ALAC_20 :
-		case SF_FORMAT_ALAC_24 :
-		case SF_FORMAT_ALAC_32 :
-					if (psf->file.mode == SFM_READ)
-						/* Only pass the ALAC_DECODER_INFO in read mode. */
-						error = alac_init (psf, &pcaf->alac) ;
-					else
-						error = alac_init (psf, NULL) ;
-					break ;
-
-		/* Lite remove end */
-
-		default :
-			return SFE_UNSUPPORTED_ENCODING ;
-		} ;
-
-	return error ;
-} /* caf_open */
-
-static int
-caf_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		caf_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* caf_close */
-
-static int
-caf_command (SF_PRIVATE * psf, int command, void * UNUSED (data), int UNUSED (datasize))
-{	CAF_PRIVATE	*pcaf ;
-
-	if ((pcaf = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	switch (command)
-	{	case SFC_SET_CHANNEL_MAP_INFO :
-			pcaf->chanmap_tag = aiff_caf_find_channel_layout_tag (psf->channel_map, psf->sf.channels) ;
-			return (pcaf->chanmap_tag != 0) ;
-
-		default :
-			break ;
-	} ;
-
-	return 0 ;
-} /* caf_command */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-decode_desc_chunk (SF_PRIVATE *psf, const DESC_CHUNK *desc)
-{	int format = SF_FORMAT_CAF ;
-
-	psf->sf.channels = desc->channels_per_frame ;
-
-	if (desc->fmt_id == alac_MARKER)
-	{	CAF_PRIVATE	*pcaf ;
-
-		if ((pcaf = psf->container_data) != NULL)
-		{	switch (desc->fmt_flags)
-			{	case 1 :
-					pcaf->alac.bits_per_sample = 16 ;
-					format |= SF_FORMAT_ALAC_16 ;
-					break ;
-				case 2 :
-					pcaf->alac.bits_per_sample = 20 ;
-					format |= SF_FORMAT_ALAC_20 ;
-					break ;
-				case 3 :
-					pcaf->alac.bits_per_sample = 24 ;
-					format |= SF_FORMAT_ALAC_24 ;
-					break ;
-				case 4 :
-					pcaf->alac.bits_per_sample = 32 ;
-					format |= SF_FORMAT_ALAC_32 ;
-					break ;
-				default :
-					psf_log_printf (psf, "Bad ALAC format flag value of %d\n", desc->fmt_flags) ;
-				} ;
-
-			pcaf->alac.frames_per_packet = desc->frames_per_packet ;
-			} ;
-
-		return format ;
-		} ;
-
-	format |= psf->endian == SF_ENDIAN_LITTLE ? SF_ENDIAN_LITTLE : 0 ;
-
-	if (desc->fmt_id == lpcm_MARKER && desc->fmt_flags & 1)
-	{	/* Floating point data. */
-		if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame)
-		{	psf->bytewidth = 4 ;
-			return format | SF_FORMAT_FLOAT ;
-			} ;
-		if (desc->bits_per_chan == 64 && desc->pkt_bytes == 8 * desc->channels_per_frame)
-		{	psf->bytewidth = 8 ;
-			return format | SF_FORMAT_DOUBLE ;
-			} ;
-		} ;
-
-	if (desc->fmt_id == lpcm_MARKER && (desc->fmt_flags & 1) == 0)
-	{	/* Integer data. */
-		if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame)
-		{	psf->bytewidth = 4 ;
-			return format | SF_FORMAT_PCM_32 ;
-			} ;
-		if (desc->bits_per_chan == 24 && desc->pkt_bytes == 3 * desc->channels_per_frame)
-		{	psf->bytewidth = 3 ;
-			return format | SF_FORMAT_PCM_24 ;
-			} ;
-		if (desc->bits_per_chan == 16 && desc->pkt_bytes == 2 * desc->channels_per_frame)
-		{	psf->bytewidth = 2 ;
-			return format | SF_FORMAT_PCM_16 ;
-			} ;
-		if (desc->bits_per_chan == 8 && desc->pkt_bytes == 1 * desc->channels_per_frame)
-		{	psf->bytewidth = 1 ;
-			return format | SF_FORMAT_PCM_S8 ;
-			} ;
-		} ;
-
-	if (desc->fmt_id == alaw_MARKER && desc->bits_per_chan == 8)
-	{	psf->bytewidth = 1 ;
-		return format | SF_FORMAT_ALAW ;
-		} ;
-
-	if (desc->fmt_id == ulaw_MARKER && desc->bits_per_chan == 8)
-	{	psf->bytewidth = 1 ;
-		return format | SF_FORMAT_ULAW ;
-		} ;
-
-	psf_log_printf (psf, "**** Unknown format identifier.\n") ;
-
-	return 0 ;
-} /* decode_desc_chunk */
-
-static int
-caf_read_header (SF_PRIVATE *psf)
-{	CAF_PRIVATE	*pcaf ;
-	BUF_UNION	ubuf ;
-	DESC_CHUNK desc ;
-	sf_count_t chunk_size ;
-	double srate ;
-	short version, flags ;
-	int marker, k, have_data = 0, error ;
-
-	if ((pcaf = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	memset (&desc, 0, sizeof (desc)) ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pmE2E2", 0, &marker, &version, &flags) ;
-	psf_log_printf (psf, "%M\n  Version : %d\n  Flags   : %x\n", marker, version, flags) ;
-	if (marker != caff_MARKER)
-		return SFE_CAF_NOT_CAF ;
-
-	psf_binheader_readf (psf, "mE8b", &marker, &chunk_size, ubuf.ucbuf, 8) ;
-	srate = double64_be_read (ubuf.ucbuf) ;
-	snprintf (ubuf.cbuf, sizeof (ubuf.cbuf), "%5.3f", srate) ;
-	psf_log_printf (psf, "%M : %D\n  Sample rate  : %s\n", marker, chunk_size, ubuf.cbuf) ;
-	if (marker != desc_MARKER)
-		return SFE_CAF_NO_DESC ;
-
-	if (chunk_size < SIGNED_SIZEOF (DESC_CHUNK))
-	{	psf_log_printf (psf, "**** Chunk size too small. Should be > 32 bytes.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	psf->sf.samplerate = lrint (srate) ;
-
-	psf_binheader_readf (psf, "mE44444", &desc.fmt_id, &desc.fmt_flags, &desc.pkt_bytes, &desc.frames_per_packet,
-			&desc.channels_per_frame, &desc.bits_per_chan) ;
-	psf_log_printf (psf, "  Format id    : %M\n  Format flags : %x\n  Bytes / packet   : %u\n"
-			"  Frames / packet  : %u\n  Channels / frame : %u\n  Bits / channel   : %u\n",
-			desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.frames_per_packet, desc.channels_per_frame, desc.bits_per_chan) ;
-
-	if (desc.channels_per_frame > SF_MAX_CHANNELS)
-	{	psf_log_printf (psf, "**** Bad channels per frame value %u.\n", desc.channels_per_frame) ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	if (chunk_size > SIGNED_SIZEOF (DESC_CHUNK))
-		psf_binheader_readf (psf, "j", (int) (chunk_size - sizeof (DESC_CHUNK))) ;
-
-	psf->sf.channels = desc.channels_per_frame ;
-
-	while (psf_ftell (psf) < psf->filelength)
-	{	marker = 0 ;
-		chunk_size = 0 ;
-
-		psf_binheader_readf (psf, "mE8", &marker, &chunk_size) ;
-		if (marker == 0)
-		{	psf_log_printf (psf, "Have 0 marker.\n") ;
-			break ;
-			} ;
-
-		psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-		switch (marker)
-		{	case peak_MARKER :
-				psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-				if (chunk_size != CAF_PEAK_CHUNK_SIZE (psf->sf.channels))
-				{	psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-					psf_log_printf (psf, "*** File PEAK chunk %D should be %d.\n", chunk_size, CAF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-					return SFE_CAF_BAD_PEAK ;
-					} ;
-
-				if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-					return SFE_MALLOC_FAILED ;
-
-				/* read in rest of PEAK chunk. */
-				psf_binheader_readf (psf, "E4", & (psf->peak_info->edit_number)) ;
-				psf_log_printf (psf, "  edit count : %d\n", psf->peak_info->edit_number) ;
-
-				psf_log_printf (psf, "     Ch   Position       Value\n") ;
-				for (k = 0 ; k < psf->sf.channels ; k++)
-				{	sf_count_t position ;
-					float value ;
-
-					psf_binheader_readf (psf, "Ef8", &value, &position) ;
-					psf->peak_info->peaks [k].value = value ;
-					psf->peak_info->peaks [k].position = position ;
-
-					snprintf (ubuf.cbuf, sizeof (ubuf.cbuf), "    %2d   %-12" PRId64 "   %g\n", k, position, value) ;
-					psf_log_printf (psf, ubuf.cbuf) ;
-					} ;
-
-				psf->peak_info->peak_loc = SF_PEAK_START ;
-				break ;
-
-			case chan_MARKER :
-				if (chunk_size < 12)
-				{	psf_log_printf (psf, "%M : %D (should be >= 12)\n", marker, chunk_size) ;
-					psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-					break ;
-					}
-
-				psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-				if ((error = caf_read_chanmap (psf, chunk_size)))
-					return error ;
-				break ;
-
-			case free_MARKER :
-				psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-				psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-				break ;
-
-			case data_MARKER :
-				psf_binheader_readf (psf, "E4", &k) ;
-				psf_log_printf (psf, "  edit : %u\n", k) ;
-
-				if (chunk_size == -1)
-				{	psf_log_printf (psf, "%M : -1\n") ;
-					chunk_size = psf->filelength - psf->headindex ;
-					}
-				else if (psf->filelength > 0 && psf->filelength < psf->headindex + chunk_size - 16)
-					psf_log_printf (psf, "%M : %D (should be %D)\n", marker, chunk_size, psf->filelength - psf->headindex - 8) ;
-				else
-					psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-
-				psf->dataoffset = psf->headindex ;
-
-				/* Subtract the 4 bytes of the 'edit' field above. */
-				psf->datalength = chunk_size - 4 ;
-
-				psf_binheader_readf (psf, "j", psf->datalength) ;
-				have_data = 1 ;
-				break ;
-
-			case kuki_MARKER :
-				psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-				pcaf->alac.kuki_offset = psf_ftell (psf) - 12 ;
-				psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-				break ;
-
-			case pakt_MARKER :
-				psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-				psf_binheader_readf (psf, "E8844", &pcaf->alac.packets, &pcaf->alac.valid_frames,
-									&pcaf->alac.priming_frames, &pcaf->alac.remainder_frames) ;
-
-				psf_log_printf (psf,
-						"  Packets          : %D\n"
-						"  Valid frames     : %D\n"
-						"  Priming frames   : %d\n"
-						"  Remainder frames : %d\n",
-						pcaf->alac.packets, pcaf->alac.valid_frames, pcaf->alac.priming_frames,
-						pcaf->alac.remainder_frames
-						) ;
-
-				if (pcaf->alac.packets == 0 && pcaf->alac.valid_frames == 0
-							&& pcaf->alac.priming_frames == 0 && pcaf->alac.remainder_frames == 0)
-					psf_log_printf (psf, "*** 'pakt' chunk header is all zero.\n") ;
-
-				pcaf->alac.pakt_offset = psf_ftell (psf) - 12 ;
-				psf_binheader_readf (psf, "j", make_size_t (chunk_size) - 24) ;
-				break ;
-
-			default :
-				psf_log_printf (psf, "%M : %D (skipped)\n", marker, chunk_size) ;
-				psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-				break ;
-			} ;
-
-		if (! psf->sf.seekable && have_data)
-			break ;
-
-		if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (chunk_size))
-		{	psf_log_printf (psf, "End\n") ;
-			break ;
-			} ;
-		} ;
-
-	if (have_data == 0)
-	{	psf_log_printf (psf, "**** Error, could not find 'data' chunk.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	psf->endian = (desc.fmt_flags & 2) ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if ((psf->sf.format = decode_desc_chunk (psf, &desc)) == 0)
-		return SFE_UNSUPPORTED_ENCODING ;
-
-	if (psf->bytewidth > 0)
-		psf->sf.frames = psf->datalength / psf->bytewidth ;
-
-	return 0 ;
-} /* caf_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-caf_write_header (SF_PRIVATE *psf, int calc_length)
-{	BUF_UNION	ubuf ;
-	CAF_PRIVATE	*pcaf ;
-	DESC_CHUNK desc ;
-	sf_count_t current, free_len ;
-	uint32_t uk ;
-	int subformat, append_free_block = SF_TRUE ;
-
-	if ((pcaf = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	memset (&desc, 0, sizeof (desc)) ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		if (psf->bytewidth > 0)
-			psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* 'caff' marker, version and flags. */
-	psf_binheader_writef (psf, "Em22", caff_MARKER, 1, 0) ;
-
-	/* 'desc' marker and chunk size. */
-	psf_binheader_writef (psf, "Em8", desc_MARKER, (sf_count_t) (sizeof (DESC_CHUNK))) ;
-
- 	double64_be_write (1.0 * psf->sf.samplerate, ubuf.ucbuf) ;
-	psf_binheader_writef (psf, "b", ubuf.ucbuf, make_size_t (8)) ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-	if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-		psf->endian = SF_ENDIAN_BIG ;
-	else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_LITTLE || psf->endian == SF_ENDIAN_CPU))
-		psf->endian = SF_ENDIAN_LITTLE ;
-
-	if (psf->endian == SF_ENDIAN_LITTLE)
-		desc.fmt_flags = 2 ;
-	else
-		psf->endian = SF_ENDIAN_BIG ;
-
-	/* initial section (same for all, it appears) */
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :
-			desc.fmt_id = lpcm_MARKER ;
-			psf->bytewidth = 1 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 8 ;
-			break ;
-
-		case SF_FORMAT_PCM_16 :
-			desc.fmt_id = lpcm_MARKER ;
-			psf->bytewidth = 2 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 16 ;
-			break ;
-
-		case SF_FORMAT_PCM_24 :
-			psf->bytewidth = 3 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 24 ;
-			desc.fmt_id = lpcm_MARKER ;
-			break ;
-
-		case SF_FORMAT_PCM_32 :
-			desc.fmt_id = lpcm_MARKER ;
-			psf->bytewidth = 4 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 32 ;
-			break ;
-
-		case SF_FORMAT_FLOAT :
-			desc.fmt_id = lpcm_MARKER ;
-			desc.fmt_flags |= 1 ;
-			psf->bytewidth = 4 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 32 ;
-			break ;
-
-		case SF_FORMAT_DOUBLE :
-			desc.fmt_id = lpcm_MARKER ;
-			desc.fmt_flags |= 1 ;
-			psf->bytewidth = 8 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 64 ;
-			break ;
-
-		case SF_FORMAT_ALAW :
-			desc.fmt_id = alaw_MARKER ;
-			psf->bytewidth = 1 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 8 ;
-			break ;
-
-		case SF_FORMAT_ULAW :
-			desc.fmt_id = ulaw_MARKER ;
-			psf->bytewidth = 1 ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.frames_per_packet = 1 ;
-			desc.channels_per_frame = psf->sf.channels ;
-			desc.bits_per_chan = 8 ;
-			break ;
-
-		case SF_FORMAT_ALAC_16 :
-		case SF_FORMAT_ALAC_20 :
-		case SF_FORMAT_ALAC_24 :
-		case SF_FORMAT_ALAC_32 :
-			desc.fmt_id = alac_MARKER ;
-			desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-			desc.channels_per_frame = psf->sf.channels ;
-			alac_get_desc_chunk_items (subformat, &desc.fmt_flags, &desc.frames_per_packet) ;
-			append_free_block = SF_FALSE ;
-			break ;
-
-		default :
-			return SFE_UNIMPLEMENTED ;
-		} ;
-
-	psf_binheader_writef (psf, "mE44444", desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.frames_per_packet, desc.channels_per_frame, desc.bits_per_chan) ;
-
-#if 0
-	if (psf->strings.flags & SF_STR_LOCATE_START)
-		caf_write_strings (psf, SF_STR_LOCATE_START) ;
-#endif
-
-	if (psf->peak_info != NULL)
-	{	int k ;
-		psf_binheader_writef (psf, "Em84", peak_MARKER, (sf_count_t) CAF_PEAK_CHUNK_SIZE (psf->sf.channels), psf->peak_info->edit_number) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "Ef8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-	if (psf->channel_map && pcaf->chanmap_tag)
-		psf_binheader_writef (psf, "Em8444", chan_MARKER, (sf_count_t) 12, pcaf->chanmap_tag, 0, 0) ;
-
-	/* Write custom headers. */
-	for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-		psf_binheader_writef (psf, "m44b", (int) psf->wchunks.chunks [uk].mark32, 0, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-	if (append_free_block)
-	{	/* Add free chunk so that the actual audio data starts at a multiple 0x1000. */
-		free_len = 0x1000 - psf->headindex - 16 - 12 ;
-		while (free_len < 0)
-			free_len += 0x1000 ;
-		psf_binheader_writef (psf, "Em8z", free_MARKER, free_len, (int) free_len) ;
-		} ;
-
-	psf_binheader_writef (psf, "Em84", data_MARKER, psf->datalength + 4, 0) ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-	if (current < psf->dataoffset)
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-	else if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* caf_write_header */
-
-static int
-caf_read_chanmap (SF_PRIVATE * psf, sf_count_t chunk_size)
-{	const AIFF_CAF_CHANNEL_MAP * map_info ;
-	unsigned channel_bitmap, channel_decriptions, bytesread ;
-	int layout_tag ;
-
-	bytesread = psf_binheader_readf (psf, "E444", &layout_tag, &channel_bitmap, &channel_decriptions) ;
-
-	map_info = aiff_caf_of_channel_layout_tag (layout_tag) ;
-
-	psf_log_printf (psf, "  Tag    : %x\n", layout_tag) ;
-	if (map_info)
-		psf_log_printf (psf, "  Layout : %s\n", map_info->name) ;
-
-	if (bytesread < chunk_size)
-		psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-
-	if (map_info->channel_map != NULL)
-	{	size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ;
-
-		free (psf->channel_map) ;
-
-		if ((psf->channel_map = malloc (chanmap_size)) == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		memcpy (psf->channel_map, map_info->channel_map, chanmap_size) ;
-		} ;
-
-	return 0 ;
-} /* caf_read_chanmap */
-
-/*==============================================================================
-*/
-
-static int
-caf_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{	return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* caf_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-caf_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{	return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* caf_next_chunk_iterator */
-
-static int
-caf_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	int indx ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-	return SFE_NO_ERROR ;
-} /* caf_get_chunk_size */
-
-static int
-caf_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	int indx ;
-	sf_count_t pos ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	if (chunk_info->data == NULL)
-		return SFE_BAD_CHUNK_DATA_PTR ;
-
-	chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-	memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-	pos = psf_ftell (psf) ;
-	psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-	psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-	psf_fseek (psf, pos, SEEK_SET) ;
-
-	return SFE_NO_ERROR ;
-} /* caf_get_chunk_data */
diff --git a/libs/libsndfile/src/cart.c b/libs/libsndfile/src/cart.c
deleted file mode 100644
index a56ed60e51..0000000000
--- a/libs/libsndfile/src/cart.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-** Copyright (C) 2012 Chris Roberts <c.roberts@csrfm.com>
-** Copyright (C) 2006-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2006 Paul Davis <paul@linuxaudiosystems.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdlib.h>
-#include "common.h"
-
-
-
-static inline size_t
-cart_min_size (const SF_CART_INFO* info)
-{	if (info == NULL)
-		return 0 ;
-
-	return offsetof (SF_CART_INFO, tag_text) + info->tag_text_size ;
-} /* cart_min_size */
-
-SF_CART_INFO_16K*
-cart_var_alloc (void)
-{	SF_CART_INFO_16K* thing ;
-	thing = malloc (sizeof (SF_CART_INFO_16K)) ;
-	return thing ;
-} /* cart_var_alloc */
-
-int
-cart_var_set (SF_PRIVATE *psf, const SF_CART_INFO * info, size_t datasize)
-{	size_t len ;
-
-	if (info == NULL)
-		return SF_FALSE ;
-
-	if (cart_min_size (info) > datasize)
-	{	psf->error = SFE_BAD_CART_INFO_SIZE ;
-		return SF_FALSE ;
-		} ;
-
-	if (datasize >= sizeof (SF_CART_INFO_16K))
-	{	psf->error = SFE_BAD_CART_INFO_TOO_BIG ;
-		return SF_FALSE ;
-		} ;
-
-	if (psf->cart_16k == NULL)
-	{	if ((psf->cart_16k = cart_var_alloc ()) == NULL)
-		{	psf->error = SFE_MALLOC_FAILED ;
-			return SF_FALSE ;
-			} ;
-		} ;
-
-	memcpy (psf->cart_16k, info, offsetof (SF_CART_INFO, tag_text)) ;
-	psf_strlcpy_crlf (psf->cart_16k->tag_text, info->tag_text, sizeof (psf->cart_16k->tag_text), datasize - offsetof (SF_CART_INFO, tag_text)) ;
-
-	len = strlen (psf->cart_16k->tag_text) ;
-
-	if (len > 0 && psf->cart_16k->tag_text [len - 1] != '\n')
-		psf_strlcat (psf->cart_16k->tag_text, sizeof (psf->cart_16k->tag_text), "\r\n") ;
-
-	/* Force tag_text_size to be even. */
-	len = strlen (psf->cart_16k->tag_text) ;
-	len += (len & 1) ? 1 : 2 ;
-
-	psf->cart_16k->tag_text_size = len ;
-
-	return SF_TRUE ;
-} /* cart_var_set */
-
-
-int
-cart_var_get (SF_PRIVATE *psf, SF_CART_INFO * data, size_t datasize)
-{	size_t size ;
-	if (psf->cart_16k == NULL)
-		return SF_FALSE ;
-
-	size = SF_MIN (datasize, cart_min_size ((const SF_CART_INFO *) psf->cart_16k)) ;
-
-	memcpy (data, psf->cart_16k, size) ;
-
-	return SF_TRUE ;
-} /* cart_var_get */
-
-
diff --git a/libs/libsndfile/src/chanmap.c b/libs/libsndfile/src/chanmap.c
deleted file mode 100644
index 9a9f7f0f16..0000000000
--- a/libs/libsndfile/src/chanmap.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Mostly from "Apple Core Audio Format Specification 1.0":
-**
-**		http://developer.apple.com/documentation/MusicAudio/Reference/CAFSpec/CAFSpec.pdf
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "common.h"
-#include "chanmap.h"
-
-
-static const AIFF_CAF_CHANNEL_MAP zero_chan [] =
-{	{	(0 << 16) | 0, NULL, "Use channel descriptions." },
-	{	(1 << 16) | 0, NULL, "Use channel bitmap." }
-} ; /* zero_chan */
-
-
-static const int one_chan_mono [1] = {	SF_CHANNEL_MAP_MONO } ;
-
-static const AIFF_CAF_CHANNEL_MAP one_chan [] =
-{	{	(100 << 16) | 1, one_chan_mono, "mono" }
-} ; /* one_chan */
-
-
-static const int two_channel_stereo [2] = {	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT } ;
-
-static const AIFF_CAF_CHANNEL_MAP two_chan [] =
-{	{	(101 << 16) | 2, two_channel_stereo, "stereo (L, R)" },
-	{	(102 << 16) | 2, two_channel_stereo, "stereo headphones (L, R)" },
-#if 0
-	{	(103 << 16) | 2, NULL, "matrix stereo (Lt, Rt)" },
-	{	(104 << 16) | 2, NULL, "2 channels (mid, side)" },
-	{	(105 << 16) | 2, NULL, "coincident mic pair" },
-	{	(106 << 16) | 2, NULL, "binaural stereo (L, R)"
-		}
-#endif
-} ; /* two_chan */
-
-
-static const int three_channel_mpeg_30a [3] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int three_channel_mpeg_30b [3] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT } ;
-static const int three_channel_itu_21 [3] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int three_channel_dvd_4 [3] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP three_chan [] =
-{	{	(113 << 16) | 3, three_channel_mpeg_30a, "MPEG 3 0 A (L, R, C)" },
-	{	(114 << 16) | 3, three_channel_mpeg_30b, "MPEG 3 0 B (C, L, R)" },
-	{	(131 << 16) | 3, three_channel_itu_21, "ITU 2.1 (L, R, Cs)" },
-	{	(133 << 16) | 3, three_channel_dvd_4, "DVD 4 (L, R, LFE)" }
-} ; /* three_chan */
-
-
-static const int four_channel_ambisonc_b [4] =
-	{	SF_CHANNEL_MAP_AMBISONIC_B_W, SF_CHANNEL_MAP_AMBISONIC_B_X, SF_CHANNEL_MAP_AMBISONIC_B_Y, SF_CHANNEL_MAP_AMBISONIC_B_Z } ;
-static const int four_channel_quad [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int four_channel_mpeg_40a [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_mpeg_40b [4] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_itu_23 [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int four_channel_dvd_5 [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_dvd_10 [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP four_chan [] =
-{	{	(107 << 16) | 4, four_channel_ambisonc_b, "ambisonic B (W,  X, Y, Z)" },
-	{	(108 << 16) | 4, four_channel_quad, "quad (Lfront, Rfront, Lrear, Rrear)" },
-	{	(115 << 16) | 4, four_channel_mpeg_40a, "MPEG 4.0 A (L, R, C, Cs)" },
-	{	(116 << 16) | 4, four_channel_mpeg_40b, "MPEG 4.0 B (C, L, R, Cs)" },
-	{	(132 << 16) | 4, four_channel_itu_23, "ITU 2.3 (L, R, Ls, Rs)" },
-	{	(134 << 16) | 4, four_channel_dvd_5, "DVD 5 (L, R, LFE, Cs)" },
-	{	(136 << 16) | 4, four_channel_dvd_10, "DVD 10 (L, R, C, LFE)" }
-} ; /* four_chan */
-
-
-static const int five_channel_pentagonal [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int five_channel_mpeg_50_a [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_mpeg_50_b [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int five_channel_mpeg_50_c [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_mpeg_50_d [5] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_dvd_6 [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_dvd_11 [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int five_channel_dvd_18 [5] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP five_chan [] =
-{	{	(109 << 16) | 5, five_channel_pentagonal, "pentagonal (L,  R, Lrear, Rrear, C)" },
-	{	(117 << 16) | 5, five_channel_mpeg_50_a, "MPEG 5.0 A (L, R, C, Ls, Rs)" },
-	{	(118 << 16) | 5, five_channel_mpeg_50_b, "MPEG 5.0 B (L, R, Ls, Rs, C)" },
-	{	(119 << 16) | 5, five_channel_mpeg_50_c, "MPEG 5.0 C (L, C, R, Ls, Rs,)" },
-	{	(120 << 16) | 5, five_channel_mpeg_50_d, "MPEG 5.0 D (C, L, R, Ls, Rs)" },
-	{	(135 << 16) | 5, five_channel_dvd_6, "DVD 6 (L, R, LFE, Ls, Rs)" },
-	{	(137 << 16) | 5, five_channel_dvd_11, "DVD 11 (L, R, C, LFE, Cs)" },
-	{	(138 << 16) | 5, five_channel_dvd_18, "DVD 18 (L, R, Ls, Rs, LFE)" }
-} ; /* five_chan */
-
-
-static const int six_channel_mpeg_51_a [6] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int six_channel_mpeg_51_b [6] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_mpeg_51_c [6] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_mpeg_51_d [6] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_audio_unit_60 [6] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int six_channel_aac_60 [6] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-
-static const AIFF_CAF_CHANNEL_MAP six_chan [] =
-{	{	(110 << 16) | 6, NULL, "hexagonal (L, R, Lr, Rr, C, Rear)" },
-	{	(121 << 16) | 6, six_channel_mpeg_51_a, "MPEG 5.1 A (L, R, C, LFE, Ls, Rs)" },
-	{	(122 << 16) | 6, six_channel_mpeg_51_b, "MPEG 5.1 B (L, R, Ls, Rs, C, LFE)" },
-	{	(123 << 16) | 6, six_channel_mpeg_51_c, "MPEG 5.1 C (L, C, R, Ls, Rs, LFE)" },
-	{	(124 << 16) | 6, six_channel_mpeg_51_d, "MPEG 5.1 D (C, L, R, Ls, Rs, LFE)" },
-	{	(139 << 16) | 6, six_channel_audio_unit_60, "AudioUnit 6.0 (L, R, Ls, Rs, C, Cs)" },
-	{	(141 << 16) | 6, six_channel_aac_60, "AAC 6.0 (C, L, R, Ls, Rs, Cs)" }
-} ; /* six_chan */
-
-
-static const int six_channel_mpeg_61a [7] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int six_channel_aac_61 [7] =
-	{	SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP seven_chan [] =
-{	{	(125 << 16) | 7, six_channel_mpeg_61a, "MPEG 6.1 A (L, R, C, LFE, Ls, Rs, Cs)" },
-	{	(140 << 16) | 7, NULL, "AudioUnit 7.0 (L, R, Ls, Rs, C, Rls, Rrs)" },
-	{	(142 << 16) | 7, six_channel_aac_61, "AAC 6.1 (C, L, R, Ls, Rs, Cs, Lfe)" },
-	{	(143 << 16) | 7, NULL, "AAC 7.0 (C, L, R, Ls, Rs, Rls, Rrs,)" }
-} ; /* seven_chan */
-
-
-static const AIFF_CAF_CHANNEL_MAP eight_chan [] =
-{	{	(111 << 16) | 8, NULL,
-		// front left, front right, rear left, rear right,
-		// front center, rear center, side left, side right
-		"octagonal (Lf, Rf, Lr, Rr, Cf, Cr, Ls, Rs)"
-		},
-	{	(112 << 16) | 8, NULL,
-		// left, right, rear left, rear right
-		// top left, top right, top rear left, top rear right
-		"cube (L, R, Lrear, Rrear, Ltop, Rtop, Ltoprear, Rtoprear)"
-		},
-	{	(126 << 16) | 8, NULL, "MPEG 7.1 A (L, R, C, LFE, Ls, Rs, Lc, Rc)" },
-	{	(127 << 16) | 8, NULL, "MPEG 7.1 B (C, Lc, Rc, L, R, Ls, Rs, LFE)" },
-	{	(128 << 16) | 8, NULL, "MPEG 7.1 C (L, R, C, LFE, Ls, R, Rls, Rrs)" },
-	{	(129 << 16) | 8, NULL, "Emagic Default 7.1 (L, R, Ls, Rs, C, LFE, Lc, Rc)" },
-	{	(130 << 16) | 8, NULL,
-		// (ITU_5_1 plus a matrix encoded stereo mix)
-		"SMPTE DTV (L, R, C, LFE, Ls, Rs, Lt, Rt)"
-		},
-	{	(144 << 16) | 8, NULL, "AAC octagonal (C, L, R, Ls, Rs, Rls, Rrs, Cs)" }
-} ; /* eight_chan */
-
-
-
-#if 0
-
-TMH_10_2_std = (145 << 16) | 16,
-// L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
-
-TMH_10_2_full = (146 << 16) | 21,
-// TMH_10_2_std plus: Lc Rc HI VI Haptic
-
-#endif
-
-
-typedef struct
-{	const AIFF_CAF_CHANNEL_MAP * map ;
-	int len ;
-} MAP_MAP ;
-
-static const MAP_MAP map [] =
-{	{ zero_chan,	ARRAY_LEN (zero_chan) },
-	{ one_chan,		ARRAY_LEN (one_chan) },
-	{ two_chan,		ARRAY_LEN (two_chan) },
-	{ three_chan,	ARRAY_LEN (three_chan) },
-	{ four_chan,	ARRAY_LEN (four_chan) },
-	{ five_chan,	ARRAY_LEN (five_chan) },
-	{ six_chan,		ARRAY_LEN (six_chan) },
-	{ seven_chan,	ARRAY_LEN (seven_chan) },
-	{ eight_chan,	ARRAY_LEN (eight_chan) }
-} ; /* map */
-
-
-int
-aiff_caf_find_channel_layout_tag (const int *chan_map, int channels)
-{	const AIFF_CAF_CHANNEL_MAP * curr_map ;
-	unsigned k, len ;
-
-	if (channels < 1 || channels > ARRAY_LEN (map))
-		return 0 ;
-
-	curr_map = map [channels].map ;
-	len = map [channels].len ;
-
-	for (k = 0 ; k < len ; k++)
-		if (curr_map [k].channel_map != NULL)
-			if (memcmp (chan_map, curr_map [k].channel_map, channels * sizeof (chan_map [0])) == 0)
-				return curr_map [k].channel_layout_tag ;
-
-	return 0 ;
-} /* aiff_caf_find_channel_layout_tag */
-
-const AIFF_CAF_CHANNEL_MAP *
-aiff_caf_of_channel_layout_tag (int tag)
-{	const AIFF_CAF_CHANNEL_MAP * curr_map ;
-	unsigned k, len ;
-	int channels = tag & 0xffff ;
-
-	if (channels < 0 || channels > ARRAY_LEN (map))
-		return NULL ;
-
-	curr_map = map [channels].map ;
-	len = map [channels].len ;
-
-	for (k = 0 ; k < len ; k++)
-		if (curr_map [k].channel_layout_tag == tag)
-			return curr_map + k ;
-
-	return NULL ;
-} /* aiff_caf_of_channel_layout_tag */
diff --git a/libs/libsndfile/src/chanmap.h b/libs/libsndfile/src/chanmap.h
deleted file mode 100644
index 8af409dbac..0000000000
--- a/libs/libsndfile/src/chanmap.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-typedef struct
-{	/* The tag in the AIFF or CAF file. */
-	int channel_layout_tag ;
-
-	/* The equivalent array of SF_CHANNEL_MAP_* entries. */
-	const int * channel_map ;
-
-	const char * name ;
-} AIFF_CAF_CHANNEL_MAP ;
-
-
-int aiff_caf_find_channel_layout_tag (const int *chan_map, int channels) ;
-
-const AIFF_CAF_CHANNEL_MAP * aiff_caf_of_channel_layout_tag (int tag) ;
diff --git a/libs/libsndfile/src/chunk.c b/libs/libsndfile/src/chunk.c
deleted file mode 100644
index b661ce5c2b..0000000000
--- a/libs/libsndfile/src/chunk.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2012 IOhannes m zmoelnig, IEM <zmoelnig@iem.at>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdlib.h>
-#include	<string.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-static int64_t
-hash_of_str (const char * str)
-{	int64_t marker = 0 ;
-	int k ;
-
-	for (k = 0 ; str [k] ; k++)
-		marker = marker * 0x7f + ((const uint8_t *) str) [k] ;
-
-	return marker ;
-} /* hash_of_str */
-
-SF_CHUNK_ITERATOR *
-psf_get_chunk_iterator (SF_PRIVATE * psf, const char * marker_str)
-{	const READ_CHUNKS * pchk = &psf->rchunks ;
-	int idx ;
-
-	if (marker_str)
-		idx = psf_find_read_chunk_str (pchk, marker_str) ;
-	else
-		idx = pchk->used > 0 ? 0 : -1 ;
-
-	if (idx < 0)
-		return NULL ;
-
-	if (psf->iterator == NULL)
-	{	psf->iterator = calloc (1, sizeof (SF_CHUNK_ITERATOR)) ;
-		if (psf->iterator == NULL)
-			return NULL ;
-		} ;
-
-	psf->iterator->sndfile = (SNDFILE *) psf ;
-
-	if (marker_str)
-	{	int64_t hash ;
-		size_t marker_len ;
-		union
-		{	uint32_t marker ;
-			char str [5] ;
-		} u ;
-
-		snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-		marker_len = strlen (marker_str) ;
-		if (marker_len > 64)
-			marker_len = 64 ;
-
-		hash = marker_len > 4 ? hash_of_str (marker_str) : u.marker ;
-
-		memcpy (psf->iterator->id, marker_str, marker_len) ;
-		psf->iterator->id_size = marker_len ;
-		psf->iterator->hash = hash ;
-		}
-
-	psf->iterator->current = idx ;
-
-	return psf->iterator ;
-} /* psf_get_chunk_iterator */
-
-SF_CHUNK_ITERATOR *
-psf_next_chunk_iterator (const READ_CHUNKS * pchk , SF_CHUNK_ITERATOR * iterator)
-{	int64_t hash = iterator->hash ;
-	uint32_t k ;
-
-	iterator->current++ ;
-
-	if (hash)
-	{	for (k = iterator->current ; k < pchk->used ; k++)
-			if (pchk->chunks [k].hash == hash)
-			{	iterator->current = k ;
-				return iterator ;
-				}
-		}
-	else if (iterator->current < pchk->used)
-		return iterator ;
-
-	/* No match, clear iterator and return NULL */
-	memset (iterator, 0, sizeof (*iterator)) ;
-	return NULL ;
-} /* psf_next_chunk_iterator */
-
-static int
-psf_store_read_chunk (READ_CHUNKS * pchk, const READ_CHUNK * rchunk)
-{	if (pchk->count == 0)
-	{	pchk->used = 0 ;
-		pchk->count = 20 ;
-		pchk->chunks = calloc (pchk->count, sizeof (READ_CHUNK)) ;
-		}
-	else if (pchk->used > pchk->count)
-		return SFE_INTERNAL ;
-	else if (pchk->used == pchk->count)
-	{	READ_CHUNK * old_ptr = pchk->chunks ;
-		int new_count = 3 * (pchk->count + 1) / 2 ;
-
-		pchk->chunks = realloc (old_ptr, new_count * sizeof (READ_CHUNK)) ;
-		if (pchk->chunks == NULL)
-		{	pchk->chunks = old_ptr ;
-			return SFE_MALLOC_FAILED ;
-			} ;
-		pchk->count = new_count ;
-		} ;
-
-	pchk->chunks [pchk->used] = *rchunk ;
-
-	pchk->used ++ ;
-
-	return SFE_NO_ERROR ;
-} /* psf_store_read_chunk */
-
-int
-psf_store_read_chunk_u32 (READ_CHUNKS * pchk, uint32_t marker, sf_count_t offset, uint32_t len)
-{	READ_CHUNK rchunk ;
-
-	memset (&rchunk, 0, sizeof (rchunk)) ;
-
-	rchunk.hash = marker ;
-	rchunk.mark32 = marker ;
-	rchunk.offset = offset ;
-	rchunk.len = len ;
-
-	rchunk.id_size = 4 ;
-	memcpy (rchunk.id, &marker, rchunk.id_size) ;
-
-	return psf_store_read_chunk (pchk, &rchunk) ;
-} /* psf_store_read_chunk_u32 */
-
-int
-psf_find_read_chunk_str (const READ_CHUNKS * pchk, const char * marker_str)
-{	int64_t hash ;
-	uint32_t k ;
-	union
-	{	uint32_t marker ;
-		char str [5] ;
-	} u ;
-
-	snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-	hash = strlen (marker_str) > 4 ? hash_of_str (marker_str) : u.marker ;
-
-	for (k = 0 ; k < pchk->used ; k++)
-		if (pchk->chunks [k].hash == hash)
-			return k ;
-
-	return -1 ;
-} /* psf_find_read_chunk_str */
-
-int
-psf_find_read_chunk_m32 (const READ_CHUNKS * pchk, uint32_t marker)
-{	uint32_t k ;
-
-	for (k = 0 ; k < pchk->used ; k++)
-		if (pchk->chunks [k].mark32 == marker)
-			return k ;
-
-	return -1 ;
-} /* psf_find_read_chunk_m32 */
-int
-psf_find_read_chunk_iterator (const READ_CHUNKS * pchk, const SF_CHUNK_ITERATOR * marker)
-{	if (marker->current < pchk->used)
-		return marker->current ;
-
-	return -1 ;
-} /* psf_find_read_chunk_iterator */
-
-int
-psf_store_read_chunk_str (READ_CHUNKS * pchk, const char * marker_str, sf_count_t offset, uint32_t len)
-{	READ_CHUNK rchunk ;
-	union
-	{	uint32_t marker ;
-		char str [5] ;
-	} u ;
-	size_t marker_len ;
-
-	memset (&rchunk, 0, sizeof (rchunk)) ;
-	snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-	marker_len = strlen (marker_str) ;
-
-	rchunk.hash = marker_len > 4 ? hash_of_str (marker_str) : u.marker ;
-	rchunk.mark32 = u.marker ;
-	rchunk.offset = offset ;
-	rchunk.len = len ;
-
-	rchunk.id_size = marker_len > 64 ? 64 : marker_len ;
-	memcpy (rchunk.id, marker_str, rchunk.id_size) ;
-
-	return psf_store_read_chunk (pchk, &rchunk) ;
-} /* psf_store_read_chunk_str */
-
-int
-psf_save_write_chunk (WRITE_CHUNKS * pchk, const SF_CHUNK_INFO * chunk_info)
-{	union
-	{	uint32_t marker ;
-		char str [5] ;
-	} u ;
-	uint32_t len ;
-
-	if (pchk->count == 0)
-	{	pchk->used = 0 ;
-		pchk->count = 20 ;
-		pchk->chunks = calloc (pchk->count, sizeof (WRITE_CHUNK)) ;
-		}
-	else if (pchk->used >= pchk->count)
-	{	WRITE_CHUNK * old_ptr = pchk->chunks ;
-		int new_count = 3 * (pchk->count + 1) / 2 ;
-
-		pchk->chunks = realloc (old_ptr, new_count * sizeof (WRITE_CHUNK)) ;
-		if (pchk->chunks == NULL)
-		{	pchk->chunks = old_ptr ;
-			return SFE_MALLOC_FAILED ;
-			} ;
-		} ;
-
-	len = chunk_info->datalen ;
-	while (len & 3) len ++ ;
-
-	snprintf (u.str, sizeof (u.str), "%s", chunk_info->id) ;
-
-	pchk->chunks [pchk->used].hash = strlen (chunk_info->id) > 4 ? hash_of_str (chunk_info->id) : u.marker ;
-	pchk->chunks [pchk->used].mark32 = u.marker ;
-	pchk->chunks [pchk->used].len = len ;
-	pchk->chunks [pchk->used].data = psf_memdup (chunk_info->data, chunk_info->datalen) ;
-
-	pchk->used ++ ;
-
-	return SFE_NO_ERROR ;
-} /* psf_save_write_chunk */
-
diff --git a/libs/libsndfile/src/command.c b/libs/libsndfile/src/command.c
deleted file mode 100644
index 6db7315415..0000000000
--- a/libs/libsndfile/src/command.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-static SF_FORMAT_INFO const simple_formats [] =
-{
-	{	SF_FORMAT_AIFF | SF_FORMAT_PCM_16,
-		"AIFF (Apple/SGI 16 bit PCM)", "aiff"
-		},
-
-	{	SF_FORMAT_AIFF | SF_FORMAT_FLOAT,
-		"AIFF (Apple/SGI 32 bit float)", "aifc"
-		},
-
-	{	SF_FORMAT_AIFF | SF_FORMAT_PCM_S8,
-		"AIFF (Apple/SGI 8 bit PCM)", "aiff"
-		},
-
-	{	SF_FORMAT_AU | SF_FORMAT_PCM_16,
-		"AU (Sun/Next 16 bit PCM)", "au"
-		},
-
-	{	SF_FORMAT_AU | SF_FORMAT_ULAW,
-		"AU (Sun/Next 8-bit u-law)", "au"
-		},
-
-	{	SF_FORMAT_CAF | SF_FORMAT_ALAC_16,
-		"CAF (Apple 16 bit ALAC)", "caf"
-		},
-
-	{	SF_FORMAT_CAF | SF_FORMAT_PCM_16,
-		"CAF (Apple 16 bit PCM)", "caf"
-		},
-
-#if HAVE_EXTERNAL_LIBS
-	{	SF_FORMAT_FLAC | SF_FORMAT_PCM_16,
-		"FLAC 16 bit", "flac"
-		},
-#endif
-
-	{	SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM,
-		"OKI Dialogic VOX ADPCM", "vox"
-		},
-
-#if HAVE_EXTERNAL_LIBS
-	{	SF_FORMAT_OGG | SF_FORMAT_VORBIS,
-		"Ogg Vorbis (Xiph Foundation)", "oga"
-		},
-#endif
-
-	{	SF_FORMAT_WAV | SF_FORMAT_PCM_16,
-		"WAV (Microsoft 16 bit PCM)", "wav"
-		},
-
-	{	SF_FORMAT_WAV | SF_FORMAT_FLOAT,
-		"WAV (Microsoft 32 bit float)", "wav"
-		},
-
-	{	SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM,
-		"WAV (Microsoft 4 bit IMA ADPCM)", "wav"
-		},
-
-	{	SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM,
-		"WAV (Microsoft 4 bit MS ADPCM)", "wav"
-		},
-
-	{	SF_FORMAT_WAV | SF_FORMAT_PCM_U8,
-		"WAV (Microsoft 8 bit PCM)", "wav"
-		},
-
-} ; /* simple_formats */
-
-int
-psf_get_format_simple_count	(void)
-{	return (sizeof (simple_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_simple_count */
-
-int
-psf_get_format_simple (SF_FORMAT_INFO *data)
-{	int indx ;
-
-	if (data->format < 0 || data->format >= (SIGNED_SIZEOF (simple_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-		return SFE_BAD_COMMAND_PARAM ;
-
-	indx = data->format ;
-	memcpy (data, &(simple_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ;
-
-	return 0 ;
-} /* psf_get_format_simple */
-
-/*============================================================================
-** Major format info.
-*/
-
-static SF_FORMAT_INFO const major_formats [] =
-{
-	{	SF_FORMAT_AIFF,		"AIFF (Apple/SGI)",						"aiff" 	},
-	{	SF_FORMAT_AU,		"AU (Sun/NeXT)", 						"au"	},
-	{	SF_FORMAT_AVR,		"AVR (Audio Visual Research)",			"avr"	},
-	{	SF_FORMAT_CAF,		"CAF (Apple Core Audio File)",			"caf"	},
-#if HAVE_EXTERNAL_LIBS
-	{	SF_FORMAT_FLAC,		"FLAC (Free Lossless Audio Codec)",		"flac"	},
-#endif
-	{	SF_FORMAT_HTK,		"HTK (HMM Tool Kit)",					"htk"	},
-	{	SF_FORMAT_SVX,		"IFF (Amiga IFF/SVX8/SV16)",			"iff"	},
-	{	SF_FORMAT_MAT4,		"MAT4 (GNU Octave 2.0 / Matlab 4.2)",	"mat"	},
-	{	SF_FORMAT_MAT5,		"MAT5 (GNU Octave 2.1 / Matlab 5.0)",	"mat"	},
-	{	SF_FORMAT_MPC2K,	"MPC (Akai MPC 2k)",					"mpc"	},
-#if HAVE_EXTERNAL_LIBS
-	{	SF_FORMAT_OGG,		"OGG (OGG Container format)",			"oga"	},
-#endif
-	{	SF_FORMAT_PAF,		"PAF (Ensoniq PARIS)", 					"paf"	},
-	{	SF_FORMAT_PVF,		"PVF (Portable Voice Format)",			"pvf"	},
-	{	SF_FORMAT_RAW,		"RAW (header-less)",					"raw"	},
-	{	SF_FORMAT_RF64,		"RF64 (RIFF 64)",						"rf64"	},
-	{	SF_FORMAT_SD2,		"SD2 (Sound Designer II)", 				"sd2"	},
-	{	SF_FORMAT_SDS,		"SDS (Midi Sample Dump Standard)", 		"sds"	},
-	{	SF_FORMAT_IRCAM,	"SF (Berkeley/IRCAM/CARL)",				"sf"	},
-	{	SF_FORMAT_VOC,		"VOC (Creative Labs)",					"voc"	},
-	{	SF_FORMAT_W64,		"W64 (SoundFoundry WAVE 64)",			"w64"	},
-	{	SF_FORMAT_WAV,		"WAV (Microsoft)",						"wav"	},
-	{	SF_FORMAT_NIST,		"WAV (NIST Sphere)",					"wav"	},
-	{	SF_FORMAT_WAVEX,	"WAVEX (Microsoft)",					"wav"	},
-	{	SF_FORMAT_WVE,		"WVE (Psion Series 3)",					"wve"	},
-	{	SF_FORMAT_XI,		"XI (FastTracker 2)",					"xi"	},
-
-} ; /* major_formats */
-
-int
-psf_get_format_major_count	(void)
-{	return (sizeof (major_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_major_count */
-
-int
-psf_get_format_major (SF_FORMAT_INFO *data)
-{	int indx ;
-
-	if (data->format < 0 || data->format >= (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-		return SFE_BAD_COMMAND_PARAM ;
-
-	indx = data->format ;
-	memcpy (data, &(major_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ;
-
-	return 0 ;
-} /* psf_get_format_major */
-
-/*============================================================================
-** Subtype format info.
-*/
-
-static SF_FORMAT_INFO subtype_formats [] =
-{
-	{	SF_FORMAT_PCM_S8,		"Signed 8 bit PCM",		NULL 	},
-	{	SF_FORMAT_PCM_16,		"Signed 16 bit PCM",	NULL 	},
-	{	SF_FORMAT_PCM_24,		"Signed 24 bit PCM",	NULL 	},
-	{	SF_FORMAT_PCM_32,		"Signed 32 bit PCM",	NULL 	},
-
-	{	SF_FORMAT_PCM_U8,		"Unsigned 8 bit PCM",	NULL 	},
-
-	{	SF_FORMAT_FLOAT,		"32 bit float",			NULL 	},
-	{	SF_FORMAT_DOUBLE,		"64 bit float",			NULL 	},
-
-	{	SF_FORMAT_ULAW,			"U-Law",				NULL 	},
-	{	SF_FORMAT_ALAW,			"A-Law",				NULL 	},
-	{	SF_FORMAT_IMA_ADPCM,	"IMA ADPCM",			NULL 	},
-	{	SF_FORMAT_MS_ADPCM,		"Microsoft ADPCM",		NULL 	},
-
-	{	SF_FORMAT_GSM610,		"GSM 6.10",				NULL 	},
-
-	{	SF_FORMAT_G721_32,		"32kbs G721 ADPCM",		NULL 	},
-	{	SF_FORMAT_G723_24,		"24kbs G723 ADPCM",		NULL 	},
-
-	{	SF_FORMAT_DWVW_12,		"12 bit DWVW",			NULL 	},
-	{	SF_FORMAT_DWVW_16,		"16 bit DWVW",			NULL 	},
-	{	SF_FORMAT_DWVW_24,		"24 bit DWVW",			NULL 	},
-	{	SF_FORMAT_VOX_ADPCM,	"VOX ADPCM",			"vox" 	},
-
-	{	SF_FORMAT_DPCM_16,		"16 bit DPCM",			NULL 	},
-	{	SF_FORMAT_DPCM_8,		"8 bit DPCM",			NULL 	},
-
-#if HAVE_EXTERNAL_LIBS
-	{	SF_FORMAT_VORBIS,		"Vorbis",				NULL 	},
-#endif
-
-	{	SF_FORMAT_ALAC_16,		"16 bit ALAC",			NULL	},
-	{	SF_FORMAT_ALAC_20,		"20 bit ALAC",			NULL	},
-	{	SF_FORMAT_ALAC_24,		"24 bit ALAC",			NULL	},
-	{	SF_FORMAT_ALAC_32,		"32 bit ALAC",			NULL	},
-} ; /* subtype_formats */
-
-int
-psf_get_format_subtype_count	(void)
-{	return (sizeof (subtype_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_subtype_count */
-
-int
-psf_get_format_subtype (SF_FORMAT_INFO *data)
-{	int indx ;
-
-	if (data->format < 0 || data->format >= (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-	{	data->format = 0 ;
-		return SFE_BAD_COMMAND_PARAM ;
-		} ;
-
-	indx = data->format ;
-	memcpy (data, &(subtype_formats [indx]), sizeof (SF_FORMAT_INFO)) ;
-
-	return 0 ;
-} /* psf_get_format_subtype */
-
-/*==============================================================================
-*/
-
-int
-psf_get_format_info (SF_FORMAT_INFO *data)
-{	int k, format ;
-
-	if (SF_CONTAINER (data->format))
-	{	format = SF_CONTAINER (data->format) ;
-
-		for (k = 0 ; k < (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++)
-		{	if (format == major_formats [k].format)
-			{	memcpy (data, &(major_formats [k]), sizeof (SF_FORMAT_INFO)) ;
-				return 0 ;
-				} ;
-			} ;
-		}
-	else if (SF_CODEC (data->format))
-	{	format = SF_CODEC (data->format) ;
-
-		for (k = 0 ; k < (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++)
-		{	if (format == subtype_formats [k].format)
-			{	memcpy (data, &(subtype_formats [k]), sizeof (SF_FORMAT_INFO)) ;
-				return 0 ;
-				} ;
-			} ;
-		} ;
-
-	memset (data, 0, sizeof (SF_FORMAT_INFO)) ;
-
-	return SFE_BAD_COMMAND_PARAM ;
-} /* psf_get_format_info */
-
-/*==============================================================================
-*/
-
-double
-psf_calc_signal_max (SF_PRIVATE *psf, int normalize)
-{	BUF_UNION	ubuf ;
-	sf_count_t	position ;
-	double 		max_val, temp, *data ;
-	int			k, len, readcount, save_state ;
-
-	/* If the file is not seekable, there is nothing we can do. */
-	if (! psf->sf.seekable)
-	{	psf->error = SFE_NOT_SEEKABLE ;
-		return	0.0 ;
-		} ;
-
-	if (! psf->read_double)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0.0 ;
-		} ;
-
-	save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-	sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ;
-
-	/* Brute force. Read the whole file and find the biggest sample. */
-	/* Get current position in file */
-	position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ;
-	/* Go to start of file. */
-	sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ;
-
-	data = ubuf.dbuf ;
-	/* Make sure len is an integer multiple of the channel count. */
-	len = ARRAY_LEN (ubuf.dbuf) - (ARRAY_LEN (ubuf.dbuf) % psf->sf.channels) ;
-
-	for (readcount = 1, max_val = 0.0 ; readcount > 0 ; /* nothing */)
-	{	readcount = sf_read_double ((SNDFILE*) psf, data, len) ;
-		for (k = 0 ; k < readcount ; k++)
-		{	temp = fabs (data [k]) ;
-			max_val = temp > max_val ? temp : max_val ;
-			} ;
-		} ;
-
-	/* Return to SNDFILE to original state. */
-	sf_seek ((SNDFILE*) psf, position, SEEK_SET) ;
-	sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-	return	max_val ;
-} /* psf_calc_signal_max */
-
-int
-psf_calc_max_all_channels (SF_PRIVATE *psf, double *peaks, int normalize)
-{	BUF_UNION	ubuf ;
-	sf_count_t	position ;
-	double 		temp, *data ;
-	int			k, len, readcount, save_state ;
-	int			chan ;
-
-	/* If the file is not seekable, there is nothing we can do. */
-	if (! psf->sf.seekable)
-		return (psf->error = SFE_NOT_SEEKABLE) ;
-
-	if (! psf->read_double)
-		return (psf->error = SFE_UNIMPLEMENTED) ;
-
-	save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-	sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ;
-
-	memset (peaks, 0, sizeof (double) * psf->sf.channels) ;
-
-	/* Brute force. Read the whole file and find the biggest sample for each channel. */
-	position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ; /* Get current position in file */
-	sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ;			/* Go to start of file. */
-
-	len = ARRAY_LEN (ubuf.dbuf) ;
-
-	data = ubuf.dbuf ;
-
-	chan = 0 ;
-	readcount = len ;
-	while (readcount > 0)
-	{	readcount = sf_read_double ((SNDFILE*) psf, data, len) ;
-		for (k = 0 ; k < readcount ; k++)
-		{	temp = fabs (data [k]) ;
-			peaks [chan] = temp > peaks [chan] ? temp : peaks [chan] ;
-			chan = (chan + 1) % psf->sf.channels ;
-			} ;
-		} ;
-
-	sf_seek ((SNDFILE*) psf, position, SEEK_SET) ;		/* Return to original position. */
-
-	sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-	return	0 ;
-} /* psf_calc_max_all_channels */
-
-int
-psf_get_signal_max (SF_PRIVATE *psf, double *peak)
-{	int k ;
-
-	if (psf->peak_info == NULL)
-		return SF_FALSE ;
-
-	peak [0] = psf->peak_info->peaks [0].value ;
-
-	for (k = 1 ; k < psf->sf.channels ; k++)
-		peak [0] = SF_MAX (peak [0], psf->peak_info->peaks [k].value) ;
-
-	return SF_TRUE ;
-} /* psf_get_signal_max */
-
-int
-psf_get_max_all_channels (SF_PRIVATE *psf, double *peaks)
-{	int k ;
-
-	if (psf->peak_info == NULL)
-		return SF_FALSE ;
-
-	for (k = 0 ; k < psf->sf.channels ; k++)
-		peaks [k] = psf->peak_info->peaks [k].value ;
-
-	return SF_TRUE ;
-} /* psf_get_max_all_channels */
-
-
diff --git a/libs/libsndfile/src/common.c b/libs/libsndfile/src/common.c
deleted file mode 100644
index f42bc91575..0000000000
--- a/libs/libsndfile/src/common.c
+++ /dev/null
@@ -1,1662 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<config.h>
-
-#include	<stdarg.h>
-#include	<string.h>
-
-#ifndef _MSC_VER
-#include	<unistd.h>
-#endif
-#include	<ctype.h>
-#include	<math.h>
-#include	<time.h>
-#ifndef _MSC_VER
-#include	<sys/time.h>
-#endif
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*-----------------------------------------------------------------------------------------------
-** psf_log_printf allows libsndfile internal functions to print to an internal parselog which
-** can later be displayed.
-** The format specifiers are as for printf but without the field width and other modifiers.
-** Printing is performed to the parselog char array of the SF_PRIVATE struct.
-** Printing is done in such a way as to guarantee that the log never overflows the end of the
-** parselog array.
-*/
-
-static inline void
-log_putchar (SF_PRIVATE *psf, char ch)
-{	if (psf->parselog.indx < SIGNED_SIZEOF (psf->parselog.buf) - 1)
-	{	psf->parselog.buf [psf->parselog.indx++] = ch ;
-		psf->parselog.buf [psf->parselog.indx] = 0 ;
-		} ;
-	return ;
-} /* log_putchar */
-
-void
-psf_log_printf (SF_PRIVATE *psf, const char *format, ...)
-{	va_list			ap ;
-	unsigned int	u ;
-	int				d, tens, shift, width, width_specifier, left_align ;
-	char			c, *strptr, istr [5], lead_char, sign_char ;
-
-	va_start (ap, format) ;
-
-	while ((c = *format++))
-	{	if (c != '%')
-		{	log_putchar (psf, c) ;
-			continue ;
-			} ;
-
-		if (format [0] == '%') /* Handle %% */
-		{ 	log_putchar (psf, '%') ;
-			format ++ ;
-			continue ;
-			} ;
-
-		sign_char = 0 ;
-		left_align = SF_FALSE ;
-		while (1)
-		{	switch (format [0])
-			{	case ' ' :
-				case '+' :
-					sign_char = format [0] ;
-					format ++ ;
-					continue ;
-
-				case '-' :
-					left_align = SF_TRUE ;
-					format ++ ;
-					continue ;
-
-				default : break ;
-				} ;
-
-			break ;
-			} ;
-
-		if (format [0] == 0)
-			break ;
-
-		lead_char = ' ' ;
-		if (format [0] == '0')
-			lead_char = '0' ;
-
-		width_specifier = 0 ;
-		while ((c = *format++) && isdigit (c))
-			width_specifier = width_specifier * 10 + (c - '0') ;
-
-		switch (c)
-		{	case 0 : /* NULL character. */
-					va_end (ap) ;
-					return ;
-
-			case 's': /* string */
-					strptr = va_arg (ap, char *) ;
-					if (strptr == NULL)
-						break ;
-					width_specifier -= strlen (strptr) ;
-					if (left_align == SF_FALSE)
-						while (width_specifier -- > 0)
-							log_putchar (psf, ' ') ;
-					while (*strptr)
-						log_putchar (psf, *strptr++) ;
-					while (width_specifier -- > 0)
-						log_putchar (psf, ' ') ;
-					break ;
-
-			case 'd': /* int */
-					d = va_arg (ap, int) ;
-
-					if (d < 0)
-					{	d = -d ;
-						sign_char = '-' ;
-						if (lead_char != '0' && left_align == SF_FALSE)
-							width_specifier -- ;
-						} ;
-
-					tens = 1 ;
-					width = 1 ;
-					while (d / tens >= 10)
-					{	tens *= 10 ;
-						width ++ ;
-						} ;
-
-					width_specifier -= width ;
-
-					if (sign_char == ' ')
-					{	log_putchar (psf, ' ') ;
-						width_specifier -- ;
-						} ;
-
-					if (left_align == SF_FALSE && lead_char != '0')
-					{	if (sign_char == '+')
-							width_specifier -- ;
-
-						while (width_specifier -- > 0)
-							log_putchar (psf, lead_char) ;
-						} ;
-
-					if (sign_char == '+' || sign_char == '-')
-					{	log_putchar (psf, sign_char) ;
-						width_specifier -- ;
-						} ;
-
-					if (left_align == SF_FALSE)
-						while (width_specifier -- > 0)
-							log_putchar (psf, lead_char) ;
-
-					while (tens > 0)
-					{	log_putchar (psf, '0' + d / tens) ;
-						d %= tens ;
-						tens /= 10 ;
-						} ;
-
-					while (width_specifier -- > 0)
-						log_putchar (psf, lead_char) ;
-					break ;
-
-			case 'D': /* sf_count_t */
-					{	sf_count_t		D, Tens ;
-
-						D = va_arg (ap, sf_count_t) ;
-
-						if (D == 0)
-						{	while (-- width_specifier > 0)
-								log_putchar (psf, lead_char) ;
-							log_putchar (psf, '0') ;
-							break ;
-							}
-						if (D < 0)
-						{	log_putchar (psf, '-') ;
-							D = -D ;
-							} ;
-						Tens = 1 ;
-						width = 1 ;
-						while (D / Tens >= 10)
-						{	Tens *= 10 ;
-							width ++ ;
-							} ;
-
-						while (width_specifier > width)
-						{	log_putchar (psf, lead_char) ;
-							width_specifier-- ;
-							} ;
-
-						while (Tens > 0)
-						{	log_putchar (psf, '0' + D / Tens) ;
-							D %= Tens ;
-							Tens /= 10 ;
-							} ;
-						} ;
-					break ;
-
-			case 'u': /* unsigned int */
-					u = va_arg (ap, unsigned int) ;
-
-					tens = 1 ;
-					width = 1 ;
-					while (u / tens >= 10)
-					{	tens *= 10 ;
-						width ++ ;
-						} ;
-
-					width_specifier -= width ;
-
-					if (sign_char == ' ')
-					{	log_putchar (psf, ' ') ;
-						width_specifier -- ;
-						} ;
-
-					if (left_align == SF_FALSE && lead_char != '0')
-					{	if (sign_char == '+')
-							width_specifier -- ;
-
-						while (width_specifier -- > 0)
-							log_putchar (psf, lead_char) ;
-						} ;
-
-					if (sign_char == '+' || sign_char == '-')
-					{	log_putchar (psf, sign_char) ;
-						width_specifier -- ;
-						} ;
-
-					if (left_align == SF_FALSE)
-						while (width_specifier -- > 0)
-							log_putchar (psf, lead_char) ;
-
-					while (tens > 0)
-					{	log_putchar (psf, '0' + u / tens) ;
-						u %= tens ;
-						tens /= 10 ;
-						} ;
-
-					while (width_specifier -- > 0)
-						log_putchar (psf, lead_char) ;
-					break ;
-
-			case 'c': /* char */
-					c = va_arg (ap, int) & 0xFF ;
-					log_putchar (psf, c) ;
-					break ;
-
-			case 'x': /* hex */
-			case 'X': /* hex */
-					d = va_arg (ap, int) ;
-
-					if (d == 0)
-					{	while (--width_specifier > 0)
-							log_putchar (psf, lead_char) ;
-						log_putchar (psf, '0') ;
-						break ;
-						} ;
-					shift = 28 ;
-					width = (width_specifier < 8) ? 8 : width_specifier ;
-					while (! ((0xF << shift) & d))
-					{	shift -= 4 ;
-						width -- ;
-						} ;
-
-					while (width > 0 && width_specifier > width)
-					{	log_putchar (psf, lead_char) ;
-						width_specifier-- ;
-						} ;
-
-					while (shift >= 0)
-					{	c = (d >> shift) & 0xF ;
-						log_putchar (psf, (c > 9) ? c + 'A' - 10 : c + '0') ;
-						shift -= 4 ;
-						} ;
-					break ;
-
-			case 'M': /* int2str */
-					d = va_arg (ap, int) ;
-					if (CPU_IS_LITTLE_ENDIAN)
-					{	istr [0] = d & 0xFF ;
-						istr [1] = (d >> 8) & 0xFF ;
-						istr [2] = (d >> 16) & 0xFF ;
-						istr [3] = (d >> 24) & 0xFF ;
-						}
-					else
-					{	istr [3] = d & 0xFF ;
-						istr [2] = (d >> 8) & 0xFF ;
-						istr [1] = (d >> 16) & 0xFF ;
-						istr [0] = (d >> 24) & 0xFF ;
-						} ;
-					istr [4] = 0 ;
-					strptr = istr ;
-					while (*strptr)
-					{	c = *strptr++ ;
-						log_putchar (psf, c) ;
-						} ;
-					break ;
-
-			default :
-					log_putchar (psf, '*') ;
-					log_putchar (psf, c) ;
-					log_putchar (psf, '*') ;
-					break ;
-			} /* switch */
-		} /* while */
-
-	va_end (ap) ;
-	return ;
-} /* psf_log_printf */
-
-/*-----------------------------------------------------------------------------------------------
-**  ASCII header printf functions.
-**  Some formats (ie NIST) use ascii text in their headers.
-**  Format specifiers are the same as the standard printf specifiers (uses vsnprintf).
-**  If this generates a compile error on any system, the author should be notified
-**  so an alternative vsnprintf can be provided.
-*/
-
-void
-psf_asciiheader_printf (SF_PRIVATE *psf, const char *format, ...)
-{	va_list	argptr ;
-	int		maxlen ;
-	char	*start ;
-
-	maxlen = strlen ((char*) psf->header) ;
-	start	= ((char*) psf->header) + maxlen ;
-	maxlen	= sizeof (psf->header) - maxlen ;
-
-	va_start (argptr, format) ;
-	vsnprintf (start, maxlen, format, argptr) ;
-	va_end (argptr) ;
-
-	/* Make sure the string is properly terminated. */
-	start [maxlen - 1] = 0 ;
-
-	psf->headindex = strlen ((char*) psf->header) ;
-
-	return ;
-} /* psf_asciiheader_printf */
-
-/*-----------------------------------------------------------------------------------------------
-**  Binary header writing functions. Returns number of bytes written.
-**
-**  Format specifiers for psf_binheader_writef are as follows
-**		m	- marker - four bytes - no endian manipulation
-**
-**		e   - all following numerical values will be little endian
-**		E   - all following numerical values will be big endian
-**
-**		t   - all following O types will be truncated to 4 bytes
-**		T   - switch off truncation of all following O types
-**
-**		1	- single byte value
-**		2	- two byte value
-**		3	- three byte value
-**		4	- four byte value
-**		8	- eight byte value (sometimes written as 4 bytes)
-**
-**		s   - string preceded by a four byte length
-**		S   - string including null terminator
-**		f	- floating point data
-**		d	- double precision floating point data
-**		h	- 16 binary bytes value
-**
-**		b	- binary data (see below)
-**		z   - zero bytes (ses below)
-**		j	- jump forwards or backwards
-**
-**	To write a word followed by an int (both little endian) use:
-**		psf_binheader_writef ("e24", wordval, longval) ;
-**
-**	To write binary data use:
-**		psf_binheader_writef ("b", &bindata, sizeof (bindata)) ;
-**
-**	To write N zero bytes use:
-**			NOTE: due to platform issues (ie x86-64) you should cast the
-**			argument to size_t or ensure the variable type is size_t.
-**		psf_binheader_writef ("z", N) ;
-*/
-
-/* These macros may seem a bit messy but do prevent problems with processors which
-** seg. fault when asked to write an int or short to a non-int/short aligned address.
-*/
-
-static inline void
-header_put_byte (SF_PRIVATE *psf, char x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 1)
-		psf->header [psf->headindex++] = x ;
-} /* header_put_byte */
-
-#if (CPU_IS_BIG_ENDIAN == 1)
-static inline void
-header_put_marker (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-	{	psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_marker */
-
-#elif (CPU_IS_LITTLE_ENDIAN == 1)
-static inline void
-header_put_marker (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		} ;
-} /* header_put_marker */
-
-#else
-#	error "Cannot determine endian-ness of processor."
-#endif
-
-
-static inline void
-header_put_be_short (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2)
-	{	psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_be_short */
-
-static inline void
-header_put_le_short (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		} ;
-} /* header_put_le_short */
-
-static inline void
-header_put_be_3byte (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3)
-	{	psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_be_3byte */
-
-static inline void
-header_put_le_3byte (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		} ;
-} /* header_put_le_3byte */
-
-static inline void
-header_put_be_int (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-	{	psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_be_int */
-
-static inline void
-header_put_le_int (SF_PRIVATE *psf, int x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		} ;
-} /* header_put_le_int */
-
-#if (SIZEOF_SF_COUNT_T == 4)
-
-static inline void
-header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-	{	psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_be_8byte */
-
-static inline void
-header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		psf->header [psf->headindex++] = 0 ;
-		} ;
-} /* header_put_le_8byte */
-
-#elif (SIZEOF_SF_COUNT_T == 8)
-
-static inline void
-header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-	{	psf->header [psf->headindex++] = (x >> 56) ;
-		psf->header [psf->headindex++] = (x >> 48) ;
-		psf->header [psf->headindex++] = (x >> 40) ;
-		psf->header [psf->headindex++] = (x >> 32) ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = x ;
-		} ;
-} /* header_put_be_8byte */
-
-static inline void
-header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x)
-{	if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-	{	psf->header [psf->headindex++] = x ;
-		psf->header [psf->headindex++] = (x >> 8) ;
-		psf->header [psf->headindex++] = (x >> 16) ;
-		psf->header [psf->headindex++] = (x >> 24) ;
-		psf->header [psf->headindex++] = (x >> 32) ;
-		psf->header [psf->headindex++] = (x >> 40) ;
-		psf->header [psf->headindex++] = (x >> 48) ;
-		psf->header [psf->headindex++] = (x >> 56) ;
-		} ;
-} /* header_put_le_8byte */
-
-#else
-#error "SIZEOF_SF_COUNT_T is not defined."
-#endif
-
-int
-psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
-{	va_list	argptr ;
-	sf_count_t 		countdata ;
-	unsigned long 	longdata ;
-	unsigned int 	data ;
-	float			floatdata ;
-	double			doubledata ;
-	void			*bindata ;
-	size_t			size ;
-	char			c, *strptr ;
-	int				count = 0, trunc_8to4 ;
-
-	trunc_8to4 = SF_FALSE ;
-
-	va_start (argptr, format) ;
-
-	while ((c = *format++))
-	{	switch (c)
-		{	case ' ' : /* Do nothing. Just used to space out format string. */
-					break ;
-
-			case 'e' : /* All conversions are now from LE to host. */
-					psf->rwf_endian = SF_ENDIAN_LITTLE ;
-					break ;
-
-			case 'E' : /* All conversions are now from BE to host. */
-					psf->rwf_endian = SF_ENDIAN_BIG ;
-					break ;
-
-			case 't' : /* All 8 byte values now get written as 4 bytes. */
-					trunc_8to4 = SF_TRUE ;
-					break ;
-
-			case 'T' : /* All 8 byte values now get written as 8 bytes. */
-					trunc_8to4 = SF_FALSE ;
-					break ;
-
-			case 'm' :
-					data = va_arg (argptr, unsigned int) ;
-					header_put_marker (psf, data) ;
-					count += 4 ;
-					break ;
-
-			case '1' :
-					data = va_arg (argptr, unsigned int) ;
-					header_put_byte (psf, data) ;
-					count += 1 ;
-					break ;
-
-			case '2' :
-					data = va_arg (argptr, unsigned int) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-					{	header_put_be_short (psf, data) ;
-						}
-					else
-					{	header_put_le_short (psf, data) ;
-						} ;
-					count += 2 ;
-					break ;
-
-			case '3' : /* tribyte */
-					data = va_arg (argptr, unsigned int) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-					{	header_put_be_3byte (psf, data) ;
-						}
-					else
-					{	header_put_le_3byte (psf, data) ;
-						} ;
-					count += 3 ;
-					break ;
-
-			case '4' :
-					data = va_arg (argptr, unsigned int) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-					{	header_put_be_int (psf, data) ;
-						}
-					else
-					{	header_put_le_int (psf, data) ;
-						} ;
-					count += 4 ;
-					break ;
-
-			case '8' :
-					countdata = va_arg (argptr, sf_count_t) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_FALSE)
-					{	header_put_be_8byte (psf, countdata) ;
-						count += 8 ;
-						}
-					else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_FALSE)
-					{	header_put_le_8byte (psf, countdata) ;
-						count += 8 ;
-						}
-					else if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_TRUE)
-					{	longdata = countdata & 0xFFFFFFFF ;
-						header_put_be_int (psf, longdata) ;
-						count += 4 ;
-						}
-					else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_TRUE)
-					{	longdata = countdata & 0xFFFFFFFF ;
-						header_put_le_int (psf, longdata) ;
-						count += 4 ;
-						}
-					break ;
-
-			case 'f' :
-					/* Floats are passed as doubles. Is this always true? */
-					floatdata = (float) va_arg (argptr, double) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						float32_be_write (floatdata, psf->header + psf->headindex) ;
-					else
-						float32_le_write (floatdata, psf->header + psf->headindex) ;
-					psf->headindex += 4 ;
-					count += 4 ;
-					break ;
-
-			case 'd' :
-					doubledata = va_arg (argptr, double) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						double64_be_write (doubledata, psf->header + psf->headindex) ;
-					else
-						double64_le_write (doubledata, psf->header + psf->headindex) ;
-					psf->headindex += 8 ;
-					count += 8 ;
-					break ;
-
-			case 's' :
-					/* Write a C string (guaranteed to have a zero terminator). */
-					strptr = va_arg (argptr, char *) ;
-					size = strlen (strptr) + 1 ;
-					size += (size & 1) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						header_put_be_int (psf, size) ;
-					else
-						header_put_le_int (psf, size) ;
-					memcpy (&(psf->header [psf->headindex]), strptr, size) ;
-					psf->headindex += size ;
-					psf->header [psf->headindex - 1] = 0 ;
-					count += 4 + size ;
-					break ;
-
-			case 'S' :
-					/*
-					**	Write an AIFF style string (no zero terminator but possibly
-					**	an extra pad byte if the string length is odd).
-					*/
-					strptr = va_arg (argptr, char *) ;
-					size = strlen (strptr) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						header_put_be_int (psf, size) ;
-					else
-						header_put_le_int (psf, size) ;
-					memcpy (&(psf->header [psf->headindex]), strptr, size + 1) ;
-					size += (size & 1) ;
-					psf->headindex += size ;
-					psf->header [psf->headindex] = 0 ;
-					count += 4 + size ;
-					break ;
-
-			case 'b' :
-					bindata	= va_arg (argptr, void *) ;
-					size	= va_arg (argptr, size_t) ;
-					memcpy (&(psf->header [psf->headindex]), bindata, size) ;
-					psf->headindex += size ;
-					count += size ;
-					break ;
-
-			case 'z' :
-					size = va_arg (argptr, size_t) ;
-					count += size ;
-					while (size)
-					{	psf->header [psf->headindex] = 0 ;
-						psf->headindex ++ ;
-						size -- ;
-						} ;
-					break ;
-
-			case 'h' :
-					bindata = va_arg (argptr, void *) ;
-					memcpy (&(psf->header [psf->headindex]), bindata, 16) ;
-					psf->headindex += 16 ;
-					count += 16 ;
-					break ;
-
-			case 'j' :
-					size = va_arg (argptr, size_t) ;
-					psf->headindex += size ;
-					count = size ;
-					break ;
-
-			default :
-				psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;
-				psf->error = SFE_INTERNAL ;
-				break ;
-			} ;
-		} ;
-
-	va_end (argptr) ;
-	return count ;
-} /* psf_binheader_writef */
-
-/*-----------------------------------------------------------------------------------------------
-**  Binary header reading functions. Returns number of bytes read.
-**
-**	Format specifiers are the same as for header write function above with the following
-**	additions:
-**
-**		p   - jump a given number of position from start of file.
-**
-**	If format is NULL, psf_binheader_readf returns the current offset.
-*/
-
-#if (CPU_IS_BIG_ENDIAN == 1)
-#define	GET_MARKER(ptr)	(	((ptr) [0] << 24)	| ((ptr) [1] << 16) |	\
-							((ptr) [2] << 8)	| ((ptr) [3]))
-
-#elif (CPU_IS_LITTLE_ENDIAN == 1)
-#define	GET_MARKER(ptr)	(	((ptr) [0])			| ((ptr) [1] << 8) |	\
-							((ptr) [2] << 16)	| ((ptr) [3] << 24))
-
-#else
-#	error "Cannot determine endian-ness of processor."
-#endif
-
-#define	GET_LE_SHORT(ptr)	(((ptr) [1] << 8) | ((ptr) [0]))
-#define	GET_BE_SHORT(ptr)	(((ptr) [0] << 8) | ((ptr) [1]))
-
-#define	GET_LE_3BYTE(ptr)	(	((ptr) [2] << 16) | ((ptr) [1] << 8) | ((ptr) [0]))
-#define	GET_BE_3BYTE(ptr)	(	((ptr) [0] << 16) | ((ptr) [1] << 8) | ((ptr) [2]))
-
-#define	GET_LE_INT(ptr)		(	((ptr) [3] << 24)	| ((ptr) [2] << 16) |	\
-								((ptr) [1] << 8)	| ((ptr) [0]))
-
-#define	GET_BE_INT(ptr)		(	((ptr) [0] << 24)	| ((ptr) [1] << 16) |	\
-								((ptr) [2] << 8)	| ((ptr) [3]))
-
-#define	GET_LE_8BYTE(ptr)	(	(((sf_count_t) (ptr) [7]) << 56)	| (((sf_count_t) (ptr) [6]) << 48) |	\
-								(((sf_count_t) (ptr) [5]) << 40)	| (((sf_count_t) (ptr) [4]) << 32) |	\
-								(((sf_count_t) (ptr) [3]) << 24)	| (((sf_count_t) (ptr) [2]) << 16) |	\
-								(((sf_count_t) (ptr) [1]) << 8)		| ((ptr) [0]))
-
-#define	GET_BE_8BYTE(ptr)	(	(((sf_count_t) (ptr) [0]) << 56)	| (((sf_count_t) (ptr) [1]) << 48) |	\
-								(((sf_count_t) (ptr) [2]) << 40)	| (((sf_count_t) (ptr) [3]) << 32) |	\
-								(((sf_count_t) (ptr) [4]) << 24)	| (((sf_count_t) (ptr) [5]) << 16) |	\
-								(((sf_count_t) (ptr) [6]) << 8)		| ((ptr) [7]))
-
-
-
-static int
-header_read (SF_PRIVATE *psf, void *ptr, int bytes)
-{	int count = 0 ;
-
-	if (psf->headindex >= SIGNED_SIZEOF (psf->header))
-	{	memset (ptr, 0, SIGNED_SIZEOF (psf->header) - psf->headindex) ;
-
-		/* This is the best that we can do. */
-		psf_fseek (psf, bytes, SEEK_CUR) ;
-		return bytes ;
-		} ;
-
-	if (psf->headindex + bytes > SIGNED_SIZEOF (psf->header))
-	{	int most ;
-
-		most = SIGNED_SIZEOF (psf->header) - psf->headindex ;
-		psf_fread (psf->header + psf->headend, 1, most, psf) ;
-		memset ((char *) ptr + most, 0, bytes - most) ;
-
-		psf_fseek (psf, bytes - most, SEEK_CUR) ;
-		return bytes ;
-		} ;
-
-	if (psf->headindex + bytes > psf->headend)
-	{	count = psf_fread (psf->header + psf->headend, 1, bytes - (psf->headend - psf->headindex), psf) ;
-		if (count != bytes - (int) (psf->headend - psf->headindex))
-		{	psf_log_printf (psf, "Error : psf_fread returned short count.\n") ;
-			return 0 ;
-			} ;
-		psf->headend += count ;
-		} ;
-
-	memcpy (ptr, psf->header + psf->headindex, bytes) ;
-	psf->headindex += bytes ;
-
-	return bytes ;
-} /* header_read */
-
-static void
-header_seek (SF_PRIVATE *psf, sf_count_t position, int whence)
-{
-
-	switch (whence)
-	{	case SEEK_SET :
-			if (position > SIGNED_SIZEOF (psf->header))
-			{	/* Too much header to cache so just seek instead. */
-				psf_fseek (psf, position, whence) ;
-				return ;
-				} ;
-			if (position > psf->headend)
-				psf->headend += psf_fread (psf->header + psf->headend, 1, position - psf->headend, psf) ;
-			psf->headindex = position ;
-			break ;
-
-		case SEEK_CUR :
-			if (psf->headindex + position < 0)
-				break ;
-
-			if (psf->headindex >= SIGNED_SIZEOF (psf->header))
-			{	psf_fseek (psf, position, whence) ;
-				return ;
-				} ;
-
-			if (psf->headindex + position <= psf->headend)
-			{	psf->headindex += position ;
-				break ;
-				} ;
-
-			if (psf->headindex + position > SIGNED_SIZEOF (psf->header))
-			{	/* Need to jump this without caching it. */
-				psf->headindex = psf->headend ;
-				psf_fseek (psf, position, SEEK_CUR) ;
-				break ;
-				} ;
-
-			psf->headend += psf_fread (psf->header + psf->headend, 1, position - (psf->headend - psf->headindex), psf) ;
-			psf->headindex = psf->headend ;
-			break ;
-
-		case SEEK_END :
-		default :
-			psf_log_printf (psf, "Bad whence param in header_seek().\n") ;
-			break ;
-		} ;
-
-	return ;
-} /* header_seek */
-
-static int
-header_gets (SF_PRIVATE *psf, char *ptr, int bufsize)
-{
-	int		k ;
-
-	for (k = 0 ; k < bufsize - 1 ; k++)
-	{	if (psf->headindex < psf->headend)
-		{	ptr [k] = psf->header [psf->headindex] ;
-			psf->headindex ++ ;
-			}
-		else
-		{	psf->headend += psf_fread (psf->header + psf->headend, 1, 1, psf) ;
-			ptr [k] = psf->header [psf->headindex] ;
-			psf->headindex = psf->headend ;
-			} ;
-
-		if (ptr [k] == '\n')
-			break ;
-		} ;
-
-	ptr [k] = 0 ;
-
-	return k ;
-} /* header_gets */
-
-int
-psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
-{	va_list			argptr ;
-	sf_count_t		*countptr, countdata ;
-	unsigned char	*ucptr, sixteen_bytes [16] ;
-	unsigned int 	*intptr, intdata ;
-	unsigned short	*shortptr ;
-	char			*charptr ;
-	float			*floatptr ;
-	double			*doubleptr ;
-	char			c ;
-	int				byte_count = 0, count ;
-
-	if (! format)
-		return psf_ftell (psf) ;
-
-	va_start (argptr, format) ;
-
-	while ((c = *format++))
-	{	switch (c)
-		{	case 'e' : /* All conversions are now from LE to host. */
-					psf->rwf_endian = SF_ENDIAN_LITTLE ;
-					break ;
-
-			case 'E' : /* All conversions are now from BE to host. */
-					psf->rwf_endian = SF_ENDIAN_BIG ;
-					break ;
-
-			case 'm' :
-					intptr = va_arg (argptr, unsigned int*) ;
-					ucptr = (unsigned char*) intptr ;
-					byte_count += header_read (psf, ucptr, sizeof (int)) ;
-					*intptr = GET_MARKER (ucptr) ;
-					break ;
-
-			case 'h' :
-					intptr = va_arg (argptr, unsigned int*) ;
-					ucptr = (unsigned char*) intptr ;
-					byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
-					{	int k ;
-						intdata = 0 ;
-						for (k = 0 ; k < 16 ; k++)
-							intdata ^= sixteen_bytes [k] << k ;
-						}
-					*intptr = intdata ;
-					break ;
-
-			case '1' :
-					charptr = va_arg (argptr, char*) ;
-					*charptr = 0 ;
-					byte_count += header_read (psf, charptr, sizeof (char)) ;
-					break ;
-
-			case '2' :
-					shortptr = va_arg (argptr, unsigned short*) ;
-					*shortptr = 0 ;
-					ucptr = (unsigned char*) shortptr ;
-					byte_count += header_read (psf, ucptr, sizeof (short)) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						*shortptr = GET_BE_SHORT (ucptr) ;
-					else
-						*shortptr = GET_LE_SHORT (ucptr) ;
-					break ;
-
-			case '3' :
-					intptr = va_arg (argptr, unsigned int*) ;
-					*intptr = 0 ;
-					byte_count += header_read (psf, sixteen_bytes, 3) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						*intptr = GET_BE_3BYTE (sixteen_bytes) ;
-					else
-						*intptr = GET_LE_3BYTE (sixteen_bytes) ;
-					break ;
-
-			case '4' :
-					intptr = va_arg (argptr, unsigned int*) ;
-					*intptr = 0 ;
-					ucptr = (unsigned char*) intptr ;
-					byte_count += header_read (psf, ucptr, sizeof (int)) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						*intptr = GET_BE_INT (ucptr) ;
-					else
-						*intptr = GET_LE_INT (ucptr) ;
-					break ;
-
-			case '8' :
-					countptr = va_arg (argptr, sf_count_t *) ;
-					*countptr = 0 ;
-					byte_count += header_read (psf, sixteen_bytes, 8) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						countdata = GET_BE_8BYTE (sixteen_bytes) ;
-					else
-						countdata = GET_LE_8BYTE (sixteen_bytes) ;
-					*countptr = countdata ;
-					break ;
-
-			case 'f' : /* Float conversion */
-					floatptr = va_arg (argptr, float *) ;
-					*floatptr = 0.0 ;
-					byte_count += header_read (psf, floatptr, sizeof (float)) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						*floatptr = float32_be_read ((unsigned char*) floatptr) ;
-					else
-						*floatptr = float32_le_read ((unsigned char*) floatptr) ;
-					break ;
-
-			case 'd' : /* double conversion */
-					doubleptr = va_arg (argptr, double *) ;
-					*doubleptr = 0.0 ;
-					byte_count += header_read (psf, doubleptr, sizeof (double)) ;
-					if (psf->rwf_endian == SF_ENDIAN_BIG)
-						*doubleptr = double64_be_read ((unsigned char*) doubleptr) ;
-					else
-						*doubleptr = double64_le_read ((unsigned char*) doubleptr) ;
-					break ;
-
-			case 's' :
-					psf_log_printf (psf, "Format conversion 's' not implemented yet.\n") ;
-					/*
-					strptr = va_arg (argptr, char *) ;
-					size   = strlen (strptr) + 1 ;
-					size  += (size & 1) ;
-					longdata = H2LE_32 (size) ;
-					get_int (psf, longdata) ;
-					memcpy (&(psf->header [psf->headindex]), strptr, size) ;
-					psf->headindex += size ;
-					*/
-					break ;
-
-			case 'b' :
-					charptr = va_arg (argptr, char*) ;
-					count = va_arg (argptr, size_t) ;
-					if (count > 0)
-						byte_count += header_read (psf, charptr, count) ;
-					break ;
-
-			case 'G' :
-					charptr = va_arg (argptr, char*) ;
-					count = va_arg (argptr, size_t) ;
-					if (count > 0)
-						byte_count += header_gets (psf, charptr, count) ;
-					break ;
-
-			case 'z' :
-					psf_log_printf (psf, "Format conversion 'z' not implemented yet.\n") ;
-					/*
-					size    = va_arg (argptr, size_t) ;
-					while (size)
-					{	psf->header [psf->headindex] = 0 ;
-						psf->headindex ++ ;
-						size -- ;
-						} ;
-					*/
-					break ;
-
-			case 'p' :
-					/* Get the seek position first. */
-					count = va_arg (argptr, size_t) ;
-					header_seek (psf, count, SEEK_SET) ;
-					byte_count = count ;
-					break ;
-
-			case 'j' :
-					/* Get the seek position first. */
-					count = va_arg (argptr, size_t) ;
-					header_seek (psf, count, SEEK_CUR) ;
-					byte_count += count ;
-					break ;
-
-			default :
-				psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;
-				psf->error = SFE_INTERNAL ;
-				break ;
-			} ;
-		} ;
-
-	va_end (argptr) ;
-
-	return byte_count ;
-} /* psf_binheader_readf */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-sf_count_t
-psf_default_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t samples_from_start)
-{	sf_count_t position, retval ;
-
-	if (! (psf->blockwidth && psf->dataoffset >= 0))
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	if (! psf->sf.seekable)
-	{	psf->error = SFE_NOT_SEEKABLE ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	position = psf->dataoffset + psf->blockwidth * samples_from_start ;
-
-	if ((retval = psf_fseek (psf, position, SEEK_SET)) != position)
-	{	psf->error = SFE_SEEK_FAILED ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	return samples_from_start ;
-} /* psf_default_seek */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-void
-psf_hexdump (const void *ptr, int len)
-{	const char *data ;
-	char	ascii [17] ;
-	int		k, m ;
-
-	if ((data = ptr) == NULL)
-		return ;
-	if (len <= 0)
-		return ;
-
-	puts ("") ;
-	for (k = 0 ; k < len ; k += 16)
-	{	memset (ascii, ' ', sizeof (ascii)) ;
-
-		printf ("%08X: ", k) ;
-		for (m = 0 ; m < 16 && k + m < len ; m++)
-		{	printf (m == 8 ? " %02X " : "%02X ", data [k + m] & 0xFF) ;
-			ascii [m] = psf_isprint (data [k + m]) ? data [k + m] : '.' ;
-			} ;
-
-		if (m <= 8) printf (" ") ;
-		for ( ; m < 16 ; m++) printf ("   ") ;
-
-		ascii [16] = 0 ;
-		printf (" %s\n", ascii) ;
-		} ;
-
-	puts ("") ;
-} /* psf_hexdump */
-
-void
-psf_log_SF_INFO (SF_PRIVATE *psf)
-{	psf_log_printf (psf, "---------------------------------\n") ;
-
-	psf_log_printf (psf, " Sample rate :   %d\n", psf->sf.samplerate) ;
-	if (psf->sf.frames == SF_COUNT_MAX)
-		psf_log_printf (psf, " Frames      :   unknown\n") ;
-	else
-		psf_log_printf (psf, " Frames      :   %D\n", psf->sf.frames) ;
-	psf_log_printf (psf, " Channels    :   %d\n", psf->sf.channels) ;
-
-	psf_log_printf (psf, " Format      :   0x%X\n", psf->sf.format) ;
-	psf_log_printf (psf, " Sections    :   %d\n", psf->sf.sections) ;
-	psf_log_printf (psf, " Seekable    :   %s\n", psf->sf.seekable ? "TRUE" : "FALSE") ;
-
-	psf_log_printf (psf, "---------------------------------\n") ;
-} /* psf_dump_SFINFO */
-
-/*========================================================================================
-*/
-
-void*
-psf_memset (void *s, int c, sf_count_t len)
-{	char	*ptr ;
-	int 	setcount ;
-
-	ptr = (char *) s ;
-
-	while (len > 0)
-	{	setcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		memset (ptr, c, setcount) ;
-
-		ptr += setcount ;
-		len -= setcount ;
-		} ;
-
-	return s ;
-} /* psf_memset */
-
-SF_INSTRUMENT *
-psf_instrument_alloc (void)
-{	SF_INSTRUMENT *instr ;
-
-	instr = calloc (1, sizeof (SF_INSTRUMENT)) ;
-
-	if (instr == NULL)
-		return NULL ;
-
-	/* Set non-zero default values. */
-	instr->basenote = -1 ;
-	instr->velocity_lo = -1 ;
-	instr->velocity_hi = -1 ;
-	instr->key_lo = -1 ;
-	instr->key_hi = -1 ;
-
-	return instr ;
-} /* psf_instrument_alloc */
-
-void
-psf_sanitize_string (char * cptr, int len)
-{
-	do
-	{
-		len -- ;
-		cptr [len] = psf_isprint (cptr [len]) ? cptr [len] : '.' ;
-	}
-	while (len > 0) ;
-} /* psf_sanitize_string */
-
-void
-psf_get_date_str (char *str, int maxlen)
-{	time_t		current ;
-	struct tm	timedata, *tmptr ;
-
-	time (&current) ;
-
-#if defined (HAVE_GMTIME_R)
-	/* If the re-entrant version is available, use it. */
-	tmptr = gmtime_r (&current, &timedata) ;
-#elif defined (HAVE_GMTIME)
-	/* Otherwise use the standard one and copy the data to local storage. */
-	tmptr = gmtime (&current) ;
-	memcpy (&timedata, tmptr, sizeof (timedata)) ;
-#else
-	tmptr = NULL ;
-#endif
-
-	if (tmptr)
-		snprintf (str, maxlen, "%4d-%02d-%02d %02d:%02d:%02d UTC",
-			1900 + timedata.tm_year, timedata.tm_mon, timedata.tm_mday,
-			timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-	else
-		snprintf (str, maxlen, "Unknown date") ;
-
-	return ;
-} /* psf_get_date_str */
-
-int
-subformat_to_bytewidth (int format)
-{
-	switch (format)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-				return 1 ;
-		case SF_FORMAT_PCM_16 :
-				return 2 ;
-		case SF_FORMAT_PCM_24 :
-				return 3 ;
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-				return 4 ;
-		case SF_FORMAT_DOUBLE :
-				return 8 ;
-		} ;
-
-	return 0 ;
-} /* subformat_to_bytewidth */
-
-int
-s_bitwidth_to_subformat (int bits)
-{	static int array [] =
-	{	SF_FORMAT_PCM_S8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-		} ;
-
-	if (bits < 8 || bits > 32)
-		return 0 ;
-
-	return array [((bits + 7) / 8) - 1] ;
-} /* bitwidth_to_subformat */
-
-int
-u_bitwidth_to_subformat (int bits)
-{	static int array [] =
-	{	SF_FORMAT_PCM_U8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-		} ;
-
-	if (bits < 8 || bits > 32)
-		return 0 ;
-
-	return array [((bits + 7) / 8) - 1] ;
-} /* bitwidth_to_subformat */
-
-/*
-**	psf_rand_int32 : Not crypto quality, but more than adequate for things
-**	like stream serial numbers in Ogg files or the unique_id field of the
-**	SF_PRIVATE struct.
-*/
-
-int32_t
-psf_rand_int32 (void)
-{	static int32_t value = -1 ;
-	int k, count ;
-
-	if (value == -1)
-	{
-#if HAVE_GETTIMEOFDAY
-		struct timeval tv ;
-		gettimeofday (&tv, NULL) ;
-		value = tv.tv_sec + tv.tv_usec ;
-#else
-		value = time (NULL) ;
-#endif
-		} ;
-
-	count = 4 + (value & 7) ;
-	for (k = 0 ; k < count ; k++)
-		value = 11117 * value + 211231 ;
-
-	return value ;
-} /* psf_rand_int32 */
-
-void
-append_snprintf (char * dest, size_t maxlen, const char * fmt, ...)
-{	size_t len = strlen (dest) ;
-
-	if (len < maxlen)
-	{	va_list ap ;
-
-		va_start (ap, fmt) ;
-		vsnprintf (dest + len, maxlen - len, fmt, ap) ;
-		va_end (ap) ;
-		} ;
-
-	return ;
-} /* append_snprintf */
-
-
-void
-psf_strlcpy_crlf (char *dest, const char *src, size_t destmax, size_t srcmax)
-{	/* Must be minus 2 so it can still expand a single trailing '\n' or '\r'. */
-	char * destend = dest + destmax - 2 ;
-	const char * srcend = src + srcmax ;
-
-	while (dest < destend && src < srcend)
-	{	if ((src [0] == '\r' && src [1] == '\n') || (src [0] == '\n' && src [1] == '\r'))
-		{	*dest++ = '\r' ;
-			*dest++ = '\n' ;
-			src += 2 ;
-			continue ;
-			} ;
-
-		if (src [0] == '\r')
-		{	*dest++ = '\r' ;
-			*dest++ = '\n' ;
-			src += 1 ;
-			continue ;
-			} ;
-
-		if (src [0] == '\n')
-		{	*dest++ = '\r' ;
-			*dest++ = '\n' ;
-			src += 1 ;
-			continue ;
-			} ;
-
-		*dest++ = *src++ ;
-		} ;
-
-	/* Make sure dest is terminated. */
-	*dest = 0 ;
-} /* psf_strlcpy_crlf */
-
-sf_count_t
-psf_decode_frame_count (SF_PRIVATE *psf)
-{	sf_count_t count, readlen, total = 0 ;
-	BUF_UNION	ubuf ;
-
-	/* If we're reading from a pipe or the file is too long, just return SF_COUNT_MAX. */
-	if (psf_is_pipe (psf) || psf->datalength > 0x1000000)
-		return SF_COUNT_MAX ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	readlen = ARRAY_LEN (ubuf.ibuf) / psf->sf.channels ;
-	readlen *= psf->sf.channels ;
-
-	while ((count = psf->read_int (psf, ubuf.ibuf, readlen)) > 0)
-		total += count ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	return total / psf->sf.channels ;
-} /* psf_decode_frame_count */
-
-/*==============================================================================
-*/
-
-#define CASE_NAME(x)		case x : return #x ; break ;
-
-const char *
-str_of_major_format (int format)
-{	switch (SF_CONTAINER (format))
-	{	CASE_NAME (SF_FORMAT_WAV) ;
-		CASE_NAME (SF_FORMAT_AIFF) ;
-		CASE_NAME (SF_FORMAT_AU) ;
-		CASE_NAME (SF_FORMAT_RAW) ;
-		CASE_NAME (SF_FORMAT_PAF) ;
-		CASE_NAME (SF_FORMAT_SVX) ;
-		CASE_NAME (SF_FORMAT_NIST) ;
-		CASE_NAME (SF_FORMAT_VOC) ;
-		CASE_NAME (SF_FORMAT_IRCAM) ;
-		CASE_NAME (SF_FORMAT_W64) ;
-		CASE_NAME (SF_FORMAT_MAT4) ;
-		CASE_NAME (SF_FORMAT_MAT5) ;
-		CASE_NAME (SF_FORMAT_PVF) ;
-		CASE_NAME (SF_FORMAT_XI) ;
-		CASE_NAME (SF_FORMAT_HTK) ;
-		CASE_NAME (SF_FORMAT_SDS) ;
-		CASE_NAME (SF_FORMAT_AVR) ;
-		CASE_NAME (SF_FORMAT_WAVEX) ;
-		CASE_NAME (SF_FORMAT_SD2) ;
-		CASE_NAME (SF_FORMAT_FLAC) ;
-		CASE_NAME (SF_FORMAT_CAF) ;
-		CASE_NAME (SF_FORMAT_WVE) ;
-		CASE_NAME (SF_FORMAT_OGG) ;
-		default :
-			break ;
-		} ;
-
-	return "BAD_MAJOR_FORMAT" ;
-} /* str_of_major_format */
-
-const char *
-str_of_minor_format (int format)
-{	switch (SF_CODEC (format))
-	{	CASE_NAME (SF_FORMAT_PCM_S8) ;
-		CASE_NAME (SF_FORMAT_PCM_16) ;
-		CASE_NAME (SF_FORMAT_PCM_24) ;
-		CASE_NAME (SF_FORMAT_PCM_32) ;
-		CASE_NAME (SF_FORMAT_PCM_U8) ;
-		CASE_NAME (SF_FORMAT_FLOAT) ;
-		CASE_NAME (SF_FORMAT_DOUBLE) ;
-		CASE_NAME (SF_FORMAT_ULAW) ;
-		CASE_NAME (SF_FORMAT_ALAW) ;
-		CASE_NAME (SF_FORMAT_IMA_ADPCM) ;
-		CASE_NAME (SF_FORMAT_MS_ADPCM) ;
-		CASE_NAME (SF_FORMAT_GSM610) ;
-		CASE_NAME (SF_FORMAT_VOX_ADPCM) ;
-		CASE_NAME (SF_FORMAT_G721_32) ;
-		CASE_NAME (SF_FORMAT_G723_24) ;
-		CASE_NAME (SF_FORMAT_G723_40) ;
-		CASE_NAME (SF_FORMAT_DWVW_12) ;
-		CASE_NAME (SF_FORMAT_DWVW_16) ;
-		CASE_NAME (SF_FORMAT_DWVW_24) ;
-		CASE_NAME (SF_FORMAT_DWVW_N) ;
-		CASE_NAME (SF_FORMAT_DPCM_8) ;
-		CASE_NAME (SF_FORMAT_DPCM_16) ;
-		CASE_NAME (SF_FORMAT_VORBIS) ;
-		default :
-			break ;
-		} ;
-
-	return "BAD_MINOR_FORMAT" ;
-} /* str_of_minor_format */
-
-const char *
-str_of_open_mode (int mode)
-{	switch (mode)
-	{	CASE_NAME (SFM_READ) ;
-		CASE_NAME (SFM_WRITE) ;
-		CASE_NAME (SFM_RDWR) ;
-
-		default :
-			break ;
-		} ;
-
-	return "BAD_MODE" ;
-} /* str_of_open_mode */
-
-const char *
-str_of_endianness (int end)
-{	switch (end)
-	{	CASE_NAME (SF_ENDIAN_BIG) ;
-		CASE_NAME (SF_ENDIAN_LITTLE) ;
-		CASE_NAME (SF_ENDIAN_CPU) ;
-		default :
-			break ;
-		} ;
-
-	/* Zero length string for SF_ENDIAN_FILE. */
-	return "" ;
-} /* str_of_endianness */
-
-/*==============================================================================
-*/
-
-void
-psf_f2s_array (const float *src, short *dest, int count, int normalize)
-{	float 			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	while (--count >= 0)
-		dest [count] = lrintf (src [count] * normfact) ;
-
-	return ;
-} /* psf_f2s_array */
-
-void
-psf_f2s_clip_array (const float *src, short *dest, int count, int normalize)
-{	float			normfact, scaled_value ;
-
-	normfact = normalize ? (1.0 * 0x8000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-		{	dest [count] = 0x7FFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-		{	dest [count] = 0x8000 ;
-			continue ;
-			} ;
-
-		dest [count] = lrintf (scaled_value) ;
-		} ;
-
-	return ;
-} /* psf_f2s_clip_array */
-
-void
-psf_d2s_array (const double *src, short *dest, int count, int normalize)
-{	double 			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	while (--count >= 0)
-		dest [count] = lrint (src [count] * normfact) ;
-
-	return ;
-} /* psf_f2s_array */
-
-void
-psf_d2s_clip_array (const double *src, short *dest, int count, int normalize)
-{	double			normfact, scaled_value ;
-
-	normfact = normalize ? (1.0 * 0x8000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-		{	dest [count] = 0x7FFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-		{	dest [count] = 0x8000 ;
-			continue ;
-			} ;
-
-		dest [count] = lrint (scaled_value) ;
-		} ;
-
-	return ;
-} /* psf_d2s_clip_array */
-
-
-void
-psf_f2i_array (const float *src, int *dest, int count, int normalize)
-{	float 			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	while (--count >= 0)
-		dest [count] = lrintf (src [count] * normfact) ;
-
-	return ;
-} /* psf_f2i_array */
-
-void
-psf_f2i_clip_array (const float *src, int *dest, int count, int normalize)
-{	float			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 0x7FFFFFFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = 0x80000000 ;
-			continue ;
-			} ;
-
-		dest [count] = lrintf (scaled_value) ;
-		} ;
-
-	return ;
-} /* psf_f2i_clip_array */
-
-void
-psf_d2i_array (const double *src, int *dest, int count, int normalize)
-{	double 			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	while (--count >= 0)
-		dest [count] = lrint (src [count] * normfact) ;
-
-	return ;
-} /* psf_f2i_array */
-
-void
-psf_d2i_clip_array (const double *src, int *dest, int count, int normalize)
-{	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 0x7FFFFFFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = 0x80000000 ;
-			continue ;
-			} ;
-
-		dest [count] = lrint (scaled_value) ;
-		} ;
-
-	return ;
-} /* psf_d2i_clip_array */
-
-FILE *
-psf_open_tmpfile (char * fname, size_t fnamelen)
-{	const char * tmpdir ;
-	FILE * file ;
-
-	if (OS_IS_WIN32)
-		tmpdir = getenv ("TEMP") ;
-	else
-	{	tmpdir = getenv ("TMPDIR") ;
-		tmpdir = tmpdir == NULL ? "/tmp" : tmpdir ;
-		} ;
-
-//	if (tmpdir && access (tmpdir, R_OK | W_OK | X_OK) == 0)
-	{	snprintf (fname, fnamelen, "%s/%x%x-alac.tmp", tmpdir, psf_rand_int32 (), psf_rand_int32 ()) ;
-		if ((file = fopen (fname, "wb+")) != NULL)
-			return file ;
-		} ;
-
-	snprintf (fname, fnamelen, "%x%x-alac.tmp", psf_rand_int32 (), psf_rand_int32 ()) ;
-	if ((file = fopen (fname, "wb+")) != NULL)
-		return file ;
-
-	memset (fname, 0, fnamelen) ;
-	return NULL ;
-} /* psf_open_tmpfile */
diff --git a/libs/libsndfile/src/common.h b/libs/libsndfile/src/common.h
deleted file mode 100644
index 4d61619804..0000000000
--- a/libs/libsndfile/src/common.h
+++ /dev/null
@@ -1,1044 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SNDFILE_COMMON_H
-#define SNDFILE_COMMON_H
-
-#include "sfconfig.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#ifndef SNDFILE_H
-#include "sndfile.h"
-#endif
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-
-#if (SIZEOF_LONG == 8)
-#	define	SF_PLATFORM_S64(x)		x##l
-#elif (SIZEOF_LONG_LONG == 8)
-#	define	SF_PLATFORM_S64(x)		x##ll
-#elif COMPILER_IS_GCC
-#	define	SF_PLATFORM_S64(x)		x##ll
-#elif OS_IS_WIN32
-#	define	SF_PLATFORM_S64(x)		x##I64
-#else
-#	error "Don't know how to define a 64 bit integer constant."
-#endif
-
-
-
-/*
-** Inspiration : http://sourcefrog.net/weblog/software/languages/C/unused.html
-*/
-#ifdef UNUSED
-#elif defined (__GNUC__)
-#	define UNUSED(x) UNUSED_ ## x __attribute__ ((unused))
-#elif defined (__LCLINT__)
-#	define UNUSED(x) /*@unused@*/ x
-#else
-#	define UNUSED(x) x
-#endif
-
-#ifdef __GNUC__
-#	define WARN_UNUSED	__attribute__ ((warn_unused_result))
-#else
-#	define WARN_UNUSED
-#endif
-
-#define	SF_BUFFER_LEN			(8192)
-#define	SF_FILENAME_LEN			(512)
-#define SF_SYSERR_LEN			(256)
-#define SF_MAX_STRINGS			(32)
-#define	SF_HEADER_LEN			(12292)
-#define	SF_PARSELOG_LEN			(2048)
-
-#define	PSF_SEEK_ERROR			((sf_count_t) -1)
-
-#define	BITWIDTH2BYTES(x)	(((x) + 7) / 8)
-
-/*	For some reason sizeof returns an unsigned  value which causes
-**	a warning when that value is added or subtracted from a signed
-**	value. Use SIGNED_SIZEOF instead.
-*/
-#define		SIGNED_SIZEOF(x)	((int) sizeof (x))
-
-#define		ARRAY_LEN(x)	((int) (sizeof (x) / sizeof ((x) [0])))
-
-#define		NOT(x)			(! (x))
-
-#if (COMPILER_IS_GCC == 1)
-#define		SF_MAX(x, y)	({ \
-								typeof (x) sf_max_x1 = (x) ; \
-								typeof (y) sf_max_y1 = (y) ; \
-								(void) (&sf_max_x1 == &sf_max_y1) ; \
-								sf_max_x1 > sf_max_y1 ? sf_max_x1 : sf_max_y1 ; })
-
-#define		SF_MIN(x, y)	({ \
-								typeof (x) sf_min_x2 = (x) ; \
-								typeof (y) sf_min_y2 = (y) ; \
-								(void) (&sf_min_x2 == &sf_min_y2) ; \
-								sf_min_x2 < sf_min_y2 ? sf_min_x2 : sf_min_y2 ; })
-#else
-#define		SF_MAX(a, b)	((a) > (b) ? (a) : (b))
-#define		SF_MIN(a, b)	((a) < (b) ? (a) : (b))
-#endif
-
-
-#define		COMPILE_TIME_ASSERT(e)	(sizeof (struct { int : - !! (e) ; }))
-
-
-#define		SF_MAX_CHANNELS	256
-
-
-/*
-*	Macros for spliting the format file of SF_INFO into container type,
-**	codec type and endian-ness.
-*/
-#define SF_CONTAINER(x)		((x) & SF_FORMAT_TYPEMASK)
-#define SF_CODEC(x)			((x) & SF_FORMAT_SUBMASK)
-#define SF_ENDIAN(x)		((x) & SF_FORMAT_ENDMASK)
-
-enum
-{	/* PEAK chunk location. */
-	SF_PEAK_START		= 42,
-	SF_PEAK_END			= 43,
-
-	/* PEAK chunk location. */
-	SF_SCALE_MAX		= 52,
-	SF_SCALE_MIN		= 53,
-
-	/* str_flags values. */
-	SF_STR_ALLOW_START	= 0x0100,
-	SF_STR_ALLOW_END	= 0x0200,
-
-	/* Location of strings. */
-	SF_STR_LOCATE_START	= 0x0400,
-	SF_STR_LOCATE_END	= 0x0800,
-
-	SFD_TYPEMASK		= 0x0FFFFFFF
-} ;
-
-#define		SFM_MASK 	(SFM_READ | SFM_WRITE | SFM_RDWR)
-#define		SFM_UNMASK 	(~SFM_MASK)
-
-/*---------------------------------------------------------------------------------------
-** Formats that may be supported at some time in the future.
-** When support is finalised, these values move to src/sndfile.h.
-*/
-
-enum
-{	/* Work in progress. */
-	SF_FORMAT_SPEEX			= 0x5000000,
-	SF_FORMAT_OGGFLAC		= 0x5000001,
-
-	/* Formats supported read only. */
-	SF_FORMAT_TXW			= 0x4030000,		/* Yamaha TX16 sampler file */
-	SF_FORMAT_DWD			= 0x4040000,		/* DiamondWare Digirized */
-
-	/* Following are detected but not supported. */
-	SF_FORMAT_REX			= 0x40A0000,		/* Propellorheads Rex/Rcy */
-	SF_FORMAT_REX2			= 0x40D0000,		/* Propellorheads Rex2 */
-	SF_FORMAT_KRZ			= 0x40E0000,		/* Kurzweil sampler file */
-	SF_FORMAT_WMA			= 0x4100000,		/* Windows Media Audio. */
-	SF_FORMAT_SHN			= 0x4110000,		/* Shorten. */
-
-	/* Unsupported encodings. */
-	SF_FORMAT_SVX_FIB		= 0x1020, 		/* SVX Fibonacci Delta encoding. */
-	SF_FORMAT_SVX_EXP		= 0x1021, 		/* SVX Exponential Delta encoding. */
-
-	SF_FORMAT_PCM_N			= 0x1030
-} ;
-
-/*---------------------------------------------------------------------------------------
-*/
-
-typedef struct
-{	unsigned	kuki_offset ;
-	unsigned	pakt_offset ;
-
-	unsigned	bits_per_sample ;
-	unsigned	frames_per_packet ;
-
-	int64_t 	packets ;
-	int64_t 	valid_frames ;
-	int32_t 	priming_frames ;
-	int32_t 	remainder_frames ;
-} ALAC_DECODER_INFO ;
-
-/*---------------------------------------------------------------------------------------
-**	PEAK_CHUNK - This chunk type is common to both AIFF and WAVE files although their
-**	endian encodings are different.
-*/
-
-typedef struct
-{	double		value ;		/* signed value of peak */
-	sf_count_t	position ;	/* the sample frame for the peak */
-} PEAK_POS ;
-
-typedef struct
-{	/* libsndfile internal : write a PEAK chunk at the start or end of the file? */
-	int				peak_loc ;
-
-	/* WAV/AIFF */
-	unsigned int	version ;	/* version of the PEAK chunk */
-	unsigned int	timestamp ;	/* secs since 1/1/1970  */
-
-	/* CAF */
-	unsigned int	edit_number ;
-
-	/* the per channel peak info */
-	PEAK_POS		peaks [] ;
-} PEAK_INFO ;
-
-static inline PEAK_INFO *
-peak_info_calloc (int channels)
-{	return calloc (1, sizeof (PEAK_INFO) + channels * sizeof (PEAK_POS)) ;
-} /* peak_info_calloc */
-
-typedef struct
-{	int		type ;
-	int		flags ;
-	size_t 	offset ;
-} STR_DATA ;
-
-typedef struct
-{	int64_t		hash ;
-	char		id [64] ;
-	unsigned	id_size ;
-	uint32_t	mark32 ;
-	sf_count_t	offset ;
-	uint32_t	len ;
-} READ_CHUNK ;
-
-typedef struct
-{	int64_t		hash ;
-	uint32_t	mark32 ;
-	uint32_t	len ;
-	void		*data ;
-} WRITE_CHUNK ;
-
-typedef struct
-{	uint32_t	count ;
-	uint32_t	used ;
-	READ_CHUNK	*chunks ;
-} READ_CHUNKS ;
-typedef struct
-{	uint32_t	count ;
-	uint32_t	used ;
-	WRITE_CHUNK	*chunks ;
-} WRITE_CHUNKS ;
-
-struct SF_CHUNK_ITERATOR
-{	uint32_t	current ;
-	int64_t		hash ;
-	char		id [64] ;
-	unsigned	id_size ;
-	SNDFILE		*sndfile ;
-} ;
-
-static inline size_t
-make_size_t (int x)
-{	return (size_t) x ;
-} /* size_t_of_int */
-
-typedef SF_BROADCAST_INFO_VAR (16 * 1024) SF_BROADCAST_INFO_16K ;
-
-typedef SF_CART_INFO_VAR (16 * 1024) SF_CART_INFO_16K ;
-
-#if SIZEOF_WCHAR_T == 2
-typedef wchar_t	sfwchar_t ;
-#else
-typedef int16_t sfwchar_t ;
-#endif
-
-
-static inline void *
-psf_memdup (const void *src, size_t n)
-{	void * mem = calloc (1, n & 3 ? n + 4 - (n & 3) : n) ;
-	return memcpy (mem, src, n) ;
-} /* psf_memdup */
-
-/*
-**	This version of isprint specifically ignores any locale info. Its used for
-**	determining which characters can be printed in things like hexdumps.
-*/
-static inline int
-psf_isprint (int ch)
-{	return (ch >= ' ' && ch <= '~') ;
-} /* psf_isprint */
-
-/*=======================================================================================
-**	SF_PRIVATE stuct - a pointer to this struct is passed back to the caller of the
-**	sf_open_XXXX functions. The caller however has no knowledge of the struct's
-**	contents.
-*/
-
-typedef struct
-{
-	union
-	{	char		c [SF_FILENAME_LEN] ;
-		sfwchar_t	wc [SF_FILENAME_LEN] ;
-	} path ;
-
-	union
-	{	char		c [SF_FILENAME_LEN] ;
-		sfwchar_t	wc [SF_FILENAME_LEN] ;
-	} dir ;
-
-	union
-	{	char		c [SF_FILENAME_LEN / 4] ;
-		sfwchar_t	wc [SF_FILENAME_LEN / 4] ;
-	} name ;
-
-#if USE_WINDOWS_API
-	/*
-	**	These fields can only be used in src/file_io.c.
-	**	They are basically the same as a windows file HANDLE.
-	*/
-	void 			*handle, *hsaved ;
-
-	int				use_wchar ;
-#else
-	/* These fields can only be used in src/file_io.c. */
-	int 			filedes, savedes ;
-#endif
-
-	int				do_not_close_descriptor ;
-	int				mode ;			/* Open mode : SFM_READ, SFM_WRITE or SFM_RDWR. */
-} PSF_FILE ;
-
-
-
-typedef union
-{	double			dbuf	[SF_BUFFER_LEN / sizeof (double)] ;
-#if (defined (SIZEOF_INT64_T) && (SIZEOF_INT64_T == 8))
-	int64_t			lbuf	[SF_BUFFER_LEN / sizeof (int64_t)] ;
-#else
-	long			lbuf	[SF_BUFFER_LEN / sizeof (double)] ;
-#endif
-	float			fbuf	[SF_BUFFER_LEN / sizeof (float)] ;
-	int				ibuf	[SF_BUFFER_LEN / sizeof (int)] ;
-	short			sbuf	[SF_BUFFER_LEN / sizeof (short)] ;
-	char			cbuf	[SF_BUFFER_LEN / sizeof (char)] ;
-	signed char		scbuf	[SF_BUFFER_LEN / sizeof (signed char)] ;
-	unsigned char	ucbuf	[SF_BUFFER_LEN / sizeof (signed char)] ;
-} BUF_UNION ;
-
-
-
-typedef struct sf_private_tag
-{
-	/* Canary in a coal mine. */
-	union
-	{	/* Place a double here to encourage double alignment. */
-		double d [2] ;
-		char c [16] ;
-		} canary ;
-
-	PSF_FILE		file, rsrc ;
-
-	char			syserr		[SF_SYSERR_LEN] ;
-
-	/* parselog and indx should only be changed within the logging functions
-	** of common.c
-	*/
-	struct
-	{	char			buf	[SF_PARSELOG_LEN] ;
-		int				indx ;
-	} parselog ;
-
-	unsigned char	header		[SF_HEADER_LEN] ; /* Must be unsigned */
-	int				rwf_endian ;	/* Header endian-ness flag. */
-
-	/* Storage and housekeeping data for adding/reading strings from
-	** sound files.
-	*/
-	struct
-	{	STR_DATA	data [SF_MAX_STRINGS] ;
-		char		*storage ;
-		size_t		storage_len ;
-		size_t		storage_used ;
-		uint32_t	flags ;
-	} strings ;
-
-	/* Guard value. If this changes the buffers above have overflowed. */
-	int				Magick ;
-
-	unsigned		unique_id ;
-
-	/* Index variables for maintaining parselog and header above. */
-	int				headindex, headend ;
-	int				has_text ;
-
-	int				error ;
-
-	int				endian ;		/* File endianness : SF_ENDIAN_LITTLE or SF_ENDIAN_BIG. */
-	int				data_endswap ;	/* Need to endswap data? */
-
-	/*
-	** Maximum float value for calculating the multiplier for
-	** float/double to short/int conversions.
-	*/
-	int				float_int_mult ;
-	float			float_max ;
-
-	int				scale_int_float ;
-
-	/* Vairables for handling pipes. */
-	int				is_pipe ;		/* True if file is a pipe. */
-	sf_count_t		pipeoffset ;	/* Number of bytes read from a pipe. */
-
-	/* True if clipping must be performed on float->int conversions. */
-	int				add_clipping ;
-
-	SF_INFO			sf ;
-
-	int				have_written ;	/* Has a single write been done to the file? */
-	PEAK_INFO		*peak_info ;
-
-	/* Loop Info */
-	SF_LOOP_INFO	*loop_info ;
-	SF_INSTRUMENT	*instrument ;
-
-	/* Broadcast (EBU) Info */
-	SF_BROADCAST_INFO_16K *broadcast_16k ;
-
-	/* Cart (AES46) Info */
-	SF_CART_INFO_16K *cart_16k ;
-
-	/* Channel map data (if present) : an array of ints. */
-	int				*channel_map ;
-
-	sf_count_t		filelength ;	/* Overall length of (embedded) file. */
-	sf_count_t		fileoffset ;	/* Offset in number of bytes from beginning of file. */
-
-	sf_count_t		rsrclength ;	/* Length of the resource fork (if it exists). */
-
-	sf_count_t		dataoffset ;	/* Offset in number of bytes from beginning of file. */
-	sf_count_t		datalength ;	/* Length in bytes of the audio data. */
-	sf_count_t		dataend ;		/* Offset to file tailer. */
-
-	int				blockwidth ;	/* Size in bytes of one set of interleaved samples. */
-	int				bytewidth ;		/* Size in bytes of one sample (one channel). */
-
-	void			*dither ;
-	void			*interleave ;
-
-	int				last_op ;		/* Last operation; either SFM_READ or SFM_WRITE */
-	sf_count_t		read_current ;
-	sf_count_t		write_current ;
-
-	void			*container_data ;	/*	This is a pointer to dynamically allocated file
-										**	container format specific data.
-										*/
-
-	void			*codec_data ;		/*	This is a pointer to dynamically allocated file
-										**	codec format specific data.
-										*/
-
-	SF_DITHER_INFO	write_dither ;
-	SF_DITHER_INFO	read_dither ;
-
-	int				norm_double ;
-	int				norm_float ;
-
-	int				auto_header ;
-
-	int				ieee_replace ;
-
-	/* A set of file specific function pointers */
-	sf_count_t		(*read_short)	(struct sf_private_tag*, short *ptr, sf_count_t len) ;
-	sf_count_t		(*read_int)		(struct sf_private_tag*, int *ptr, sf_count_t len) ;
-	sf_count_t		(*read_float)	(struct sf_private_tag*, float *ptr, sf_count_t len) ;
-	sf_count_t		(*read_double)	(struct sf_private_tag*, double *ptr, sf_count_t len) ;
-
-	sf_count_t		(*write_short)	(struct sf_private_tag*, const short *ptr, sf_count_t len) ;
-	sf_count_t		(*write_int)	(struct sf_private_tag*, const int *ptr, sf_count_t len) ;
-	sf_count_t		(*write_float)	(struct sf_private_tag*, const float *ptr, sf_count_t len) ;
-	sf_count_t		(*write_double)	(struct sf_private_tag*, const double *ptr, sf_count_t len) ;
-
-	sf_count_t		(*seek) 		(struct sf_private_tag*, int mode, sf_count_t samples_from_start) ;
-	int				(*write_header)	(struct sf_private_tag*, int calc_length) ;
-	int				(*command)		(struct sf_private_tag*, int command, void *data, int datasize) ;
-	int				(*byterate)		(struct sf_private_tag*) ;
-
-	/*
-	**	Separate close functions for the codec and the container.
-	**	The codec close function is always called first.
-	*/
-	int				(*codec_close)		(struct sf_private_tag*) ;
-	int				(*container_close)	(struct sf_private_tag*) ;
-
-	char			*format_desc ;
-
-	/* Virtual I/O functions. */
-	int					virtual_io ;
-	SF_VIRTUAL_IO		vio ;
-	void				*vio_user_data ;
-
-	/* Chunk get/set. */
-	SF_CHUNK_ITERATOR	*iterator ;
-
-	READ_CHUNKS			rchunks ;
-	WRITE_CHUNKS		wchunks ;
-
-	int					(*set_chunk)		(struct sf_private_tag*, const SF_CHUNK_INFO * chunk_info) ;
-	SF_CHUNK_ITERATOR *	(*next_chunk_iterator)	(struct sf_private_tag*, SF_CHUNK_ITERATOR * iterator) ;
-	int					(*get_chunk_size)	(struct sf_private_tag*, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-	int					(*get_chunk_data)	(struct sf_private_tag*, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-} SF_PRIVATE ;
-
-
-
-enum
-{	SFE_NO_ERROR				= SF_ERR_NO_ERROR,
-	SFE_BAD_OPEN_FORMAT			= SF_ERR_UNRECOGNISED_FORMAT,
-	SFE_SYSTEM					= SF_ERR_SYSTEM,
-	SFE_MALFORMED_FILE			= SF_ERR_MALFORMED_FILE,
-	SFE_UNSUPPORTED_ENCODING	= SF_ERR_UNSUPPORTED_ENCODING,
-
-	SFE_ZERO_MAJOR_FORMAT,
-	SFE_ZERO_MINOR_FORMAT,
-	SFE_BAD_FILE,
-	SFE_BAD_FILE_READ,
-	SFE_OPEN_FAILED,
-	SFE_BAD_SNDFILE_PTR,
-	SFE_BAD_SF_INFO_PTR,
-	SFE_BAD_SF_INCOMPLETE,
-	SFE_BAD_FILE_PTR,
-	SFE_BAD_INT_PTR,
-	SFE_BAD_STAT_SIZE,
-	SFE_NO_TEMP_DIR,
-	SFE_MALLOC_FAILED,
-	SFE_UNIMPLEMENTED,
-	SFE_BAD_READ_ALIGN,
-	SFE_BAD_WRITE_ALIGN,
-	SFE_UNKNOWN_FORMAT,
-	SFE_NOT_READMODE,
-	SFE_NOT_WRITEMODE,
-	SFE_BAD_MODE_RW,
-	SFE_BAD_SF_INFO,
-	SFE_BAD_OFFSET,
-	SFE_NO_EMBED_SUPPORT,
-	SFE_NO_EMBEDDED_RDWR,
-	SFE_NO_PIPE_WRITE,
-
-	SFE_INTERNAL,
-	SFE_BAD_COMMAND_PARAM,
-	SFE_BAD_ENDIAN,
-	SFE_CHANNEL_COUNT_ZERO,
-	SFE_CHANNEL_COUNT,
-
-	SFE_BAD_VIRTUAL_IO,
-
-	SFE_INTERLEAVE_MODE,
-	SFE_INTERLEAVE_SEEK,
-	SFE_INTERLEAVE_READ,
-
-	SFE_BAD_SEEK,
-	SFE_NOT_SEEKABLE,
-	SFE_AMBIGUOUS_SEEK,
-	SFE_WRONG_SEEK,
-	SFE_SEEK_FAILED,
-
-	SFE_BAD_OPEN_MODE,
-	SFE_OPEN_PIPE_RDWR,
-	SFE_RDWR_POSITION,
-	SFE_RDWR_BAD_HEADER,
-	SFE_CMD_HAS_DATA,
-	SFE_BAD_BROADCAST_INFO_SIZE,
-	SFE_BAD_BROADCAST_INFO_TOO_BIG,
-	SFE_BAD_CART_INFO_SIZE,
-	SFE_BAD_CART_INFO_TOO_BIG,
-
-	SFE_STR_NO_SUPPORT,
-	SFE_STR_NOT_WRITE,
-	SFE_STR_MAX_DATA,
-	SFE_STR_MAX_COUNT,
-	SFE_STR_BAD_TYPE,
-	SFE_STR_NO_ADD_END,
-	SFE_STR_BAD_STRING,
-	SFE_STR_WEIRD,
-
-	SFE_WAV_NO_RIFF,
-	SFE_WAV_NO_WAVE,
-	SFE_WAV_NO_FMT,
-	SFE_WAV_BAD_FMT,
-	SFE_WAV_FMT_SHORT,
-	SFE_WAV_BAD_FACT,
-	SFE_WAV_BAD_PEAK,
-	SFE_WAV_PEAK_B4_FMT,
-	SFE_WAV_BAD_FORMAT,
-	SFE_WAV_BAD_BLOCKALIGN,
-	SFE_WAV_NO_DATA,
-	SFE_WAV_BAD_LIST,
-	SFE_WAV_ADPCM_NOT4BIT,
-	SFE_WAV_ADPCM_CHANNELS,
-	SFE_WAV_GSM610_FORMAT,
-	SFE_WAV_UNKNOWN_CHUNK,
-	SFE_WAV_WVPK_DATA,
-
-	SFE_AIFF_NO_FORM,
-	SFE_AIFF_AIFF_NO_FORM,
-	SFE_AIFF_COMM_NO_FORM,
-	SFE_AIFF_SSND_NO_COMM,
-	SFE_AIFF_UNKNOWN_CHUNK,
-	SFE_AIFF_COMM_CHUNK_SIZE,
-	SFE_AIFF_BAD_COMM_CHUNK,
-	SFE_AIFF_PEAK_B4_COMM,
-	SFE_AIFF_BAD_PEAK,
-	SFE_AIFF_NO_SSND,
-	SFE_AIFF_NO_DATA,
-	SFE_AIFF_RW_SSND_NOT_LAST,
-
-	SFE_AU_UNKNOWN_FORMAT,
-	SFE_AU_NO_DOTSND,
-	SFE_AU_EMBED_BAD_LEN,
-
-	SFE_RAW_READ_BAD_SPEC,
-	SFE_RAW_BAD_BITWIDTH,
-	SFE_RAW_BAD_FORMAT,
-
-	SFE_PAF_NO_MARKER,
-	SFE_PAF_VERSION,
-	SFE_PAF_UNKNOWN_FORMAT,
-	SFE_PAF_SHORT_HEADER,
-	SFE_PAF_BAD_CHANNELS,
-
-	SFE_SVX_NO_FORM,
-	SFE_SVX_NO_BODY,
-	SFE_SVX_NO_DATA,
-	SFE_SVX_BAD_COMP,
-	SFE_SVX_BAD_NAME_LENGTH,
-
-	SFE_NIST_BAD_HEADER,
-	SFE_NIST_CRLF_CONVERISON,
-	SFE_NIST_BAD_ENCODING,
-
-	SFE_VOC_NO_CREATIVE,
-	SFE_VOC_BAD_FORMAT,
-	SFE_VOC_BAD_VERSION,
-	SFE_VOC_BAD_MARKER,
-	SFE_VOC_BAD_SECTIONS,
-	SFE_VOC_MULTI_SAMPLERATE,
-	SFE_VOC_MULTI_SECTION,
-	SFE_VOC_MULTI_PARAM,
-	SFE_VOC_SECTION_COUNT,
-	SFE_VOC_NO_PIPE,
-
-	SFE_IRCAM_NO_MARKER,
-	SFE_IRCAM_BAD_CHANNELS,
-	SFE_IRCAM_UNKNOWN_FORMAT,
-
-	SFE_W64_64_BIT,
-	SFE_W64_NO_RIFF,
-	SFE_W64_NO_WAVE,
-	SFE_W64_NO_DATA,
-	SFE_W64_ADPCM_NOT4BIT,
-	SFE_W64_ADPCM_CHANNELS,
-	SFE_W64_GSM610_FORMAT,
-
-	SFE_MAT4_BAD_NAME,
-	SFE_MAT4_NO_SAMPLERATE,
-
-	SFE_MAT5_BAD_ENDIAN,
-	SFE_MAT5_NO_BLOCK,
-	SFE_MAT5_SAMPLE_RATE,
-
-	SFE_PVF_NO_PVF1,
-	SFE_PVF_BAD_HEADER,
-	SFE_PVF_BAD_BITWIDTH,
-
-	SFE_DWVW_BAD_BITWIDTH,
-	SFE_G72X_NOT_MONO,
-
-	SFE_XI_BAD_HEADER,
-	SFE_XI_EXCESS_SAMPLES,
-	SFE_XI_NO_PIPE,
-
-	SFE_HTK_NO_PIPE,
-
-	SFE_SDS_NOT_SDS,
-	SFE_SDS_BAD_BIT_WIDTH,
-
-	SFE_SD2_FD_DISALLOWED,
-	SFE_SD2_BAD_DATA_OFFSET,
-	SFE_SD2_BAD_MAP_OFFSET,
-	SFE_SD2_BAD_DATA_LENGTH,
-	SFE_SD2_BAD_MAP_LENGTH,
-	SFE_SD2_BAD_RSRC,
-	SFE_SD2_BAD_SAMPLE_SIZE,
-
-	SFE_FLAC_BAD_HEADER,
-	SFE_FLAC_NEW_DECODER,
-	SFE_FLAC_INIT_DECODER,
-	SFE_FLAC_LOST_SYNC,
-	SFE_FLAC_BAD_SAMPLE_RATE,
-	SFE_FLAC_UNKOWN_ERROR,
-
-	SFE_WVE_NOT_WVE,
-	SFE_WVE_NO_PIPE,
-
-	SFE_VORBIS_ENCODER_BUG,
-
-	SFE_RF64_NOT_RF64,
-	SFE_BAD_CHUNK_PTR,
-	SFE_UNKNOWN_CHUNK,
-	SFE_BAD_CHUNK_FORMAT,
-	SFE_BAD_CHUNK_MARKER,
-	SFE_BAD_CHUNK_DATA_PTR,
-
-	SFE_ALAC_FAIL_TMPFILE,
-
-	SFE_MAX_ERROR			/* This must be last in list. */
-} ;
-
-int subformat_to_bytewidth (int format) ;
-int s_bitwidth_to_subformat (int bits) ;
-int u_bitwidth_to_subformat (int bits) ;
-
-/*  Functions for reading and writing floats and doubles on processors
-**	with non-IEEE floats/doubles.
-*/
-float	float32_be_read		(const unsigned char *cptr) ;
-float	float32_le_read		(const unsigned char *cptr) ;
-void	float32_be_write	(float in, unsigned char *out) ;
-void	float32_le_write	(float in, unsigned char *out) ;
-
-double	double64_be_read	(const unsigned char *cptr) ;
-double	double64_le_read	(const unsigned char *cptr) ;
-void	double64_be_write	(double in, unsigned char *out) ;
-void	double64_le_write	(double in, unsigned char *out) ;
-
-/* Functions for writing to the internal logging buffer. */
-
-void	psf_log_printf		(SF_PRIVATE *psf, const char *format, ...) ;
-void	psf_log_SF_INFO 	(SF_PRIVATE *psf) ;
-
-int32_t	psf_rand_int32 (void) ;
-
-void append_snprintf (char * dest, size_t maxlen, const char * fmt, ...) ;
-void psf_strlcpy_crlf (char *dest, const char *src, size_t destmax, size_t srcmax) ;
-
-sf_count_t psf_decode_frame_count (SF_PRIVATE *psf) ;
-
-/* Functions used when writing file headers. */
-
-int		psf_binheader_writef	(SF_PRIVATE *psf, const char *format, ...) ;
-void	psf_asciiheader_printf	(SF_PRIVATE *psf, const char *format, ...) ;
-
-/* Functions used when reading file headers. */
-
-int		psf_binheader_readf	(SF_PRIVATE *psf, char const *format, ...) ;
-
-/* Functions used in the write function for updating the peak chunk. */
-
-void	peak_update_short	(SF_PRIVATE *psf, short *ptr, size_t items) ;
-void	peak_update_int		(SF_PRIVATE *psf, int *ptr, size_t items) ;
-void	peak_update_double	(SF_PRIVATE *psf, double *ptr, size_t items) ;
-
-/* Functions defined in command.c. */
-
-int		psf_get_format_simple_count	(void) ;
-int		psf_get_format_simple		(SF_FORMAT_INFO *data) ;
-
-int		psf_get_format_info			(SF_FORMAT_INFO *data) ;
-
-int		psf_get_format_major_count	(void) ;
-int		psf_get_format_major		(SF_FORMAT_INFO *data) ;
-
-int		psf_get_format_subtype_count	(void) ;
-int		psf_get_format_subtype		(SF_FORMAT_INFO *data) ;
-
-void	psf_generate_format_desc (SF_PRIVATE *psf) ;
-
-double	psf_calc_signal_max			(SF_PRIVATE *psf, int normalize) ;
-int		psf_calc_max_all_channels	(SF_PRIVATE *psf, double *peaks, int normalize) ;
-
-int		psf_get_signal_max			(SF_PRIVATE *psf, double *peak) ;
-int		psf_get_max_all_channels	(SF_PRIVATE *psf, double *peaks) ;
-
-/* Functions in strings.c. */
-
-const char* psf_get_string (SF_PRIVATE *psf, int str_type) ;
-int psf_set_string (SF_PRIVATE *psf, int str_type, const char *str) ;
-int psf_store_string (SF_PRIVATE *psf, int str_type, const char *str) ;
-int psf_location_string_count (const SF_PRIVATE * psf, int location) ;
-
-/* Default seek function. Use for PCM and float encoded data. */
-sf_count_t	psf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start) ;
-
-int macos_guess_file_type (SF_PRIVATE *psf, const char *filename) ;
-
-/*------------------------------------------------------------------------------------
-**	File I/O functions which will allow access to large files (> 2 Gig) on
-**	some 32 bit OSes. Implementation in file_io.c.
-*/
-
-int psf_fopen (SF_PRIVATE *psf) ;
-int psf_set_stdio (SF_PRIVATE *psf) ;
-int psf_file_valid (SF_PRIVATE *psf) ;
-void psf_set_file (SF_PRIVATE *psf, int fd) ;
-void psf_init_files (SF_PRIVATE *psf) ;
-void psf_use_rsrc (SF_PRIVATE *psf, int on_off) ;
-
-SNDFILE * psf_open_file (SF_PRIVATE *psf, SF_INFO *sfinfo) ;
-
-sf_count_t psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) ;
-sf_count_t psf_fread (void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ;
-sf_count_t psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ;
-sf_count_t psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) ;
-sf_count_t psf_ftell (SF_PRIVATE *psf) ;
-sf_count_t psf_get_filelen (SF_PRIVATE *psf) ;
-
-void psf_fsync (SF_PRIVATE *psf) ;
-
-int psf_is_pipe (SF_PRIVATE *psf) ;
-
-int psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) ;
-int psf_fclose (SF_PRIVATE *psf) ;
-
-/* Open and close the resource fork of a file. */
-int psf_open_rsrc (SF_PRIVATE *psf) ;
-int psf_close_rsrc (SF_PRIVATE *psf) ;
-
-/*
-void psf_fclearerr (SF_PRIVATE *psf) ;
-int psf_ferror (SF_PRIVATE *psf) ;
-*/
-
-/*------------------------------------------------------------------------------------
-** Functions for reading and writing different file formats.
-*/
-
-int		aiff_open	(SF_PRIVATE *psf) ;
-int		au_open		(SF_PRIVATE *psf) ;
-int		avr_open	(SF_PRIVATE *psf) ;
-int		htk_open	(SF_PRIVATE *psf) ;
-int		ircam_open	(SF_PRIVATE *psf) ;
-int		mat4_open	(SF_PRIVATE *psf) ;
-int		mat5_open	(SF_PRIVATE *psf) ;
-int		nist_open	(SF_PRIVATE *psf) ;
-int		paf_open	(SF_PRIVATE *psf) ;
-int		pvf_open	(SF_PRIVATE *psf) ;
-int		raw_open	(SF_PRIVATE *psf) ;
-int		sd2_open	(SF_PRIVATE *psf) ;
-int		sds_open	(SF_PRIVATE *psf) ;
-int		svx_open	(SF_PRIVATE *psf) ;
-int		voc_open	(SF_PRIVATE *psf) ;
-int		w64_open	(SF_PRIVATE *psf) ;
-int		wav_open	(SF_PRIVATE *psf) ;
-int		xi_open		(SF_PRIVATE *psf) ;
-int		flac_open	(SF_PRIVATE *psf) ;
-int		caf_open	(SF_PRIVATE *psf) ;
-int		mpc2k_open	(SF_PRIVATE *psf) ;
-int		rf64_open	(SF_PRIVATE *psf) ;
-
-int		ogg_vorbis_open	(SF_PRIVATE *psf) ;
-int		ogg_speex_open	(SF_PRIVATE *psf) ;
-int		ogg_pcm_open	(SF_PRIVATE *psf) ;
-int		ogg_opus_open	(SF_PRIVATE *psf) ;
-int		ogg_open	(SF_PRIVATE *psf) ;
-
-
-/* In progress. Do not currently work. */
-
-int		mpeg_open	(SF_PRIVATE *psf) ;
-int		rx2_open	(SF_PRIVATE *psf) ;
-int		txw_open	(SF_PRIVATE *psf) ;
-int		wve_open	(SF_PRIVATE *psf) ;
-int		dwd_open	(SF_PRIVATE *psf) ;
-
-int		macbinary3_open (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-**	Init functions for a number of common data encodings.
-*/
-
-int		pcm_init		(SF_PRIVATE *psf) ;
-int		ulaw_init		(SF_PRIVATE *psf) ;
-int		alaw_init		(SF_PRIVATE *psf) ;
-int		float32_init	(SF_PRIVATE *psf) ;
-int		double64_init	(SF_PRIVATE *psf) ;
-int		dwvw_init		(SF_PRIVATE *psf, int bitwidth) ;
-int		gsm610_init		(SF_PRIVATE *psf) ;
-int		vox_adpcm_init	(SF_PRIVATE *psf) ;
-int		flac_init		(SF_PRIVATE *psf) ;
-int		g72x_init 		(SF_PRIVATE * psf) ;
-int		alac_init		(SF_PRIVATE *psf, const ALAC_DECODER_INFO * info) ;
-
-int 	dither_init		(SF_PRIVATE *psf, int mode) ;
-
-int		wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-int		wav_w64_msadpcm_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-
-int		aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-
-int		interleave_init (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-** Chunk logging functions.
-*/
-
-SF_CHUNK_ITERATOR * psf_get_chunk_iterator (SF_PRIVATE * psf, const char * marker_str) ;
-SF_CHUNK_ITERATOR * psf_next_chunk_iterator (const READ_CHUNKS * pchk , SF_CHUNK_ITERATOR *iterator) ;
-int		psf_store_read_chunk_u32 (READ_CHUNKS * pchk, uint32_t marker, sf_count_t offset, uint32_t len) ;
-int		psf_store_read_chunk_str (READ_CHUNKS * pchk, const char * marker, sf_count_t offset, uint32_t len) ;
-int		psf_save_write_chunk (WRITE_CHUNKS * pchk, const SF_CHUNK_INFO * chunk_info) ;
-int		psf_find_read_chunk_str (const READ_CHUNKS * pchk, const char * marker) ;
-int		psf_find_read_chunk_m32 (const READ_CHUNKS * pchk, uint32_t marker) ;
-int		psf_find_read_chunk_iterator (const READ_CHUNKS * pchk, const SF_CHUNK_ITERATOR * marker) ;
-
-int		psf_find_write_chunk (WRITE_CHUNKS * pchk, const char * marker) ;
-
-static inline int
-fourcc_to_marker (const SF_CHUNK_INFO * chunk_info)
-{	const unsigned char * cptr ;
-
-	if (chunk_info->id_size != 4)
-		return 0 ;
-
-	cptr = (const unsigned char *) chunk_info->id ;
-	return (cptr [3] << 24) + (cptr [2] << 16) + (cptr [1] << 8) + cptr [0] ;
-} /* fourcc_to_marker */
-
-/*------------------------------------------------------------------------------------
-** Functions that work like OpenBSD's strlcpy/strlcat to replace strncpy/strncat.
-**
-** See : http://www.gratisoft.us/todd/papers/strlcpy.html
-**
-** These functions are available on *BSD, but are not avaialble everywhere so we
-** implement them here.
-**
-** The argument order has been changed to that of strncpy/strncat to cause
-** compiler errors if code is carelessly converted from one to the other.
-*/
-
-static inline void
-psf_strlcat (char *dest, size_t n, const char *src)
-{	strncat (dest, src, n - strlen (dest) - 1) ;
-	dest [n - 1] = 0 ;
-} /* psf_strlcat */
-
-static inline void
-psf_strlcpy (char *dest, size_t n, const char *src)
-{	strncpy (dest, src, n - 1) ;
-	dest [n - 1] = 0 ;
-} /* psf_strlcpy */
-
-/*------------------------------------------------------------------------------------
-** Other helper functions.
-*/
-
-void	*psf_memset (void *s, int c, sf_count_t n) ;
-
-SF_INSTRUMENT * psf_instrument_alloc (void) ;
-
-void	psf_sanitize_string (char * cptr, int len) ;
-
-/* Generate the current date as a string. */
-void	psf_get_date_str (char *str, int maxlen) ;
-
-SF_BROADCAST_INFO_16K * broadcast_var_alloc (void) ;
-int		broadcast_var_set (SF_PRIVATE *psf, const SF_BROADCAST_INFO * data, size_t datasize) ;
-int		broadcast_var_get (SF_PRIVATE *psf, SF_BROADCAST_INFO * data, size_t datasize) ;
-
-
-SF_CART_INFO_16K * cart_var_alloc (void) ;
-int 		cart_var_set (SF_PRIVATE *psf, const SF_CART_INFO * date, size_t datasize) ;
-int		cart_var_get (SF_PRIVATE *psf, SF_CART_INFO * data, size_t datasize) ;
-
-typedef struct
-{	int channels ;
-	int endianness ;
-} AUDIO_DETECT ;
-
-int audio_detect (SF_PRIVATE * psf, AUDIO_DETECT *ad, const unsigned char * data, int datalen) ;
-int id3_skip (SF_PRIVATE * psf) ;
-
-void	alac_get_desc_chunk_items (int subformat, uint32_t *fmt_flags, uint32_t *frames_per_packet) ;
-
-FILE *	psf_open_tmpfile (char * fname, size_t fnamelen) ;
-
-/*------------------------------------------------------------------------------------
-** Helper/debug functions.
-*/
-
-void	psf_hexdump (const void *ptr, int len) ;
-
-const char * str_of_major_format (int format) ;
-const char * str_of_minor_format (int format) ;
-const char * str_of_open_mode (int mode) ;
-const char * str_of_endianness (int end) ;
-
-/*------------------------------------------------------------------------------------
-** Extra commands for sf_command(). Not for public use yet.
-*/
-
-enum
-{	SFC_TEST_AIFF_ADD_INST_CHUNK	= 0x2000,
-	SFC_TEST_WAV_ADD_INFO_CHUNK		= 0x2010
-} ;
-
-/*
-** Maybe, one day, make these functions or something like them, public.
-**
-** Buffer to buffer dithering. Pointer in and out are allowed to point
-** to the same buffer for in-place dithering.
-*/
-
-#if 0
-int sf_dither_short		(const SF_DITHER_INFO *dither, const short *in, short *out, int count) ;
-int sf_dither_int		(const SF_DITHER_INFO *dither, const int *in, int *out, int count) ;
-int sf_dither_float		(const SF_DITHER_INFO *dither, const float *in, float *out, int count) ;
-int sf_dither_double	(const SF_DITHER_INFO *dither, const double *in, double *out, int count) ;
-#endif
-
-/*------------------------------------------------------------------------------------
-** Data conversion functions.
-*/
-
-static inline short
-psf_short_of_int (int x)
-{	return (x >> 16) ;
-}
-
-void psf_f2s_array (const float *src, short *dest, int count, int normalize) ;
-void psf_f2s_clip_array (const float *src, short *dest, int count, int normalize) ;
-
-void psf_d2s_array (const double *src, short *dest, int count, int normalize) ;
-void psf_d2s_clip_array (const double *src, short *dest, int count, int normalize) ;
-
-void psf_f2i_array (const float *src, int *dest, int count, int normalize) ;
-void psf_f2i_clip_array (const float *src, int *dest, int count, int normalize) ;
-
-void psf_d2i_array (const double *src, int *dest, int count, int normalize) ;
-void psf_d2i_clip_array (const double *src, int *dest, int count, int normalize) ;
-
-#endif /* SNDFILE_COMMON_H */
-
diff --git a/libs/libsndfile/src/create_symbols_file.py b/libs/libsndfile/src/create_symbols_file.py
deleted file mode 100755
index 15b1ccaf4b..0000000000
--- a/libs/libsndfile/src/create_symbols_file.py
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re, sys
-
-#----------------------------------------------------------------
-# These are all of the public functions exported from libsndfile.
-#
-# Its important not to change the order they are listed in or
-# the ordinal values in the second column.
-
-ALL_SYMBOLS = (
-	(	"sf_command",	 		1	),
-	(	"sf_open",				2	),
-	(	"sf_close",				3	),
-	(	"sf_seek",				4	),
-	(	"sf_error",				7	),
-	(	"sf_perror",			8	),
-	(	"sf_error_str",			9	),
-	(	"sf_error_number",		10	),
-	(	"sf_format_check",		11	),
-	(	"sf_read_raw",			16	),
-	(	"sf_readf_short",		17	),
-	(	"sf_readf_int",			18	),
-	(	"sf_readf_float",		19	),
-	(	"sf_readf_double",		20	),
-	(	"sf_read_short",		21	),
-	(	"sf_read_int",			22	),
-	(	"sf_read_float",		23	),
-	(	"sf_read_double",		24	),
-	(	"sf_write_raw",			32	),
-	(	"sf_writef_short",		33	),
-	(	"sf_writef_int",		34	),
-	(	"sf_writef_float",		35	),
-	(	"sf_writef_double",		36	),
-	(	"sf_write_short",		37	),
-	(	"sf_write_int",			38	),
-	(	"sf_write_float",		39	),
-	(	"sf_write_double",		40	),
-	(	"sf_strerror",			50	),
-	(	"sf_get_string",		60	),
-	(	"sf_set_string",		61	),
-	(	"sf_version_string",	68	),
-	(	"sf_open_fd",			70	),
-	(	"sf_wchar_open",		71  ),
-	(	"sf_open_virtual",		80	),
-	(	"sf_write_sync",		90	),
-	(	"sf_set_chunk",			100	),
-	(	"sf_get_chunk_size",	101 ),
-	(	"sf_get_chunk_data",	102 ),
-	(	"sf_get_chunk_iterator",	103 ),
-	(	"sf_next_chunk_iterator",	104 ),
-	(	"sf_current_byterate",	110 )
-	)
-
-#-------------------------------------------------------------------------------
-
-def linux_symbols (progname, version):
-	print ("# Auto-generated by %s\n" %progname)
-	print ("libsndfile.so.%s" % version)
-	print ("{")
-	print ("  global:")
-	for name, ordinal in ALL_SYMBOLS:
-		if  name == "sf_wchar_open":
-			continue
-		print ("    %s ;" % name)
-	print ("  local:")
-	print ("    * ;")
-	print ("} ;")
-	sys.stdout.write ("\n")
-	return
-
-def darwin_symbols (progname, version):
-	print ("# Auto-generated by %s\n" %progname)
-	for name, ordinal in ALL_SYMBOLS:
-		if  name == "sf_wchar_open":
-			continue
-		print ("_%s" % name)
-	sys.stdout.write ("\n")
-	return
-
-def win32_symbols (progname, version, name):
-	print ("; Auto-generated by %s\n" %progname)
-	print ("LIBRARY %s-%s.dll" % (name, re.sub ("\..*", "", version)))
-	print ("EXPORTS\n")
-	for name, ordinal in ALL_SYMBOLS:
-		print ("%-20s @%s" % (name, ordinal))
-	sys.stdout.write ("\n")
-	return
-
-def os2_symbols (progname, version, name):
-	print ("; Auto-generated by %s\n" %progname)
-	print ("LIBRARY %s%s" % (name, re.sub ("\..*", "", version)))
-	print ("INITINSTANCE TERMINSTANCE")
-	print ("CODE PRELOAD MOVEABLE DISCARDABLE")
-	print ("DATA PRELOAD MOVEABLE MULTIPLE NONSHARED")
-	print ("EXPORTS\n")
-	for name, ordinal in ALL_SYMBOLS:
-		if  name == "sf_wchar_open":
-			continue
-		print ("_%-20s @%s" % (name, ordinal))
-	sys.stdout.write ("\n")
-	return
-
-def plain_symbols (progname, version, name):
-	for name, ordinal in ALL_SYMBOLS:
-		print (name)
-
-def no_symbols (os_name):
-	sys.stdout.write ("\n")
-	print ("No known way of restricting exported symbols on '%s'." % os_name)
-	print ("If you know a way, please contact the author.")
-	sys.stdout.write ("\n")
-	return
-
-#-------------------------------------------------------------------------------
-
-progname = re.sub (".*[\\/]", "", sys.argv [0])
-
-if len (sys.argv) != 3:
-	sys.stdout.write ("\n")
-	print ("Usage : %s <target OS name> <libsndfile version>." % progname)
-	sys.stdout.write ("\n")
-	print ("    Currently supported values for target OS are:")
-	print ("          linux")
-	print ("          darwin     (ie MacOSX)")
-	print ("          win32      (ie wintendo)")
-	print ("          cygwin     (Cygwin on wintendo)")
-	print ("          os2        (OS/2)")
-	print ("          plain      (plain list of symbols)")
-	sys.stdout.write ("\n")
-	sys.exit (1)
-
-os_name = sys.argv [1]
-version = re.sub ("\.[a-z0-9]+$", "", sys.argv [2])
-
-if os_name == "linux" or os_name == "gnu" or os_name == "binutils":
-	linux_symbols (progname, version)
-elif os_name == "darwin":
-	darwin_symbols (progname, version)
-elif os_name == "win32":
-	win32_symbols (progname, version, "libsndfile")
-elif os_name == "cygwin":
-	win32_symbols (progname, version, "cygsndfile")
-elif os_name == "os2":
-	os2_symbols (progname, version, "sndfile")
-elif os_name == "static":
-	plain_symbols (progname, version, "")
-else:
-	no_symbols (os_name)
-
-sys.exit (0)
-
diff --git a/libs/libsndfile/src/cygsndfile.def b/libs/libsndfile/src/cygsndfile.def
deleted file mode 100644
index 510aa8e229..0000000000
--- a/libs/libsndfile/src/cygsndfile.def
+++ /dev/null
@@ -1,39 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY cygsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_open_fd           @70
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/dither.c b/libs/libsndfile/src/dither.c
deleted file mode 100644
index d149bc1b68..0000000000
--- a/libs/libsndfile/src/dither.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
-** Copyright (C) 2003-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdlib.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*============================================================================
-**	Rule number 1 is to only apply dither when going from a larger bitwidth
-**	to a smaller bitwidth. This can happen on both read and write.
-**
-**	Need to apply dither on all conversions marked X below.
-**
-**	Dither on write:
-**
-**										Input
-**					|	short		int			float		double
-**			--------+-----------------------------------------------
-**		O	8 bit	|	X			X			X			X
-**		u	16 bit	|	none		X			X			X
-**		t	24 bit	|	none		X			X			X
-**		p	32 bit	|	none		none		X			X
-**		u	float	|	none		none		none		none
-**		t	double	|	none		none		none		none
-**
-**	Dither on read:
-**
-**										Input
-**		O			|	8 bit	16 bit	24 bit	32 bit	float	double
-**		u	--------+-------------------------------------------------
-**		t	short	|	none	none	X		X		X		X
-**		p	int		|	none	none	none	X		X		X
-**		u	float	|	none	none	none	none	none	none
-**		t	double	|	none	none	none	none	none	none
-*/
-
-#define	SFE_DITHER_BAD_PTR	666
-#define	SFE_DITHER_BAD_TYPE	667
-
-typedef struct
-{	int			read_short_dither_bits, read_int_dither_bits ;
-	int			write_short_dither_bits, write_int_dither_bits ;
-	double		read_float_dither_scale, read_double_dither_bits ;
-	double		write_float_dither_scale, write_double_dither_bits ;
-
-	sf_count_t	(*read_short)	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-	sf_count_t	(*read_int)		(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-	sf_count_t	(*read_float)	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-	sf_count_t	(*read_double)	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-	sf_count_t	(*write_short)	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-	sf_count_t	(*write_int)	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-	sf_count_t	(*write_float)	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-	sf_count_t	(*write_double)	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-	double buffer [SF_BUFFER_LEN / sizeof (double)] ;
-} DITHER_DATA ;
-
-static sf_count_t dither_read_short		(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dither_read_int		(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-
-static sf_count_t dither_write_short	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dither_write_int		(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dither_write_float	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dither_write_double	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-int
-dither_init (SF_PRIVATE *psf, int mode)
-{	DITHER_DATA *pdither ;
-
-	pdither = psf->dither ; /* This may be NULL. */
-
-	/* Turn off dither on read. */
-	if (mode == SFM_READ && psf->read_dither.type == SFD_NO_DITHER)
-	{	if (pdither == NULL)
-			return 0 ; /* Dither is already off, so just return. */
-
-		if (pdither->read_short)
-			psf->read_short = pdither->read_short ;
-		if (pdither->read_int)
-			psf->read_int = pdither->read_int ;
-		if (pdither->read_float)
-			psf->read_float = pdither->read_float ;
-		if (pdither->read_double)
-			psf->read_double = pdither->read_double ;
-		return 0 ;
-		} ;
-
-	/* Turn off dither on write. */
-	if (mode == SFM_WRITE && psf->write_dither.type == SFD_NO_DITHER)
-	{	if (pdither == NULL)
-			return 0 ; /* Dither is already off, so just return. */
-
-		if (pdither->write_short)
-			psf->write_short = pdither->write_short ;
-		if (pdither->write_int)
-			psf->write_int = pdither->write_int ;
-		if (pdither->write_float)
-			psf->write_float = pdither->write_float ;
-		if (pdither->write_double)
-			psf->write_double = pdither->write_double ;
-		return 0 ;
-		} ;
-
-	/* Turn on dither on read if asked. */
-	if (mode == SFM_READ && psf->read_dither.type != 0)
-	{	if (pdither == NULL)
-			pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ;
-		if (pdither == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		switch (SF_CODEC (psf->sf.format))
-		{	case SF_FORMAT_DOUBLE :
-			case SF_FORMAT_FLOAT :
-					pdither->read_int = psf->read_int ;
-					psf->read_int = dither_read_int ;
-					break ;
-
-			case SF_FORMAT_PCM_32 :
-			case SF_FORMAT_PCM_24 :
-			case SF_FORMAT_PCM_16 :
-			case SF_FORMAT_PCM_S8 :
-			case SF_FORMAT_PCM_U8 :
-					pdither->read_short = psf->read_short ;
-					psf->read_short = dither_read_short ;
-					break ;
-
-			default : break ;
-			} ;
-		} ;
-
-	/* Turn on dither on write if asked. */
-	if (mode == SFM_WRITE && psf->write_dither.type != 0)
-	{	if (pdither == NULL)
-			pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ;
-		if (pdither == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		switch (SF_CODEC (psf->sf.format))
-		{	case SF_FORMAT_DOUBLE :
-			case SF_FORMAT_FLOAT :
-					pdither->write_int = psf->write_int ;
-					psf->write_int = dither_write_int ;
-					break ;
-
-			case SF_FORMAT_PCM_32 :
-			case SF_FORMAT_PCM_24 :
-			case SF_FORMAT_PCM_16 :
-			case SF_FORMAT_PCM_S8 :
-			case SF_FORMAT_PCM_U8 :
-					break ;
-
-			default : break ;
-			} ;
-
-		pdither->write_short = psf->write_short ;
-		psf->write_short = dither_write_short ;
-
-		pdither->write_int = psf->write_int ;
-		psf->write_int = dither_write_int ;
-
-		pdither->write_float = psf->write_float ;
-		psf->write_float = dither_write_float ;
-
-		pdither->write_double = psf->write_double ;
-		psf->write_double = dither_write_double ;
-		} ;
-
-	return 0 ;
-} /* dither_init */
-
-/*==============================================================================
-*/
-
-static void dither_short	(const short *in, short *out, int frames, int channels) ;
-static void dither_int		(const int *in, int *out, int frames, int channels) ;
-
-static void dither_float	(const float *in, float *out, int frames, int channels) ;
-static void dither_double	(const double *in, double *out, int frames, int channels) ;
-
-static sf_count_t
-dither_read_short (SF_PRIVATE * UNUSED (psf), short * UNUSED (ptr), sf_count_t len)
-{
-	return len ;
-} /* dither_read_short */
-
-static sf_count_t
-dither_read_int (SF_PRIVATE * UNUSED (psf), int * UNUSED (ptr), sf_count_t len)
-{
-	return len ;
-} /* dither_read_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-dither_write_short	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	DITHER_DATA *pdither ;
-	int			bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-
-	if ((pdither = psf->dither) == NULL)
-	{	psf->error = SFE_DITHER_BAD_PTR ;
-		return 0 ;
-		} ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_DPCM_8 :
-				break ;
-
-		default :
-			return pdither->write_short (psf, ptr, len) ;
-		} ;
-
-	bufferlen = sizeof (pdither->buffer) / sizeof (short) ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		writecount /= psf->sf.channels ;
-		writecount *= psf->sf.channels ;
-
-		dither_short (ptr, (short*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-		thiswrite = pdither->write_short (psf, (short*) pdither->buffer, writecount) ;
-		total += thiswrite ;
-		len -= thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dither_write_short */
-
-static sf_count_t
-dither_write_int	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	DITHER_DATA *pdither ;
-	int			bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-
-	if ((pdither = psf->dither) == NULL)
-	{	psf->error = SFE_DITHER_BAD_PTR ;
-		return 0 ;
-		} ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-				break ;
-
-		case SF_FORMAT_DPCM_8 :
-		case SF_FORMAT_DPCM_16 :
-				break ;
-
-		default :
-			return pdither->write_int (psf, ptr, len) ;
-		} ;
-
-
-	bufferlen = sizeof (pdither->buffer) / sizeof (int) ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		writecount /= psf->sf.channels ;
-		writecount *= psf->sf.channels ;
-
-		dither_int (ptr, (int*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-		thiswrite = pdither->write_int (psf, (int*) pdither->buffer, writecount) ;
-		total += thiswrite ;
-		len -= thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dither_write_int */
-
-static sf_count_t
-dither_write_float	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	DITHER_DATA *pdither ;
-	int			bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-
-	if ((pdither = psf->dither) == NULL)
-	{	psf->error = SFE_DITHER_BAD_PTR ;
-		return 0 ;
-		} ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-				break ;
-
-		case SF_FORMAT_DPCM_8 :
-		case SF_FORMAT_DPCM_16 :
-				break ;
-
-		default :
-			return pdither->write_float (psf, ptr, len) ;
-		} ;
-
-	bufferlen = sizeof (pdither->buffer) / sizeof (float) ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (float) len ;
-		writecount /= psf->sf.channels ;
-		writecount *= psf->sf.channels ;
-
-		dither_float (ptr, (float*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-		thiswrite = pdither->write_float (psf, (float*) pdither->buffer, writecount) ;
-		total += thiswrite ;
-		len -= thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dither_write_float */
-
-static sf_count_t
-dither_write_double	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	DITHER_DATA *pdither ;
-	int			bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-
-	if ((pdither = psf->dither) == NULL)
-	{	psf->error = SFE_DITHER_BAD_PTR ;
-		return 0 ;
-		} ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-				break ;
-
-		case SF_FORMAT_DPCM_8 :
-		case SF_FORMAT_DPCM_16 :
-				break ;
-
-		default :
-			return pdither->write_double (psf, ptr, len) ;
-		} ;
-
-
-	bufferlen = sizeof (pdither->buffer) / sizeof (double) ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (double) len ;
-		writecount /= psf->sf.channels ;
-		writecount *= psf->sf.channels ;
-
-		dither_double (ptr, (double*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-		thiswrite = pdither->write_double (psf, (double*) pdither->buffer, writecount) ;
-		total += thiswrite ;
-		len -= thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dither_write_double */
-
-/*==============================================================================
-*/
-
-static void
-dither_short (const short *in, short *out, int frames, int channels)
-{	int ch, k ;
-
-	for (ch = 0 ; ch < channels ; ch++)
-		for (k = ch ; k < channels * frames ; k += channels)
-			out [k] = in [k] ;
-
-} /* dither_short */
-
-static void
-dither_int (const int *in, int *out, int frames, int channels)
-{	int ch, k ;
-
-	for (ch = 0 ; ch < channels ; ch++)
-		for (k = ch ; k < channels * frames ; k += channels)
-			out [k] = in [k] ;
-
-} /* dither_int */
-
-static void
-dither_float (const float *in, float *out, int frames, int channels)
-{	int ch, k ;
-
-	for (ch = 0 ; ch < channels ; ch++)
-		for (k = ch ; k < channels * frames ; k += channels)
-			out [k] = in [k] ;
-
-} /* dither_float */
-
-static void
-dither_double (const double *in, double *out, int frames, int channels)
-{	int ch, k ;
-
-	for (ch = 0 ; ch < channels ; ch++)
-		for (k = ch ; k < channels * frames ; k += channels)
-			out [k] = in [k] ;
-
-} /* dither_double */
-
-/*==============================================================================
-*/
-#if 0
-
-/*
-** Not made public because this (maybe) requires storage of state information.
-**
-** Also maybe need separate state info for each channel!!!!
-*/
-
-int
-DO_NOT_USE_sf_dither_short (const SF_DITHER_INFO *dither, const short *in, short *out, int frames, int channels)
-{	int ch, k ;
-
-	if (! dither)
-		return SFE_DITHER_BAD_PTR ;
-
-	switch (dither->type & SFD_TYPEMASK)
-	{	case SFD_WHITE :
-		case SFD_TRIANGULAR_PDF :
-				for (ch = 0 ; ch < channels ; ch++)
-					for (k = ch ; k < channels * frames ; k += channels)
-						out [k] = in [k] ;
-				break ;
-
-		default :
-			return SFE_DITHER_BAD_TYPE ;
-		} ;
-
-	return 0 ;
-} /* DO_NOT_USE_sf_dither_short */
-
-int
-DO_NOT_USE_sf_dither_int (const SF_DITHER_INFO *dither, const int *in, int *out, int frames, int channels)
-{	int ch, k ;
-
-	if (! dither)
-		return SFE_DITHER_BAD_PTR ;
-
-	switch (dither->type & SFD_TYPEMASK)
-	{	case SFD_WHITE :
-		case SFD_TRIANGULAR_PDF :
-				for (ch = 0 ; ch < channels ; ch++)
-					for (k = ch ; k < channels * frames ; k += channels)
-						out [k] = in [k] ;
-				break ;
-
-		default :
-			return SFE_DITHER_BAD_TYPE ;
-		} ;
-
-	return 0 ;
-} /* DO_NOT_USE_sf_dither_int */
-
-int
-DO_NOT_USE_sf_dither_float (const SF_DITHER_INFO *dither, const float *in, float *out, int frames, int channels)
-{	int ch, k ;
-
-	if (! dither)
-		return SFE_DITHER_BAD_PTR ;
-
-	switch (dither->type & SFD_TYPEMASK)
-	{	case SFD_WHITE :
-		case SFD_TRIANGULAR_PDF :
-				for (ch = 0 ; ch < channels ; ch++)
-					for (k = ch ; k < channels * frames ; k += channels)
-						out [k] = in [k] ;
-				break ;
-
-		default :
-			return SFE_DITHER_BAD_TYPE ;
-		} ;
-
-	return 0 ;
-} /* DO_NOT_USE_sf_dither_float */
-
-int
-DO_NOT_USE_sf_dither_double (const SF_DITHER_INFO *dither, const double *in, double *out, int frames, int channels)
-{	int ch, k ;
-
-	if (! dither)
-		return SFE_DITHER_BAD_PTR ;
-
-	switch (dither->type & SFD_TYPEMASK)
-	{	case SFD_WHITE :
-		case SFD_TRIANGULAR_PDF :
-				for (ch = 0 ; ch < channels ; ch++)
-					for (k = ch ; k < channels * frames ; k += channels)
-						out [k] = in [k] ;
-				break ;
-
-		default :
-			return SFE_DITHER_BAD_TYPE ;
-		} ;
-
-	return 0 ;
-} /* DO_NOT_USE_sf_dither_double */
-
-#endif
-
diff --git a/libs/libsndfile/src/double64.c b/libs/libsndfile/src/double64.c
deleted file mode 100644
index ce60699e61..0000000000
--- a/libs/libsndfile/src/double64.c
+++ /dev/null
@@ -1,1058 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<limits.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if CPU_IS_LITTLE_ENDIAN
-	#define DOUBLE64_READ	double64_le_read
-	#define DOUBLE64_WRITE	double64_le_write
-#elif CPU_IS_BIG_ENDIAN
-	#define DOUBLE64_READ	double64_be_read
-	#define DOUBLE64_WRITE	double64_be_write
-#endif
-
-/* A 32 number which will not overflow when multiplied by sizeof (double). */
-#define SENSIBLE_LEN	(0x8000000)
-
-/*--------------------------------------------------------------------------------------------
-**	Processor floating point capabilities. double64_get_capability () returns one of the
-**	latter three values.
-*/
-
-enum
-{	DOUBLE_UNKNOWN		= 0x00,
-	DOUBLE_CAN_RW_LE	= 0x23,
-	DOUBLE_CAN_RW_BE	= 0x34,
-	DOUBLE_BROKEN_LE	= 0x45,
-	DOUBLE_BROKEN_BE	= 0x56
-} ;
-
-/*--------------------------------------------------------------------------------------------
-**	Prototypes for private functions.
-*/
-
-static sf_count_t		host_read_d2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t		host_read_d2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t		host_read_d2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t		host_read_d		(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t		host_write_s2d	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t		host_write_i2d	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t		host_write_f2d	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t		host_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void		double64_peak_update	(SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx) ;
-
-static int		double64_get_capability	(SF_PRIVATE *psf) ;
-
-static sf_count_t	replace_read_d2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_d2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_d2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	replace_write_s2d	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_i2d	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_f2d	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static	void	d2bd_read (double *buffer, int count) ;
-static	void	bd2d_write (double *buffer, int count) ;
-
-/*--------------------------------------------------------------------------------------------
-**	Exported functions.
-*/
-
-int
-double64_init	(SF_PRIVATE *psf)
-{	static int double64_caps ;
-
-	double64_caps = double64_get_capability (psf) ;
-
-	psf->blockwidth = sizeof (double) * psf->sf.channels ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	switch (psf->endian + double64_caps)
-		{	case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= host_read_d2s ;
-					psf->read_int		= host_read_d2i ;
-					psf->read_float		= host_read_d2f ;
-					psf->read_double	= host_read_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= host_read_d2s ;
-					psf->read_int		= host_read_d2i ;
-					psf->read_float		= host_read_d2f ;
-					psf->read_double	= host_read_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= host_read_d2s ;
-					psf->read_int		= host_read_d2i ;
-					psf->read_float		= host_read_d2f ;
-					psf->read_double	= host_read_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= host_read_d2s ;
-					psf->read_int		= host_read_d2i ;
-					psf->read_float		= host_read_d2f ;
-					psf->read_double	= host_read_d ;
-					break ;
-
-			/* When the CPU is not IEEE compatible. */
-			case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= replace_read_d2s ;
-					psf->read_int		= replace_read_d2i ;
-					psf->read_float		= replace_read_d2f ;
-					psf->read_double	= replace_read_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= replace_read_d2s ;
-					psf->read_int		= replace_read_d2i ;
-					psf->read_float		= replace_read_d2f ;
-					psf->read_double	= replace_read_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= replace_read_d2s ;
-					psf->read_int		= replace_read_d2i ;
-					psf->read_float		= replace_read_d2f ;
-					psf->read_double	= replace_read_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= replace_read_d2s ;
-					psf->read_int		= replace_read_d2i ;
-					psf->read_float		= replace_read_d2f ;
-					psf->read_double	= replace_read_d ;
-					break ;
-
-			default : break ;
-			} ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	switch (psf->endian + double64_caps)
-		{	case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= host_write_s2d ;
-					psf->write_int		= host_write_i2d ;
-					psf->write_float	= host_write_f2d ;
-					psf->write_double	= host_write_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= host_write_s2d ;
-					psf->write_int		= host_write_i2d ;
-					psf->write_float	= host_write_f2d ;
-					psf->write_double	= host_write_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= host_write_s2d ;
-					psf->write_int		= host_write_i2d ;
-					psf->write_float	= host_write_f2d ;
-					psf->write_double	= host_write_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= host_write_s2d ;
-					psf->write_int		= host_write_i2d ;
-					psf->write_float	= host_write_f2d ;
-					psf->write_double	= host_write_d ;
-					break ;
-
-			/* When the CPU is not IEEE compatible. */
-			case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= replace_write_s2d ;
-					psf->write_int		= replace_write_i2d ;
-					psf->write_float	= replace_write_f2d ;
-					psf->write_double	= replace_write_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= replace_write_s2d ;
-					psf->write_int		= replace_write_i2d ;
-					psf->write_float	= replace_write_f2d ;
-					psf->write_double	= replace_write_d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= replace_write_s2d ;
-					psf->write_int		= replace_write_i2d ;
-					psf->write_float	= replace_write_f2d ;
-					psf->write_double	= replace_write_d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= replace_write_s2d ;
-					psf->write_int		= replace_write_i2d ;
-					psf->write_float	= replace_write_f2d ;
-					psf->write_double	= replace_write_d ;
-					break ;
-
-			default : break ;
-			} ;
-		} ;
-
-	if (psf->filelength > psf->dataoffset)
-	{	psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-		}
-	else
-		psf->datalength = 0 ;
-
-	psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-	return 0 ;
-} /* double64_init */
-
-/*----------------------------------------------------------------------------
-** From : http://www.hpcf.cam.ac.uk/fp_formats.html
-**
-** 64 bit double precision layout (big endian)
-** 	  Sign				bit 0
-** 	  Exponent			bits 1-11
-** 	  Mantissa			bits 12-63
-** 	  Exponent Offset	1023
-**
-**            double             single
-**
-** +INF     7FF0000000000000     7F800000
-** -INF     FFF0000000000000     FF800000
-**  NaN     7FF0000000000001     7F800001
-**                to               to
-**          7FFFFFFFFFFFFFFF     7FFFFFFF
-**                and              and
-**          FFF0000000000001     FF800001
-**                to               to
-**          FFFFFFFFFFFFFFFF     FFFFFFFF
-** +OVER    7FEFFFFFFFFFFFFF     7F7FFFFF
-** -OVER    FFEFFFFFFFFFFFFF     FF7FFFFF
-** +UNDER   0010000000000000     00800000
-** -UNDER   8010000000000000     80800000
-*/
-
-double
-double64_be_read (const unsigned char *cptr)
-{	int		exponent, negative, upper, lower ;
-	double	dvalue ;
-
-	negative = (cptr [0] & 0x80) ? 1 : 0 ;
-	exponent = ((cptr [0] & 0x7F) << 4) | ((cptr [1] >> 4) & 0xF) ;
-
-	/* Might not have a 64 bit long, so load the mantissa into a double. */
-	upper = (((cptr [1] & 0xF) << 24) | (cptr [2] << 16) | (cptr [3] << 8) | cptr [4]) ;
-	lower = (cptr [5] << 16) | (cptr [6] << 8) | cptr [7] ;
-
-	if (exponent == 0 && upper == 0 && lower == 0)
-		return 0.0 ;
-
-	dvalue = upper + lower / ((double) 0x1000000) ;
-	dvalue += 0x10000000 ;
-
-	exponent = exponent - 0x3FF ;
-
-	dvalue = dvalue / ((double) 0x10000000) ;
-
-	if (negative)
-		dvalue *= -1 ;
-
-	if (exponent > 0)
-		dvalue *= pow (2.0, exponent) ;
-	else if (exponent < 0)
-		dvalue /= pow (2.0, abs (exponent)) ;
-
-	return dvalue ;
-} /* double64_be_read */
-
-double
-double64_le_read (const unsigned char *cptr)
-{	int		exponent, negative, upper, lower ;
-	double	dvalue ;
-
-	negative = (cptr [7] & 0x80) ? 1 : 0 ;
-	exponent = ((cptr [7] & 0x7F) << 4) | ((cptr [6] >> 4) & 0xF) ;
-
-	/* Might not have a 64 bit long, so load the mantissa into a double. */
-	upper = ((cptr [6] & 0xF) << 24) | (cptr [5] << 16) | (cptr [4] << 8) | cptr [3] ;
-	lower = (cptr [2] << 16) | (cptr [1] << 8) | cptr [0] ;
-
-	if (exponent == 0 && upper == 0 && lower == 0)
-		return 0.0 ;
-
-	dvalue = upper + lower / ((double) 0x1000000) ;
-	dvalue += 0x10000000 ;
-
-	exponent = exponent - 0x3FF ;
-
-	dvalue = dvalue / ((double) 0x10000000) ;
-
-	if (negative)
-		dvalue *= -1 ;
-
-	if (exponent > 0)
-		dvalue *= pow (2.0, exponent) ;
-	else if (exponent < 0)
-		dvalue /= pow (2.0, abs (exponent)) ;
-
-	return dvalue ;
-} /* double64_le_read */
-
-void
-double64_be_write (double in, unsigned char *out)
-{	int		exponent, mantissa ;
-
-	memset (out, 0, sizeof (double)) ;
-
-	if (fabs (in) < 1e-30)
-		return ;
-
-	if (in < 0.0)
-	{	in *= -1.0 ;
-		out [0] |= 0x80 ;
-		} ;
-
-	in = frexp (in, &exponent) ;
-
-	exponent += 1022 ;
-
-	out [0] |= (exponent >> 4) & 0x7F ;
-	out [1] |= (exponent << 4) & 0xF0 ;
-
-	in *= 0x20000000 ;
-	mantissa = lrint (floor (in)) ;
-
-	out [1] |= (mantissa >> 24) & 0xF ;
-	out [2] = (mantissa >> 16) & 0xFF ;
-	out [3] = (mantissa >> 8) & 0xFF ;
-	out [4] = mantissa & 0xFF ;
-
-	in = fmod (in, 1.0) ;
-	in *= 0x1000000 ;
-	mantissa = lrint (floor (in)) ;
-
-	out [5] = (mantissa >> 16) & 0xFF ;
-	out [6] = (mantissa >> 8) & 0xFF ;
-	out [7] = mantissa & 0xFF ;
-
-	return ;
-} /* double64_be_write */
-
-void
-double64_le_write (double in, unsigned char *out)
-{	int		exponent, mantissa ;
-
-	memset (out, 0, sizeof (double)) ;
-
-	if (fabs (in) < 1e-30)
-		return ;
-
-	if (in < 0.0)
-	{	in *= -1.0 ;
-		out [7] |= 0x80 ;
-		} ;
-
-	in = frexp (in, &exponent) ;
-
-	exponent += 1022 ;
-
-	out [7] |= (exponent >> 4) & 0x7F ;
-	out [6] |= (exponent << 4) & 0xF0 ;
-
-	in *= 0x20000000 ;
-	mantissa = lrint (floor (in)) ;
-
-	out [6] |= (mantissa >> 24) & 0xF ;
-	out [5] = (mantissa >> 16) & 0xFF ;
-	out [4] = (mantissa >> 8) & 0xFF ;
-	out [3] = mantissa & 0xFF ;
-
-	in = fmod (in, 1.0) ;
-	in *= 0x1000000 ;
-	mantissa = lrint (floor (in)) ;
-
-	out [2] = (mantissa >> 16) & 0xFF ;
-	out [1] = (mantissa >> 8) & 0xFF ;
-	out [0] = mantissa & 0xFF ;
-
-	return ;
-} /* double64_le_write */
-
-/*==============================================================================================
-**	Private functions.
-*/
-
-static void
-double64_peak_update	(SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx)
-{	int 	chan ;
-	int		k, position ;
-	float	fmaxval ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	fmaxval = fabs (buffer [chan]) ;
-		position = 0 ;
-		for (k = chan ; k < count ; k += psf->sf.channels)
-			if (fmaxval < fabs (buffer [k]))
-			{	fmaxval = fabs (buffer [k]) ;
-				position = k ;
-				} ;
-
-		if (fmaxval > psf->peak_info->peaks [chan].value)
-		{	psf->peak_info->peaks [chan].value = fmaxval ;
-			psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ;
-			} ;
-		} ;
-
-	return ;
-} /* double64_peak_update */
-
-static int
-double64_get_capability	(SF_PRIVATE *psf)
-{	union
-	{	double			d ;
-		unsigned char	c [8] ;
-	} data ;
-
-	data.d = 1.234567890123456789 ; /* Some abitrary value. */
-
-	if (! psf->ieee_replace)
-	{	/* If this test is true ints and floats are compatible and little endian. */
-		if (data.c [0] == 0xfb && data.c [1] == 0x59 && data.c [2] == 0x8c && data.c [3] == 0x42 &&
-			data.c [4] == 0xca && data.c [5] == 0xc0 && data.c [6] == 0xf3 && data.c [7] == 0x3f)
-			return DOUBLE_CAN_RW_LE ;
-
-		/* If this test is true ints and floats are compatible and big endian. */
-		if (data.c [0] == 0x3f && data.c [1] == 0xf3 && data.c [2] == 0xc0 && data.c [3] == 0xca &&
-			data.c [4] == 0x42 && data.c [5] == 0x8c && data.c [6] == 0x59 && data.c [7] == 0xfb)
-			return DOUBLE_CAN_RW_BE ;
-		} ;
-
-	/* Doubles are broken. Don't expect reading or writing to be fast. */
-	psf_log_printf (psf, "Using IEEE replacement code for double.\n") ;
-
-	return (CPU_IS_LITTLE_ENDIAN) ? DOUBLE_BROKEN_LE : DOUBLE_BROKEN_BE ;
-} /* double64_get_capability */
-
-/*=======================================================================================
-*/
-
-static void
-d2s_array (const double *src, int count, short *dest, double scale)
-{	while (--count >= 0)
-	{	dest [count] = lrint (scale * src [count]) ;
-		} ;
-} /* d2s_array */
-
-static void
-d2s_clip_array (const double *src, int count, short *dest, double scale)
-{	while (--count >= 0)
-	{	double tmp = scale * src [count] ;
-
-		if (CPU_CLIPS_POSITIVE == 0 && tmp > 32767.0)
-			dest [count] = SHRT_MAX ;
-		else if (CPU_CLIPS_NEGATIVE == 0 && tmp < -32768.0)
-			dest [count] = SHRT_MIN ;
-		else
-			dest [count] = lrint (tmp) ;
-		} ;
-} /* d2s_clip_array */
-
-static void
-d2i_array (const double *src, int count, int *dest, double scale)
-{	while (--count >= 0)
-	{	dest [count] = lrint (scale * src [count]) ;
-		} ;
-} /* d2i_array */
-
-static void
-d2i_clip_array (const double *src, int count, int *dest, double scale)
-{	while (--count >= 0)
-	{	float tmp = scale * src [count] ;
-
-		if (CPU_CLIPS_POSITIVE == 0 && tmp > (1.0 * INT_MAX))
-			dest [count] = INT_MAX ;
-		else if (CPU_CLIPS_NEGATIVE == 0 && tmp < (-1.0 * INT_MAX))
-			dest [count] = INT_MIN ;
-		else
-			dest [count] = lrint (tmp) ;
-		} ;
-} /* d2i_clip_array */
-
-static inline void
-d2f_array (const double *src, int count, float *dest)
-{	while (--count >= 0)
-	{	dest [count] = src [count] ;
-		} ;
-} /* d2f_array */
-
-static inline void
-s2d_array (const short *src, double *dest, int count, double scale)
-{	while (--count >= 0)
-	{	dest [count] = scale * src [count] ;
-		} ;
-} /* s2d_array */
-
-static inline void
-i2d_array (const int *src, double *dest, int count, double scale)
-{	while (--count >= 0)
-	{	dest [count] = scale * src [count] ;
-		} ;
-} /* i2d_array */
-
-static inline void
-f2d_array (const float *src, double *dest, int count)
-{	while (--count >= 0)
-	{	dest [count] = src [count] ;
-		} ;
-} /* f2d_array */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-host_read_d2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, int, short *, double) ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	convert = (psf->add_clipping) ? d2s_clip_array : d2s_array ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, readcount) ;
-
-		convert (ubuf.dbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		len -= readcount ;
-		if (readcount < bufferlen)
-			break ;
-		} ;
-
-	return total ;
-} /* host_read_d2s */
-
-static sf_count_t
-host_read_d2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, int, int *, double) ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	convert = (psf->add_clipping) ? d2i_clip_array : d2i_array ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		convert (ubuf.dbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		len -= readcount ;
-		if (readcount < bufferlen)
-			break ;
-		} ;
-
-	return total ;
-} /* host_read_d2i */
-
-static sf_count_t
-host_read_d2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		d2f_array (ubuf.dbuf, readcount, ptr + total) ;
-		total += readcount ;
-		len -= readcount ;
-		if (readcount < bufferlen)
-			break ;
-		} ;
-
-	return total ;
-} /* host_read_d2f */
-
-static sf_count_t
-host_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	int			bufferlen ;
-	sf_count_t	readcount, total = 0 ;
-
-	readcount = psf_fread (ptr, sizeof (double), len, psf) ;
-
-	if (psf->data_endswap != SF_TRUE)
-		return readcount ;
-
-	/* If the read length was sensible, endswap output in one go. */
-	if (readcount < SENSIBLE_LEN)
-	{	endswap_double_array (ptr, readcount) ;
-		return readcount ;
-		} ;
-
-	bufferlen = SENSIBLE_LEN ;
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		endswap_double_array (ptr + total, bufferlen) ;
-
-		total += bufferlen ;
-		len -= bufferlen ;
-		} ;
-
-	return total ;
-} /* host_read_d */
-
-static sf_count_t
-host_write_s2d	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		s2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_s2d */
-
-static sf_count_t
-host_write_i2d	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_i2d */
-
-static sf_count_t
-host_write_f2d	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2d_array (ptr + total, ubuf.dbuf, bufferlen) ;
-
-		if (psf->peak_info)
-			double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_f2d */
-
-static sf_count_t
-host_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (psf->peak_info)
-		double64_peak_update (psf, ptr, len, 0) ;
-
-	if (psf->data_endswap != SF_TRUE)
-		return psf_fwrite (ptr, sizeof (double), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		endswap_double_copy (ubuf.dbuf, ptr + total, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_d */
-
-/*=======================================================================================
-*/
-
-static sf_count_t
-replace_read_d2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		d2bd_read (ubuf.dbuf, bufferlen) ;
-
-		d2s_array (ubuf.dbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_d2s */
-
-static sf_count_t
-replace_read_d2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		d2bd_read (ubuf.dbuf, bufferlen) ;
-
-		d2i_array (ubuf.dbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_d2i */
-
-static sf_count_t
-replace_read_d2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		d2bd_read (ubuf.dbuf, bufferlen) ;
-
-		memcpy (ptr + total, ubuf.dbuf, bufferlen * sizeof (double)) ;
-
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_d2f */
-
-static sf_count_t
-replace_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	/* FIXME : This is probably nowhere near optimal. */
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, readcount) ;
-
-		d2bd_read (ubuf.dbuf, readcount) ;
-
-		memcpy (ptr + total, ubuf.dbuf, readcount * sizeof (double)) ;
-
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_d */
-
-static sf_count_t
-replace_write_s2d	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-		bd2d_write (ubuf.dbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_s2d */
-
-static sf_count_t
-replace_write_i2d	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-		bd2d_write (ubuf.dbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_i2d */
-
-static sf_count_t
-replace_write_f2d	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2d_array (ptr + total, ubuf.dbuf, bufferlen) ;
-
-		bd2d_write (ubuf.dbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_f2d */
-
-static sf_count_t
-replace_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	/* FIXME : This is probably nowhere near optimal. */
-	if (psf->peak_info)
-		double64_peak_update (psf, ptr, len, 0) ;
-
-	bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		memcpy (ubuf.dbuf, ptr + total, bufferlen * sizeof (double)) ;
-
-		bd2d_write (ubuf.dbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_d */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static void
-d2bd_read (double *buffer, int count)
-{	while (--count >= 0)
-	{	buffer [count] = DOUBLE64_READ ((unsigned char *) (buffer + count)) ;
-		} ;
-} /* d2bd_read */
-
-static void
-bd2d_write (double *buffer, int count)
-{	while (--count >= 0)
-	{	DOUBLE64_WRITE (buffer [count], (unsigned char*) (buffer + count)) ;
-		} ;
-} /* bd2d_write */
-
diff --git a/libs/libsndfile/src/dwd.c b/libs/libsndfile/src/dwd.c
deleted file mode 100644
index af4d9f0e41..0000000000
--- a/libs/libsndfile/src/dwd.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-dwd_open	(SF_PRIVATE *psf)
-{	if (psf)
-		return SFE_UNIMPLEMENTED ;
-	return 0 ;
-} /* dwd_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define SFE_DWD_NO_DWD			1666
-#define SFE_DWD_BAND_BIT_WIDTH 	1667
-#define SFE_DWD_COMPRESSION		1668
-
-#define	DWD_IDENTIFIER		"DiamondWare Digitized\n\0\x1a"
-#define	DWD_IDENTIFIER_LEN	24
-
-#define	DWD_HEADER_LEN		57
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	dwd_read_header (SF_PRIVATE *psf) ;
-
-static int	dwd_close		(SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-dwd_open (SF_PRIVATE *psf)
-{	int	error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = dwd_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_DWD)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{
-		/*-psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-			psf->endian = SF_ENDIAN_LITTLE ;
-		else if (psf->endian != SF_ENDIAN_LITTLE)
-			psf->endian = SF_ENDIAN_BIG ;
-
-		if (! (encoding = dwd_write_header (psf, SF_FALSE)))
-			return psf->error ;
-
-		psf->write_header = dwd_write_header ;
-		-*/
-		} ;
-
-	psf->container_close = dwd_close ;
-
-	/*-psf->blockwidth = psf->bytewidth * psf->sf.channels ;-*/
-
-	return error ;
-} /* dwd_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-dwd_close	(SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* dwd_close */
-
-/* This struct contains all the fields of interest om the DWD header, but does not
-** do so in the same order and layout as the actual file, header.
-** No assumptions are made about the packing of this struct.
-*/
-typedef struct
-{	unsigned char major, minor, compression, channels, bitwidth ;
-	unsigned short srate, maxval ;
-	unsigned int id, datalen, frames, offset ;
-} DWD_HEADER ;
-
-static int
-dwd_read_header (SF_PRIVATE *psf)
-{	BUF_UNION	ubuf ;
-	DWD_HEADER	dwdh ;
-
-	memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pb", 0, ubuf.cbuf, DWD_IDENTIFIER_LEN) ;
-
-	if (memcmp (ubuf.cbuf, DWD_IDENTIFIER, DWD_IDENTIFIER_LEN) != 0)
-		return SFE_DWD_NO_DWD ;
-
-	psf_log_printf (psf, "Read only : DiamondWare Digitized (.dwd)\n", ubuf.cbuf) ;
-
-	psf_binheader_readf (psf, "11", &dwdh.major, &dwdh.minor) ;
-	psf_binheader_readf (psf, "e4j1", &dwdh.id, 1, &dwdh.compression) ;
-	psf_binheader_readf (psf, "e211", &dwdh.srate, &dwdh.channels, &dwdh.bitwidth) ;
-	psf_binheader_readf (psf, "e24", &dwdh.maxval, &dwdh.datalen) ;
-	psf_binheader_readf (psf, "e44", &dwdh.frames, &dwdh.offset) ;
-
-	psf_log_printf (psf, "  Version Major : %d\n  Version Minor : %d\n  Unique ID     : %08X\n",
-						dwdh.major, dwdh.minor, dwdh.id) ;
-	psf_log_printf (psf, "  Compression   : %d => ", dwdh.compression) ;
-
-	if (dwdh.compression != 0)
-	{	psf_log_printf (psf, "Unsupported compression\n") ;
-		return SFE_DWD_COMPRESSION ;
-		}
-	else
-		psf_log_printf (psf, "None\n") ;
-
-	psf_log_printf (psf,	"  Sample Rate   : %d\n  Channels      : %d\n"
-							"  Bit Width     : %d\n",
-						dwdh.srate, dwdh.channels, dwdh.bitwidth) ;
-
-	switch (dwdh.bitwidth)
-	{	case 8 :
-				psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_S8 ;
-				psf->bytewidth = 1 ;
-				break ;
-
-		case 16 :
-				psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_16 ;
-				psf->bytewidth = 2 ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "*** Bad bit width %d\n", dwdh.bitwidth) ;
-				return SFE_DWD_BAND_BIT_WIDTH ;
-				} ;
-
-	if (psf->filelength != dwdh.offset + dwdh.datalen)
-	{	psf_log_printf (psf, "  Data Length   : %d (should be %D)\n", dwdh.datalen, psf->filelength - dwdh.offset) ;
-		dwdh.datalen = (unsigned int) (psf->filelength - dwdh.offset) ;
-		}
-	else
-		psf_log_printf (psf, "  Data Length   : %d\n", dwdh.datalen) ;
-
-	psf_log_printf (psf, "  Max Value     : %d\n", dwdh.maxval) ;
-	psf_log_printf (psf, "  Frames        : %d\n", dwdh.frames) ;
-	psf_log_printf (psf, "  Data Offset   : %d\n", dwdh.offset) ;
-
-	psf->datalength = dwdh.datalen ;
-	psf->dataoffset = dwdh.offset ;
-
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-	psf->sf.samplerate = dwdh.srate ;
-	psf->sf.channels = dwdh.channels ;
-	psf->sf.sections = 1 ;
-
-	return pcm_init (psf) ;
-} /* dwd_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-#endif
-
diff --git a/libs/libsndfile/src/dwvw.c b/libs/libsndfile/src/dwvw.c
deleted file mode 100644
index ddf86f63d5..0000000000
--- a/libs/libsndfile/src/dwvw.c
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*===========================================================================
-** Delta Word Variable Width
-**
-** This decoder and encoder were implemented using information found in this
-** document : http://home.swbell.net/rubywand/R011SNDFMTS.TXT
-**
-** According to the document, the algorithm "was invented 1991 by Magnus
-** Lidstrom and is copyright 1993 by NuEdge Development".
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-typedef struct
-{	int		bit_width, dwm_maxsize, max_delta, span ;
-	int		samplecount ;
-	int		bit_count, bits, last_delta_width, last_sample ;
-	struct
-	{	int				index, end ;
-		unsigned char	buffer [256] ;
-	} b ;
-} DWVW_PRIVATE ;
-
-/*============================================================================================
-*/
-
-static sf_count_t dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t	dwvw_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int	dwvw_close		(SF_PRIVATE *psf) ;
-static int	dwvw_byterate	(SF_PRIVATE *psf) ;
-
-static int	dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len) ;
-static int	dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count) ;
-
-static int	dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len) ;
-static void dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits) ;
-static void dwvw_read_reset (DWVW_PRIVATE *pdwvw) ;
-
-/*============================================================================================
-** DWVW initialisation function.
-*/
-
-int
-dwvw_init (SF_PRIVATE *psf, int bitwidth)
-{	DWVW_PRIVATE	*pdwvw ;
-
-	if (psf->codec_data != NULL)
-	{	psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (bitwidth > 24)
-		return SFE_DWVW_BAD_BITWIDTH ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if ((pdwvw = calloc (1, sizeof (DWVW_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = (void*) pdwvw ;
-	pdwvw->bit_width 	= bitwidth ;
-	dwvw_read_reset (pdwvw) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->read_short		= dwvw_read_s ;
-		psf->read_int		= dwvw_read_i ;
-		psf->read_float		= dwvw_read_f ;
-		psf->read_double	= dwvw_read_d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->write_short	= dwvw_write_s ;
-		psf->write_int		= dwvw_write_i ;
-		psf->write_float	= dwvw_write_f ;
-		psf->write_double	= dwvw_write_d ;
-		} ;
-
-	psf->codec_close = dwvw_close ;
-	psf->seek = dwvw_seek ;
-	psf->byterate = dwvw_byterate ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->sf.frames = psf_decode_frame_count (psf) ;
-		dwvw_read_reset (pdwvw) ;
-		} ;
-
-	return 0 ;
-} /* dwvw_init */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static int
-dwvw_close (SF_PRIVATE *psf)
-{	DWVW_PRIVATE *pdwvw ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	static int last_values [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ;
-
-		/* Write 8 zero samples to fully flush output. */
-		dwvw_encode_data (psf, pdwvw, last_values, 12) ;
-
-		/* Write the last buffer worth of data to disk. */
-		psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ;
-
-		if (psf->write_header)
-			psf->write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* dwvw_close */
-
-static sf_count_t
-dwvw_seek	(SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{	DWVW_PRIVATE *pdwvw ;
-
-	if (! psf->codec_data)
-	{	psf->error = SFE_INTERNAL ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	if (offset == 0)
-	{	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		dwvw_read_reset (pdwvw) ;
-		return 0 ;
-		} ;
-
-	psf->error = SFE_BAD_SEEK ;
-	return	PSF_SEEK_ERROR ;
-} /* dwvw_seek */
-
-static int
-dwvw_byterate	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ)
-		return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-	return -1 ;
-} /* dwvw_byterate */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int		*iptr ;
-	int		k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = iptr [k] >> 16 ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_read_s */
-
-static sf_count_t
-dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = dwvw_decode_data (psf, pdwvw, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_read_i */
-
-static sf_count_t
-dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int			*iptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (float) (iptr [k]) ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_read_f */
-
-static sf_count_t
-dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int			*iptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	double 	normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (double) (iptr [k]) ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_read_d */
-
-static int
-dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len)
-{	int	count ;
-	int delta_width_modifier, delta_width, delta_negative, delta, sample ;
-
-	/* Restore state from last decode call. */
-	delta_width = pdwvw->last_delta_width ;
-	sample = pdwvw->last_sample ;
-
-	for (count = 0 ; count < len ; count++)
-	{	/* If bit_count parameter is zero get the delta_width_modifier. */
-		delta_width_modifier = dwvw_decode_load_bits (psf, pdwvw, -1) ;
-
-		/* Check for end of input bit stream. Break loop if end. */
-		if (delta_width_modifier < 0 || (pdwvw->b.end == 0 && count == 0))
-			break ;
-
-		if (delta_width_modifier && dwvw_decode_load_bits (psf, pdwvw, 1))
-			delta_width_modifier = - delta_width_modifier ;
-
-		/* Calculate the current word width. */
-		delta_width = (delta_width + delta_width_modifier + pdwvw->bit_width) % pdwvw->bit_width ;
-
-		/* Load the delta. */
-		delta = 0 ;
-		if (delta_width)
-		{	delta = dwvw_decode_load_bits (psf, pdwvw, delta_width - 1) | (1 << (delta_width - 1)) ;
-			delta_negative = dwvw_decode_load_bits (psf, pdwvw, 1) ;
-			if (delta == pdwvw->max_delta - 1)
-				delta += dwvw_decode_load_bits (psf, pdwvw, 1) ;
-			if (delta_negative)
-				delta = -delta ;
-			} ;
-
-		/* Calculate the sample */
-		sample += delta ;
-
-		if (sample >= pdwvw->max_delta)
-			sample -= pdwvw->span ;
-		else if (sample < - pdwvw->max_delta)
-			sample += pdwvw->span ;
-
-		/* Store the sample justifying to the most significant bit. */
-		ptr [count] = sample << (32 - pdwvw->bit_width) ;
-
-		if (pdwvw->b.end == 0 && pdwvw->bit_count == 0)
-			break ;
-		} ;
-
-	pdwvw->last_delta_width = delta_width ;
-	pdwvw->last_sample = sample ;
-
-	pdwvw->samplecount += count ;
-
-	return count ;
-} /* dwvw_decode_data */
-
-static int
-dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count)
-{	int output = 0, get_dwm = SF_FALSE ;
-
-	/*
-	**	Depending on the value of parameter bit_count, either get the
-	**	required number of bits (ie bit_count > 0) or the
-	**	delta_width_modifier (otherwise).
-	*/
-
-	if (bit_count < 0)
-	{	get_dwm = SF_TRUE ;
-		/* modify bit_count to ensure we have enought bits for finding dwm. */
-		bit_count = pdwvw->dwm_maxsize ;
-		} ;
-
-	/* Load bits in bit reseviour. */
-	while (pdwvw->bit_count < bit_count)
-	{	if (pdwvw->b.index >= pdwvw->b.end)
-		{	pdwvw->b.end = psf_fread (pdwvw->b.buffer, 1, sizeof (pdwvw->b.buffer), psf) ;
-			pdwvw->b.index = 0 ;
-			} ;
-
-		/* Check for end of input stream. */
-		if (bit_count < 8 && pdwvw->b.end == 0)
-			return -1 ;
-
-		pdwvw->bits = (pdwvw->bits << 8) ;
-
-		if (pdwvw->b.index < pdwvw->b.end)
-		{	pdwvw->bits |= pdwvw->b.buffer [pdwvw->b.index] ;
-			pdwvw->b.index ++ ;
-			} ;
-		pdwvw->bit_count += 8 ;
-		} ;
-
-	/* If asked to get bits do so. */
-	if (! get_dwm)
-	{	output = (pdwvw->bits >> (pdwvw->bit_count - bit_count)) & ((1 << bit_count) - 1) ;
-		pdwvw->bit_count -= bit_count ;
-		return output ;
-		} ;
-
-	/* Otherwise must have been asked to get delta_width_modifier. */
-	while (output < (pdwvw->dwm_maxsize))
-	{	pdwvw->bit_count -= 1 ;
-		if (pdwvw->bits & (1 << pdwvw->bit_count))
-			break ;
-		output += 1 ;
-		} ;
-
-	return output ;
-} /* dwvw_decode_load_bits */
-
-static void
-dwvw_read_reset (DWVW_PRIVATE *pdwvw)
-{	int bitwidth = pdwvw->bit_width ;
-
-	memset (pdwvw, 0, sizeof (DWVW_PRIVATE)) ;
-
-	pdwvw->bit_width	= bitwidth ;
-	pdwvw->dwm_maxsize	= bitwidth / 2 ;
-	pdwvw->max_delta	= 1 << (bitwidth - 1) ;
-	pdwvw->span			= 1 << bitwidth ;
-} /* dwvw_read_reset */
-
-static void
-dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits)
-{	int 	byte ;
-
-	/* Shift the bits into the resevoir. */
-	pdwvw->bits = (pdwvw->bits << new_bits) | (data & ((1 << new_bits) - 1)) ;
-	pdwvw->bit_count += new_bits ;
-
-	/* Transfer bit to buffer. */
-	while (pdwvw->bit_count >= 8)
-	{	byte = pdwvw->bits >> (pdwvw->bit_count - 	8) ;
-		pdwvw->bit_count -= 8 ;
-		pdwvw->b.buffer [pdwvw->b.index] = byte & 0xFF ;
-		pdwvw->b.index ++ ;
-		} ;
-
-	if (pdwvw->b.index > SIGNED_SIZEOF (pdwvw->b.buffer) - 4)
-	{	psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ;
-		pdwvw->b.index = 0 ;
-		} ;
-
-	return ;
-} /* dwvw_encode_store_bits */
-
-#if 0
-/* Debigging routine. */
-static void
-dump_bits (DWVW_PRIVATE *pdwvw)
-{	int k, mask ;
-
-	for (k = 0 ; k < 10 && k < pdwvw->b.index ; k++)
-	{	mask = 0x80 ;
-		while (mask)
-		{	putchar (mask & pdwvw->b.buffer [k] ? '1' : '0') ;
-			mask >>= 1 ;
-			} ;
-		putchar (' ') ;
-		}
-
-	for (k = pdwvw->bit_count - 1 ; k >= 0 ; k --)
-		putchar (pdwvw->bits & (1 << k) ? '1' : '0') ;
-
-	putchar ('\n') ;
-} /* dump_bits */
-#endif
-
-#define HIGHEST_BIT(x, count)		\
-			{	int y = x ;			\
-				(count) = 0 ;		\
-				while (y)			\
-				{	(count) ++ ;	\
-					y >>= 1 ;		\
-					} ;				\
-				} ;
-
-static int
-dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len)
-{	int	count ;
-	int delta_width_modifier, delta, delta_negative, delta_width, extra_bit ;
-
-	for (count = 0 ; count < len ; count++)
-	{	delta = (ptr [count] >> (32 - pdwvw->bit_width)) - pdwvw->last_sample ;
-
-		/* Calculate extra_bit if needed. */
-		extra_bit = -1 ;
-		delta_negative = 0 ;
-		if (delta < -pdwvw->max_delta)
-			delta = pdwvw->max_delta + (delta % pdwvw->max_delta) ;
-		else if (delta == -pdwvw->max_delta)
-		{	extra_bit = 1 ;
-			delta_negative = 1 ;
-			delta = pdwvw->max_delta - 1 ;
-			}
-		else if (delta > pdwvw->max_delta)
-		{	delta_negative = 1 ;
-			delta = pdwvw->span - delta ;
-			delta = abs (delta) ;
-			}
-		else if (delta == pdwvw->max_delta)
-		{	extra_bit = 1 ;
-			delta = pdwvw->max_delta - 1 ;
-			}
-		else if (delta < 0)
-		{	delta_negative = 1 ;
-			delta = abs (delta) ;
-			} ;
-
-		if (delta == pdwvw->max_delta - 1 && extra_bit == -1)
-			extra_bit = 0 ;
-
-		/* Find width in bits of delta */
-		HIGHEST_BIT (delta, delta_width) ;
-
-		/* Calculate the delta_width_modifier */
-		delta_width_modifier = (delta_width - pdwvw->last_delta_width) % pdwvw->bit_width ;
-		if (delta_width_modifier > pdwvw->dwm_maxsize)
-			delta_width_modifier -= pdwvw->bit_width ;
-		if (delta_width_modifier < -pdwvw->dwm_maxsize)
-			delta_width_modifier += pdwvw->bit_width ;
-
-		/* Write delta_width_modifier zeros, followed by terminating '1'. */
-		dwvw_encode_store_bits (psf, pdwvw, 0, abs (delta_width_modifier)) ;
-		if (abs (delta_width_modifier) != pdwvw->dwm_maxsize)
-			dwvw_encode_store_bits (psf, pdwvw, 1, 1) ;
-
-		/*  Write delta_width_modifier sign. */
-		if (delta_width_modifier < 0)
-			dwvw_encode_store_bits (psf, pdwvw, 1, 1) ;
-		if (delta_width_modifier > 0)
-			dwvw_encode_store_bits (psf, pdwvw, 0, 1) ;
-
-		/* Write delta and delta sign bit. */
-		if (delta_width)
-		{	dwvw_encode_store_bits (psf, pdwvw, delta, abs (delta_width) - 1) ;
-			dwvw_encode_store_bits (psf, pdwvw, (delta_negative ? 1 : 0), 1) ;
-			} ;
-
-		/* Write extra bit!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-		if (extra_bit >= 0)
-			dwvw_encode_store_bits (psf, pdwvw, extra_bit, 1) ;
-
-		pdwvw->last_sample = ptr [count] >> (32 - pdwvw->bit_width) ;
-		pdwvw->last_delta_width = delta_width ;
-		} ;
-
-	pdwvw->samplecount += count ;
-
-	return count ;
-} /* dwvw_encode_data */
-
-static sf_count_t
-dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int		*iptr ;
-	int		k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = ptr [total + k] << 16 ;
-		count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_write_s */
-
-static sf_count_t
-dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = dwvw_encode_data (psf, pdwvw, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_write_i */
-
-static sf_count_t
-dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int			*iptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_write_f */
-
-static sf_count_t
-dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	DWVW_PRIVATE *pdwvw ;
-	BUF_UNION	ubuf ;
-	int			*iptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* dwvw_write_d */
-
diff --git a/libs/libsndfile/src/file_io.c b/libs/libsndfile/src/file_io.c
deleted file mode 100644
index 26d3d6d6ae..0000000000
--- a/libs/libsndfile/src/file_io.c
+++ /dev/null
@@ -1,1550 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2003 Ross Bencina <rbencina@iprimus.com.au>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	The file is split into three sections as follows:
-**		- The top section (USE_WINDOWS_API == 0) for Linux, Unix and MacOSX
-**			systems (including Cygwin).
-**		- The middle section (USE_WINDOWS_API == 1) for microsoft windows
-**			(including MinGW) using the native windows API.
-**		- A legacy windows section which attempted to work around grevious
-**			bugs in microsoft's POSIX implementation.
-*/
-
-/*
-**	The header file sfconfig.h MUST be included before the others to ensure
-**	that large file support is enabled correctly on Unix systems.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include "sndfile.h"
-#include "common.h"
-
-#define	SENSIBLE_SIZE	(0x40000000)
-
-/*
-**	Neat solution to the Win32/OS2 binary file flage requirement.
-**	If O_BINARY isn't already defined by the inclusion of the system
-**	headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-static void psf_log_syserr (SF_PRIVATE *psf, int error) ;
-
-#if (USE_WINDOWS_API == 0)
-
-/*------------------------------------------------------------------------------
-** Win32 stuff at the bottom of the file. Unix and other sensible OSes here.
-*/
-
-static int psf_close_fd (int fd) ;
-static int psf_open_fd (PSF_FILE * pfile) ;
-static sf_count_t psf_get_filelen_fd (int fd) ;
-
-int
-psf_fopen (SF_PRIVATE *psf)
-{
-	psf->error = 0 ;
-	psf->file.filedes = psf_open_fd (&psf->file) ;
-
-	if (psf->file.filedes == - SFE_BAD_OPEN_MODE)
-	{	psf->error = SFE_BAD_OPEN_MODE ;
-		psf->file.filedes = -1 ;
-		return psf->error ;
-		} ;
-
-	if (psf->file.filedes == -1)
-		psf_log_syserr (psf, errno) ;
-
-	return psf->error ;
-} /* psf_fopen */
-
-int
-psf_fclose (SF_PRIVATE *psf)
-{	int retval ;
-
-	if (psf->virtual_io)
-		return 0 ;
-
-	if (psf->file.do_not_close_descriptor)
-	{	psf->file.filedes = -1 ;
-		return 0 ;
-		} ;
-
-	if ((retval = psf_close_fd (psf->file.filedes)) == -1)
-		psf_log_syserr (psf, errno) ;
-
-	psf->file.filedes = -1 ;
-
-	return retval ;
-} /* psf_fclose */
-
-int
-psf_open_rsrc (SF_PRIVATE *psf)
-{
-	if (psf->rsrc.filedes > 0)
-		return 0 ;
-
-	/* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s/..namedfork/rsrc", psf->file.path.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-	{	psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-		if (psf->rsrclength > 0 || (psf->rsrc.mode & SFM_WRITE))
-			return SFE_NO_ERROR ;
-		psf_close_fd (psf->rsrc.filedes) ;
-		psf->rsrc.filedes = -1 ;
-		} ;
-
-	if (psf->rsrc.filedes == - SFE_BAD_OPEN_MODE)
-	{	psf->error = SFE_BAD_OPEN_MODE ;
-		return psf->error ;
-		} ;
-
-	/*
-	** Now try for a resource fork stored as a separate file in the same
-	** directory, but preceded with a dot underscore.
-	*/
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s._%s", psf->file.dir.c, psf->file.name.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-	{	psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-		return SFE_NO_ERROR ;
-		} ;
-
-	/*
-	** Now try for a resource fork stored in a separate file in the
-	** .AppleDouble/ directory.
-	*/
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s.AppleDouble/%s", psf->file.dir.c, psf->file.name.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-	{	psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-		return SFE_NO_ERROR ;
-		} ;
-
-	/* No resource file found. */
-	if (psf->rsrc.filedes == -1)
-		psf_log_syserr (psf, errno) ;
-
-	psf->rsrc.filedes = -1 ;
-
-	return psf->error ;
-} /* psf_open_rsrc */
-
-sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{	sf_count_t	filelen ;
-
-	if (psf->virtual_io)
-		return psf->vio.get_filelen (psf->vio_user_data) ;
-
-	filelen = psf_get_filelen_fd (psf->file.filedes) ;
-
-	if (filelen == -1)
-	{	psf_log_syserr (psf, errno) ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	if (filelen == -SFE_BAD_STAT_SIZE)
-	{	psf->error = SFE_BAD_STAT_SIZE ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	switch (psf->file.mode)
-	{	case SFM_WRITE :
-			filelen = filelen - psf->fileoffset ;
-			break ;
-
-		case SFM_READ :
-			if (psf->fileoffset > 0 && psf->filelength > 0)
-				filelen = psf->filelength ;
-			break ;
-
-		case SFM_RDWR :
-			/*
-			** Cannot open embedded files SFM_RDWR so we don't need to
-			** subtract psf->fileoffset. We already have the answer we
-			** need.
-			*/
-			break ;
-
-		default :
-			/* Shouldn't be here, so return error. */
-			filelen = -1 ;
-		} ;
-
-	return filelen ;
-} /* psf_get_filelen */
-
-int
-psf_close_rsrc (SF_PRIVATE *psf)
-{	psf_close_fd (psf->rsrc.filedes) ;
-	psf->rsrc.filedes = -1 ;
-	return 0 ;
-} /* psf_close_rsrc */
-
-int
-psf_set_stdio (SF_PRIVATE *psf)
-{	int	error = 0 ;
-
-	switch (psf->file.mode)
-	{	case SFM_RDWR :
-				error = SFE_OPEN_PIPE_RDWR ;
-				break ;
-
-		case SFM_READ :
-				psf->file.filedes = 0 ;
-				break ;
-
-		case SFM_WRITE :
-				psf->file.filedes = 1 ;
-				break ;
-
-		default :
-				error = SFE_BAD_OPEN_MODE ;
-				break ;
-		} ;
-	psf->filelength = 0 ;
-
-	return error ;
-} /* psf_set_stdio */
-
-void
-psf_set_file (SF_PRIVATE *psf, int fd)
-{	psf->file.filedes = fd ;
-} /* psf_set_file */
-
-int
-psf_file_valid (SF_PRIVATE *psf)
-{	return (psf->file.filedes >= 0) ? SF_TRUE : SF_FALSE ;
-} /* psf_set_file */
-
-sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{	sf_count_t	current_pos, new_position ;
-
-	if (psf->virtual_io)
-		return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-	current_pos = psf_ftell (psf) ;
-
-	switch (whence)
-	{	case SEEK_SET :
-				offset += psf->fileoffset ;
-				break ;
-
-		case SEEK_END :
-				if (psf->file.mode == SFM_WRITE)
-				{	new_position = lseek (psf->file.filedes, offset, whence) ;
-
-					if (new_position < 0)
-						psf_log_syserr (psf, errno) ;
-
-					return new_position - psf->fileoffset ;
-					} ;
-
-				/* Transform SEEK_END into a SEEK_SET, ie find the file
-				** length add the requested offset (should be <= 0) to
-				** get the offset wrt the start of file.
-				*/
-				whence = SEEK_SET ;
-				offset = lseek (psf->file.filedes, 0, SEEK_END) + offset ;
-				break ;
-
-		case SEEK_CUR :
-				/* Translate a SEEK_CUR into a SEEK_SET. */
-				offset += current_pos ;
-				whence = SEEK_SET ;
-				break ;
-
-		default :
-				/* We really should not be here. */
-				psf_log_printf (psf, "psf_fseek : whence is %d *****.\n", whence) ;
-				return 0 ;
-		} ;
-
-	if (current_pos != offset)
-		new_position = lseek (psf->file.filedes, offset, whence) ;
-	else
-		new_position = offset ;
-
-	if (new_position < 0)
-		psf_log_syserr (psf, errno) ;
-
-	new_position -= psf->fileoffset ;
-
-	return new_position ;
-} /* psf_fseek */
-
-sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t	count ;
-
-	if (psf->virtual_io)
-		return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the read down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-		count = read (psf->file.filedes, ((char*) ptr) + total, (size_t) count) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	if (psf->is_pipe)
-		psf->pipeoffset += total ;
-
-	return total / bytes ;
-} /* psf_fread */
-
-sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t	count ;
-
-	if (psf->virtual_io)
-		return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the writes down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ;
-
-		count = write (psf->file.filedes, ((const char*) ptr) + total, count) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	if (psf->is_pipe)
-		psf->pipeoffset += total ;
-
-	return total / bytes ;
-} /* psf_fwrite */
-
-sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{	sf_count_t pos ;
-
-	if (psf->virtual_io)
-		return psf->vio.tell (psf->vio_user_data) ;
-
-	if (psf->is_pipe)
-		return psf->pipeoffset ;
-
-	pos = lseek (psf->file.filedes, 0, SEEK_CUR) ;
-
-	if (pos == ((sf_count_t) -1))
-	{	psf_log_syserr (psf, errno) ;
-		return -1 ;
-		} ;
-
-	return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-static int
-psf_close_fd (int fd)
-{	int retval ;
-
-	if (fd < 0)
-		return 0 ;
-
-	while ((retval = close (fd)) == -1 && errno == EINTR)
-		/* Do nothing. */ ;
-
-	return retval ;
-} /* psf_close_fd */
-
-sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{	sf_count_t	k = 0 ;
-	sf_count_t		count ;
-
-	while (k < bufsize - 1)
-	{	count = read (psf->file.filedes, &(buffer [k]), 1) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0 || buffer [k++] == '\n')
-			break ;
-		} ;
-
-	buffer [k] = 0 ;
-
-	return k ;
-} /* psf_fgets */
-
-int
-psf_is_pipe (SF_PRIVATE *psf)
-{	struct stat statbuf ;
-
-	if (psf->virtual_io)
-		return SF_FALSE ;
-
-	if (fstat (psf->file.filedes, &statbuf) == -1)
-	{	psf_log_syserr (psf, errno) ;
-		/* Default to maximum safety. */
-		return SF_TRUE ;
-		} ;
-
-	if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode))
-		return SF_TRUE ;
-
-	return SF_FALSE ;
-} /* psf_is_pipe */
-
-static sf_count_t
-psf_get_filelen_fd (int fd)
-{
-#if (SIZEOF_OFF_T == 4 && SIZEOF_SF_COUNT_T == 8 && HAVE_FSTAT64)
-	struct stat64 statbuf ;
-
-	if (fstat64 (fd, &statbuf) == -1)
-		return (sf_count_t) -1 ;
-
-	return statbuf.st_size ;
-#else
-	struct stat statbuf ;
-
-	if (fstat (fd, &statbuf) == -1)
-		return (sf_count_t) -1 ;
-
-	return statbuf.st_size ;
-#endif
-} /* psf_get_filelen_fd */
-
-int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{	int retval ;
-
-	/* Returns 0 on success, non-zero on failure. */
-	if (len < 0)
-		return -1 ;
-
-	if ((sizeof (off_t) < sizeof (sf_count_t)) && len > 0x7FFFFFFF)
-		return -1 ;
-
-	retval = ftruncate (psf->file.filedes, len) ;
-
-	if (retval == -1)
-		psf_log_syserr (psf, errno) ;
-
-	return retval ;
-} /* psf_ftruncate */
-
-void
-psf_init_files (SF_PRIVATE *psf)
-{	psf->file.filedes = -1 ;
-	psf->rsrc.filedes = -1 ;
-	psf->file.savedes = -1 ;
-} /* psf_init_files */
-
-void
-psf_use_rsrc (SF_PRIVATE *psf, int on_off)
-{
-	if (on_off)
-	{	if (psf->file.filedes != psf->rsrc.filedes)
-		{	psf->file.savedes = psf->file.filedes ;
-			psf->file.filedes = psf->rsrc.filedes ;
-			} ;
-		}
-	else if (psf->file.filedes == psf->rsrc.filedes)
-		psf->file.filedes = psf->file.savedes ;
-
-	return ;
-} /* psf_use_rsrc */
-
-static int
-psf_open_fd (PSF_FILE * pfile)
-{	int fd, oflag, mode ;
-
-	/*
-	** Sanity check. If everything is OK, this test and the printfs will
-	** be optimised out. This is meant to catch the problems caused by
-	** "sfconfig.h" being included after <stdio.h>.
-	*/
-	if (sizeof (sf_count_t) != 8)
-	{	puts ("\n\n*** Fatal error : sizeof (sf_count_t) != 8") ;
-		puts ("*** This means that libsndfile was not configured correctly.\n") ;
-		exit (1) ;
-		} ;
-
-	switch (pfile->mode)
-	{	case SFM_READ :
-				oflag = O_RDONLY | O_BINARY ;
-				mode = 0 ;
-				break ;
-
-		case SFM_WRITE :
-				oflag = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-				mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-				break ;
-
-		case SFM_RDWR :
-				oflag = O_RDWR | O_CREAT | O_BINARY ;
-				mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-				break ;
-
-		default :
-				return - SFE_BAD_OPEN_MODE ;
-				break ;
-		} ;
-
-	if (mode == 0)
-		fd = open (pfile->path.c, oflag) ;
-	else
-		fd = open (pfile->path.c, oflag, mode) ;
-
-	return fd ;
-} /* psf_open_fd */
-
-static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{
-	/* Only log an error if no error has been set yet. */
-	if (psf->error == 0)
-	{	psf->error = SFE_SYSTEM ;
-		snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s.", strerror (error)) ;
-		} ;
-
-	return ;
-} /* psf_log_syserr */
-
-void
-psf_fsync (SF_PRIVATE *psf)
-{
-#if HAVE_FSYNC
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		fsync (psf->file.filedes) ;
-#else
-	psf = NULL ;
-#endif
-} /* psf_fsync */
-
-#elif	USE_WINDOWS_API
-
-/* Win32 file i/o functions implemented using native Win32 API */
-
-#include <windows.h>
-#include <io.h>
-
-static int psf_close_handle (HANDLE handle) ;
-static HANDLE psf_open_handle (PSF_FILE * pfile) ;
-static sf_count_t psf_get_filelen_handle (HANDLE handle) ;
-
-/* USE_WINDOWS_API */ int
-psf_fopen (SF_PRIVATE *psf)
-{
-	psf->error = 0 ;
-	psf->file.handle = psf_open_handle (&psf->file) ;
-
-	if (psf->file.handle == NULL)
-		psf_log_syserr (psf, GetLastError ()) ;
-
-	return psf->error ;
-} /* psf_fopen */
-
-/* USE_WINDOWS_API */ int
-psf_fclose (SF_PRIVATE *psf)
-{	int retval ;
-
-	if (psf->virtual_io)
-		return 0 ;
-
-	if (psf->file.do_not_close_descriptor)
-	{	psf->file.handle = NULL ;
-		return 0 ;
-		} ;
-
-	if ((retval = psf_close_handle (psf->file.handle)) == -1)
-		psf_log_syserr (psf, GetLastError ()) ;
-
-	psf->file.handle = NULL ;
-
-	return retval ;
-} /* psf_fclose */
-
-/* USE_WINDOWS_API */ int
-psf_open_rsrc (SF_PRIVATE *psf)
-{
-	if (psf->rsrc.handle != NULL)
-		return 0 ;
-
-	/* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s/rsrc", psf->file.path.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-	{	psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-		return SFE_NO_ERROR ;
-		} ;
-
-	/*
-	** Now try for a resource fork stored as a separate file in the same
-	** directory, but preceded with a dot underscore.
-	*/
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s._%s", psf->file.dir.c, psf->file.name.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-	{	psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-		return SFE_NO_ERROR ;
-		} ;
-
-	/*
-	** Now try for a resource fork stored in a separate file in the
-	** .AppleDouble/ directory.
-	*/
-	snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s.AppleDouble/%s", psf->file.dir.c, psf->file.name.c) ;
-	psf->error = SFE_NO_ERROR ;
-	if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-	{	psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-		return SFE_NO_ERROR ;
-		} ;
-
-	/* No resource file found. */
-	if (psf->rsrc.handle == NULL)
-		psf_log_syserr (psf, GetLastError ()) ;
-
-	psf->rsrc.handle = NULL ;
-
-	return psf->error ;
-} /* psf_open_rsrc */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{	sf_count_t	filelen ;
-
-	if (psf->virtual_io)
-		return psf->vio.get_filelen (psf->vio_user_data) ;
-
-	filelen = psf_get_filelen_handle (psf->file.handle) ;
-
-	if (filelen == -1)
-	{	psf_log_syserr (psf, errno) ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	if (filelen == -SFE_BAD_STAT_SIZE)
-	{	psf->error = SFE_BAD_STAT_SIZE ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	switch (psf->file.mode)
-	{	case SFM_WRITE :
-			filelen = filelen - psf->fileoffset ;
-			break ;
-
-		case SFM_READ :
-			if (psf->fileoffset > 0 && psf->filelength > 0)
-				filelen = psf->filelength ;
-			break ;
-
-		case SFM_RDWR :
-			/*
-			** Cannot open embedded files SFM_RDWR so we don't need to
-			** subtract psf->fileoffset. We already have the answer we
-			** need.
-			*/
-			break ;
-
-		default :
-			/* Shouldn't be here, so return error. */
-			filelen = -1 ;
-		} ;
-
-	return filelen ;
-} /* psf_get_filelen */
-
-/* USE_WINDOWS_API */ void
-psf_init_files (SF_PRIVATE *psf)
-{	psf->file.handle = NULL ;
-	psf->rsrc.handle = NULL ;
-	psf->file.hsaved = NULL ;
-} /* psf_init_files */
-
-/* USE_WINDOWS_API */ void
-psf_use_rsrc (SF_PRIVATE *psf, int on_off)
-{
-	if (on_off)
-	{	if (psf->file.handle != psf->rsrc.handle)
-		{	psf->file.hsaved = psf->file.handle ;
-			psf->file.handle = psf->rsrc.handle ;
-			} ;
-		}
-	else if (psf->file.handle == psf->rsrc.handle)
-		psf->file.handle = psf->file.hsaved ;
-
-	return ;
-} /* psf_use_rsrc */
-
-/* USE_WINDOWS_API */ static HANDLE
-psf_open_handle (PSF_FILE * pfile)
-{	DWORD dwDesiredAccess ;
-	DWORD dwShareMode ;
-	DWORD dwCreationDistribution ;
-	HANDLE handle ;
-
-	switch (pfile->mode)
-	{	case SFM_READ :
-				dwDesiredAccess = GENERIC_READ ;
-				dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-				dwCreationDistribution = OPEN_EXISTING ;
-				break ;
-
-		case SFM_WRITE :
-				dwDesiredAccess = GENERIC_WRITE ;
-				dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-				dwCreationDistribution = CREATE_ALWAYS ;
-				break ;
-
-		case SFM_RDWR :
-				dwDesiredAccess = GENERIC_READ | GENERIC_WRITE ;
-				dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-				dwCreationDistribution = OPEN_ALWAYS ;
-				break ;
-
-		default :
-				return NULL ;
-		} ;
-
-	if (pfile->use_wchar)
-		handle = CreateFileW (
-					pfile->path.wc,				/* pointer to name of the file */
-					dwDesiredAccess,			/* access (read-write) mode */
-					dwShareMode,				/* share mode */
-					0,							/* pointer to security attributes */
-					dwCreationDistribution,		/* how to create */
-					FILE_ATTRIBUTE_NORMAL,		/* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
-					NULL						/* handle to file with attributes to copy */
-					) ;
-	else
-		handle = CreateFile (
-					pfile->path.c,				/* pointer to name of the file */
-					dwDesiredAccess,			/* access (read-write) mode */
-					dwShareMode,				/* share mode */
-					0,							/* pointer to security attributes */
-					dwCreationDistribution,		/* how to create */
-					FILE_ATTRIBUTE_NORMAL,		/* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
-					NULL						/* handle to file with attributes to copy */
-					) ;
-
-	if (handle == INVALID_HANDLE_VALUE)
-		return NULL ;
-
-	return handle ;
-} /* psf_open_handle */
-
-/* USE_WINDOWS_API */ static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{	LPVOID lpMsgBuf ;
-
-	/* Only log an error if no error has been set yet. */
-	if (psf->error == 0)
-	{	psf->error = SFE_SYSTEM ;
-
-		FormatMessage (
-			FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-			NULL,
-			error,
-			MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-			(LPTSTR) &lpMsgBuf,
-			0,
-			NULL
-			) ;
-
-		snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s", (char*) lpMsgBuf) ;
-		LocalFree (lpMsgBuf) ;
-		} ;
-
-	return ;
-} /* psf_log_syserr */
-
-
-/* USE_WINDOWS_API */ int
-psf_close_rsrc (SF_PRIVATE *psf)
-{	psf_close_handle (psf->rsrc.handle) ;
-	psf->rsrc.handle = NULL ;
-	return 0 ;
-} /* psf_close_rsrc */
-
-
-/* USE_WINDOWS_API */ int
-psf_set_stdio (SF_PRIVATE *psf)
-{	HANDLE	handle = NULL ;
-	int	error = 0 ;
-
-	switch (psf->file.mode)
-	{	case SFM_RDWR :
-				error = SFE_OPEN_PIPE_RDWR ;
-				break ;
-
-		case SFM_READ :
-				handle = GetStdHandle (STD_INPUT_HANDLE) ;
-				psf->file.do_not_close_descriptor = 1 ;
-				break ;
-
-		case SFM_WRITE :
-				handle = GetStdHandle (STD_OUTPUT_HANDLE) ;
-				psf->file.do_not_close_descriptor = 1 ;
-				break ;
-
-		default :
-				error = SFE_BAD_OPEN_MODE ;
-				break ;
-		} ;
-
-	psf->file.handle = handle ;
-	psf->filelength = 0 ;
-
-	return error ;
-} /* psf_set_stdio */
-
-/* USE_WINDOWS_API */ void
-psf_set_file (SF_PRIVATE *psf, int fd)
-{	HANDLE handle ;
-	intptr_t osfhandle ;
-
-	osfhandle = _get_osfhandle (fd) ;
-	handle = (HANDLE) osfhandle ;
-
-	psf->file.handle = handle ;
-} /* psf_set_file */
-
-/* USE_WINDOWS_API */ int
-psf_file_valid (SF_PRIVATE *psf)
-{	if (psf->file.handle == NULL)
-		return SF_FALSE ;
-	if (psf->file.handle == INVALID_HANDLE_VALUE)
-		return SF_FALSE ;
-	return SF_TRUE ;
-} /* psf_set_file */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{	sf_count_t new_position ;
-	LONG lDistanceToMove, lDistanceToMoveHigh ;
-	DWORD dwMoveMethod ;
-	DWORD dwResult, dwError ;
-
-	if (psf->virtual_io)
-		return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-	switch (whence)
-	{	case SEEK_SET :
-				offset += psf->fileoffset ;
-				dwMoveMethod = FILE_BEGIN ;
-				break ;
-
-		case SEEK_END :
-				dwMoveMethod = FILE_END ;
-				break ;
-
-		default :
-				dwMoveMethod = FILE_CURRENT ;
-				break ;
-		} ;
-
-	lDistanceToMove = (DWORD) (offset & 0xFFFFFFFF) ;
-	lDistanceToMoveHigh = (DWORD) ((offset >> 32) & 0xFFFFFFFF) ;
-
-	dwResult = SetFilePointer (psf->file.handle, lDistanceToMove, &lDistanceToMoveHigh, dwMoveMethod) ;
-
-	if (dwResult == 0xFFFFFFFF)
-		dwError = GetLastError () ;
-	else
-		dwError = NO_ERROR ;
-
-	if (dwError != NO_ERROR)
-	{	psf_log_syserr (psf, dwError) ;
-		return -1 ;
-		} ;
-
-	new_position = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) - psf->fileoffset ;
-
-	return new_position ;
-} /* psf_fseek */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t count ;
-	DWORD dwNumberOfBytesRead ;
-
-	if (psf->virtual_io)
-		return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the writes down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-		if (ReadFile (psf->file.handle, ((char*) ptr) + total, count, &dwNumberOfBytesRead, 0) == 0)
-		{	psf_log_syserr (psf, GetLastError ()) ;
-			break ;
-			}
-		else
-			count = dwNumberOfBytesRead ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	if (psf->is_pipe)
-		psf->pipeoffset += total ;
-
-	return total / bytes ;
-} /* psf_fread */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t	count ;
-	DWORD dwNumberOfBytesWritten ;
-
-	if (psf->virtual_io)
-		return psf->vio.write (ptr, bytes * items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the writes down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-		if (WriteFile (psf->file.handle, ((const char*) ptr) + total, count, &dwNumberOfBytesWritten, 0) == 0)
-		{	psf_log_syserr (psf, GetLastError ()) ;
-			break ;
-			}
-		else
-			count = dwNumberOfBytesWritten ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	if (psf->is_pipe)
-		psf->pipeoffset += total ;
-
-	return total / bytes ;
-} /* psf_fwrite */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{	sf_count_t pos ;
-	LONG lDistanceToMoveLow, lDistanceToMoveHigh ;
-	DWORD dwResult, dwError ;
-
-	if (psf->virtual_io)
-		return psf->vio.tell (psf->vio_user_data) ;
-
-	if (psf->is_pipe)
-		return psf->pipeoffset ;
-
-	lDistanceToMoveLow = 0 ;
-	lDistanceToMoveHigh = 0 ;
-
-	dwResult = SetFilePointer (psf->file.handle, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_CURRENT) ;
-
-	if (dwResult == 0xFFFFFFFF)
-		dwError = GetLastError () ;
-	else
-		dwError = NO_ERROR ;
-
-	if (dwError != NO_ERROR)
-	{	psf_log_syserr (psf, dwError) ;
-		return -1 ;
-		} ;
-
-	pos = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) ;
-
-	return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-/* USE_WINDOWS_API */ static int
-psf_close_handle (HANDLE handle)
-{	if (handle == NULL)
-		return 0 ;
-
-	if (CloseHandle (handle) == 0)
-		return -1 ;
-
-	return 0 ;
-} /* psf_close_handle */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{	sf_count_t k = 0 ;
-	sf_count_t count ;
-	DWORD dwNumberOfBytesRead ;
-
-	while (k < bufsize - 1)
-	{	if (ReadFile (psf->file.handle, &(buffer [k]), 1, &dwNumberOfBytesRead, 0) == 0)
-		{	psf_log_syserr (psf, GetLastError ()) ;
-			break ;
-			}
-		else
-		{	count = dwNumberOfBytesRead ;
-			/* note that we only check for '\n' not other line endings such as CRLF */
-			if (count == 0 || buffer [k++] == '\n')
-				break ;
-			} ;
-		} ;
-
-	buffer [k] = 0 ;
-
-	return k ;
-} /* psf_fgets */
-
-/* USE_WINDOWS_API */ int
-psf_is_pipe (SF_PRIVATE *psf)
-{
-	if (psf->virtual_io)
-		return SF_FALSE ;
-
-	if (GetFileType (psf->file.handle) == FILE_TYPE_DISK)
-		return SF_FALSE ;
-
-	/* Default to maximum safety. */
-	return SF_TRUE ;
-} /* psf_is_pipe */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_get_filelen_handle (HANDLE handle)
-{	sf_count_t filelen ;
-	DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ;
-
-	dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ;
-
-	if (dwFileSizeLow == 0xFFFFFFFF)
-		dwError = GetLastError () ;
-
-	if (dwError != NO_ERROR)
-		return (sf_count_t) -1 ;
-
-	filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ;
-
-	return filelen ;
-} /* psf_get_filelen_handle */
-
-/* USE_WINDOWS_API */ void
-psf_fsync (SF_PRIVATE *psf)
-{	FlushFileBuffers (psf->file.handle) ;
-} /* psf_fsync */
-
-
-/* USE_WINDOWS_API */ int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{	int retval = 0 ;
-	LONG lDistanceToMoveLow, lDistanceToMoveHigh ;
-	DWORD dwResult, dwError = NO_ERROR ;
-
-	/* This implementation trashes the current file position.
-	** should it save and restore it? what if the current position is past
-	** the new end of file?
-	*/
-
-	/* Returns 0 on success, non-zero on failure. */
-	if (len < 0)
-		return 1 ;
-
-	lDistanceToMoveLow = (DWORD) (len & 0xFFFFFFFF) ;
-	lDistanceToMoveHigh = (DWORD) ((len >> 32) & 0xFFFFFFFF) ;
-
-	dwResult = SetFilePointer (psf->file.handle, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_BEGIN) ;
-
-	if (dwResult == 0xFFFFFFFF)
-		dwError = GetLastError () ;
-
-	if (dwError != NO_ERROR)
-	{	retval = -1 ;
-		psf_log_syserr (psf, dwError) ;
-		}
-	else
-	{	/* Note: when SetEndOfFile is used to extend a file, the contents of the
-		** new portion of the file is undefined. This is unlike chsize(),
-		** which guarantees that the new portion of the file will be zeroed.
-		** Not sure if this is important or not.
-		*/
-		if (SetEndOfFile (psf->file.handle) == 0)
-		{	retval = -1 ;
-			psf_log_syserr (psf, GetLastError ()) ;
-			} ;
-		} ;
-
-	return retval ;
-} /* psf_ftruncate */
-
-
-#else
-/* Win32 file i/o functions implemented using Unix-style file i/o API */
-
-/* Win32 has a 64 file offset seek function:
-**
-**		__int64 _lseeki64 (int handle, __int64 offset, int origin) ;
-**
-** It also has a 64 bit fstat function:
-**
-**		int fstati64 (int, struct _stati64) ;
-**
-** but the fscking thing doesn't work!!!!! The file size parameter returned
-** by this function is only valid up until more data is written at the end of
-** the file. That makes this function completely 100% useless.
-*/
-
-#include <io.h>
-#include <direct.h>
-
-/* Win32 */ int
-psf_fopen (SF_PRIVATE *psf, const char *pathname, int open_mode)
-{	int oflag, mode ;
-
-	switch (open_mode)
-	{	case SFM_READ :
-				oflag = O_RDONLY | O_BINARY ;
-				mode = 0 ;
-				break ;
-
-		case SFM_WRITE :
-				oflag = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-				mode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-
-		case SFM_RDWR :
-				oflag = O_RDWR | O_CREAT | O_BINARY ;
-				mode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-
-		default :
-				psf->error = SFE_BAD_OPEN_MODE ;
-				return -1 ;
-				break ;
-		} ;
-
-	if (mode == 0)
-		psf->file.filedes = open (pathname, oflag) ;
-	else
-		psf->file.filedes = open (pathname, oflag, mode) ;
-
-	if (psf->file.filedes == -1)
-		psf_log_syserr (psf, errno) ;
-
-	return psf->file.filedes ;
-} /* psf_fopen */
-
-/* Win32 */ sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{	sf_count_t	new_position ;
-
-	if (psf->virtual_io)
-		return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-	switch (whence)
-	{	case SEEK_SET :
-				offset += psf->fileoffset ;
-				break ;
-
-		case SEEK_END :
-				if (psf->file.mode == SFM_WRITE)
-				{	new_position = _lseeki64 (psf->file.filedes, offset, whence) ;
-
-					if (new_position < 0)
-						psf_log_syserr (psf, errno) ;
-
-					return new_position - psf->fileoffset ;
-					} ;
-
-				/* Transform SEEK_END into a SEEK_SET, ie find the file
-				** length add the requested offset (should be <= 0) to
-				** get the offset wrt the start of file.
-				*/
-				whence = SEEK_SET ;
-				offset = _lseeki64 (psf->file.filedes, 0, SEEK_END) + offset ;
-				break ;
-
-		default :
-				/* No need to do anything about SEEK_CUR. */
-				break ;
-		} ;
-
-	/*
-	** Bypass weird Win32-ism if necessary.
-	** _lseeki64() returns an "invalid parameter" error if called with the
-	** offset == 0 and whence == SEEK_CUR.
-	*** Use the _telli64() function instead.
-	*/
-	if (offset == 0 && whence == SEEK_CUR)
-		new_position = _telli64 (psf->file.filedes) ;
-	else
-		new_position = _lseeki64 (psf->file.filedes, offset, whence) ;
-
-	if (new_position < 0)
-		psf_log_syserr (psf, errno) ;
-
-	new_position -= psf->fileoffset ;
-
-	return new_position ;
-} /* psf_fseek */
-
-/* Win32 */ sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t	count ;
-
-	if (psf->virtual_io)
-		return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the writes down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-		count = read (psf->file.filedes, ((char*) ptr) + total, (size_t) count) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	return total / bytes ;
-} /* psf_fread */
-
-/* Win32 */ sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{	sf_count_t total = 0 ;
-	ssize_t	count ;
-
-	if (psf->virtual_io)
-		return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-	items *= bytes ;
-
-	/* Do this check after the multiplication above. */
-	if (items <= 0)
-		return 0 ;
-
-	while (items > 0)
-	{	/* Break the writes down to a sensible size. */
-		count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ;
-
-		count = write (psf->file.filedes, ((const char*) ptr) + total, count) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0)
-			break ;
-
-		total += count ;
-		items -= count ;
-		} ;
-
-	return total / bytes ;
-} /* psf_fwrite */
-
-/* Win32 */ sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{	sf_count_t pos ;
-
-	if (psf->virtual_io)
-		return psf->vio.tell (psf->vio_user_data) ;
-
-	pos = _telli64 (psf->file.filedes) ;
-
-	if (pos == ((sf_count_t) -1))
-	{	psf_log_syserr (psf, errno) ;
-		return -1 ;
-		} ;
-
-	return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-/* Win32 */ int
-psf_fclose (SF_PRIVATE *psf)
-{	int retval ;
-
-	while ((retval = close (psf->file.filedes)) == -1 && errno == EINTR)
-		/* Do nothing. */ ;
-
-	if (retval == -1)
-		psf_log_syserr (psf, errno) ;
-
-	psf->file.filedes = -1 ;
-
-	return retval ;
-} /* psf_fclose */
-
-/* Win32 */ sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{	sf_count_t	k = 0 ;
-	sf_count_t	count ;
-
-	while (k < bufsize - 1)
-	{	count = read (psf->file.filedes, &(buffer [k]), 1) ;
-
-		if (count == -1)
-		{	if (errno == EINTR)
-				continue ;
-
-			psf_log_syserr (psf, errno) ;
-			break ;
-			} ;
-
-		if (count == 0 || buffer [k++] == '\n')
-			break ;
-		} ;
-
-	buffer [k] = 0 ;
-
-	return k ;
-} /* psf_fgets */
-
-/* Win32 */ int
-psf_is_pipe (SF_PRIVATE *psf)
-{	struct stat statbuf ;
-
-	if (psf->virtual_io)
-		return SF_FALSE ;
-
-	/* Not sure if this works. */
-	if (fstat (psf->file.filedes, &statbuf) == -1)
-	{	psf_log_syserr (psf, errno) ;
-		/* Default to maximum safety. */
-		return SF_TRUE ;
-		} ;
-
-	/* These macros are defined in Win32/unistd.h. */
-	if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode))
-		return SF_TRUE ;
-
-	return SF_FALSE ;
-} /* psf_checkpipe */
-
-/* Win32 */ sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{
-#if 0
-	/*
-	** Windoze is SOOOOO FUCKED!!!!!!!
-	** This code should work but doesn't. Why?
-	** Code below does work.
-	*/
-	struct _stati64 statbuf ;
-
-	if (_fstati64 (psf->file.filedes, &statbuf))
-	{	psf_log_syserr (psf, errno) ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	return statbuf.st_size ;
-#else
-	sf_count_t current, filelen ;
-
-	if (psf->virtual_io)
-		return psf->vio.get_filelen (psf->vio_user_data) ;
-
-	if ((current = _telli64 (psf->file.filedes)) < 0)
-	{	psf_log_syserr (psf, errno) ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	/*
-	** Lets face it, windoze if FUBAR!!!
-	**
-	** For some reason, I have to call _lseeki64() TWICE to get to the
-	** end of the file.
-	**
-	** This might have been avoided if windows had implemented the POSIX
-	** standard function fsync() but NO, that would have been too easy.
-	**
-	** I am VERY close to saying that windoze will no longer be supported
-	** by libsndfile and changing the license to GPL at the same time.
-	*/
-
-	_lseeki64 (psf->file.filedes, 0, SEEK_END) ;
-
-	if ((filelen = _lseeki64 (psf->file.filedes, 0, SEEK_END)) < 0)
-	{	psf_log_syserr (psf, errno) ;
-		return (sf_count_t) -1 ;
-		} ;
-
-	if (filelen > current)
-		_lseeki64 (psf->file.filedes, current, SEEK_SET) ;
-
-	switch (psf->file.mode)
-	{	case SFM_WRITE :
-			filelen = filelen - psf->fileoffset ;
-			break ;
-
-		case SFM_READ :
-			if (psf->fileoffset > 0 && psf->filelength > 0)
-				filelen = psf->filelength ;
-			break ;
-
-		case SFM_RDWR :
-			/*
-			** Cannot open embedded files SFM_RDWR so we don't need to
-			** subtract psf->fileoffset. We already have the answer we
-			** need.
-			*/
-			break ;
-
-		default :
-			filelen = 0 ;
-		} ;
-
-	return filelen ;
-#endif
-} /* psf_get_filelen */
-
-/* Win32 */ int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{	int retval ;
-
-	/* Returns 0 on success, non-zero on failure. */
-	if (len < 0)
-		return 1 ;
-
-	/* The global village idiots at micorsoft decided to implement
-	** nearly all the required 64 bit file offset functions except
-	** for one, truncate. The fscking morons!
-	**
-	** This is not 64 bit file offset clean. Somone needs to clean
-	** this up.
-	*/
-	if (len > 0x7FFFFFFF)
-		return -1 ;
-
-	retval = chsize (psf->file.filedes, len) ;
-
-	if (retval == -1)
-		psf_log_syserr (psf, errno) ;
-
-	return retval ;
-} /* psf_ftruncate */
-
-
-static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{
-	/* Only log an error if no error has been set yet. */
-	if (psf->error == 0)
-	{	psf->error = SFE_SYSTEM ;
-		snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s", strerror (error)) ;
-		} ;
-
-	return ;
-} /* psf_log_syserr */
-
-#endif
-
diff --git a/libs/libsndfile/src/flac.c b/libs/libsndfile/src/flac.c
deleted file mode 100644
index bb74e94bc0..0000000000
--- a/libs/libsndfile/src/flac.c
+++ /dev/null
@@ -1,1385 +0,0 @@
-/*
-** Copyright (C) 2004-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004 Tobias Gehrig <tgehrig@ira.uka.de>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include	<FLAC/stream_decoder.h>
-#include	<FLAC/stream_encoder.h>
-#include	<FLAC/metadata.h>
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-#define	FLAC_DEFAULT_COMPRESSION_LEVEL	5
-
-#define ENC_BUFFER_SIZE 8192
-
-typedef enum
-{	PFLAC_PCM_SHORT = 50,
-	PFLAC_PCM_INT = 51,
-	PFLAC_PCM_FLOAT = 52,
-	PFLAC_PCM_DOUBLE = 53
-} PFLAC_PCM ;
-
-typedef struct
-{
-	FLAC__StreamDecoder *fsd ;
-	FLAC__StreamEncoder *fse ;
-
-	PFLAC_PCM pcmtype ;
-	void* ptr ;
-	unsigned pos, len, remain ;
-
-	FLAC__StreamMetadata *metadata ;
-
-	const FLAC__int32 * const * wbuffer ;
-	FLAC__int32 * rbuffer [FLAC__MAX_CHANNELS] ;
-
-	FLAC__int32* encbuffer ;
-	unsigned bufferpos ;
-
-	const FLAC__Frame *frame ;
-	FLAC__bool bufferbackup ;
-
-	unsigned compression ;
-} FLAC_PRIVATE ;
-
-typedef struct
-{	const char *tag ;
-	int type ;
-} FLAC_TAG ;
-
-static sf_count_t	flac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int			flac_byterate (SF_PRIVATE *psf) ;
-static int			flac_close (SF_PRIVATE *psf) ;
-
-static int			flac_enc_init (SF_PRIVATE *psf) ;
-static int			flac_read_header (SF_PRIVATE *psf) ;
-
-static sf_count_t	flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void		f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void		d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-
-static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-
-/* Decoder Callbacks */
-static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], size_t *bytes, void *client_data) ;
-static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
-static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
-static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ;
-static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ;
-static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
-static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
-static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
-
-/* Encoder Callbacks */
-static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
-static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
-static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) ;
-
-static void
-s2flac8_array (const short *src, FLAC__int32 *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] >> 8 ;
-} /* s2flac8_array */
-
-static void
-s2flac16_array (const short *src, FLAC__int32 *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] ;
-} /* s2flac16_array */
-
-static void
-s2flac24_array (const short *src, FLAC__int32 *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] << 8 ;
-} /* s2flac24_array */
-
-static void
-i2flac8_array (const int *src, FLAC__int32 *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] >> 24 ;
-} /* i2flac8_array */
-
-static void
-i2flac16_array (const int *src, FLAC__int32 *dest, int count)
-{
-	while (--count >= 0)
-		dest [count] = src [count] >> 16 ;
-} /* i2flac16_array */
-
-static void
-i2flac24_array (const int *src, FLAC__int32 *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] >> 8 ;
-} /* i2flac24_array */
-
-static sf_count_t
-flac_buffer_copy (SF_PRIVATE *psf)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	const FLAC__Frame *frame = pflac->frame ;
-	const FLAC__int32* const *buffer = pflac->wbuffer ;
-	unsigned i = 0, j, offset ;
-
-	/*
-	**	frame->header.blocksize is variable and we're using a constant blocksize
-	**	of FLAC__MAX_BLOCK_SIZE.
-	**	Check our assumptions here.
-	*/
-	if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE)
-	{	psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ;
-		psf->error = SFE_INTERNAL ;
-		return 0 ;
-		} ;
-
-	if (pflac->ptr == NULL)
-	{	/*
-		**	Not sure why this code is here and not elsewhere.
-		**	Removing it causes valgrind errors.
-		*/
-		pflac->bufferbackup = SF_TRUE ;
-		for (i = 0 ; i < frame->header.channels ; i++)
-		{
-			if (pflac->rbuffer [i] == NULL)
-				pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ;
-
-			memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ;
-			} ;
-		pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ;
-
-		return 0 ;
-		} ;
-
-	switch (pflac->pcmtype)
-	{	case PFLAC_PCM_SHORT :
-			{	short *retpcm = (short*) pflac->ptr ;
-				int shift = 16 - frame->header.bits_per_sample ;
-				if (shift < 0)
-				{	shift = abs (shift) ;
-					for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-					{	offset = pflac->pos + i * frame->header.channels ;
-
-						if (pflac->bufferpos >= frame->header.blocksize)
-							break ;
-
-						for (j = 0 ; j < frame->header.channels ; j++)
-							retpcm [offset + j] = buffer [j][pflac->bufferpos] >> shift ;
-						pflac->remain -= frame->header.channels ;
-						pflac->bufferpos++ ;
-						}
-					}
-				else
-				{	for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-					{	offset = pflac->pos + i * frame->header.channels ;
-
-						if (pflac->bufferpos >= frame->header.blocksize)
-							break ;
-
-						for (j = 0 ; j < frame->header.channels ; j++)
-							retpcm [offset + j] = (buffer [j][pflac->bufferpos]) << shift ;
-
-						pflac->remain -= frame->header.channels ;
-						pflac->bufferpos++ ;
-						} ;
-					} ;
-				} ;
-			break ;
-
-		case PFLAC_PCM_INT :
-			{	int *retpcm = (int*) pflac->ptr ;
-				int shift = 32 - frame->header.bits_per_sample ;
-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-				{	offset = pflac->pos + i * frame->header.channels ;
-
-					if (pflac->bufferpos >= frame->header.blocksize)
-						break ;
-
-					for (j = 0 ; j < frame->header.channels ; j++)
-						retpcm [offset + j] = buffer [j][pflac->bufferpos] << shift ;
-					pflac->remain -= frame->header.channels ;
-					pflac->bufferpos++ ;
-					} ;
-				} ;
-			break ;
-
-		case PFLAC_PCM_FLOAT :
-			{	float *retpcm = (float*) pflac->ptr ;
-				float norm = (psf->norm_float == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
-
-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-				{	offset = pflac->pos + i * frame->header.channels ;
-
-					if (pflac->bufferpos >= frame->header.blocksize)
-						break ;
-
-					for (j = 0 ; j < frame->header.channels ; j++)
-						retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
-					pflac->remain -= frame->header.channels ;
-					pflac->bufferpos++ ;
-					} ;
-				} ;
-			break ;
-
-		case PFLAC_PCM_DOUBLE :
-			{	double *retpcm = (double*) pflac->ptr ;
-				double norm = (psf->norm_double == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
-
-				for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-				{	offset = pflac->pos + i * frame->header.channels ;
-
-					if (pflac->bufferpos >= frame->header.blocksize)
-						break ;
-
-					for (j = 0 ; j < frame->header.channels ; j++)
-						retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
-					pflac->remain -= frame->header.channels ;
-					pflac->bufferpos++ ;
-					} ;
-				} ;
-			break ;
-
-		default :
-			return 0 ;
-		} ;
-
-	offset = i * frame->header.channels ;
-	pflac->pos += i * frame->header.channels ;
-
-	return offset ;
-} /* flac_buffer_copy */
-
-
-static FLAC__StreamDecoderReadStatus
-sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], size_t *bytes, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	*bytes = psf_fread (buffer, 1, *bytes, psf) ;
-	if (*bytes > 0 && psf->error == 0)
-		return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ;
-
-	return FLAC__STREAM_DECODER_READ_STATUS_ABORT ;
-} /* sf_flac_read_callback */
-
-static FLAC__StreamDecoderSeekStatus
-sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
-	if (psf->error)
-		return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ;
-
-	return FLAC__STREAM_DECODER_SEEK_STATUS_OK ;
-} /* sf_flac_seek_callback */
-
-static FLAC__StreamDecoderTellStatus
-sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	*absolute_byte_offset = psf_ftell (psf) ;
-	if (psf->error)
-		return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ;
-
-	return FLAC__STREAM_DECODER_TELL_STATUS_OK ;
-} /* sf_flac_tell_callback */
-
-static FLAC__StreamDecoderLengthStatus
-sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	if ((*stream_length = psf->filelength) == 0)
-		return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ;
-
-	return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ;
-} /* sf_flac_length_callback */
-
-static FLAC__bool
-sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	if (psf_ftell (psf) == psf->filelength)
-		return SF_TRUE ;
-
-	return SF_FALSE ;
-} /* sf_flac_eof_callback */
-
-static FLAC__StreamDecoderWriteStatus
-sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-	pflac->frame = frame ;
-	pflac->bufferpos = 0 ;
-
-	pflac->bufferbackup = SF_FALSE ;
-	pflac->wbuffer = buffer ;
-
-	flac_buffer_copy (psf) ;
-
-	return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE ;
-} /* sf_flac_write_callback */
-
-static void
-sf_flac_meta_get_vorbiscomments (SF_PRIVATE *psf, const FLAC__StreamMetadata *metadata)
-{	FLAC_TAG tags [] =
-	{ 	{ "title", SF_STR_TITLE },
-		{ "copyright", SF_STR_COPYRIGHT },
-		{ "software", SF_STR_SOFTWARE },
-		{ "artist", SF_STR_ARTIST },
-		{ "comment", SF_STR_COMMENT },
-		{ "date", SF_STR_DATE },
-		{ "album", SF_STR_ALBUM },
-		{ "license", SF_STR_LICENSE },
-		{ "tracknumber", SF_STR_TRACKNUMBER },
-		{ "genre", SF_STR_GENRE }
-		} ;
-
-	const char *value, *cptr ;
-	int k, tag_num ;
-
-	for (k = 0 ; k < ARRAY_LEN (tags) ; k++)
-	{	tag_num = FLAC__metadata_object_vorbiscomment_find_entry_from (metadata, 0, tags [k].tag) ;
-
-		if (tag_num < 0)
-			continue ;
-
-		value = (const char*) metadata->data.vorbis_comment.comments [tag_num].entry ;
-		if ((cptr = strchr (value, '=')) != NULL)
-			value = cptr + 1 ;
-
-		psf_log_printf (psf, "  %-10s : %s\n", tags [k].tag, value) ;
-		psf_store_string (psf, tags [k].type, value) ;
-		} ;
-
-	return ;
-} /* sf_flac_meta_get_vorbiscomments */
-
-static void
-sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-	int bitwidth = 0 ;
-
-	switch (metadata->type)
-	{	case FLAC__METADATA_TYPE_STREAMINFO :
-			psf->sf.channels = metadata->data.stream_info.channels ;
-			psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
-			psf->sf.frames = metadata->data.stream_info.total_samples ;
-
-			psf_log_printf (psf, "FLAC Stream Metadata\n  Channels    : %d\n  Sample rate : %d\n", psf->sf.channels, psf->sf.samplerate) ;
-
-			if (psf->sf.frames == 0)
-			{	psf_log_printf (psf, "  Frames      : 0 (bumping to SF_COUNT_MAX)\n") ;
-				psf->sf.frames = SF_COUNT_MAX ;
-				}
-			else
-				psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-
-			switch (metadata->data.stream_info.bits_per_sample)
-			{	case 8 :
-					psf->sf.format |= SF_FORMAT_PCM_S8 ;
-					bitwidth = 8 ;
-					break ;
-				case 16 :
-					psf->sf.format |= SF_FORMAT_PCM_16 ;
-					bitwidth = 16 ;
-					break ;
-				case 24 :
-					psf->sf.format |= SF_FORMAT_PCM_24 ;
-					bitwidth = 24 ;
-					break ;
-				default :
-					psf_log_printf (psf, "sf_flac_meta_callback : bits_per_sample %d not yet implemented.\n", metadata->data.stream_info.bits_per_sample) ;
-					break ;
-				} ;
-
-			if (bitwidth > 0)
-				psf_log_printf (psf, "  Bit width   : %d\n", bitwidth) ;
-			break ;
-
-		case FLAC__METADATA_TYPE_VORBIS_COMMENT :
-			psf_log_printf (psf, "Vorbis Comment Metadata\n") ;
-			sf_flac_meta_get_vorbiscomments (psf, metadata) ;
-			break ;
-
-		case FLAC__METADATA_TYPE_PADDING :
-			psf_log_printf (psf, "Padding Metadata\n") ;
-			break ;
-
-		case FLAC__METADATA_TYPE_APPLICATION :
-			psf_log_printf (psf, "Application Metadata\n") ;
-			break ;
-
-		case FLAC__METADATA_TYPE_SEEKTABLE :
-			psf_log_printf (psf, "Seektable Metadata\n") ;
-			break ;
-
-		case FLAC__METADATA_TYPE_CUESHEET :
-			psf_log_printf (psf, "Cuesheet Metadata\n") ;
-			break ;
-
-		case FLAC__METADATA_TYPE_PICTURE :
-			psf_log_printf (psf, "Picture Metadata\n") ;
-			break ;
-
-		case FLAC__METADATA_TYPE_UNDEFINED :
-			psf_log_printf (psf, "Undefined Metadata\n") ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ;
-			break ;
-		} ;
-
-	return ;
-} /* sf_flac_meta_callback */
-
-static void
-sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ;
-
-	switch (status)
-	{	case FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC :
-			psf->error = SFE_FLAC_LOST_SYNC ;
-			break ;
-		case FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER :
-			psf->error = SFE_FLAC_BAD_HEADER ;
-			break ;
-		default :
-			psf->error = SFE_FLAC_UNKOWN_ERROR ;
-			break ;
-		} ;
-
-	return ;
-} /* sf_flac_error_callback */
-
-static FLAC__StreamEncoderSeekStatus
-sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
-	if (psf->error)
-		return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ;
-
-	return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ;
-} /* sf_flac_enc_seek_callback */
-
-static FLAC__StreamEncoderTellStatus
-sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	*absolute_byte_offset = psf_ftell (psf) ;
-	if (psf->error)
-		return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ;
-
-	return FLAC__STREAM_ENCODER_TELL_STATUS_OK ;
-} /* sf_flac_enc_tell_callback */
-
-static FLAC__StreamEncoderWriteStatus
-sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], size_t bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
-{	SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-	if (psf_fwrite (buffer, 1, bytes, psf) == (sf_count_t) bytes && psf->error == 0)
-		return FLAC__STREAM_ENCODER_WRITE_STATUS_OK ;
-
-	return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR ;
-} /* sf_flac_enc_write_callback */
-
-static void
-flac_write_strings (SF_PRIVATE *psf, FLAC_PRIVATE* pflac)
-{	FLAC__StreamMetadata_VorbisComment_Entry entry ;
-	int	k, string_count = 0 ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-	{	if (psf->strings.data [k].type != 0)
-			string_count ++ ;
-		} ;
-
-	if (string_count == 0)
-		return ;
-
-	if (pflac->metadata == NULL && (pflac->metadata = FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT)) == NULL)
-	{	psf_log_printf (psf, "FLAC__metadata_object_new returned NULL\n") ;
-		return ;
-		} ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS && psf->strings.data [k].type != 0 ; k++)
-	{	const char * key, * value ;
-
-		switch (psf->strings.data [k].type)
-		{	case SF_STR_SOFTWARE :
-				key = "software" ;
-				break ;
-			case SF_STR_TITLE :
-				key = "title" ;
-				break ;
-			case SF_STR_COPYRIGHT :
-				key = "copyright" ;
-				break ;
-			case SF_STR_ARTIST :
-				key = "artist" ;
-				break ;
-			case SF_STR_COMMENT :
-				key = "comment" ;
-				break ;
-			case SF_STR_DATE :
-				key = "date" ;
-				break ;
-			case SF_STR_ALBUM :
-				key = "album" ;
-				break ;
-			case SF_STR_LICENSE :
-				key = "license" ;
-				break ;
-			case SF_STR_TRACKNUMBER :
-				key = "tracknumber" ;
-				break ;
-			case SF_STR_GENRE :
-				key = "genre" ;
-				break ;
-			default :
-				continue ;
-			} ;
-
-		value = psf->strings.storage + psf->strings.data [k].offset ;
-
-		FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair (&entry, key, value) ;
-		FLAC__metadata_object_vorbiscomment_append_comment (pflac->metadata, entry, /* copy */ SF_FALSE) ;
-		} ;
-
-	if (! FLAC__stream_encoder_set_metadata (pflac->fse, &pflac->metadata, 1))
-	{	printf ("%s %d : fail\n", __func__, __LINE__) ;
-		return ;
-		} ;
-
-	return ;
-} /* flac_write_strings */
-
-static int
-flac_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	int err ;
-
-	flac_write_strings (psf, pflac) ;
-
-	if ((err = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
-	{	psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString [err]) ;
-		return SFE_FLAC_INIT_DECODER ;
-		} ;
-
-	if (psf->error == 0)
-		psf->dataoffset = psf_ftell (psf) ;
-	pflac->encbuffer = calloc (ENC_BUFFER_SIZE, sizeof (FLAC__int32)) ;
-
-	return psf->error ;
-} /* flac_write_header */
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-flac_open	(SF_PRIVATE *psf)
-{	int		subformat ;
-	int		error = 0 ;
-
-	FLAC_PRIVATE* pflac = calloc (1, sizeof (FLAC_PRIVATE)) ;
-	psf->codec_data = pflac ;
-
-	/* Set the default value here. Over-ridden later if necessary. */
-	pflac->compression = FLAC_DEFAULT_COMPRESSION_LEVEL ;
-
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-	{	if ((error = flac_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_FLAC)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_BIG ;
-		psf->sf.seekable = 0 ;
-
-		psf->strings.flags = SF_STR_ALLOW_START ;
-
-		if ((error = flac_enc_init (psf)))
-			return error ;
-
-		psf->write_header = flac_write_header ;
-		} ;
-
-	psf->datalength = psf->filelength ;
-	psf->dataoffset = 0 ;
-
-	psf->container_close = flac_close ;
-	psf->seek = flac_seek ;
-	psf->byterate = flac_byterate ;
-
-	psf->command = flac_command ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :	/* 8-bit FLAC.  */
-		case SF_FORMAT_PCM_16 :	/* 16-bit FLAC. */
-		case SF_FORMAT_PCM_24 :	/* 24-bit FLAC. */
-			error = flac_init (psf) ;
-			break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return error ;
-} /* flac_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-flac_close	(SF_PRIVATE *psf)
-{	FLAC_PRIVATE* pflac ;
-	int k ;
-
-	if ((pflac = (FLAC_PRIVATE*) psf->codec_data) == NULL)
-		return 0 ;
-
-	if (pflac->metadata != NULL)
-		FLAC__metadata_object_delete (pflac->metadata) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	FLAC__stream_encoder_finish (pflac->fse) ;
-		FLAC__stream_encoder_delete (pflac->fse) ;
-
-		if (pflac->encbuffer)
-			free (pflac->encbuffer) ;
-		} ;
-
-	if (psf->file.mode == SFM_READ)
-	{	FLAC__stream_decoder_finish (pflac->fsd) ;
-		FLAC__stream_decoder_delete (pflac->fsd) ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++)
-		free (pflac->rbuffer [k]) ;
-
-	free (pflac) ;
-	psf->codec_data = NULL ;
-
-	return 0 ;
-} /* flac_close */
-
-static int
-flac_enc_init (SF_PRIVATE *psf)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	unsigned bps ;
-
-	/* To cite the flac FAQ at
-	** http://flac.sourceforge.net/faq.html#general__samples
-	**     "FLAC supports linear sample rates from 1Hz - 655350Hz in 1Hz
-	**     increments."
-	*/
-	if (psf->sf.samplerate < 1 || psf->sf.samplerate > 655350)
-	{	psf_log_printf (psf, "flac sample rate out of range.\n", psf->sf.samplerate) ;
-		return SFE_FLAC_BAD_SAMPLE_RATE ;
-		} ;
-
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-			bps = 8 ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			bps = 16 ;
-			break ;
-		case SF_FORMAT_PCM_24 :
-			bps = 24 ;
-			break ;
-
-		default :
-			bps = 0 ;
-			break ;
-		} ;
-
-	if (pflac->fse)
-		FLAC__stream_encoder_delete (pflac->fse) ;
-	if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL)
-		return SFE_FLAC_NEW_DECODER ;
-
-	if (! FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels))
-	{	psf_log_printf (psf, "FLAC__stream_encoder_set_channels (%d) return false.\n", psf->sf.channels) ;
-		return SFE_FLAC_INIT_DECODER ;
-		} ;
-
-	if (! FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate))
-	{	psf_log_printf (psf, "FLAC__stream_encoder_set_sample_rate (%d) returned false.\n", psf->sf.samplerate) ;
-		return SFE_FLAC_BAD_SAMPLE_RATE ;
-		} ;
-
-	if (! FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps))
-	{	psf_log_printf (psf, "FLAC__stream_encoder_set_bits_per_sample (%d) return false.\n", bps) ;
-		return SFE_FLAC_INIT_DECODER ;
-		} ;
-
-	if (! FLAC__stream_encoder_set_compression_level (pflac->fse, pflac->compression))
-	{	psf_log_printf (psf, "FLAC__stream_encoder_set_compression_level (%d) return false.\n", pflac->compression) ;
-		return SFE_FLAC_INIT_DECODER ;
-		} ;
-
-	return 0 ;
-} /* flac_enc_init */
-
-static int
-flac_read_header (SF_PRIVATE *psf)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-	psf_fseek (psf, 0, SEEK_SET) ;
-	if (pflac->fsd)
-		FLAC__stream_decoder_delete (pflac->fsd) ;
-	if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL)
-		return SFE_FLAC_NEW_DECODER ;
-
-	FLAC__stream_decoder_set_metadata_respond_all (pflac->fsd) ;
-
-	if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
-		return SFE_FLAC_INIT_DECODER ;
-
-	FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
-
-	psf_log_printf (psf, "End\n") ;
-
-	if (psf->error == 0)
-	{	FLAC__uint64 position ;
-
-		FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
-		psf->dataoffset = position ;
-		} ;
-
-	return psf->error ;
-} /* flac_read_header */
-
-static int
-flac_command (SF_PRIVATE * psf, int command, void * data, int datasize)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	double quality ;
-
-	switch (command)
-	{	case SFC_SET_COMPRESSION_LEVEL :
-			if (data == NULL || datasize != sizeof (double))
-				return SF_FALSE ;
-
-			if (psf->have_written)
-				return SF_FALSE ;
-
-			/* FLAC compression level is in the range [0, 8] while libsndfile takes
-			** values in the range [0.0, 1.0]. Massage the libsndfile value here.
-			*/
-			quality = (*((double *) data)) * 8.0 ;
-			/* Clip range. */
-			pflac->compression = lrint (SF_MAX (0.0, SF_MIN (8.0, quality))) ;
-
-			psf_log_printf (psf, "%s : Setting SFC_SET_COMPRESSION_LEVEL to %u.\n", __func__, pflac->compression) ;
-
-			if (flac_enc_init (psf))
-				return SF_FALSE ;
-
-			return SF_TRUE ;
-
-		default :
-			return SF_FALSE ;
-		} ;
-
-	return SF_FALSE ;
-} /* flac_command */
-
-int
-flac_init (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->read_short		= flac_read_flac2s ;
-		psf->read_int		= flac_read_flac2i ;
-		psf->read_float		= flac_read_flac2f ;
-		psf->read_double	= flac_read_flac2d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->write_short	= flac_write_s2flac ;
-		psf->write_int		= flac_write_i2flac ;
-		psf->write_float	= flac_write_f2flac ;
-		psf->write_double	= flac_write_d2flac ;
-		} ;
-
-	if (psf->filelength > psf->dataoffset)
-		psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ;
-	else
-		psf->datalength = 0 ;
-
-	return 0 ;
-} /* flac_init */
-
-static unsigned
-flac_read_loop (SF_PRIVATE *psf, unsigned len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-	pflac->pos = 0 ;
-	pflac->len = len ;
-	pflac->remain = len ;
-	if (pflac->frame != NULL && pflac->bufferpos < pflac->frame->header.blocksize)
-		flac_buffer_copy (psf) ;
-
-	while (pflac->pos < pflac->len)
-	{	if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
-			break ;
-		if (FLAC__stream_decoder_get_state (pflac->fsd) >= FLAC__STREAM_DECODER_END_OF_STREAM)
-			break ;
-		} ;
-
-	pflac->ptr = NULL ;
-
-	return pflac->pos ;
-} /* flac_read_loop */
-
-static sf_count_t
-flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	sf_count_t total = 0, current ;
-	unsigned readlen ;
-
-	pflac->pcmtype = PFLAC_PCM_SHORT ;
-
-	while (total < len)
-	{	pflac->ptr = ptr + total ;
-		readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-		current = flac_read_loop (psf, readlen) ;
-		if (current == 0)
-			break ;
-		total += current ;
-		} ;
-
-	return total ;
-} /* flac_read_flac2s */
-
-static sf_count_t
-flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	sf_count_t total = 0, current ;
-	unsigned readlen ;
-
-	pflac->pcmtype = PFLAC_PCM_INT ;
-
-	while (total < len)
-	{	pflac->ptr = ptr + total ;
-		readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-		current = flac_read_loop (psf, readlen) ;
-		if (current == 0)
-			break ;
-		total += current ;
-		} ;
-
-	return total ;
-} /* flac_read_flac2i */
-
-static sf_count_t
-flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	sf_count_t total = 0, current ;
-	unsigned readlen ;
-
-	pflac->pcmtype = PFLAC_PCM_FLOAT ;
-
-	while (total < len)
-	{	pflac->ptr = ptr + total ;
-		readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-		current = flac_read_loop (psf, readlen) ;
-		if (current == 0)
-			break ;
-		total += current ;
-		} ;
-
-	return total ;
-} /* flac_read_flac2f */
-
-static sf_count_t
-flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	sf_count_t total = 0, current ;
-	unsigned readlen ;
-
-	pflac->pcmtype = PFLAC_PCM_DOUBLE ;
-
-	while (total < len)
-	{	pflac->ptr = ptr + total ;
-		readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-		current = flac_read_loop (psf, readlen) ;
-		if (current == 0)
-			break ;
-		total += current ;
-		} ;
-
-	return total ;
-} /* flac_read_flac2d */
-
-static sf_count_t
-flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	void (*convert) (const short *, FLAC__int32 *, int) ;
-	int bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-	FLAC__int32* buffer = pflac->encbuffer ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-			convert = s2flac8_array ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			convert = s2flac16_array ;
-			break ;
-			case SF_FORMAT_PCM_24 :
-			convert = s2flac24_array ;
-			break ;
-		default :
-			return -1 ;
-		} ;
-
-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-	bufferlen *= psf->sf.channels ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		convert (ptr + total, buffer, writecount) ;
-		if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-			thiswrite = writecount ;
-		else
-			break ;
-		total += thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-
-		len -= thiswrite ;
-		} ;
-
-	return total ;
-} /* flac_write_s2flac */
-
-static sf_count_t
-flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	void (*convert) (const int *, FLAC__int32 *, int) ;
-	int bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-	FLAC__int32* buffer = pflac->encbuffer ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-			convert = i2flac8_array ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			convert = i2flac16_array ;
-			break ;
-		case SF_FORMAT_PCM_24 :
-			convert = i2flac24_array ;
-			break ;
-		default :
-			return -1 ;
-		} ;
-
-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-	bufferlen *= psf->sf.channels ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		convert (ptr + total, buffer, writecount) ;
-		if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-			thiswrite = writecount ;
-		else
-			break ;
-		total += thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-
-		len -= thiswrite ;
-		} ;
-
-	return total ;
-} /* flac_write_i2flac */
-
-static sf_count_t
-flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	void (*convert) (const float *, FLAC__int32 *, int, int) ;
-	int bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-	FLAC__int32* buffer = pflac->encbuffer ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-			convert = (psf->add_clipping) ? f2flac8_clip_array : f2flac8_array ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			convert = (psf->add_clipping) ? f2flac16_clip_array : f2flac16_array ;
-			break ;
-		case SF_FORMAT_PCM_24 :
-			convert = (psf->add_clipping) ? f2flac24_clip_array : f2flac24_array ;
-			break ;
-		default :
-			return -1 ;
-		} ;
-
-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-	bufferlen *= psf->sf.channels ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		convert (ptr + total, buffer, writecount, psf->norm_float) ;
-		if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-			thiswrite = writecount ;
-		else
-			break ;
-		total += thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-
-		len -= thiswrite ;
-		} ;
-
-	return total ;
-} /* flac_write_f2flac */
-
-static void
-f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
-		{	dest [count] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
-		{	dest [count] = 0x80 ;
-			continue ;
-			} ;
-		dest [count] = lrintf (scaled_value) ;
-		} ;
-
-	return ;
-} /* f2flac8_clip_array */
-
-static void
-f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-		{	dest [count] = 0x7FFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-		{	dest [count] = 0x8000 ;
-			continue ;
-			} ;
-		dest [count] = lrintf (scaled_value) ;
-		} ;
-} /* f2flac16_clip_array */
-
-static void
-f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
-		{	dest [count] = 0x7FFFFF ;
-			continue ;
-			} ;
-
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
-		{	dest [count] = 0x800000 ;
-			continue ;
-			}
-		dest [count] = lrintf (scaled_value) ;
-		} ;
-
-	return ;
-} /* f2flac24_clip_array */
-
-static void
-f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac8_array */
-
-static void
-f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac16_array */
-
-static void
-f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{	float normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac24_array */
-
-static sf_count_t
-flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-	void (*convert) (const double *, FLAC__int32 *, int, int) ;
-	int bufferlen, writecount, thiswrite ;
-	sf_count_t	total = 0 ;
-	FLAC__int32* buffer = pflac->encbuffer ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-			convert = (psf->add_clipping) ? d2flac8_clip_array : d2flac8_array ;
-			break ;
-		case SF_FORMAT_PCM_16 :
-			convert = (psf->add_clipping) ? d2flac16_clip_array : d2flac16_array ;
-			break ;
-		case SF_FORMAT_PCM_24 :
-			convert = (psf->add_clipping) ? d2flac24_clip_array : d2flac24_array ;
-			break ;
-		default :
-			return -1 ;
-		} ;
-
-	bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-	bufferlen *= psf->sf.channels ;
-
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		convert (ptr + total, buffer, writecount, psf->norm_double) ;
-		if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-			thiswrite = writecount ;
-		else
-			break ;
-		total += thiswrite ;
-		if (thiswrite < writecount)
-			break ;
-
-		len -= thiswrite ;
-		} ;
-
-	return total ;
-} /* flac_write_d2flac */
-
-static void
-d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
-		{	dest [count] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
-		{	dest [count] = 0x80 ;
-			continue ;
-			} ;
-		dest [count] = lrint (scaled_value) ;
-		} ;
-
-	return ;
-} /* d2flac8_clip_array */
-
-static void
-d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-		{	dest [count] = 0x7FFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-		{	dest [count] = 0x8000 ;
-			continue ;
-			} ;
-		dest [count] = lrint (scaled_value) ;
-		} ;
-
-	return ;
-} /* d2flac16_clip_array */
-
-static void
-d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
-		{	dest [count] = 0x7FFFFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
-		{	dest [count] = 0x800000 ;
-			continue ;
-			} ;
-		dest [count] = lrint (scaled_value) ;
-		} ;
-
-	return ;
-} /* d2flac24_clip_array */
-
-static void
-d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac8_array */
-
-static void
-d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac16_array */
-
-static void
-d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{	double normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-
-	while (--count >= 0)
-		dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac24_array */
-
-static sf_count_t
-flac_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{	FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-	if (pflac == NULL)
-		return 0 ;
-
-	if (psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return ((sf_count_t) -1) ;
-		} ;
-
-	pflac->frame = NULL ;
-
-	if (psf->file.mode == SFM_READ)
-	{	FLAC__uint64 position ;
-
-		if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset))
-		{	FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
-			return offset ;
-			} ;
-
-		if (offset == psf->sf.frames)
-		{	/*
-			** If we've been asked to seek to the very end of the file, libFLAC
-			** will return an error. However, we know the length of the file so
-			** instead of returning an error, we can return the offset.
-			*/
-			return offset ;
-			} ;
-
-		psf->error = SFE_BAD_SEEK ;
-		return ((sf_count_t) -1) ;
-		} ;
-
-	/* Seeking in write mode not yet supported. */
-	psf->error = SFE_BAD_SEEK ;
-
-	return ((sf_count_t) -1) ;
-} /* flac_seek */
-
-static int
-flac_byterate (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ)
-		return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-	return -1 ;
-} /* flac_byterate */
-
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-flac_open	(SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without FLAC support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* flac_open */
-
-#endif
diff --git a/libs/libsndfile/src/float32.c b/libs/libsndfile/src/float32.c
deleted file mode 100644
index 89bcf6b754..0000000000
--- a/libs/libsndfile/src/float32.c
+++ /dev/null
@@ -1,1012 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<limits.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if CPU_IS_LITTLE_ENDIAN
-	#define FLOAT32_READ	float32_le_read
-	#define FLOAT32_WRITE	float32_le_write
-#elif CPU_IS_BIG_ENDIAN
-	#define FLOAT32_READ	float32_be_read
-	#define FLOAT32_WRITE	float32_be_write
-#endif
-
-/*--------------------------------------------------------------------------------------------
-**	Processor floating point capabilities. float32_get_capability () returns one of the
-**	latter four values.
-*/
-
-enum
-{	FLOAT_UNKNOWN		= 0x00,
-	FLOAT_CAN_RW_LE		= 0x12,
-	FLOAT_CAN_RW_BE		= 0x23,
-	FLOAT_BROKEN_LE		= 0x34,
-	FLOAT_BROKEN_BE		= 0x45
-} ;
-
-/*--------------------------------------------------------------------------------------------
-**	Prototypes for private functions.
-*/
-
-static sf_count_t	host_read_f2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	host_read_f2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	host_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	host_read_f2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	host_write_s2f	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	host_write_i2f	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	host_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	host_write_d2f	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void		float32_peak_update	(SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx) ;
-
-static sf_count_t	replace_read_f2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_f2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	replace_read_f2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	replace_write_s2f	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_i2f	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	replace_write_d2f	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static	void	bf2f_array (float *buffer, int count) ;
-static	void	f2bf_array (float *buffer, int count) ;
-
-static int		float32_get_capability	(SF_PRIVATE *psf) ;
-
-/*--------------------------------------------------------------------------------------------
-**	Exported functions.
-*/
-
-int
-float32_init	(SF_PRIVATE *psf)
-{	static int float_caps ;
-
-	float_caps = float32_get_capability (psf) ;
-
-	psf->blockwidth = sizeof (float) * psf->sf.channels ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	switch (psf->endian + float_caps)
-		{	case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= host_read_f2s ;
-					psf->read_int		= host_read_f2i ;
-					psf->read_float		= host_read_f ;
-					psf->read_double	= host_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= host_read_f2s ;
-					psf->read_int		= host_read_f2i ;
-					psf->read_float		= host_read_f ;
-					psf->read_double	= host_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= host_read_f2s ;
-					psf->read_int		= host_read_f2i ;
-					psf->read_float		= host_read_f ;
-					psf->read_double	= host_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= host_read_f2s ;
-					psf->read_int		= host_read_f2i ;
-					psf->read_float		= host_read_f ;
-					psf->read_double	= host_read_f2d ;
-					break ;
-
-			/* When the CPU is not IEEE compatible. */
-			case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= replace_read_f2s ;
-					psf->read_int		= replace_read_f2i ;
-					psf->read_float		= replace_read_f ;
-					psf->read_double	= replace_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= replace_read_f2s ;
-					psf->read_int		= replace_read_f2i ;
-					psf->read_float		= replace_read_f ;
-					psf->read_double	= replace_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->read_short		= replace_read_f2s ;
-					psf->read_int		= replace_read_f2i ;
-					psf->read_float		= replace_read_f ;
-					psf->read_double	= replace_read_f2d ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->read_short		= replace_read_f2s ;
-					psf->read_int		= replace_read_f2i ;
-					psf->read_float		= replace_read_f ;
-					psf->read_double	= replace_read_f2d ;
-					break ;
-
-			default : break ;
-			} ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	switch (psf->endian + float_caps)
-		{	case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= host_write_s2f ;
-					psf->write_int		= host_write_i2f ;
-					psf->write_float	= host_write_f ;
-					psf->write_double	= host_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= host_write_s2f ;
-					psf->write_int		= host_write_i2f ;
-					psf->write_float	= host_write_f ;
-					psf->write_double	= host_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= host_write_s2f ;
-					psf->write_int		= host_write_i2f ;
-					psf->write_float	= host_write_f ;
-					psf->write_double	= host_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= host_write_s2f ;
-					psf->write_int		= host_write_i2f ;
-					psf->write_float	= host_write_f ;
-					psf->write_double	= host_write_d2f ;
-					break ;
-
-			/* When the CPU is not IEEE compatible. */
-			case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= replace_write_s2f ;
-					psf->write_int		= replace_write_i2f ;
-					psf->write_float	= replace_write_f ;
-					psf->write_double	= replace_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= replace_write_s2f ;
-					psf->write_int		= replace_write_i2f ;
-					psf->write_float	= replace_write_f ;
-					psf->write_double	= replace_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
-					psf->data_endswap = SF_FALSE ;
-					psf->write_short	= replace_write_s2f ;
-					psf->write_int		= replace_write_i2f ;
-					psf->write_float	= replace_write_f ;
-					psf->write_double	= replace_write_d2f ;
-					break ;
-
-			case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
-					psf->data_endswap = SF_TRUE ;
-					psf->write_short	= replace_write_s2f ;
-					psf->write_int		= replace_write_i2f ;
-					psf->write_float	= replace_write_f ;
-					psf->write_double	= replace_write_d2f ;
-					break ;
-
-			default : break ;
-			} ;
-		} ;
-
-	if (psf->filelength > psf->dataoffset)
-	{	psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-		}
-	else
-		psf->datalength = 0 ;
-
-	psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-	return 0 ;
-} /* float32_init */
-
-float
-float32_be_read (const unsigned char *cptr)
-{	int		exponent, mantissa, negative ;
-	float	fvalue ;
-
-	negative = cptr [0] & 0x80 ;
-	exponent = ((cptr [0] & 0x7F) << 1) | ((cptr [1] & 0x80) ? 1 : 0) ;
-	mantissa = ((cptr [1] & 0x7F) << 16) | (cptr [2] << 8) | (cptr [3]) ;
-
-	if (! (exponent || mantissa))
-		return 0.0 ;
-
-	mantissa |= 0x800000 ;
-	exponent = exponent ? exponent - 127 : 0 ;
-
-	fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ;
-
-	if (negative)
-		fvalue *= -1 ;
-
-	if (exponent > 0)
-		fvalue *= pow (2.0, exponent) ;
-	else if (exponent < 0)
-		fvalue /= pow (2.0, abs (exponent)) ;
-
-	return fvalue ;
-} /* float32_be_read */
-
-float
-float32_le_read (const unsigned char *cptr)
-{	int		exponent, mantissa, negative ;
-	float	fvalue ;
-
-	negative = cptr [3] & 0x80 ;
-	exponent = ((cptr [3] & 0x7F) << 1) | ((cptr [2] & 0x80) ? 1 : 0) ;
-	mantissa = ((cptr [2] & 0x7F) << 16) | (cptr [1] << 8) | (cptr [0]) ;
-
-	if (! (exponent || mantissa))
-		return 0.0 ;
-
-	mantissa |= 0x800000 ;
-	exponent = exponent ? exponent - 127 : 0 ;
-
-	fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ;
-
-	if (negative)
-		fvalue *= -1 ;
-
-	if (exponent > 0)
-		fvalue *= pow (2.0, exponent) ;
-	else if (exponent < 0)
-		fvalue /= pow (2.0, abs (exponent)) ;
-
-	return fvalue ;
-} /* float32_le_read */
-
-void
-float32_le_write (float in, unsigned char *out)
-{	int		exponent, mantissa, negative = 0 ;
-
-	memset (out, 0, sizeof (int)) ;
-
-	if (fabs (in) < 1e-30)
-		return ;
-
-	if (in < 0.0)
-	{	in *= -1.0 ;
-		negative = 1 ;
-		} ;
-
-	in = frexp (in, &exponent) ;
-
-	exponent += 126 ;
-
-	in *= (float) 0x1000000 ;
-	mantissa = (((int) in) & 0x7FFFFF) ;
-
-	if (negative)
-		out [3] |= 0x80 ;
-
-	if (exponent & 0x01)
-		out [2] |= 0x80 ;
-
-	out [0] = mantissa & 0xFF ;
-	out [1] = (mantissa >> 8) & 0xFF ;
-	out [2] |= (mantissa >> 16) & 0x7F ;
-	out [3] |= (exponent >> 1) & 0x7F ;
-
-	return ;
-} /* float32_le_write */
-
-void
-float32_be_write (float in, unsigned char *out)
-{	int		exponent, mantissa, negative = 0 ;
-
-	memset (out, 0, sizeof (int)) ;
-
-	if (fabs (in) < 1e-30)
-		return ;
-
-	if (in < 0.0)
-	{	in *= -1.0 ;
-		negative = 1 ;
-		} ;
-
-	in = frexp (in, &exponent) ;
-
-	exponent += 126 ;
-
-	in *= (float) 0x1000000 ;
-	mantissa = (((int) in) & 0x7FFFFF) ;
-
-	if (negative)
-		out [0] |= 0x80 ;
-
-	if (exponent & 0x01)
-		out [1] |= 0x80 ;
-
-	out [3] = mantissa & 0xFF ;
-	out [2] = (mantissa >> 8) & 0xFF ;
-	out [1] |= (mantissa >> 16) & 0x7F ;
-	out [0] |= (exponent >> 1) & 0x7F ;
-
-	return ;
-} /* float32_be_write */
-
-/*==============================================================================================
-**	Private functions.
-*/
-
-static void
-float32_peak_update	(SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx)
-{	int 	chan ;
-	int		k, position ;
-	float	fmaxval ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	fmaxval = fabs (buffer [chan]) ;
-		position = 0 ;
-		for (k = chan ; k < count ; k += psf->sf.channels)
-			if (fmaxval < fabs (buffer [k]))
-			{	fmaxval = fabs (buffer [k]) ;
-				position = k ;
-				} ;
-
-		if (fmaxval > psf->peak_info->peaks [chan].value)
-		{	psf->peak_info->peaks [chan].value = fmaxval ;
-			psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ;
-			} ;
-		} ;
-
-	return ;
-} /* float32_peak_update */
-
-static int
-float32_get_capability	(SF_PRIVATE *psf)
-{	union
-	{	float			f ;
-		int				i ;
-		unsigned char	c [4] ;
-	} data ;
-
-	data.f = (float) 1.23456789 ; /* Some abitrary value. */
-
-	if (! psf->ieee_replace)
-	{	/* If this test is true ints and floats are compatible and little endian. */
-		if (data.c [0] == 0x52 && data.c [1] == 0x06 && data.c [2] == 0x9e && data.c [3] == 0x3f)
-			return FLOAT_CAN_RW_LE ;
-
-		/* If this test is true ints and floats are compatible and big endian. */
-		if (data.c [3] == 0x52 && data.c [2] == 0x06 && data.c [1] == 0x9e && data.c [0] == 0x3f)
-			return FLOAT_CAN_RW_BE ;
-		} ;
-
-	/* Floats are broken. Don't expect reading or writing to be fast. */
-	psf_log_printf (psf, "Using IEEE replacement code for float.\n") ;
-
-	return (CPU_IS_LITTLE_ENDIAN) ? FLOAT_BROKEN_LE : FLOAT_BROKEN_BE ;
-} /* float32_get_capability */
-
-/*=======================================================================================
-*/
-
-static void
-f2s_array (const float *src, int count, short *dest, float scale)
-{
-	while (--count >= 0)
-	{	dest [count] = lrintf (scale * src [count]) ;
-		} ;
-} /* f2s_array */
-
-static void
-f2s_clip_array (const float *src, int count, short *dest, float scale)
-{	while (--count >= 0)
-	{	float tmp = scale * src [count] ;
-
-		if (CPU_CLIPS_POSITIVE == 0 && tmp > 32767.0)
-			dest [count] = SHRT_MAX ;
-		else if (CPU_CLIPS_NEGATIVE == 0 && tmp < -32768.0)
-			dest [count] = SHRT_MIN ;
-		else
-			dest [count] = lrintf (tmp) ;
-		} ;
-} /* f2s_clip_array */
-
-static inline void
-f2i_array (const float *src, int count, int *dest, float scale)
-{	while (--count >= 0)
-	{	dest [count] = lrintf (scale * src [count]) ;
-		} ;
-} /* f2i_array */
-
-static inline void
-f2i_clip_array (const float *src, int count, int *dest, float scale)
-{	while (--count >= 0)
-	{	float tmp = scale * src [count] ;
-
-		if (CPU_CLIPS_POSITIVE == 0 && tmp > (1.0 * INT_MAX))
-			dest [count] = INT_MAX ;
-		else if (CPU_CLIPS_NEGATIVE == 0 && tmp < (-1.0 * INT_MAX))
-			dest [count] = INT_MIN ;
-		else
-			dest [count] = lrintf (tmp) ;
-		} ;
-} /* f2i_clip_array */
-
-static inline void
-f2d_array (const float *src, int count, double *dest)
-{	while (--count >= 0)
-	{	dest [count] = src [count] ;
-		} ;
-} /* f2d_array */
-
-static inline void
-s2f_array (const short *src, float *dest, int count, float scale)
-{	while (--count >= 0)
-	{	dest [count] = scale * src [count] ;
-		} ;
-} /* s2f_array */
-
-static inline void
-i2f_array (const int *src, float *dest, int count, float scale)
-{	while (--count >= 0)
-	{	dest [count] = scale * src [count] ;
-		} ;
-} /* i2f_array */
-
-static inline void
-d2f_array (const double *src, float *dest, int count)
-{	while (--count >= 0)
-	{	dest [count] = src [count] ;
-		} ;
-} /* d2f_array */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-host_read_f2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, int, short *, float) ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	convert = (psf->add_clipping) ? f2s_clip_array : f2s_array ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-/* Fix me : Need lef2s_array */
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		convert (ubuf.fbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* host_read_f2s */
-
-static sf_count_t
-host_read_f2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, int, int *, float) ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	convert = (psf->add_clipping) ? f2i_clip_array : f2i_array ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		convert (ubuf.fbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* host_read_f2i */
-
-static sf_count_t
-host_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	if (psf->data_endswap != SF_TRUE)
-		return psf_fread (ptr, sizeof (float), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		endswap_int_copy ((int*) (ptr + total), ubuf.ibuf, readcount) ;
-
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* host_read_f */
-
-static sf_count_t
-host_read_f2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-/* Fix me : Need lef2d_array */
-		f2d_array (ubuf.fbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* host_read_f2d */
-
-static sf_count_t
-host_write_s2f	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-/* Erik */
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_s2f */
-
-static sf_count_t
-host_write_i2f	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float) , bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_i2f */
-
-static sf_count_t
-host_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (psf->peak_info)
-		float32_peak_update (psf, ptr, len, 0) ;
-
-	if (psf->data_endswap != SF_TRUE)
-		return psf_fwrite (ptr, sizeof (float), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		endswap_int_copy (ubuf.ibuf, (const int*) (ptr + total), bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_f */
-
-static sf_count_t
-host_write_d2f	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		d2f_array (ptr + total, ubuf.fbuf, bufferlen) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* host_write_d2f */
-
-/*=======================================================================================
-*/
-
-static sf_count_t
-replace_read_f2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		bf2f_array (ubuf.fbuf, bufferlen) ;
-
-		f2s_array (ubuf.fbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_f2s */
-
-static sf_count_t
-replace_read_f2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-	scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		bf2f_array (ubuf.fbuf, bufferlen) ;
-
-		f2i_array (ubuf.fbuf, readcount, ptr + total, scale) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_f2i */
-
-static sf_count_t
-replace_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	/* FIX THIS */
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		bf2f_array (ubuf.fbuf, bufferlen) ;
-
-		memcpy (ptr + total, ubuf.fbuf, bufferlen * sizeof (float)) ;
-
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_f */
-
-static sf_count_t
-replace_read_f2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		bf2f_array (ubuf.fbuf, bufferlen) ;
-
-		f2d_array (ubuf.fbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* replace_read_f2d */
-
-static sf_count_t
-replace_write_s2f	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		f2bf_array (ubuf.fbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_s2f */
-
-static sf_count_t
-replace_write_i2f	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		scale ;
-
-	scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		f2bf_array (ubuf.fbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_i2f */
-
-static sf_count_t
-replace_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	/* FIX THIS */
-	if (psf->peak_info)
-		float32_peak_update (psf, ptr, len, 0) ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-
-		memcpy (ubuf.fbuf, ptr + total, bufferlen * sizeof (float)) ;
-
-		f2bf_array (ubuf.fbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float) , bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_f */
-
-static sf_count_t
-replace_write_d2f	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		d2f_array (ptr + total, ubuf.fbuf, bufferlen) ;
-
-		if (psf->peak_info)
-			float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-		f2bf_array (ubuf.fbuf, bufferlen) ;
-
-		if (psf->data_endswap == SF_TRUE)
-			endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-		writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* replace_write_d2f */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static void
-bf2f_array (float *buffer, int count)
-{	while (--count >= 0)
-	{	buffer [count] = FLOAT32_READ ((unsigned char *) (buffer + count)) ;
-		} ;
-} /* bf2f_array */
-
-static void
-f2bf_array (float *buffer, int count)
-{	while (--count >= 0)
-	{	FLOAT32_WRITE (buffer [count], (unsigned char*) (buffer + count)) ;
-		} ;
-} /* f2bf_array */
-
diff --git a/libs/libsndfile/src/float_cast.h b/libs/libsndfile/src/float_cast.h
deleted file mode 100644
index 98c7de74b1..0000000000
--- a/libs/libsndfile/src/float_cast.h
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-** Copyright (C) 2001-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* Version 1.4 */
-
-#ifndef FLOAT_CAST_HEADER
-#define FLOAT_CAST_HEADER
-
-/*============================================================================
-**	On Intel Pentium processors (especially PIII and probably P4), converting
-**	from float to int is very slow. To meet the C specs, the code produced by
-**	most C compilers targeting Pentium needs to change the FPU rounding mode
-**	before the float to int conversion is performed.
-**
-**	Changing the FPU rounding mode causes the FPU pipeline to be flushed. It
-**	is this flushing of the pipeline which is so slow.
-**
-**	Fortunately the ISO C99 specifications define the functions lrint, lrintf,
-**	llrint and llrintf which fix this problem as a side effect.
-**
-**	On Unix-like systems, the configure process should have detected the
-**	presence of these functions. If they weren't found we have to replace them
-**	here with a standard C cast.
-*/
-
-/*
-**	The C99 prototypes for lrint and lrintf are as follows:
-**
-**		long int lrintf (float x) ;
-**		long int lrint  (double x) ;
-*/
-
-#include "sfconfig.h"
-
-/*
-**	The presence of the required functions are detected during the configure
-**	process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in
-**	the sfconfig.h file.
-*/
-
-#define		HAVE_LRINT_REPLACEMENT	0
-
-#if (HAVE_LRINT && HAVE_LRINTF)
-
-	/*
-	**	These defines enable functionality introduced with the 1999 ISO C
-	**	standard. They must be defined before the inclusion of math.h to
-	**	engage them. If optimisation is enabled, these functions will be
-	**	inlined. With optimisation switched off, you have to link in the
-	**	maths library using -lm.
-	*/
-
-	#define	_ISOC9X_SOURCE	1
-	#define _ISOC99_SOURCE	1
-
-	#define	__USE_ISOC9X	1
-	#define	__USE_ISOC99	1
-
-	#include	<math.h>
-
-#elif (defined (__CYGWIN__))
-
-	#include	<math.h>
-
-	#undef		HAVE_LRINT_REPLACEMENT
-	#define		HAVE_LRINT_REPLACEMENT	1
-
-	#undef	lrint
-	#undef	lrintf
-
-	#define	lrint	double2int
-	#define	lrintf	float2int
-
-	/*
-	**	The native CYGWIN lrint and lrintf functions are buggy:
-	**		http://sourceware.org/ml/cygwin/2005-06/msg00153.html
-	**		http://sourceware.org/ml/cygwin/2005-09/msg00047.html
-	**	and slow.
-	**	These functions (pulled from the Public Domain MinGW math.h header)
-	**	replace the native versions.
-	*/
-
-	static inline long double2int (double in)
-	{	long retval ;
-
-		__asm__ __volatile__
-		(	"fistpl %0"
-			: "=m" (retval)
-			: "t" (in)
-			: "st"
-			) ;
-
-		return retval ;
-	} /* double2int */
-
-	static inline long float2int (float in)
-	{	long retval ;
-
-		__asm__ __volatile__
-		(	"fistpl %0"
-			: "=m" (retval)
-			: "t" (in)
-			: "st"
-			) ;
-
-		return retval ;
-	} /* float2int */
-
-#elif (defined (WIN32) || defined (_WIN32)) && !defined(_WIN64)
-
-	#undef		HAVE_LRINT_REPLACEMENT
-	#define		HAVE_LRINT_REPLACEMENT	1
-
-	#include	<math.h>
-
-	/*
-	**	Win32 doesn't seem to have these functions.
-	**	Therefore implement inline versions of these functions here.
-	*/
-
-	__inline long int
-	lrint (double flt)
-	{	int intgr ;
-
-		_asm
-		{	fld flt
-			fistp intgr
-			} ;
-
-		return intgr ;
-	}
-
-	__inline long int
-	lrintf (float flt)
-	{	int intgr ;
-
-		_asm
-		{	fld flt
-			fistp intgr
-			} ;
-
-		return intgr ;
-	}
-
-#elif defined(_WIN64)
-#if (_MSC_VER < 1800)
-    __inline long int lrint(double x)
-    {
-        return (long int) (x);
-    }
-    __inline long int lrintf(float x)
-    {
-        return (long int) (x);
-    }
-#endif
-#elif (defined (__MWERKS__) && defined (macintosh))
-
-	/* This MacOS 9 solution was provided by Stephane Letz */
-
-	#undef		HAVE_LRINT_REPLACEMENT
-	#define		HAVE_LRINT_REPLACEMENT	1
-	#include	<math.h>
-
-	#undef	lrint
-	#undef	lrintf
-
-	#define	lrint	double2int
-	#define	lrintf	float2int
-
-	inline int
-	float2int (register float in)
-	{	long res [2] ;
-
-		asm
-		{	fctiw	in, in
-			stfd	 in, res
-		}
-		return res [1] ;
-	} /* float2int */
-
-	inline int
-	double2int (register double in)
-	{	long res [2] ;
-
-		asm
-		{	fctiw	in, in
-			stfd	 in, res
-		}
-		return res [1] ;
-	} /* double2int */
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-
-	/* For Apple MacOSX. */
-
-	#undef		HAVE_LRINT_REPLACEMENT
-	#define		HAVE_LRINT_REPLACEMENT	1
-	#include	<math.h>
-
-	#undef lrint
-	#undef lrintf
-
-	#define lrint	double2int
-	#define lrintf	float2int
-
-	inline static long
-	float2int (register float in)
-	{	int res [2] ;
-
-		__asm__ __volatile__
-		(	"fctiw	%1, %1\n\t"
-			"stfd	%1, %0"
-			: "=m" (res)	/* Output */
-			: "f" (in)		/* Input */
-			: "memory"
-			) ;
-
-		return res [1] ;
-	} /* lrintf */
-
-	inline static long
-	double2int (register double in)
-	{	int res [2] ;
-
-		__asm__ __volatile__
-		(	"fctiw	%1, %1\n\t"
-			"stfd	%1, %0"
-			: "=m" (res)	/* Output */
-			: "f" (in)		/* Input */
-			: "memory"
-			) ;
-
-		return res [1] ;
-	} /* lrint */
-
-#else
-	#ifndef __sgi
-	#warning "Don't have the functions lrint() and lrintf()."
-	#warning "Replacing these functions with a standard C cast."
-	#endif
-
-	#include	<math.h>
-
-	#define	lrint(dbl)		((long) (dbl))
-	#define	lrintf(flt)		((long) (flt))
-
-#endif
-
-
-#endif /* FLOAT_CAST_HEADER */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 42db1693-ff61-4051-bac1-e4d24c4e30b7
-*/
diff --git a/libs/libsndfile/src/g72x.c b/libs/libsndfile/src/g72x.c
deleted file mode 100644
index fec5d3f336..0000000000
--- a/libs/libsndfile/src/g72x.c
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "G72x/g72x.h"
-
-/* This struct is private to the G72x code. */
-struct g72x_state ;
-typedef struct g72x_state G72x_STATE ;
-
-typedef struct
-{	/* Private data. Don't mess with it. */
-	struct g72x_state * private ;
-
-	/* Public data. Read only. */
-	int				blocksize, samplesperblock, bytesperblock ;
-
-	/* Public data. Read and write. */
-	int				blocks_total, block_curr, sample_curr ;
-	unsigned char	block	[G72x_BLOCK_SIZE] ;
-	short			samples	[G72x_BLOCK_SIZE] ;
-} G72x_PRIVATE ;
-
-static	int	psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ;
-static	int	psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ;
-
-static	sf_count_t	g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static	sf_count_t	g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static	sf_count_t	g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static	sf_count_t g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static	int	g72x_close (SF_PRIVATE *psf) ;
-
-
-/*============================================================================================
-** WAV G721 Reader initialisation function.
-*/
-
-int
-g72x_init (SF_PRIVATE * psf)
-{	G72x_PRIVATE	*pg72x ;
-	int	bitspersample, bytesperblock, codec ;
-
-	if (psf->codec_data != NULL)
-	{	psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->sf.seekable = SF_FALSE ;
-
-	if (psf->sf.channels != 1)
-		return SFE_G72X_NOT_MONO ;
-
-	if ((pg72x = calloc (1, sizeof (G72x_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = (void*) pg72x ;
-
-	pg72x->block_curr = 0 ;
-	pg72x->sample_curr = 0 ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_G721_32 :
-				codec = G721_32_BITS_PER_SAMPLE ;
-				bytesperblock = G721_32_BYTES_PER_BLOCK ;
-				bitspersample = G721_32_BITS_PER_SAMPLE ;
-				break ;
-
-		case SF_FORMAT_G723_24:
-				codec = G723_24_BITS_PER_SAMPLE ;
-				bytesperblock = G723_24_BYTES_PER_BLOCK ;
-				bitspersample = G723_24_BITS_PER_SAMPLE ;
-				break ;
-
-		case SF_FORMAT_G723_40:
-				codec = G723_40_BITS_PER_SAMPLE ;
-				bytesperblock = G723_40_BYTES_PER_BLOCK ;
-				bitspersample = G723_40_BITS_PER_SAMPLE ;
-				break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	psf->filelength = psf_get_filelen (psf) ;
-	if (psf->filelength < psf->dataoffset)
-		psf->filelength = psf->dataoffset ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-	if (psf->dataend > 0)
-		psf->datalength -= psf->filelength - psf->dataend ;
-
-	if (psf->file.mode == SFM_READ)
-	{	pg72x->private = g72x_reader_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ;
-		if (pg72x->private == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		pg72x->bytesperblock = bytesperblock ;
-
-		psf->read_short		= g72x_read_s ;
-		psf->read_int		= g72x_read_i ;
-		psf->read_float		= g72x_read_f ;
-		psf->read_double	= g72x_read_d ;
-
-		psf->seek = g72x_seek ;
-
-		if (psf->datalength % pg72x->blocksize)
-		{	psf_log_printf (psf, "*** Odd psf->datalength (%D) should be a multiple of %d\n", psf->datalength, pg72x->blocksize) ;
-			pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ;
-			}
-		else
-			pg72x->blocks_total = psf->datalength / pg72x->blocksize ;
-
-		psf->sf.frames = pg72x->blocks_total * pg72x->samplesperblock ;
-
-		psf_g72x_decode_block (psf, pg72x) ;
-		}
-	else if (psf->file.mode == SFM_WRITE)
-	{	pg72x->private = g72x_writer_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ;
-		if (pg72x->private == NULL)
-			return SFE_MALLOC_FAILED ;
-
-		pg72x->bytesperblock = bytesperblock ;
-
-		psf->write_short	= g72x_write_s ;
-		psf->write_int		= g72x_write_i ;
-		psf->write_float	= g72x_write_f ;
-		psf->write_double	= g72x_write_d ;
-
-		if (psf->datalength % pg72x->blocksize)
-			pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ;
-		else
-			pg72x->blocks_total = psf->datalength / pg72x->blocksize ;
-
-		if (psf->datalength > 0)
-			psf->sf.frames = (8 * psf->datalength) / bitspersample ;
-
-		if ((psf->sf.frames * bitspersample) / 8 != psf->datalength)
-			psf_log_printf (psf, "*** Warning : weird psf->datalength.\n") ;
-		} ;
-
-	psf->codec_close	= g72x_close ;
-
-	return 0 ;
-} /* g72x_init */
-
-/*============================================================================================
-** G721 Read Functions.
-*/
-
-static int
-psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x)
-{	int	k ;
-
-	pg72x->block_curr ++ ;
-	pg72x->sample_curr = 0 ;
-
-	if (pg72x->block_curr > pg72x->blocks_total)
-	{	memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pg72x->block, 1, pg72x->bytesperblock, psf)) != pg72x->bytesperblock)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pg72x->bytesperblock) ;
-
-	pg72x->blocksize = k ;
-	g72x_decode_block (pg72x->private, pg72x->block, pg72x->samples) ;
-
-	return 1 ;
-} /* psf_g72x_decode_block */
-
-static int
-g72x_read_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, short *ptr, int len)
-{	int	count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	if (pg72x->block_curr > pg72x->blocks_total)
-		{	memset (&(ptr [indx]), 0, (len - indx) * sizeof (short)) ;
-			return total ;
-			} ;
-
-		if (pg72x->sample_curr >= pg72x->samplesperblock)
-			psf_g72x_decode_block (psf, pg72x) ;
-
-		count = pg72x->samplesperblock - pg72x->sample_curr ;
-		count = (len - indx > count) ? count : len - indx ;
-
-		memcpy (&(ptr [indx]), &(pg72x->samples [pg72x->sample_curr]), count * sizeof (short)) ;
-		indx += count ;
-		pg72x->sample_curr += count ;
-		total = indx ;
-		} ;
-
-	return total ;
-} /* g72x_read_block */
-
-static sf_count_t
-g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	G72x_PRIVATE 	*pg72x ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = g72x_read_block (psf, pg72x, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_read_s */
-
-static sf_count_t
-g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = sptr [k] << 16 ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_read_i */
-
-static sf_count_t
-g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	float 		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * sptr [k] ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_read_f */
-
-static sf_count_t
-g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (double) (sptr [k]) ;
-
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_read_d */
-
-static sf_count_t
-g72x_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t UNUSED (offset))
-{
-	psf_log_printf (psf, "seek unsupported\n") ;
-
-	/*	No simple solution. To do properly, would need to seek
-	**	to start of file and decode everything up to seek position.
-	**	Maybe implement SEEK_SET to 0 only?
-	*/
-	return 0 ;
-
-/*
-**		G72x_PRIVATE	*pg72x ;
-**		int			newblock, newsample, sample_curr ;
-**
-**		if (psf->codec_data == NULL)
-**			return 0 ;
-**		pg72x = (G72x_PRIVATE*) psf->codec_data ;
-**
-**		if (! (psf->datalength && psf->dataoffset))
-**		{	psf->error = SFE_BAD_SEEK ;
-**			return	PSF_SEEK_ERROR ;
-**			} ;
-**
-**		sample_curr = (8 * psf->datalength) / G721_32_BITS_PER_SAMPLE ;
-**
-**		switch (whence)
-**		{	case SEEK_SET :
-**					if (offset < 0 || offset > sample_curr)
-**					{	psf->error = SFE_BAD_SEEK ;
-**						return	PSF_SEEK_ERROR ;
-**						} ;
-**					newblock  = offset / pg72x->samplesperblock ;
-**					newsample = offset % pg72x->samplesperblock ;
-**					break ;
-**
-**			case SEEK_CUR :
-**					if (psf->current + offset < 0 || psf->current + offset > sample_curr)
-**					{	psf->error = SFE_BAD_SEEK ;
-**						return	PSF_SEEK_ERROR ;
-**						} ;
-**					newblock  = (8 * (psf->current + offset)) / pg72x->samplesperblock ;
-**					newsample = (8 * (psf->current + offset)) % pg72x->samplesperblock ;
-**					break ;
-**
-**			case SEEK_END :
-**					if (offset > 0 || sample_curr + offset < 0)
-**					{	psf->error = SFE_BAD_SEEK ;
-**						return	PSF_SEEK_ERROR ;
-**						} ;
-**					newblock  = (sample_curr + offset) / pg72x->samplesperblock ;
-**					newsample = (sample_curr + offset) % pg72x->samplesperblock ;
-**					break ;
-**
-**			default :
-**					psf->error = SFE_BAD_SEEK ;
-**					return	PSF_SEEK_ERROR ;
-**			} ;
-**
-**		if (psf->file.mode == SFM_READ)
-**		{	psf_fseek (psf, psf->dataoffset + newblock * pg72x->blocksize, SEEK_SET) ;
-**			pg72x->block_curr  = newblock ;
-**			psf_g72x_decode_block (psf, pg72x) ;
-**			pg72x->sample_curr = newsample ;
-**			}
-**		else
-**		{	/+* What to do about write??? *+/
-**			psf->error = SFE_BAD_SEEK ;
-**			return	PSF_SEEK_ERROR ;
-**			} ;
-**
-**		psf->current = newblock * pg72x->samplesperblock + newsample ;
-**		return psf->current ;
-**
-*/
-} /* g72x_seek */
-
-/*==========================================================================================
-** G72x Write Functions.
-*/
-
-static int
-psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x)
-{	int k ;
-
-	/* Encode the samples. */
-	g72x_encode_block (pg72x->private, pg72x->samples, pg72x->block) ;
-
-	/* Write the block to disk. */
-	if ((k = psf_fwrite (pg72x->block, 1, pg72x->blocksize, psf)) != pg72x->blocksize)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pg72x->blocksize) ;
-
-	pg72x->sample_curr = 0 ;
-	pg72x->block_curr ++ ;
-
-	/* Set samples to zero for next block. */
-	memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
-
-	return 1 ;
-} /* psf_g72x_encode_block */
-
-static int
-g72x_write_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, const short *ptr, int len)
-{	int	count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	count = pg72x->samplesperblock - pg72x->sample_curr ;
-
-		if (count > len - indx)
-			count = len - indx ;
-
-		memcpy (&(pg72x->samples [pg72x->sample_curr]), &(ptr [indx]), count * sizeof (short)) ;
-		indx += count ;
-		pg72x->sample_curr += count ;
-		total = indx ;
-
-		if (pg72x->sample_curr >= pg72x->samplesperblock)
-			psf_g72x_encode_block (psf, pg72x) ;
-		} ;
-
-	return total ;
-} /* g72x_write_block */
-
-static sf_count_t
-g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	G72x_PRIVATE 	*pg72x ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = g72x_write_block (psf, pg72x, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_write_s */
-
-static sf_count_t
-g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = ptr [total + k] >> 16 ;
-		count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-	return total ;
-} /* g72x_write_i */
-
-static sf_count_t
-g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_write_f */
-
-static sf_count_t
-g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	G72x_PRIVATE *pg72x ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* g72x_write_d */
-
-static int
-g72x_close (SF_PRIVATE *psf)
-{	G72x_PRIVATE *pg72x ;
-
-	pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	/*	If a block has been partially assembled, write it out
-		**	as the final block.
-		*/
-
-		if (pg72x->sample_curr && pg72x->sample_curr < G72x_BLOCK_SIZE)
-			psf_g72x_encode_block (psf, pg72x) ;
-
-		if (psf->write_header)
-			psf->write_header (psf, SF_FALSE) ;
-		} ;
-
-	/* Only free the pointer allocated by g72x_(reader|writer)_init. */
-	free (pg72x->private) ;
-
-	return 0 ;
-} /* g72x_close */
-
diff --git a/libs/libsndfile/src/gsm610.c b/libs/libsndfile/src/gsm610.c
deleted file mode 100644
index 0d2800d92b..0000000000
--- a/libs/libsndfile/src/gsm610.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "wav_w64.h"
-#include "GSM610/gsm.h"
-
-#define	GSM610_BLOCKSIZE		33
-#define	GSM610_SAMPLES			160
-
-typedef struct gsm610_tag
-{	int				blocks ;
-	int				blockcount, samplecount ;
-	int				samplesperblock, blocksize ;
-
-	int				(*decode_block)	(SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ;
-	int				(*encode_block)	(SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ;
-
-	short			samples [WAV_W64_GSM610_SAMPLES] ;
-	unsigned char	block [WAV_W64_GSM610_BLOCKSIZE] ;
-
-	/* Damn I hate typedef-ed pointers; yes, gsm is a pointer type. */
-	gsm				gsm_data ;
-} GSM610_PRIVATE ;
-
-static sf_count_t	gsm610_read_s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_read_i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	gsm610_write_s	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_write_i	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	gsm610_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static	int gsm610_read_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) ;
-static	int gsm610_write_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len) ;
-
-static	int	gsm610_decode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static	int	gsm610_encode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-
-static	int	gsm610_wav_decode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static	int	gsm610_wav_encode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-
-static sf_count_t	gsm610_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int	gsm610_close	(SF_PRIVATE *psf) ;
-
-/*============================================================================================
-** WAV GSM610 initialisation function.
-*/
-
-int
-gsm610_init	(SF_PRIVATE *psf)
-{	GSM610_PRIVATE	*pgsm610 ;
-	int		true_flag = 1 ;
-
-	if (psf->codec_data != NULL)
-	{	psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	psf->sf.seekable = SF_FALSE ;
-
-	if ((pgsm610 = calloc (1, sizeof (GSM610_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = pgsm610 ;
-
-	memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ;
-
-/*============================================================
-
-Need separate gsm_data structs for encode and decode.
-
-============================================================*/
-
-	if ((pgsm610->gsm_data = gsm_create ()) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	switch (SF_CONTAINER (psf->sf.format))
-	{	case SF_FORMAT_WAV :
-		case SF_FORMAT_WAVEX :
-		case SF_FORMAT_W64 :
-			gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ;
-
-			pgsm610->encode_block = gsm610_wav_encode_block ;
-			pgsm610->decode_block = gsm610_wav_decode_block ;
-
-			pgsm610->samplesperblock = WAV_W64_GSM610_SAMPLES ;
-			pgsm610->blocksize = WAV_W64_GSM610_BLOCKSIZE ;
-			break ;
-
-		case SF_FORMAT_AIFF :
-		case SF_FORMAT_RAW :
-			pgsm610->encode_block = gsm610_encode_block ;
-			pgsm610->decode_block = gsm610_decode_block ;
-
-			pgsm610->samplesperblock = GSM610_SAMPLES ;
-			pgsm610->blocksize = GSM610_BLOCKSIZE ;
-			break ;
-
-		default :
-			return SFE_INTERNAL ;
-			break ;
-		} ;
-
-	if (psf->file.mode == SFM_READ)
-	{	if (psf->datalength % pgsm610->blocksize == 0)
-			pgsm610->blocks = psf->datalength / pgsm610->blocksize ;
-		else if (psf->datalength % pgsm610->blocksize == 1 && pgsm610->blocksize == GSM610_BLOCKSIZE)
-		{	/*
-			**	Weird AIFF specific case.
-			**	AIFF chunks must be at an even offset from the start of file and
-			**	GSM610_BLOCKSIZE is odd which can result in an odd length SSND
-			**	chunk. The SSND chunk then gets padded on write which means that
-			**	when it is read the datalength is too big by 1.
-			*/
-			pgsm610->blocks = psf->datalength / pgsm610->blocksize ;
-			}
-		else
-		{	psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ;
-			pgsm610->blocks = psf->datalength / pgsm610->blocksize + 1 ;
-			} ;
-
-		psf->sf.frames = pgsm610->samplesperblock * pgsm610->blocks ;
-
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-		pgsm610->decode_block (psf, pgsm610) ;	/* Read first block. */
-
-		psf->read_short		= gsm610_read_s ;
-		psf->read_int		= gsm610_read_i ;
-		psf->read_float		= gsm610_read_f ;
-		psf->read_double	= gsm610_read_d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	pgsm610->blockcount = 0 ;
-		pgsm610->samplecount = 0 ;
-
-		psf->write_short	= gsm610_write_s ;
-		psf->write_int		= gsm610_write_i ;
-		psf->write_float	= gsm610_write_f ;
-		psf->write_double	= gsm610_write_d ;
-		} ;
-
-	psf->codec_close = gsm610_close ;
-
-	psf->seek = gsm610_seek ;
-
-	psf->filelength = psf_get_filelen (psf) ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	return 0 ;
-} /* gsm610_init */
-
-/*============================================================================================
-** GSM 6.10 Read Functions.
-*/
-
-static int
-gsm610_wav_decode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{	int	k ;
-
-	pgsm610->blockcount ++ ;
-	pgsm610->samplecount = 0 ;
-
-	if (pgsm610->blockcount > pgsm610->blocks)
-	{	memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ;
-
-	if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0)
-	{	psf_log_printf (psf, "Error from WAV gsm_decode() on frame : %d\n", pgsm610->blockcount) ;
-		return 0 ;
-		} ;
-
-	if (gsm_decode (pgsm610->gsm_data, pgsm610->block + (WAV_W64_GSM610_BLOCKSIZE + 1) / 2, pgsm610->samples + WAV_W64_GSM610_SAMPLES / 2) < 0)
-	{	psf_log_printf (psf, "Error from WAV gsm_decode() on frame : %d.5\n", pgsm610->blockcount) ;
-		return 0 ;
-		} ;
-
-	return 1 ;
-} /* gsm610_wav_decode_block */
-
-static int
-gsm610_decode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{	int	k ;
-
-	pgsm610->blockcount ++ ;
-	pgsm610->samplecount = 0 ;
-
-	if (pgsm610->blockcount > pgsm610->blocks)
-	{	memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, GSM610_BLOCKSIZE) ;
-
-	if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0)
-	{	psf_log_printf (psf, "Error from standard gsm_decode() on frame : %d\n", pgsm610->blockcount) ;
-		return 0 ;
-		} ;
-
-	return 1 ;
-} /* gsm610_decode_block */
-
-static int
-gsm610_read_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len)
-{	int	count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	if (pgsm610->blockcount >= pgsm610->blocks && pgsm610->samplecount >= pgsm610->samplesperblock)
-		{	memset (ptr + indx, 0, (len - indx) * sizeof (short)) ;
-			return total ;
-			} ;
-
-		if (pgsm610->samplecount >= pgsm610->samplesperblock)
-			pgsm610->decode_block (psf, pgsm610) ;
-
-		count = pgsm610->samplesperblock - pgsm610->samplecount ;
-		count = (len - indx > count) ? count : len - indx ;
-
-		memcpy (&(ptr [indx]), &(pgsm610->samples [pgsm610->samplecount]), count * sizeof (short)) ;
-		indx += count ;
-		pgsm610->samplecount += count ;
-		total = indx ;
-		} ;
-
-	return total ;
-} /* gsm610_read_block */
-
-static sf_count_t
-gsm610_read_s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	GSM610_PRIVATE 	*pgsm610 ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x1000000 : (int) len ;
-
-		count = gsm610_read_block (psf, pgsm610, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* gsm610_read_s */
-
-static sf_count_t
-gsm610_read_i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = sptr [k] << 16 ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* gsm610_read_i */
-
-static sf_count_t
-gsm610_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * sptr [k] ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* gsm610_read_f */
-
-static sf_count_t
-gsm610_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * sptr [k] ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* gsm610_read_d */
-
-static sf_count_t
-gsm610_seek	(SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{	GSM610_PRIVATE *pgsm610 ;
-	int			newblock, newsample ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	if (psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	if (offset == 0)
-	{	int true_flag = 1 ;
-
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		pgsm610->blockcount = 0 ;
-
-		gsm_init (pgsm610->gsm_data) ;
-		if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAV ||
-				(SF_CONTAINER (psf->sf.format)) == SF_FORMAT_W64)
-			gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ;
-
-		pgsm610->decode_block (psf, pgsm610) ;
-		pgsm610->samplecount = 0 ;
-		return 0 ;
-		} ;
-
-	if (offset < 0 || offset > pgsm610->blocks * pgsm610->samplesperblock)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	newblock	= offset / pgsm610->samplesperblock ;
-	newsample	= offset % pgsm610->samplesperblock ;
-
-	if (psf->file.mode == SFM_READ)
-	{	if (psf->read_current != newblock * pgsm610->samplesperblock + newsample)
-		{	psf_fseek (psf, psf->dataoffset + newblock * pgsm610->samplesperblock, SEEK_SET) ;
-			pgsm610->blockcount = newblock ;
-			pgsm610->decode_block (psf, pgsm610) ;
-			pgsm610->samplecount = newsample ;
-			} ;
-
-		return newblock * pgsm610->samplesperblock + newsample ;
-		} ;
-
-	/* What to do about write??? */
-	psf->error = SFE_BAD_SEEK ;
-	return	PSF_SEEK_ERROR ;
-} /* gsm610_seek */
-
-/*==========================================================================================
-** GSM 6.10 Write Functions.
-*/
-
-static int
-gsm610_encode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{	int k ;
-
-	/* Encode the samples. */
-	gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ;
-
-	/* Write the block to disk. */
-	if ((k = psf_fwrite (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, GSM610_BLOCKSIZE) ;
-
-	pgsm610->samplecount = 0 ;
-	pgsm610->blockcount ++ ;
-
-	/* Set samples to zero for next block. */
-	memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-
-	return 1 ;
-} /* gsm610_encode_block */
-
-static int
-gsm610_wav_encode_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{	int k ;
-
-	/* Encode the samples. */
-	gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ;
-	gsm_encode (pgsm610->gsm_data, pgsm610->samples+WAV_W64_GSM610_SAMPLES / 2, pgsm610->block+WAV_W64_GSM610_BLOCKSIZE / 2) ;
-
-	/* Write the block to disk. */
-	if ((k = psf_fwrite (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ;
-
-	pgsm610->samplecount = 0 ;
-	pgsm610->blockcount ++ ;
-
-	/* Set samples to zero for next block. */
-	memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-
-	return 1 ;
-} /* gsm610_wav_encode_block */
-
-static int
-gsm610_write_block	(SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len)
-{	int		count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	count = pgsm610->samplesperblock - pgsm610->samplecount ;
-
-		if (count > len - indx)
-			count = len - indx ;
-
-		memcpy (&(pgsm610->samples [pgsm610->samplecount]), &(ptr [indx]), count * sizeof (short)) ;
-		indx += count ;
-		pgsm610->samplecount += count ;
-		total = indx ;
-
-		if (pgsm610->samplecount >= pgsm610->samplesperblock)
-			pgsm610->encode_block (psf, pgsm610) ;
-		} ;
-
-	return total ;
-} /* gsm610_write_block */
-
-static sf_count_t
-gsm610_write_s	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	GSM610_PRIVATE 	*pgsm610 ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = gsm610_write_block (psf, pgsm610, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* gsm610_write_s */
-
-static sf_count_t
-gsm610_write_i	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = ptr [total + k] >> 16 ;
-		count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		} ;
-	return total ;
-} /* gsm610_write_i */
-
-static sf_count_t
-gsm610_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		} ;
-	return total ;
-} /* gsm610_write_f */
-
-static sf_count_t
-gsm610_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	GSM610_PRIVATE *pgsm610 ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount = 0, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-		total += count ;
-		len -= writecount ;
-		} ;
-	return total ;
-} /* gsm610_write_d */
-
-static int
-gsm610_close	(SF_PRIVATE *psf)
-{	GSM610_PRIVATE *pgsm610 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-
-	pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	/*	If a block has been partially assembled, write it out
-		**	as the final block.
-		*/
-
-		if (pgsm610->samplecount && pgsm610->samplecount < pgsm610->samplesperblock)
-			pgsm610->encode_block (psf, pgsm610) ;
-		} ;
-
-	if (pgsm610->gsm_data)
-		gsm_destroy (pgsm610->gsm_data) ;
-
-	return 0 ;
-} /* gsm610_close */
-
diff --git a/libs/libsndfile/src/htk.c b/libs/libsndfile/src/htk.c
deleted file mode 100644
index 25390f1dc1..0000000000
--- a/libs/libsndfile/src/htk.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define	SFE_HTK_BAD_FILE_LEN 	1666
-#define	SFE_HTK_NOT_WAVEFORM	1667
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		htk_close		(SF_PRIVATE *psf) ;
-
-static int		htk_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		htk_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-htk_open	(SF_PRIVATE *psf)
-{	int		subformat ;
-	int		error = 0 ;
-
-	if (psf->is_pipe)
-		return SFE_HTK_NO_PIPE ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = htk_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_HTK)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_BIG ;
-
-		if (htk_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = htk_write_header ;
-		} ;
-
-	psf->container_close = htk_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_16 :	/* 16-bit linear PCM. */
-				error = pcm_init (psf) ;
-				break ;
-
-		default : break ;
-		} ;
-
-	return error ;
-} /* htk_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-htk_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		htk_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* htk_close */
-
-static int
-htk_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int			sample_count, sample_period ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-		psf->filelength = psf_get_filelen (psf) ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	if (psf->filelength > 12)
-		sample_count = (psf->filelength - 12) / 2 ;
-	else
-		sample_count = 0 ;
-
-	sample_period = 10000000 / psf->sf.samplerate ;
-
-	psf_binheader_writef (psf, "E444", sample_count, sample_period, 0x20000) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* htk_write_header */
-
-/*
-** Found the following info in a comment block within Bill Schottstaedt's
-** sndlib library.
-**
-** HTK format files consist of a contiguous sequence of samples preceded by a
-** header. Each sample is a vector of either 2-byte integers or 4-byte floats.
-** 2-byte integers are used for compressed forms as described below and for
-** vector quantised data as described later in section 5.11. HTK format data
-** files can also be used to store speech waveforms as described in section 5.8.
-**
-** The HTK file format header is 12 bytes long and contains the following data
-**   nSamples   -- number of samples in file (4-byte integer)
-**   sampPeriod -- sample period in 100ns units (4-byte integer)
-**   sampSize   -- number of bytes per sample (2-byte integer)
-**   parmKind   -- a code indicating the sample kind (2-byte integer)
-**
-** The parameter kind  consists of a 6 bit code representing the basic
-** parameter kind plus additional bits for each of the possible qualifiers.
-** The basic parameter kind codes are
-**
-**  0    WAVEFORM    sampled waveform
-**  1    LPC         linear prediction filter coefficients
-**  2    LPREFC      linear prediction reflection coefficients
-**  3    LPCEPSTRA   LPC cepstral coefficients
-**  4    LPDELCEP    LPC cepstra plus delta coefficients
-**  5    IREFC       LPC reflection coef in 16 bit integer format
-**  6    MFCC        mel-frequency cepstral coefficients
-**  7    FBANK       log mel-filter bank channel outputs
-**  8    MELSPEC     linear mel-filter bank channel outputs
-**  9    USER        user defined sample kind
-**  10   DISCRETE    vector quantised data
-**
-** and the bit-encoding for the qualifiers (in octal) is
-**   _E   000100      has energy
-**   _N   000200      absolute energy suppressed
-**   _D   000400      has delta coefficients
-**   _A   001000      has acceleration coefficients
-**   _C   002000      is compressed
-**   _Z   004000      has zero mean static coef.
-**   _K   010000      has CRC checksum
-**   _O   020000      has 0'th cepstral coef.
-*/
-
-static int
-htk_read_header (SF_PRIVATE *psf)
-{	int		sample_count, sample_period, marker ;
-
-	psf_binheader_readf (psf, "pE444", 0, &sample_count, &sample_period, &marker) ;
-
-	if (2 * sample_count + 12 != psf->filelength)
-		return SFE_HTK_BAD_FILE_LEN ;
-
-	if (marker != 0x20000)
-		return SFE_HTK_NOT_WAVEFORM ;
-
-	psf->sf.channels = 1 ;
-
-	if (sample_period > 0)
-	{	psf->sf.samplerate = 10000000 / sample_period ;
-		psf_log_printf (psf, "HTK Waveform file\n  Sample Count  : %d\n  Sample Period : %d => %d Hz\n",
-					sample_count, sample_period, psf->sf.samplerate) ;
-		}
-	else
-	{	psf->sf.samplerate = 16000 ;
-		psf_log_printf (psf, "HTK Waveform file\n  Sample Count  : %d\n  Sample Period : %d (should be > 0) => Guessed sample rate %d Hz\n",
-					sample_count, sample_period, psf->sf.samplerate) ;
-		} ;
-
-	psf->sf.format = SF_FORMAT_HTK | SF_FORMAT_PCM_16 ;
-	psf->bytewidth = 2 ;
-
-	/* HTK always has a 12 byte header. */
-	psf->dataoffset = 12 ;
-	psf->endian = SF_ENDIAN_BIG ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-	if (! psf->sf.frames && psf->blockwidth)
-		psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	return 0 ;
-} /* htk_read_header */
-
diff --git a/libs/libsndfile/src/id3.c b/libs/libsndfile/src/id3.c
deleted file mode 100644
index 2fd0a0b971..0000000000
--- a/libs/libsndfile/src/id3.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-** Copyright (C) 2010-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-int
-id3_skip (SF_PRIVATE * psf)
-{	unsigned char	buf [10] ;
-
-	memset (buf, 0, sizeof (buf)) ;
-	psf_binheader_readf (psf, "pb", 0, buf, 10) ;
-
-	if (buf [0] == 'I' && buf [1] == 'D' && buf [2] == '3')
-	{	int	offset = buf [6] & 0x7f ;
-		offset = (offset << 7) | (buf [7] & 0x7f) ;
-		offset = (offset << 7) | (buf [8] & 0x7f) ;
-		offset = (offset << 7) | (buf [9] & 0x7f) ;
-
-		psf_log_printf (psf, "ID3 length : %d\n--------------------\n", offset) ;
-
-		/* Never want to jump backwards in a file. */
-		if (offset < 0)
-			return 0 ;
-
-		/* Calculate new file offset and position ourselves there. */
-		psf->fileoffset += offset + 10 ;
-		psf_binheader_readf (psf, "p", psf->fileoffset) ;
-
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* id3_skip */
diff --git a/libs/libsndfile/src/ima_adpcm.c b/libs/libsndfile/src/ima_adpcm.c
deleted file mode 100644
index 0ba4513758..0000000000
--- a/libs/libsndfile/src/ima_adpcm.c
+++ /dev/null
@@ -1,948 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-typedef struct IMA_ADPCM_PRIVATE_tag
-{	int 			(*decode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ;
-	int 			(*encode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ;
-
-	int				channels, blocksize, samplesperblock, blocks ;
-	int				blockcount, samplecount ;
-	int				previous [2] ;
-	int				stepindx [2] ;
-	unsigned char	*block ;
-	short			*samples ;
-	short			data	[] ; /* ISO C99 struct flexible array. */
-} IMA_ADPCM_PRIVATE ;
-
-/*============================================================================================
-** Predefined IMA ADPCM data.
-*/
-
-static int ima_indx_adjust [16] =
-{	-1, -1, -1, -1,		/* +0 - +3, decrease the step size */
-	+2, +4, +6, +8,		/* +4 - +7, increase the step size */
-	-1, -1, -1, -1,		/* -0 - -3, decrease the step size */
-	+2, +4, +6, +8,		/* -4 - -7, increase the step size */
-} ;
-
-static int ima_step_size [89] =
-{	7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
-	50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230,
-	253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963,
-	1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
-	3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442,
-	11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
-	32767
-} ;
-
-static int ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-static int ima_writer_init (SF_PRIVATE *psf, int blockalign) ;
-
-static int ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) ;
-static int ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len) ;
-
-static sf_count_t ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t	ima_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int	ima_close	(SF_PRIVATE *psf) ;
-
-static int wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-
-/*-static int aiff_ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;-*/
-static int aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-
-
-static inline int
-clamp_ima_step_index (int indx)
-{	if (indx < 0)
-		return 0 ;
-	if (indx >= ARRAY_LEN (ima_step_size))
-		return ARRAY_LEN (ima_step_size) - 1 ;
-
-	return indx ;
-} /* clamp_ima_step_index */
-
-/*============================================================================================
-** IMA ADPCM Reader initialisation function.
-*/
-
-int
-wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{	int error ;
-
-	if (psf->codec_data != NULL)
-	{	psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-		if ((error = ima_reader_init (psf, blockalign, samplesperblock)))
-			return error ;
-
-	if (psf->file.mode == SFM_WRITE)
-		if ((error = ima_writer_init (psf, blockalign)))
-			return error ;
-
-	psf->codec_close = ima_close ;
-	psf->seek = ima_seek ;
-
-	return 0 ;
-} /* wav_w64_ima_init */
-
-int
-aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{	int error ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-		if ((error = ima_reader_init (psf, blockalign, samplesperblock)))
-			return error ;
-
-	if (psf->file.mode == SFM_WRITE)
-		if ((error = ima_writer_init (psf, blockalign)))
-			return error ;
-
-	psf->codec_close = ima_close ;
-
-	return 0 ;
-} /* aiff_ima_init */
-
-static int
-ima_close	(SF_PRIVATE *psf)
-{	IMA_ADPCM_PRIVATE *pima ;
-
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	/*	If a block has been partially assembled, write it out
-		**	as the final block.
-		*/
-		if (pima->samplecount && pima->samplecount < pima->samplesperblock)
-			pima->encode_block (psf, pima) ;
-
-		psf->sf.frames = pima->samplesperblock * pima->blockcount / psf->sf.channels ;
-		} ;
-
-	return 0 ;
-} /* ima_close */
-
-/*============================================================================================
-** IMA ADPCM Read Functions.
-*/
-
-static int
-ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{	IMA_ADPCM_PRIVATE	*pima ;
-	int		pimasize, count ;
-
-	if (psf->file.mode != SFM_READ)
-		return SFE_BAD_MODE_RW ;
-
-	pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign * psf->sf.channels + 3 * psf->sf.channels * samplesperblock ;
-
-	if (! (pima = calloc (1, pimasize)))
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = (void*) pima ;
-
-	pima->samples	= pima->data ;
-	pima->block		= (unsigned char*) (pima->data + samplesperblock * psf->sf.channels) ;
-
-	pima->channels			= psf->sf.channels ;
-	pima->blocksize			= blockalign ;
-	pima->samplesperblock	= samplesperblock ;
-
-	psf->filelength = psf_get_filelen (psf) ;
-	psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-
-	if (pima->blocksize == 0)
-	{	psf_log_printf (psf, "*** Error : pima->blocksize should not be zero.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->datalength % pima->blocksize)
-		pima->blocks = psf->datalength / pima->blocksize + 1 ;
-	else
-		pima->blocks = psf->datalength / pima->blocksize ;
-
-	switch (SF_CONTAINER (psf->sf.format))
-	{	case SF_FORMAT_WAV :
-		case SF_FORMAT_W64 :
-				count = 2 * (pima->blocksize - 4 * pima->channels) / pima->channels + 1 ;
-
-				if (pima->samplesperblock != count)
-				{	psf_log_printf (psf, "*** Error : samplesperblock should be %d.\n", count) ;
-					return SFE_INTERNAL ;
-					} ;
-
-				pima->decode_block = wav_w64_ima_decode_block ;
-
-				psf->sf.frames = pima->samplesperblock * pima->blocks ;
-				break ;
-
-		case SF_FORMAT_AIFF :
-				psf_log_printf (psf, "still need to check block count\n") ;
-				pima->decode_block = aiff_ima_decode_block ;
-				psf->sf.frames = pima->samplesperblock * pima->blocks / pima->channels ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ;
-				return SFE_INTERNAL ;
-		} ;
-
-	pima->decode_block (psf, pima) ;	/* Read first block. */
-
-	psf->read_short		= ima_read_s ;
-	psf->read_int		= ima_read_i ;
-	psf->read_float		= ima_read_f ;
-	psf->read_double	= ima_read_d ;
-
-	return 0 ;
-} /* ima_reader_init */
-
-static int
-aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{	unsigned char *blockdata ;
-	int		chan, k, diff, bytecode, predictor ;
-	short	step, stepindx, *sampledata ;
-
-static int count = 0 ;
-count ++ ;
-
-	pima->blockcount += pima->channels ;
-	pima->samplecount = 0 ;
-
-	if (pima->blockcount > pima->blocks)
-	{	memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pima->block, 1, pima->blocksize * pima->channels, psf)) != pima->blocksize * pima->channels)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ;
-
-	/* Read and check the block header. */
-	for (chan = 0 ; chan < pima->channels ; chan++)
-	{	blockdata = pima->block + chan * 34 ;
-		sampledata = pima->samples + chan ;
-
-		predictor = (blockdata [0] << 8) | (blockdata [1] & 0x80) ;
-
-		stepindx = blockdata [1] & 0x7F ;
-		stepindx = clamp_ima_step_index (stepindx) ;
-
-		/*
-		**	Pull apart the packed 4 bit samples and store them in their
-		**	correct sample positions.
-		*/
-		for (k = 0 ; k < pima->blocksize - 2 ; k++)
-		{	bytecode = blockdata [k + 2] ;
-			sampledata [pima->channels * (2 * k + 0)] = bytecode & 0xF ;
-			sampledata [pima->channels * (2 * k + 1)] = (bytecode >> 4) & 0xF ;
-			} ;
-
-		/* Decode the encoded 4 bit samples. */
-		for (k = 0 ; k < pima->samplesperblock ; k ++)
-		{	step = ima_step_size [stepindx] ;
-
-			bytecode = pima->samples [pima->channels * k + chan] ;
-
-			stepindx += ima_indx_adjust [bytecode] ;
-			stepindx = clamp_ima_step_index (stepindx) ;
-
-			diff = step >> 3 ;
-			if (bytecode & 1)	diff += step >> 2 ;
-			if (bytecode & 2)	diff += step >> 1 ;
-			if (bytecode & 4)	diff += step ;
-			if (bytecode & 8)	diff = -diff ;
-
-			predictor += diff ;
-			if (predictor < -32768)
-				predictor = -32768 ;
-			else if (predictor > 32767)
-				predictor = 32767 ;
-
-			pima->samples [pima->channels * k + chan] = predictor ;
-			} ;
-		} ;
-
-	return 1 ;
-} /* aiff_ima_decode_block */
-
-static int
-aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{	int		chan, k, step, diff, vpdiff, blockindx, indx ;
-	short	bytecode, mask ;
-
-	/* Encode the block header. */
-	for (chan = 0 ; chan < pima->channels ; chan ++)
-	{	blockindx = chan * pima->blocksize ;
-
-		pima->block [blockindx] = (pima->samples [chan] >> 8) & 0xFF ;
-		pima->block [blockindx + 1] = (pima->samples [chan] & 0x80) + (pima->stepindx [chan] & 0x7F) ;
-
-		pima->previous [chan] = pima->samples [chan] ;
-		} ;
-
-	/* Encode second and later samples for every block as a 4 bit value. */
-	for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-	{	chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-		diff = pima->samples [k] - pima->previous [chan] ;
-
-		bytecode = 0 ;
-		step = ima_step_size [pima->stepindx [chan]] ;
-		vpdiff = step >> 3 ;
-		if (diff < 0)
-		{	bytecode = 8 ;
-			diff = -diff ;
-			} ;
-		mask = 4 ;
-		while (mask)
-		{	if (diff >= step)
-			{	bytecode |= mask ;
-				diff -= step ;
-				vpdiff += step ;
-				} ;
-			step >>= 1 ;
-			mask >>= 1 ;
-			} ;
-
-		if (bytecode & 8)
-			pima->previous [chan] -= vpdiff ;
-		else
-			pima->previous [chan] += vpdiff ;
-
-		if (pima->previous [chan] > 32767)
-			pima->previous [chan] = 32767 ;
-		else if (pima->previous [chan] < -32768)
-			pima->previous [chan] = -32768 ;
-
-		pima->stepindx [chan] += ima_indx_adjust [bytecode] ;
-
-		pima->stepindx [chan] = clamp_ima_step_index (pima->stepindx [chan]) ;
-		pima->samples [k] = bytecode ;
-		} ;
-
-	/* Pack the 4 bit encoded samples. */
-
-	for (chan = 0 ; chan < pima->channels ; chan ++)
-	{	for (indx = pima->channels ; indx < pima->channels * pima->samplesperblock ; indx += 2 * pima->channels)
-		{	blockindx = chan * pima->blocksize + 2 + indx / 2 ;
-
-			pima->block [blockindx] = pima->samples [indx] & 0x0F ;
-			pima->block [blockindx] |= (pima->samples [indx + chan] << 4) & 0xF0 ;
-			} ;
-		} ;
-
-	/* Write the block to disk. */
-
-	if ((k = psf_fwrite (pima->block, 1, pima->channels * pima->blocksize, psf)) != pima->channels * pima->blocksize)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->channels * pima->blocksize) ;
-
-	memset (pima->samples, 0, pima->channels * pima->samplesperblock * sizeof (short)) ;
-	pima->samplecount = 0 ;
-	pima->blockcount ++ ;
-
-	return 1 ;
-} /* aiff_ima_encode_block */
-
-static int
-wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{	int		chan, k, predictor, blockindx, indx, indxstart, diff ;
-	short	step, bytecode, stepindx [2] ;
-
-	pima->blockcount ++ ;
-	pima->samplecount = 0 ;
-
-	if (pima->blockcount > pima->blocks)
-	{	memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pima->block, 1, pima->blocksize, psf)) != pima->blocksize)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ;
-
-	/* Read and check the block header. */
-
-	for (chan = 0 ; chan < pima->channels ; chan++)
-	{	predictor = pima->block [chan*4] | (pima->block [chan*4+1] << 8) ;
-		if (predictor & 0x8000)
-			predictor -= 0x10000 ;
-
-		stepindx [chan] = pima->block [chan*4+2] ;
-		stepindx [chan] = clamp_ima_step_index (stepindx [chan]) ;
-
-
-		if (pima->block [chan*4+3] != 0)
-			psf_log_printf (psf, "IMA ADPCM synchronisation error.\n") ;
-
-		pima->samples [chan] = predictor ;
-		} ;
-
-	/*
-	**	Pull apart the packed 4 bit samples and store them in their
-	**	correct sample positions.
-	*/
-
-	blockindx = 4 * pima->channels ;
-
-	indxstart = pima->channels ;
-	while (blockindx < pima->blocksize)
-	{	for (chan = 0 ; chan < pima->channels ; chan++)
-		{	indx = indxstart + chan ;
-			for (k = 0 ; k < 4 ; k++)
-			{	bytecode = pima->block [blockindx++] ;
-				pima->samples [indx] = bytecode & 0x0F ;
-				indx += pima->channels ;
-				pima->samples [indx] = (bytecode >> 4) & 0x0F ;
-				indx += pima->channels ;
-				} ;
-			} ;
-		indxstart += 8 * pima->channels ;
-		} ;
-
-	/* Decode the encoded 4 bit samples. */
-
-	for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-	{	chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-		bytecode = pima->samples [k] & 0xF ;
-
-		step = ima_step_size [stepindx [chan]] ;
-		predictor = pima->samples [k - pima->channels] ;
-
-		diff = step >> 3 ;
-		if (bytecode & 1)
-			diff += step >> 2 ;
-		if (bytecode & 2)
-			diff += step >> 1 ;
-		if (bytecode & 4)
-			diff += step ;
-		if (bytecode & 8)
-			diff = -diff ;
-
-		predictor += diff ;
-
-		if (predictor > 32767)
-			predictor = 32767 ;
-		else if (predictor < -32768)
-			predictor = -32768 ;
-
-		stepindx [chan] += ima_indx_adjust [bytecode] ;
-		stepindx [chan] = clamp_ima_step_index (stepindx [chan]) ;
-
-		pima->samples [k] = predictor ;
-		} ;
-
-	return 1 ;
-} /* wav_w64_ima_decode_block */
-
-static int
-wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{	int		chan, k, step, diff, vpdiff, blockindx, indx, indxstart ;
-	short	bytecode, mask ;
-
-	/* Encode the block header. */
-	for (chan = 0 ; chan < pima->channels ; chan++)
-	{	pima->block [chan*4]	= pima->samples [chan] & 0xFF ;
-		pima->block [chan*4+1]	= (pima->samples [chan] >> 8) & 0xFF ;
-
-		pima->block [chan*4+2] = pima->stepindx [chan] ;
-		pima->block [chan*4+3] = 0 ;
-
-		pima->previous [chan] = pima->samples [chan] ;
-		} ;
-
-	/* Encode the samples as 4 bit. */
-
-	for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-	{	chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-		diff = pima->samples [k] - pima->previous [chan] ;
-
-		bytecode = 0 ;
-		step = ima_step_size [pima->stepindx [chan]] ;
-		vpdiff = step >> 3 ;
-		if (diff < 0)
-		{	bytecode = 8 ;
-			diff = -diff ;
-			} ;
-		mask = 4 ;
-		while (mask)
-		{	if (diff >= step)
-			{	bytecode |= mask ;
-				diff -= step ;
-				vpdiff += step ;
-				} ;
-			step >>= 1 ;
-			mask >>= 1 ;
-			} ;
-
-		if (bytecode & 8)
-			pima->previous [chan] -= vpdiff ;
-		else
-			pima->previous [chan] += vpdiff ;
-
-		if (pima->previous [chan] > 32767)
-			pima->previous [chan] = 32767 ;
-		else if (pima->previous [chan] < -32768)
-			pima->previous [chan] = -32768 ;
-
-		pima->stepindx [chan] += ima_indx_adjust [bytecode] ;
-		pima->stepindx [chan] = clamp_ima_step_index (pima->stepindx [chan]) ;
-
-		pima->samples [k] = bytecode ;
-		} ;
-
-	/* Pack the 4 bit encoded samples. */
-
-	blockindx = 4 * pima->channels ;
-
-	indxstart = pima->channels ;
-	while (blockindx < pima->blocksize)
-	{	for (chan = 0 ; chan < pima->channels ; chan++)
-		{	indx = indxstart + chan ;
-			for (k = 0 ; k < 4 ; k++)
-			{	pima->block [blockindx] = pima->samples [indx] & 0x0F ;
-				indx += pima->channels ;
-				pima->block [blockindx] |= (pima->samples [indx] << 4) & 0xF0 ;
-				indx += pima->channels ;
-				blockindx ++ ;
-				} ;
-			} ;
-		indxstart += 8 * pima->channels ;
-		} ;
-
-	/* Write the block to disk. */
-
-	if ((k = psf_fwrite (pima->block, 1, pima->blocksize, psf)) != pima->blocksize)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->blocksize) ;
-
-	memset (pima->samples, 0, pima->samplesperblock * sizeof (short)) ;
-	pima->samplecount = 0 ;
-	pima->blockcount ++ ;
-
-	return 1 ;
-} /* wav_w64_ima_encode_block */
-
-static int
-ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len)
-{	int		count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	if (pima->blockcount >= pima->blocks && pima->samplecount >= pima->samplesperblock)
-		{	memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ;
-			return total ;
-			} ;
-
-		if (pima->samplecount >= pima->samplesperblock)
-			pima->decode_block (psf, pima) ;
-
-		count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
-		count = (len - indx > count) ? count : len - indx ;
-
-		memcpy (&(ptr [indx]), &(pima->samples [pima->samplecount * pima->channels]), count * sizeof (short)) ;
-		indx += count ;
-		pima->samplecount += count / pima->channels ;
-		total = indx ;
-		} ;
-
-	return total ;
-} /* ima_read_block */
-
-static sf_count_t
-ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE 	*pima ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = ima_read_block (psf, pima, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_read_s */
-
-static sf_count_t
-ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = ima_read_block (psf, pima, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = ((int) sptr [k]) << 16 ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_read_i */
-
-static sf_count_t
-ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = ima_read_block (psf, pima, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (float) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_read_f */
-
-static sf_count_t
-ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = ima_read_block (psf, pima, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (double) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_read_d */
-
-static sf_count_t
-ima_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	IMA_ADPCM_PRIVATE *pima ;
-	int			newblock, newsample ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	if (psf->datalength < 0 || psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (offset == 0)
-	{	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		pima->blockcount = 0 ;
-		pima->decode_block (psf, pima) ;
-		pima->samplecount = 0 ;
-		return 0 ;
-		} ;
-
-	if (offset < 0 || offset > pima->blocks * pima->samplesperblock)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	newblock	= offset / pima->samplesperblock ;
-	newsample	= offset % pima->samplesperblock ;
-
-	if (mode == SFM_READ)
-	{	psf_fseek (psf, psf->dataoffset + newblock * pima->blocksize, SEEK_SET) ;
-		pima->blockcount = newblock ;
-		pima->decode_block (psf, pima) ;
-		pima->samplecount = newsample ;
-		}
-	else
-	{	/* What to do about write??? */
-		psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	return newblock * pima->samplesperblock + newsample ;
-} /* ima_seek */
-
-/*==========================================================================================
-** IMA ADPCM Write Functions.
-*/
-
-static int
-ima_writer_init (SF_PRIVATE *psf, int blockalign)
-{	IMA_ADPCM_PRIVATE	*pima ;
-	int					samplesperblock ;
-	unsigned int 		pimasize ;
-
-	if (psf->file.mode != SFM_WRITE)
-		return SFE_BAD_MODE_RW ;
-
-	samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-
-	pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
-
-	if ((pima = calloc (1, pimasize)) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = (void*) pima ;
-
-	pima->channels			= psf->sf.channels ;
-	pima->blocksize			= blockalign ;
-	pima->samplesperblock	= samplesperblock ;
-
-	pima->block		= (unsigned char*) pima->data ;
-	pima->samples	= (short*) (pima->data + blockalign) ;
-
-	pima->samplecount = 0 ;
-
-	switch (SF_CONTAINER (psf->sf.format))
-	{	case SF_FORMAT_WAV :
-		case SF_FORMAT_W64 :
-				pima->encode_block = wav_w64_ima_encode_block ;
-				break ;
-
-		case SF_FORMAT_AIFF :
-				pima->encode_block = aiff_ima_encode_block ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ;
-				return SFE_INTERNAL ;
-		} ;
-
-	psf->write_short	= ima_write_s ;
-	psf->write_int		= ima_write_i ;
-	psf->write_float	= ima_write_f ;
-	psf->write_double	= ima_write_d ;
-
-	return 0 ;
-} /* ima_writer_init */
-
-/*==========================================================================================
-*/
-
-static int
-ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len)
-{	int		count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
-
-		if (count > len - indx)
-			count = len - indx ;
-
-		memcpy (&(pima->samples [pima->samplecount * pima->channels]), &(ptr [total]), count * sizeof (short)) ;
-		indx += count ;
-		pima->samplecount += count / pima->channels ;
-		total = indx ;
-
-		if (pima->samplecount >= pima->samplesperblock)
-			pima->encode_block (psf, pima) ;
-		} ;
-
-	return total ;
-} /* ima_write_block */
-
-static sf_count_t
-ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE 	*pima ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	while (len)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = ima_write_block (psf, pima, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_write_s */
-
-static sf_count_t
-ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = ptr [total + k] >> 16 ;
-		count = ima_write_block (psf, pima, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_write_i */
-
-static sf_count_t
-ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = ima_write_block (psf, pima, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_write_f */
-
-static sf_count_t
-ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	IMA_ADPCM_PRIVATE *pima ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = ima_write_block (psf, pima, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* ima_write_d */
-
diff --git a/libs/libsndfile/src/ima_oki_adpcm.c b/libs/libsndfile/src/ima_oki_adpcm.c
deleted file mode 100644
index 26db9f65fb..0000000000
--- a/libs/libsndfile/src/ima_oki_adpcm.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-/* ADPCM: IMA, OKI <==> 16-bit PCM. */
-
-#include "sfconfig.h"
-
-#include <string.h>
-
-/* Set up for libsndfile environment: */
-#include "common.h"
-
-#include "ima_oki_adpcm.h"
-
-#define MIN_SAMPLE	-0x8000
-#define MAX_SAMPLE	0x7fff
-
-static int const ima_steps [] =	/* ~16-bit precision */
-{	7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
-	50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230,
-	253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963,
-	1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
-	3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442,
-	11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
-	32767
-} ;
-
-static int const oki_steps [] =	/* ~12-bit precision */
-{	256, 272, 304, 336, 368, 400, 448, 496, 544, 592, 656, 720, 800, 880, 960,
-	1056, 1168, 1280, 1408, 1552, 1712, 1888, 2080, 2288, 2512, 2768, 3040, 3344,
-	3680, 4048, 4464, 4912, 5392, 5936, 6528, 7184, 7904, 8704, 9568, 10528,
-	11584, 12736, 14016, 15408, 16960, 18656, 20512, 22576, 24832
-} ;
-
-static int const step_changes [] = { -1, -1, -1, -1, 2, 4, 6, 8 } ;
-
-void
-ima_oki_adpcm_init (IMA_OKI_ADPCM * state, IMA_OKI_ADPCM_TYPE type)
-{
-	memset (state, 0, sizeof (*state)) ;
-
-	if (type == IMA_OKI_ADPCM_TYPE_IMA)
-	{	state->max_step_index = ARRAY_LEN (ima_steps) - 1 ;
-		state->steps = ima_steps ;
-		state->mask = (~0) ;
-		}
-	else
-	{	state->max_step_index = ARRAY_LEN (oki_steps) - 1 ;
-		state->steps = oki_steps ;
-		state->mask = (~0) << 4 ;
-		} ;
-
-} /* ima_oki_adpcm_init */
-
-
-int
-adpcm_decode (IMA_OKI_ADPCM * state, int code)
-{	int s ;
-
-	s = ((code & 7) << 1) | 1 ;
-	s = ((state->steps [state->step_index] * s) >> 3) & state->mask ;
-
-	if (code & 8)
-		s = -s ;
-	s += state->last_output ;
-
-	if (s < MIN_SAMPLE || s > MAX_SAMPLE)
-	{	int grace ;
-
-		grace = (state->steps [state->step_index] >> 3) & state->mask ;
-
-		if (s < MIN_SAMPLE - grace || s > MAX_SAMPLE + grace)
-			state->errors ++ ;
-
-		s = s < MIN_SAMPLE ? MIN_SAMPLE : MAX_SAMPLE ;
-		} ;
-
-	state->step_index += step_changes [code & 7] ;
-	state->step_index = SF_MIN (SF_MAX (state->step_index, 0), state->max_step_index) ;
-	state->last_output = s ;
-
-	return s ;
-} /* adpcm_decode */
-
-int
-adpcm_encode (IMA_OKI_ADPCM * state, int sample)
-{	int delta, sign = 0, code ;
-
-	delta = sample - state->last_output ;
-
-	if (delta < 0)
-	{	sign = 8 ;
-		delta = -delta ;
-		} ;
-
-	code = 4 * delta / state->steps [state->step_index] ;
-	code = sign | SF_MIN (code, 7) ;
-	adpcm_decode (state, code) ; /* Update encoder state */
-
-	return code ;
-} /* adpcm_encode */
-
-
-void
-ima_oki_adpcm_decode_block	(IMA_OKI_ADPCM * state)
-{	unsigned char code ;
-	int k ;
-
-	for (k = 0 ; k < state->code_count ; k++)
-	{	code = state->codes [k] ;
-		state->pcm [2 * k] = adpcm_decode (state, code >> 4) ;
-		state->pcm [2 * k + 1] = adpcm_decode (state, code) ;
-		} ;
-
-	state->pcm_count = 2 * k ;
-} /* ima_oki_adpcm_decode_block */
-
-
-void
-ima_oki_adpcm_encode_block (IMA_OKI_ADPCM * state)
-{	unsigned char code ;
-	int k ;
-
-	/*
-	**	The codec expects an even number of input samples.
-	**
-	**	Samples should always be passed in even length blocks. If the last block to
-	**	be encoded is odd length, extend that block by one zero valued sample.
-	*/
-	if (state->pcm_count % 2 == 1)
-		state->pcm [state->pcm_count ++] = 0 ;
-
-	for (k = 0 ; k < state->pcm_count / 2 ; k++)
-	{	code = adpcm_encode (state, state->pcm [2 * k]) << 4 ;
-		code |= adpcm_encode (state, state->pcm [2 * k + 1]) ;
-		state->codes [k] = code ;
-		} ;
-
-	state->code_count = k ;
-} /* ima_oki_adpcm_encode_block */
-
-
-#ifdef TEST
-
-static const unsigned char test_codes [] =
-{	0x08, 0x08, 0x04, 0x7f, 0x72, 0xf7, 0x9f, 0x7c, 0xd7, 0xbc, 0x7a, 0xa7, 0xb8,
-	0x4b, 0x0b, 0x38, 0xf6, 0x9d, 0x7a, 0xd7, 0xbc, 0x7a, 0xd7, 0xa8, 0x6c, 0x81,
-	0x98, 0xe4, 0x0e, 0x7a, 0xd7, 0x9e, 0x7b, 0xc7, 0xab, 0x7a, 0x85, 0xc0, 0xb3,
-	0x8f, 0x58, 0xd7, 0xad, 0x7a, 0xd7, 0xad, 0x7a, 0x87, 0xd0, 0x2b, 0x0e, 0x48,
-	0xd7, 0xad, 0x78, 0xf7, 0xbc, 0x7a, 0xb7, 0xa8, 0x4b, 0x88, 0x18, 0xd5, 0x8d,
-	0x6a, 0xa4, 0x98, 0x08, 0x00, 0x80, 0x88,
-} ;
-
-static const short test_pcm [] =
-{	32, 0, 32, 0, 32, 320, 880, -336, 2304, 4192, -992, 10128, 5360, -16352,
-	30208, 2272, -31872, 14688, -7040, -32432, 14128, -1392, -15488, 22960,
-	1232, -1584, 21488, -240, 2576, -15360, 960, -1152, -30032, 10320, 1008,
-	-30032, 16528, 1008, -30032, 16528, -5200, -30592, 15968, 448, -30592,
-	15968, 448, -2368, 30960, 3024, -80, 8384, 704, -1616, -29168, -1232, 1872,
-	-32768, 13792, -1728, -32768, 13792, 4480, -32192, 14368, -7360, -32752,
-	13808, -1712, -21456, 16992, 1472, -1344, 26848, -1088, 2016, -17728, 208,
-	-2112, -32768, 1376, -1728, -32768, 13792, -1728, -32768, 13792, -1728,
-	-32768, 13792, -1728, -32768, 13792, -1728, -4544, 32767, -1377, 1727,
-	15823, -2113, 207, -27345, 591, -2513, -32768, 13792, -1728, -32768, 13792,
-	10688, -31632, 14928, -6800, -32192, 14368, -1152, -20896, 17552, 2032,
-	-784, 22288, 560, -2256, -4816, 2176, 64, -21120, 9920, 6816, -24224, 16128,
-	608, -13488, 9584, 272, -2544, 16, -2304, -192, 1728, -16, 1568, 128, -1184,
-} ;
-
-
-static void
-test_oki_adpcm (void)
-{
-	IMA_OKI_ADPCM adpcm ;
-	unsigned char code ;
-	int i, j ;
-
-	printf ("    Testing encoder          : ") ;
-	fflush (stdout) ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-	for (i = 0 ; i < ARRAY_LEN (test_codes) ; i++)
-		for (j = 0, code = test_codes [i] ; j < 2 ; j++, code <<= 4)
-			if (adpcm_decode (&adpcm, code >> 4) != test_pcm [2 * i + j])
-			{	printf ("\n\nFail at i = %d, j = %d.\n\n", i, j) ;
-				exit (1) ;
-				} ;
-
-	puts ("ok") ;
-
-	printf ("    Testing decoder          : ") ;
-	fflush (stdout) ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-	for (i = 0 ; i < ARRAY_LEN (test_pcm) ; i += j)
-	{	code = adpcm_encode (&adpcm, test_pcm [i]) ;
-		code = (code << 4) | adpcm_encode (&adpcm, test_pcm [i + 1]) ;
-		if (code != test_codes [i / 2])
-			{	printf ("\n\nFail at i = %d, %d should be %d\n\n", i, code, test_codes [i / 2]) ;
-				exit (1) ;
-				} ;
-		} ;
-
-	puts ("ok") ;
-} /* test_oki_adpcm */
-
-static void
-test_oki_adpcm_block (void)
-{
-	IMA_OKI_ADPCM adpcm ;
-	int k ;
-
-	if (ARRAY_LEN (adpcm.pcm) < ARRAY_LEN (test_pcm))
-	{	printf ("\n\nLine %d : ARRAY_LEN (adpcm->pcm) > ARRAY_LEN (test_pcm) (%d > %d).\n\n", __LINE__, ARRAY_LEN (adpcm.pcm), ARRAY_LEN (test_pcm)) ;
-		exit (1) ;
-		} ;
-
-	if (ARRAY_LEN (adpcm.codes) < ARRAY_LEN (test_codes))
-	{	printf ("\n\nLine %d : ARRAY_LEN (adcodes->codes) > ARRAY_LEN (test_codes).n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	printf ("    Testing block encoder    : ") ;
-	fflush (stdout) ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-	memcpy (adpcm.pcm, test_pcm, sizeof (adpcm.pcm [0]) * ARRAY_LEN (test_pcm)) ;
-	adpcm.pcm_count = ARRAY_LEN (test_pcm) ;
-	adpcm.code_count = 13 ;
-
-	ima_oki_adpcm_encode_block (&adpcm) ;
-
-	if (adpcm.code_count * 2 != ARRAY_LEN (test_pcm))
-	{	printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.code_count * 2, ARRAY_LEN (test_pcm)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (test_codes) ; k++)
-		if (adpcm.codes [k] != test_codes [k])
-		{	printf ("\n\nLine %d : Fail at k = %d, %d should be %d\n\n", __LINE__, k, adpcm.codes [k], test_codes [k]) ;
-			exit (1) ;
-			} ;
-
-	puts ("ok") ;
-
-	printf ("    Testing block decoder    : ") ;
-	fflush (stdout) ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-	memcpy (adpcm.codes, test_codes, sizeof (adpcm.codes [0]) * ARRAY_LEN (test_codes)) ;
-	adpcm.code_count = ARRAY_LEN (test_codes) ;
-	adpcm.pcm_count = 13 ;
-
-	ima_oki_adpcm_decode_block (&adpcm) ;
-
-	if (adpcm.pcm_count != 2 * ARRAY_LEN (test_codes))
-	{	printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.pcm_count, 2 * ARRAY_LEN (test_codes)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (test_pcm) ; k++)
-		if (adpcm.pcm [k] != test_pcm [k])
-		{	printf ("\n\nLine %d : Fail at i = %d, %d should be %d.\n\n", __LINE__, k, adpcm.pcm [k], test_pcm [k]) ;
-			exit (1) ;
-			} ;
-
-	puts ("ok") ;
-} /* test_oki_adpcm_block */
-
-int
-main (void)
-{
-	test_oki_adpcm () ;
-	test_oki_adpcm_block () ;
-
-	return 0 ;
-} /* main */
-
-#endif
diff --git a/libs/libsndfile/src/ima_oki_adpcm.h b/libs/libsndfile/src/ima_oki_adpcm.h
deleted file mode 100644
index 86241e7a2c..0000000000
--- a/libs/libsndfile/src/ima_oki_adpcm.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-/* ADPCM: IMA, OKI <==> 16-bit PCM. */
-
-
-#define		IMA_OKI_ADPCM_CODE_LEN	256
-#define		IMA_OKI_ADPCM_PCM_LEN	(IMA_OKI_ADPCM_CODE_LEN *2)
-
-typedef struct
-{
-	/* private: */
-	int mask ;
-	int last_output ;
-	int step_index ;
-	int max_step_index ;
-	int const * steps ;
-
-	/* public: */
-	int errors ;
-	int	code_count, pcm_count ;
-
-	unsigned char	codes [IMA_OKI_ADPCM_CODE_LEN] ;
-	short 			pcm [IMA_OKI_ADPCM_PCM_LEN] ;
-} IMA_OKI_ADPCM ;
-
-typedef enum
-{	IMA_OKI_ADPCM_TYPE_IMA,
-	IMA_OKI_ADPCM_TYPE_OKI
-} IMA_OKI_ADPCM_TYPE ;
-
-void ima_oki_adpcm_init		(IMA_OKI_ADPCM * state, IMA_OKI_ADPCM_TYPE type) ;
-
-int	adpcm_decode	(IMA_OKI_ADPCM * state, int /* 0..15 */ code) ;
-int	adpcm_encode	(IMA_OKI_ADPCM * state, int /* -32768..32767 */ sample) ;
-
-void	ima_oki_adpcm_decode_block	(IMA_OKI_ADPCM * state) ;
-void	ima_oki_adpcm_encode_block	(IMA_OKI_ADPCM * state) ;
diff --git a/libs/libsndfile/src/interleave.c b/libs/libsndfile/src/interleave.c
deleted file mode 100644
index 5f799444c6..0000000000
--- a/libs/libsndfile/src/interleave.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfendian.h"
-
-#include	<stdlib.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-#define		INTERLEAVE_CHANNELS		6
-
-typedef struct
-{	double	buffer [SF_BUFFER_LEN / sizeof (double)] ;
-
-	sf_count_t		channel_len ;
-
-	sf_count_t		(*read_short)	(SF_PRIVATE*, short *ptr, sf_count_t len) ;
-	sf_count_t		(*read_int)	(SF_PRIVATE*, int *ptr, sf_count_t len) ;
-	sf_count_t		(*read_float)	(SF_PRIVATE*, float *ptr, sf_count_t len) ;
-	sf_count_t		(*read_double)	(SF_PRIVATE*, double *ptr, sf_count_t len) ;
-
-} INTERLEAVE_DATA ;
-
-
-
-static sf_count_t	interleave_read_short	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	interleave_read_int	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	interleave_read_float	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	interleave_read_double	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	interleave_seek	(SF_PRIVATE*, int mode, sf_count_t samples_from_start) ;
-
-
-
-
-int
-interleave_init	(SF_PRIVATE *psf)
-{	INTERLEAVE_DATA *pdata ;
-
-	if (psf->file.mode != SFM_READ)
-		return SFE_INTERLEAVE_MODE ;
-
-	if (psf->interleave)
-	{	psf_log_printf (psf, "*** Weird, already have interleave.\n") ;
-		return 666 ;
-		} ;
-
-	/* Free this in sf_close() function. */
-	if (! (pdata = malloc (sizeof (INTERLEAVE_DATA))))
-		return SFE_MALLOC_FAILED ;
-
-puts ("interleave_init") ;
-
-	psf->interleave = pdata ;
-
-	/* Save the existing methods. */
-	pdata->read_short	= psf->read_short ;
-	pdata->read_int		= psf->read_int ;
-	pdata->read_float	= psf->read_float ;
-	pdata->read_double	= psf->read_double ;
-
-	pdata->channel_len = psf->sf.frames * psf->bytewidth ;
-
-	/* Insert our new methods. */
-	psf->read_short		= interleave_read_short ;
-	psf->read_int		= interleave_read_int ;
-	psf->read_float		= interleave_read_float ;
-	psf->read_double	= interleave_read_double ;
-
-	psf->seek = interleave_seek ;
-
-	return 0 ;
-} /* pcm_interleave_init */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-interleave_read_short	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	INTERLEAVE_DATA *pdata ;
-	sf_count_t	offset, templen ;
-	int			chan, count, k ;
-	short		*inptr, *outptr ;
-
-	if (! (pdata = psf->interleave))
-		return 0 ;
-
-	inptr = (short*) pdata->buffer ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	outptr = ptr + chan ;
-
-		offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-		if (psf_fseek (psf, offset, SEEK_SET) != offset)
-		{	psf->error = SFE_INTERLEAVE_SEEK ;
-			return 0 ;
-			} ;
-
-		templen = len / psf->sf.channels ;
-
-		while (templen > 0)
-		{	if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short))
-				count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short) ;
-			else
-				count = (int) templen ;
-
-			if (pdata->read_short (psf, inptr, count) != count)
-			{	psf->error = SFE_INTERLEAVE_READ ;
-				return 0 ;
-				} ;
-
-			for (k = 0 ; k < count ; k++)
-			{	*outptr = inptr [k] ;
-				outptr += psf->sf.channels ;
-				} ;
-
-			templen -= count ;
-			} ;
-		} ;
-
-	return len ;
-} /* interleave_read_short */
-
-static sf_count_t
-interleave_read_int	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	INTERLEAVE_DATA *pdata ;
-	sf_count_t	offset, templen ;
-	int			chan, count, k ;
-	int		*inptr, *outptr ;
-
-	if (! (pdata = psf->interleave))
-		return 0 ;
-
-	inptr = (int*) pdata->buffer ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	outptr = ptr + chan ;
-
-		offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-		if (psf_fseek (psf, offset, SEEK_SET) != offset)
-		{	psf->error = SFE_INTERLEAVE_SEEK ;
-			return 0 ;
-			} ;
-
-		templen = len / psf->sf.channels ;
-
-		while (templen > 0)
-		{	if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int))
-				count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int) ;
-			else
-				count = (int) templen ;
-
-			if (pdata->read_int (psf, inptr, count) != count)
-			{	psf->error = SFE_INTERLEAVE_READ ;
-				return 0 ;
-				} ;
-
-			for (k = 0 ; k < count ; k++)
-			{	*outptr = inptr [k] ;
-				outptr += psf->sf.channels ;
-				} ;
-
-			templen -= count ;
-			} ;
-		} ;
-
-	return len ;
-} /* interleave_read_int */
-
-static sf_count_t
-interleave_read_float	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	INTERLEAVE_DATA *pdata ;
-	sf_count_t	offset, templen ;
-	int			chan, count, k ;
-	float		*inptr, *outptr ;
-
-	if (! (pdata = psf->interleave))
-		return 0 ;
-
-	inptr = (float*) pdata->buffer ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	outptr = ptr + chan ;
-
-		offset = psf->dataoffset + pdata->channel_len * chan + psf->read_current * psf->bytewidth ;
-
-/*-printf ("chan : %d     read_current : %6lld    offset : %6lld\n", chan, psf->read_current, offset) ;-*/
-
-		if (psf_fseek (psf, offset, SEEK_SET) != offset)
-		{	psf->error = SFE_INTERLEAVE_SEEK ;
-/*-puts ("interleave_seek error") ; exit (1) ;-*/
-			return 0 ;
-			} ;
-
-		templen = len / psf->sf.channels ;
-
-		while (templen > 0)
-		{	if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float))
-				count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float) ;
-			else
-				count = (int) templen ;
-
-			if (pdata->read_float (psf, inptr, count) != count)
-			{	psf->error = SFE_INTERLEAVE_READ ;
-/*-puts ("interleave_read error") ; exit (1) ;-*/
-				return 0 ;
-				} ;
-
-			for (k = 0 ; k < count ; k++)
-			{	*outptr = inptr [k] ;
-				outptr += psf->sf.channels ;
-				} ;
-
-			templen -= count ;
-			} ;
-		} ;
-
-	return len ;
-} /* interleave_read_float */
-
-static sf_count_t
-interleave_read_double	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	INTERLEAVE_DATA *pdata ;
-	sf_count_t	offset, templen ;
-	int			chan, count, k ;
-	double		*inptr, *outptr ;
-
-	if (! (pdata = psf->interleave))
-		return 0 ;
-
-	inptr = (double*) pdata->buffer ;
-
-	for (chan = 0 ; chan < psf->sf.channels ; chan++)
-	{	outptr = ptr + chan ;
-
-		offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-		if (psf_fseek (psf, offset, SEEK_SET) != offset)
-		{	psf->error = SFE_INTERLEAVE_SEEK ;
-			return 0 ;
-			} ;
-
-		templen = len / psf->sf.channels ;
-
-		while (templen > 0)
-		{	if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double))
-				count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double) ;
-			else
-				count = (int) templen ;
-
-			if (pdata->read_double (psf, inptr, count) != count)
-			{	psf->error = SFE_INTERLEAVE_READ ;
-				return 0 ;
-				} ;
-
-			for (k = 0 ; k < count ; k++)
-			{	*outptr = inptr [k] ;
-				outptr += psf->sf.channels ;
-				} ;
-
-			templen -= count ;
-			} ;
-		} ;
-
-	return len ;
-} /* interleave_read_double */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-interleave_seek	(SF_PRIVATE * UNUSED (psf), int UNUSED (mode), sf_count_t samples_from_start)
-{
-	/*
-	** Do nothing here. This is a place holder to prevent the default
-	** seek function from being called.
-	*/
-
-	return samples_from_start ;
-} /* interleave_seek */
-
diff --git a/libs/libsndfile/src/ircam.c b/libs/libsndfile/src/ircam.c
deleted file mode 100644
index 6a6c7fc606..0000000000
--- a/libs/libsndfile/src/ircam.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-/* The IRCAM magic number is weird in that one byte in the number can have
-** values of 0x1, 0x2, 0x03 or 0x04. Hence the need for a marker and a mask.
-*/
-
-#define IRCAM_BE_MASK		(MAKE_MARKER (0xFF, 0xFF, 0x00, 0xFF))
-#define IRCAM_BE_MARKER		(MAKE_MARKER (0x64, 0xA3, 0x00, 0x00))
-
-#define IRCAM_LE_MASK		(MAKE_MARKER (0xFF, 0x00, 0xFF, 0xFF))
-#define IRCAM_LE_MARKER		(MAKE_MARKER (0x00, 0x00, 0xA3, 0x64))
-
-#define IRCAM_02B_MARKER	(MAKE_MARKER (0x64, 0xA3, 0x02, 0x00))
-#define IRCAM_03L_MARKER	(MAKE_MARKER (0x64, 0xA3, 0x03, 0x00))
-
-#define IRCAM_DATA_OFFSET	(1024)
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-enum
-{	IRCAM_PCM_16	= 0x00002,
-	IRCAM_FLOAT		= 0x00004,
-	IRCAM_ALAW		= 0x10001,
-	IRCAM_ULAW		= 0x20001,
-	IRCAM_PCM_32	= 0x40004
-} ;
-
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		ircam_close			(SF_PRIVATE *psf) ;
-static	int		ircam_write_header	(SF_PRIVATE *psf, int calc_length) ;
-static	int		ircam_read_header	(SF_PRIVATE *psf) ;
-
-static	int		get_encoding (int subformat) ;
-
-static	const char*	get_encoding_str (int encoding) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-ircam_open	(SF_PRIVATE *psf)
-{	int		subformat ;
-	int		error = SFE_NO_ERROR ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = ircam_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_IRCAM)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
-			psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-		psf->dataoffset = IRCAM_DATA_OFFSET ;
-
-		if ((error = ircam_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = ircam_write_header ;
-		} ;
-
-	psf->container_close = ircam_close ;
-
-	switch (subformat)
-	{	case SF_FORMAT_ULAW :		/* 8-bit Ulaw encoding. */
-				error = ulaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :		/* 8-bit Alaw encoding. */
-				error = alaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :	/* 16-bit linear PCM. */
-		case SF_FORMAT_PCM_32 :	/* 32-bit linear PCM. */
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_FLOAT :	/* 32-bit linear PCM. */
-				error = float32_init (psf) ;
-				break ;
-
-		default : break ;
-		} ;
-
-	return error ;
-} /* ircam_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-ircam_read_header	(SF_PRIVATE *psf)
-{	unsigned int	marker, encoding ;
-	float			samplerate ;
-	int				error = SFE_NO_ERROR ;
-
-	psf_binheader_readf (psf, "epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
-
-	if (((marker & IRCAM_BE_MASK) != IRCAM_BE_MARKER) && ((marker & IRCAM_LE_MASK) != IRCAM_LE_MARKER))
-	{	psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-		return SFE_IRCAM_NO_MARKER ;
-		} ;
-
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-	if (psf->sf.channels > 256)
-	{	psf_binheader_readf (psf, "Epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
-
-		/* Sanity checking for endian-ness detection. */
-		if (psf->sf.channels > 256)
-		{	psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-			return SFE_IRCAM_BAD_CHANNELS ;
-			} ;
-
-		psf->endian = SF_ENDIAN_BIG ;
-		} ;
-
-	psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-
-	psf->sf.samplerate = (int) samplerate ;
-
-	psf_log_printf (psf,	"  Sample Rate : %d\n"
-							"  Channels    : %d\n"
-							"  Encoding    : %X => %s\n",
-						psf->sf.samplerate, psf->sf.channels, encoding, get_encoding_str (encoding)) ;
-
-	switch (encoding)
-	{	case IRCAM_PCM_16 :
-				psf->bytewidth = 2 ;
-				psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-				psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
-				break ;
-
-		case IRCAM_PCM_32 :
-				psf->bytewidth = 4 ;
-				psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-				psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
-				break ;
-
-		case IRCAM_FLOAT :
-				psf->bytewidth = 4 ;
-				psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-				psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
-				break ;
-
-		case IRCAM_ALAW :
-				psf->bytewidth = 1 ;
-				psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-				psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ;
-				break ;
-
-		case IRCAM_ULAW :
-				psf->bytewidth = 1 ;
-				psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-				psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ;
-				break ;
-
-		default :
-				error = SFE_IRCAM_UNKNOWN_FORMAT ;
-				break ;
-		} ;
-
-	if (psf->endian == SF_ENDIAN_BIG)
-		psf->sf.format |= SF_ENDIAN_BIG ;
-	else
-		psf->sf.format |= SF_ENDIAN_LITTLE ;
-
-	if (error)
-		return error ;
-
-	psf->dataoffset = IRCAM_DATA_OFFSET ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	if (psf->sf.frames == 0 && psf->blockwidth)
-		psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-	psf_log_printf (psf, "  Samples     : %d\n", psf->sf.frames) ;
-
-	psf_binheader_readf (psf, "p", IRCAM_DATA_OFFSET) ;
-
-	return 0 ;
-} /* ircam_read_header */
-
-static int
-ircam_close	(SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "close\n") ;
-
-	return 0 ;
-} /* ircam_close */
-
-static int
-ircam_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	int			encoding ;
-	float		samplerate ;
-	sf_count_t	current ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	/* This also sets psf->endian. */
-	encoding = get_encoding (SF_CODEC (psf->sf.format)) ;
-
-	if (encoding == 0)
-		return SFE_BAD_OPEN_FORMAT ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	samplerate = psf->sf.samplerate ;
-
-	switch (psf->endian)
-	{	case SF_ENDIAN_BIG :
-			psf_binheader_writef (psf, "Emf", IRCAM_02B_MARKER, samplerate) ;
-			psf_binheader_writef (psf, "E44", psf->sf.channels, encoding) ;
-			break ;
-
-		case SF_ENDIAN_LITTLE :
-			psf_binheader_writef (psf, "emf", IRCAM_03L_MARKER, samplerate) ;
-			psf_binheader_writef (psf, "e44", psf->sf.channels, encoding) ;
-			break ;
-
-		default : return SFE_BAD_OPEN_FORMAT ;
-		} ;
-
-	psf_binheader_writef (psf, "z", (size_t) (IRCAM_DATA_OFFSET - psf->headindex)) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* ircam_write_header */
-
-static int
-get_encoding (int subformat)
-{	switch (subformat)
-	{	case SF_FORMAT_PCM_16 :	return IRCAM_PCM_16 ;
-		case SF_FORMAT_PCM_32 :	return IRCAM_PCM_32 ;
-
-		case SF_FORMAT_FLOAT :	return IRCAM_FLOAT ;
-
-		case SF_FORMAT_ULAW :	return IRCAM_ULAW ;
-		case SF_FORMAT_ALAW :	return IRCAM_ALAW ;
-
-		default : break ;
-		} ;
-
-	return 0 ;
-} /* get_encoding */
-
-static const char*
-get_encoding_str (int encoding)
-{	switch (encoding)
-	{	case IRCAM_PCM_16	: return "16 bit PCM" ;
-		case IRCAM_FLOAT	: return "32 bit float" ;
-		case IRCAM_ALAW		: return "A law" ;
-		case IRCAM_ULAW		: return "u law" ;
-		case IRCAM_PCM_32	: return "32 bit PCM" ;
-		} ;
-	return "Unknown encoding" ;
-} /* get_encoding_str */
-
diff --git a/libs/libsndfile/src/libsndfile-1.def b/libs/libsndfile/src/libsndfile-1.def
deleted file mode 100644
index 93cab02d98..0000000000
--- a/libs/libsndfile/src/libsndfile-1.def
+++ /dev/null
@@ -1,41 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY libsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_version_string    @68
-sf_open_fd           @70
-sf_wchar_open        @71
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/libsndfile.def b/libs/libsndfile/src/libsndfile.def
deleted file mode 100644
index 7b144538fc..0000000000
--- a/libs/libsndfile/src/libsndfile.def
+++ /dev/null
@@ -1,39 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY libsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_open_fd           @70
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/macbinary3.c b/libs/libsndfile/src/macbinary3.c
deleted file mode 100644
index 3ad71e68b8..0000000000
--- a/libs/libsndfile/src/macbinary3.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdlib.h>
-#include	<string.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if (OSX_DARWIN_VERSION >= 1)
-
-int
-macbinary3_open (SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* macbinary3_open */
-
-#else
-
-int
-macbinary3_open (SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* macbinary3_open */
-
-#endif /* OSX_DARWIN_VERSION */
-
diff --git a/libs/libsndfile/src/macos.c b/libs/libsndfile/src/macos.c
deleted file mode 100644
index 5f6c53191c..0000000000
--- a/libs/libsndfile/src/macos.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-** Copyright (C) 2003-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdlib.h>
-#include	<string.h>
-#include	<sys/stat.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#define	STR_MARKER	MAKE_MARKER ('S', 'T', 'R', ' ')
-
-int
-macos_guess_file_type (SF_PRIVATE * psf, const char *filename)
-{	static char rsrc_name [1024] ;
-	struct stat statbuf ;
-
-	snprintf (rsrc_name, sizeof (rsrc_name), "%s/rsrc", filename) ;
-
-	/* If there is no resource fork, just return. */
-	if (stat (rsrc_name, &statbuf) != 0)
-	{	psf_log_printf (psf, "No resource fork.\n") ;
-		return 0 ;
-		} ;
-
-	if (statbuf.st_size == 0)
-	{	psf_log_printf (psf, "Have zero size resource fork.\n") ;
-		return 0 ;
-		} ;
-
-	return 0 ;
-} /* macos_guess_file_type */
-
diff --git a/libs/libsndfile/src/make-static-lib-hidden-privates.sh b/libs/libsndfile/src/make-static-lib-hidden-privates.sh
deleted file mode 100644
index 5bfd485d26..0000000000
--- a/libs/libsndfile/src/make-static-lib-hidden-privates.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash -e
-
-# This script takes a static library and removes all non-public symbols.
-# Ie, it makes a static lib whose symbols are far less likely to clash with
-# the symbols of another shared or static library.
-
-grep sf_ Symbols.gnu-binutils | sed -e "s/[ ;]//g" > Symbols.static
-
-ld -r --whole-archive .libs/libsndfile.a -o libsndfile_a.o
-
-objcopy --keep-global-symbols=Symbols.static libsndfile_a.o libsndfile.o
-
-rm -f libsndfile.a
-ar cru libsndfile.a libsndfile.o
diff --git a/libs/libsndfile/src/mat4.c b/libs/libsndfile/src/mat4.c
deleted file mode 100644
index 77ece264b1..0000000000
--- a/libs/libsndfile/src/mat4.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Information on how to decode and encode this file was obtained in a PDF
-** file which I found on http://www.wotsit.org/.
-** Also did a lot of testing with GNU Octave but do not have access to
-** Matlab (tm) and so could not test it there.
-*/
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define MAT4_BE_DOUBLE	(MAKE_MARKER (0, 0, 0x03, 0xE8))
-#define MAT4_LE_DOUBLE	(MAKE_MARKER (0, 0, 0, 0))
-
-#define MAT4_BE_FLOAT	(MAKE_MARKER (0, 0, 0x03, 0xF2))
-#define MAT4_LE_FLOAT	(MAKE_MARKER (0x0A, 0, 0, 0))
-
-#define MAT4_BE_PCM_32	(MAKE_MARKER (0, 0, 0x03, 0xFC))
-#define MAT4_LE_PCM_32	(MAKE_MARKER (0x14, 0, 0, 0))
-
-#define MAT4_BE_PCM_16	(MAKE_MARKER (0, 0, 0x04, 0x06))
-#define MAT4_LE_PCM_16	(MAKE_MARKER (0x1E, 0, 0, 0))
-
-/* Can't see any reason to ever implement this. */
-#define MAT4_BE_PCM_U8	(MAKE_MARKER (0, 0, 0x04, 0x1A))
-#define MAT4_LE_PCM_U8	(MAKE_MARKER (0x32, 0, 0, 0))
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		mat4_close		(SF_PRIVATE *psf) ;
-
-static	int 	mat4_format_to_encoding	(int format, int endian) ;
-
-static int		mat4_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		mat4_read_header (SF_PRIVATE *psf) ;
-
-static const char * mat4_marker_to_str (int marker) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mat4_open	(SF_PRIVATE *psf)
-{	int		subformat, error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = mat4_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MAT4)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-			psf->endian = SF_ENDIAN_LITTLE ;
-		else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-			psf->endian = SF_ENDIAN_BIG ;
-
-		if ((error = mat4_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = mat4_write_header ;
-		} ;
-
-	psf->container_close = mat4_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_32 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_FLOAT :
-				error = float32_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				error = double64_init (psf) ;
-				break ;
-
-		default : break ;
-		} ;
-
-	if (error)
-		return error ;
-
-	return error ;
-} /* mat4_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat4_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		mat4_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* mat4_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat4_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int			encoding ;
-	double		samplerate ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	encoding = mat4_format_to_encoding (SF_CODEC (psf->sf.format), psf->endian) ;
-
-	if (encoding == -1)
-		return SFE_BAD_OPEN_FORMAT ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* Need sample rate as a double for writing to the header. */
-	samplerate = psf->sf.samplerate ;
-
-	if (psf->endian == SF_ENDIAN_BIG)
-	{	psf_binheader_writef (psf, "Em444", MAT4_BE_DOUBLE, 1, 1, 0) ;
-		psf_binheader_writef (psf, "E4bd", 11, "samplerate", make_size_t (11), samplerate) ;
-		psf_binheader_writef (psf, "tEm484", encoding, psf->sf.channels, psf->sf.frames, 0) ;
-		psf_binheader_writef (psf, "E4b", 9, "wavedata", make_size_t (9)) ;
-		}
-	else if (psf->endian == SF_ENDIAN_LITTLE)
-	{	psf_binheader_writef (psf, "em444", MAT4_LE_DOUBLE, 1, 1, 0) ;
-		psf_binheader_writef (psf, "e4bd", 11, "samplerate", make_size_t (11), samplerate) ;
-		psf_binheader_writef (psf, "tem484", encoding, psf->sf.channels, psf->sf.frames, 0) ;
-		psf_binheader_writef (psf, "e4b", 9, "wavedata", make_size_t (9)) ;
-		}
-	else
-		return SFE_BAD_OPEN_FORMAT ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* mat4_write_header */
-
-static int
-mat4_read_header (SF_PRIVATE *psf)
-{	char	buffer [256] ;
-	uint32_t marker, namesize ;
-	int		rows, cols, imag ;
-	double	value ;
-	const char *marker_str ;
-	char	name [64] ;
-
-	psf_binheader_readf (psf, "pm", 0, &marker) ;
-
-	/* MAT4 file must start with a double for the samplerate. */
-	if (marker == MAT4_BE_DOUBLE)
-	{	psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
-		marker_str = "big endian double" ;
-		}
-	else if (marker == MAT4_LE_DOUBLE)
-	{	psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
-		marker_str = "little endian double" ;
-		}
-	else
-		return SFE_UNIMPLEMENTED ;
-
-	psf_log_printf (psf, "GNU Octave 2.0 / MATLAB v4.2 format\nMarker : %s\n", marker_str) ;
-
-	psf_binheader_readf (psf, "444", &rows, &cols, &imag) ;
-
-	psf_log_printf (psf, " Rows  : %d\n Cols  : %d\n Imag  : %s\n", rows, cols, imag ? "True" : "False") ;
-
-	psf_binheader_readf (psf, "4", &namesize) ;
-
-	if (namesize >= SIGNED_SIZEOF (name))
-		return SFE_MAT4_BAD_NAME ;
-
-	psf_binheader_readf (psf, "b", name, namesize) ;
-	name [namesize] = 0 ;
-
-	psf_log_printf (psf, " Name  : %s\n", name) ;
-
-	psf_binheader_readf (psf, "d", &value) ;
-
-	snprintf (buffer, sizeof (buffer), " Value : %f\n", value) ;
-	psf_log_printf (psf, buffer) ;
-
-	if ((rows != 1) || (cols != 1))
-		return SFE_MAT4_NO_SAMPLERATE ;
-
-	psf->sf.samplerate = lrint (value) ;
-
-	/* Now write out the audio data. */
-
-	psf_binheader_readf (psf, "m", &marker) ;
-
-	psf_log_printf (psf, "Marker : %s\n", mat4_marker_to_str (marker)) ;
-
-	psf_binheader_readf (psf, "444", &rows, &cols, &imag) ;
-
-	psf_log_printf (psf, " Rows  : %d\n Cols  : %d\n Imag  : %s\n", rows, cols, imag ? "True" : "False") ;
-
-	psf_binheader_readf (psf, "4", &namesize) ;
-
-	if (namesize >= SIGNED_SIZEOF (name))
-		return SFE_MAT4_BAD_NAME ;
-
-	psf_binheader_readf (psf, "b", name, namesize) ;
-	name [namesize] = 0 ;
-
-	psf_log_printf (psf, " Name  : %s\n", name) ;
-
-	psf->dataoffset = psf_ftell (psf) ;
-
-	if (rows == 0 && cols == 0)
-	{	psf_log_printf (psf, "*** Error : zero channel count.\n") ;
-		return SFE_CHANNEL_COUNT_ZERO ;
-		} ;
-
-	psf->sf.channels	= rows ;
-	psf->sf.frames		= cols ;
-
-	psf->sf.format = psf->endian | SF_FORMAT_MAT4 ;
-	switch (marker)
-	{	case MAT4_BE_DOUBLE :
-		case MAT4_LE_DOUBLE :
-				psf->sf.format |= SF_FORMAT_DOUBLE ;
-				psf->bytewidth = 8 ;
-				break ;
-
-		case MAT4_BE_FLOAT :
-		case MAT4_LE_FLOAT :
-				psf->sf.format |= SF_FORMAT_FLOAT ;
-				psf->bytewidth = 4 ;
-				break ;
-
-		case MAT4_BE_PCM_32	:
-		case MAT4_LE_PCM_32	:
-				psf->sf.format |= SF_FORMAT_PCM_32 ;
-				psf->bytewidth = 4 ;
-				break ;
-
-		case MAT4_BE_PCM_16	:
-		case MAT4_LE_PCM_16	:
-				psf->sf.format |= SF_FORMAT_PCM_16 ;
-				psf->bytewidth = 2 ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "*** Error : Bad marker %08X\n", marker) ;
-				return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if ((psf->filelength - psf->dataoffset) < psf->sf.channels * psf->sf.frames * psf->bytewidth)
-	{	psf_log_printf (psf, "*** File seems to be truncated. %D <--> %D\n",
-				psf->filelength - psf->dataoffset, psf->sf.channels * psf->sf.frames * psf->bytewidth) ;
-		}
-	else if ((psf->filelength - psf->dataoffset) > psf->sf.channels * psf->sf.frames * psf->bytewidth)
-		psf->dataend = psf->dataoffset + rows * cols * psf->bytewidth ;
-
-	psf->datalength = psf->filelength - psf->dataoffset - psf->dataend ;
-
-	psf->sf.sections = 1 ;
-
-	return 0 ;
-} /* mat4_read_header */
-
-static int
-mat4_format_to_encoding (int format, int endian)
-{
-	switch (format | endian)
-	{	case (SF_FORMAT_PCM_16 | SF_ENDIAN_BIG) :
-				return MAT4_BE_PCM_16 ;
-
-		case (SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE) :
-				return MAT4_LE_PCM_16 ;
-
-		case (SF_FORMAT_PCM_32 | SF_ENDIAN_BIG) :
-				return MAT4_BE_PCM_32 ;
-
-		case (SF_FORMAT_PCM_32 | SF_ENDIAN_LITTLE) :
-				return MAT4_LE_PCM_32 ;
-
-		case (SF_FORMAT_FLOAT | SF_ENDIAN_BIG) :
-				return MAT4_BE_FLOAT ;
-
-		case (SF_FORMAT_FLOAT | SF_ENDIAN_LITTLE) :
-				return MAT4_LE_FLOAT ;
-
-		case (SF_FORMAT_DOUBLE | SF_ENDIAN_BIG) :
-				return MAT4_BE_DOUBLE ;
-
-		case (SF_FORMAT_DOUBLE | SF_ENDIAN_LITTLE) :
-				return MAT4_LE_DOUBLE ;
-
-		default : break ;
-		} ;
-
-	return -1 ;
-} /* mat4_format_to_encoding */
-
-static const char *
-mat4_marker_to_str (int marker)
-{	static char str [32] ;
-
-	switch (marker)
-	{
-		case MAT4_BE_PCM_16	:	return "big endian 16 bit PCM" ;
-		case MAT4_LE_PCM_16	:	return "little endian 16 bit PCM" ;
-
-		case MAT4_BE_PCM_32	:	return "big endian 32 bit PCM" ;
-		case MAT4_LE_PCM_32	:	return "little endian 32 bit PCM" ;
-
-
-		case MAT4_BE_FLOAT :	return "big endian float" ;
-		case MAT4_LE_FLOAT :	return "big endian float" ;
-
-		case MAT4_BE_DOUBLE	:	return "big endian double" ;
-		case MAT4_LE_DOUBLE	:	return "little endian double" ;
-		} ;
-
-	/* This is a little unsafe but is really only for debugging. */
-	str [sizeof (str) - 1] = 0 ;
-	snprintf (str, sizeof (str) - 1, "%08X", marker) ;
-	return str ;
-} /* mat4_marker_to_str */
-
diff --git a/libs/libsndfile/src/mat5.c b/libs/libsndfile/src/mat5.c
deleted file mode 100644
index 164fb29a21..0000000000
--- a/libs/libsndfile/src/mat5.c
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Information on how to decode and encode this file was obtained in a PDF
-** file which I found on http://www.wotsit.org/.
-** Also did a lot of testing with GNU Octave but do not have access to
-** Matlab (tm) and so could not test it there.
-*/
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define MATL_MARKER	(MAKE_MARKER ('M', 'A', 'T', 'L'))
-
-#define IM_MARKER	(('I' << 8) + 'M')
-#define MI_MARKER	(('M' << 8) + 'I')
-
-/*------------------------------------------------------------------------------
-** Enums and typedefs.
-*/
-
-enum
-{	MAT5_TYPE_SCHAR			= 0x1,
-	MAT5_TYPE_UCHAR			= 0x2,
-	MAT5_TYPE_INT16			= 0x3,
-	MAT5_TYPE_UINT16		= 0x4,
-	MAT5_TYPE_INT32			= 0x5,
-	MAT5_TYPE_UINT32		= 0x6,
-	MAT5_TYPE_FLOAT			= 0x7,
-	MAT5_TYPE_DOUBLE		= 0x9,
-	MAT5_TYPE_ARRAY			= 0xE,
-
-	MAT5_TYPE_COMP_USHORT	= 0x00020004,
-	MAT5_TYPE_COMP_UINT		= 0x00040006
-} ;
-
-typedef struct
-{	sf_count_t	size ;
-	int			rows, cols ;
-	char		name [32] ;
-} MAT5_MATRIX ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int		mat5_close		(SF_PRIVATE *psf) ;
-
-static int		mat5_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		mat5_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mat5_open	(SF_PRIVATE *psf)
-{	int		subformat, error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = mat5_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MAT5)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-			psf->endian = SF_ENDIAN_LITTLE ;
-		else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-			psf->endian = SF_ENDIAN_BIG ;
-
-		if ((error = mat5_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = mat5_write_header ;
-		} ;
-
-	psf->container_close = mat5_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_32 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_FLOAT :
-				error = float32_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				error = double64_init (psf) ;
-				break ;
-
-		default : break ;
-		} ;
-
-	return error ;
-} /* mat5_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat5_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		mat5_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* mat5_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat5_write_header (SF_PRIVATE *psf, int calc_length)
-{	static const char	*filename = "MATLAB 5.0 MAT-file, written by " PACKAGE "-" VERSION ", " ;
-	static const char	*sr_name = "samplerate\0\0\0\0\0\0\0\0\0\0\0" ;
-	static const char	*wd_name = "wavedata\0" ;
-	char		buffer [256] ;
-	sf_count_t	current, datasize ;
-	int			encoding ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf_fseek (psf, 0, SEEK_END) ;
-		psf->filelength = psf_ftell (psf) ;
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_U8 :
-				encoding = MAT5_TYPE_UCHAR ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-				encoding = MAT5_TYPE_INT16 ;
-				break ;
-
-		case SF_FORMAT_PCM_32 :
-				encoding = MAT5_TYPE_INT32 ;
-				break ;
-
-		case SF_FORMAT_FLOAT :
-				encoding = MAT5_TYPE_FLOAT ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				encoding = MAT5_TYPE_DOUBLE ;
-				break ;
-
-		default :
-				return SFE_BAD_OPEN_FORMAT ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_get_date_str (buffer, sizeof (buffer)) ;
-	psf_binheader_writef (psf, "bb", filename, strlen (filename), buffer, strlen (buffer) + 1) ;
-
-	memset (buffer, ' ', 124 - psf->headindex) ;
-	psf_binheader_writef (psf, "b", buffer, make_size_t (124 - psf->headindex)) ;
-
-	psf->rwf_endian = psf->endian ;
-
-	if (psf->rwf_endian == SF_ENDIAN_BIG)
-		psf_binheader_writef (psf, "2b", 0x0100, "MI", make_size_t (2)) ;
-	else
-		psf_binheader_writef (psf, "2b", 0x0100, "IM", make_size_t (2)) ;
-
-	psf_binheader_writef (psf, "444444", MAT5_TYPE_ARRAY, 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
-	psf_binheader_writef (psf, "4444", MAT5_TYPE_INT32, 8, 1, 1) ;
-	psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (sr_name), sr_name, make_size_t (16)) ;
-
-	if (psf->sf.samplerate > 0xFFFF)
-		psf_binheader_writef (psf, "44", MAT5_TYPE_COMP_UINT, psf->sf.samplerate) ;
-	else
-	{	unsigned short samplerate = psf->sf.samplerate ;
-
-		psf_binheader_writef (psf, "422", MAT5_TYPE_COMP_USHORT, samplerate, 0) ;
-		} ;
-
-	datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
-
-	psf_binheader_writef (psf, "t484444", MAT5_TYPE_ARRAY, datasize + 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
-	psf_binheader_writef (psf, "t4448", MAT5_TYPE_INT32, 8, psf->sf.channels, psf->sf.frames) ;
-	psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (wd_name), wd_name, strlen (wd_name)) ;
-
-	datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
-	if (datasize > 0x7FFFFFFF)
-		datasize = 0x7FFFFFFF ;
-
-	psf_binheader_writef (psf, "t48", encoding, datasize) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* mat5_write_header */
-
-static int
-mat5_read_header (SF_PRIVATE *psf)
-{	char	buffer [256], name [32] ;
-	short	version, endian ;
-	int		type, flags1, flags2, rows, cols ;
-	unsigned size ;
-	int		have_samplerate = 1 ;
-
-	psf_binheader_readf (psf, "pb", 0, buffer, 124) ;
-
-	buffer [125] = 0 ;
-
-	if (strlen (buffer) >= 124)
-		return SFE_UNIMPLEMENTED ;
-
-	if (strstr (buffer, "MATLAB 5.0 MAT-file") == buffer)
-		psf_log_printf (psf, "%s\n", buffer) ;
-
-
-	psf_binheader_readf (psf, "E22", &version, &endian) ;
-
-	if (endian == MI_MARKER)
-	{	psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
-		if (CPU_IS_LITTLE_ENDIAN) version = ENDSWAP_16 (version) ;
-		}
-	else if (endian == IM_MARKER)
-	{	psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
-		if (CPU_IS_BIG_ENDIAN) version = ENDSWAP_16 (version) ;
-		}
-	else
-		return SFE_MAT5_BAD_ENDIAN ;
-
-	if ((CPU_IS_LITTLE_ENDIAN && endian == IM_MARKER) ||
-			(CPU_IS_BIG_ENDIAN && endian == MI_MARKER))
-		version = ENDSWAP_16 (version) ;
-
-	psf_log_printf (psf, "Version : 0x%04X\n", version) ;
-	psf_log_printf (psf, "Endian  : 0x%04X => %s\n", endian,
-				(psf->endian == SF_ENDIAN_LITTLE) ? "Little" : "Big") ;
-
-	/*========================================================*/
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "Block\n Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_ARRAY)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_UINT32)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &flags1, &flags2) ;
-	psf_log_printf (psf, "    Flg1 : %X    Flg2 : %d\n", flags1, flags2) ;
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_INT32)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &rows, &cols) ;
-	psf_log_printf (psf, "    Rows : %d    Cols : %d\n", rows, cols) ;
-
-	if (rows != 1 || cols != 1)
-	{	if (psf->sf.samplerate == 0)
-			psf->sf.samplerate = 44100 ;
-		have_samplerate = 0 ;
-		}
-	psf_binheader_readf (psf, "4", &type) ;
-
-	if (type == MAT5_TYPE_SCHAR)
-	{	psf_binheader_readf (psf, "4", &size) ;
-		psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-		if (size > SIGNED_SIZEOF (name) - 1)
-		{	psf_log_printf (psf, "Error : Bad name length.\n") ;
-			return SFE_MAT5_NO_BLOCK ;
-			} ;
-
-		psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
-		name [size] = 0 ;
-		}
-	else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR)
-	{	size = type >> 16 ;
-		if (size > 4)
-		{	psf_log_printf (psf, "Error : Bad name length.\n") ;
-			return SFE_MAT5_NO_BLOCK ;
-			} ;
-
-		psf_log_printf (psf, "    Type : %X\n", type) ;
-		psf_binheader_readf (psf, "4", &name) ;
-		name [size] = 0 ;
-		}
-	else
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_log_printf (psf, "    Name : %s\n", name) ;
-
-	/*-----------------------------------------*/
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-
-	if (!have_samplerate)
-		goto skip_samplerate ;
-
-	switch (type)
-	{	case MAT5_TYPE_DOUBLE :
-				{	double	samplerate ;
-
-					psf_binheader_readf (psf, "d", &samplerate) ;
-					snprintf (name, sizeof (name), "%f\n", samplerate) ;
-					psf_log_printf (psf, "    Val  : %s\n", name) ;
-
-					psf->sf.samplerate = lrint (samplerate) ;
-					} ;
-				break ;
-
-		case MAT5_TYPE_COMP_USHORT :
-				{	unsigned short samplerate ;
-
-					psf_binheader_readf (psf, "j2j", -4, &samplerate, 2) ;
-					psf_log_printf (psf, "    Val  : %u\n", samplerate) ;
-					psf->sf.samplerate = samplerate ;
-					}
-				break ;
-
-		case MAT5_TYPE_COMP_UINT :
-				psf_log_printf (psf, "    Val  : %u\n", size) ;
-				psf->sf.samplerate = size ;
-				break ;
-
-		default :
-			psf_log_printf (psf, "    Type : %X    Size : %d  ***\n", type, size) ;
-			return SFE_MAT5_SAMPLE_RATE ;
-		} ;
-
-	/*-----------------------------------------*/
-
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, " Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_ARRAY)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_UINT32)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &flags1, &flags2) ;
-	psf_log_printf (psf, "    Flg1 : %X    Flg2 : %d\n", flags1, flags2) ;
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-	if (type != MAT5_TYPE_INT32)
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_binheader_readf (psf, "44", &rows, &cols) ;
-	psf_log_printf (psf, "    Rows : %X    Cols : %d\n", rows, cols) ;
-
-	psf_binheader_readf (psf, "4", &type) ;
-
-	if (type == MAT5_TYPE_SCHAR)
-	{	psf_binheader_readf (psf, "4", &size) ;
-		psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-		if (size > SIGNED_SIZEOF (name) - 1)
-		{	psf_log_printf (psf, "Error : Bad name length.\n") ;
-			return SFE_MAT5_NO_BLOCK ;
-			} ;
-
-		psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
-		name [size] = 0 ;
-		}
-	else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR)
-	{	size = type >> 16 ;
-		if (size > 4)
-		{	psf_log_printf (psf, "Error : Bad name length.\n") ;
-			return SFE_MAT5_NO_BLOCK ;
-			} ;
-
-		psf_log_printf (psf, "    Type : %X\n", type) ;
-		psf_binheader_readf (psf, "4", &name) ;
-		name [size] = 0 ;
-		}
-	else
-		return SFE_MAT5_NO_BLOCK ;
-
-	psf_log_printf (psf, "    Name : %s\n", name) ;
-
-	psf_binheader_readf (psf, "44", &type, &size) ;
-	psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-skip_samplerate :
-	/*++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
-	if (rows == 0 && cols == 0)
-	{	psf_log_printf (psf, "*** Error : zero channel count.\n") ;
-		return SFE_CHANNEL_COUNT_ZERO ;
-		} ;
-
-	psf->sf.channels	= rows ;
-	psf->sf.frames		= cols ;
-
-	psf->sf.format = psf->endian | SF_FORMAT_MAT5 ;
-
-	switch (type)
-	{	case MAT5_TYPE_DOUBLE :
-				psf_log_printf (psf, "Data type : double\n") ;
-				psf->sf.format |= SF_FORMAT_DOUBLE ;
-				psf->bytewidth = 8 ;
-				break ;
-
-		case MAT5_TYPE_FLOAT :
-				psf_log_printf (psf, "Data type : float\n") ;
-				psf->sf.format |= SF_FORMAT_FLOAT ;
-				psf->bytewidth = 4 ;
-				break ;
-
-		case MAT5_TYPE_INT32 :
-				psf_log_printf (psf, "Data type : 32 bit PCM\n") ;
-				psf->sf.format |= SF_FORMAT_PCM_32 ;
-				psf->bytewidth = 4 ;
-				break ;
-
-		case MAT5_TYPE_INT16 :
-				psf_log_printf (psf, "Data type : 16 bit PCM\n") ;
-				psf->sf.format |= SF_FORMAT_PCM_16 ;
-				psf->bytewidth = 2 ;
-				break ;
-
-		case MAT5_TYPE_UCHAR :
-				psf_log_printf (psf, "Data type : unsigned 8 bit PCM\n") ;
-				psf->sf.format |= SF_FORMAT_PCM_U8 ;
-				psf->bytewidth = 1 ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "*** Error : Bad marker %08X\n", type) ;
-				return SFE_UNIMPLEMENTED ;
-		} ;
-
-	psf->dataoffset = psf_ftell (psf) ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	return 0 ;
-} /* mat5_read_header */
-
diff --git a/libs/libsndfile/src/mpc2k.c b/libs/libsndfile/src/mpc2k.c
deleted file mode 100644
index 0170f7ccfb..0000000000
--- a/libs/libsndfile/src/mpc2k.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*
-**	Info from Olivier Tristan <o.tristan@ultimatesoundbank.com>
-**
-**	HEADER
-**	2 magic bytes: 1 and 4.
-**	17 char for the name of the sample.
-**	3 bytes: level, tune and channels (0 for channels is mono while 1 is stereo)
-**	4 uint32: sampleStart, loopEnd, sampleFrames and loopLength
-**	1 byte: loopMode (0 no loop, 1 forward looping)
-**	1 byte: number of beat in loop
-**	1 uint16: sampleRate
-**
-**	DATA
-**	Data are always non compressed 16 bits interleaved
-*/
-
-#define HEADER_LENGTH		42	/* Sum of above data fields. */
-#define HEADER_NAME_LEN		17	/* Length of name string. */
-
-#define	SFE_MPC_NO_MARKER	666
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		mpc2k_close		(SF_PRIVATE *psf) ;
-
-static int		mpc2k_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		mpc2k_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mpc2k_open	(SF_PRIVATE *psf)
-{	int		error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = mpc2k_read_header (psf)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MPC2K)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (mpc2k_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = mpc2k_write_header ;
-		} ;
-
-	psf->container_close = mpc2k_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	error = pcm_init (psf) ;
-
-	return error ;
-} /* mpc2k_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mpc2k_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		mpc2k_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* mpc2k_close */
-
-static int
-mpc2k_write_header (SF_PRIVATE *psf, int calc_length)
-{	char sample_name [HEADER_NAME_LEN + 1] ;
-	sf_count_t	current ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->dataoffset = HEADER_LENGTH ;
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	/*
-	** Only attempt to seek if we are not writng to a pipe. If we are
-	** writing to a pipe we shouldn't be here anyway.
-	*/
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	snprintf (sample_name, sizeof (sample_name), "%s                    ", psf->file.name.c) ;
-
-	psf_binheader_writef (psf, "e11b", 1, 4, sample_name, make_size_t (HEADER_NAME_LEN)) ;
-	psf_binheader_writef (psf, "e111", 100, 0, (psf->sf.channels - 1) & 1) ;
-	psf_binheader_writef (psf, "et4888", 0, psf->sf.frames, psf->sf.frames, psf->sf.frames) ;
-	psf_binheader_writef (psf, "e112", 0, 1, (uint16_t) psf->sf.samplerate) ;
-
-	/* Always 16 bit little endian data. */
-	psf->bytewidth = 2 ;
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* mpc2k_write_header */
-
-static int
-mpc2k_read_header (SF_PRIVATE *psf)
-{	char sample_name [HEADER_NAME_LEN + 1] ;
-	unsigned char bytes [4] ;
-	uint32_t sample_start, loop_end, sample_frames, loop_length ;
-	uint16_t sample_rate ;
-
-	psf_binheader_readf (psf, "pebb", 0, bytes, 2, sample_name, make_size_t (HEADER_NAME_LEN)) ;
-
-	if (bytes [0] != 1 || bytes [1] != 4)
-		return SFE_MPC_NO_MARKER ;
-
-	sample_name [HEADER_NAME_LEN] = 0 ;
-
-	psf_log_printf (psf, "MPC2000\n  Name         : %s\n", sample_name) ;
-
-	psf_binheader_readf (psf, "eb4444", bytes, 3, &sample_start, &loop_end, &sample_frames, &loop_length) ;
-
-	psf->sf.channels = bytes [2] ? 2 : 1 ;
-
-	psf_log_printf (psf, "  Level        : %d\n  Tune         : %d\n  Stereo       : %s\n", bytes [0], bytes [1], bytes [2] ? "Yes" : "No") ;
-
-	psf_log_printf (psf, "  Sample start : %d\n  Loop end     : %d\n  Frames       : %d\n  Length       : %d\n", sample_start, loop_end, sample_frames, loop_length) ;
-
-	psf_binheader_readf (psf, "eb2", bytes, 2, &sample_rate) ;
-
-	psf_log_printf (psf, "  Loop mode    : %s\n  Beats        : %d\n  Sample rate  : %d\nEnd\n", bytes [0] ? "None" : "Fwd", bytes [1], sample_rate) ;
-
-	psf->sf.samplerate = sample_rate ;
-
-	psf->sf.format = SF_FORMAT_MPC2K | SF_FORMAT_PCM_16 ;
-
-	psf->dataoffset = psf_ftell (psf) ;
-
-	/* Always 16 bit little endian data. */
-	psf->bytewidth = 2 ;
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-	psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-	psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	return 0 ;
-} /* mpc2k_read_header */
-
diff --git a/libs/libsndfile/src/ms_adpcm.c b/libs/libsndfile/src/ms_adpcm.c
deleted file mode 100644
index 1643ddf443..0000000000
--- a/libs/libsndfile/src/ms_adpcm.c
+++ /dev/null
@@ -1,836 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"wav_w64.h"
-
-/* These required here because we write the header in this file. */
-
-#define RIFF_MARKER	(MAKE_MARKER ('R', 'I', 'F', 'F'))
-#define WAVE_MARKER	(MAKE_MARKER ('W', 'A', 'V', 'E'))
-#define fmt_MARKER	(MAKE_MARKER ('f', 'm', 't', ' '))
-#define fact_MARKER	(MAKE_MARKER ('f', 'a', 'c', 't'))
-#define data_MARKER	(MAKE_MARKER ('d', 'a', 't', 'a'))
-
-#define WAVE_FORMAT_MS_ADPCM	0x0002
-
-typedef struct
-{	int				channels, blocksize, samplesperblock, blocks, dataremaining ;
-	int				blockcount ;
-	sf_count_t		samplecount ;
-	short			*samples ;
-	unsigned char	*block ;
-	short			dummydata [] ; /* ISO C99 struct flexible array. */
-} MSADPCM_PRIVATE ;
-
-/*============================================================================================
-** MS ADPCM static data and functions.
-*/
-
-static int AdaptationTable [] =
-{	230, 230, 230, 230, 307, 409, 512, 614,
-	768, 614, 512, 409, 307, 230, 230, 230
-} ;
-
-/* TODO : The first 7 coef's are are always hardcode and must
-   appear in the actual WAVE file.  They should be read in
-   in case a sound program added extras to the list. */
-
-static int AdaptCoeff1 [MSADPCM_ADAPT_COEFF_COUNT] =
-{	256, 512, 0, 192, 240, 460, 392
-} ;
-
-static int AdaptCoeff2 [MSADPCM_ADAPT_COEFF_COUNT] =
-{	0, -256, 0, 64, 0, -208, -232
-} ;
-
-/*============================================================================================
-**	MS ADPCM Block Layout.
-**	======================
-**	Block is usually 256, 512 or 1024 bytes depending on sample rate.
-**	For a mono file, the block is laid out as follows:
-**		byte	purpose
-**		0		block predictor [0..6]
-**		1,2		initial idelta (positive)
-**		3,4		sample 1
-**		5,6		sample 0
-**		7..n	packed bytecodes
-**
-**	For a stereo file, the block is laid out as follows:
-**		byte	purpose
-**		0		block predictor [0..6] for left channel
-**		1		block predictor [0..6] for right channel
-**		2,3		initial idelta (positive) for left channel
-**		4,5		initial idelta (positive) for right channel
-**		6,7		sample 1 for left channel
-**		8,9		sample 1 for right channel
-**		10,11	sample 0 for left channel
-**		12,13	sample 0 for right channel
-**		14..n	packed bytecodes
-*/
-
-/*============================================================================================
-** Static functions.
-*/
-
-static	int	msadpcm_decode_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
-static sf_count_t msadpcm_read_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
-
-static	int	msadpcm_encode_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
-static sf_count_t msadpcm_write_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len) ;
-
-static sf_count_t	msadpcm_read_s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_read_i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	msadpcm_write_s	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_write_i	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	msadpcm_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t msadpcm_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static	int	msadpcm_close	(SF_PRIVATE *psf) ;
-
-static	void	choose_predictor (unsigned int channels, short *data, int *bpred, int *idelta) ;
-
-/*============================================================================================
-** MS ADPCM Read Functions.
-*/
-
-int
-wav_w64_msadpcm_init	(SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{	MSADPCM_PRIVATE	*pms ;
-	unsigned int	pmssize ;
-	int				count ;
-
-	if (psf->codec_data != NULL)
-	{	psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE)
-		samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-
-	pmssize = sizeof (MSADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
-
-	if (! (psf->codec_data = calloc (1, pmssize)))
-		return SFE_MALLOC_FAILED ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	pms->samples	= pms->dummydata ;
-	pms->block		= (unsigned char*) (pms->dummydata + psf->sf.channels * samplesperblock) ;
-
-	pms->channels	= psf->sf.channels ;
-	pms->blocksize	= blockalign ;
-	pms->samplesperblock = samplesperblock ;
-
-	if (pms->blocksize == 0)
-	{	psf_log_printf (psf, "*** Error : pms->blocksize should not be zero.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->file.mode == SFM_READ)
-	{	pms->dataremaining = psf->datalength ;
-
-		if (psf->datalength % pms->blocksize)
-			pms->blocks = psf->datalength / pms->blocksize + 1 ;
-		else
-			pms->blocks = psf->datalength / pms->blocksize ;
-
-		count = 2 * (pms->blocksize - 6 * pms->channels) / pms->channels ;
-		if (pms->samplesperblock != count)
-		{	psf_log_printf (psf, "*** Error : samplesperblock should be %d.\n", count) ;
-			return SFE_INTERNAL ;
-			} ;
-
-		psf->sf.frames = (psf->datalength / pms->blocksize) * pms->samplesperblock ;
-
-		psf_log_printf (psf, " bpred   idelta\n") ;
-
-		msadpcm_decode_block (psf, pms) ;
-
-		psf->read_short		= msadpcm_read_s ;
-		psf->read_int		= msadpcm_read_i ;
-		psf->read_float		= msadpcm_read_f ;
-		psf->read_double	= msadpcm_read_d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	pms->samples = pms->dummydata ;
-
-		pms->samplecount = 0 ;
-
-		psf->write_short	= msadpcm_write_s ;
-		psf->write_int		= msadpcm_write_i ;
-		psf->write_float	= msadpcm_write_f ;
-		psf->write_double	= msadpcm_write_d ;
-		} ;
-
-	psf->codec_close = msadpcm_close ;
-	psf->seek = msadpcm_seek ;
-
-	return 0 ;
-} /* wav_w64_msadpcm_init */
-
-static int
-msadpcm_decode_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{	int		chan, k, blockindx, sampleindx ;
-	short	bytecode, bpred [2], chan_idelta [2] ;
-
-	int predict ;
-	int current ;
-	int idelta ;
-
-	pms->blockcount ++ ;
-	pms->samplecount = 0 ;
-
-	if (pms->blockcount > pms->blocks)
-	{	memset (pms->samples, 0, pms->samplesperblock * pms->channels) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (pms->block, 1, pms->blocksize, psf)) != pms->blocksize)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pms->blocksize) ;
-
-	/* Read and check the block header. */
-
-	if (pms->channels == 1)
-	{	bpred [0] = pms->block [0] ;
-
-		if (bpred [0] >= 7)
-			psf_log_printf (psf, "MS ADPCM synchronisation error (%d).\n", bpred [0]) ;
-
-		chan_idelta [0] = pms->block [1] | (pms->block [2] << 8) ;
-		chan_idelta [1] = 0 ;
-
-		psf_log_printf (psf, "(%d) (%d)\n", bpred [0], chan_idelta [0]) ;
-
-		pms->samples [1] = pms->block [3] | (pms->block [4] << 8) ;
-		pms->samples [0] = pms->block [5] | (pms->block [6] << 8) ;
-		blockindx = 7 ;
-		}
-	else
-	{	bpred [0] = pms->block [0] ;
-		bpred [1] = pms->block [1] ;
-
-		if (bpred [0] >= 7 || bpred [1] >= 7)
-			psf_log_printf (psf, "MS ADPCM synchronisation error (%d %d).\n", bpred [0], bpred [1]) ;
-
-		chan_idelta [0] = pms->block [2] | (pms->block [3] << 8) ;
-		chan_idelta [1] = pms->block [4] | (pms->block [5] << 8) ;
-
-		psf_log_printf (psf, "(%d, %d) (%d, %d)\n", bpred [0], bpred [1], chan_idelta [0], chan_idelta [1]) ;
-
-		pms->samples [2] = pms->block [6] | (pms->block [7] << 8) ;
-		pms->samples [3] = pms->block [8] | (pms->block [9] << 8) ;
-
-		pms->samples [0] = pms->block [10] | (pms->block [11] << 8) ;
-		pms->samples [1] = pms->block [12] | (pms->block [13] << 8) ;
-
-		blockindx = 14 ;
-		} ;
-
-	/*--------------------------------------------------------
-	This was left over from a time when calculations were done
-	as ints rather than shorts. Keep this around as a reminder
-	in case I ever find a file which decodes incorrectly.
-
-    if (chan_idelta [0] & 0x8000)
-		chan_idelta [0] -= 0x10000 ;
-    if (chan_idelta [1] & 0x8000)
-		chan_idelta [1] -= 0x10000 ;
-	--------------------------------------------------------*/
-
-	/* Pull apart the packed 4 bit samples and store them in their
-	** correct sample positions.
-	*/
-
-	sampleindx = 2 * pms->channels ;
-	while (blockindx < pms->blocksize)
-	{	bytecode = pms->block [blockindx++] ;
-		pms->samples [sampleindx++] = (bytecode >> 4) & 0x0F ;
-		pms->samples [sampleindx++] = bytecode & 0x0F ;
-		} ;
-
-	/* Decode the encoded 4 bit samples. */
-
-	for (k = 2 * pms->channels ; k < (pms->samplesperblock * pms->channels) ; k ++)
-	{	chan = (pms->channels > 1) ? (k % 2) : 0 ;
-
-		bytecode = pms->samples [k] & 0xF ;
-
-		/* Compute next Adaptive Scale Factor (ASF) */
-		idelta = chan_idelta [chan] ;
-		chan_idelta [chan] = (AdaptationTable [bytecode] * idelta) >> 8 ;	/* => / 256 => FIXED_POINT_ADAPTATION_BASE == 256 */
-		if (chan_idelta [chan] < 16)
-			chan_idelta [chan] = 16 ;
-		if (bytecode & 0x8)
-			bytecode -= 0x10 ;
-
-		predict = ((pms->samples [k - pms->channels] * AdaptCoeff1 [bpred [chan]])
-					+ (pms->samples [k - 2 * pms->channels] * AdaptCoeff2 [bpred [chan]])) >> 8 ; /* => / 256 => FIXED_POINT_COEFF_BASE == 256 */
-		current = (bytecode * idelta) + predict ;
-
-		if (current > 32767)
-			current = 32767 ;
-		else if (current < -32768)
-			current = -32768 ;
-
-		pms->samples [k] = current ;
-		} ;
-
-	return 1 ;
-} /* msadpcm_decode_block */
-
-static sf_count_t
-msadpcm_read_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len)
-{	int	count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	if (pms->blockcount >= pms->blocks && pms->samplecount >= pms->samplesperblock)
-		{	memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ;
-			return total ;
-			} ;
-
-		if (pms->samplecount >= pms->samplesperblock)
-			msadpcm_decode_block (psf, pms) ;
-
-		count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
-		count = (len - indx > count) ? count : len - indx ;
-
-		memcpy (&(ptr [indx]), &(pms->samples [pms->samplecount * pms->channels]), count * sizeof (short)) ;
-		indx += count ;
-		pms->samplecount += count / pms->channels ;
-		total = indx ;
-		} ;
-
-	return total ;
-} /* msadpcm_read_block */
-
-static sf_count_t
-msadpcm_read_s	(SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE 	*pms ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = msadpcm_read_block (psf, pms, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* msadpcm_read_s */
-
-static sf_count_t
-msadpcm_read_i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = sptr [k] << 16 ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_read_i */
-
-static sf_count_t
-msadpcm_read_f	(SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (float) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_read_f */
-
-static sf_count_t
-msadpcm_read_d	(SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount = 0, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (double) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_read_d */
-
-static sf_count_t
-msadpcm_seek	(SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	MSADPCM_PRIVATE *pms ;
-	int			newblock, newsample ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	if (psf->datalength < 0 || psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	if (offset == 0)
-	{	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		pms->blockcount = 0 ;
-		msadpcm_decode_block (psf, pms) ;
-		pms->samplecount = 0 ;
-		return 0 ;
-		} ;
-
-	if (offset < 0 || offset > pms->blocks * pms->samplesperblock)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	newblock	= offset / pms->samplesperblock ;
-	newsample	= offset % pms->samplesperblock ;
-
-	if (mode == SFM_READ)
-	{	psf_fseek (psf, psf->dataoffset + newblock * pms->blocksize, SEEK_SET) ;
-		pms->blockcount = newblock ;
-		msadpcm_decode_block (psf, pms) ;
-		pms->samplecount = newsample ;
-		}
-	else
-	{	/* What to do about write??? */
-		psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	return newblock * pms->samplesperblock + newsample ;
-} /* msadpcm_seek */
-
-/*==========================================================================================
-** MS ADPCM Write Functions.
-*/
-
-void
-msadpcm_write_adapt_coeffs	(SF_PRIVATE *psf)
-{	int k ;
-
-	for (k = 0 ; k < MSADPCM_ADAPT_COEFF_COUNT ; k++)
-		psf_binheader_writef (psf, "22", AdaptCoeff1 [k], AdaptCoeff2 [k]) ;
-} /* msadpcm_write_adapt_coeffs */
-
-/*==========================================================================================
-*/
-
-static int
-msadpcm_encode_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{	unsigned int	blockindx ;
-	unsigned char	byte ;
-	int				chan, k, predict, bpred [2], idelta [2], errordelta, newsamp ;
-
-	choose_predictor (pms->channels, pms->samples, bpred, idelta) ;
-
-	/* Write the block header. */
-
-	if (pms->channels == 1)
-	{	pms->block [0]	= bpred [0] ;
-		pms->block [1]	= idelta [0] & 0xFF ;
-		pms->block [2]	= idelta [0] >> 8 ;
-		pms->block [3]	= pms->samples [1] & 0xFF ;
-		pms->block [4]	= pms->samples [1] >> 8 ;
-		pms->block [5]	= pms->samples [0] & 0xFF ;
-		pms->block [6]	= pms->samples [0] >> 8 ;
-
-		blockindx = 7 ;
-		byte = 0 ;
-
-		/* Encode the samples as 4 bit. */
-
-		for (k = 2 ; k < pms->samplesperblock ; k++)
-		{	predict = (pms->samples [k-1] * AdaptCoeff1 [bpred [0]] + pms->samples [k-2] * AdaptCoeff2 [bpred [0]]) >> 8 ;
-			errordelta = (pms->samples [k] - predict) / idelta [0] ;
-			if (errordelta < -8)
-				errordelta = -8 ;
-			else if (errordelta > 7)
-				errordelta = 7 ;
-			newsamp = predict + (idelta [0] * errordelta) ;
-			if (newsamp > 32767)
-				newsamp = 32767 ;
-			else if (newsamp < -32768)
-				newsamp = -32768 ;
-			if (errordelta < 0)
-				errordelta += 0x10 ;
-
-			byte = (byte << 4) | (errordelta & 0xF) ;
-			if (k % 2)
-			{	pms->block [blockindx++] = byte ;
-				byte = 0 ;
-				} ;
-
-			idelta [0] = (idelta [0] * AdaptationTable [errordelta]) >> 8 ;
-			if (idelta [0] < 16)
-				idelta [0] = 16 ;
-			pms->samples [k] = newsamp ;
-			} ;
-		}
-	else
-	{	/* Stereo file. */
-		pms->block [0]	= bpred [0] ;
-		pms->block [1]	= bpred [1] ;
-
-		pms->block [2]	= idelta [0] & 0xFF ;
-		pms->block [3]	= idelta [0] >> 8 ;
-		pms->block [4]	= idelta [1] & 0xFF ;
-		pms->block [5]	= idelta [1] >> 8 ;
-
-		pms->block [6]	= pms->samples [2] & 0xFF ;
-		pms->block [7]	= pms->samples [2] >> 8 ;
-		pms->block [8]	= pms->samples [3] & 0xFF ;
-		pms->block [9]	= pms->samples [3] >> 8 ;
-
-		pms->block [10]	= pms->samples [0] & 0xFF ;
-		pms->block [11]	= pms->samples [0] >> 8 ;
-		pms->block [12]	= pms->samples [1] & 0xFF ;
-		pms->block [13]	= pms->samples [1] >> 8 ;
-
-		blockindx = 14 ;
-		byte = 0 ;
-		chan = 1 ;
-
-		for (k = 4 ; k < 2 * pms->samplesperblock ; k++)
-		{	chan = k & 1 ;
-
-			predict = (pms->samples [k-2] * AdaptCoeff1 [bpred [chan]] + pms->samples [k-4] * AdaptCoeff2 [bpred [chan]]) >> 8 ;
-			errordelta = (pms->samples [k] - predict) / idelta [chan] ;
-
-
-			if (errordelta < -8)
-				errordelta = -8 ;
-			else if (errordelta > 7)
-				errordelta = 7 ;
-			newsamp = predict + (idelta [chan] * errordelta) ;
-			if (newsamp > 32767)
-				newsamp = 32767 ;
-			else if (newsamp < -32768)
-				newsamp = -32768 ;
-			if (errordelta < 0)
-				errordelta += 0x10 ;
-
-			byte = (byte << 4) | (errordelta & 0xF) ;
-
-			if (chan)
-			{	pms->block [blockindx++] = byte ;
-				byte = 0 ;
-				} ;
-
-			idelta [chan] = (idelta [chan] * AdaptationTable [errordelta]) >> 8 ;
-			if (idelta [chan] < 16)
-				idelta [chan] = 16 ;
-			pms->samples [k] = newsamp ;
-			} ;
-		} ;
-
-	/* Write the block to disk. */
-
-	if ((k = psf_fwrite (pms->block, 1, pms->blocksize, psf)) != pms->blocksize)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pms->blocksize) ;
-
-	memset (pms->samples, 0, pms->samplesperblock * sizeof (short)) ;
-
-	pms->blockcount ++ ;
-	pms->samplecount = 0 ;
-
-	return 1 ;
-} /* msadpcm_encode_block */
-
-static sf_count_t
-msadpcm_write_block	(SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len)
-{	int		count, total = 0, indx = 0 ;
-
-	while (indx < len)
-	{	count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
-
-		if (count > len - indx)
-			count = len - indx ;
-
-		memcpy (&(pms->samples [pms->samplecount * pms->channels]), &(ptr [total]), count * sizeof (short)) ;
-		indx += count ;
-		pms->samplecount += count / pms->channels ;
-		total = indx ;
-
-		if (pms->samplecount >= pms->samplesperblock)
-			msadpcm_encode_block (psf, pms) ;
-		} ;
-
-	return total ;
-} /* msadpcm_write_block */
-
-static sf_count_t
-msadpcm_write_s	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = msadpcm_write_block (psf, pms, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* msadpcm_write_s */
-
-static sf_count_t
-msadpcm_write_i	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = ptr [total + k] >> 16 ;
-		count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_write_i */
-
-static sf_count_t
-msadpcm_write_f	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_write_f */
-
-static sf_count_t
-msadpcm_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	MSADPCM_PRIVATE *pms ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-	return total ;
-} /* msadpcm_write_d */
-
-/*========================================================================================
-*/
-
-static int
-msadpcm_close	(SF_PRIVATE *psf)
-{	MSADPCM_PRIVATE *pms ;
-
-	pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	/*  Now we know static int for certain the length of the file we can
-		**  re-write the header.
-		*/
-
-		if (pms->samplecount && pms->samplecount < pms->samplesperblock)
-			msadpcm_encode_block (psf, pms) ;
-		} ;
-
-	return 0 ;
-} /* msadpcm_close */
-
-/*========================================================================================
-** Static functions.
-*/
-
-/*----------------------------------------------------------------------------------------
-**	Choosing the block predictor.
-**	Each block requires a predictor and an idelta for each channel.
-**	The predictor is in the range [0..6] which is an indx into the	two AdaptCoeff tables.
-**	The predictor is chosen by trying all of the possible predictors on a small set of
-**	samples at the beginning of the block. The predictor with the smallest average
-**	abs (idelta) is chosen as the best predictor for this block.
-**	The value of idelta is chosen to to give a 4 bit code value of +/- 4 (approx. half the
-**	max. code value). If the average abs (idelta) is zero, the sixth predictor is chosen.
-**	If the value of idelta is less then 16 it is set to 16.
-**
-**	Microsoft uses an IDELTA_COUNT (number of sample pairs used to choose best predictor)
-**	value of 3. The best possible results would be obtained by using all the samples to
-**	choose the predictor.
-*/
-
-#define		IDELTA_COUNT	3
-
-static	void
-choose_predictor (unsigned int channels, short *data, int *block_pred, int *idelta)
-{	unsigned int	chan, k, bpred, idelta_sum, best_bpred, best_idelta ;
-
-	for (chan = 0 ; chan < channels ; chan++)
-	{	best_bpred = best_idelta = 0 ;
-
-		for (bpred = 0 ; bpred < 7 ; bpred++)
-		{	idelta_sum = 0 ;
-			for (k = 2 ; k < 2 + IDELTA_COUNT ; k++)
-				idelta_sum += abs (data [k * channels] - ((data [(k - 1) * channels] * AdaptCoeff1 [bpred] + data [(k - 2) * channels] * AdaptCoeff2 [bpred]) >> 8)) ;
-			idelta_sum /= (4 * IDELTA_COUNT) ;
-
-			if (bpred == 0 || idelta_sum < best_idelta)
-			{	best_bpred = bpred ;
-				best_idelta = idelta_sum ;
-				} ;
-
-			if (! idelta_sum)
-			{	best_bpred = bpred ;
-				best_idelta = 16 ;
-				break ;
-				} ;
-
-			} ; /* for bpred ... */
-		if (best_idelta < 16)
-			best_idelta = 16 ;
-
-		block_pred [chan]	= best_bpred ;
-		idelta [chan]		= best_idelta ;
-		} ;
-
-	return ;
-} /* choose_predictor */
-
diff --git a/libs/libsndfile/src/new.c b/libs/libsndfile/src/new.c
deleted file mode 100644
index 23f3087f12..0000000000
--- a/libs/libsndfile/src/new.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-new_open	(SF_PRIVATE *psf)
-{	if (psf)
-		return SFE_UNIMPLEMENTED ;
-	return (psf && 0) ;
-} /* new_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	new_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-new_open (SF_PRIVATE *psf)
-{	int	subformat, error = 0 ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		return SFE_UNIMPLEMENTED ;
-
-	if ((error = new_read_header (psf)))
-			return error ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_WVE)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	return error ;
-} /* new_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-new_read_header (SF_PRIVATE *psf)
-{	int marker ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pm", 0, &marker) ;
-	if (marker != ALAW_MARKER)
-		return SFE_WVE_NOT_WVE ;
-
-	psf_binheader_readf (psf, "m", &marker) ;
-	if (marker != SOUN_MARKER)
-		return SFE_WVE_NOT_WVE ;
-
-	psf_binheader_readf (psf, "m", &marker) ;
-	if (marker != DFIL_MARKER)
-		return SFE_WVE_NOT_WVE ;
-
-	psf_log_printf (psf, "Read only : Psion Alaw\n"
-			"  Sample Rate : 8000\n"
-			"  Channels    : 1\n"
-			"  Encoding    : A-law\n") ;
-
-	psf->dataoffset = 0x20 ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	psf->sf.format		= SF_FORMAT_WVE | SF_FORMAT_ALAW ;
-	psf->sf.samplerate	= 8000 ;
-	psf->sf.frames		= psf->datalength ;
-	psf->sf.channels	= 1 ;
-
-	return alaw_init (psf) ;
-} /* new_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-#endif
diff --git a/libs/libsndfile/src/nist.c b/libs/libsndfile/src/nist.c
deleted file mode 100644
index 2aa679e55c..0000000000
--- a/libs/libsndfile/src/nist.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Some of the information used to read NIST files was gleaned from
-**	reading the code of Bill Schottstaedt's sndlib library
-**		ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz
-**	However, no code from that package was used.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-*/
-
-#define	NIST_HEADER_LENGTH	1024
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int	nist_close	(SF_PRIVATE *psf) ;
-static	int nist_write_header	(SF_PRIVATE *psf, int calc_length) ;
-static	int nist_read_header	(SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-nist_open	(SF_PRIVATE *psf)
-{	int error ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = nist_read_header (psf)))
-			return error ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_NIST)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
-			psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-		psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-		psf->sf.frames = 0 ;
-
-		if ((error = nist_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = nist_write_header ;
-		} ;
-
-	psf->container_close = nist_close ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ULAW :
-				error = ulaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				error = alaw_init (psf) ;
-				break ;
-
-		default : error = SFE_UNIMPLEMENTED ;
-				break ;
-		} ;
-
-	return error ;
-} /* nist_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static char bad_header [] =
-{	'N', 'I', 'S', 'T', '_', '1', 'A', 0x0d, 0x0a,
-	' ', ' ', ' ', '1', '0', '2', '4', 0x0d, 0x0a,
-	0
-} ;
-
-	static int
-nist_read_header (SF_PRIVATE *psf)
-{	char	psf_header [NIST_HEADER_LENGTH + 2] ;
-	int		bitwidth = 0, count, encoding ;
-	unsigned bytes = 0 ;
-	char 	str [64], *cptr ;
-	long	samples ;
-
-	if (sizeof (psf->header) <= NIST_HEADER_LENGTH)
-		return SFE_INTERNAL ;
-
-	/* Go to start of file and read in the whole header. */
-	psf_binheader_readf (psf, "pb", 0, psf_header, NIST_HEADER_LENGTH) ;
-
-	/* Header is a string, so make sure it is null terminated. */
-	psf_header [NIST_HEADER_LENGTH] = 0 ;
-
-	/* Now trim the header after the end marker. */
-	if ((cptr = strstr (psf_header, "end_head")))
-	{	cptr += strlen ("end_head") + 1 ;
-		cptr [0] = 0 ;
-		} ;
-
-	if (strstr (psf_header, bad_header) == psf_header)
-		return SFE_NIST_CRLF_CONVERISON ;
-
-	/* Make sure its a NIST file. */
-	if (strstr (psf_header, "NIST_1A\n") != psf_header)
-	{	psf_log_printf (psf, "Not a NIST file.\n") ;
-		return SFE_NIST_BAD_HEADER ;
-		} ;
-
-	if (sscanf (psf_header, "NIST_1A\n%d\n", &count) == 1)
-		psf->dataoffset = count ;
-	else
-	{	psf_log_printf (psf, "*** Suspicious header length.\n") ;
-		psf->dataoffset = NIST_HEADER_LENGTH ;
-		} ;
-
-	/* Determine sample encoding, start by assuming PCM. */
-	encoding = SF_FORMAT_PCM_U8 ;
-	if ((cptr = strstr (psf_header, "sample_coding -s")))
-	{	sscanf (cptr, "sample_coding -s%d %63s", &count, str) ;
-
-		if (strcmp (str, "pcm") == 0)
-		{	/* Correct this later when we find out the bitwidth. */
-			encoding = SF_FORMAT_PCM_U8 ;
-			}
-		else if (strcmp (str, "alaw") == 0)
-			encoding = SF_FORMAT_ALAW ;
-		else if ((strcmp (str, "ulaw") == 0) || (strcmp (str, "mu-law") == 0))
-			encoding = SF_FORMAT_ULAW ;
-		else
-		{	psf_log_printf (psf, "*** Unknown encoding : %s\n", str) ;
-			encoding = 0 ;
-			} ;
-		} ;
-
-	if ((cptr = strstr (psf_header, "channel_count -i ")) != NULL)
-		sscanf (cptr, "channel_count -i %d", &(psf->sf.channels)) ;
-
-	if ((cptr = strstr (psf_header, "sample_rate -i ")) != NULL)
-		sscanf (cptr, "sample_rate -i %d", &(psf->sf.samplerate)) ;
-
-	if ((cptr = strstr (psf_header, "sample_count -i ")) != NULL)
-	{	sscanf (cptr, "sample_count -i %ld", &samples) ;
-		psf->sf.frames = samples ;
-		} ;
-
-	if ((cptr = strstr (psf_header, "sample_n_bytes -i ")) != NULL)
-		sscanf (cptr, "sample_n_bytes -i %d", &(psf->bytewidth)) ;
-
-	/* Default endian-ness (for 8 bit, u-law, A-law. */
-	psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-	/* This is where we figure out endian-ness. */
-	if ((cptr = strstr (psf_header, "sample_byte_format -s"))
-		&& sscanf (cptr, "sample_byte_format -s%u %8s", &bytes, str) == 2)
-	{
-		if (bytes != strlen (str))
-			psf_log_printf (psf, "Weird sample_byte_format : strlen '%s' != %d\n", str, bytes) ;
-
-		if (bytes > 1)
-		{	if (psf->bytewidth == 0)
-				psf->bytewidth = bytes ;
-			else if (psf->bytewidth - bytes != 0)
-			{	psf_log_printf (psf, "psf->bytewidth (%d) != bytes (%d)\n", psf->bytewidth, bytes) ;
-				return SFE_NIST_BAD_ENCODING ;
-				} ;
-
-			if (strcmp (str, "01") == 0)
-				psf->endian = SF_ENDIAN_LITTLE ;
-			else if (strcmp (str, "10") == 0)
-				psf->endian = SF_ENDIAN_BIG ;
-			else
-			{	psf_log_printf (psf, "Weird endian-ness : %s\n", str) ;
-				return SFE_NIST_BAD_ENCODING ;
-				} ;
-			} ;
-
-		psf->sf.format |= psf->endian ;
-		} ;
-
-	if ((cptr = strstr (psf_header, "sample_sig_bits -i ")))
-		sscanf (cptr, "sample_sig_bits -i %d", &bitwidth) ;
-
-	if (strstr (psf_header, "channels_interleaved -s5 FALSE"))
-	{	psf_log_printf (psf, "Non-interleaved data unsupported.\n", str) ;
-		return SFE_NIST_BAD_ENCODING ;
-		} ;
-
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (encoding == SF_FORMAT_PCM_U8)
-	{	switch (psf->bytewidth)
-		{	case 1 :
-					psf->sf.format |= SF_FORMAT_PCM_S8 ;
-					break ;
-
-			case 2 :
-					psf->sf.format |= SF_FORMAT_PCM_16 ;
-					break ;
-
-			case 3 :
-					psf->sf.format |= SF_FORMAT_PCM_24 ;
-					break ;
-
-			case 4 :
-					psf->sf.format |= SF_FORMAT_PCM_32 ;
-					break ;
-
-			default : break ;
-			} ;
-		}
-	else if (encoding != 0)
-		psf->sf.format |= encoding ;
-	else
-		return SFE_UNIMPLEMENTED ;
-
-	/* Sanitize psf->sf.format. */
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_ULAW :
-		case SF_FORMAT_ALAW :
-		case SF_FORMAT_PCM_U8 :
-			/* Blank out endian bits. */
-			psf->sf.format = SF_FORMAT_NIST | SF_CODEC (psf->sf.format) ;
-			break ;
-
-		default :
-			break ;
-		} ;
-
-	return 0 ;
-} /* nist_read_header */
-
-static int
-nist_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		nist_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* nist_close */
-
-/*=========================================================================
-*/
-
-static int
-nist_write_header (SF_PRIVATE *psf, int calc_length)
-{	const char	*end_str ;
-	long		samples ;
-	sf_count_t	current ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		if (psf->bytewidth > 0)
-			psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	if (psf->endian == SF_ENDIAN_BIG)
-		end_str = "10" ;
-	else if (psf->endian == SF_ENDIAN_LITTLE)
-		end_str = "01" ;
-	else
-		end_str = "error" ;
-
-	/* Clear the whole header. */
-	memset (psf->header, 0, sizeof (psf->header)) ;
-	psf->headindex = 0 ;
-
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_asciiheader_printf (psf, "NIST_1A\n   1024\n") ;
-	psf_asciiheader_printf (psf, "channel_count -i %d\n", psf->sf.channels) ;
-	psf_asciiheader_printf (psf, "sample_rate -i %d\n", psf->sf.samplerate) ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-				psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n") ;
-				psf_asciiheader_printf (psf, "sample_n_bytes -i 1\n"
-											"sample_sig_bits -i 8\n") ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-				psf_asciiheader_printf (psf, "sample_n_bytes -i %d\n", psf->bytewidth) ;
-				psf_asciiheader_printf (psf, "sample_sig_bits -i %d\n", psf->bytewidth * 8) ;
-				psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n"
-								"sample_byte_format -s%d %s\n", psf->bytewidth, end_str) ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				psf_asciiheader_printf (psf, "sample_coding -s4 alaw\n") ;
-				psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
-				break ;
-
-		case SF_FORMAT_ULAW :
-				psf_asciiheader_printf (psf, "sample_coding -s4 ulaw\n") ;
-				psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
-				break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	psf->dataoffset = NIST_HEADER_LENGTH ;
-
-	/* Fix this */
-	samples = psf->sf.frames ;
-	psf_asciiheader_printf (psf, "sample_count -i %ld\n", samples) ;
-	psf_asciiheader_printf (psf, "end_head\n") ;
-
-	/* Zero fill to dataoffset. */
-	psf_binheader_writef (psf, "z", (size_t) (NIST_HEADER_LENGTH - psf->headindex)) ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* nist_write_header */
-
diff --git a/libs/libsndfile/src/ogg.c b/libs/libsndfile/src/ogg.c
deleted file mode 100644
index 7bc4b31f9f..0000000000
--- a/libs/libsndfile/src/ogg.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 John ffitch
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-static int	ogg_close (SF_PRIVATE *psf) ;
-static int	ogg_stream_classify (SF_PRIVATE *psf, OGG_PRIVATE * odata) ;
-static int	ogg_page_classify (SF_PRIVATE * psf, const ogg_page * og) ;
-
-int
-ogg_open (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = calloc (1, sizeof (OGG_PRIVATE)) ;
-	sf_count_t pos = psf_ftell (psf) ;
-	int	error = 0 ;
-
-	psf->container_data = odata ;
-	psf->container_close = ogg_close ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-		if ((error = ogg_stream_classify (psf, odata)) != 0)
-			return error ;
-
-	/* Reset everything to an initial state. */
-	ogg_sync_clear (&odata->osync) ;
-	ogg_stream_clear (&odata->ostream) ;
-	psf_fseek (psf, pos, SEEK_SET) ;
-
-	if (SF_ENDIAN (psf->sf.format) != 0)
-		return SFE_BAD_ENDIAN ;
-
-	switch (psf->sf.format)
-	{	case SF_FORMAT_OGG | SF_FORMAT_VORBIS :
-			return ogg_vorbis_open (psf) ;
-
-		case SF_FORMAT_OGGFLAC :
-			free (psf->container_data) ;
-			psf->container_data = NULL ;
-			psf->container_close = NULL ;
-			return flac_open (psf) ;
-
-#if ENABLE_EXPERIMENTAL_CODE
-		case SF_FORMAT_OGG | SF_FORMAT_SPEEX :
-			return ogg_speex_open (psf) ;
-
-		case SF_FORMAT_OGG | SF_FORMAT_PCM_16 :
-		case SF_FORMAT_OGG | SF_FORMAT_PCM_24 :
-			return ogg_pcm_open (psf) ;
-#endif
-
-		default :
-			break ;
-		} ;
-
-	psf_log_printf (psf, "%s : bad psf->sf.format 0x%x.\n", __func__, psf->sf.format) ;
-	return SFE_INTERNAL ;
-} /* ogg_open */
-
-
-static int
-ogg_close (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-
-	ogg_sync_clear (&odata->osync) ;
-	ogg_stream_clear (&odata->ostream) ;
-
-	return 0 ;
-} /* ogg_close */
-
-static int
-ogg_stream_classify (SF_PRIVATE *psf, OGG_PRIVATE* odata)
-{	char *buffer ;
-	int	bytes, nn ;
-
-	/* Call this here so it only gets called once, so no memory is leaked. */
-	ogg_sync_init (&odata->osync) ;
-
-	odata->eos = 0 ;
-
-	/* Weird stuff happens if these aren't called. */
-	ogg_stream_reset (&odata->ostream) ;
-	ogg_sync_reset (&odata->osync) ;
-
-	/*
-	**	Grab some data at the head of the stream.  We want the first page
-	**	(which is guaranteed to be small and only contain the Vorbis
-	**	stream initial header) We need the first page to get the stream
-	**	serialno.
-	*/
-
-	/* Expose the buffer */
-	buffer = ogg_sync_buffer (&odata->osync, 4096L) ;
-
-	/* Grab the part of the header that has already been read. */
-	memcpy (buffer, psf->header, psf->headindex) ;
-	bytes = psf->headindex ;
-
-	/* Submit a 4k block to libvorbis' Ogg layer */
-	bytes += psf_fread (buffer + psf->headindex, 1, 4096 - psf->headindex, psf) ;
-	ogg_sync_wrote (&odata->osync, bytes) ;
-
-	/* Get the first page. */
-	if ((nn = ogg_sync_pageout (&odata->osync, &odata->opage)) != 1)
-	{
-		/* Have we simply run out of data?  If so, we're done. */
-		if (bytes < 4096)
-			return 0 ;
-
-		/* Error case.  Must not be Vorbis data */
-		psf_log_printf (psf, "Input does not appear to be an Ogg bitstream.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	/*
-	**	Get the serial number and set up the rest of decode.
-	**	Serialno first ; use it to set up a logical stream.
-	*/
-	ogg_stream_clear (&odata->ostream) ;
-	ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-
-	if (ogg_stream_pagein (&odata->ostream, &odata->opage) < 0)
-	{	/* Error ; stream version mismatch perhaps. */
-		psf_log_printf (psf, "Error reading first page of Ogg bitstream data\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	if (ogg_stream_packetout (&odata->ostream, &odata->opacket) != 1)
-	{	/* No page? must not be vorbis. */
-		psf_log_printf (psf, "Error reading initial header packet.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	odata->codec = ogg_page_classify (psf, &odata->opage) ;
-
-	switch (odata->codec)
-	{	case OGG_VORBIS :
-			psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-			return 0 ;
-
-		case OGG_FLAC :
-		case OGG_FLAC0 :
-			psf->sf.format = SF_FORMAT_OGGFLAC ;
-			return 0 ;
-
-		case OGG_SPEEX :
-			psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-			return 0 ;
-
-		case OGG_PCM :
-			psf_log_printf (psf, "Detected Ogg/PCM data. This is not supported yet.\n") ;
-			return SFE_UNIMPLEMENTED ;
-
-		default :
-			break ;
-		} ;
-
-	psf_log_printf (psf, "This Ogg bitstream contains some uknown data type.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_stream_classify */
-
-/*==============================================================================
-*/
-
-static struct
-{	const char *str, *name ;
-	int len, codec ;
-} codec_lookup [] =
-{	{	"Annodex",		"Annodex",	8, OGG_ANNODEX },
-	{	"AnxData",		"AnxData",	7, OGG_ANXDATA },
-	{	"\177FLAC",		"Flac1",	5, OGG_FLAC },
-	{	"fLaC",			"Flac0",	4, OGG_FLAC0 },
-	{	"PCM     ",		"PCM",		8, OGG_PCM },
-	{	"Speex",		"Speex",	5, OGG_SPEEX },
-	{	"\001vorbis",	"Vorbis",	7, OGG_VORBIS },
-} ;
-
-static int
-ogg_page_classify (SF_PRIVATE * psf, const ogg_page * og)
-{	int k, len ;
-
-	for (k = 0 ; k < ARRAY_LEN (codec_lookup) ; k++)
-	{	if (codec_lookup [k].len > og->body_len)
-			continue ;
-
-		if (memcmp (og->body, codec_lookup [k].str, codec_lookup [k].len) == 0)
-		{	psf_log_printf (psf, "Ogg stream data : %s\n", codec_lookup [k].name) ;
-			psf_log_printf (psf, "Stream serialno : %u\n", (uint32_t) ogg_page_serialno (og)) ;
-			return codec_lookup [k].codec ;
-			} ;
-		} ;
-
-	len = og->body_len < 8 ? og->body_len : 8 ;
-
-	psf_log_printf (psf, "Ogg_stream data : '") ;
-	for (k = 0 ; k < len ; k++)
-		psf_log_printf (psf, "%c", isprint (og->body [k]) ? og->body [k] : '.') ;
-	psf_log_printf (psf, "'     ") ;
-	for (k = 0 ; k < len ; k++)
-		psf_log_printf (psf, " %02x", og->body [k] & 0xff) ;
-	psf_log_printf (psf, "\n") ;
-
-	return 0 ;
-} /* ogg_page_classify */
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-ogg_open	(SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Vorbis support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg.h b/libs/libsndfile/src/ogg.h
deleted file mode 100644
index 88544bb141..0000000000
--- a/libs/libsndfile/src/ogg.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SF_SRC_OGG_H
-
-enum
-{	OGG_ANNODEX = 300,
-	OGG_ANXDATA,
-	OGG_FLAC,
-	OGG_FLAC0,
-	OGG_PCM,
-	OGG_SPEEX,
-	OGG_VORBIS,
-} ;
-
-typedef struct
-{	/* Sync and verify incoming physical bitstream */
-	ogg_sync_state osync ;
-	/* Take physical pages, weld into a logical stream of packets */
-	ogg_stream_state ostream ;
-	/* One Ogg bitstream page.  Vorbis packets are inside */
-	ogg_page opage ;
-	/* One raw packet of data for decode */
-	ogg_packet opacket ;
-	int eos ;
-	int codec ;
-} OGG_PRIVATE ;
-
-
-#define readint(buf, base) (((buf [base + 3] << 24) & 0xff000000) | \
-								((buf [base + 2] <<16) & 0xff0000) | \
-								((buf [base + 1] << 8) & 0xff00) | \
-								(buf [base] & 0xff))
-
-
-
-#endif /* SF_SRC_OGG_H */
diff --git a/libs/libsndfile/src/ogg_opus.c b/libs/libsndfile/src/ogg_opus.c
deleted file mode 100644
index 0824810c0d..0000000000
--- a/libs/libsndfile/src/ogg_opus.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-typedef struct
-{	int32_t serialno ;
-
-
-	void * state ;
-} OPUS_PRIVATE ;
-
-static int	ogg_opus_read_header (SF_PRIVATE * psf) ;
-static int	ogg_opus_close (SF_PRIVATE *psf) ;
-
-int
-ogg_opus_open (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-	OPUS_PRIVATE* oopus = calloc (1, sizeof (OPUS_PRIVATE)) ;
-	int	error = 0 ;
-
-	if (odata == NULL)
-	{	psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->codec_data = oopus ;
-	if (oopus == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-	{	/* Call this here so it only gets called once, so no memory is leaked. */
-		ogg_sync_init (&odata->osync) ;
-
-		if ((error = ogg_opus_read_header (psf)))
-			return error ;
-
-#if 0
-		psf->read_short		= ogg_opus_read_s ;
-		psf->read_int		= ogg_opus_read_i ;
-		psf->read_float		= ogg_opus_read_f ;
-		psf->read_double	= ogg_opus_read_d ;
-		psf->sf.frames		= ogg_opus_length (psf) ;
-#endif
-		} ;
-
-	psf->codec_close = ogg_opus_close ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{
-#if 0
-		/* Set the default oopus quality here. */
-		vdata->quality = 0.4 ;
-
-		psf->write_header	= ogg_opus_write_header ;
-		psf->write_short	= ogg_opus_write_s ;
-		psf->write_int		= ogg_opus_write_i ;
-		psf->write_float	= ogg_opus_write_f ;
-		psf->write_double	= ogg_opus_write_d ;
-#endif
-
-		psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-		psf->strings.flags = SF_STR_ALLOW_START ;
-		} ;
-
-	psf->bytewidth = 1 ;
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-	psf->seek = ogg_opus_seek ;
-	psf->command = ogg_opus_command ;
-#endif
-
-	/* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-	psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-	psf->sf.sections = 1 ;
-
-	psf->datalength = 1 ;
-	psf->dataoffset = 0 ;
-	/* End FIXME. */
-
-	return error ;
-} /* ogg_opus_open */
-
-static int
-ogg_opus_read_header (SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* ogg_opus_read_header */
-
-static int
-ogg_opus_close (SF_PRIVATE * UNUSED (psf))
-{
-
-
-	return 0 ;
-} /* ogg_opus_close */
-
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_opus_open (SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Opus support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_opus_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_pcm.c b/libs/libsndfile/src/ogg_pcm.c
deleted file mode 100644
index 2e3b7f251c..0000000000
--- a/libs/libsndfile/src/ogg_pcm.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-typedef struct
-{	int32_t serialno ;
-
-
-	void * state ;
-} OPCM_PRIVATE ;
-
-static int	opcm_read_header (SF_PRIVATE * psf) ;
-static int	opcm_close (SF_PRIVATE *psf) ;
-
-int
-ogg_pcm_open (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-	OPCM_PRIVATE* opcm = calloc (1, sizeof (OPCM_PRIVATE)) ;
-	int	error = 0 ;
-
-	if (odata == NULL)
-	{	psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->codec_data = opcm ;
-	if (opcm == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-	{	/* Call this here so it only gets called once, so no memory is leaked. */
-		ogg_sync_init (&odata->osync) ;
-
-		if ((error = opcm_read_header (psf)))
-			return error ;
-
-#if 0
-		psf->read_short		= opcm_read_s ;
-		psf->read_int		= opcm_read_i ;
-		psf->read_float		= opcm_read_f ;
-		psf->read_double	= opcm_read_d ;
-		psf->sf.frames		= opcm_length (psf) ;
-#endif
-		} ;
-
-	psf->codec_close = opcm_close ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{
-#if 0
-		/* Set the default opcm quality here. */
-		vdata->quality = 0.4 ;
-
-		psf->write_header	= opcm_write_header ;
-		psf->write_short	= opcm_write_s ;
-		psf->write_int		= opcm_write_i ;
-		psf->write_float	= opcm_write_f ;
-		psf->write_double	= opcm_write_d ;
-#endif
-
-		psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-		psf->strings.flags = SF_STR_ALLOW_START ;
-		} ;
-
-	psf->bytewidth = 1 ;
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-	psf->seek = opcm_seek ;
-	psf->command = opcm_command ;
-#endif
-
-	/* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-	psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-	psf->sf.sections = 1 ;
-
-	psf->datalength = 1 ;
-	psf->dataoffset = 0 ;
-	/* End FIXME. */
-
-	return error ;
-} /* ogg_pcm_open */
-
-static int
-opcm_read_header (SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* opcm_read_header */
-
-static int
-opcm_close (SF_PRIVATE * UNUSED (psf))
-{
-
-
-	return 0 ;
-} /* opcm_close */
-
-
-
-/*
-encoded_speex_frames = (frames_per_packet * Packets)
-                     = 1 * 272
-                     = 272
-
-audio_samples = encoded_speex_frames * frame_size
-              = 272 * 640
-              = 174080
-
-duration = audio_samples / rate
-         = 174080 / 44100
-         = 3.947
-*/
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_pcm_open (SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Speex support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_pcm_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_speex.c b/libs/libsndfile/src/ogg_speex.c
deleted file mode 100644
index f24e242e57..0000000000
--- a/libs/libsndfile/src/ogg_speex.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include <speex/speex.h>
-#include <speex/speex_stereo.h>
-#include <speex/speex_header.h>
-#include <speex/speex_callbacks.h>
-
-#include "ogg.h"
-
-#define	OGG_SPX_READ_SIZE	200
-
-typedef struct
-{	SpeexBits bits ;
-
-	int32_t serialno ;
-
-	int frame_size, granule_frame_size, nframes ;
-	int force_mode ;
-
-	SpeexStereoState stereo ;
-	SpeexHeader header ;
-
-	void * state ;
-} SPX_PRIVATE ;
-
-static int	spx_read_header (SF_PRIVATE * psf) ;
-static int	spx_close (SF_PRIVATE *psf) ;
-static void *spx_header_read (SF_PRIVATE * psf, ogg_packet *op, spx_int32_t enh_enabled, int force_mode) ;
-static void spx_print_comments (const char *comments, int length) ;
-
-int
-ogg_speex_open (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-	SPX_PRIVATE* spx = calloc (1, sizeof (SPX_PRIVATE)) ;
-	int	error = 0 ;
-
-	if (odata == NULL)
-	{	psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->codec_data = spx ;
-	if (spx == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_READ)
-	{	/* Call this here so it only gets called once, so no memory is leaked. */
-		ogg_sync_init (&odata->osync) ;
-
-		if ((error = spx_read_header (psf)))
-			return error ;
-
-#if 0
-		psf->read_short		= spx_read_s ;
-		psf->read_int		= spx_read_i ;
-		psf->read_float		= spx_read_f ;
-		psf->read_double	= spx_read_d ;
-		psf->sf.frames		= spx_length (psf) ;
-#endif
-		} ;
-
-	psf->codec_close = spx_close ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{
-#if 0
-		/* Set the default spx quality here. */
-		vdata->quality = 0.4 ;
-
-		psf->write_header	= spx_write_header ;
-		psf->write_short	= spx_write_s ;
-		psf->write_int		= spx_write_i ;
-		psf->write_float	= spx_write_f ;
-		psf->write_double	= spx_write_d ;
-#endif
-
-		psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-		psf->strings.flags = SF_STR_ALLOW_START ;
-		} ;
-
-	psf->bytewidth = 1 ;
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-	psf->seek = spx_seek ;
-	psf->command = spx_command ;
-#endif
-
-	/* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-	psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-	psf->sf.sections = 1 ;
-
-	psf->datalength = 1 ;
-	psf->dataoffset = 0 ;
-	/* End FIXME. */
-
-	return error ;
-} /* ogg_speex_open */
-
-#define le_short (x)	(x)
-
-static int
-spx_read_header (SF_PRIVATE * psf)
-{	static SpeexStereoState STEREO_INIT = SPEEX_STEREO_STATE_INIT ;
-
-	OGG_PRIVATE* odata = psf->container_data ;
-	SPX_PRIVATE* spx = psf->codec_data ;
-
-	ogg_int64_t page_granule = 0 ;
-	int stream_init = 0 ;
-	int	page_nb_packets = 0 ;
-	int packet_count = 0 ;
-	int enh_enabled = 1 ;
-	int force_mode = -1 ;
-	char * data ;
-	int nb_read ;
-	int lookahead ;
-
-printf ("%s %d\n", __func__, __LINE__) ;
-
-	psf_log_printf (psf, "Speex header\n") ;
-	odata->eos = 0 ;
-
-	/* Reset ogg stuff which has already been used in src/ogg.c. */
-	ogg_stream_reset (&odata->ostream) ;
-	ogg_sync_reset (&odata->osync) ;
-
-	/* Seek to start of stream. */
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* Initialize. */
-	ogg_sync_init (&odata->osync) ;
-	speex_bits_init (&spx->bits) ;
-
-	/* Set defaults. */
-	psf->sf.channels = -1 ;
-	psf->sf.samplerate = 0 ;
-	spx->stereo = STEREO_INIT ;
-
-	/* Get a pointer to the ogg buffer and read data into it. */
-	data = ogg_sync_buffer (&odata->osync, OGG_SPX_READ_SIZE) ;
-	nb_read = psf_fread (data, 1, OGG_SPX_READ_SIZE, psf) ;
-	ogg_sync_wrote (&odata->osync, nb_read) ;
-
-	/* Now we chew on Ogg packets. */
-	while (ogg_sync_pageout (&odata->osync, &odata->opage) == 1)
-	{	if (stream_init == 0)
-		{	ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-			stream_init = 1 ;
-			} ;
-
-		if (ogg_page_serialno (&odata->opage) != odata->ostream.serialno)
-		{	/* so all streams are read. */
-			ogg_stream_reset_serialno (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-			} ;
-
-		/*Add page to the bitstream*/
-		ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-		page_granule = ogg_page_granulepos (&odata->opage) ;
-		page_nb_packets = ogg_page_packets (&odata->opage) ;
-
-		/*Extract all available packets*/
-		while (odata->eos == 0 && ogg_stream_packetout (&odata->ostream, &odata->opacket) == 1)
-		{	if (odata->opacket.bytes >= 8 && memcmp (odata->opacket.packet, "Speex   ", 8) == 0)
-			{	spx->serialno = odata->ostream.serialno ;
-				} ;
-
-			if (spx->serialno == -1 || odata->ostream.serialno != spx->serialno)
-				break ;
-
-			if (packet_count == 0)
-			{	spx->state = spx_header_read (psf, &odata->opacket, enh_enabled, force_mode) ;
-				if (! spx->state)
-					break ;
-
-				speex_decoder_ctl (spx->state, SPEEX_GET_LOOKAHEAD, &lookahead) ;
-				if (spx->nframes == 0)
-					spx->nframes = 1 ;
-				}
-			else if (packet_count == 1)
-			{	spx_print_comments ((const char*) odata->opacket.packet, odata->opacket.bytes) ;
-				}
-			else if (packet_count < 2 + spx->header.extra_headers)
-			{	/* Ignore extra headers */
-				}
-			packet_count ++ ;
-			} ;
-		} ;
-
-	psf_log_printf (psf, "End\n") ;
-
-	psf_log_printf (psf, "packet_count %d\n", packet_count) ;
-	psf_log_printf (psf, "page_nb_packets %d\n", page_nb_packets) ;
-	psf_log_printf (psf, "page_granule %lld\n", page_granule) ;
-
-	return 0 ;
-} /* spx_read_header */
-
-static int
-spx_close (SF_PRIVATE *psf)
-{	SPX_PRIVATE* spx = psf->codec_data ;
-
-	if (spx->state)
-		speex_decoder_destroy (spx->state) ;
-
-	if (spx)
-		speex_bits_destroy (&spx->bits) ;
-
-	return 0 ;
-} /* spx_close */
-
-
-
-static void *
-spx_header_read (SF_PRIVATE * psf, ogg_packet *op, spx_int32_t enh_enabled, int force_mode)
-{	SPX_PRIVATE* spx = psf->codec_data ;
-	void *st ;
-	const SpeexMode *mode ;
-	SpeexHeader *tmp_header ;
-	int modeID ;
-	SpeexCallback callback ;
-
-	tmp_header = speex_packet_to_header ((char*) op->packet, op->bytes) ;
-	if (tmp_header == NULL)
-	{	psf_log_printf (psf, "Cannot read Speex header\n") ;
-		return NULL ;
-		} ;
-
-	memcpy (&spx->header, tmp_header, sizeof (spx->header)) ;
-	free (tmp_header) ;
-	tmp_header = NULL ;
-
-	if (spx->header.mode >= SPEEX_NB_MODES || spx->header.mode < 0)
-	{	psf_log_printf (psf, "Mode number %d does not (yet/any longer) exist in this version\n", spx->header.mode) ;
-		return NULL ;
-		} ;
-
-	modeID = spx->header.mode ;
-	if (force_mode != -1)
-		modeID = force_mode ;
-
-	mode = speex_lib_get_mode (modeID) ;
-
-	if (spx->header.speex_version_id > 1)
-	{	psf_log_printf (psf, "This file was encoded with Speex bit-stream version %d, which I don't know how to decode\n", spx->header.speex_version_id) ;
-		return NULL ;
-		} ;
-
-	if (mode->bitstream_version < spx->header.mode_bitstream_version)
-	{	psf_log_printf (psf, "The file was encoded with a newer version of Speex. You need to upgrade in order to play it.\n") ;
-		return NULL ;
-		} ;
-
-	if (mode->bitstream_version > spx->header.mode_bitstream_version)
-	{	psf_log_printf (psf, "The file was encoded with an older version of Speex. You would need to downgrade the version in order to play it.\n") ;
-		return NULL ;
-		} ;
-
-	st = speex_decoder_init (mode) ;
-	if (!st)
-	{	psf_log_printf (psf, "Decoder initialization failed.\n") ;
-		return NULL ;
-		} ;
-
-	speex_decoder_ctl (st, SPEEX_SET_ENH, &enh_enabled) ;
-	speex_decoder_ctl (st, SPEEX_GET_FRAME_SIZE, &spx->frame_size) ;
-	spx->granule_frame_size = spx->frame_size ;
-
-	if (!psf->sf.samplerate)
-		psf->sf.samplerate = spx->header.rate ;
-	/* Adjust rate if --force-* options are used */
-	if (force_mode != -1)
-	{	if (spx->header.mode < force_mode)
-		{	psf->sf.samplerate <<= (force_mode - spx->header.mode) ;
-			spx->granule_frame_size >>= (force_mode - spx->header.mode) ;
-			} ;
-		if (spx->header.mode > force_mode)
-		{	psf->sf.samplerate >>= (spx->header.mode - force_mode) ;
-			spx->granule_frame_size <<= (spx->header.mode - force_mode) ;
-			} ;
-		} ;
-
-	speex_decoder_ctl (st, SPEEX_SET_SAMPLING_RATE, &psf->sf.samplerate) ;
-
-	spx->nframes = spx->header.frames_per_packet ;
-
-	if (psf->sf.channels == -1)
-		psf->sf.channels = spx->header.nb_channels ;
-
-	if (! (psf->sf.channels == 1))
-	{	psf->sf.channels = 2 ;
-		callback.callback_id = SPEEX_INBAND_STEREO ;
-		callback.func = speex_std_stereo_request_handler ;
-		callback.data = &spx->stereo ;
-		speex_decoder_ctl (st, SPEEX_SET_HANDLER, &callback) ;
-		} ;
-
-	spx->header.speex_version [sizeof (spx->header.speex_version) - 1] = 0 ;
-
-	psf_log_printf (psf, "  Encoder ver   : %s\n  Frames/packet : %d\n",
-					spx->header.speex_version, spx->header.frames_per_packet) ;
-
-	if (spx->header.bitrate > 0)
-		psf_log_printf (psf, "  Bit rate	  : %d\n", spx->header.bitrate) ;
-
-	psf_log_printf (psf, "  Sample rate   : %d\n  Mode		  : %s\n  VBR		   : %s\n  Channels	  : %d\n",
-					psf->sf.samplerate, mode->modeName, (spx->header.vbr ? "yes" : "no"), psf->sf.channels) ;
-
-	psf_log_printf (psf, "  Extra headers : %d\n", spx->header.extra_headers) ;
-
-	return st ;
-} /* spx_header_read */
-
-
-static void
-spx_print_comments (const char *c, int length)
-{
-	const char *end ;
-	int len, i, nb_fields ;
-
-printf ("%s %d\n", __func__, __LINE__) ;
-	if (length < 8)
-	{	fprintf (stderr, "Invalid/corrupted comments\n") ;
-		return ;
-		}
-	end = c + length ;
-	len = readint (c, 0) ;
-	c += 4 ;
-	if (len < 0 || c + len > end)
-	{	fprintf (stderr, "Invalid/corrupted comments\n") ;
-		return ;
-		}
-	(void) fwrite (c, 1, len, stderr) ;
-	c += len ;
-	fprintf (stderr, "\n") ;
-	if (c + 4 > end)
-	{	fprintf (stderr, "Invalid/corrupted comments\n") ;
-		return ;
-		}
-	nb_fields = readint (c, 0) ;
-	c += 4 ;
-	for (i = 0 ; i < nb_fields ; i++)
-	{	if (c + 4 > end)
-		{	fprintf (stderr, "Invalid/corrupted comments\n") ;
-			return ;
-			} ;
-		len = readint (c, 0) ;
-		c += 4 ;
-		if (len < 0 || c + len > end)
-		{	fprintf (stderr, "Invalid/corrupted comments\n") ;
-			return ;
-			}
-		(void) fwrite (c, 1, len, stderr) ;
-		c += len ;
-		fprintf (stderr, "\n") ;
-		} ;
-	return ;
-} /* spx_print_comments */
-
-
-/*
-encoded_speex_frames = (frames_per_packet * Packets)
-					 = 1 * 272
-					 = 272
-
-audio_samples = encoded_speex_frames * frame_size
-			  = 272 * 640
-			  = 174080
-
-duration = audio_samples / rate
-		 = 174080 / 44100
-		 = 3.947
-*/
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_speex_open (SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Speex support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_speex_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_vorbis.c b/libs/libsndfile/src/ogg_vorbis.c
deleted file mode 100644
index 4d1adef20f..0000000000
--- a/libs/libsndfile/src/ogg_vorbis.c
+++ /dev/null
@@ -1,1172 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2002-2005 Michael Smith <msmith@xiph.org>
-** Copyright (C) 2007 John ffitch
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**  Much of this code is based on the examples in libvorbis from the
-** XIPHOPHORUS Company http://www.xiph.org/ which has a BSD-style Licence
-** Copyright (c) 2002, Xiph.org Foundation
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** - Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-**
-** - Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-**
-** - Neither the name of the Xiph.org Foundation nor the names of its
-** contributors may be used to endorse or promote products derived from
-** this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
-** OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE,
-** DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include <ogg/ogg.h>
-#include <vorbis/codec.h>
-#include <vorbis/vorbisenc.h>
-
-#include "ogg.h"
-
-typedef int convert_func (SF_PRIVATE *psf, int, void *, int, int, float **) ;
-
-static int	vorbis_read_header (SF_PRIVATE *psf, int log_data) ;
-static int	vorbis_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	vorbis_close (SF_PRIVATE *psf) ;
-static int	vorbis_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int	vorbis_byterate (SF_PRIVATE *psf) ;
-static sf_count_t	vorbis_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static sf_count_t	vorbis_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	vorbis_read_sample (SF_PRIVATE *psf, void *ptr, sf_count_t lens, convert_func *transfn) ;
-static sf_count_t	vorbis_length (SF_PRIVATE *psf) ;
-
-typedef struct
-{	int id ;
-	const char *name ;
-} STR_PAIRS ;
-
-static STR_PAIRS vorbis_metatypes [] =
-{	{	SF_STR_TITLE,		"Title" },
-	{	SF_STR_COPYRIGHT,	"Copyright" },
-	{	SF_STR_SOFTWARE,	"Software" },
-	{	SF_STR_ARTIST,		"Artist" },
-	{	SF_STR_COMMENT,		"Comment" },
-	{	SF_STR_DATE,		"Date" },
-	{	SF_STR_ALBUM,		"Album" },
-	{	SF_STR_LICENSE,		"License" },
-} ;
-
-typedef struct
-{	/* Count current location */
-	sf_count_t loc ;
-	/* Struct that stores all the static vorbis bitstream settings */
-	vorbis_info	vinfo ;
-	/* Struct that stores all the bitstream user comments */
-	vorbis_comment vcomment ;
-	/* Ventral working state for the packet->PCM decoder */
-	vorbis_dsp_state vdsp ;
-	/* Local working space for packet->PCM decode */
-	vorbis_block vblock ;
-
-	/* Encoding quality in range [0.0, 1.0]. */
-	double quality ;
-} VORBIS_PRIVATE ;
-
-static int
-vorbis_read_header (SF_PRIVATE *psf, int log_data)
-{
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	char *buffer ;
-	int	bytes ;
-	int i, nn ;
-
-	odata->eos = 0 ;
-
-	/* Weird stuff happens if these aren't called. */
-	ogg_stream_reset (&odata->ostream) ;
-	ogg_sync_reset (&odata->osync) ;
-
-	/*
-	**	Grab some data at the head of the stream.  We want the first page
-	**	(which is guaranteed to be small and only contain the Vorbis
-	**	stream initial header) We need the first page to get the stream
-	**	serialno.
-	*/
-
-	/* Expose the buffer */
-	buffer = ogg_sync_buffer (&odata->osync, 4096L) ;
-
-	/* Grab the part of the header that has already been read. */
-	memcpy (buffer, psf->header, psf->headindex) ;
-	bytes = psf->headindex ;
-
-	/* Submit a 4k block to libvorbis' Ogg layer */
-	bytes += psf_fread (buffer + psf->headindex, 1, 4096 - psf->headindex, psf) ;
-	ogg_sync_wrote (&odata->osync, bytes) ;
-
-	/* Get the first page. */
-	if ((nn = ogg_sync_pageout (&odata->osync, &odata->opage)) != 1)
-	{
-		/* Have we simply run out of data?  If so, we're done. */
-		if (bytes < 4096)
-			return 0 ;
-
-		/* Error case.  Must not be Vorbis data */
-		psf_log_printf (psf, "Input does not appear to be an Ogg bitstream.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	/*
-	**	Get the serial number and set up the rest of decode.
-	**	Serialno first ; use it to set up a logical stream.
-	*/
-	ogg_stream_clear (&odata->ostream) ;
-	ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-
-	if (ogg_stream_pagein (&odata->ostream, &odata->opage) < 0)
-	{	/* Error ; stream version mismatch perhaps. */
-		psf_log_printf (psf, "Error reading first page of Ogg bitstream data\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	if (ogg_stream_packetout (&odata->ostream, &odata->opacket) != 1)
-	{	/* No page? must not be vorbis. */
-		psf_log_printf (psf, "Error reading initial header packet.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	/*
-	**	This function (vorbis_read_header) gets called multiple times, so the OGG
-	**	and vorbis structs have to be cleared every time we pass through to
-	**	prevent memory leaks.
-	*/
-	vorbis_block_clear (&vdata->vblock) ;
-	vorbis_dsp_clear (&vdata->vdsp) ;
-	vorbis_comment_clear (&vdata->vcomment) ;
-	vorbis_info_clear (&vdata->vinfo) ;
-
-	/*
-	**	Extract the initial header from the first page and verify that the
-	**	Ogg bitstream is in fact Vorbis data.
-	**
-	**	I handle the initial header first instead of just having the code
-	**	read all three Vorbis headers at once because reading the initial
-	**	header is an easy way to identify a Vorbis bitstream and it's
-	**	useful to see that functionality seperated out.
-	*/
-	vorbis_info_init (&vdata->vinfo) ;
-	vorbis_comment_init (&vdata->vcomment) ;
-
-	if (vorbis_synthesis_headerin (&vdata->vinfo, &vdata->vcomment, &odata->opacket) < 0)
-	{	/* Error case ; not a vorbis header. */
-		psf_log_printf (psf, "Found Vorbis in stream header, but vorbis_synthesis_headerin failed.\n") ;
-		return SFE_MALFORMED_FILE ;
-		} ;
-
-	/*
-	**	Common Ogg metadata fields?
-	**	TITLE, VERSION, ALBUM, TRACKNUMBER, ARTIST, PERFORMER, COPYRIGHT, LICENSE,
-	**	ORGANIZATION, DESCRIPTION, GENRE, DATE, LOCATION, CONTACT, ISRC,
-	*/
-
-	if (log_data)
-	{	int k ;
-
-		for (k = 0 ; k < ARRAY_LEN (vorbis_metatypes) ; k++)
-		{	char *dd ;
-
-			dd = vorbis_comment_query (&vdata->vcomment, vorbis_metatypes [k].name, 0) ;
-			if (dd == NULL)
-				continue ;
-			psf_store_string (psf, vorbis_metatypes [k].id, dd) ;
-			} ;
-		} ;
-
-	/*
-	**	At this point, we're sure we're Vorbis.	We've set up the logical (Ogg)
-	**	bitstream decoder. Get the comment and codebook headers and set up the
-	**	Vorbis decoder.
-	**
-	**	The next two packets in order are the comment and codebook headers.
-	**	They're likely large and may span multiple pages.  Thus we reead
-	**	and submit data until we get our two pacakets, watching that no
-	**	pages are missing.  If a page is missing, error out ; losing a
-	**	header page is the only place where missing data is fatal.
-	*/
-
-	i = 0 ;			/* Count of number of packets read */
-	while (i < 2)
-	{	int result = ogg_sync_pageout (&odata->osync, &odata->opage) ;
-		if (result == 0)
-		{	/* Need more data */
-			buffer = ogg_sync_buffer (&odata->osync, 4096) ;
-			bytes = psf_fread (buffer, 1, 4096, psf) ;
-
-			if (bytes == 0 && i < 2)
-			{	psf_log_printf (psf, "End of file before finding all Vorbis headers!\n") ;
-				return SFE_MALFORMED_FILE ;
-				} ;
-			nn = ogg_sync_wrote (&odata->osync, bytes) ;
-			}
-		else if (result == 1)
-		{	/*
-			**	Don't complain about missing or corrupt data yet. We'll
-			**	catch it at the packet output phase.
-			**
-			**	We can ignore any errors here as they'll also become apparent
-			**	at packetout.
-			*/
-			nn = ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-			while (i < 2)
-			{	result = ogg_stream_packetout (&odata->ostream, &odata->opacket) ;
-				if (result == 0)
-					break ;
-				if (result < 0)
-				{	/*	Uh oh ; data at some point was corrupted or missing!
-					**	We can't tolerate that in a header. Die. */
-					psf_log_printf (psf, "Corrupt secondary header.	Exiting.\n") ;
-					return SFE_MALFORMED_FILE ;
-					} ;
-
-				vorbis_synthesis_headerin (&vdata->vinfo, &vdata->vcomment, &odata->opacket) ;
-				i++ ;
-				} ;
-			} ;
-		} ;
-
-	if (log_data)
-	{	int printed_metadata_msg = 0 ;
-		int k ;
-
-		psf_log_printf (psf, "Bitstream is %d channel, %D Hz\n", vdata->vinfo.channels, vdata->vinfo.rate) ;
-		psf_log_printf (psf, "Encoded by : %s\n", vdata->vcomment.vendor) ;
-
-		/* Throw the comments plus a few lines about the bitstream we're decoding. */
-		for (k = 0 ; k < ARRAY_LEN (vorbis_metatypes) ; k++)
-		{	char *dd ;
-
-			dd = vorbis_comment_query (&vdata->vcomment, vorbis_metatypes [k].name, 0) ;
-			if (dd == NULL)
-				continue ;
-
-			if (printed_metadata_msg == 0)
-			{	psf_log_printf (psf, "Metadata :\n") ;
-				printed_metadata_msg = 1 ;
-				} ;
-
-			psf_store_string (psf, vorbis_metatypes [k].id, dd) ;
-			psf_log_printf (psf, "  %-10s : %s\n", vorbis_metatypes [k].name, dd) ;
-			} ;
-
-		psf_log_printf (psf, "End\n") ;
-		} ;
-
-	psf->sf.samplerate	= vdata->vinfo.rate ;
-	psf->sf.channels	= vdata->vinfo.channels ;
-	psf->sf.format		= SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-
-	/*	OK, got and parsed all three headers. Initialize the Vorbis
-	**	packet->PCM decoder.
-	**	Central decode state. */
-	vorbis_synthesis_init (&vdata->vdsp, &vdata->vinfo) ;
-
-	/*	Local state for most of the decode so multiple block decodes can
-	**	proceed in parallel. We could init multiple vorbis_block structures
-	**	for vd here. */
-	vorbis_block_init (&vdata->vdsp, &vdata->vblock) ;
-
-	vdata->loc = 0 ;
-
-	return 0 ;
-} /* vorbis_read_header */
-
-static int
-vorbis_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	int k, ret ;
-
-	vorbis_info_init (&vdata->vinfo) ;
-
-	/* The style of encoding should be selectable here, VBR quality mode. */
-	ret = vorbis_encode_init_vbr (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, vdata->quality) ;
-
-#if 0
-	ret = vorbis_encode_init (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, -1, 128000, -1) ; /* average bitrate mode */
-	ret = (	vorbis_encode_setup_managed (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, -1, 128000, -1)
-			|| vorbis_encode_ctl (&vdata->vinfo, OV_ECTL_RATEMANAGE_AVG, NULL)
-			|| vorbis_encode_setup_init (&vdata->vinfo)
-			) ;
-#endif
-	if (ret)
-		return SFE_BAD_OPEN_FORMAT ;
-
-	vdata->loc = 0 ;
-
-	/* add a comment */
-	vorbis_comment_init (&vdata->vcomment) ;
-
-	vorbis_comment_add_tag (&vdata->vcomment, "ENCODER", "libsndfile") ;
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-	{	const char * name ;
-
-		if (psf->strings.data [k].type == 0)
-			break ;
-
-		switch (psf->strings.data [k].type)
-		{	case SF_STR_TITLE :		name = "TITLE" ; break ;
-			case SF_STR_COPYRIGHT : name = "COPYRIGHT" ; break ;
-			case SF_STR_SOFTWARE :	name = "SOFTWARE" ; break ;
-			case SF_STR_ARTIST :	name = "ARTIST" ; break ;
-			case SF_STR_COMMENT :	name = "COMMENT" ; break ;
-			case SF_STR_DATE :		name = "DATE" ; break ;
-			case SF_STR_ALBUM :		name = "ALBUM" ; break ;
-			case SF_STR_LICENSE :	name = "LICENSE" ; break ;
-			default : continue ;
-			} ;
-
-		vorbis_comment_add_tag (&vdata->vcomment, name, psf->strings.storage + psf->strings.data [k].offset) ;
-		} ;
-
-	/* set up the analysis state and auxiliary encoding storage */
-	vorbis_analysis_init (&vdata->vdsp, &vdata->vinfo) ;
-	vorbis_block_init (&vdata->vdsp, &vdata->vblock) ;
-
-	/*
-	**	Set up our packet->stream encoder.
-	**	Pick a random serial number ; that way we can more likely build
-	**	chained streams just by concatenation.
-	*/
-
-	ogg_stream_init (&odata->ostream, psf_rand_int32 ()) ;
-
-	/* Vorbis streams begin with three headers ; the initial header (with
-	   most of the codec setup parameters) which is mandated by the Ogg
-	   bitstream spec.  The second header holds any comment fields.	 The
-	   third header holds the bitstream codebook.  We merely need to
-	   make the headers, then pass them to libvorbis one at a time ;
-	   libvorbis handles the additional Ogg bitstream constraints */
-
-	{	ogg_packet header ;
-		ogg_packet header_comm ;
-		ogg_packet header_code ;
-		int result ;
-
-		vorbis_analysis_headerout (&vdata->vdsp, &vdata->vcomment, &header, &header_comm, &header_code) ;
-		ogg_stream_packetin (&odata->ostream, &header) ; /* automatically placed in its own page */
-		ogg_stream_packetin (&odata->ostream, &header_comm) ;
-		ogg_stream_packetin (&odata->ostream, &header_code) ;
-
-		/* This ensures the actual
-		 * audio data will start on a new page, as per spec
-		 */
-		while ((result = ogg_stream_flush (&odata->ostream, &odata->opage)) != 0)
-		{	psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-			psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-			} ;
-	}
-
-	return 0 ;
-} /* vorbis_write_header */
-
-static int
-vorbis_close (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-	VORBIS_PRIVATE *vdata = psf->codec_data ;
-
-	if (odata == NULL || vdata == NULL)
-		return 0 ;
-
-	/*	Clean up this logical bitstream ; before exit we shuld see if we're
-	**	followed by another [chained]. */
-
-	if (psf->file.mode == SFM_WRITE)
-	{
-		if (psf->write_current <= 0)
-			vorbis_write_header (psf, 0) ;
-
-		vorbis_analysis_wrote (&vdata->vdsp, 0) ;
-		while (vorbis_analysis_blockout (&vdata->vdsp, &vdata->vblock) == 1)
-		{
-
-		/* analysis, assume we want to use bitrate management */
-			vorbis_analysis (&vdata->vblock, NULL) ;
-			vorbis_bitrate_addblock (&vdata->vblock) ;
-
-			while (vorbis_bitrate_flushpacket (&vdata->vdsp, &odata->opacket))
-			{	/* weld the packet into the bitstream */
-				ogg_stream_packetin (&odata->ostream, &odata->opacket) ;
-
-				/* write out pages (if any) */
-				while (!odata->eos)
-				{	int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
-					if (result == 0) break ;
-					psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-					psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-
-		/* this could be set above, but for illustrative purposes, I do
-		   it here (to show that vorbis does know where the stream ends) */
-
-					if (ogg_page_eos (&odata->opage)) odata->eos = 1 ;
-				}
-			}
-		}
-	}
-
-	/* ogg_page and ogg_packet structs always point to storage in
-	   libvorbis.  They are never freed or manipulated directly */
-
-	vorbis_block_clear (&vdata->vblock) ;
-	vorbis_dsp_clear (&vdata->vdsp) ;
-	vorbis_comment_clear (&vdata->vcomment) ;
-	vorbis_info_clear (&vdata->vinfo) ;
-
-	return 0 ;
-} /* vorbis_close */
-
-int
-ogg_vorbis_open (SF_PRIVATE *psf)
-{	OGG_PRIVATE* odata = psf->container_data ;
-	VORBIS_PRIVATE* vdata = calloc (1, sizeof (VORBIS_PRIVATE)) ;
-	int	error = 0 ;
-
-	if (odata == NULL)
-	{	psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->codec_data = vdata ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	psf_log_printf (psf, "Vorbis library version : %s\n", vorbis_version_string ()) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	/* Call this here so it only gets called once, so no memory is leaked. */
-		ogg_sync_init (&odata->osync) ;
-
-		if ((error = vorbis_read_header (psf, 1)))
-			return error ;
-
-		psf->read_short		= vorbis_read_s ;
-		psf->read_int		= vorbis_read_i ;
-		psf->read_float		= vorbis_read_f ;
-		psf->read_double	= vorbis_read_d ;
-		psf->sf.frames		= vorbis_length (psf) ;
-		} ;
-
-	psf->codec_close = vorbis_close ;
-	if (psf->file.mode == SFM_WRITE)
-	{
-		/* Set the default vorbis quality here. */
-		vdata->quality = 0.4 ;
-
-		psf->write_header	= vorbis_write_header ;
-		psf->write_short	= vorbis_write_s ;
-		psf->write_int		= vorbis_write_i ;
-		psf->write_float	= vorbis_write_f ;
-		psf->write_double	= vorbis_write_d ;
-
-		psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-		psf->strings.flags = SF_STR_ALLOW_START ;
-		} ;
-
-	psf->seek = vorbis_seek ;
-	psf->command = vorbis_command ;
-	psf->byterate = vorbis_byterate ;
-
-	/* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-	psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	psf->sf.sections = 1 ;
-
-	psf->datalength = 1 ;
-	psf->dataoffset = 0 ;
-	/* End FIXME. */
-
-	return error ;
-} /* ogg_vorbis_open */
-
-static int
-vorbis_command (SF_PRIVATE *psf, int command, void * data, int datasize)
-{	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-
-	switch (command)
-	{	case SFC_SET_COMPRESSION_LEVEL :
-			if (data == NULL || datasize != sizeof (double))
-				return SF_FALSE ;
-
-			if (psf->have_written)
-				return SF_FALSE ;
-
-			vdata->quality = 1.0 - *((double *) data) ;
-
-			/* Clip range. */
-			vdata->quality = SF_MAX (0.0, SF_MIN (1.0, vdata->quality)) ;
-
-			psf_log_printf (psf, "%s : Setting SFC_SET_VBR_ENCODING_QUALITY to %f.\n", __func__, vdata->quality) ;
-			return SF_TRUE ;
-
-		default :
-			return SF_FALSE ;
-		} ;
-
-	return SF_FALSE ;
-} /* vorbis_command */
-
-static int
-vorbis_rnull (SF_PRIVATE *UNUSED (psf), int samples, void *UNUSED (vptr), int UNUSED (off) , int channels, float **UNUSED (pcm))
-{
-	return samples * channels ;
-} /* vorbis_rnull */
-
-static int
-vorbis_rshort (SF_PRIVATE *psf, int samples, void *vptr, int off, int channels, float **pcm)
-{
-	short *ptr = (short*) vptr + off ;
-	int i = 0, j, n ;
-	if (psf->float_int_mult)
-	{
-		float inverse = 1.0 / psf->float_max ;
-		for (j = 0 ; j < samples ; j++)
-			for (n = 0 ; n < channels ; n++)
-				ptr [i++] = lrintf ((pcm [n][j] * inverse) * 32767.0f) ;
-	}
-	else
-	{
-		for (j = 0 ; j < samples ; j++)
-			for (n = 0 ; n < channels ; n++)
-				ptr [i++] = lrintf (pcm [n][j] * 32767.0f) ;
-	}
-	return i ;
-} /* vorbis_rshort */
-
-static int
-vorbis_rint (SF_PRIVATE *psf, int samples, void *vptr, int off, int channels, float **pcm)
-{
-	int *ptr = (int*) vptr + off ;
-	int i = 0, j, n ;
-
-	if (psf->float_int_mult)
-	{
-		float inverse = 1.0 / psf->float_max ;
-		for (j = 0 ; j < samples ; j++)
-			for (n = 0 ; n < channels ; n++)
-				ptr [i++] = lrintf ((pcm [n][j] * inverse) * 2147483647.0f) ;
-	}
-	else
-	{
-		for (j = 0 ; j < samples ; j++)
-			for (n = 0 ; n < channels ; n++)
-				ptr [i++] = lrintf (pcm [n][j] * 2147483647.0f) ;
-	}
-	return i ;
-} /* vorbis_rint */
-
-static int
-vorbis_rfloat (SF_PRIVATE *UNUSED (psf), int samples, void *vptr, int off, int channels, float **pcm)
-{
-	float *ptr = (float*) vptr + off ;
-	int i = 0, j, n ;
-	for (j = 0 ; j < samples ; j++)
-		for (n = 0 ; n < channels ; n++)
-			ptr [i++] = pcm [n][j] ;
-	return i ;
-} /* vorbis_rfloat */
-
-static int
-vorbis_rdouble (SF_PRIVATE *UNUSED (psf), int samples, void *vptr, int off, int channels, float **pcm)
-{
-	double *ptr = (double*) vptr + off ;
-	int i = 0, j, n ;
-	for (j = 0 ; j < samples ; j++)
-		for (n = 0 ; n < channels ; n++)
-			ptr [i++] = pcm [n][j] ;
-	return i ;
-} /* vorbis_rdouble */
-
-
-static sf_count_t
-vorbis_read_sample (SF_PRIVATE *psf, void *ptr, sf_count_t lens, convert_func *transfn)
-{
-	VORBIS_PRIVATE *vdata = psf->codec_data ;
-	OGG_PRIVATE *odata = psf->container_data ;
-	int len, samples, i = 0 ;
-	float **pcm ;
-
-	len = lens / psf->sf.channels ;
-
-	while ((samples = vorbis_synthesis_pcmout (&vdata->vdsp, &pcm)) > 0)
-	{	if (samples > len) samples = len ;
-		i += transfn (psf, samples, ptr, i, psf->sf.channels, pcm) ;
-		len -= samples ;
-		/* tell libvorbis how many samples we actually consumed */
-		vorbis_synthesis_read (&vdata->vdsp, samples) ;
-		vdata->loc += samples ;
-		if (len == 0)
-			return i ; /* Is this necessary */
-	}
-	goto start0 ;		/* Jump into the nasty nest */
-	while (len > 0 && !odata->eos)
-	{
-		while (len > 0 && !odata->eos)
-		{	int result = ogg_sync_pageout (&odata->osync, &odata->opage) ;
-			if (result == 0) break ; /* need more data */
-			if (result < 0)
-			{	/* missing or corrupt data at this page position */
-				psf_log_printf (psf, "Corrupt or missing data in bitstream ; continuing...\n") ;
-				}
-			else
-			{	/* can safely ignore errors at this point */
-				ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-			start0:
-				while (1)
-				{	result = ogg_stream_packetout (&odata->ostream, &odata->opacket) ;
-					if (result == 0)
-						break ; /* need more data */
-					if (result < 0)
-					{	/* missing or corrupt data at this page position */
-						/* no reason to complain ; already complained above */
-						}
-					else
-					{	/* we have a packet.	Decode it */
-						if (vorbis_synthesis (&vdata->vblock, &odata->opacket) == 0) /* test for success! */
-							vorbis_synthesis_blockin (&vdata->vdsp, &vdata->vblock) ;
-						/*
-						** pcm is a multichannel float vector.	 In stereo, for
-						** example, pcm [0] is left, and pcm [1] is right.	 samples is
-						** the size of each channel.	 Convert the float values
-						** (-1.<=range<=1.) to whatever PCM format and write it out.
-						*/
-
-						while ((samples = vorbis_synthesis_pcmout (&vdata->vdsp, &pcm)) > 0)
-						{	if (samples > len) samples = len ;
-							i += transfn (psf, samples, ptr, i, psf->sf.channels, pcm) ;
-							len -= samples ;
-							/* tell libvorbis how many samples we actually consumed */
-							vorbis_synthesis_read (&vdata->vdsp, samples) ;
-							vdata->loc += samples ;
-							if (len == 0)
-								return i ; /* Is this necessary */
-							} ;
-					}
-				}
-				if (ogg_page_eos (&odata->opage)) odata->eos = 1 ;
-			}
-		}
-		if (!odata->eos)
-		{	char *buffer ;
-			int bytes ;
-			buffer = ogg_sync_buffer (&odata->osync, 4096) ;
-			bytes = psf_fread (buffer, 1, 4096, psf) ;
-			ogg_sync_wrote (&odata->osync, bytes) ;
-			if (bytes == 0) odata->eos = 1 ;
-		}
-	}
-	return i ;
-} /* vorbis_read_sample */
-
-static sf_count_t
-vorbis_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t lens)
-{	return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rshort) ;
-} /* vorbis_read_s */
-
-static sf_count_t
-vorbis_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t lens)
-{	return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rint) ;
-} /* vorbis_read_i */
-
-static sf_count_t
-vorbis_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t lens)
-{	return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rfloat) ;
-} /* vorbis_read_f */
-
-static sf_count_t
-vorbis_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t lens)
-{	return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rdouble) ;
-} /* vorbis_read_d */
-
-/*==============================================================================
-*/
-
-static void
-vorbis_write_samples (SF_PRIVATE *psf, OGG_PRIVATE *odata, VORBIS_PRIVATE *vdata, int in_frames)
-{
-	vorbis_analysis_wrote (&vdata->vdsp, in_frames) ;
-
-	/*
-	**	Vorbis does some data preanalysis, then divvies up blocks for
-	**	more involved (potentially parallel) processing. Get a single
-	**	block for encoding now.
-	*/
-	while (vorbis_analysis_blockout (&vdata->vdsp, &vdata->vblock) == 1)
-	{
-		/* analysis, assume we want to use bitrate management */
-		vorbis_analysis (&vdata->vblock, NULL) ;
-		vorbis_bitrate_addblock (&vdata->vblock) ;
-
-		while (vorbis_bitrate_flushpacket (&vdata->vdsp, &odata->opacket))
-		{
-			/* weld the packet into the bitstream */
-			ogg_stream_packetin (&odata->ostream, &odata->opacket) ;
-
-			/* write out pages (if any) */
-			while (!odata->eos)
-			{	int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
-				if (result == 0)
-					break ;
-				psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-				psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-
-				/*	This could be set above, but for illustrative purposes, I do
-				**	it here (to show that vorbis does know where the stream ends) */
-				if (ogg_page_eos (&odata->opage))
-					odata->eos = 1 ;
-				} ;
-			} ;
-		} ;
-
-	vdata->loc += in_frames ;
-} /* vorbis_write_data */
-
-
-static sf_count_t
-vorbis_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t lens)
-{
-	int i, m, j = 0 ;
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	int in_frames = lens / psf->sf.channels ;
-	float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-	for (i = 0 ; i < in_frames ; i++)
-		for (m = 0 ; m < psf->sf.channels ; m++)
-			buffer [m][i] = (float) (ptr [j++]) / 32767.0f ;
-
-	vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-	return lens ;
-} /* vorbis_write_s */
-
-static sf_count_t
-vorbis_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t lens)
-{	int i, m, j = 0 ;
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	int in_frames = lens / psf->sf.channels ;
-	float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-	for (i = 0 ; i < in_frames ; i++)
-		for (m = 0 ; m < psf->sf.channels ; m++)
-			buffer [m][i] = (float) (ptr [j++]) / 2147483647.0f ;
-
-	vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-	return lens ;
-} /* vorbis_write_i */
-
-static sf_count_t
-vorbis_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t lens)
-{	int i, m, j = 0 ;
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	int in_frames = lens / psf->sf.channels ;
-	float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-	for (i = 0 ; i < in_frames ; i++)
-		for (m = 0 ; m < psf->sf.channels ; m++)
-			buffer [m][i] = ptr [j++] ;
-
-	vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-	return lens ;
-} /* vorbis_write_f */
-
-static sf_count_t
-vorbis_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t lens)
-{	int i, m, j = 0 ;
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-	int in_frames = lens / psf->sf.channels ;
-	float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-	for (i = 0 ; i < in_frames ; i++)
-		for (m = 0 ; m < psf->sf.channels ; m++)
-			buffer [m][i] = (float) ptr [j++] ;
-
-	vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-	return lens ;
-} /* vorbis_write_d */
-
-static sf_count_t
-vorbis_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{
-	OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-	VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-
-	if (odata == NULL || vdata == NULL)
-		return 0 ;
-
-	if (offset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return ((sf_count_t) -1) ;
-		} ;
-
-	if (psf->file.mode == SFM_READ)
-	{	sf_count_t target = offset - vdata->loc ;
-
-		if (target < 0)
-		{	/* 12 to allow for OggS bit */
-			psf_fseek (psf, 12, SEEK_SET) ;
-			vorbis_read_header (psf, 0) ; /* Reset state */
-			target = offset ;
-			} ;
-
-		while (target > 0)
-		{	sf_count_t m = target > 4096 ? 4096 : target ;
-
-			/*
-			**	Need to multiply by channels here because the seek is done in
-			**	terms of frames and the read function is done in terms of
-			**	samples.
-			*/
-			vorbis_read_sample (psf, (void *) NULL, m * psf->sf.channels, vorbis_rnull) ;
-
-			target -= m ;
-			} ;
-
-		return vdata->loc ;
-		} ;
-
-	return 0 ;
-} /* vorbis_seek */
-
-
-static int
-vorbis_byterate (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ)
-		return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-	return -1 ;
-} /* vorbis_byterate */
-
-/*==============================================================================
-**	Most of the following code was snipped from Mike Smith's ogginfo utility
-**	which is part of vorbis-tools.
-**	Vorbis tools is released under the GPL but Mike has kindly allowed the
-**	following to be relicensed as LGPL for libsndfile.
-*/
-
-typedef struct
-{
-	int isillegal ;
-	int shownillegal ;
-	int isnew ;
-	int end ;
-
-	uint32_t serial ; /* must be 32 bit unsigned */
-	ogg_stream_state ostream ;
-
-	vorbis_info vinfo ;
-	vorbis_comment vcomment ;
-	sf_count_t lastgranulepos ;
-	int doneheaders ;
-} stream_processor ;
-
-typedef struct
-{
-	stream_processor *streams ;
-	int allocated ;
-	int used ;
-	int in_headers ;
-} stream_set ;
-
-static stream_set *
-create_stream_set (void)
-{	stream_set *set = calloc (1, sizeof (stream_set)) ;
-
-	set->streams = calloc (5, sizeof (stream_processor)) ;
-	set->allocated = 5 ;
-	set->used = 0 ;
-
-	return set ;
-} /* create_stream_set */
-
-static void
-vorbis_end (stream_processor *stream, sf_count_t * len)
-{	*len += stream->lastgranulepos ;
-	vorbis_comment_clear (&stream->vcomment) ;
-	vorbis_info_clear (&stream->vinfo) ;
-} /* vorbis_end */
-
-static void
-free_stream_set (stream_set *set, sf_count_t * len)
-{	int i ;
-
-	for (i = 0 ; i < set->used ; i++)
-	{	if (!set->streams [i].end)
-			vorbis_end (&set->streams [i], len) ;
-		ogg_stream_clear (&set->streams [i].ostream) ;
-		} ;
-
-	free (set->streams) ;
-	free (set) ;
-} /* free_stream_set */
-
-static int
-streams_open (stream_set *set)
-{	int i, res = 0 ;
-
-	for (i = 0 ; i < set->used ; i++)
-		if (!set->streams [i].end)
-			res ++ ;
-	return res ;
-} /* streams_open */
-
-static stream_processor *
-find_stream_processor (stream_set *set, ogg_page *page)
-{	uint32_t serial = ogg_page_serialno (page) ;
-	int i, invalid = 0 ;
-
-	stream_processor *stream ;
-
-	for (i = 0 ; i < set->used ; i++)
-	{
-		if (serial == set->streams [i].serial)
-		{	/* We have a match! */
-			stream = & (set->streams [i]) ;
-
-			set->in_headers = 0 ;
-			/* if we have detected EOS, then this can't occur here. */
-			if (stream->end)
-			{	stream->isillegal = 1 ;
-				return stream ;
-				}
-
-			stream->isnew = 0 ;
-			stream->end = ogg_page_eos (page) ;
-			stream->serial = serial ;
-			return stream ;
-			} ;
-		} ;
-
-	/* If there are streams open, and we've reached the end of the
-	** headers, then we can't be starting a new stream.
-	** XXX: might this sometimes catch ok streams if EOS flag is missing,
-	** but the stream is otherwise ok?
-	*/
-	if (streams_open (set) && !set->in_headers)
-		invalid = 1 ;
-
-	set->in_headers = 1 ;
-
-	if (set->allocated < set->used)
-		stream = &set->streams [set->used] ;
-	else
-	{	set->allocated += 5 ;
-		set->streams = realloc (set->streams, sizeof (stream_processor) * set->allocated) ;
-		stream = &set->streams [set->used] ;
-		} ;
-
-	set->used++ ;
-
-	stream->isnew = 1 ;
-	stream->isillegal = invalid ;
-
-	{
-		int res ;
-		ogg_packet packet ;
-
-		/* We end up processing the header page twice, but that's ok. */
-		ogg_stream_init (&stream->ostream, serial) ;
-		ogg_stream_pagein (&stream->ostream, page) ;
-		res = ogg_stream_packetout (&stream->ostream, &packet) ;
-		if (res <= 0)
-			return NULL ;
-		else if (packet.bytes >= 7 && memcmp (packet.packet, "\x01vorbis", 7) == 0)
-		{
-			stream->lastgranulepos = 0 ;
-			vorbis_comment_init (&stream->vcomment) ;
-			vorbis_info_init (&stream->vinfo) ;
-			} ;
-
-		res = ogg_stream_packetout (&stream->ostream, &packet) ;
-
-		/* re-init, ready for processing */
-		ogg_stream_clear (&stream->ostream) ;
-		ogg_stream_init (&stream->ostream, serial) ;
-	}
-
-	stream->end = ogg_page_eos (page) ;
-	stream->serial = serial ;
-
-	return stream ;
-} /* find_stream_processor */
-
-static int
-vorbis_length_get_next_page (SF_PRIVATE *psf, ogg_sync_state * osync, ogg_page *page)
-{	static const int CHUNK_SIZE = 4500 ;
-
-	while (ogg_sync_pageout (osync, page) <= 0)
-	{	char * buffer = ogg_sync_buffer (osync, CHUNK_SIZE) ;
-		int bytes = psf_fread (buffer, 1, 4096, psf) ;
-
-		if (bytes <= 0)
-		{	ogg_sync_wrote (osync, 0) ;
-			return 0 ;
-			} ;
-
-		ogg_sync_wrote (osync, bytes) ;
-		} ;
-
-	return 1 ;
-} /* vorbis_length_get_next_page */
-
-static sf_count_t
-vorbis_length_aux (SF_PRIVATE * psf)
-{
-	ogg_sync_state osync ;
-	ogg_page page ;
-	sf_count_t len = 0 ;
-	stream_set *processors ;
-
-	processors = create_stream_set () ;
-	if (processors == NULL)
-		return 0 ;	// out of memory?
-
-	ogg_sync_init (&osync) ;
-
-	while (vorbis_length_get_next_page (psf, &osync, &page))
-	{
-		stream_processor *p = find_stream_processor (processors, &page) ;
-
-		if (!p)
-		{	len = 0 ;
-			break ;
-			} ;
-
-		if (p->isillegal && !p->shownillegal)
-		{
-			p->shownillegal = 1 ;
-			/* If it's a new stream, we want to continue processing this page
-			** anyway to suppress additional spurious errors
-			*/
-			if (!p->isnew) continue ;
-			} ;
-
-		if (!p->isillegal)
-		{	ogg_packet packet ;
-			int header = 0 ;
-
-			ogg_stream_pagein (&p->ostream, &page) ;
-			if (p->doneheaders < 3)
-				header = 1 ;
-
-			while (ogg_stream_packetout (&p->ostream, &packet) > 0)
-			{
-				if (p->doneheaders < 3)
-				{	if (vorbis_synthesis_headerin (&p->vinfo, &p->vcomment, &packet) < 0)
-						continue ;
-					p->doneheaders ++ ;
-					} ;
-				} ;
-			if (!header)
-			{	sf_count_t gp = ogg_page_granulepos (&page) ;
-				if (gp > 0) p->lastgranulepos = gp ;
-				} ;
-			if (p->end)
-			{	vorbis_end (p, &len) ;
-				p->isillegal = 1 ;
-				} ;
-			} ;
-		} ;
-
-	ogg_sync_clear (&osync) ;
-	free_stream_set (processors, &len) ;
-
-	return len ;
-} /* vorbis_length_aux */
-
-static sf_count_t
-vorbis_length (SF_PRIVATE *psf)
-{	sf_count_t length ;
-	int error ;
-
-	if (psf->sf.seekable == 0)
-		return SF_COUNT_MAX ;
-
-	psf_fseek (psf, 0, SEEK_SET) ;
-	length = vorbis_length_aux (psf) ;
-
-	psf_fseek (psf, 12, SEEK_SET) ;
-	if ((error = vorbis_read_header (psf, 0)) != 0)
-		psf->error = error ;
-
-	return length ;
-} /* vorbis_length */
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-ogg_vorbis_open	(SF_PRIVATE *psf)
-{
-	psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Vorbis support.\n") ;
-	return SFE_UNIMPLEMENTED ;
-} /* ogg_vorbis_open */
-
-#endif
diff --git a/libs/libsndfile/src/paf.c b/libs/libsndfile/src/paf.c
deleted file mode 100644
index 1360c33710..0000000000
--- a/libs/libsndfile/src/paf.c
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define FAP_MARKER	(MAKE_MARKER ('f', 'a', 'p', ' '))
-#define PAF_MARKER	(MAKE_MARKER (' ', 'p', 'a', 'f'))
-
-/*------------------------------------------------------------------------------
-** Other defines.
-*/
-
-#define	PAF_HEADER_LENGTH 			2048
-
-#define	PAF24_SAMPLES_PER_BLOCK		10
-#define	PAF24_BLOCK_SIZE			32
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef	struct
-{	int	version ;
-	int	endianness ;
-	int	samplerate ;
-	int	format ;
-	int	channels ;
-	int	source ;
-} PAF_FMT ;
-
-typedef struct
-{	int				max_blocks, channels, blocksize ;
-	int				read_block, write_block, read_count, write_count ;
-	sf_count_t		sample_count ;
-	int				*samples ;
-	unsigned char	*block ;
-	int				data [] ; /* ISO C99 struct flexible array. */
-} PAF24_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int paf24_init (SF_PRIVATE *psf) ;
-
-static int	paf_read_header	(SF_PRIVATE *psf) ;
-static int	paf_write_header (SF_PRIVATE *psf, int calc_length) ;
-
-static sf_count_t paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-enum
-{	PAF_PCM_16 = 0,
-	PAF_PCM_24 = 1,
-	PAF_PCM_S8 = 2
-} ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-paf_open	(SF_PRIVATE *psf)
-{	int		subformat, error, endian ;
-
- 	psf->dataoffset = PAF_HEADER_LENGTH ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = paf_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_PAF)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		endian = SF_ENDIAN (psf->sf.format) ;
-
-		/* PAF is by default big endian. */
-		psf->endian = SF_ENDIAN_BIG ;
-
-		if (endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && (endian == SF_ENDIAN_CPU)))
-			psf->endian = SF_ENDIAN_LITTLE ;
-
-		if ((error = paf_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = paf_write_header ;
-		} ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :
-					psf->bytewidth = 1 ;
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_PCM_16 :
-					psf->bytewidth = 2 ;
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_PCM_24 :
-					/* No bytewidth because of whacky 24 bit encoding. */
-					error = paf24_init (psf) ;
-					break ;
-
-		default : return SFE_PAF_UNKNOWN_FORMAT ;
-		} ;
-
-	return error ;
-} /* paf_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-paf_read_header	(SF_PRIVATE *psf)
-{	PAF_FMT		paf_fmt ;
-	int			marker ;
-
-	if (psf->filelength < PAF_HEADER_LENGTH)
-		return SFE_PAF_SHORT_HEADER ;
-
-	memset (&paf_fmt, 0, sizeof (paf_fmt)) ;
-	psf_binheader_readf (psf, "pm", 0, &marker) ;
-
-	psf_log_printf (psf, "Signature   : '%M'\n", marker) ;
-
-	if (marker == PAF_MARKER)
-	{	psf_binheader_readf (psf, "E444444", &(paf_fmt.version), &(paf_fmt.endianness),
-			&(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ;
-		}
-	else if (marker == FAP_MARKER)
-	{	psf_binheader_readf (psf, "e444444", &(paf_fmt.version), &(paf_fmt.endianness),
-			&(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ;
-		}
-	else
-		return SFE_PAF_NO_MARKER ;
-
-	psf_log_printf (psf, "Version     : %d\n", paf_fmt.version) ;
-
-	if (paf_fmt.version != 0)
-	{	psf_log_printf (psf, "*** Bad version number. should be zero.\n") ;
-		return SFE_PAF_VERSION ;
-		} ;
-
-	psf_log_printf (psf, "Sample Rate : %d\n", paf_fmt.samplerate) ;
-	psf_log_printf (psf, "Channels    : %d\n", paf_fmt.channels) ;
-
-	psf_log_printf (psf, "Endianness  : %d => ", paf_fmt.endianness) ;
-	if (paf_fmt.endianness)
-	{	psf_log_printf (psf, "Little\n", paf_fmt.endianness) ;
-		psf->endian = SF_ENDIAN_LITTLE ;
-		}
-	else
-	{	psf_log_printf (psf, "Big\n", paf_fmt.endianness) ;
-		psf->endian = SF_ENDIAN_BIG ;
-		} ;
-
-	if (paf_fmt.channels < 1 || paf_fmt.channels > SF_MAX_CHANNELS)
-		return SFE_PAF_BAD_CHANNELS ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	psf_binheader_readf (psf, "p", (int) psf->dataoffset) ;
-
-	psf->sf.samplerate	= paf_fmt.samplerate ;
-	psf->sf.channels 	= paf_fmt.channels ;
-
-	/* Only fill in type major. */
-	psf->sf.format = SF_FORMAT_PAF ;
-
-	psf_log_printf (psf, "Format      : %d => ", paf_fmt.format) ;
-
-	/* PAF is by default big endian. */
-	psf->sf.format |= paf_fmt.endianness ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-	switch (paf_fmt.format)
-	{	case PAF_PCM_S8 :
-					psf_log_printf (psf, "8 bit linear PCM\n") ;
-					psf->bytewidth = 1 ;
-
-					psf->sf.format |= SF_FORMAT_PCM_S8 ;
-
-					psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-					psf->sf.frames = psf->datalength / psf->blockwidth ;
-					break ;
-
-		case PAF_PCM_16 :
-					psf_log_printf (psf, "16 bit linear PCM\n") ;
-					psf->bytewidth = 2 ;
-
-					psf->sf.format |= SF_FORMAT_PCM_16 ;
-
-					psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-					psf->sf.frames = psf->datalength / psf->blockwidth ;
-					break ;
-
-		case PAF_PCM_24 :
-					psf_log_printf (psf, "24 bit linear PCM\n") ;
-					psf->bytewidth = 3 ;
-
-					psf->sf.format |= SF_FORMAT_PCM_24 ;
-
-					psf->blockwidth = 0 ;
-					psf->sf.frames = PAF24_SAMPLES_PER_BLOCK * psf->datalength /
-											(PAF24_BLOCK_SIZE * psf->sf.channels) ;
-					break ;
-
-		default :	psf_log_printf (psf, "Unknown\n") ;
-					return SFE_PAF_UNKNOWN_FORMAT ;
-					break ;
-		} ;
-
-	psf_log_printf (psf, "Source      : %d => ", paf_fmt.source) ;
-
-	switch (paf_fmt.source)
-	{	case 1 : psf_log_printf (psf, "Analog Recording\n") ;
-					break ;
-		case 2 : psf_log_printf (psf, "Digital Transfer\n") ;
-					break ;
-		case 3 : psf_log_printf (psf, "Multi-track Mixdown\n") ;
-					break ;
-		case 5 : psf_log_printf (psf, "Audio Resulting From DSP Processing\n") ;
-					break ;
-		default : psf_log_printf (psf, "Unknown\n") ;
-					break ;
-		} ;
-
-	return 0 ;
-} /* paf_read_header */
-
-static int
-paf_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	int			paf_format ;
-
-	/* PAF header already written so no need to re-write. */
-	if (psf_ftell (psf) >= PAF_HEADER_LENGTH)
-		return 0 ;
-
-	psf->dataoffset = PAF_HEADER_LENGTH ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-					paf_format = PAF_PCM_S8 ;
-					break ;
-
-		case SF_FORMAT_PCM_16 :
-					paf_format = PAF_PCM_16 ;
-					break ;
-
-		case SF_FORMAT_PCM_24 :
-					paf_format = PAF_PCM_24 ;
-					break ;
-
-		default : return SFE_PAF_UNKNOWN_FORMAT ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	if (psf->endian == SF_ENDIAN_BIG)
-	{	/* Marker, version, endianness, samplerate */
-		psf_binheader_writef (psf, "Em444", PAF_MARKER, 0, 0, psf->sf.samplerate) ;
-		/* format, channels, source */
-		psf_binheader_writef (psf, "E444", paf_format, psf->sf.channels, 0) ;
-		}
-	else if (psf->endian == SF_ENDIAN_LITTLE)
-	{	/* Marker, version, endianness, samplerate */
-		psf_binheader_writef (psf, "em444", FAP_MARKER, 0, 1, psf->sf.samplerate) ;
-		/* format, channels, source */
-		psf_binheader_writef (psf, "e444", paf_format, psf->sf.channels, 0) ;
-		} ;
-
-	/* Zero fill to dataoffset. */
-	psf_binheader_writef (psf, "z", (size_t) (psf->dataoffset - psf->headindex)) ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	return psf->error ;
-} /* paf_write_header */
-
-/*===============================================================================
-**	24 bit PAF files have a really weird encoding.
-**  For a mono file, 10 samples (each being 3 bytes) are packed into a 32 byte
-**	block. The 8 ints in this 32 byte block are then endian swapped (as ints)
-**	if necessary before being written to disk.
-**  For a stereo file, blocks of 10 samples from the same channel are encoded
-**  into 32 bytes as for the mono case. The 32 byte blocks are then interleaved
-**	on disk.
-**	Reading has to reverse the above process :-).
-**	Weird!!!
-**
-**	The code below attempts to gain efficiency while maintaining readability.
-*/
-
-static int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
-static int paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
-static int paf24_close (SF_PRIVATE *psf) ;
-
-
-static int
-paf24_init (SF_PRIVATE *psf)
-{	PAF24_PRIVATE	*ppaf24 ;
-	int	paf24size ;
-
-	paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels *
-					(PAF24_BLOCK_SIZE + PAF24_SAMPLES_PER_BLOCK * sizeof (int)) ;
-
-	/*
-	**	Not exatly sure why this needs to be here but the tests
-	**	fail without it.
-	*/
-	psf->last_op = 0 ;
-
-	if (! (psf->codec_data = calloc (1, paf24size)))
-		return SFE_MALLOC_FAILED ;
-
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	ppaf24->channels	= psf->sf.channels ;
-	ppaf24->samples		= ppaf24->data ;
-	ppaf24->block		= (unsigned char*) (ppaf24->data + PAF24_SAMPLES_PER_BLOCK * ppaf24->channels) ;
-
-	ppaf24->blocksize = PAF24_BLOCK_SIZE * ppaf24->channels ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	paf24_read_block (psf, ppaf24) ;	/* Read first block. */
-
-		psf->read_short		= paf24_read_s ;
-		psf->read_int		= paf24_read_i ;
-		psf->read_float		= paf24_read_f ;
-		psf->read_double	= paf24_read_d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->write_short	= paf24_write_s ;
-		psf->write_int		= paf24_write_i ;
-		psf->write_float	= paf24_write_f ;
-		psf->write_double	= paf24_write_d ;
-		} ;
-
-	psf->seek	= paf24_seek ;
-	psf->container_close	= paf24_close ;
-
-	psf->filelength = psf_get_filelen (psf) ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	if (psf->datalength % PAF24_BLOCK_SIZE)
-	{	if (psf->file.mode == SFM_READ)
-			psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ;
-		ppaf24->max_blocks = psf->datalength / ppaf24->blocksize + 1 ;
-		}
-	else
-		ppaf24->max_blocks = psf->datalength / ppaf24->blocksize ;
-
-	ppaf24->read_block = 0 ;
-	if (psf->file.mode == SFM_RDWR)
-		ppaf24->write_block = ppaf24->max_blocks ;
-	else
-		ppaf24->write_block = 0 ;
-
-	psf->sf.frames = PAF24_SAMPLES_PER_BLOCK * ppaf24->max_blocks ;
-	ppaf24->sample_count = psf->sf.frames ;
-
-	return 0 ;
-} /* paf24_init */
-
-static sf_count_t
-paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	PAF24_PRIVATE	*ppaf24 ;
-	int				newblock, newsample ;
-
-	if (psf->codec_data == NULL)
-	{	psf->error = SFE_INTERNAL ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	if (mode == SFM_READ && ppaf24->write_count > 0)
-		paf24_write_block (psf, ppaf24) ;
-
-	newblock	= offset / PAF24_SAMPLES_PER_BLOCK ;
-	newsample	= offset % PAF24_SAMPLES_PER_BLOCK ;
-
-	switch (mode)
-	{	case SFM_READ :
-				if (psf->last_op == SFM_WRITE && ppaf24->write_count)
-					paf24_write_block (psf, ppaf24) ;
-
-				psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ;
-				ppaf24->read_block = newblock ;
-				paf24_read_block (psf, ppaf24) ;
-				ppaf24->read_count = newsample ;
-				break ;
-
-		case SFM_WRITE :
-				if (offset > ppaf24->sample_count)
-				{	psf->error = SFE_BAD_SEEK ;
-					return PSF_SEEK_ERROR ;
-					} ;
-
-				if (psf->last_op == SFM_WRITE && ppaf24->write_count)
-					paf24_write_block (psf, ppaf24) ;
-
-				psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ;
-				ppaf24->write_block = newblock ;
-				paf24_read_block (psf, ppaf24) ;
-				ppaf24->write_count = newsample ;
-				break ;
-
-		default :
-				psf->error = SFE_BAD_SEEK ;
-				return PSF_SEEK_ERROR ;
-		} ;
-
-	return newblock * PAF24_SAMPLES_PER_BLOCK + newsample ;
-} /* paf24_seek */
-
-static int
-paf24_close (SF_PRIVATE *psf)
-{	PAF24_PRIVATE *ppaf24 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (ppaf24->write_count > 0)
-			paf24_write_block (psf, ppaf24) ;
-		} ;
-
-	return 0 ;
-} /* paf24_close */
-
-/*---------------------------------------------------------------------------
-*/
-static int
-paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{	int				k, channel ;
-	unsigned char	*cptr ;
-
-	ppaf24->read_block ++ ;
-	ppaf24->read_count = 0 ;
-
-	if (ppaf24->read_block * PAF24_SAMPLES_PER_BLOCK > ppaf24->sample_count)
-	{	memset (ppaf24->samples, 0, PAF24_SAMPLES_PER_BLOCK * ppaf24->channels) ;
-		return 1 ;
-		} ;
-
-	/* Read the block. */
-	if ((k = psf_fread (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, ppaf24->blocksize) ;
-
-
-	/* Do endian swapping if necessary. */
-	if (psf->endian == SF_ENDIAN_BIG)
-		endswap_int_array 	(ppaf24->data, 8 * ppaf24->channels) ;
-
-	/* Unpack block. */
-	for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-	{	channel = k % ppaf24->channels ;
-		cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-		ppaf24->samples [k] = (cptr [0] << 8) | (cptr [1] << 16) | (cptr [2] << 24) ;
-		} ;
-
-	return 1 ;
-} /* paf24_read_block */
-
-static int
-paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
-{	int	count, total = 0 ;
-
-	while (total < len)
-	{	if (ppaf24->read_block * PAF24_SAMPLES_PER_BLOCK >= ppaf24->sample_count)
-		{	memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ;
-			return total ;
-			} ;
-
-		if (ppaf24->read_count >= PAF24_SAMPLES_PER_BLOCK)
-			paf24_read_block (psf, ppaf24) ;
-
-		count = (PAF24_SAMPLES_PER_BLOCK - ppaf24->read_count) * ppaf24->channels ;
-		count = (len - total > count) ? count : len - total ;
-
-		memcpy (&(ptr [total]), &(ppaf24->samples [ppaf24->read_count * ppaf24->channels]), count * sizeof (int)) ;
-		total += count ;
-		ppaf24->read_count += count / ppaf24->channels ;
-		} ;
-
-	return total ;
-} /* paf24_read */
-
-static sf_count_t
-paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = paf24_read (psf, ppaf24, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = iptr [k] >> 16 ;
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* paf24_read_s */
-
-static sf_count_t
-paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	PAF24_PRIVATE *ppaf24 ;
-	int				total ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	total = paf24_read (psf, ppaf24, ptr, len) ;
-
-	return total ;
-} /* paf24_read_i */
-
-static sf_count_t
-paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-	float			normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = paf24_read (psf, ppaf24, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* paf24_read_f */
-
-static sf_count_t
-paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-	double 			normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = paf24_read (psf, ppaf24, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-		total += count ;
-		len -= readcount ;
-		} ;
-	return total ;
-} /* paf24_read_d */
-
-/*---------------------------------------------------------------------------
-*/
-
-static int
-paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{	int				k, nextsample, channel ;
-	unsigned char	*cptr ;
-
-	/* First pack block. */
-
-	if (CPU_IS_LITTLE_ENDIAN)
-	{	for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-		{	channel = k % ppaf24->channels ;
-			cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-			nextsample = ppaf24->samples [k] >> 8 ;
-			cptr [0] = nextsample ;
-			cptr [1] = nextsample >> 8 ;
-			cptr [2] = nextsample >> 16 ;
-			} ;
-
-		/* Do endian swapping if necessary. */
-		if (psf->endian == SF_ENDIAN_BIG)
-			endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ;
-		}
-	else if (CPU_IS_BIG_ENDIAN)
-	{	/* This is correct. */
-		for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-		{	channel = k % ppaf24->channels ;
-			cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-			nextsample = ppaf24->samples [k] >> 8 ;
-			cptr [0] = nextsample ;
-			cptr [1] = nextsample >> 8 ;
-			cptr [2] = nextsample >> 16 ;
-			} ;
-		if (psf->endian == SF_ENDIAN_BIG)
-			endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ;
-		} ;
-
-	/* Write block to disk. */
-	if ((k = psf_fwrite (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize)
-		psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, ppaf24->blocksize) ;
-
-	if (ppaf24->sample_count < ppaf24->write_block * PAF24_SAMPLES_PER_BLOCK + ppaf24->write_count)
-		ppaf24->sample_count = ppaf24->write_block * PAF24_SAMPLES_PER_BLOCK + ppaf24->write_count ;
-
-	if (ppaf24->write_count == PAF24_SAMPLES_PER_BLOCK)
-	{	ppaf24->write_block ++ ;
-		ppaf24->write_count = 0 ;
-		} ;
-
-	return 1 ;
-} /* paf24_write_block */
-
-static int
-paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, const int *ptr, int len)
-{	int		count, total = 0 ;
-
-	while (total < len)
-	{	count = (PAF24_SAMPLES_PER_BLOCK - ppaf24->write_count) * ppaf24->channels ;
-
-		if (count > len - total)
-			count = len - total ;
-
-		memcpy (&(ppaf24->samples [ppaf24->write_count * ppaf24->channels]), &(ptr [total]), count * sizeof (int)) ;
-		total += count ;
-		ppaf24->write_count += count / ppaf24->channels ;
-
-		if (ppaf24->write_count >= PAF24_SAMPLES_PER_BLOCK)
-			paf24_write_block (psf, ppaf24) ;
-		} ;
-
-	return total ;
-} /* paf24_write */
-
-static sf_count_t
-paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, writecount = 0, count ;
-	sf_count_t		total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = ptr [total + k] << 16 ;
-		count = paf24_write (psf, ppaf24, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-	return total ;
-} /* paf24_write_s */
-
-static sf_count_t
-paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	PAF24_PRIVATE 	*ppaf24 ;
-	int				writecount, count ;
-	sf_count_t		total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	while (len > 0)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = paf24_write (psf, ppaf24, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* paf24_write_i */
-
-static sf_count_t
-paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, writecount = 0, count ;
-	sf_count_t		total = 0 ;
-	float			normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = paf24_write (psf, ppaf24, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* paf24_write_f */
-
-static sf_count_t
-paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	PAF24_PRIVATE 	*ppaf24 ;
-	int				*iptr ;
-	int				k, bufferlen, writecount = 0, count ;
-	sf_count_t		total = 0 ;
-	double			normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = lrint (normfact * ptr [total+k]) ;
-		count = paf24_write (psf, ppaf24, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* paf24_write_d */
-
diff --git a/libs/libsndfile/src/pcm.c b/libs/libsndfile/src/pcm.c
deleted file mode 100644
index 8a06858b2a..0000000000
--- a/libs/libsndfile/src/pcm.c
+++ /dev/null
@@ -1,2961 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include <math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/* Need to be able to handle 3 byte (24 bit) integers. So defined a
-** type and use SIZEOF_TRIBYTE instead of (tribyte).
-*/
-
-typedef	void	tribyte ;
-
-#define	SIZEOF_TRIBYTE	3
-
-static sf_count_t	pcm_read_sc2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_uc2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bes2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_les2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bet2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_let2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bei2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_lei2s	(SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_read_sc2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_uc2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bes2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_les2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bet2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_let2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bei2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_lei2i	(SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_read_sc2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_uc2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bes2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_les2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bet2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_let2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bei2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_lei2f	(SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_read_sc2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_uc2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bes2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_les2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bet2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_let2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_bei2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_read_lei2d	(SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_write_s2sc	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2uc	(SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2bes (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2les (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2bet (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2let (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2bei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_s2lei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_write_i2sc	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2uc	(SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2bes (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2les (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2bet (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2let (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2bei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_i2lei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_write_f2sc	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2uc	(SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2bes (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2les (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2bet (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2let (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2bei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_f2lei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-
-static sf_count_t	pcm_write_d2sc	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2uc	(SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2bes (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2les (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2bet (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2let (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2bei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t	pcm_write_d2lei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-enum
-{	/* Char type for 8 bit files. */
-	SF_CHARS_SIGNED		= 200,
-	SF_CHARS_UNSIGNED	= 201
-} ;
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-int
-pcm_init (SF_PRIVATE *psf)
-{	int chars = 0 ;
-
-	if (psf->bytewidth == 0 || psf->sf.channels == 0)
-	{	psf_log_printf (psf, "pcm_init : internal error : bytewitdh = %d, channels = %d\n", psf->bytewidth, psf->sf.channels) ;
-		return SFE_INTERNAL ;
-		} ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_S8)
-		chars = SF_CHARS_SIGNED ;
-	else if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_U8)
-		chars = SF_CHARS_UNSIGNED ;
-
-	if (CPU_IS_BIG_ENDIAN)
-		psf->data_endswap = (psf->endian == SF_ENDIAN_BIG) ? SF_FALSE : SF_TRUE ;
-	else
-		psf->data_endswap = (psf->endian == SF_ENDIAN_LITTLE) ? SF_FALSE : SF_TRUE ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	switch (psf->bytewidth * 0x10000 + psf->endian + chars)
-		{	case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) :
-			case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) :
-					psf->read_short		= pcm_read_sc2s ;
-					psf->read_int		= pcm_read_sc2i ;
-					psf->read_float		= pcm_read_sc2f ;
-					psf->read_double	= pcm_read_sc2d ;
-					break ;
-			case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) :
-			case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) :
-					psf->read_short		= pcm_read_uc2s ;
-					psf->read_int		= pcm_read_uc2i ;
-					psf->read_float		= pcm_read_uc2f ;
-					psf->read_double	= pcm_read_uc2d ;
-					break ;
-
-			case (2 * 0x10000 + SF_ENDIAN_BIG) :
-					psf->read_short		= pcm_read_bes2s ;
-					psf->read_int		= pcm_read_bes2i ;
-					psf->read_float		= pcm_read_bes2f ;
-					psf->read_double	= pcm_read_bes2d ;
-					break ;
-			case (3 * 0x10000 + SF_ENDIAN_BIG) :
-					psf->read_short		= pcm_read_bet2s ;
-					psf->read_int		= pcm_read_bet2i ;
-					psf->read_float		= pcm_read_bet2f ;
-					psf->read_double	= pcm_read_bet2d ;
-					break ;
-			case (4 * 0x10000 + SF_ENDIAN_BIG) :
-
-					psf->read_short		= pcm_read_bei2s ;
-					psf->read_int		= pcm_read_bei2i ;
-					psf->read_float		= pcm_read_bei2f ;
-					psf->read_double	= pcm_read_bei2d ;
-					break ;
-
-			case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->read_short		= pcm_read_les2s ;
-					psf->read_int		= pcm_read_les2i ;
-					psf->read_float		= pcm_read_les2f ;
-					psf->read_double	= pcm_read_les2d ;
-					break ;
-			case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->read_short		= pcm_read_let2s ;
-					psf->read_int		= pcm_read_let2i ;
-					psf->read_float		= pcm_read_let2f ;
-					psf->read_double	= pcm_read_let2d ;
-					break ;
-			case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->read_short		= pcm_read_lei2s ;
-					psf->read_int		= pcm_read_lei2i ;
-					psf->read_float		= pcm_read_lei2f ;
-					psf->read_double	= pcm_read_lei2d ;
-					break ;
-			default :
-				psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\nbytewidth %d    endian %d\n", psf->bytewidth, psf->endian) ;
-				return SFE_UNIMPLEMENTED ;
-			} ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	switch (psf->bytewidth * 0x10000 + psf->endian + chars)
-		{	case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) :
-			case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) :
-					psf->write_short	= pcm_write_s2sc ;
-					psf->write_int		= pcm_write_i2sc ;
-					psf->write_float	= pcm_write_f2sc ;
-					psf->write_double	= pcm_write_d2sc ;
-					break ;
-			case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) :
-			case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) :
-					psf->write_short	= pcm_write_s2uc ;
-					psf->write_int		= pcm_write_i2uc ;
-					psf->write_float	= pcm_write_f2uc ;
-					psf->write_double	= pcm_write_d2uc ;
-					break ;
-
-			case (2 * 0x10000 + SF_ENDIAN_BIG) :
-					psf->write_short	= pcm_write_s2bes ;
-					psf->write_int		= pcm_write_i2bes ;
-					psf->write_float	= pcm_write_f2bes ;
-					psf->write_double	= pcm_write_d2bes ;
-					break ;
-
-			case (3 * 0x10000 + SF_ENDIAN_BIG) :
-					psf->write_short	= pcm_write_s2bet ;
-					psf->write_int		= pcm_write_i2bet ;
-					psf->write_float	= pcm_write_f2bet ;
-					psf->write_double	= pcm_write_d2bet ;
-					break ;
-
-			case (4 * 0x10000 + SF_ENDIAN_BIG) :
-					psf->write_short	= pcm_write_s2bei ;
-					psf->write_int		= pcm_write_i2bei ;
-					psf->write_float	= pcm_write_f2bei ;
-					psf->write_double	= pcm_write_d2bei ;
-					break ;
-
-			case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->write_short	= pcm_write_s2les ;
-					psf->write_int		= pcm_write_i2les ;
-					psf->write_float	= pcm_write_f2les ;
-					psf->write_double	= pcm_write_d2les ;
-					break ;
-
-			case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->write_short	= pcm_write_s2let ;
-					psf->write_int		= pcm_write_i2let ;
-					psf->write_float	= pcm_write_f2let ;
-					psf->write_double	= pcm_write_d2let ;
-					break ;
-
-			case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
-					psf->write_short	= pcm_write_s2lei ;
-					psf->write_int		= pcm_write_i2lei ;
-					psf->write_float	= pcm_write_f2lei ;
-					psf->write_double	= pcm_write_d2lei ;
-					break ;
-
-			default :
-				psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\nbytewidth %s    endian %d\n", psf->bytewidth, psf->endian) ;
-				return SFE_UNIMPLEMENTED ;
-			} ;
-
-		} ;
-
-	if (psf->filelength > psf->dataoffset)
-	{	psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-		}
-	else
-		psf->datalength = 0 ;
-
-	psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-	return 0 ;
-} /* pcm_init */
-
-/*==============================================================================
-*/
-
-static inline void
-sc2s_array	(signed char *src, int count, short *dest)
-{	while (--count >= 0)
-	{	dest [count] = src [count] << 8 ;
-		} ;
-} /* sc2s_array */
-
-static inline void
-uc2s_array	(unsigned char *src, int count, short *dest)
-{	while (--count >= 0)
-	{	dest [count] = (((short) src [count]) - 0x80) << 8 ;
-		} ;
-} /* uc2s_array */
-
-static inline void
-let2s_array (tribyte *src, int count, short *dest)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		dest [count] = LET2H_16_PTR (ucptr) ;
-		} ;
-} /* let2s_array */
-
-static inline void
-bet2s_array (tribyte *src, int count, short *dest)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		dest [count] = BET2H_16_PTR (ucptr) ;
-			} ;
-} /* bet2s_array */
-
-static inline void
-lei2s_array (int *src, int count, short *dest)
-{	int value ;
-
-	while (--count >= 0)
-	{	value = LE2H_32 (src [count]) ;
-		dest [count] = value >> 16 ;
-		} ;
-} /* lei2s_array */
-
-static inline void
-bei2s_array (int *src, int count, short *dest)
-{	int value ;
-
-	while (--count >= 0)
-	{	value = BE2H_32 (src [count]) ;
-		dest [count] = value >> 16 ;
-		} ;
-} /* bei2s_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2i_array	(signed char *src, int count, int *dest)
-{	while (--count >= 0)
-	{	dest [count] = ((int) src [count]) << 24 ;
-		} ;
-} /* sc2i_array */
-
-static inline void
-uc2i_array	(unsigned char *src, int count, int *dest)
-{	while (--count >= 0)
-	{	dest [count] = (((int) src [count]) - 128) << 24 ;
-		} ;
-} /* uc2i_array */
-
-static inline void
-bes2i_array (short *src, int count, int *dest)
-{	short value ;
-
-	while (--count >= 0)
-	{	value = BE2H_16 (src [count]) ;
-		dest [count] = value << 16 ;
-		} ;
-} /* bes2i_array */
-
-static inline void
-les2i_array (short *src, int count, int *dest)
-{	short value ;
-
-	while (--count >= 0)
-	{	value = LE2H_16 (src [count]) ;
-		dest [count] = value << 16 ;
-		} ;
-} /* les2i_array */
-
-static inline void
-bet2i_array (tribyte *src, int count, int *dest)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		dest [count] = BET2H_32_PTR (ucptr) ;
-			} ;
-} /* bet2i_array */
-
-static inline void
-let2i_array (tribyte *src, int count, int *dest)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		dest [count] = LET2H_32_PTR (ucptr) ;
-		} ;
-} /* let2i_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2f_array	(signed char *src, int count, float *dest, float normfact)
-{	while (--count >= 0)
-		dest [count] = ((float) src [count]) * normfact ;
-} /* sc2f_array */
-
-static inline void
-uc2f_array	(unsigned char *src, int count, float *dest, float normfact)
-{	while (--count >= 0)
-		dest [count] = (((int) src [count]) - 128) * normfact ;
-} /* uc2f_array */
-
-static inline void
-les2f_array (short *src, int count, float *dest, float normfact)
-{	short	value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = LE2H_16 (value) ;
-		dest [count] = ((float) value) * normfact ;
-		} ;
-} /* les2f_array */
-
-static inline void
-bes2f_array (short *src, int count, float *dest, float normfact)
-{	short			value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = BE2H_16 (value) ;
-		dest [count] = ((float) value) * normfact ;
-		} ;
-} /* bes2f_array */
-
-static inline void
-let2f_array (tribyte *src, int count, float *dest, float normfact)
-{	unsigned char	*ucptr ;
-	int 			value ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = LET2H_32_PTR (ucptr) ;
-		dest [count] = ((float) value) * normfact ;
-		} ;
-} /* let2f_array */
-
-static inline void
-bet2f_array (tribyte *src, int count, float *dest, float normfact)
-{	unsigned char	*ucptr ;
-	int				value ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = BET2H_32_PTR (ucptr) ;
-		dest [count] = ((float) value) * normfact ;
-			} ;
-} /* bet2f_array */
-
-static inline void
-lei2f_array (int *src, int count, float *dest, float normfact)
-{	int 			value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = LE2H_32 (value) ;
-		dest [count] = ((float) value) * normfact ;
-		} ;
-} /* lei2f_array */
-
-static inline void
-bei2f_array (int *src, int count, float *dest, float normfact)
-{	int 			value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = BE2H_32 (value) ;
-		dest [count] = ((float) value) * normfact ;
-		} ;
-} /* bei2f_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2d_array	(signed char *src, int count, double *dest, double normfact)
-{	while (--count >= 0)
-		dest [count] = ((double) src [count]) * normfact ;
-} /* sc2d_array */
-
-static inline void
-uc2d_array	(unsigned char *src, int count, double *dest, double normfact)
-{	while (--count >= 0)
-		dest [count] = (((int) src [count]) - 128) * normfact ;
-} /* uc2d_array */
-
-static inline void
-les2d_array (short *src, int count, double *dest, double normfact)
-{	short	value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = LE2H_16 (value) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* les2d_array */
-
-static inline void
-bes2d_array (short *src, int count, double *dest, double normfact)
-{	short	value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = BE2H_16 (value) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* bes2d_array */
-
-static inline void
-let2d_array (tribyte *src, int count, double *dest, double normfact)
-{	unsigned char	*ucptr ;
-	int				value ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = LET2H_32_PTR (ucptr) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* let2d_array */
-
-static inline void
-bet2d_array (tribyte *src, int count, double *dest, double normfact)
-{	unsigned char	*ucptr ;
-	int				value ;
-
-	ucptr = ((unsigned char*) src) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = (ucptr [0] << 24) | (ucptr [1] << 16) | (ucptr [2] << 8) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* bet2d_array */
-
-static inline void
-lei2d_array (int *src, int count, double *dest, double normfact)
-{	int 	value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = LE2H_32 (value) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* lei2d_array */
-
-static inline void
-bei2d_array (int *src, int count, double *dest, double normfact)
-{	int 	value ;
-
-	while (--count >= 0)
-	{	value = src [count] ;
-		value = BE2H_32 (value) ;
-		dest [count] = ((double) value) * normfact ;
-		} ;
-} /* bei2d_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-s2sc_array	(const short *src, signed char *dest, int count)
-{	while (--count >= 0)
-		dest [count] = src [count] >> 8 ;
-} /* s2sc_array */
-
-static inline void
-s2uc_array	(const short *src, unsigned char *dest, int count)
-{	while (--count >= 0)
-		dest [count] = (src [count] >> 8) + 0x80 ;
-} /* s2uc_array */
-
-static inline void
-s2let_array (const short *src, tribyte *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		ucptr [0] = 0 ;
-		ucptr [1] = src [count] ;
-		ucptr [2] = src [count] >> 8 ;
-		} ;
-} /* s2let_array */
-
-static inline void
-s2bet_array (const short *src, tribyte *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		ucptr [2] = 0 ;
-		ucptr [1] = src [count] ;
-		ucptr [0] = src [count] >> 8 ;
-		} ;
-} /* s2bet_array */
-
-static inline void
-s2lei_array (const short *src, int *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		ucptr [0] = 0 ;
-		ucptr [1] = 0 ;
-		ucptr [2] = src [count] ;
-		ucptr [3] = src [count] >> 8 ;
-		} ;
-} /* s2lei_array */
-
-static inline void
-s2bei_array (const short *src, int *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		ucptr [0] = src [count] >> 8 ;
-		ucptr [1] = src [count] ;
-		ucptr [2] = 0 ;
-		ucptr [3] = 0 ;
-		} ;
-} /* s2bei_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-i2sc_array	(const int *src, signed char *dest, int count)
-{	while (--count >= 0)
-		dest [count] = (src [count] >> 24) ;
-} /* i2sc_array */
-
-static inline void
-i2uc_array	(const int *src, unsigned char *dest, int count)
-{	while (--count >= 0)
-		dest [count] = ((src [count] >> 24) + 128) ;
-} /* i2uc_array */
-
-static inline void
-i2bes_array (const int *src, short *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		ucptr [0] = src [count] >> 24 ;
-		ucptr [1] = src [count] >> 16 ;
-		} ;
-} /* i2bes_array */
-
-static inline void
-i2les_array (const int *src, short *dest, int count)
-{	unsigned char	*ucptr ;
-
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		ucptr [0] = src [count] >> 16 ;
-		ucptr [1] = src [count] >> 24 ;
-		} ;
-} /* i2les_array */
-
-static inline void
-i2let_array (const int *src, tribyte *dest, int count)
-{	unsigned char	*ucptr ;
-	int				value ;
-
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = src [count] >> 8 ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		} ;
-} /* i2let_array */
-
-static inline void
-i2bet_array (const int *src, tribyte *dest, int count)
-{	unsigned char	*ucptr ;
-	int				value ;
-
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = src [count] >> 8 ;
-		ucptr [2] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [0] = value >> 16 ;
-		} ;
-} /* i2bet_array */
-
-/*===============================================================================================
-*/
-
-static sf_count_t
-pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		sc2s_array (ubuf.scbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_sc2s */
-
-static sf_count_t
-pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		uc2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_uc2s */
-
-static sf_count_t
-pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	int		total ;
-
-	total = psf_fread (ptr, sizeof (short), len, psf) ;
-	if (CPU_IS_LITTLE_ENDIAN)
-		endswap_short_array (ptr, len) ;
-
-	return total ;
-} /* pcm_read_bes2s */
-
-static sf_count_t
-pcm_read_les2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	int		total ;
-
-	total = psf_fread (ptr, sizeof (short), len, psf) ;
-	if (CPU_IS_BIG_ENDIAN)
-		endswap_short_array (ptr, len) ;
-
-	return total ;
-} /* pcm_read_les2s */
-
-static sf_count_t
-pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		bet2s_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bet2s */
-
-static sf_count_t
-pcm_read_let2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		let2s_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_let2s */
-
-static sf_count_t
-pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		bei2s_array (ubuf.ibuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bei2s */
-
-static sf_count_t
-pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		lei2s_array (ubuf.ibuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_lei2s */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		sc2i_array (ubuf.scbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_sc2i */
-
-static sf_count_t
-pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		uc2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_uc2i */
-
-static sf_count_t
-pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		bes2i_array (ubuf.sbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bes2i */
-
-static sf_count_t
-pcm_read_les2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		les2i_array (ubuf.sbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_les2i */
-
-static sf_count_t
-pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		bet2i_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bet2i */
-
-static sf_count_t
-pcm_read_let2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		let2i_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_let2i */
-
-static sf_count_t
-pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	int		total ;
-
-	total = psf_fread (ptr, sizeof (int), len, psf) ;
-	if (CPU_IS_LITTLE_ENDIAN)
-		endswap_int_array	(ptr, len) ;
-
-	return total ;
-} /* pcm_read_bei2i */
-
-static sf_count_t
-pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	int		total ;
-
-	total = psf_fread (ptr, sizeof (int), len, psf) ;
-	if (CPU_IS_BIG_ENDIAN)
-		endswap_int_array	(ptr, len) ;
-
-	return total ;
-} /* pcm_read_lei2i */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		sc2f_array (ubuf.scbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_sc2f */
-
-static sf_count_t
-pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		uc2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_uc2f */
-
-static sf_count_t
-pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		bes2f_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bes2f */
-
-static sf_count_t
-pcm_read_les2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		les2f_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_les2f */
-
-static sf_count_t
-pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	/* Special normfactor because tribyte value is read into an int. */
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		bet2f_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bet2f */
-
-static sf_count_t
-pcm_read_let2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	/* Special normfactor because tribyte value is read into an int. */
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		let2f_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_let2f */
-
-static sf_count_t
-pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		bei2f_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bei2f */
-
-static sf_count_t
-pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		lei2f_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_lei2f */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		sc2d_array (ubuf.scbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_sc2d */
-
-static sf_count_t
-pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		uc2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_uc2d */
-
-static sf_count_t
-pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		bes2d_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bes2d */
-
-static sf_count_t
-pcm_read_les2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		les2d_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_les2d */
-
-static sf_count_t
-pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		bet2d_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bet2d */
-
-static sf_count_t
-pcm_read_let2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	/* Special normfactor because tribyte value is read into an int. */
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		let2d_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_let2d */
-
-static sf_count_t
-pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		bei2d_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_bei2d */
-
-static sf_count_t
-pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		lei2d_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* pcm_read_lei2d */
-
-/*===============================================================================================
-**-----------------------------------------------------------------------------------------------
-**===============================================================================================
-*/
-
-static sf_count_t
-pcm_write_s2sc	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2sc_array (ptr + total, ubuf.scbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2sc */
-
-static sf_count_t
-pcm_write_s2uc	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2uc_array (ptr + total, ubuf.ucbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2uc */
-
-static sf_count_t
-pcm_write_s2bes	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (CPU_IS_BIG_ENDIAN)
-		return psf_fwrite (ptr, sizeof (short), len, psf) ;
-	else
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		endswap_short_copy (ubuf.sbuf, ptr + total, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2bes */
-
-static sf_count_t
-pcm_write_s2les	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (CPU_IS_LITTLE_ENDIAN)
-		return psf_fwrite (ptr, sizeof (short), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		endswap_short_copy (ubuf.sbuf, ptr + total, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2les */
-
-static sf_count_t
-pcm_write_s2bet	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2bet_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2bet */
-
-static sf_count_t
-pcm_write_s2let	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2let_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2let */
-
-static sf_count_t
-pcm_write_s2bei	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2bei_array (ptr + total, ubuf.ibuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2bei */
-
-static sf_count_t
-pcm_write_s2lei	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2lei_array (ptr + total, ubuf.ibuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_s2lei */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_write_i2sc	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2sc_array (ptr + total, ubuf.scbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2sc */
-
-static sf_count_t
-pcm_write_i2uc	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2uc_array (ptr + total, ubuf.ucbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2uc */
-
-static sf_count_t
-pcm_write_i2bes	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2bes_array (ptr + total, ubuf.sbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2bes */
-
-static sf_count_t
-pcm_write_i2les	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2les_array (ptr + total, ubuf.sbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2les */
-
-static sf_count_t
-pcm_write_i2bet	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2bet_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2bet */
-
-static sf_count_t
-pcm_write_i2let	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2let_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2les */
-
-static sf_count_t
-pcm_write_i2bei	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (CPU_IS_BIG_ENDIAN)
-		return psf_fwrite (ptr, sizeof (int), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		endswap_int_copy (ubuf.ibuf, ptr + total, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2bei */
-
-static sf_count_t
-pcm_write_i2lei	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if (CPU_IS_LITTLE_ENDIAN)
-		return psf_fwrite (ptr, sizeof (int), len, psf) ;
-
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		endswap_int_copy (ubuf.ibuf, ptr + total, bufferlen) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_i2lei */
-
-/*------------------------------------------------------------------------------
-**==============================================================================
-**------------------------------------------------------------------------------
-*/
-
-static void
-f2sc_array (const float *src, signed char *dest, int count, int normalize)
-{	float normfact ;
-
-	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-	{	dest [count] = lrintf (src [count] * normfact) ;
-		} ;
-} /* f2sc_array */
-
-static void
-f2sc_clip_array (const float *src, signed char *dest, int count, int normalize)
-{	float	normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 127 ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = -128 ;
-			continue ;
-			} ;
-
-		dest [count] = lrintf (scaled_value) >> 24 ;
-		} ;
-} /* f2sc_clip_array */
-
-static sf_count_t
-pcm_write_f2sc	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, signed char *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2sc_clip_array : f2sc_array ;
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.scbuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2sc */
-
-/*==============================================================================
-*/
-
-static	void
-f2uc_array	(const float *src, unsigned char *dest, int count, int normalize)
-{	float normfact ;
-
-	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-	{	dest [count] = lrintf (src [count] * normfact) + 128 ;
-		} ;
-} /* f2uc_array */
-
-static	void
-f2uc_clip_array	(const float *src, unsigned char *dest, int count, int normalize)
-{	float	normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 0xFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = 0 ;
-			continue ;
-			} ;
-
-		dest [count] = (lrintf (scaled_value) >> 24) + 128 ;
-		} ;
-} /* f2uc_clip_array */
-
-static sf_count_t
-pcm_write_f2uc	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, unsigned char *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2uc_clip_array : f2uc_array ;
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ucbuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2uc */
-
-/*==============================================================================
-*/
-
-static void
-f2bes_array (const float *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float 			normfact ;
-	short			value ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [1] = value ;
-		ucptr [0] = value >> 8 ;
-			} ;
-} /* f2bes_array */
-
-static void
-f2bes_clip_array (const float *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [1] = 0xFF ;
-			ucptr [0] = 0x7F ;
-			continue ;
-		} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [1] = 0x00 ;
-			ucptr [0] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrintf (scaled_value) ;
-		ucptr [1] = value >> 16 ;
-		ucptr [0] = value >> 24 ;
-		} ;
-} /* f2bes_clip_array */
-
-static sf_count_t
-pcm_write_f2bes	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, short *t, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2bes_clip_array : f2bes_array ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-				break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2bes */
-
-/*==============================================================================
-*/
-
-static void
-f2les_array (const float *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact ;
-	int				value ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		} ;
-} /* f2les_array */
-
-static void
-f2les_clip_array (const float *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrintf (scaled_value) ;
-		ucptr [0] = value >> 16 ;
-		ucptr [1] = value >> 24 ;
-		} ;
-} /* f2les_clip_array */
-
-static sf_count_t
-pcm_write_f2les	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, short *t, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2les_clip_array : f2les_array ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2les */
-
-/*==============================================================================
-*/
-
-static void
-f2let_array (const float *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float 			normfact ;
-	int				value ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		} ;
-} /* f2let_array */
-
-static void
-f2let_clip_array (const float *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x80 ;
-			continue ;
-		} ;
-
-		value = lrintf (scaled_value) ;
-		ucptr [0] = value >> 8 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 24 ;
-		} ;
-} /* f2let_clip_array */
-
-static sf_count_t
-pcm_write_f2let	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, tribyte *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2let_clip_array : f2let_array ;
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2let */
-
-/*==============================================================================
-*/
-
-static void
-f2bet_array (const float *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float 			normfact ;
-	int				value ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [0] = value >> 16 ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value ;
-		} ;
-} /* f2bet_array */
-
-static void
-f2bet_clip_array (const float *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0x7F ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0xFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x80 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x00 ;
-			continue ;
-		} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [0] = value >> 24 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 8 ;
-		} ;
-} /* f2bet_clip_array */
-
-static sf_count_t
-pcm_write_f2bet	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, tribyte *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2bet_clip_array : f2bet_array ;
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2bet */
-
-/*==============================================================================
-*/
-
-static void
-f2bei_array (const float *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact ;
-	int				value ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [0] = value >> 24 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 8 ;
-		ucptr [3] = value ;
-		} ;
-} /* f2bei_array */
-
-static void
-f2bei_clip_array (const float *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= 1.0 * 0x7FFFFFFF)
-		{	ucptr [0] = 0x7F ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0xFF ;
-			ucptr [3] = 0xFF ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x80 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x00 ;
-			ucptr [3] = 0x00 ;
-			continue ;
-		} ;
-
-		value = lrintf (scaled_value) ;
-		ucptr [0] = value >> 24 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 8 ;
-		ucptr [3] = value ;
-		} ;
-} /* f2bei_clip_array */
-
-static sf_count_t
-pcm_write_f2bei	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, int *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2bei_clip_array : f2bei_array ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2bei */
-
-/*==============================================================================
-*/
-
-static void
-f2lei_array (const float *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact ;
-	int				value ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		value = lrintf (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		ucptr [3] = value >> 24 ;
-		} ;
-} /* f2lei_array */
-
-static void
-f2lei_clip_array (const float *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	float			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0xFF ;
-			ucptr [3] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x00 ;
-			ucptr [3] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrintf (scaled_value) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		ucptr [3] = value >> 24 ;
-		} ;
-} /* f2lei_clip_array */
-
-static sf_count_t
-pcm_write_f2lei	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const float *, int *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? f2lei_clip_array : f2lei_array ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_float) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_f2lei */
-
-/*==============================================================================
-*/
-
-static void
-d2sc_array	(const double *src, signed char *dest, int count, int normalize)
-{	double	normfact ;
-
-	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-	{	dest [count] = lrint (src [count] * normfact) ;
-		} ;
-} /* d2sc_array */
-
-static void
-d2sc_clip_array	(const double *src, signed char *dest, int count, int normalize)
-{	double	normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 127 ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = -128 ;
-			continue ;
-			} ;
-
-		dest [count] = lrintf (scaled_value) >> 24 ;
-		} ;
-} /* d2sc_clip_array */
-
-static sf_count_t
-pcm_write_d2sc	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, signed char *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2sc_clip_array : d2sc_array ;
-	bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.scbuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2sc */
-
-/*==============================================================================
-*/
-
-static	void
-d2uc_array	(const double *src, unsigned char *dest, int count, int normalize)
-{	double normfact ;
-
-	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-	while (--count >= 0)
-	{	dest [count] = lrint (src [count] * normfact) + 128 ;
-		} ;
-} /* d2uc_array */
-
-static	void
-d2uc_clip_array	(const double *src, unsigned char *dest, int count, int normalize)
-{	double	normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-	while (--count >= 0)
-	{	scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	dest [count] = 255 ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	dest [count] = 0 ;
-			continue ;
-			} ;
-
-		dest [count] = (lrint (src [count] * normfact) >> 24) + 128 ;
-		} ;
-} /* d2uc_clip_array */
-
-static sf_count_t
-pcm_write_d2uc	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, unsigned char *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2uc_clip_array : d2uc_array ;
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ucbuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2uc */
-
-/*==============================================================================
-*/
-
-static void
-d2bes_array (const double *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	short			value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [1] = value ;
-		ucptr [0] = value >> 8 ;
-		} ;
-} /* d2bes_array */
-
-static void
-d2bes_clip_array (const double *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	double			normfact, scaled_value ;
-	int				value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [1] = 0xFF ;
-			ucptr [0] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [1] = 0x00 ;
-			ucptr [0] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [1] = value >> 16 ;
-		ucptr [0] = value >> 24 ;
-		} ;
-} /* d2bes_clip_array */
-
-static sf_count_t
-pcm_write_d2bes	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, short *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2bes_clip_array : d2bes_array ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2bes */
-
-/*==============================================================================
-*/
-
-static void
-d2les_array (const double *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	short			value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		} ;
-} /* d2les_array */
-
-static void
-d2les_clip_array (const double *src, short *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-	ucptr = ((unsigned char*) dest) + 2 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 2 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [0] = value >> 16 ;
-		ucptr [1] = value >> 24 ;
-		} ;
-} /* d2les_clip_array */
-
-static sf_count_t
-pcm_write_d2les	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, short *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2les_clip_array : d2les_array ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2les */
-
-/*==============================================================================
-*/
-
-static void
-d2let_array (const double *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		} ;
-} /* d2let_array */
-
-static void
-d2let_clip_array (const double *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [0] = value >> 8 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 24 ;
-		} ;
-} /* d2let_clip_array */
-
-static sf_count_t
-pcm_write_d2let	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, tribyte *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2let_clip_array : d2let_array ;
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2let */
-
-/*==============================================================================
-*/
-
-static void
-d2bet_array (const double *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [2] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [0] = value >> 16 ;
-		} ;
-} /* d2bet_array */
-
-static void
-d2bet_clip_array (const double *src, tribyte *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-	ucptr = ((unsigned char*) dest) + 3 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 3 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [2] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [0] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [2] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [0] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [2] = value >> 8 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [0] = value >> 24 ;
-		} ;
-} /* d2bet_clip_array */
-
-static sf_count_t
-pcm_write_d2bet	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, tribyte *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2bet_clip_array : d2bet_array ;
-	bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2bet */
-
-/*==============================================================================
-*/
-
-static void
-d2bei_array (const double *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [0] = value >> 24 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 8 ;
-		ucptr [3] = value ;
-		} ;
-} /* d2bei_array */
-
-static void
-d2bei_clip_array (const double *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [3] = 0xFF ;
-			ucptr [2] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [0] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [3] = 0x00 ;
-			ucptr [2] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [0] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [0] = value >> 24 ;
-		ucptr [1] = value >> 16 ;
-		ucptr [2] = value >> 8 ;
-		ucptr [3] = value ;
-		} ;
-} /* d2bei_clip_array */
-
-static sf_count_t
-pcm_write_d2bei	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, int *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2bei_clip_array : d2bei_array ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2bei */
-
-/*==============================================================================
-*/
-
-static void
-d2lei_array (const double *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact ;
-
-	normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		value = lrint (src [count] * normfact) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		ucptr [3] = value >> 24 ;
-		} ;
-} /* d2lei_array */
-
-static void
-d2lei_clip_array (const double *src, int *dest, int count, int normalize)
-{	unsigned char	*ucptr ;
-	int				value ;
-	double			normfact, scaled_value ;
-
-	normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-	ucptr = ((unsigned char*) dest) + 4 * count ;
-
-	while (--count >= 0)
-	{	ucptr -= 4 ;
-		scaled_value = src [count] * normfact ;
-		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-		{	ucptr [0] = 0xFF ;
-			ucptr [1] = 0xFF ;
-			ucptr [2] = 0xFF ;
-			ucptr [3] = 0x7F ;
-			continue ;
-			} ;
-		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-		{	ucptr [0] = 0x00 ;
-			ucptr [1] = 0x00 ;
-			ucptr [2] = 0x00 ;
-			ucptr [3] = 0x80 ;
-			continue ;
-			} ;
-
-		value = lrint (scaled_value) ;
-		ucptr [0] = value ;
-		ucptr [1] = value >> 8 ;
-		ucptr [2] = value >> 16 ;
-		ucptr [3] = value >> 24 ;
-		} ;
-} /* d2lei_clip_array */
-
-static sf_count_t
-pcm_write_d2lei	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	void		(*convert) (const double *, int *, int, int) ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	convert = (psf->add_clipping) ? d2lei_clip_array : d2lei_array ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_double) ;
-		writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* pcm_write_d2lei */
-
diff --git a/libs/libsndfile/src/pvf.c b/libs/libsndfile/src/pvf.c
deleted file mode 100644
index 4ea24b6b68..0000000000
--- a/libs/libsndfile/src/pvf.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define PVF1_MARKER		(MAKE_MARKER ('P', 'V', 'F', '1'))
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static	int		pvf_close		(SF_PRIVATE *psf) ;
-
-static int		pvf_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int		pvf_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-pvf_open	(SF_PRIVATE *psf)
-{	int		subformat ;
-	int		error = 0 ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = pvf_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_PVF)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_BIG ;
-
-		if (pvf_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = pvf_write_header ;
-		} ;
-
-	psf->container_close = pvf_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :	/* 8-bit linear PCM. */
-		case SF_FORMAT_PCM_16 :	/* 16-bit linear PCM. */
-		case SF_FORMAT_PCM_32 :	/* 32-bit linear PCM. */
-				error = pcm_init (psf) ;
-				break ;
-
-		default :	break ;
-		} ;
-
-	return error ;
-} /* pvf_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-pvf_close	(SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* pvf_close */
-
-static int
-pvf_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	sf_count_t	current ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	snprintf ((char*) psf->header, sizeof (psf->header), "PVF1\n%d %d %d\n",
-		psf->sf.channels, psf->sf.samplerate, psf->bytewidth * 8) ;
-
-	psf->headindex = strlen ((char*) psf->header) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* pvf_write_header */
-
-static int
-pvf_read_header (SF_PRIVATE *psf)
-{	char	buffer [32] ;
-	int		marker, channels, samplerate, bitwidth ;
-
-	psf_binheader_readf (psf, "pmj", 0, &marker, 1) ;
-	psf_log_printf (psf, "%M\n", marker) ;
-
-	if (marker != PVF1_MARKER)
-		return SFE_PVF_NO_PVF1 ;
-
-	/* Grab characters up until a newline which is replaced by an EOS. */
-	psf_binheader_readf (psf, "G", buffer, sizeof (buffer)) ;
-
-	if (sscanf (buffer, "%d %d %d", &channels, &samplerate, &bitwidth) != 3)
-		return SFE_PVF_BAD_HEADER ;
-
-	psf_log_printf (psf, " Channels    : %d\n Sample rate : %d\n Bit width   : %d\n",
-				channels, samplerate, bitwidth) ;
-
-	psf->sf.channels = channels ;
-	psf->sf.samplerate = samplerate ;
-
-	switch (bitwidth)
-	{	case 8 :
-				psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_S8 ;
-				psf->bytewidth = 1 ;
-				break ;
-
-		case 16 :
-				psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_16 ;
-				psf->bytewidth = 2 ;
-				break ;
-		case 32 :
-				psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_32 ;
-				psf->bytewidth = 4 ;
-				break ;
-
-		default :
-				return SFE_PVF_BAD_BITWIDTH ;
-		} ;
-
-	psf->dataoffset = psf_ftell (psf) ;
-	psf_log_printf (psf, " Data Offset : %D\n", psf->dataoffset) ;
-
-	psf->endian = SF_ENDIAN_BIG ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-	if (! psf->sf.frames && psf->blockwidth)
-		psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	return 0 ;
-} /* pvf_read_header */
diff --git a/libs/libsndfile/src/raw.c b/libs/libsndfile/src/raw.c
deleted file mode 100644
index e5dc49e2ff..0000000000
--- a/libs/libsndfile/src/raw.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-raw_open	(SF_PRIVATE *psf)
-{	int	subformat, error = SFE_NO_ERROR ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-	if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-		psf->endian = SF_ENDIAN_BIG ;
-	else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-		psf->endian = SF_ENDIAN_LITTLE ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-	psf->dataoffset = 0 ;
-	psf->datalength = psf->filelength ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_U8 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ULAW :
-				error = ulaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				error = alaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_GSM610 :
-				error = gsm610_init (psf) ;
-				break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-				error = float32_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				error = double64_init (psf) ;
-				break ;
-
-		case SF_FORMAT_DWVW_12 :
-				error = dwvw_init (psf, 12) ;
-				break ;
-
-		case SF_FORMAT_DWVW_16 :
-				error = dwvw_init (psf, 16) ;
-				break ;
-
-		case SF_FORMAT_DWVW_24 :
-				error = dwvw_init (psf, 24) ;
-				break ;
-
-		case SF_FORMAT_VOX_ADPCM :
-				error = vox_adpcm_init (psf) ;
-				break ;
-		/* Lite remove end */
-
-		default : return SFE_BAD_OPEN_FORMAT ;
-		} ;
-
-	return error ;
-} /* raw_open */
diff --git a/libs/libsndfile/src/rf64.c b/libs/libsndfile/src/rf64.c
deleted file mode 100644
index 7f14ef89ba..0000000000
--- a/libs/libsndfile/src/rf64.c
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
-** Copyright (C) 2008-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2009      Uli Franke <cls@nebadje.org>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	This format documented at:
-**	http://www.sr.se/utveckling/tu/bwf/prog/RF_64v1_4.pdf
-**
-**	But this may be a better reference:
-**	http://www.ebu.ch/CMSimages/en/tec_doc_t3306-2007_tcm6-42570.pdf
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"wav_w64.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-#define	RF64_MARKER		MAKE_MARKER ('R', 'F', '6', '4')
-#define	FFFF_MARKER		MAKE_MARKER (0xff, 0xff, 0xff, 0xff)
-#define	WAVE_MARKER		MAKE_MARKER ('W', 'A', 'V', 'E')
-#define	ds64_MARKER		MAKE_MARKER ('d', 's', '6', '4')
-#define	fmt_MARKER		MAKE_MARKER ('f', 'm', 't', ' ')
-#define	fact_MARKER		MAKE_MARKER ('f', 'a', 'c', 't')
-#define	data_MARKER		MAKE_MARKER ('d', 'a', 't', 'a')
-
-#define bext_MARKER		MAKE_MARKER ('b', 'e', 'x', 't')
-#define cart_MARKER		MAKE_MARKER ('c', 'a', 'r', 't')
-#define OggS_MARKER		MAKE_MARKER ('O', 'g', 'g', 'S')
-#define wvpk_MARKER 	MAKE_MARKER ('w', 'v', 'p', 'k')
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	rf64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int	rf64_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	rf64_close (SF_PRIVATE *psf) ;
-static int	rf64_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-rf64_open (SF_PRIVATE *psf)
-{	WAV_PRIVATE *wpriv ;
-	int	subformat, error = 0 ;
-	int blockalign, framesperblock ;
-
-	if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-	psf->container_data = wpriv ;
-	wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-
-	/* All RF64 files are little endian. */
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = rf64_read_header (psf, &blockalign, &framesperblock)) != 0)
-			return error ;
-		} ;
-
-	if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RF64)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-		if ((error = rf64_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = rf64_write_header ;
-		} ;
-
-	psf->container_close = rf64_close ;
-	psf->command = rf64_command ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					error = ulaw_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					error = alaw_init (psf) ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-					error = float32_init (psf) ;
-					break ;
-
-		case SF_FORMAT_DOUBLE :
-					error = double64_init (psf) ;
-					break ;
-
-		/* Lite remove end */
-
-		default : 	return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return error ;
-} /* rf64_open */
-
-/*------------------------------------------------------------------------------
-*/
-enum
-{	HAVE_ds64	= 0x01,
-	HAVE_fmt	= 0x02,
-	HAVE_bext	= 0x04,
-	HAVE_data	= 0x08,
-	HAVE_cart	= 0x10
-} ;
-
-#define HAVE_CHUNK(CHUNK)	((parsestage & CHUNK) != 0)
-
-static int
-rf64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{	WAV_PRIVATE	*wpriv ;
-	WAV_FMT		*wav_fmt ;
-	sf_count_t riff_size = 0, frame_count = 0, ds64_datalength = 0 ;
-	uint32_t marks [2], size32, parsestage = 0 ;
-	int marker, error, done = 0, format = 0 ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-	wav_fmt = &wpriv->wav_fmt ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pmmm", 0, &marker, marks, marks + 1) ;
-	if (marker != RF64_MARKER || marks [1] != WAVE_MARKER)
-		return SFE_RF64_NOT_RF64 ;
-
-	if (marks [0] == FFFF_MARKER)
-		psf_log_printf (psf, "%M\n  %M\n", RF64_MARKER, WAVE_MARKER) ;
-	else
-		psf_log_printf (psf, "%M : 0x%x (should be 0xFFFFFFFF)\n  %M\n", RF64_MARKER, WAVE_MARKER) ;
-
-	while (NOT (done))
-	{	psf_binheader_readf (psf, "em4", &marker, &size32) ;
-
-		switch (marker)
-		{	case ds64_MARKER :
-				{	unsigned int table_len, bytesread ;
-
-					/* Read ds64 sizes (3 8-byte words). */
-					bytesread = psf_binheader_readf (psf, "888", &riff_size, &ds64_datalength, &frame_count) ;
-
-					/* Read table length. */
-					bytesread += psf_binheader_readf (psf, "4", &table_len) ;
-					/* Skip table for now. (this was "table_len + 4", why?) */
-					bytesread += psf_binheader_readf (psf, "j", table_len) ;
-
-					if (size32 == bytesread)
-						psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-					else if (size32 >= bytesread + 4)
-					{	unsigned int next ;
-						psf_binheader_readf (psf, "m", &next) ;
-						if (next == fmt_MARKER)
-						{	psf_log_printf (psf, "%M : %u (should be %u)\n", marker, size32, bytesread) ;
-							psf_binheader_readf (psf, "j", -4) ;
-							}
-						else
-						{	psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-							psf_binheader_readf (psf, "j", size32 - bytesread - 4) ;
-							} ;
-						} ;
-
-					if (psf->filelength != riff_size + 8)
-						psf_log_printf (psf, "  Riff size : %D (should be %D)\n", riff_size, psf->filelength - 8) ;
-					else
-						psf_log_printf (psf, "  Riff size : %D\n", riff_size) ;
-
-					psf_log_printf (psf, "  Data size : %D\n", ds64_datalength) ;
-
-					psf_log_printf (psf, "  Frames    : %D\n", frame_count) ;
-					psf_log_printf (psf, "  Table length : %u\n", table_len) ;
-
-					} ;
-				parsestage |= HAVE_ds64 ;
-				break ;
-
-			case fmt_MARKER:
-					psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-					if ((error = wav_w64_read_fmt_chunk (psf, size32)) != 0)
-						return error ;
-					format = wav_fmt->format ;
-					parsestage |= HAVE_fmt ;
-					break ;
-
-			case bext_MARKER :
-					if ((error = wav_read_bext_chunk (psf, size32)) != 0)
-						return error ;
-					parsestage |= HAVE_bext ;
-					break ;
-
-			case cart_MARKER :
-					if ((error = wav_read_cart_chunk (psf, size32)) != 0)
-						return error ;
-					parsestage |= HAVE_cart ;
-					break ;
-
-			case data_MARKER :
-				/* see wav for more sophisticated parsing -> implement state machine with parsestage */
-
-				if (HAVE_CHUNK (HAVE_ds64))
-				{	if (size32 == 0xffffffff)
-						psf_log_printf (psf, "%M : 0x%x\n", marker, size32) ;
-					else
-						psf_log_printf (psf, "%M : 0x%x (should be 0xffffffff\n", marker, size32) ;
-					psf->datalength = ds64_datalength ;
-					}
-				else
-				{	if (size32 == 0xffffffff)
-					{	psf_log_printf (psf, "%M : 0x%x\n", marker, size32) ;
-						psf_log_printf (psf, "  *** Data length not specified no 'ds64' chunk.\n") ;
-						}
-					else
-					{	psf_log_printf (psf, "%M : 0x%x\n**** Weird, RF64 file without a 'ds64' chunk and no valid 'data' size.\n", marker, size32) ;
-						psf->datalength = size32 ;
-						} ;
-					} ;
-
-				psf->dataoffset = psf_ftell (psf) ;
-
-				if (psf->dataoffset > 0)
-				{	if (size32 == 0 && riff_size == 8 && psf->filelength > 44)
-					{	psf_log_printf (psf, "  *** Looks like a WAV file which wasn't closed properly. Fixing it.\n") ;
-						psf->datalength = psf->filelength - psf->dataoffset ;
-						} ;
-
-					/* Only set dataend if there really is data at the end. */
-					if (psf->datalength + psf->dataoffset < psf->filelength)
-						psf->dataend = psf->datalength + psf->dataoffset ;
-
-					if (NOT (psf->sf.seekable) || psf->dataoffset < 0)
-						break ;
-
-					/* Seek past data and continue reading header. */
-					psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-
-					if (psf_ftell (psf) != psf->datalength + psf->dataoffset)
-						psf_log_printf (psf, "  *** psf_fseek past end error ***\n") ;
-						break ;
-					} ;
-				break ;
-
-			default :
-					if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
-						&& isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
-					{	psf_log_printf (psf, "*** %M : %d (unknown marker)\n", marker, size32) ;
-						if (size32 < 8)
-							done = SF_TRUE ;
-						psf_binheader_readf (psf, "j", size32) ;
-						break ;
-						} ;
-					if (psf_ftell (psf) & 0x03)
-					{	psf_log_printf (psf, "  Unknown chunk marker at position 0x%x. Resynching.\n", size32 - 4) ;
-						psf_binheader_readf (psf, "j", -3) ;
-						break ;
-						} ;
-					psf_log_printf (psf, "*** Unknown chunk marker (0x%X) at position 0x%X. Exiting parser.\n", marker, psf_ftell (psf) - 4) ;
-					done = SF_TRUE ;
-				break ;
-			} ;	/* switch (marker) */
-
-		if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (marker))
-		{	psf_log_printf (psf, "End\n") ;
-			break ;
-			} ;
-		} ;
-
-	if (psf->dataoffset <= 0)
-		return SFE_WAV_NO_DATA ;
-
-	/* WAVs can be little or big endian */
-	psf->endian = psf->rwf_endian ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (psf->is_pipe == 0)
-	{	/*
-		** Check for 'wvpk' at the start of the DATA section. Not able to
-		** handle this.
-		*/
-		psf_binheader_readf (psf, "4", &marker) ;
-		if (marker == wvpk_MARKER || marker == OggS_MARKER)
-			return SFE_WAV_WVPK_DATA ;
-		} ;
-
-	/* Seek to start of DATA section. */
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (psf->blockwidth)
-	{	if (psf->filelength - psf->dataoffset < psf->datalength)
-			psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-		else
-			psf->sf.frames = psf->datalength / psf->blockwidth ;
-		} ;
-
-	if (frame_count != psf->sf.frames)
-		psf_log_printf (psf, "*** Calculated frame count %d does not match value from 'ds64' chunk of %d.\n", psf->sf.frames, frame_count) ;
-
-	switch (format)
-	{
-		case WAVE_FORMAT_EXTENSIBLE :
-
-			/* with WAVE_FORMAT_EXTENSIBLE the psf->sf.format field is already set. We just have to set the major to rf64 */
-			psf->sf.format = (psf->sf.format & ~SF_FORMAT_TYPEMASK) | SF_FORMAT_RF64 ;
-
-			if (psf->sf.format == (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM))
-			{	*blockalign = wav_fmt->msadpcm.blockalign ;
-				*framesperblock = wav_fmt->msadpcm.samplesperblock ;
-				} ;
-			break ;
-
-		case WAVE_FORMAT_PCM :
-					psf->sf.format = SF_FORMAT_RF64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-					break ;
-
-		case WAVE_FORMAT_MULAW :
-		case IBM_FORMAT_MULAW :
-					psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_ULAW) ;
-					break ;
-
-		case WAVE_FORMAT_ALAW :
-		case IBM_FORMAT_ALAW :
-					psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_ALAW) ;
-					break ;
-
-		case WAVE_FORMAT_MS_ADPCM :
-					psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_MS_ADPCM) ;
-					*blockalign = wav_fmt->msadpcm.blockalign ;
-					*framesperblock = wav_fmt->msadpcm.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_IMA_ADPCM :
-					psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_IMA_ADPCM) ;
-					*blockalign = wav_fmt->ima.blockalign ;
-					*framesperblock = wav_fmt->ima.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_GSM610 :
-					psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_GSM610) ;
-					break ;
-
-		case WAVE_FORMAT_IEEE_FLOAT :
-					psf->sf.format = SF_FORMAT_RF64 ;
-					psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-					break ;
-
-		case WAVE_FORMAT_G721_ADPCM :
-					psf->sf.format = SF_FORMAT_RF64 | SF_FORMAT_G721_32 ;
-					break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (wpriv->fmt_is_broken)
-		wav_w64_analyze (psf) ;
-
-	/* Only set the format endian-ness if its non-standard big-endian. */
-	if (psf->endian == SF_ENDIAN_BIG)
-		psf->sf.format |= SF_ENDIAN_BIG ;
-
-	return 0 ;
-} /* rf64_read_header */
-
-/*  known WAVEFORMATEXTENSIBLE GUIDS  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{	0x00000001, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{	0x00000002, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{	0x00000003, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{	0x00000006, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{	0x00000007, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{	0x00000001, 0x0721, 0x11d3, {	0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{	0x00000003, 0x0721, 0x11d3, {	0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-
-static int
-rf64_write_fmt_chunk (SF_PRIVATE *psf)
-{	WAV_PRIVATE	*wpriv ;
-	int subformat, fmt_size ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
-	/* initial section (same for all, it appears) */
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-		case SF_FORMAT_ULAW :
-		case SF_FORMAT_ALAW :
-			fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2 + 2 + 8 ;
-
-			/* fmt : format, channels, samplerate */
-			psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_EXTENSIBLE, psf->sf.channels, psf->sf.samplerate) ;
-			/*  fmt : bytespersec */
-			psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-			/*  fmt : blockalign, bitwidth */
-			psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-			/* cbSize 22 is sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) */
-			psf_binheader_writef (psf, "2", 22) ;
-
-			/* wValidBitsPerSample, for our use same as bitwidth as we use it fully */
-			psf_binheader_writef (psf, "2", psf->bytewidth * 8) ;
-
-			/* For an Ambisonic file set the channel mask to zero.
-			** Otherwise use a default based on the channel count.
-			*/
-			if (wpriv->wavex_ambisonic != SF_AMBISONIC_NONE)
-				psf_binheader_writef (psf, "4", 0) ;
-			else if (wpriv->wavex_channelmask != 0)
-				psf_binheader_writef (psf, "4", wpriv->wavex_channelmask) ;
-			else
-			{	/*
-				** Ok some liberty is taken here to use the most commonly used channel masks
-				** instead of "no mapping". If you really want to use "no mapping" for 8 channels and less
-				** please don't use wavex. (otherwise we'll have to create a new SF_COMMAND)
-				*/
-				switch (psf->sf.channels)
-				{	case 1 :	/* center channel mono */
-						psf_binheader_writef (psf, "4", 0x4) ;
-						break ;
-
-					case 2 :	/* front left and right */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2) ;
-						break ;
-
-					case 4 :	/* Quad */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x10 | 0x20) ;
-						break ;
-
-					case 6 :	/* 5.1 */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) ;
-						break ;
-
-					case 8 :	/* 7.1 */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80) ;
-						break ;
-
-					default :	/* 0 when in doubt , use direct out, ie NO mapping*/
-						psf_binheader_writef (psf, "4", 0x0) ;
-						break ;
-					} ;
-				} ;
-			break ;
-
-		case SF_FORMAT_MS_ADPCM : /* Todo, GUID exists might have different header as per wav_write_header */
-		default :
-			return SFE_UNIMPLEMENTED ;
-		} ;
-
-	/* GUID section, different for each */
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-			wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-						&MSGUID_SUBTYPE_PCM : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM) ;
-			break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-						&MSGUID_SUBTYPE_IEEE_FLOAT : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT) ;
-			break ;
-
-		case SF_FORMAT_ULAW :
-			wavex_write_guid (psf, &MSGUID_SUBTYPE_MULAW) ;
-			break ;
-
-		case SF_FORMAT_ALAW :
-			wavex_write_guid (psf, &MSGUID_SUBTYPE_ALAW) ;
-			break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return 0 ;
-} /* rf64_write_fmt_chunk */
-
-
-static int
-rf64_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int 		error = 0, has_data = SF_FALSE ;
-
-	current = psf_ftell (psf) ;
-
-	if (psf->dataoffset > 0 && current > psf->dataoffset)
-		has_data = SF_TRUE ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		if (psf->bytewidth > 0)
-			psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_binheader_writef (psf, "em4m", RF64_MARKER, 0xffffffff, WAVE_MARKER) ;
-
-	/* Currently no table. */
-	psf_binheader_writef (psf, "m48884", ds64_MARKER, 28, psf->filelength - 8, psf->datalength, psf->sf.frames, 0) ;
-
-	/* WAVE and 'fmt ' markers. */
-	psf_binheader_writef (psf, "m", fmt_MARKER) ;
-
-	/* Write the 'fmt ' chunk. */
-	switch (psf->sf.format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_WAV :
-				psf_log_printf (psf, "ooops SF_FORMAT_WAV\n") ;
-				return SFE_UNIMPLEMENTED ;
-				break ;
-
-		case SF_FORMAT_WAVEX :
-		case SF_FORMAT_RF64 :
-				if ((error = rf64_write_fmt_chunk (psf)) != 0)
-					return error ;
-				break ;
-
-		default :
-				return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (psf->broadcast_16k != NULL)
-		wav_write_bext_chunk (psf) ;
-
-	if (psf->cart_16k != NULL)
-		wav_write_cart_chunk (psf) ;
-#if 0
-	/* The LIST/INFO chunk. */
-	if (psf->strings.flags & SF_STR_LOCATE_START)
-		wav_write_strings (psf, SF_STR_LOCATE_START) ;
-
-	if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-	{	psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-//	if (psf->broadcast_info != NULL)
-//		wav_write_bext_chunk (psf) ;
-
-	if (psf->instrument != NULL)
-	{	int		tmp ;
-		double	dtune = (double) (0x40000000) / 25.0 ;
-
-		psf_binheader_writef (psf, "m4", smpl_MARKER, 9 * 4 + psf->instrument->loop_count * 6 * 4) ;
-		psf_binheader_writef (psf, "44", 0, 0) ; /* Manufacturer zero is everyone */
-		tmp = (int) (1.0e9 / psf->sf.samplerate) ; /* Sample period in nano seconds */
-		psf_binheader_writef (psf, "44", tmp, psf->instrument->basenote) ;
-		tmp = (unsigned int) (psf->instrument->detune * dtune + 0.5) ;
-		psf_binheader_writef (psf, "4", tmp) ;
-		psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
-		psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-		for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
-		{	int type ;
-
-			type = psf->instrument->loops [tmp].mode ;
-			type = (type == SF_LOOP_FORWARD ? 0 : type == SF_LOOP_BACKWARD ? 2 : type == SF_LOOP_ALTERNATING ? 1 : 32) ;
-
-			psf_binheader_writef (psf, "44", tmp, type) ;
-			psf_binheader_writef (psf, "44", psf->instrument->loops [tmp].start, psf->instrument->loops [tmp].end) ;
-			psf_binheader_writef (psf, "44", 0, psf->instrument->loops [tmp].count) ;
-			} ;
-		} ;
-
-	if (psf->headindex + 8 < psf->dataoffset)
-	{	/* Add PAD data if necessary. */
-		k = psf->dataoffset - 16 - psf->headindex ;
-		psf_binheader_writef (psf, "m4z", PAD_MARKER, k, make_size_t (k)) ;
-		} ;
-
-#endif
-
-	psf_binheader_writef (psf, "m4", data_MARKER, 0xffffffff) ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-	if (psf->error)
-		return psf->error ;
-
-	if (has_data && psf->dataoffset != psf->headindex)
-	{	printf ("Oooops : has_data && psf->dataoffset != psf->headindex\n") ;
-		return psf->error = SFE_INTERNAL ;
-		} ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (NOT (has_data))
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-	else if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* rf64_write_header */
-
-static int
-rf64_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	// rf64_write_tailer (psf) ;
-
-		psf->write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* rf64_close */
-
-static int
-rf64_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize)
-{	WAV_PRIVATE	*wpriv ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	switch (command)
-	{	case SFC_WAVEX_SET_AMBISONIC :
-			if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAVEX)
-			{	if (datasize == SF_AMBISONIC_NONE)
-					wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-				else if (datasize == SF_AMBISONIC_B_FORMAT)
-					wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-				else
-					return 0 ;
-				} ;
-			return wpriv->wavex_ambisonic ;
-
-		case SFC_WAVEX_GET_AMBISONIC :
-			return wpriv->wavex_ambisonic ;
-
-		case SFC_SET_CHANNEL_MAP_INFO :
-			wpriv->wavex_channelmask = wavex_gen_channel_mask (psf->channel_map, psf->sf.channels) ;
-			return (wpriv->wavex_channelmask != 0) ;
-
-		default :
-			break ;
-	} ;
-
-	return 0 ;
-} /* rf64_command */
-
diff --git a/libs/libsndfile/src/rx2.c b/libs/libsndfile/src/rx2.c
deleted file mode 100644
index 0a730480e7..0000000000
--- a/libs/libsndfile/src/rx2.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<stdarg.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-rx2_open	(SF_PRIVATE *psf)
-{	if (psf)
-		return SFE_UNIMPLEMENTED ;
-	return 0 ;
-} /* rx2_open */
-
-#else
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
-*/
-
-#define	CAT_MARKER	(MAKE_MARKER ('C', 'A', 'T', ' '))
-#define	GLOB_MARKER (MAKE_MARKER ('G', 'L', 'O', 'B'))
-
-#define	RECY_MARKER (MAKE_MARKER ('R', 'E', 'C', 'Y'))
-
-#define	SLCL_MARKER (MAKE_MARKER ('S', 'L', 'C', 'L'))
-#define	SLCE_MARKER (MAKE_MARKER ('S', 'L', 'C', 'E'))
-
-#define	DEVL_MARKER	(MAKE_MARKER ('D', 'E', 'V', 'L'))
-#define	TRSH_MARKER	(MAKE_MARKER ('T', 'R', 'S', 'H'))
-
-#define	EQ_MARKER	(MAKE_MARKER ('E', 'Q', ' ', ' '))
-#define	COMP_MARKER (MAKE_MARKER ('C', 'O', 'M', 'P'))
-
-#define	SINF_MARKER (MAKE_MARKER ('S', 'I', 'N', 'F'))
-#define	SDAT_MARKER (MAKE_MARKER ('S', 'D', 'A', 'T'))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-static int	rx2_close	(SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-int
-rx2_open	(SF_PRIVATE *psf)
-{	static const char *marker_type [4] =
-	{	"Original Enabled", "Enabled Hidden",
-		"Additional/PencilTool", "Disabled"
-		} ;
-
-	BUF_UNION	ubuf ;
-	int error, marker, length, glob_offset, slce_count, frames ;
-	int sdat_length = 0, slce_total = 0 ;
-	int n_channels ;
-
-
-	/* So far only doing read. */
-
-	psf_binheader_readf (psf, "Epm4", 0, &marker, &length) ;
-
-	if (marker != CAT_MARKER)
-	{	psf_log_printf (psf, "length : %d\n", length) ;
-		return -1000 ;
-		} ;
-
-	if (length != psf->filelength - 8)
-		psf_log_printf (psf, "%M : %d (should be %d)\n", marker, length, psf->filelength - 8) ;
-	else
-		psf_log_printf (psf, "%M : %d\n", marker, length) ;
-
-	/* 'REX2' marker */
-	psf_binheader_readf (psf, "m", &marker) ;
-	psf_log_printf (psf, "%M", marker) ;
-
-	/* 'HEAD' marker */
-	psf_binheader_readf (psf, "m", &marker) ;
-	psf_log_printf (psf, "%M\n", marker) ;
-
-	/* Grab 'GLOB' offset. */
-	psf_binheader_readf (psf, "E4", &glob_offset) ;
-	glob_offset += 0x14 ;	/* Add the current file offset. */
-
-	/* Jump to offset 0x30 */
-	psf_binheader_readf (psf, "p", 0x30) ;
-
-	/* Get name length */
-	length = 0 ;
-	psf_binheader_readf (psf, "1", &length) ;
-	if (length >= SIGNED_SIZEOF (ubuf.cbuf))
-	{	psf_log_printf (psf, "  Text : %d *** Error : Too sf_count_t!\n") ;
-		return -1001 ;
-		}
-
-	memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-	psf_binheader_readf (psf, "b", ubuf.cbuf, length) ;
-	psf_log_printf (psf, " Text : \"%s\"\n", ubuf.cbuf) ;
-
-	/* Jump to GLOB offset position. */
-	if (glob_offset & 1)
-		glob_offset ++ ;
-
-	psf_binheader_readf (psf, "p", glob_offset) ;
-
-	slce_count = 0 ;
-	/* GLOB */
-	while (1)
-	{	psf_binheader_readf (psf, "m", &marker) ;
-
-		if (marker != SLCE_MARKER && slce_count > 0)
-		{	psf_log_printf (psf, "   SLCE count : %d\n", slce_count) ;
-			slce_count = 0 ;
-			}
-		switch (marker)
-		{	case GLOB_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, " %M : %d\n", marker, length) ;
-					psf_binheader_readf (psf, "j", length) ;
-					break ;
-
-			case RECY_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, " %M : %d\n", marker, length) ;
-					psf_binheader_readf (psf, "j", (length+1) & 0xFFFFFFFE) ; /* ?????? */
-					break ;
-
-			case CAT_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, " %M : %d\n", marker, length) ;
-					/*-psf_binheader_readf (psf, "j", length) ;-*/
-					break ;
-
-			case DEVL_MARKER:
-					psf_binheader_readf (psf, "mE4", &marker, &length) ;
-					psf_log_printf (psf, "  DEVL%M : %d\n", marker, length) ;
-					if (length & 1)
-						length ++ ;
-					psf_binheader_readf (psf, "j", length) ;
-					break ;
-
-			case EQ_MARKER:
-			case COMP_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, "   %M : %d\n", marker, length) ;
-					/* This is weird!!!! why make this (length - 1) */
-					if (length & 1)
-						length ++ ;
-					psf_binheader_readf (psf, "j", length) ;
-					break ;
-
-			case SLCL_MARKER:
-					psf_log_printf (psf, "  %M\n    (Offset, Next Offset, Type)\n", marker) ;
-					slce_count = 0 ;
-					break ;
-
-			case SLCE_MARKER:
-					{	int len [4], indx ;
-
-						psf_binheader_readf (psf, "E4444", &len [0], &len [1], &len [2], &len [3]) ;
-
-						indx = ((len [3] & 0x0000FFFF) >> 8) & 3 ;
-
-						if (len [2] == 1)
-						{	if (indx != 1)
-								indx = 3 ;	/* 2 cases, where next slice offset = 1 -> disabled & enabled/hidden */
-
-							psf_log_printf (psf, "   %M : (%6d, ?: 0x%X, %s)\n", marker, len [1], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ;
-							}
-						else
-						{	slce_total += len [2] ;
-
-							psf_log_printf (psf, "   %M : (%6d, SLCE_next_ofs:%d, ?: 0x%X, %s)\n", marker, len [1], len [2], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ;
-							} ;
-
-						slce_count ++ ;
-						} ;
-					break ;
-
-			case SINF_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, " %M : %d\n", marker, length) ;
-
-					psf_binheader_readf (psf, "E2", &n_channels) ;
-					n_channels = (n_channels & 0x0000FF00) >> 8 ;
-					psf_log_printf (psf, "  Channels    : %d\n", n_channels) ;
-
-					psf_binheader_readf (psf, "E44", &psf->sf.samplerate, &frames) ;
-					psf->sf.frames = frames ;
-					psf_log_printf (psf, "  Sample Rate : %d\n", psf->sf.samplerate) ;
-					psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, "  ??????????? : %d\n", length) ;
-
-					psf_binheader_readf (psf, "E4", &length) ;
-					psf_log_printf (psf, "  ??????????? : %d\n", length) ;
-					break ;
-
-			case SDAT_MARKER:
-					psf_binheader_readf (psf, "E4", &length) ;
-
-				sdat_length = length ;
-
-					/* Get the current offset. */
-					psf->dataoffset = psf_binheader_readf (psf, NULL) ;
-
-					if (psf->dataoffset + length != psf->filelength)
-						psf_log_printf (psf, " %M : %d (should be %d)\n", marker, length, psf->dataoffset + psf->filelength) ;
-					else
-						psf_log_printf (psf, " %M : %d\n", marker, length) ;
-					break ;
-
-			default :
-					psf_log_printf (psf, "Unknown marker : 0x%X %M", marker, marker) ;
-					return -1003 ;
-					break ;
-			} ;
-
-		/* SDAT always last marker in file. */
-		if (marker == SDAT_MARKER)
-			break ;
-		} ;
-
-	puts (psf->parselog.buf) ;
-	puts ("-----------------------------------") ;
-
-	printf ("SDAT length  : %d\n", sdat_length) ;
-	printf ("SLCE count   : %d\n", slce_count) ;
-
-	/* Hack for zero slice count. */
-	if (slce_count == 0 && slce_total == 1)
-		slce_total = frames ;
-
-	printf ("SLCE samples : %d\n", slce_total) ;
-
-	/* Two bytes per sample. */
-	printf ("Comp Ratio   : %f:1\n", (2.0 * slce_total * n_channels) / sdat_length) ;
-
-	puts (" ") ;
-
-	psf->parselog.buf [0] = 0 ;
-
-	/* OK, have the header although not too sure what it all means. */
-
-	psf->endian = SF_ENDIAN_BIG ;
-
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
- 	if (psf_fseek (psf, psf->dataoffset, SEEK_SET))
-		return SFE_BAD_SEEK ;
-
-	psf->sf.format = (SF_FORMAT_REX2 | SF_FORMAT_DWVW_12) ;
-
-	psf->sf.channels	= 1 ;
-	psf->bytewidth		= 2 ;
-	psf->blockwidth		= psf->sf.channels * psf->bytewidth ;
-
-	if ((error = dwvw_init (psf, 16)))
-		return error ;
-
-	psf->container_close = rx2_close ;
-
-	if (! psf->sf.frames && psf->blockwidth)
-		psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-	/* All done. */
-
-	return 0 ;
-} /* rx2_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-rx2_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE)
-	{	/*  Now we know for certain the length of the file we can re-write
-		**	correct values for the FORM, 8SVX and BODY chunks.
-		*/
-
-		} ;
-
-	return 0 ;
-} /* rx2_close */
-
-#endif
diff --git a/libs/libsndfile/src/sd2.c b/libs/libsndfile/src/sd2.c
deleted file mode 100644
index 6be150cd57..0000000000
--- a/libs/libsndfile/src/sd2.c
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004 Paavo Jumppanen
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** The sd2 support implemented in this file was partially sponsored
-** (financially) by Paavo Jumppanen.
-*/
-
-/*
-** Documentation on the Mac resource fork was obtained here :
-** http://developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-99.html
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
- * Markers.
-*/
-
-#define	Sd2f_MARKER			MAKE_MARKER ('S', 'd', '2', 'f')
-#define	Sd2a_MARKER			MAKE_MARKER ('S', 'd', '2', 'a')
-#define	ALCH_MARKER			MAKE_MARKER ('A', 'L', 'C', 'H')
-#define lsf1_MARKER			MAKE_MARKER ('l', 's', 'f', '1')
-
-#define STR_MARKER			MAKE_MARKER ('S', 'T', 'R', ' ')
-#define sdML_MARKER			MAKE_MARKER ('s', 'd', 'M', 'L')
-
-enum
-{	RSRC_STR = 111,
-	RSRC_BIN
-} ;
-
-typedef struct
-{	unsigned char * rsrc_data ;
-	int rsrc_len ;
-	int need_to_free_rsrc_data ;
-
-	int data_offset, data_length ;
-	int map_offset, map_length ;
-
-	int type_count, type_offset ;
-	int item_offset ;
-
-	int str_index, str_count ;
-
-	int string_offset ;
-
-	/* All the above just to get these three. */
-	int sample_size, sample_rate, channels ;
-} SD2_RSRC ;
-
-typedef struct
-{	int type ;
-	int id ;
-	char name [32] ;
-	char value [32] ;
-	int value_len ;
-} STR_RSRC ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static int sd2_close	(SF_PRIVATE *psf) ;
-
-static int sd2_parse_rsrc_fork (SF_PRIVATE *psf) ;
-static int parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc) ;
-
-static int sd2_write_rsrc_fork (SF_PRIVATE *psf, int calc_length) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-int
-sd2_open (SF_PRIVATE *psf)
-{	int subformat, error = 0, valid ;
-
-	/* SD2 is always big endian. */
-	psf->endian = SF_ENDIAN_BIG ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->rsrclength > 0))
-	{	psf_use_rsrc (psf, SF_TRUE) ;
-		valid = psf_file_valid (psf) ;
-		psf_use_rsrc (psf, SF_FALSE) ;
-		if (! valid)
-		{	psf_log_printf (psf, "sd2_open : psf->rsrc.filedes < 0\n") ;
-			return SFE_SD2_BAD_RSRC ;
-			} ;
-
-		error = sd2_parse_rsrc_fork (psf) ;
-
-		if (error)
-			goto error_cleanup ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SD2)
-	{	error = SFE_BAD_OPEN_FORMAT ;
-		goto error_cleanup ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-	psf->dataoffset = 0 ;
-
-	/* Only open and write the resource in RDWR mode is its current length is zero. */
-	if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->rsrclength == 0))
-	{	psf->rsrc.mode = psf->file.mode ;
-		psf_open_rsrc (psf) ;
-
-		error = sd2_write_rsrc_fork (psf, SF_FALSE) ;
-
-		if (error)
-			goto error_cleanup ;
-
-		/* Not needed. */
-		psf->write_header = NULL ;
-		} ;
-
-	psf->container_close = sd2_close ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_S8 :	/* 8-bit linear PCM. */
-		case SF_FORMAT_PCM_16 :	/* 16-bit linear PCM. */
-		case SF_FORMAT_PCM_24 :	/* 24-bit linear PCM */
-		case SF_FORMAT_PCM_32 :	/* 32-bit linear PCM */
-				error = pcm_init (psf) ;
-				break ;
-
-		default :
-				error = SFE_UNIMPLEMENTED ;
-				break ;
-		} ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-error_cleanup:
-
-	/* Close the resource fork regardless. We won't need it again. */
-	psf_close_rsrc (psf) ;
-
-	return error ;
-} /* sd2_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sd2_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE)
-	{	/*  Now we know for certain the audio_length of the file we can re-write
-		**	correct values for the FORM, 8SVX and BODY chunks.
-		*/
-
-		} ;
-
-	return 0 ;
-} /* sd2_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static inline void
-write_char (unsigned char * data, int offset, char value)
-{	data [offset] = value ;
-} /* write_char */
-
-static inline void
-write_short (unsigned char * data, int offset, short value)
-{	data [offset] = value >> 8 ;
-	data [offset + 1] = value ;
-} /* write_char */
-
-static inline void
-write_int (unsigned char * data, int offset, int value)
-{	data [offset] = value >> 24 ;
-	data [offset + 1] = value >> 16 ;
-	data [offset + 2] = value >> 8 ;
-	data [offset + 3] = value ;
-} /* write_int */
-
-static inline void
-write_marker (unsigned char * data, int offset, int value)
-{
-	if (CPU_IS_BIG_ENDIAN)
-	{	data [offset] = value >> 24 ;
-		data [offset + 1] = value >> 16 ;
-		data [offset + 2] = value >> 8 ;
-		data [offset + 3] = value ;
-		}
-	else
-	{	data [offset] = value ;
-		data [offset + 1] = value >> 8 ;
-		data [offset + 2] = value >> 16 ;
-		data [offset + 3] = value >> 24 ;
-		} ;
-} /* write_marker */
-
-static void
-write_str (unsigned char * data, int offset, const char * buffer, int buffer_len)
-{	memcpy (data + offset, buffer, buffer_len) ;
-} /* write_str */
-
-static int
-sd2_write_rsrc_fork (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	SD2_RSRC rsrc ;
-	STR_RSRC str_rsrc [] =
-	{	{ RSRC_STR, 1000, "_sample-size", "", 0 },
-		{ RSRC_STR, 1001, "_sample-rate", "", 0 },
-		{ RSRC_STR, 1002, "_channels", "", 0 },
-		{ RSRC_BIN, 1000, "_Markers", "", 8 }
-		} ;
-
-	int k, str_offset, data_offset, next_str ;
-
-	psf_use_rsrc (psf, SF_TRUE) ;
-
-	memset (&rsrc, 0, sizeof (rsrc)) ;
-
-	rsrc.sample_rate = psf->sf.samplerate ;
-	rsrc.sample_size = psf->bytewidth ;
-	rsrc.channels = psf->sf.channels ;
-
-	rsrc.rsrc_data = psf->header ;
-	rsrc.rsrc_len = sizeof (psf->header) ;
-	memset (rsrc.rsrc_data, 0xea, rsrc.rsrc_len) ;
-
-	snprintf (str_rsrc [0].value, sizeof (str_rsrc [0].value), "_%d", rsrc.sample_size) ;
-	snprintf (str_rsrc [1].value, sizeof (str_rsrc [1].value), "_%d.000000", rsrc.sample_rate) ;
-	snprintf (str_rsrc [2].value, sizeof (str_rsrc [2].value), "_%d", rsrc.channels) ;
-
-	for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-	{	if (str_rsrc [k].value_len == 0)
-		{	str_rsrc [k].value_len = strlen (str_rsrc [k].value) ;
-			str_rsrc [k].value [0] = str_rsrc [k].value_len - 1 ;
-			} ;
-
-		/* Turn name string into a pascal string. */
-		str_rsrc [k].name [0] = strlen (str_rsrc [k].name) - 1 ;
-		} ;
-
-	rsrc.data_offset = 0x100 ;
-
-	/*
-	** Calculate data length :
-	**		length of strings, plus the length of the sdML chunk.
-	*/
-	rsrc.data_length = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-		rsrc.data_length += str_rsrc [k].value_len + 4 ;
-
-	rsrc.map_offset = rsrc.data_offset + rsrc.data_length ;
-
-	/* Very start of resource fork. */
-	write_int (rsrc.rsrc_data, 0, rsrc.data_offset) ;
-	write_int (rsrc.rsrc_data, 4, rsrc.map_offset) ;
-	write_int (rsrc.rsrc_data, 8, rsrc.data_length) ;
-
-	write_char (rsrc.rsrc_data, 0x30, strlen (psf->file.name.c)) ;
-	write_str (rsrc.rsrc_data, 0x31, psf->file.name.c, strlen (psf->file.name.c)) ;
-
-	write_short (rsrc.rsrc_data, 0x50, 0) ;
-	write_marker (rsrc.rsrc_data, 0x52, Sd2f_MARKER) ;
-	write_marker (rsrc.rsrc_data, 0x56, lsf1_MARKER) ;
-
-	/* Very start of resource map. */
-	write_int (rsrc.rsrc_data, rsrc.map_offset + 0, rsrc.data_offset) ;
-	write_int (rsrc.rsrc_data, rsrc.map_offset + 4, rsrc.map_offset) ;
-	write_int (rsrc.rsrc_data, rsrc.map_offset + 8, rsrc.data_length) ;
-
-	/* These I don't currently understand. */
-	if (1)
-	{	write_char (rsrc.rsrc_data, rsrc.map_offset+ 16, 1) ;
-		/* Next resource map. */
-		write_int (rsrc.rsrc_data, rsrc.map_offset + 17, 0x12345678) ;
-		/* File ref number. */
-		write_short (rsrc.rsrc_data, rsrc.map_offset + 21, 0xabcd) ;
-		/* Fork attributes. */
-		write_short (rsrc.rsrc_data, rsrc.map_offset + 23, 0) ;
-		} ;
-
-	/* Resource type offset. */
-	rsrc.type_offset = rsrc.map_offset + 30 ;
-	write_short (rsrc.rsrc_data, rsrc.map_offset + 24, rsrc.type_offset - rsrc.map_offset - 2) ;
-
-	/* Type index max. */
-	rsrc.type_count = 2 ;
-	write_short (rsrc.rsrc_data, rsrc.map_offset + 28, rsrc.type_count - 1) ;
-
-	rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ;
-
-	rsrc.str_count = ARRAY_LEN (str_rsrc) ;
-	rsrc.string_offset = rsrc.item_offset + (rsrc.str_count + 1) * 12 - rsrc.map_offset ;
-	write_short (rsrc.rsrc_data, rsrc.map_offset + 26, rsrc.string_offset) ;
-
-	/* Write 'STR ' resource type. */
-	rsrc.str_count = 3 ;
-	write_marker (rsrc.rsrc_data, rsrc.type_offset, STR_MARKER) ;
-	write_short (rsrc.rsrc_data, rsrc.type_offset + 4, rsrc.str_count - 1) ;
-	write_short (rsrc.rsrc_data, rsrc.type_offset + 6, 0x12) ;
-
-	/* Write 'sdML' resource type. */
-	write_marker (rsrc.rsrc_data, rsrc.type_offset + 8, sdML_MARKER) ;
-	write_short (rsrc.rsrc_data, rsrc.type_offset + 12, 0) ;
-	write_short (rsrc.rsrc_data, rsrc.type_offset + 14, 0x36) ;
-
-	str_offset = rsrc.map_offset + rsrc.string_offset ;
-	next_str = 0 ;
-	data_offset = rsrc.data_offset ;
-	for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-	{	write_str (rsrc.rsrc_data, str_offset, str_rsrc [k].name, strlen (str_rsrc [k].name)) ;
-
-		write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12, str_rsrc [k].id) ;
-		write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 2, next_str) ;
-
-		str_offset += strlen (str_rsrc [k].name) ;
-		next_str += strlen (str_rsrc [k].name) ;
-
-		write_int (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 4, data_offset - rsrc.data_offset) ;
-
-		write_int (rsrc.rsrc_data, data_offset, str_rsrc [k].value_len) ;
-		write_str (rsrc.rsrc_data, data_offset + 4, str_rsrc [k].value, str_rsrc [k].value_len) ;
-		data_offset += 4 + str_rsrc [k].value_len ;
-		} ;
-
-	/* Finally, calculate and set map length. */
-	rsrc.map_length = str_offset - rsrc.map_offset ;
-	write_int (rsrc.rsrc_data, 12, rsrc.map_length) ;
-	write_int (rsrc.rsrc_data, rsrc.map_offset + 12, rsrc.map_length) ;
-
-	rsrc.rsrc_len = rsrc.map_offset + rsrc.map_length ;
-
-	psf_fwrite (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ;
-
-	psf_use_rsrc (psf, SF_FALSE) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	return 0 ;
-} /* sd2_write_rsrc_fork */
-
-/*------------------------------------------------------------------------------
-*/
-
-static inline int
-read_rsrc_char (const SD2_RSRC *prsrc, int offset)
-{	const unsigned char * data = prsrc->rsrc_data ;
-	if (offset < 0 || offset >= prsrc->rsrc_len)
-		return 0 ;
-	return data [offset] ;
-} /* read_rsrc_char */
-
-static inline int
-read_rsrc_short (const SD2_RSRC *prsrc, int offset)
-{	const unsigned char * data = prsrc->rsrc_data ;
-	if (offset < 0 || offset + 1 >= prsrc->rsrc_len)
-		return 0 ;
-	return (data [offset] << 8) + data [offset + 1] ;
-} /* read_rsrc_short */
-
-static inline int
-read_rsrc_int (const SD2_RSRC *prsrc, int offset)
-{	const unsigned char * data = prsrc->rsrc_data ;
-	if (offset < 0 || offset + 3 >= prsrc->rsrc_len)
-		return 0 ;
-	return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ;
-} /* read_rsrc_int */
-
-static inline int
-read_rsrc_marker (const SD2_RSRC *prsrc, int offset)
-{	const unsigned char * data = prsrc->rsrc_data ;
-
-	if (offset < 0 || offset + 3 >= prsrc->rsrc_len)
-		return 0 ;
-
-	if (CPU_IS_BIG_ENDIAN)
-		return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ;
-	if (CPU_IS_LITTLE_ENDIAN)
-		return data [offset] + (data [offset + 1] << 8) + (data [offset + 2] << 16) + (data [offset + 3] << 24) ;
-
-	return 0 ;
-} /* read_rsrc_marker */
-
-static void
-read_rsrc_str (const SD2_RSRC *prsrc, int offset, char * buffer, int buffer_len)
-{	const unsigned char * data = prsrc->rsrc_data ;
-	int k ;
-
-	memset (buffer, 0, buffer_len) ;
-
-	if (offset < 0 || offset + buffer_len >= prsrc->rsrc_len)
-		return ;
-
-	for (k = 0 ; k < buffer_len - 1 ; k++)
-	{	if (psf_isprint (data [offset + k]) == 0)
-			return ;
-		buffer [k] = data [offset + k] ;
-		} ;
-	return ;
-} /* read_rsrc_str */
-
-static int
-sd2_parse_rsrc_fork (SF_PRIVATE *psf)
-{	SD2_RSRC rsrc ;
-	int k, marker, error = 0 ;
-
-	psf_use_rsrc (psf, SF_TRUE) ;
-
-	memset (&rsrc, 0, sizeof (rsrc)) ;
-
-	rsrc.rsrc_len = psf_get_filelen (psf) ;
-	psf_log_printf (psf, "Resource length : %d (0x%04X)\n", rsrc.rsrc_len, rsrc.rsrc_len) ;
-
-	if (rsrc.rsrc_len > SIGNED_SIZEOF (psf->header))
-	{	rsrc.rsrc_data = calloc (1, rsrc.rsrc_len) ;
-		rsrc.need_to_free_rsrc_data = SF_TRUE ;
-		}
-	else
-		rsrc.rsrc_data = psf->header ;
-
-	/* Read in the whole lot. */
-	psf_fread (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ;
-
-	/* Reset the header storage because we have changed to the rsrcdes. */
-	psf->headindex = psf->headend = rsrc.rsrc_len ;
-
-	rsrc.data_offset = read_rsrc_int (&rsrc, 0) ;
-	rsrc.map_offset = read_rsrc_int (&rsrc, 4) ;
-	rsrc.data_length = read_rsrc_int (&rsrc, 8) ;
-	rsrc.map_length = read_rsrc_int (&rsrc, 12) ;
-
-	if (rsrc.data_offset == 0x51607 && rsrc.map_offset == 0x20000)
-	{	psf_log_printf (psf, "Trying offset of 0x52 bytes.\n") ;
-		rsrc.data_offset = read_rsrc_int (&rsrc, 0x52 + 0) + 0x52 ;
-		rsrc.map_offset = read_rsrc_int (&rsrc, 0x52 + 4) + 0x52 ;
-		rsrc.data_length = read_rsrc_int (&rsrc, 0x52 + 8) ;
-		rsrc.map_length = read_rsrc_int (&rsrc, 0x52 + 12) ;
-		} ;
-
-	psf_log_printf (psf, "  data offset : 0x%04X\n  map  offset : 0x%04X\n"
-				"  data length : 0x%04X\n  map  length : 0x%04X\n",
-				rsrc.data_offset, rsrc.map_offset, rsrc.data_length, rsrc.map_length) ;
-
-	if (rsrc.data_offset > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Error : rsrc.data_offset (%d, 0x%x) > len\n", rsrc.data_offset, rsrc.data_offset) ;
-		error = SFE_SD2_BAD_DATA_OFFSET ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	if (rsrc.map_offset > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Error : rsrc.map_offset > len\n") ;
-		error = SFE_SD2_BAD_MAP_OFFSET ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	if (rsrc.data_length > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Error : rsrc.data_length > len\n") ;
-		error = SFE_SD2_BAD_DATA_LENGTH ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	if (rsrc.map_length > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Error : rsrc.map_length > len\n") ;
-		error = SFE_SD2_BAD_MAP_LENGTH ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	if (rsrc.data_offset + rsrc.data_length != rsrc.map_offset || rsrc.map_offset + rsrc.map_length != rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Error : This does not look like a MacOSX resource fork.\n") ;
-		error = SFE_SD2_BAD_RSRC ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	if (rsrc.map_offset + 28 >= rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Bad map offset (%d + 28 > %d).\n", rsrc.map_offset, rsrc.rsrc_len) ;
-		error = SFE_SD2_BAD_RSRC ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	rsrc.string_offset = rsrc.map_offset + read_rsrc_short (&rsrc, rsrc.map_offset + 26) ;
-	if (rsrc.string_offset > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Bad string offset (%d).\n", rsrc.string_offset) ;
-		error = SFE_SD2_BAD_RSRC ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	rsrc.type_offset = rsrc.map_offset + 30 ;
-
-	rsrc.type_count = read_rsrc_short (&rsrc, rsrc.map_offset + 28) + 1 ;
-	if (rsrc.type_count < 1)
-	{	psf_log_printf (psf, "Bad type count.\n") ;
-		error = SFE_SD2_BAD_RSRC ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ;
-	if (rsrc.item_offset < 0 || rsrc.item_offset > rsrc.rsrc_len)
-	{	psf_log_printf (psf, "Bad item offset (%d).\n", rsrc.item_offset) ;
-		error = SFE_SD2_BAD_RSRC ;
-		goto parse_rsrc_fork_cleanup ;
-		} ;
-
-	rsrc.str_index = -1 ;
-	for (k = 0 ; k < rsrc.type_count ; k ++)
-	{	marker = read_rsrc_marker (&rsrc, rsrc.type_offset + k * 8) ;
-
-		if (marker == STR_MARKER)
-		{	rsrc.str_index = k ;
-			rsrc.str_count = read_rsrc_short (&rsrc, rsrc.type_offset + k * 8 + 4) + 1 ;
-			error = parse_str_rsrc (psf, &rsrc) ;
-			goto parse_rsrc_fork_cleanup ;
-			} ;
-		} ;
-
-	psf_log_printf (psf, "No 'STR ' resource.\n") ;
-	error = SFE_SD2_BAD_RSRC ;
-
-parse_rsrc_fork_cleanup :
-
-	psf_use_rsrc (psf, SF_FALSE) ;
-
-	if (rsrc.need_to_free_rsrc_data)
-		free (rsrc.rsrc_data) ;
-
-	return error ;
-} /* sd2_parse_rsrc_fork */
-
-static int
-parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc)
-{	char name [32], value [32] ;
-	int k, str_offset, rsrc_id, data_offset = 0, data_len = 0 ;
-
-	psf_log_printf (psf, "Finding parameters :\n") ;
-
-	str_offset = rsrc->string_offset ;
-	psf_log_printf (psf, "  Offset    RsrcId    dlen    slen    Value\n") ;
-
-	for (k = 0 ; data_offset + data_len < rsrc->rsrc_len ; k++)
-	{	int slen ;
-
-		slen = read_rsrc_char (rsrc, str_offset) ;
-		read_rsrc_str (rsrc, str_offset + 1, name, SF_MIN (SIGNED_SIZEOF (name), slen + 1)) ;
-		str_offset += slen + 1 ;
-
-		rsrc_id = read_rsrc_short (rsrc, rsrc->item_offset + k * 12) ;
-
-		data_offset = rsrc->data_offset + read_rsrc_int (rsrc, rsrc->item_offset + k * 12 + 4) ;
-		if (data_offset < 0 || data_offset > rsrc->rsrc_len)
-		{	psf_log_printf (psf, "Exiting parser on data offset of %d.\n", data_offset) ;
-			break ;
-			} ;
-
-		data_len = read_rsrc_int (rsrc, data_offset) ;
-		if (data_len < 0 || data_len > rsrc->rsrc_len)
-		{	psf_log_printf (psf, "Exiting parser on data length of %d.\n", data_len) ;
-			break ;
-			} ;
-
-		slen = read_rsrc_char (rsrc, data_offset + 4) ;
-		read_rsrc_str (rsrc, data_offset + 5, value, SF_MIN (SIGNED_SIZEOF (value), slen + 1)) ;
-
-		psf_log_printf (psf, "  0x%04x     %4d     %4d     %3d    '%s'\n", data_offset, rsrc_id, data_len, slen, value) ;
-
-		if (rsrc_id == 1000 && rsrc->sample_size == 0)
-			rsrc->sample_size = strtol (value, NULL, 10) ;
-		else if (rsrc_id == 1001 && rsrc->sample_rate == 0)
-			rsrc->sample_rate = strtol (value, NULL, 10) ;
-		else if (rsrc_id == 1002 && rsrc->channels == 0)
-			rsrc->channels = strtol (value, NULL, 10) ;
-		} ;
-
-	psf_log_printf (psf, "Found Parameters :\n") ;
-	psf_log_printf (psf, "  sample-size : %d\n", rsrc->sample_size) ;
-	psf_log_printf (psf, "  sample-rate : %d\n", rsrc->sample_rate) ;
-	psf_log_printf (psf, "  channels    : %d\n", rsrc->channels) ;
-
-	if (rsrc->sample_rate <= 4 && rsrc->sample_size > 4)
-	{	int temp ;
-
-		psf_log_printf (psf, "Geez!! Looks like sample rate and sample size got switched.\nCorrecting this screw up.\n") ;
-		temp = rsrc->sample_rate ;
-		rsrc->sample_rate = rsrc->sample_size ;
-		rsrc->sample_size = temp ;
-		} ;
-
-	if (rsrc->sample_rate < 0)
-	{	psf_log_printf (psf, "Bad sample rate (%d)\n", rsrc->sample_rate) ;
-		return SFE_SD2_BAD_RSRC ;
-		} ;
-
-	if (rsrc->channels < 0)
-	{	psf_log_printf (psf, "Bad channel count (%d)\n", rsrc->channels) ;
-		return SFE_SD2_BAD_RSRC ;
-		} ;
-
-	psf->sf.samplerate = rsrc->sample_rate ;
-	psf->sf.channels = rsrc->channels ;
-	psf->bytewidth = rsrc->sample_size ;
-
-	switch (rsrc->sample_size)
-	{	case 1 :
-			psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_S8 ;
-			break ;
-
-		case 2 :
-			psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_16 ;
-			break ;
-
-		case 3 :
-			psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_24 ;
-			break ;
-
-		case 4 :
-			psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_32 ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "Bad sample size (%d)\n", rsrc->sample_size) ;
-			return SFE_SD2_BAD_SAMPLE_SIZE ;
-		} ;
-
-	psf_log_printf (psf, "ok\n") ;
-
-	return 0 ;
-} /* parse_str_rsrc */
-
diff --git a/libs/libsndfile/src/sds.c b/libs/libsndfile/src/sds.c
deleted file mode 100644
index 7dd1d9d27e..0000000000
--- a/libs/libsndfile/src/sds.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*------------------------------------------------------------------------------
-*/
-
-#define	SDS_DATA_OFFSET				0x15
-#define SDS_BLOCK_SIZE				127
-
-#define SDS_AUDIO_BYTES_PER_BLOCK	120
-
-#define SDS_3BYTE_TO_INT_DECODE(x) (((x) & 0x7F) | (((x) & 0x7F00) >> 1) | (((x) & 0x7F0000) >> 2))
-#define SDS_INT_TO_3BYTE_ENCODE(x) (((x) & 0x7F) | (((x) << 1) & 0x7F00) | (((x) << 2) & 0x7F0000))
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef struct tag_SDS_PRIVATE
-{	int bitwidth, frames ;
-	int	samplesperblock, total_blocks ;
-
-	int (*reader) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
-	int (*writer) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
-
-	int read_block, read_count ;
-	unsigned char read_data [SDS_BLOCK_SIZE] ;
-	int	read_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */
-
-	int write_block, write_count ;
-	int total_written ;
-	unsigned char write_data [SDS_BLOCK_SIZE] ;
-	int	write_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */
-} SDS_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	sds_close	(SF_PRIVATE *psf) ;
-
-static int	sds_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int	sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static sf_count_t sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t sds_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int sds_byterate (SF_PRIVATE * psf) ;
-
-static int sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *iptr, int readcount) ;
-
-static int sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *iptr, int writecount) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-sds_open	(SF_PRIVATE *psf)
-{	SDS_PRIVATE	*psds ;
-	int			error = 0 ;
-
-	/* Hmmmm, need this here to pass update_header_test. */
-	psf->sf.frames = 0 ;
-
-	if (! (psds = calloc (1, sizeof (SDS_PRIVATE))))
-		return SFE_MALLOC_FAILED ;
-	psf->codec_data = psds ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = sds_read_header (psf, psds)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SDS)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (sds_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = sds_write_header ;
-
-		psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
-		} ;
-
-	if ((error = sds_init (psf, psds)) != 0)
-		return error ;
-
-	psf->container_close = sds_close ;
-	psf->seek = sds_seek ;
-	psf->byterate = sds_byterate ;
-
-	psf->blockwidth = 0 ;
-
-	return error ;
-} /* sds_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sds_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	SDS_PRIVATE *psds ;
-
-		if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
-		{	psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
-			return SFE_INTERNAL ;
-			} ;
-
-		if (psds->write_count > 0)
-		{	memset (&(psds->write_data [psds->write_count]), 0, (psds->samplesperblock - psds->write_count) * sizeof (int)) ;
-			psds->writer (psf, psds) ;
-			} ;
-
-		sds_write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* sds_close */
-
-static int
-sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{
-	if (psds->bitwidth < 8 || psds->bitwidth > 28)
-		return (psf->error = SFE_SDS_BAD_BIT_WIDTH) ;
-
-	if (psds->bitwidth < 14)
-	{	psds->reader = sds_2byte_read ;
-		psds->writer = sds_2byte_write ;
-		psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 2 ;
-		}
-	else if (psds->bitwidth < 21)
-	{	psds->reader = sds_3byte_read ;
-		psds->writer = sds_3byte_write ;
-		psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 3 ;
-		}
-	else
-	{	psds->reader = sds_4byte_read ;
-		psds->writer = sds_4byte_write ;
-		psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 4 ;
-		} ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	psf->read_short		= sds_read_s ;
-		psf->read_int		= sds_read_i ;
-		psf->read_float		= sds_read_f ;
-		psf->read_double	= sds_read_d ;
-
-		/* Read first block. */
-		psds->reader (psf, psds) ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->write_short	= sds_write_s ;
-		psf->write_int		= sds_write_i ;
-		psf->write_float	= sds_write_f ;
-		psf->write_double	= sds_write_d ;
-		} ;
-
-	return 0 ;
-} /* sds_init */
-
-static int
-sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char	channel, bitwidth, loop_type, byte ;
-	unsigned short	sample_no, marker ;
-	unsigned int	samp_period, data_length, sustain_loop_start, sustain_loop_end ;
-	int		bytesread, blockcount ;
-
-	/* Set position to start of file to begin reading header. */
-	bytesread = psf_binheader_readf (psf, "pE211", 0, &marker, &channel, &byte) ;
-
-	if (marker != 0xF07E || byte != 0x01)
-		return SFE_SDS_NOT_SDS ;
-
-	bytesread += psf_binheader_readf (psf, "e2", &sample_no) ;
-	sample_no = SDS_3BYTE_TO_INT_DECODE (sample_no) ;
-
-	psf_log_printf (psf, "Midi Sample Dump Standard (.sds)\nF07E\n"
-						" Midi Channel  : %d\n Sample Number : %d\n",
-						channel, sample_no) ;
-
-	bytesread += psf_binheader_readf (psf, "e13", &bitwidth, &samp_period) ;
-
-	samp_period = SDS_3BYTE_TO_INT_DECODE (samp_period) ;
-
-	psds->bitwidth = bitwidth ;
-
-	if (psds->bitwidth > 1)
-		psf_log_printf (psf, " Bit Width     : %d\n", psds->bitwidth) ;
-	else
-	{	psf_log_printf (psf, " Bit Width     : %d (should be > 1)\n", psds->bitwidth) ;
-		return SFE_SDS_BAD_BIT_WIDTH ;
-		} ;
-
-	if (samp_period > 0)
-	{	psf->sf.samplerate = 1000000000 / samp_period ;
-
-		psf_log_printf (psf, " Sample Period : %d\n"
-							" Sample Rate   : %d\n",
-							samp_period, psf->sf.samplerate) ;
-		}
-	else
-	{	psf->sf.samplerate = 16000 ;
-
-		psf_log_printf (psf, " Sample Period : %d (should be > 0)\n"
-							" Sample Rate   : %d (guessed)\n",
-							samp_period, psf->sf.samplerate) ;
-		} ;
-
-	bytesread += psf_binheader_readf (psf, "e3331", &data_length, &sustain_loop_start, &sustain_loop_end, &loop_type) ;
-
-	data_length = SDS_3BYTE_TO_INT_DECODE (data_length) ;
-
-	psf->sf.frames = psds->frames = data_length ;
-
-	sustain_loop_start = SDS_3BYTE_TO_INT_DECODE (sustain_loop_start) ;
-	sustain_loop_end = SDS_3BYTE_TO_INT_DECODE (sustain_loop_end) ;
-
-	psf_log_printf (psf, 	" Sustain Loop\n"
-							"     Start     : %d\n"
-							"     End       : %d\n"
-							"     Loop Type : %d\n",
-			sustain_loop_start, sustain_loop_end, loop_type) ;
-
-	psf->dataoffset = SDS_DATA_OFFSET ;
-	psf->datalength = psf->filelength - psf->dataoffset ;
-
-	bytesread += psf_binheader_readf (psf, "1", &byte) ;
-	if (byte != 0xF7)
-		psf_log_printf (psf, "bad end : %X\n", byte & 0xFF) ;
-
-	for (blockcount = 0 ; bytesread < psf->filelength ; blockcount++)
-	{
-		bytesread += psf_fread (&marker, 1, 2, psf) ;
-
-		if (marker == 0)
-			break ;
-
-		psf_fseek (psf, SDS_BLOCK_SIZE - 2, SEEK_CUR) ;
-		bytesread += SDS_BLOCK_SIZE - 2 ;
-		} ;
-
-	psf_log_printf (psf, "\nBlocks         : %d\n", blockcount) ;
-	psds->total_blocks = blockcount ;
-
-	psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / ((psds->bitwidth + 6) / 7) ;
-	psf_log_printf (psf, "Samples/Block  : %d\n", psds->samplesperblock) ;
-
-	psf_log_printf (psf, "Frames         : %d\n", blockcount * psds->samplesperblock) ;
-
-	/* Always Mono */
-	psf->sf.channels = 1 ;
-	psf->sf.sections = 1 ;
-
-	/*
-	** Lie to the user about PCM bit width. Always round up to
-	** the next multiple of 8.
-	*/
-	switch ((psds->bitwidth + 7) / 8)
-	{	case 1 :
-			psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_S8 ;
-			break ;
-
-		case 2 :
-			psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_16 ;
-			break ;
-
-		case 3 :
-			psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_24 ;
-			break ;
-
-		case 4 :
-			psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_32 ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "*** Weird byte width (%d)\n", (psds->bitwidth + 7) / 8) ;
-			return SFE_SDS_BAD_BIT_WIDTH ;
-		} ;
-
-	psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
-
-	return 0 ;
-} /* sds_read_header */
-
-static int
-sds_write_header (SF_PRIVATE *psf, int calc_length)
-{	SDS_PRIVATE *psds ;
-	sf_count_t	current ;
-	int samp_period, data_length, sustain_loop_start, sustain_loop_end ;
-	unsigned char loop_type = 0 ;
-
-	if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
-	{	psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
-		return SFE_INTERNAL ;
-		} ;
-
-	if (psf->pipeoffset > 0)
-		return 0 ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-		psf->sf.frames = psds->total_written ;
-
-	if (psds->write_count > 0)
-	{	int current_count = psds->write_count ;
-		int current_block = psds->write_block ;
-
-		psds->writer (psf, psds) ;
-
-		psf_fseek (psf, -1 * SDS_BLOCK_SIZE, SEEK_CUR) ;
-
-		psds->write_count = current_count ;
-		psds->write_block = current_block ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	if (psf->is_pipe == SF_FALSE)
-		psf_fseek (psf, 0, SEEK_SET) ;
-
-	psf_binheader_writef (psf, "E211", 0xF07E, 0, 1) ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-				psds->bitwidth = 8 ;
-				break ;
-		case SF_FORMAT_PCM_16 :
-				psds->bitwidth = 16 ;
-				break ;
-		case SF_FORMAT_PCM_24 :
-				psds->bitwidth = 24 ;
-				break ;
-		default:
-			return SFE_SDS_BAD_BIT_WIDTH ;
-		} ;
-
-	samp_period = SDS_INT_TO_3BYTE_ENCODE (1000000000 / psf->sf.samplerate) ;
-
-	psf_binheader_writef (psf, "e213", 0, psds->bitwidth, samp_period) ;
-
-	data_length			= SDS_INT_TO_3BYTE_ENCODE (psds->total_written) ;
-	sustain_loop_start	= SDS_INT_TO_3BYTE_ENCODE (0) ;
-	sustain_loop_end	= SDS_INT_TO_3BYTE_ENCODE (0) ;
-
-	psf_binheader_writef (psf, "e33311", data_length, sustain_loop_start, sustain_loop_end, loop_type, 0xF7) ;
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-	psf->datalength = psds->write_block * SDS_BLOCK_SIZE ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* sds_write_header */
-
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->read_block ++ ;
-	psds->read_count = 0 ;
-
-	if (psds->read_block * psds->samplesperblock > psds->frames)
-	{	memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	if (psds->read_data [0] != 0xF0)
-	{	printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-		} ;
-
-	checksum = psds->read_data [1] ;
-	if (checksum != 0x7E)
-	{	printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-		}
-
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->read_data [k] ;
-
-	checksum &= 0x7F ;
-
-	if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-	{	psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-		} ;
-
-	ucptr = psds->read_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 2)
-	{	sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) ;
-		psds->read_samples [k / 2] = (int) (sample - 0x80000000) ;
-		} ;
-
-	return 1 ;
-} /* sds_2byte_read */
-
-static int
-sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->read_block ++ ;
-	psds->read_count = 0 ;
-
-	if (psds->read_block * psds->samplesperblock > psds->frames)
-	{	memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	if (psds->read_data [0] != 0xF0)
-	{	printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-		} ;
-
-	checksum = psds->read_data [1] ;
-	if (checksum != 0x7E)
-	{	printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-		}
-
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->read_data [k] ;
-
-	checksum &= 0x7F ;
-
-	if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-	{	psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-		} ;
-
-	ucptr = psds->read_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 3)
-	{	sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) ;
-		psds->read_samples [k / 3] = (int) (sample - 0x80000000) ;
-		} ;
-
-	return 1 ;
-} /* sds_3byte_read */
-
-static int
-sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->read_block ++ ;
-	psds->read_count = 0 ;
-
-	if (psds->read_block * psds->samplesperblock > psds->frames)
-	{	memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-		return 1 ;
-		} ;
-
-	if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	if (psds->read_data [0] != 0xF0)
-	{	printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-		} ;
-
-	checksum = psds->read_data [1] ;
-	if (checksum != 0x7E)
-	{	printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-		}
-
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->read_data [k] ;
-
-	checksum &= 0x7F ;
-
-	if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-	{	psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-		} ;
-
-	ucptr = psds->read_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 4)
-	{	sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) + (ucptr [k + 3] << 4) ;
-		psds->read_samples [k / 4] = (int) (sample - 0x80000000) ;
-		} ;
-
-	return 1 ;
-} /* sds_4byte_read */
-
-
-static sf_count_t
-sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = sds_read (psf, psds, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = iptr [k] >> 16 ;
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* sds_read_s */
-
-static sf_count_t
-sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	SDS_PRIVATE *psds ;
-	int			total ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-
-	total = sds_read (psf, psds, ptr, len) ;
-
-	return total ;
-} /* sds_read_i */
-
-static sf_count_t
-sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-
-	if (psf->norm_float == SF_TRUE)
-		normfact = 1.0 / 0x80000000 ;
-	else
-		normfact = 1.0 / (1 << psds->bitwidth) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = sds_read (psf, psds, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* sds_read_f */
-
-static sf_count_t
-sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-
-	if (psf->norm_double == SF_TRUE)
-		normfact = 1.0 / 0x80000000 ;
-	else
-		normfact = 1.0 / (1 << psds->bitwidth) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = sds_read (psf, psds, iptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * iptr [k] ;
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* sds_read_d */
-
-static int
-sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *ptr, int len)
-{	int	count, total = 0 ;
-
-	while (total < len)
-	{	if (psds->read_block * psds->samplesperblock >= psds->frames)
-		{	memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ;
-			return total ;
-			} ;
-
-		if (psds->read_count >= psds->samplesperblock)
-			psds->reader (psf, psds) ;
-
-		count = (psds->samplesperblock - psds->read_count) ;
-		count = (len - total > count) ? count : len - total ;
-
-		memcpy (&(ptr [total]), &(psds->read_samples [psds->read_count]), count * sizeof (int)) ;
-		total += count ;
-		psds->read_count += count ;
-		} ;
-
-	return total ;
-} /* sds_read */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-sds_seek (SF_PRIVATE *psf, int mode, sf_count_t seek_from_start)
-{	SDS_PRIVATE	*psds ;
-	sf_count_t	file_offset ;
-	int			newblock, newsample ;
-
-	if ((psds = psf->codec_data) == NULL)
-	{	psf->error = SFE_INTERNAL ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (psf->datalength < 0 || psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
-	{	psf->error = SFE_BAD_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (mode == SFM_READ && psds->write_count > 0)
-		psds->writer (psf, psds) ;
-
-	newblock = seek_from_start / psds->samplesperblock ;
-	newsample = seek_from_start % psds->samplesperblock ;
-
-	switch (mode)
-	{	case SFM_READ :
-			if (newblock > psds->total_blocks)
-			{	psf->error = SFE_BAD_SEEK ;
-				return PSF_SEEK_ERROR ;
-				} ;
-
-			file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
-
-			if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
-			{	psf->error = SFE_SEEK_FAILED ;
-				return PSF_SEEK_ERROR ;
-				} ;
-
-			psds->read_block = newblock ;
-			psds->reader (psf, psds) ;
-			psds->read_count = newsample ;
-			break ;
-
-		case SFM_WRITE :
-			if (newblock > psds->total_blocks)
-			{	psf->error = SFE_BAD_SEEK ;
-				return PSF_SEEK_ERROR ;
-				} ;
-
-			file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
-
-			if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
-			{	psf->error = SFE_SEEK_FAILED ;
-				return PSF_SEEK_ERROR ;
-				} ;
-
-			psds->write_block = newblock ;
-			psds->reader (psf, psds) ;
-			psds->write_count = newsample ;
-			break ;
-
-		default :
-			psf->error = SFE_BAD_SEEK ;
-			return PSF_SEEK_ERROR ;
-			break ;
-		} ;
-
-	return seek_from_start ;
-} /* sds_seek */
-
-static int
-sds_byterate (SF_PRIVATE * psf)
-{
-	if (psf->file.mode == SFM_READ)
-		return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-	return -1 ;
-} /* sds_byterate */
-
-/*==============================================================================
-*/
-
-static int
-sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->write_data [0] = 0xF0 ;
-	psds->write_data [1] = 0x7E ;
-	psds->write_data [2] = 0 ;							/* Channel number */
-	psds->write_data [3] = 2 ;
-	psds->write_data [4] = psds->write_block & 0x7F ;	/* Packet number */
-
-	ucptr = psds->write_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 2)
-	{	sample = psds->write_samples [k / 2] ;
-		sample += 0x80000000 ;
-		ucptr [k] = (sample >> 25) & 0x7F ;
-		ucptr [k + 1] = (sample >> 18) & 0x7F ;
-		} ;
-
-	checksum = psds->write_data [1] ;
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->write_data [k] ;
-	checksum &= 0x7F ;
-
-	psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-	psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-	if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	psds->write_block ++ ;
-	psds->write_count = 0 ;
-
-	if (psds->write_block > psds->total_blocks)
-		psds->total_blocks = psds->write_block ;
-	psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-	return 1 ;
-} /* sds_2byte_write */
-
-static int
-sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->write_data [0] = 0xF0 ;
-	psds->write_data [1] = 0x7E ;
-	psds->write_data [2] = 0 ;							/* Channel number */
-	psds->write_data [3] = 2 ;
-	psds->write_data [4] = psds->write_block & 0x7F ;	/* Packet number */
-
-	ucptr = psds->write_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 3)
-	{	sample = psds->write_samples [k / 3] ;
-		sample += 0x80000000 ;
-		ucptr [k] = (sample >> 25) & 0x7F ;
-		ucptr [k + 1] = (sample >> 18) & 0x7F ;
-		ucptr [k + 2] = (sample >> 11) & 0x7F ;
-		} ;
-
-	checksum = psds->write_data [1] ;
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->write_data [k] ;
-	checksum &= 0x7F ;
-
-	psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-	psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-	if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	psds->write_block ++ ;
-	psds->write_count = 0 ;
-
-	if (psds->write_block > psds->total_blocks)
-		psds->total_blocks = psds->write_block ;
-	psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-	return 1 ;
-} /* sds_3byte_write */
-
-static int
-sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{	unsigned char *ucptr, checksum ;
-	unsigned int sample ;
-	int 	k ;
-
-	psds->write_data [0] = 0xF0 ;
-	psds->write_data [1] = 0x7E ;
-	psds->write_data [2] = 0 ;							/* Channel number */
-	psds->write_data [3] = 2 ;
-	psds->write_data [4] = psds->write_block & 0x7F ;	/* Packet number */
-
-	ucptr = psds->write_data + 5 ;
-	for (k = 0 ; k < 120 ; k += 4)
-	{	sample = psds->write_samples [k / 4] ;
-		sample += 0x80000000 ;
-		ucptr [k] = (sample >> 25) & 0x7F ;
-		ucptr [k + 1] = (sample >> 18) & 0x7F ;
-		ucptr [k + 2] = (sample >> 11) & 0x7F ;
-		ucptr [k + 3] = (sample >> 4) & 0x7F ;
-		} ;
-
-	checksum = psds->write_data [1] ;
-	for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-		checksum ^= psds->write_data [k] ;
-	checksum &= 0x7F ;
-
-	psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-	psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-	if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-		psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-	psds->write_block ++ ;
-	psds->write_count = 0 ;
-
-	if (psds->write_block > psds->total_blocks)
-		psds->total_blocks = psds->write_block ;
-	psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-	return 1 ;
-} /* sds_4byte_write */
-
-static sf_count_t
-sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-	psds->total_written += len ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = ptr [total + k] << 16 ;
-		count = sds_write (psf, psds, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* sds_write_s */
-
-static sf_count_t
-sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	SDS_PRIVATE *psds ;
-	int			total ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-	psds->total_written += len ;
-
-	total = sds_write (psf, psds, ptr, len) ;
-
-	return total ;
-} /* sds_write_i */
-
-static sf_count_t
-sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-	psds->total_written += len ;
-
-	if (psf->norm_float == SF_TRUE)
-		normfact = 1.0 * 0x80000000 ;
-	else
-		normfact = 1.0 * (1 << psds->bitwidth) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = normfact * ptr [total + k] ;
-		count = sds_write (psf, psds, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* sds_write_f */
-
-static sf_count_t
-sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	SDS_PRIVATE	*psds ;
-	int			*iptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if (psf->codec_data == NULL)
-		return 0 ;
-	psds = (SDS_PRIVATE*) psf->codec_data ;
-	psds->total_written += len ;
-
-	if (psf->norm_double == SF_TRUE)
-		normfact = 1.0 * 0x80000000 ;
-	else
-		normfact = 1.0 * (1 << psds->bitwidth) ;
-
-	iptr = ubuf.ibuf ;
-	bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : len ;
-		for (k = 0 ; k < writecount ; k++)
-			iptr [k] = normfact * ptr [total + k] ;
-		count = sds_write (psf, psds, iptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* sds_write_d */
-
-static int
-sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *ptr, int len)
-{	int	count, total = 0 ;
-
-	while (total < len)
-	{	count = psds->samplesperblock - psds->write_count ;
-		if (count > len - total)
-			count = len - total ;
-
-		memcpy (&(psds->write_samples [psds->write_count]), &(ptr [total]), count * sizeof (int)) ;
-		total += count ;
-		psds->write_count += count ;
-
-		if (psds->write_count >= psds->samplesperblock)
-			psds->writer (psf, psds) ;
-		} ;
-
-	return total ;
-} /* sds_write */
-
diff --git a/libs/libsndfile/src/sf_unistd.h b/libs/libsndfile/src/sf_unistd.h
deleted file mode 100644
index 9fca68eff2..0000000000
--- a/libs/libsndfile/src/sf_unistd.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* Some defines that microsoft 'forgot' to implement. */
-
-#ifndef S_IRWXU
-#define	S_IRWXU 	0000700	/* rwx, owner */
-#endif
-
-#ifndef		S_IRUSR
-#define		S_IRUSR	0000400	/* read permission, owner */
-#endif
-
-#ifndef		S_IWUSR
-#define		S_IWUSR	0000200	/* write permission, owner */
-#endif
-
-#ifndef		S_IXUSR
-#define		S_IXUSR	0000100	/* execute/search permission, owner */
-#endif
-
-/* Windows doesn't have group permissions so set all these to zero. */
-#define	S_IRWXG		0	/* rwx, group */
-#define		S_IRGRP	0	/* read permission, group */
-#define		S_IWGRP	0	/* write permission, grougroup */
-#define		S_IXGRP	0	/* execute/search permission, group */
-
-/* Windows doesn't have others permissions so set all these to zero. */
-#define	S_IRWXO		0	/* rwx, other */
-#define		S_IROTH	0	/* read permission, other */
-#define		S_IWOTH	0	/* write permission, other */
-#define		S_IXOTH	0	/* execute/search permission, other */
-
-#ifndef S_ISFIFO
-#define S_ISFIFO(mode)	(((mode) & _S_IFMT) == _S_IFIFO)
-#endif
-
-#ifndef S_ISREG
-#define	S_ISREG(mode)	(((mode) & _S_IFREG) == _S_IFREG)
-#endif
-
-/*
-**	Don't know if these are still needed.
-**
-**	#define	_IFMT		_S_IFMT
-**	#define _IFREG		_S_IFREG
-*/
-
diff --git a/libs/libsndfile/src/sfconfig.h b/libs/libsndfile/src/sfconfig.h
deleted file mode 100644
index b9b2dbda0d..0000000000
--- a/libs/libsndfile/src/sfconfig.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-** Copyright (C) 2005-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Autoconf leaves many config parameters undefined.
-**	Here we change then from being undefined to defining them to 0.
-**	This allows things like:
-**
-**		#if HAVE_CONFIG_PARAM
-**
-**	and
-**
-**		if (HAVE_CONFIG_PARAM)
-**			do_something () ;
-*/
-
-#ifndef SFCONFIG_H
-#define SFCONFIG_H
-
-/* Include the Autoconf generated file. */
-#include "config.h"
-
-/* Now fiddle the values. */
-
-#ifndef HAVE_ALSA_ASOUNDLIB_H
-#define HAVE_ALSA_ASOUNDLIB_H 0
-#endif
-
-#ifndef HAVE_BYTESWAP_H
-#define HAVE_BYTESWAP_H 0
-#endif
-
-#ifndef HAVE_DECL_S_IRGRP
-#define	HAVE_DECL_S_IRGRP 0
-#endif
-
-#ifndef HAVE_ENDIAN_H
-#define HAVE_ENDIAN_H 0
-#endif
-
-#ifndef HAVE_FSTAT64
-#define HAVE_FSTAT64 0
-#endif
-
-#ifndef HAVE_FSYNC
-#define HAVE_FSYNC 0
-#endif
-
-#ifndef HAVE_LOCALE_H
-#define HAVE_LOCALE_H 0
-#endif
-
-#ifndef HAVE_LRINT
-#define HAVE_LRINT 0
-#endif
-
-#ifndef HAVE_LRINTF
-#define HAVE_LRINTF 0
-#endif
-
-#ifndef HAVE_MMAP
-#define HAVE_MMAP 0
-#endif
-
-#ifndef HAVE_SETLOCALE
-#define HAVE_SETLOCALE 0
-#endif
-
-#ifndef HAVE_SQLITE3
-#define HAVE_SQLITE3 0
-#endif
-
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H 0
-#endif
-
-#ifndef HAVE_SYS_WAIT_H
-#define HAVE_SYS_WAIT_H 0
-#endif
-
-#ifndef HAVE_UNISTD_H
-#define HAVE_UNISTD_H 0
-#endif
-
-#ifndef HAVE_PIPE
-#define HAVE_PIPE 0
-#endif
-
-#ifndef HAVE_WAITPID
-#define	HAVE_WAITPID 0
-#endif
-
-#ifndef HAVE_X86INTRIN_H
-#define HAVE_X86INTRIN_H 0
-#endif
-
-#define CPU_IS_X86		(defined __i486__ || defined __i586__ || defined __i686__ || defined __x86_64__)
-#define CPU_IS_X86_64	(defined __x86_64__)
-
-#endif
diff --git a/libs/libsndfile/src/sfendian.h b/libs/libsndfile/src/sfendian.h
deleted file mode 100644
index 044fa3a77f..0000000000
--- a/libs/libsndfile/src/sfendian.h
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SFENDIAN_INCLUDED
-#define SFENDIAN_INCLUDED
-
-#include "sfconfig.h"
-
-#include <stdint.h>
-#ifndef WIN32
-#include <inttypes.h>
-#endif
-
-
-#if COMPILER_IS_GCC && CPU_IS_X86
-
-static inline int16_t
-ENDSWAP_16 (int16_t x)
-{	int16_t y ;
-	__asm__ ("rorw $8, %w0" : "=r" (y) : "0" (x) : "cc") ;
-	return y ;
-} /* ENDSWAP_16 */
-
-static inline int32_t
-ENDSWAP_32 (int32_t x)
-{	int32_t y ;
-	__asm__ ("bswap %0" : "=r" (y) : "0" (x)) ;
-	return y ;
-} /* ENDSWAP_32 */
-
-#if CPU_IS_X86_64
-
-static inline int64_t
-ENDSWAP_64X (int64_t x)
-{	int64_t y ;
-	__asm__ ("bswap %q0" : "=r" (y) : "0" (x)) ;
-	return y ;
-} /* ENDSWAP_64X */
-
-#define ENDSWAP_64 ENDSWAP_64X
-
-#endif
-
-#elif HAVE_BYTESWAP_H			/* Linux, any CPU */
-#include <byteswap.h>
-
-#define	ENDSWAP_16(x)		(bswap_16 (x))
-#define	ENDSWAP_32(x)		(bswap_32 (x))
-#define	ENDSWAP_64(x)		(bswap_64 (x))
-
-#else
-
-#define	ENDSWAP_16(x)		((((x) >> 8) & 0xFF) + (((x) & 0xFF) << 8))
-#define	ENDSWAP_32(x)		((((x) >> 24) & 0xFF) + (((x) >> 8) & 0xFF00) + (((x) & 0xFF00) << 8) + (((x) & 0xFF) << 24))
-
-#endif
-
-#ifndef ENDSWAP_64
-static inline uint64_t
-ENDSWAP_64 (uint64_t x)
-{	union
-	{	uint32_t parts [2] ;
-		uint64_t whole ;
-	} u ;
-	uint32_t temp ;
-
-	u.whole = x ;
-	temp = u.parts [0] ;
-	u.parts [0] = ENDSWAP_32 (u.parts [1]) ;
-	u.parts [1] = ENDSWAP_32 (temp) ;
-	return u.whole ;
-}
-#endif
-
-/*
-** Many file types (ie WAV, AIFF) use sets of four consecutive bytes as a
-** marker indicating different sections of the file.
-** The following MAKE_MARKER macro allows th creation of integer constants
-** for these markers.
-*/
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-	#define	MAKE_MARKER(a, b, c, d)		((uint32_t) ((a) | ((b) << 8) | ((c) << 16) | (((uint32_t) (d)) << 24)))
-#elif (CPU_IS_BIG_ENDIAN == 1)
-	#define	MAKE_MARKER(a, b, c, d)		((uint32_t) ((((uint32_t) (a)) << 24) | ((b) << 16) | ((c) << 8) | (d)))
-#else
-	#error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h"
-#endif
-
-/*
-** Macros to handle reading of data of a specific endian-ness into host endian
-** shorts and ints. The single input is an unsigned char* pointer to the start
-** of the object. There are two versions of each macro as we need to deal with
-** both big and little endian CPUs.
-*/
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-	#define LE2H_16(x)			(x)
-	#define LE2H_32(x)			(x)
-
-	#define BE2H_16(x)			ENDSWAP_16 (x)
-	#define BE2H_32(x)			ENDSWAP_32 (x)
-	#define BE2H_64(x)			ENDSWAP_64 (x)
-
-	#define H2BE_16(x)			ENDSWAP_16 (x)
-	#define H2BE_32(x)			ENDSWAP_32 (x)
-
-#elif (CPU_IS_BIG_ENDIAN == 1)
-	#define LE2H_16(x)			ENDSWAP_16 (x)
-	#define LE2H_32(x)			ENDSWAP_32 (x)
-
-	#define BE2H_16(x)			(x)
-	#define BE2H_32(x)			(x)
-	#define	BE2H_64(x)			(x)
-
-	#define H2BE_16(x)			(x)
-	#define H2BE_32(x)			(x)
-
-	#define H2LE_16(x)			ENDSWAP_16 (x)
-	#define H2LE_32(x)			ENDSWAP_32 (x)
-
-#else
-	#error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h"
-#endif
-
-#define LET2H_16_PTR(x)			((x) [1] + ((x) [2] << 8))
-#define LET2H_32_PTR(x)			(((x) [0] << 8) + ((x) [1] << 16) + ((x) [2] << 24))
-
-#define BET2H_16_PTR(x)			(((x) [0] << 8) + (x) [1])
-#define BET2H_32_PTR(x)			(((x) [0] << 24) + ((x) [1] << 16) + ((x) [2] << 8))
-
-static inline void
-psf_put_be64 (uint8_t *ptr, int offset, int64_t value)
-{
-	ptr [offset] = value >> 56 ;
-	ptr [offset + 1] = value >> 48 ;
-	ptr [offset + 2] = value >> 40 ;
-	ptr [offset + 3] = value >> 32 ;
-	ptr [offset + 4] = value >> 24 ;
-	ptr [offset + 5] = value >> 16 ;
-	ptr [offset + 6] = value >> 8 ;
-	ptr [offset + 7] = value ;
-} /* psf_put_be64 */
-
-static inline void
-psf_put_be32 (uint8_t *ptr, int offset, int32_t value)
-{
-	ptr [offset] = value >> 24 ;
-	ptr [offset + 1] = value >> 16 ;
-	ptr [offset + 2] = value >> 8 ;
-	ptr [offset + 3] = value ;
-} /* psf_put_be32 */
-
-static inline void
-psf_put_be16 (uint8_t *ptr, int offset, int16_t value)
-{
-	ptr [offset] = value >> 8 ;
-	ptr [offset + 1] = value ;
-} /* psf_put_be16 */
-
-static inline int64_t
-psf_get_be64 (uint8_t *ptr, int offset)
-{	int64_t value ;
-
-	value = ptr [offset] << 24 ;
-	value += ptr [offset + 1] << 16 ;
-	value += ptr [offset + 2] << 8 ;
-	value += ptr [offset + 3] ;
-
-	value <<= 32 ;
-
-	value += ptr [offset + 4] << 24 ;
-	value += ptr [offset + 5] << 16 ;
-	value += ptr [offset + 6] << 8 ;
-	value += ptr [offset + 7] ;
-	return value ;
-} /* psf_get_be64 */
-
-static inline int32_t
-psf_get_be32 (uint8_t *ptr, int offset)
-{	int32_t value ;
-
-	value = ptr [offset] << 24 ;
-	value += ptr [offset + 1] << 16 ;
-	value += ptr [offset + 2] << 8 ;
-	value += ptr [offset + 3] ;
-	return value ;
-} /* psf_get_be32 */
-
-static inline int16_t
-psf_get_be16 (uint8_t *ptr, int offset)
-{	return (ptr [offset] << 8) + ptr [offset + 1] ;
-} /* psf_get_be16 */
-
-/*-----------------------------------------------------------------------------------------------
-** Generic functions for performing endian swapping on integer arrays.
-*/
-
-static inline void
-endswap_short_array (short *ptr, int len)
-{	short	temp ;
-
-	while (--len >= 0)
-	{	temp = ptr [len] ;
-		ptr [len] = ENDSWAP_16 (temp) ;
-		} ;
-} /* endswap_short_array */
-
-static inline void
-endswap_short_copy (short *dest, const short *src, int len)
-{
-	while (--len >= 0)
-	{	dest [len] = ENDSWAP_16 (src [len]) ;
-		} ;
-} /* endswap_short_copy */
-
-static inline void
-endswap_int_array (int *ptr, int len)
-{	int temp ;
-
-	while (--len >= 0)
-	{	temp = ptr [len] ;
-		ptr [len] = ENDSWAP_32 (temp) ;
-		} ;
-} /* endswap_int_array */
-
-static inline void
-endswap_int_copy (int *dest, const int *src, int len)
-{
-	while (--len >= 0)
-	{	dest [len] = ENDSWAP_32 (src [len]) ;
-		} ;
-} /* endswap_int_copy */
-
-/*========================================================================================
-*/
-
-static inline void
-endswap_int64_t_array (int64_t *ptr, int len)
-{	int64_t value ;
-
-	while (--len >= 0)
-	{	value = ptr [len] ;
-		ptr [len] = ENDSWAP_64 (value) ;
-		} ;
-} /* endswap_int64_t_array */
-
-static inline void
-endswap_int64_t_copy (int64_t *dest, const int64_t *src, int len)
-{	int64_t value ;
-
-	while (--len >= 0)
-	{	value = src [len] ;
-		dest [len] = ENDSWAP_64 (value) ;
-		} ;
-} /* endswap_int64_t_copy */
-
-/* A couple of wrapper functions. */
-
-static inline void
-endswap_float_array (float *ptr, int len)
-{	endswap_int_array ((int *) ptr, len) ;
-} /* endswap_float_array */
-
-static inline void
-endswap_double_array (double *ptr, int len)
-{	endswap_int64_t_array ((int64_t *) ptr, len) ;
-} /* endswap_double_array */
-
-static inline void
-endswap_float_copy (float *dest, const float *src, int len)
-{	endswap_int_copy ((int *) dest, (const int *) src, len) ;
-} /* endswap_float_copy */
-
-static inline void
-endswap_double_copy (double *dest, const double *src, int len)
-{	endswap_int64_t_copy ((int64_t *) dest, (const int64_t *) src, len) ;
-} /* endswap_double_copy */
-
-#endif /* SFENDIAN_INCLUDED */
-
diff --git a/libs/libsndfile/src/sndfile.c b/libs/libsndfile/src/sndfile.c
deleted file mode 100644
index cfe75ac4d9..0000000000
--- a/libs/libsndfile/src/sndfile.c
+++ /dev/null
@@ -1,3093 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<assert.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#define		SNDFILE_MAGICK	0x1234C0DE
-
-#ifdef __APPLE__
-	/*
-	**	Detect if a compile for a universal binary is being attempted and barf if it is.
-	**	See the URL below for the rationale.
-	*/
-	#ifdef __BIG_ENDIAN__
-		#if (CPU_IS_LITTLE_ENDIAN == 1)
-			#error "Universal binary compile detected. See http://www.mega-nerd.com/libsndfile/FAQ.html#Q018"
-		#endif
-	#endif
-
-	#ifdef __LITTLE_ENDIAN__
-		#if (CPU_IS_BIG_ENDIAN == 1)
-			#error "Universal binary compile detected. See http://www.mega-nerd.com/libsndfile/FAQ.html#Q018"
-		#endif
-	#endif
-#endif
-
-
-typedef struct
-{	int 		error ;
-	const char	*str ;
-} ErrorStruct ;
-
-static
-ErrorStruct SndfileErrors [] =
-{
-	/* Public error values and their associated strings. */
-	{	SF_ERR_NO_ERROR				, "No Error." },
-	{	SF_ERR_UNRECOGNISED_FORMAT	, "Format not recognised." },
-	{	SF_ERR_SYSTEM				, "System error." /* Often replaced. */ 	},
-	{	SF_ERR_MALFORMED_FILE		, "Supported file format but file is malformed." },
-	{	SF_ERR_UNSUPPORTED_ENCODING	, "Supported file format but unsupported encoding." },
-
-	/* Private error values and their associated strings. */
-	{	SFE_ZERO_MAJOR_FORMAT	, "Error : major format is 0." },
-	{	SFE_ZERO_MINOR_FORMAT	, "Error : minor format is 0." },
-	{	SFE_BAD_FILE			, "File does not exist or is not a regular file (possibly a pipe?)." },
-	{	SFE_BAD_FILE_READ		, "File exists but no data could be read." },
-	{	SFE_OPEN_FAILED			, "Could not open file." },
-	{	SFE_BAD_SNDFILE_PTR		, "Not a valid SNDFILE* pointer." },
-	{	SFE_BAD_SF_INFO_PTR		, "NULL SF_INFO pointer passed to libsndfile." },
-	{	SFE_BAD_SF_INCOMPLETE	, "SF_PRIVATE struct incomplete and end of header parsing." },
-	{	SFE_BAD_FILE_PTR		, "Bad FILE pointer." },
-	{	SFE_BAD_INT_PTR			, "Internal error, Bad pointer." },
-	{	SFE_BAD_STAT_SIZE		, "Error : software was misconfigured at compile time (sizeof statbuf.st_size)." },
-	{	SFE_NO_TEMP_DIR			, "Error : Could not file temp dir." },
-
-	{	SFE_MALLOC_FAILED		, "Internal malloc () failed." },
-	{	SFE_UNIMPLEMENTED		, "File contains data in an unimplemented format." },
-	{	SFE_BAD_READ_ALIGN		, "Attempt to read a non-integer number of channels." },
-	{	SFE_BAD_WRITE_ALIGN 	, "Attempt to write a non-integer number of channels." },
-	{	SFE_UNKNOWN_FORMAT		, "File contains data in an unknown format." },
-	{	SFE_NOT_READMODE		, "Read attempted on file currently open for write." },
-	{	SFE_NOT_WRITEMODE		, "Write attempted on file currently open for read." },
-	{	SFE_BAD_MODE_RW			, "Error : This file format does not support read/write mode." },
-	{	SFE_BAD_SF_INFO			, "Internal error : SF_INFO struct incomplete." },
-	{	SFE_BAD_OFFSET			, "Error : supplied offset beyond end of file." },
-	{	SFE_NO_EMBED_SUPPORT	, "Error : embedding not supported for this file format." },
-	{	SFE_NO_EMBEDDED_RDWR	, "Error : cannot open embedded file read/write." },
-	{	SFE_NO_PIPE_WRITE		, "Error : this file format does not support pipe write." },
-	{	SFE_BAD_VIRTUAL_IO		, "Error : bad pointer on SF_VIRTUAL_IO struct." },
-	{	SFE_BAD_BROADCAST_INFO_SIZE
-								, "Error : bad coding_history_size in SF_BROADCAST_INFO struct." },
-	{	SFE_BAD_BROADCAST_INFO_TOO_BIG
-								, "Error : SF_BROADCAST_INFO struct too large." },
-	{	SFE_BAD_CART_INFO_SIZE				, "Error: SF_CART_INFO struct too large." },
-	{	SFE_BAD_CART_INFO_TOO_BIG			, "Error: bag tag_text_size in SF_CART_INFO struct." },
-	{	SFE_INTERLEAVE_MODE		, "Attempt to write to file with non-interleaved data." },
-	{	SFE_INTERLEAVE_SEEK		, "Bad karma in seek during interleave read operation." },
-	{	SFE_INTERLEAVE_READ		, "Bad karma in read during interleave read operation." },
-
-	{	SFE_INTERNAL			, "Unspecified internal error." },
-	{	SFE_BAD_COMMAND_PARAM	, "Bad parameter passed to function sf_command." },
-	{	SFE_BAD_ENDIAN			, "Bad endian-ness. Try default endian-ness" },
-	{	SFE_CHANNEL_COUNT_ZERO	, "Channel count is zero." },
-	{	SFE_CHANNEL_COUNT		, "Too many channels specified." },
-
-	{	SFE_BAD_SEEK			, "Internal psf_fseek() failed." },
-	{	SFE_NOT_SEEKABLE		, "Seek attempted on unseekable file type." },
-	{	SFE_AMBIGUOUS_SEEK		, "Error : combination of file open mode and seek command is ambiguous." },
-	{	SFE_WRONG_SEEK			, "Error : invalid seek parameters." },
-	{	SFE_SEEK_FAILED			, "Error : parameters OK, but psf_seek() failed." },
-
-	{	SFE_BAD_OPEN_MODE		, "Error : bad mode parameter for file open." },
-	{	SFE_OPEN_PIPE_RDWR		, "Error : attempt to open a pipe in read/write mode." },
-	{	SFE_RDWR_POSITION		, "Error on RDWR position (cryptic)." },
-	{	SFE_RDWR_BAD_HEADER		, "Error : Cannot open file in read/write mode due to string data in header." },
-	{	SFE_CMD_HAS_DATA		, "Error : Command fails because file already has audio data." },
-
-	{	SFE_STR_NO_SUPPORT		, "Error : File type does not support string data." },
-	{	SFE_STR_NOT_WRITE		, "Error : Trying to set a string when file is not in write mode." },
-	{	SFE_STR_MAX_DATA		, "Error : Maximum string data storage reached." },
-	{	SFE_STR_MAX_COUNT		, "Error : Maximum string data count reached." },
-	{	SFE_STR_BAD_TYPE		, "Error : Bad string data type." },
-	{	SFE_STR_NO_ADD_END		, "Error : file type does not support strings added at end of file." },
-	{	SFE_STR_BAD_STRING		, "Error : bad string." },
-	{	SFE_STR_WEIRD			, "Error : Weird string error." },
-
-	{	SFE_WAV_NO_RIFF			, "Error in WAV file. No 'RIFF' chunk marker." },
-	{	SFE_WAV_NO_WAVE			, "Error in WAV file. No 'WAVE' chunk marker." },
-	{	SFE_WAV_NO_FMT			, "Error in WAV/W64/RF64 file. No 'fmt ' chunk marker." },
-	{	SFE_WAV_BAD_FMT			, "Error in WAV/W64/RF64 file. Malformed 'fmt ' chunk." },
-	{	SFE_WAV_FMT_SHORT		, "Error in WAV/W64/RF64 file. Short 'fmt ' chunk." },
-
-	{	SFE_WAV_BAD_FACT		, "Error in WAV file. 'fact' chunk out of place." },
-	{	SFE_WAV_BAD_PEAK		, "Error in WAV file. Bad 'PEAK' chunk." },
-	{	SFE_WAV_PEAK_B4_FMT		, "Error in WAV file. 'PEAK' chunk found before 'fmt ' chunk." },
-
-	{	SFE_WAV_BAD_FORMAT		, "Error in WAV file. Errors in 'fmt ' chunk." },
-	{	SFE_WAV_BAD_BLOCKALIGN	, "Error in WAV file. Block alignment in 'fmt ' chunk is incorrect." },
-	{	SFE_WAV_NO_DATA			, "Error in WAV file. No 'data' chunk marker." },
-	{	SFE_WAV_BAD_LIST		, "Error in WAV file. Malformed LIST chunk." },
-	{	SFE_WAV_UNKNOWN_CHUNK	, "Error in WAV file. File contains an unknown chunk marker." },
-	{	SFE_WAV_WVPK_DATA		, "Error in WAV file. Data is in WAVPACK format." },
-
-	{	SFE_WAV_ADPCM_NOT4BIT	, "Error in ADPCM WAV file. Invalid bit width." },
-	{	SFE_WAV_ADPCM_CHANNELS	, "Error in ADPCM WAV file. Invalid number of channels." },
-	{	SFE_WAV_GSM610_FORMAT	, "Error in GSM610 WAV file. Invalid format chunk." },
-
-	{	SFE_AIFF_NO_FORM		, "Error in AIFF file, bad 'FORM' marker." },
-	{	SFE_AIFF_AIFF_NO_FORM	, "Error in AIFF file, 'AIFF' marker without 'FORM'." },
-	{	SFE_AIFF_COMM_NO_FORM	, "Error in AIFF file, 'COMM' marker without 'FORM'." },
-	{	SFE_AIFF_SSND_NO_COMM	, "Error in AIFF file, 'SSND' marker without 'COMM'." },
-	{	SFE_AIFF_UNKNOWN_CHUNK	, "Error in AIFF file, unknown chunk." },
-	{	SFE_AIFF_COMM_CHUNK_SIZE, "Error in AIFF file, bad 'COMM' chunk size." },
-	{	SFE_AIFF_BAD_COMM_CHUNK , "Error in AIFF file, bad 'COMM' chunk." },
-	{	SFE_AIFF_PEAK_B4_COMM	, "Error in AIFF file. 'PEAK' chunk found before 'COMM' chunk." },
-	{	SFE_AIFF_BAD_PEAK		, "Error in AIFF file. Bad 'PEAK' chunk." },
-	{	SFE_AIFF_NO_SSND		, "Error in AIFF file, bad 'SSND' chunk." },
-	{	SFE_AIFF_NO_DATA		, "Error in AIFF file, no sound data." },
-	{	SFE_AIFF_RW_SSND_NOT_LAST, "Error in AIFF file, RDWR only possible if SSND chunk at end of file." },
-
-	{	SFE_AU_UNKNOWN_FORMAT	, "Error in AU file, unknown format." },
-	{	SFE_AU_NO_DOTSND		, "Error in AU file, missing '.snd' or 'dns.' marker." },
-	{	SFE_AU_EMBED_BAD_LEN	, "Embedded AU file with unknown length." },
-
-	{	SFE_RAW_READ_BAD_SPEC	, "Error while opening RAW file for read. Must specify format and channels.\n"
-									"Possibly trying to open unsupported format." },
-	{	SFE_RAW_BAD_BITWIDTH	, "Error. RAW file bitwidth must be a multiple of 8." },
-	{	SFE_RAW_BAD_FORMAT		, "Error. Bad format field in SF_INFO struct when openning a RAW file for read." },
-
-	{	SFE_PAF_NO_MARKER		, "Error in PAF file, no marker." },
-	{	SFE_PAF_VERSION			, "Error in PAF file, bad version." },
-	{	SFE_PAF_UNKNOWN_FORMAT	, "Error in PAF file, unknown format." },
-	{	SFE_PAF_SHORT_HEADER	, "Error in PAF file. File shorter than minimal header." },
-	{	SFE_PAF_BAD_CHANNELS	, "Error in PAF file. Bad channel count." },
-
-	{	SFE_SVX_NO_FORM			, "Error in 8SVX / 16SV file, no 'FORM' marker." },
-	{	SFE_SVX_NO_BODY			, "Error in 8SVX / 16SV file, no 'BODY' marker." },
-	{	SFE_SVX_NO_DATA			, "Error in 8SVX / 16SV file, no sound data." },
-	{	SFE_SVX_BAD_COMP		, "Error in 8SVX / 16SV file, unsupported compression format." },
-	{	SFE_SVX_BAD_NAME_LENGTH	, "Error in 8SVX / 16SV file, NAME chunk too long." },
-
-	{	SFE_NIST_BAD_HEADER		, "Error in NIST file, bad header." },
-	{	SFE_NIST_CRLF_CONVERISON, "Error : NIST file damaged by Windows CR -> CRLF conversion process."	},
-	{	SFE_NIST_BAD_ENCODING	, "Error in NIST file, unsupported compression format." },
-
-	{	SFE_VOC_NO_CREATIVE		, "Error in VOC file, no 'Creative Voice File' marker." },
-	{	SFE_VOC_BAD_FORMAT		, "Error in VOC file, bad format." },
-	{	SFE_VOC_BAD_VERSION		, "Error in VOC file, bad version number." },
-	{	SFE_VOC_BAD_MARKER		, "Error in VOC file, bad marker in file." },
-	{	SFE_VOC_BAD_SECTIONS	, "Error in VOC file, incompatible VOC sections." },
-	{	SFE_VOC_MULTI_SAMPLERATE, "Error in VOC file, more than one sample rate defined." },
-	{	SFE_VOC_MULTI_SECTION	, "Unimplemented VOC file feature, file contains multiple sound sections." },
-	{	SFE_VOC_MULTI_PARAM		, "Error in VOC file, file contains multiple bit or channel widths." },
-	{	SFE_VOC_SECTION_COUNT	, "Error in VOC file, too many sections." },
-	{	SFE_VOC_NO_PIPE			, "Error : not able to operate on VOC files over a pipe." },
-
-	{	SFE_IRCAM_NO_MARKER		, "Error in IRCAM file, bad IRCAM marker." },
-	{	SFE_IRCAM_BAD_CHANNELS	, "Error in IRCAM file, bad channel count." },
-	{	SFE_IRCAM_UNKNOWN_FORMAT, "Error in IRCAM file, unknow encoding format." },
-
-	{	SFE_W64_64_BIT			, "Error in W64 file, file contains 64 bit offset." },
-	{	SFE_W64_NO_RIFF			, "Error in W64 file. No 'riff' chunk marker." },
-	{	SFE_W64_NO_WAVE			, "Error in W64 file. No 'wave' chunk marker." },
-	{	SFE_W64_NO_DATA			, "Error in W64 file. No 'data' chunk marker." },
-	{	SFE_W64_ADPCM_NOT4BIT	, "Error in ADPCM W64 file. Invalid bit width." },
-	{	SFE_W64_ADPCM_CHANNELS	, "Error in ADPCM W64 file. Invalid number of channels." },
-	{	SFE_W64_GSM610_FORMAT	, "Error in GSM610 W64 file. Invalid format chunk." },
-
-	{	SFE_MAT4_BAD_NAME		, "Error in MAT4 file. No variable name." },
-	{	SFE_MAT4_NO_SAMPLERATE	, "Error in MAT4 file. No sample rate." },
-
-	{	SFE_MAT5_BAD_ENDIAN		, "Error in MAT5 file. Not able to determine endian-ness." },
-	{	SFE_MAT5_NO_BLOCK		, "Error in MAT5 file. Bad block structure." },
-	{	SFE_MAT5_SAMPLE_RATE	, "Error in MAT5 file. Not able to determine sample rate." },
-
-	{	SFE_PVF_NO_PVF1			, "Error in PVF file. No PVF1 marker." },
-	{	SFE_PVF_BAD_HEADER		, "Error in PVF file. Bad header." },
-	{	SFE_PVF_BAD_BITWIDTH	, "Error in PVF file. Bad bit width." },
-
-	{	SFE_XI_BAD_HEADER		, "Error in XI file. Bad header." },
-	{	SFE_XI_EXCESS_SAMPLES	, "Error in XI file. Excess samples in file." },
-	{	SFE_XI_NO_PIPE			, "Error : not able to operate on XI files over a pipe." },
-
-	{	SFE_HTK_NO_PIPE			, "Error : not able to operate on HTK files over a pipe." },
-
-	{	SFE_SDS_NOT_SDS			, "Error : not an SDS file." },
-	{	SFE_SDS_BAD_BIT_WIDTH	, "Error : bad bit width for SDS file." },
-
-	{	SFE_SD2_FD_DISALLOWED	, "Error : cannot open SD2 file without a file name." },
-	{	SFE_SD2_BAD_DATA_OFFSET	, "Error : bad data offset." },
-	{	SFE_SD2_BAD_MAP_OFFSET	, "Error : bad map offset." },
-	{	SFE_SD2_BAD_DATA_LENGTH	, "Error : bad data length." },
-	{	SFE_SD2_BAD_MAP_LENGTH	, "Error : bad map length." },
-	{	SFE_SD2_BAD_RSRC		, "Error : bad resource fork." },
-	{	SFE_SD2_BAD_SAMPLE_SIZE	, "Error : bad sample size." },
-
-	{	SFE_FLAC_BAD_HEADER		, "Error : bad flac header." },
-	{	SFE_FLAC_NEW_DECODER	, "Error : problem while creating flac decoder." },
-	{	SFE_FLAC_INIT_DECODER	, "Error : problem while initialization of the flac decoder." },
-	{	SFE_FLAC_LOST_SYNC		, "Error : flac decoder lost sync." },
-	{	SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." },
-	{	SFE_FLAC_UNKOWN_ERROR	, "Error : unknown error in flac decoder." },
-
-	{	SFE_WVE_NOT_WVE			, "Error : not a WVE file." },
-	{	SFE_WVE_NO_PIPE			, "Error : not able to operate on WVE files over a pipe." },
-
-	{	SFE_DWVW_BAD_BITWIDTH	, "Error : Bad bit width for DWVW encoding. Must be 12, 16 or 24." },
-	{	SFE_G72X_NOT_MONO		, "Error : G72x encoding does not support more than 1 channel." },
-
-	{	SFE_VORBIS_ENCODER_BUG	, "Error : Sample rate chosen is known to trigger a Vorbis encoder bug on this CPU." },
-
-	{	SFE_RF64_NOT_RF64		, "Error : Not an RF64 file." },
-	{	SFE_ALAC_FAIL_TMPFILE	, "Error : Failed to open tmp file for ALAC encoding." },
-
-	{	SFE_BAD_CHUNK_PTR		, "Error : Bad SF_CHUNK_INFO pointer." },
-	{	SFE_UNKNOWN_CHUNK		, "Error : Unknown chunk marker." },
-	{	SFE_BAD_CHUNK_FORMAT	, "Error : Reading/writing chunks from this file format is not supported." },
-	{	SFE_BAD_CHUNK_MARKER	, "Error : Bad chunk marker." },
-	{	SFE_BAD_CHUNK_DATA_PTR	, "Error : Bad data pointer in SF_CHUNK_INFO struct." },
-
-	{	SFE_MAX_ERROR			, "Maximum error number." },
-	{	SFE_MAX_ERROR + 1		, NULL }
-} ;
-
-/*------------------------------------------------------------------------------
-*/
-
-static int 	format_from_extension (SF_PRIVATE *psf) ;
-static int	guess_file_type (SF_PRIVATE *psf) ;
-static int	validate_sfinfo (SF_INFO *sfinfo) ;
-static int	validate_psf (SF_PRIVATE *psf) ;
-static void	save_header_info (SF_PRIVATE *psf) ;
-static void	copy_filename (SF_PRIVATE *psf, const char *path) ;
-static int	psf_close (SF_PRIVATE *psf) ;
-
-static int	try_resource_fork (SF_PRIVATE * psf) ;
-
-/*------------------------------------------------------------------------------
-** Private (static) variables.
-*/
-
-int	sf_errno = 0 ;
-static char	sf_parselog [SF_BUFFER_LEN] = { 0 } ;
-static char	sf_syserr [SF_SYSERR_LEN] = { 0 } ;
-
-/*------------------------------------------------------------------------------
-*/
-
-#define	VALIDATE_SNDFILE_AND_ASSIGN_PSF(a, b, c)	\
-		{	if ((a) == NULL)						\
-			{	sf_errno = SFE_BAD_SNDFILE_PTR ;	\
-				return 0 ;							\
-				} ;									\
-			(b) = (SF_PRIVATE*) (a) ;				\
-			if ((b)->virtual_io == SF_FALSE &&		\
-				psf_file_valid (b) == 0)			\
-			{	(b)->error = SFE_BAD_FILE_PTR ;		\
-				return 0 ;							\
-				} ;									\
-			if ((b)->Magick != SNDFILE_MAGICK)		\
-			{	(b)->error = SFE_BAD_SNDFILE_PTR ;	\
-				return 0 ;							\
-				} ;									\
-			if (c) (b)->error = 0 ;					\
-			}
-
-/*------------------------------------------------------------------------------
-**	Public functions.
-*/
-
-SNDFILE*
-sf_open	(const char *path, int mode, SF_INFO *sfinfo)
-{	SF_PRIVATE 	*psf ;
-
-	/* Ultimate sanity check. */
-	assert (sizeof (sf_count_t) == 8) ;
-
-	if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-	{	sf_errno = SFE_MALLOC_FAILED ;
-		return	NULL ;
-		} ;
-
-	psf_init_files (psf) ;
-
-	psf_log_printf (psf, "File : %s\n", path) ;
-
-	copy_filename (psf, path) ;
-
-	psf->file.mode = mode ;
-	if (strcmp (path, "-") == 0)
-		psf->error = psf_set_stdio (psf) ;
-	else
-		psf->error = psf_fopen (psf) ;
-
-	return psf_open_file (psf, sfinfo) ;
-} /* sf_open */
-
-SNDFILE*
-sf_open_fd	(int fd, int mode, SF_INFO *sfinfo, int close_desc)
-{	SF_PRIVATE 	*psf ;
-
-	if ((SF_CONTAINER (sfinfo->format)) == SF_FORMAT_SD2)
-	{	sf_errno = SFE_SD2_FD_DISALLOWED ;
-		return	NULL ;
-		} ;
-
-	if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-	{	sf_errno = SFE_MALLOC_FAILED ;
-		return	NULL ;
-		} ;
-
-	psf_init_files (psf) ;
-	copy_filename (psf, "") ;
-
-	psf->file.mode = mode ;
-	psf_set_file (psf, fd) ;
-	psf->is_pipe = psf_is_pipe (psf) ;
-	psf->fileoffset = psf_ftell (psf) ;
-
-	if (! close_desc)
-		psf->file.do_not_close_descriptor = SF_TRUE ;
-
-	return psf_open_file (psf, sfinfo) ;
-} /* sf_open_fd */
-
-SNDFILE*
-sf_open_virtual	(SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data)
-{	SF_PRIVATE 	*psf ;
-
-	/* Make sure we have a valid set ot virtual pointers. */
-	if (sfvirtual->get_filelen == NULL || sfvirtual->seek == NULL || sfvirtual->tell == NULL)
-	{	sf_errno = SFE_BAD_VIRTUAL_IO ;
-		snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_get_filelen / vio_seek / vio_tell in SF_VIRTUAL_IO struct.\n") ;
-		return NULL ;
-		} ;
-
-	if ((mode == SFM_READ || mode == SFM_RDWR) && sfvirtual->read == NULL)
-	{	sf_errno = SFE_BAD_VIRTUAL_IO ;
-		snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_read in SF_VIRTUAL_IO struct.\n") ;
-		return NULL ;
-		} ;
-
-	if ((mode == SFM_WRITE || mode == SFM_RDWR) && sfvirtual->write == NULL)
-	{	sf_errno = SFE_BAD_VIRTUAL_IO ;
-		snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_write in SF_VIRTUAL_IO struct.\n") ;
-		return NULL ;
-		} ;
-
-	if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-	{	sf_errno = SFE_MALLOC_FAILED ;
-		return	NULL ;
-		} ;
-
-	psf_init_files (psf) ;
-
-	psf->virtual_io = SF_TRUE ;
-	psf->vio = *sfvirtual ;
-	psf->vio_user_data = user_data ;
-
-	psf->file.mode = mode ;
-
-	return psf_open_file (psf, sfinfo) ;
-} /* sf_open_virtual */
-
-int
-sf_close	(SNDFILE *sndfile)
-{	SF_PRIVATE	*psf ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	return psf_close (psf) ;
-} /* sf_close */
-
-void
-sf_write_sync	(SNDFILE *sndfile)
-{	SF_PRIVATE	*psf ;
-
-	if ((psf = (SF_PRIVATE *) sndfile) == NULL)
-		return ;
-
-	psf_fsync (psf) ;
-
-	return ;
-} /* sf_write_sync */
-
-/*==============================================================================
-*/
-
-const char*
-sf_error_number	(int errnum)
-{	static const char *bad_errnum =
-		"No error defined for this error number. This is a bug in libsndfile." ;
-	int	k ;
-
-	if (errnum == SFE_MAX_ERROR)
-		return SndfileErrors [0].str ;
-
-	if (errnum < 0 || errnum > SFE_MAX_ERROR)
-	{	/* This really shouldn't happen in release versions. */
-		printf ("Not a valid error number (%d).\n", errnum) ;
-		return bad_errnum ;
-		} ;
-
-	for (k = 0 ; SndfileErrors [k].str ; k++)
-		if (errnum == SndfileErrors [k].error)
-			return SndfileErrors [k].str ;
-
-	return bad_errnum ;
-} /* sf_error_number */
-
-const char*
-sf_strerror (SNDFILE *sndfile)
-{	SF_PRIVATE 	*psf = NULL ;
-	int errnum ;
-
-	if (sndfile == NULL)
-	{	errnum = sf_errno ;
-		if (errnum == SFE_SYSTEM && sf_syserr [0])
-			return sf_syserr ;
-		}
-	else
-	{	psf = (SF_PRIVATE *) sndfile ;
-
-		if (psf->Magick != SNDFILE_MAGICK)
-			return	"sf_strerror : Bad magic number." ;
-
-		errnum = psf->error ;
-
-		if (errnum == SFE_SYSTEM && psf->syserr [0])
-			return psf->syserr ;
-		} ;
-
-	return sf_error_number (errnum) ;
-} /* sf_strerror */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_error (SNDFILE *sndfile)
-{	SF_PRIVATE	*psf ;
-
-	if (sndfile == NULL)
-		return sf_errno ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	return 0 ;
-} /* sf_error */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_perror (SNDFILE *sndfile)
-{	SF_PRIVATE 	*psf ;
-	int 		errnum ;
-
-	if (sndfile == NULL)
-	{	errnum = sf_errno ;
-		}
-	else
-	{	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-		errnum = psf->error ;
-		} ;
-
-	fprintf (stderr, "%s\n", sf_error_number (errnum)) ;
-	return SFE_NO_ERROR ;
-} /* sf_perror */
-
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_error_str (SNDFILE *sndfile, char *str, size_t maxlen)
-{	SF_PRIVATE 	*psf ;
-	int 		errnum ;
-
-	if (str == NULL)
-		return SFE_INTERNAL ;
-
-	if (sndfile == NULL)
-		errnum = sf_errno ;
-	else
-	{	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-		errnum = psf->error ;
-		} ;
-
-	snprintf (str, maxlen, "%s", sf_error_number (errnum)) ;
-
-	return SFE_NO_ERROR ;
-} /* sf_error_str */
-
-/*==============================================================================
-*/
-
-int
-sf_format_check	(const SF_INFO *info)
-{	int	subformat, endian ;
-
-	subformat = SF_CODEC (info->format) ;
-	endian = SF_ENDIAN (info->format) ;
-
-	/* This is the place where each file format can check if the suppiled
-	** SF_INFO struct is valid.
-	** Return 0 on failure, 1 ons success.
-	*/
-
-	if (info->channels < 1 || info->channels > SF_MAX_CHANNELS)
-		return 0 ;
-
-	if (info->samplerate < 0)
-		return 0 ;
-
-	switch (SF_CONTAINER (info->format))
-	{	case SF_FORMAT_WAV :
-				/* WAV now allows both endian, RIFF or RIFX (little or big respectively) */
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2)
-					return 1 ;
-				if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_G721_32 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_WAVEX :
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_AIFF :
-				/* AIFF does allow both endian-nesses for PCM data.*/
-				if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				/* For other encodings reject any endian-ness setting. */
-				if (endian != 0)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 ||
-							subformat == SF_FORMAT_DWVW_24) && info-> channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_IMA_ADPCM && (info->channels == 1 || info->channels == 2))
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_AU :
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				if (subformat == SF_FORMAT_G721_32 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_G723_24 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_G723_40 && info->channels == 1)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_CAF :
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_ALAC_16 || subformat == SF_FORMAT_ALAC_20)
-					return 1 ;
-				if (subformat == SF_FORMAT_ALAC_24 || subformat == SF_FORMAT_ALAC_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_RAW :
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				if (subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_ULAW)
-					return 1 ;
-				if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 ||
-							subformat == SF_FORMAT_DWVW_24) && info-> channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_VOX_ADPCM && info->channels == 1)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_PAF :
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_SVX :
-				/* SVX only supports writing mono SVX files. */
-				if (info->channels > 1)
-					return 0 ;
-				/* Always big endian. */
-				if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-					return 0 ;
-
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_NIST :
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_IRCAM :
-				if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_FLOAT)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_VOC :
-				/* VOC is strictly little endian. */
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_W64 :
-				/* W64 is strictly little endian. */
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2)
-					return 1 ;
-				if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_MAT4 :
-				if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_MAT5 :
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_PVF :
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_XI :
-				if (info->channels != 1)
-					return 0 ;
-				if (subformat == SF_FORMAT_DPCM_8 || subformat == SF_FORMAT_DPCM_16)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_HTK :
-				/* HTK is strictly big endian. */
-				if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (info->channels != 1)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_SDS :
-				/* SDS is strictly big endian. */
-				if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (info->channels != 1)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_AVR :
-				/* SDS is strictly big endian. */
-				if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (info->channels > 2)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_FLAC :
-				/* FLAC can't do more than 8 channels. */
-				if (info->channels > 8)
-					return 0 ;
-				if (endian != SF_ENDIAN_FILE)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_SD2 :
-				/* SD2 is strictly big endian. */
-				if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_WVE :
-				/* WVE is strictly big endian. */
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (info->channels > 1)
-					return 0 ;
-				if (subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_OGG :
-				if (endian != SF_ENDIAN_FILE)
-					return 0 ;
-				if (subformat == SF_FORMAT_VORBIS)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_MPC2K :
-				/* MPC2000 is strictly little endian. */
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (info->channels > 2)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				break ;
-
-		case SF_FORMAT_RF64 :
-				if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-					return 0 ;
-				if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-					return 1 ;
-				if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-					return 1 ;
-				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-					return 1 ;
-				if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-					return 1 ;
-				break ;
-		default : break ;
-		} ;
-
-	return 0 ;
-} /* sf_format_check */
-
-/*------------------------------------------------------------------------------
-*/
-
-const char *
-sf_version_string (void)
-{
-#if	ENABLE_EXPERIMENTAL_CODE
-	return PACKAGE_NAME "-" PACKAGE_VERSION "-exp" ;
-#else
-	return PACKAGE_NAME "-" PACKAGE_VERSION ;
-#endif
-}
-
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_command	(SNDFILE *sndfile, int command, void *data, int datasize)
-{	SF_PRIVATE *psf = (SF_PRIVATE *) sndfile ;
-	double quality ;
-	int old_value ;
-
-	/* This set of commands do not need the sndfile parameter. */
-	switch (command)
-	{	case SFC_GET_LIB_VERSION :
-			if (data == NULL)
-			{	if (psf)
-					psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SFE_BAD_COMMAND_PARAM ;
-				} ;
-			snprintf (data, datasize, "%s", sf_version_string ()) ;
-			return strlen (data) ;
-
-		case SFC_GET_SIMPLE_FORMAT_COUNT :
-			if (data == NULL || datasize != SIGNED_SIZEOF (int))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			*((int*) data) = psf_get_format_simple_count () ;
-			return 0 ;
-
-		case SFC_GET_SIMPLE_FORMAT :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			return psf_get_format_simple (data) ;
-
-		case SFC_GET_FORMAT_MAJOR_COUNT :
-			if (data == NULL || datasize != SIGNED_SIZEOF (int))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			*((int*) data) = psf_get_format_major_count () ;
-			return 0 ;
-
-		case SFC_GET_FORMAT_MAJOR :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			return psf_get_format_major (data) ;
-
-		case SFC_GET_FORMAT_SUBTYPE_COUNT :
-			if (data == NULL || datasize != SIGNED_SIZEOF (int))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			*((int*) data) = psf_get_format_subtype_count () ;
-			return 0 ;
-
-		case SFC_GET_FORMAT_SUBTYPE :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			return psf_get_format_subtype (data) ;
-
-		case SFC_GET_FORMAT_INFO :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			return psf_get_format_info (data) ;
-		} ;
-
-	if (sndfile == NULL && command == SFC_GET_LOG_INFO)
-	{	if (data == NULL)
-			return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-		snprintf (data, datasize, "%s", sf_parselog) ;
-		return strlen (data) ;
-		} ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	switch (command)
-	{	case SFC_SET_NORM_FLOAT :
-			old_value = psf->norm_float ;
-			psf->norm_float = (datasize) ? SF_TRUE : SF_FALSE ;
-			return old_value ;
-
-		case SFC_GET_CURRENT_SF_INFO :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_INFO))
-				return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-			memcpy (data, &psf->sf, sizeof (SF_INFO)) ;
-			break ;
-
-		case SFC_SET_NORM_DOUBLE :
-			old_value = psf->norm_double ;
-			psf->norm_double = (datasize) ? SF_TRUE : SF_FALSE ;
-			return old_value ;
-
-		case SFC_GET_NORM_FLOAT :
-			return psf->norm_float ;
-
-		case SFC_GET_NORM_DOUBLE :
-			return psf->norm_double ;
-
-		case SFC_SET_SCALE_FLOAT_INT_READ :
-			old_value = psf->float_int_mult ;
-
-			psf->float_int_mult = (datasize != 0) ? SF_TRUE : SF_FALSE ;
-			if (psf->float_int_mult && psf->float_max < 0.0)
-				psf->float_max = psf_calc_signal_max (psf, SF_FALSE) ;
-			return old_value ;
-
-		case SFC_SET_SCALE_INT_FLOAT_WRITE :
-			old_value = psf->scale_int_float ;
-			psf->scale_int_float = (datasize != 0) ? SF_TRUE : SF_FALSE ;
-			return old_value ;
-
-		case SFC_SET_ADD_PEAK_CHUNK :
-			{	int format = SF_CONTAINER (psf->sf.format) ;
-
-				/* Only WAV and AIFF support the PEAK chunk. */
-				switch (format)
-				{	case SF_FORMAT_AIFF :
-					case SF_FORMAT_CAF :
-					case SF_FORMAT_WAV :
-					case SF_FORMAT_WAVEX :
-						break ;
-
-					default :
-						return SF_FALSE ;
-					} ;
-
-				format = SF_CODEC (psf->sf.format) ;
-
-				/* Only files containg the following data types support the PEAK chunk. */
-				if (format != SF_FORMAT_FLOAT && format != SF_FORMAT_DOUBLE)
-					return SF_FALSE ;
-
-				} ;
-			/* Can only do this is in SFM_WRITE mode. */
-			if (psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-				return SF_FALSE ;
-			/* If data has already been written this must fail. */
-			if (psf->have_written)
-			{	psf->error = SFE_CMD_HAS_DATA ;
-				return SF_FALSE ;
-				} ;
-			/* Everything seems OK, so set psf->has_peak and re-write header. */
-			if (datasize == SF_FALSE && psf->peak_info != NULL)
-			{	free (psf->peak_info) ;
-				psf->peak_info = NULL ;
-				}
-			else if (psf->peak_info == NULL)
-			{	psf->peak_info = peak_info_calloc (psf->sf.channels) ;
-				if (psf->peak_info != NULL)
-					psf->peak_info->peak_loc = SF_PEAK_START ;
-				} ;
-
-			if (psf->write_header)
-				psf->write_header (psf, SF_TRUE) ;
-			return datasize ;
-
-		case SFC_SET_ADD_HEADER_PAD_CHUNK :
-			return SF_FALSE ;
-
-		case SFC_GET_LOG_INFO :
-			if (data == NULL)
-				return SFE_BAD_COMMAND_PARAM ;
-			snprintf (data, datasize, "%s", psf->parselog.buf) ;
-			break ;
-
-		case SFC_CALC_SIGNAL_MAX :
-			if (data == NULL || datasize != sizeof (double))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			*((double*) data) = psf_calc_signal_max (psf, SF_FALSE) ;
-			break ;
-
-		case SFC_CALC_NORM_SIGNAL_MAX :
-			if (data == NULL || datasize != sizeof (double))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			*((double*) data) = psf_calc_signal_max (psf, SF_TRUE) ;
-			break ;
-
-		case SFC_CALC_MAX_ALL_CHANNELS :
-			if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			return psf_calc_max_all_channels (psf, (double*) data, SF_FALSE) ;
-
-		case SFC_CALC_NORM_MAX_ALL_CHANNELS :
-			if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			return psf_calc_max_all_channels (psf, (double*) data, SF_TRUE) ;
-
-		case SFC_GET_SIGNAL_MAX :
-			if (data == NULL || datasize != sizeof (double))
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			return psf_get_signal_max (psf, (double *) data) ;
-
-		case SFC_GET_MAX_ALL_CHANNELS :
-			if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			return psf_get_max_all_channels (psf, (double*) data) ;
-
-		case SFC_UPDATE_HEADER_NOW :
-			if (psf->write_header)
-				psf->write_header (psf, SF_TRUE) ;
-			break ;
-
-		case SFC_SET_UPDATE_HEADER_AUTO :
-			psf->auto_header = datasize ? SF_TRUE : SF_FALSE ;
-			return psf->auto_header ;
-			break ;
-
-		case SFC_SET_ADD_DITHER_ON_WRITE :
-		case SFC_SET_ADD_DITHER_ON_READ :
-			/*
-			** FIXME !
-			** These are obsolete. Just return.
-			** Remove some time after version 1.0.8.
-			*/
-			break ;
-
-		case SFC_SET_DITHER_ON_WRITE :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			memcpy (&psf->write_dither, data, sizeof (psf->write_dither)) ;
-			if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-				dither_init (psf, SFM_WRITE) ;
-			break ;
-
-		case SFC_SET_DITHER_ON_READ :
-			if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			memcpy (&psf->read_dither, data, sizeof (psf->read_dither)) ;
-			if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-				dither_init (psf, SFM_READ) ;
-			break ;
-
-		case SFC_FILE_TRUNCATE :
-			if (psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-				return SF_TRUE ;
-			if (datasize != sizeof (sf_count_t))
-				return SF_TRUE ;
-			if (data == NULL || datasize != sizeof (sf_count_t))
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				}
-			else
-			{	sf_count_t position ;
-
-				position = *((sf_count_t*) data) ;
-
-				if (sf_seek (sndfile, position, SEEK_SET) != position)
-					return SF_TRUE ;
-
-				psf->sf.frames = position ;
-
-				position = psf_fseek (psf, 0, SEEK_CUR) ;
-
-				return psf_ftruncate (psf, position) ;
-				} ;
-			break ;
-
-		case SFC_SET_RAW_START_OFFSET :
-			if (data == NULL || datasize != sizeof (sf_count_t))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-			if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_RAW)
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-			psf->dataoffset = *((sf_count_t*) data) ;
-			sf_seek (sndfile, 0, SEEK_CUR) ;
-			break ;
-
-		case SFC_GET_EMBED_FILE_INFO :
-			if (data == NULL || datasize != sizeof (SF_EMBED_FILE_INFO))
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-			((SF_EMBED_FILE_INFO*) data)->offset = psf->fileoffset ;
-			((SF_EMBED_FILE_INFO*) data)->length = psf->filelength ;
-			break ;
-
-		/* Lite remove start */
-		case SFC_TEST_IEEE_FLOAT_REPLACE :
-			psf->ieee_replace = (datasize) ? SF_TRUE : SF_FALSE ;
-			if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_FLOAT)
-				float32_init (psf) ;
-			else if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_DOUBLE)
-				double64_init (psf) ;
-			else
-				return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-			break ;
-		/* Lite remove end */
-
-		case SFC_SET_CLIPPING :
-			psf->add_clipping = (datasize) ? SF_TRUE : SF_FALSE ;
-			return psf->add_clipping ;
-
-		case SFC_GET_CLIPPING :
-			return psf->add_clipping ;
-
-		case SFC_GET_LOOP_INFO :
-			if (datasize != sizeof (SF_LOOP_INFO) || data == NULL)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			if (psf->loop_info == NULL)
-				return SF_FALSE ;
-			memcpy (data, psf->loop_info, sizeof (SF_LOOP_INFO)) ;
-			return SF_TRUE ;
-
-		case SFC_SET_BROADCAST_INFO :
-			{	int format = SF_CONTAINER (psf->sf.format) ;
-
-				/* Only WAV and RF64 supports the BEXT (Broadcast) chunk. */
-				if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX && format != SF_FORMAT_RF64)
-					return SF_FALSE ;
-				} ;
-
-			/* Only makes sense in SFM_WRITE or SFM_RDWR mode. */
-			if ((psf->file.mode != SFM_WRITE) && (psf->file.mode != SFM_RDWR))
-				return SF_FALSE ;
-			/* If data has already been written this must fail. */
-			if (psf->broadcast_16k == NULL && psf->have_written)
-			{	psf->error = SFE_CMD_HAS_DATA ;
-				return SF_FALSE ;
-				} ;
-
-			if (NOT (broadcast_var_set (psf, data, datasize)))
-				return SF_FALSE ;
-
-			if (psf->write_header)
-				psf->write_header (psf, SF_TRUE) ;
-			return SF_TRUE ;
-
-		case SFC_GET_BROADCAST_INFO :
-			if (data == NULL)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			return broadcast_var_get (psf, data, datasize) ;
-
-		case SFC_SET_CART_INFO :
-			{	int format = SF_CONTAINER (psf->sf.format) ;
-				/* Only WAV and RF64 support cart chunk format */
-				if (format != SF_FORMAT_WAV && format != SF_FORMAT_RF64)
-					return SF_FALSE ;
-				} ;
-
-			/* Only makes sense in SFM_WRITE or SFM_RDWR mode */
-			if ((psf->file.mode != SFM_WRITE) && (psf->file.mode != SFM_RDWR))
-				return SF_FALSE ;
-			/* If data has already been written this must fail. */
-			if (psf->cart_16k == NULL && psf->have_written)
-			{	psf->error = SFE_CMD_HAS_DATA ;
-				return SF_FALSE ;
-				} ;
-			if (NOT (cart_var_set (psf, data, datasize)))
-				return SF_FALSE ;
-			if (psf->write_header)
-				psf->write_header (psf, SF_TRUE) ;
-			return SF_TRUE ;
-
-		case SFC_GET_CART_INFO :
-			if (data == NULL)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			return cart_var_get (psf, data, datasize) ;
-
-		case SFC_GET_INSTRUMENT :
-			if (datasize != sizeof (SF_INSTRUMENT) || data == NULL)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-			if (psf->instrument == NULL)
-				return SF_FALSE ;
-			memcpy (data, psf->instrument, sizeof (SF_INSTRUMENT)) ;
-			return SF_TRUE ;
-
-		case SFC_SET_INSTRUMENT :
-			/* If data has already been written this must fail. */
-			if (psf->have_written)
-			{	psf->error = SFE_CMD_HAS_DATA ;
-				return SF_FALSE ;
-				} ;
-			if (datasize != sizeof (SF_INSTRUMENT) || data == NULL)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-
-			if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-			{	psf->error = SFE_MALLOC_FAILED ;
-				return SF_FALSE ;
-				} ;
-			memcpy (psf->instrument, data, sizeof (SF_INSTRUMENT)) ;
-			return SF_TRUE ;
-
-		case SFC_RAW_DATA_NEEDS_ENDSWAP :
-			return psf->data_endswap ;
-
-		case SFC_GET_CHANNEL_MAP_INFO :
-			if (psf->channel_map == NULL)
-				return SF_FALSE ;
-
-			if (data == NULL || datasize != SIGNED_SIZEOF (psf->channel_map [0]) * psf->sf.channels)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-
-			memcpy (data, psf->channel_map, datasize) ;
-			return SF_TRUE ;
-
-		case SFC_SET_CHANNEL_MAP_INFO :
-			if (psf->have_written)
-			{	psf->error = SFE_CMD_HAS_DATA ;
-				return SF_FALSE ;
-				} ;
-			if (data == NULL || datasize != SIGNED_SIZEOF (psf->channel_map [0]) * psf->sf.channels)
-			{	psf->error = SFE_BAD_COMMAND_PARAM ;
-				return SF_FALSE ;
-				} ;
-
-			{	int *iptr ;
-
-				for (iptr = data ; iptr < (int*) data + psf->sf.channels ; iptr++)
-				{	if (*iptr <= SF_CHANNEL_MAP_INVALID || *iptr >= SF_CHANNEL_MAP_MAX)
-					{	psf->error = SFE_BAD_COMMAND_PARAM ;
-						return SF_FALSE ;
-						} ;
-					} ;
-				} ;
-
-			free (psf->channel_map) ;
-			if ((psf->channel_map = malloc (datasize)) == NULL)
-			{	psf->error = SFE_MALLOC_FAILED ;
-				return SF_FALSE ;
-				} ;
-
-			memcpy (psf->channel_map, data, datasize) ;
-
-			/*
-			**	Pass the command down to the container's command handler.
-			**	Don't pass user data, use validated psf->channel_map data instead.
-			*/
-			if (psf->command)
-				return psf->command (psf, command, NULL, 0) ;
-			return SF_FALSE ;
-
-		case SFC_SET_VBR_ENCODING_QUALITY :
-			if (data == NULL || datasize != sizeof (double))
-				return SF_FALSE ;
-
-			quality = *((double *) data) ;
-			quality = 1.0 - SF_MAX (0.0, SF_MIN (1.0, quality)) ;
-			return sf_command (sndfile, SFC_SET_COMPRESSION_LEVEL, &quality, sizeof (quality)) ;
-
-
-		default :
-			/* Must be a file specific command. Pass it on. */
-			if (psf->command)
-				return psf->command (psf, command, data, datasize) ;
-
-			psf_log_printf (psf, "*** sf_command : cmd = 0x%X\n", command) ;
-			return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-		} ;
-
-	return 0 ;
-} /* sf_command */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_seek	(SNDFILE *sndfile, sf_count_t offset, int whence)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	seek_from_start = 0, retval ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (! psf->sf.seekable)
-	{	psf->error = SFE_NOT_SEEKABLE ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	/* If the whence parameter has a mode ORed in, check to see that
-	** it makes sense.
-	*/
-	if (((whence & SFM_MASK) == SFM_WRITE && psf->file.mode == SFM_READ) ||
-			((whence & SFM_MASK) == SFM_READ && psf->file.mode == SFM_WRITE))
-	{	psf->error = SFE_WRONG_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	/* Convert all SEEK_CUR and SEEK_END into seek_from_start to be
-	** used with SEEK_SET.
-	*/
-	switch (whence)
-	{	/* The SEEK_SET behaviour is independant of mode. */
-		case SEEK_SET :
-		case SEEK_SET | SFM_READ :
-		case SEEK_SET | SFM_WRITE :
-		case SEEK_SET | SFM_RDWR :
-				seek_from_start = offset ;
-				break ;
-
-		/* The SEEK_CUR is a little more tricky. */
-		case SEEK_CUR :
-				if (offset == 0)
-				{	if (psf->file.mode == SFM_READ)
-						return psf->read_current ;
-					if (psf->file.mode == SFM_WRITE)
-						return psf->write_current ;
-					} ;
-				if (psf->file.mode == SFM_READ)
-					seek_from_start = psf->read_current + offset ;
-				else if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-					seek_from_start = psf->write_current + offset ;
-				else
-					psf->error = SFE_AMBIGUOUS_SEEK ;
-				break ;
-
-		case SEEK_CUR | SFM_READ :
-				if (offset == 0)
-					return psf->read_current ;
-				seek_from_start = psf->read_current + offset ;
-				break ;
-
-		case SEEK_CUR | SFM_WRITE :
-				if (offset == 0)
-					return psf->write_current ;
-				seek_from_start = psf->write_current + offset ;
-				break ;
-
-		/* The SEEK_END */
-		case SEEK_END :
-		case SEEK_END | SFM_READ :
-		case SEEK_END | SFM_WRITE :
-				seek_from_start = psf->sf.frames + offset ;
-				break ;
-
-		default :
-				psf->error = SFE_BAD_SEEK ;
-				break ;
-		} ;
-
-	if (psf->error)
-		return PSF_SEEK_ERROR ;
-
-	if (psf->file.mode == SFM_RDWR || psf->file.mode == SFM_WRITE)
-	{	if (seek_from_start < 0)
-		{	psf->error = SFE_BAD_SEEK ;
-			return PSF_SEEK_ERROR ;
-			} ;
-		}
-	else if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
-	{	psf->error = SFE_BAD_SEEK ;
-		return PSF_SEEK_ERROR ;
-		} ;
-
-	if (psf->seek)
-	{	int new_mode = (whence & SFM_MASK) ? (whence & SFM_MASK) : psf->file.mode ;
-
-		retval = psf->seek (psf, new_mode, seek_from_start) ;
-
-		switch (new_mode)
-		{	case SFM_READ :
-					psf->read_current = retval ;
-					break ;
-			case SFM_WRITE :
-					psf->write_current = retval ;
-					break ;
-			case SFM_RDWR :
-					psf->read_current = retval ;
-					psf->write_current = retval ;
-					new_mode = SFM_READ ;
-					break ;
-			} ;
-
-		psf->last_op = new_mode ;
-
-		return retval ;
-		} ;
-
-	psf->error = SFE_AMBIGUOUS_SEEK ;
-	return PSF_SEEK_ERROR ;
-} /* sf_seek */
-
-/*------------------------------------------------------------------------------
-*/
-
-const char*
-sf_get_string (SNDFILE *sndfile, int str_type)
-{	SF_PRIVATE 	*psf ;
-
-	if ((psf = (SF_PRIVATE*) sndfile) == NULL)
-		return NULL ;
-	if (psf->Magick != SNDFILE_MAGICK)
-		return NULL ;
-
-	return psf_get_string (psf, str_type) ;
-} /* sf_get_string */
-
-int
-sf_set_string (SNDFILE *sndfile, int str_type, const char* str)
-{	SF_PRIVATE 	*psf ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	return psf_set_string (psf, str_type, str) ;
-} /* sf_get_string */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_current_byterate (SNDFILE *sndfile)
-{	SF_PRIVATE 	*psf ;
-
-	if ((psf = (SF_PRIVATE*) sndfile) == NULL)
-		return -1 ;
-	if (psf->Magick != SNDFILE_MAGICK)
-		return -1 ;
-
-	/* This should cover all PCM and floating point formats. */
-	if (psf->bytewidth)
-		return psf->sf.samplerate * psf->sf.channels * psf->bytewidth ;
-
-	if (psf->byterate)
-		return psf->byterate (psf) ;
-
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_IMA_ADPCM :
-		case SF_FORMAT_MS_ADPCM :
-		case SF_FORMAT_VOX_ADPCM :
-			return (psf->sf.samplerate * psf->sf.channels) / 2 ;
-
-		case SF_FORMAT_GSM610 :
-			return (psf->sf.samplerate * psf->sf.channels * 13000) / 8000 ;
-
-		case SF_FORMAT_G721_32 :	/* 32kbs G721 ADPCM encoding. */
-			return (psf->sf.samplerate * psf->sf.channels) / 2 ;
-
-		case SF_FORMAT_G723_24 :	/* 24kbs G723 ADPCM encoding. */
-			return (psf->sf.samplerate * psf->sf.channels * 3) / 8 ;
-
-		case SF_FORMAT_G723_40 :	/* 40kbs G723 ADPCM encoding. */
-			return (psf->sf.samplerate * psf->sf.channels * 5) / 8 ;
-
-		default :
-			break ;
-		} ;
-
-	return -1 ;
-} /* sf_current_byterate */
-
-/*==============================================================================
-*/
-
-sf_count_t
-sf_read_raw		(SNDFILE *sndfile, void *ptr, sf_count_t bytes)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-	int			bytewidth, blockwidth ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ;
-	blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return	0 ;
-		} ;
-
-	if (bytes < 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, bytes) ;
-		return 0 ;
-		} ;
-
-	if (bytes % (psf->sf.channels * bytewidth))
-	{	psf->error = SFE_BAD_READ_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf_fread (ptr, 1, bytes, psf) ;
-
-	if (psf->read_current + count / blockwidth <= psf->sf.frames)
-		psf->read_current += count / blockwidth ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * blockwidth ;
-		extra = bytes - count ;
-		psf_memset (((char *) ptr) + count, 0, extra) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count ;
-} /* sf_read_raw */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_short	(SNDFILE *sndfile, short *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_READ_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (len <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, len * sizeof (short)) ;
-		return 0 ; /* End of file. */
-		} ;
-
-	if (psf->read_short == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_short (psf, ptr, len) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = len - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (short)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count ;
-} /* sf_read_short */
-
-sf_count_t
-sf_readf_short		(SNDFILE *sndfile, short *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (frames <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ;
-		return 0 ; /* End of file. */
-		} ;
-
-	if (psf->read_short == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_short (psf, ptr, frames * psf->sf.channels) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = frames * psf->sf.channels - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (short)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count / psf->sf.channels ;
-} /* sf_readf_short */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_int		(SNDFILE *sndfile, int *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_READ_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (len <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, len * sizeof (int)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_int == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_int (psf, ptr, len) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = len - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (int)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count ;
-} /* sf_read_int */
-
-sf_count_t
-sf_readf_int	(SNDFILE *sndfile, int *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (frames <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_int == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_int (psf, ptr, frames * psf->sf.channels) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = frames * psf->sf.channels - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (int)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count / psf->sf.channels ;
-} /* sf_readf_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_float	(SNDFILE *sndfile, float *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_READ_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (len <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, len * sizeof (float)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_float == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_float (psf, ptr, len) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = len - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (float)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count ;
-} /* sf_read_float */
-
-sf_count_t
-sf_readf_float	(SNDFILE *sndfile, float *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (frames <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (float)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_float == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_float (psf, ptr, frames * psf->sf.channels) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = frames * psf->sf.channels - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (float)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count / psf->sf.channels ;
-} /* sf_readf_float */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_double	(SNDFILE *sndfile, double *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_READ_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (len <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, len * sizeof (double)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_double == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_double (psf, ptr, len) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = len - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (double)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count ;
-} /* sf_read_double */
-
-sf_count_t
-sf_readf_double	(SNDFILE *sndfile, double *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count, extra ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->error = SFE_NOT_READMODE ;
-		return 0 ;
-		} ;
-
-	if (frames <= 0 || psf->read_current >= psf->sf.frames)
-	{	psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ;
-		return 0 ;
-		} ;
-
-	if (psf->read_double == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return	0 ;
-		} ;
-
-	if (psf->last_op != SFM_READ)
-		if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-			return 0 ;
-
-	count = psf->read_double (psf, ptr, frames * psf->sf.channels) ;
-
-	if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-		psf->read_current += count / psf->sf.channels ;
-	else
-	{	count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-		extra = frames * psf->sf.channels - count ;
-		psf_memset (ptr + count, 0, extra * sizeof (double)) ;
-		psf->read_current = psf->sf.frames ;
-		} ;
-
-	psf->last_op = SFM_READ ;
-
-	return count / psf->sf.channels ;
-} /* sf_readf_double */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_raw	(SNDFILE *sndfile, const void *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-	int			bytewidth, blockwidth ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ;
-	blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (len % (psf->sf.channels * bytewidth))
-	{	psf->error = SFE_BAD_WRITE_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf_fwrite (ptr, 1, len, psf) ;
-
-	psf->write_current += count / blockwidth ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count ;
-} /* sf_write_raw */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_short	(SNDFILE *sndfile, const short *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_WRITE_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (psf->write_short == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_short (psf, ptr, len) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count ;
-} /* sf_write_short */
-
-sf_count_t
-sf_writef_short	(SNDFILE *sndfile, const short *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (psf->write_short == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_short (psf, ptr, frames * psf->sf.channels) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count / psf->sf.channels ;
-} /* sf_writef_short */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_int	(SNDFILE *sndfile, const int *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_WRITE_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (psf->write_int == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_int (psf, ptr, len) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count ;
-} /* sf_write_int */
-
-sf_count_t
-sf_writef_int	(SNDFILE *sndfile, const int *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (psf->write_int == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_int (psf, ptr, frames * psf->sf.channels) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count / psf->sf.channels ;
-} /* sf_writef_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_float	(SNDFILE *sndfile, const float *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_WRITE_ALIGN ;
-		return 0 ;
-		} ;
-
-	if (psf->write_float == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_float (psf, ptr, len) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count ;
-} /* sf_write_float */
-
-sf_count_t
-sf_writef_float	(SNDFILE *sndfile, const float *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (psf->write_float == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_float (psf, ptr, frames * psf->sf.channels) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count / psf->sf.channels ;
-} /* sf_writef_float */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_double	(SNDFILE *sndfile, const double *ptr, sf_count_t len)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (len % psf->sf.channels)
-	{	psf->error = SFE_BAD_WRITE_ALIGN ;
-		return	0 ;
-		} ;
-
-	if (psf->write_double == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_double (psf, ptr, len) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count ;
-} /* sf_write_double */
-
-sf_count_t
-sf_writef_double	(SNDFILE *sndfile, const double *ptr, sf_count_t frames)
-{	SF_PRIVATE 	*psf ;
-	sf_count_t	count ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->file.mode == SFM_READ)
-	{	psf->error = SFE_NOT_WRITEMODE ;
-		return 0 ;
-		} ;
-
-	if (psf->write_double == NULL || psf->seek == NULL)
-	{	psf->error = SFE_UNIMPLEMENTED ;
-		return 0 ;
-		} ;
-
-	if (psf->last_op != SFM_WRITE)
-		if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-			return 0 ;
-
-	if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-		psf->write_header (psf, SF_FALSE) ;
-	psf->have_written = SF_TRUE ;
-
-	count = psf->write_double (psf, ptr, frames * psf->sf.channels) ;
-
-	psf->write_current += count / psf->sf.channels ;
-
-	psf->last_op = SFM_WRITE ;
-
-	if (psf->write_current > psf->sf.frames)
-	{	psf->sf.frames = psf->write_current ;
-		psf->dataend = 0 ;
-		} ;
-
-	if (psf->auto_header && psf->write_header != NULL)
-		psf->write_header (psf, SF_TRUE) ;
-
-	return count / psf->sf.channels ;
-} /* sf_writef_double */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-try_resource_fork (SF_PRIVATE * psf)
-{	int old_error = psf->error ;
-
-	/* Set READ mode now, to see if resource fork exists. */
-	psf->rsrc.mode = SFM_READ ;
-	if (psf_open_rsrc (psf) != 0)
-	{	psf->error = old_error ;
-		return 0 ;
-		} ;
-
-	/* More checking here. */
-	psf_log_printf (psf, "Resource fork : %s\n", psf->rsrc.path.c) ;
-
-	return SF_FORMAT_SD2 ;
-} /* try_resource_fork */
-
-static int
-format_from_extension (SF_PRIVATE *psf)
-{	char *cptr ;
-	char buffer [16] ;
-	int format = 0 ;
-
-	if ((cptr = strrchr (psf->file.name.c, '.')) == NULL)
-		return 0 ;
-
-	cptr ++ ;
-	if (strlen (cptr) > sizeof (buffer) - 1)
-		return 0 ;
-
-	psf_strlcpy (buffer, sizeof (buffer), cptr) ;
-	buffer [sizeof (buffer) - 1] = 0 ;
-
-	/* Convert everything in the buffer to lower case. */
-	cptr = buffer ;
-	while (*cptr)
-	{	*cptr = tolower (*cptr) ;
-		cptr ++ ;
-		} ;
-
-	cptr = buffer ;
-
-	if (strcmp (cptr, "au") == 0)
-	{	psf->sf.channels = 1 ;
-		psf->sf.samplerate = 8000 ;
-		format = SF_FORMAT_RAW | SF_FORMAT_ULAW ;
-		}
-	else if (strcmp (cptr, "snd") == 0)
-	{	psf->sf.channels = 1 ;
-		psf->sf.samplerate = 8000 ;
-		format = SF_FORMAT_RAW | SF_FORMAT_ULAW ;
-		}
-
-	else if (strcmp (cptr, "vox") == 0 || strcmp (cptr, "vox8") == 0)
-	{	psf->sf.channels = 1 ;
-		psf->sf.samplerate = 8000 ;
-		format = SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-		}
-	else if (strcmp (cptr, "vox6") == 0)
-	{	psf->sf.channels = 1 ;
-		psf->sf.samplerate = 6000 ;
-		format = SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-		}
-	else if (strcmp (cptr, "gsm") == 0)
-	{	psf->sf.channels = 1 ;
-		psf->sf.samplerate = 8000 ;
-		format = SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-		}
-
-	/* For RAW files, make sure the dataoffset if set correctly. */
-	if ((SF_CONTAINER (format)) == SF_FORMAT_RAW)
-		psf->dataoffset = 0 ;
-
-	return format ;
-} /* format_from_extension */
-
-static int
-guess_file_type (SF_PRIVATE *psf)
-{	uint32_t buffer [3], format ;
-
-	if (psf_binheader_readf (psf, "b", &buffer, SIGNED_SIZEOF (buffer)) != SIGNED_SIZEOF (buffer))
-	{	psf->error = SFE_BAD_FILE_READ ;
-		return 0 ;
-		} ;
-
-	if ((buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'F') || buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'X'))
-			&& buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E'))
-		return SF_FORMAT_WAV ;
-
-	if (buffer [0] == MAKE_MARKER ('F', 'O', 'R', 'M'))
-	{	if (buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'F') || buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'C'))
-			return SF_FORMAT_AIFF ;
-		if (buffer [2] == MAKE_MARKER ('8', 'S', 'V', 'X') || buffer [2] == MAKE_MARKER ('1', '6', 'S', 'V'))
-			return SF_FORMAT_SVX ;
-		return 0 ;
-		} ;
-
-	if (buffer [0] == MAKE_MARKER ('.', 's', 'n', 'd') || buffer [0] == MAKE_MARKER ('d', 'n', 's', '.'))
-		return SF_FORMAT_AU ;
-
-	if ((buffer [0] == MAKE_MARKER ('f', 'a', 'p', ' ') || buffer [0] == MAKE_MARKER (' ', 'p', 'a', 'f')))
-		return SF_FORMAT_PAF ;
-
-	if (buffer [0] == MAKE_MARKER ('N', 'I', 'S', 'T'))
-		return SF_FORMAT_NIST ;
-
-	if (buffer [0] == MAKE_MARKER ('C', 'r', 'e', 'a') && buffer [1] == MAKE_MARKER ('t', 'i', 'v', 'e'))
-		return SF_FORMAT_VOC ;
-
-	if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0xF8, 0xFF)) == MAKE_MARKER (0x64, 0xA3, 0x00, 0x00) ||
-		(buffer [0] & MAKE_MARKER (0xFF, 0xF8, 0xFF, 0xFF)) == MAKE_MARKER (0x00, 0x00, 0xA3, 0x64))
-		return SF_FORMAT_IRCAM ;
-
-	if (buffer [0] == MAKE_MARKER ('r', 'i', 'f', 'f'))
-		return SF_FORMAT_W64 ;
-
-	if (buffer [0] == MAKE_MARKER (0, 0, 0x03, 0xE8) && buffer [1] == MAKE_MARKER (0, 0, 0, 1) &&
-								buffer [2] == MAKE_MARKER (0, 0, 0, 1))
-		return SF_FORMAT_MAT4 ;
-
-	if (buffer [0] == MAKE_MARKER (0, 0, 0, 0) && buffer [1] == MAKE_MARKER (1, 0, 0, 0) &&
-								buffer [2] == MAKE_MARKER (1, 0, 0, 0))
-		return SF_FORMAT_MAT4 ;
-
-	if (buffer [0] == MAKE_MARKER ('M', 'A', 'T', 'L') && buffer [1] == MAKE_MARKER ('A', 'B', ' ', '5'))
-		return SF_FORMAT_MAT5 ;
-
-	if (buffer [0] == MAKE_MARKER ('P', 'V', 'F', '1'))
-		return SF_FORMAT_PVF ;
-
-	if (buffer [0] == MAKE_MARKER ('E', 'x', 't', 'e') && buffer [1] == MAKE_MARKER ('n', 'd', 'e', 'd') &&
-								buffer [2] == MAKE_MARKER (' ', 'I', 'n', 's'))
-		return SF_FORMAT_XI ;
-
-	if (buffer [0] == MAKE_MARKER ('c', 'a', 'f', 'f') && buffer [2] == MAKE_MARKER ('d', 'e', 's', 'c'))
-		return SF_FORMAT_CAF ;
-
-	if (buffer [0] == MAKE_MARKER ('O', 'g', 'g', 'S'))
-		return SF_FORMAT_OGG ;
-
-	if (buffer [0] == MAKE_MARKER ('A', 'L', 'a', 'w') && buffer [1] == MAKE_MARKER ('S', 'o', 'u', 'n')
-			&& buffer [2] == MAKE_MARKER ('d', 'F', 'i', 'l'))
-		return SF_FORMAT_WVE ;
-
-	if (buffer [0] == MAKE_MARKER ('D', 'i', 'a', 'm') && buffer [1] == MAKE_MARKER ('o', 'n', 'd', 'W')
-			&& buffer [2] == MAKE_MARKER ('a', 'r', 'e', ' '))
-		return SF_FORMAT_DWD ;
-
-	if (buffer [0] == MAKE_MARKER ('L', 'M', '8', '9') || buffer [0] == MAKE_MARKER ('5', '3', 0, 0))
-		return SF_FORMAT_TXW ;
-
-	if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0x80, 0xFF)) == MAKE_MARKER (0xF0, 0x7E, 0, 0x01))
-		return SF_FORMAT_SDS ;
-
-	if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0, 0)) == MAKE_MARKER (1, 4, 0, 0))
-		return SF_FORMAT_MPC2K ;
-
-	if (buffer [0] == MAKE_MARKER ('C', 'A', 'T', ' ') && buffer [2] == MAKE_MARKER ('R', 'E', 'X', '2'))
-		return SF_FORMAT_REX2 ;
-
-	if (buffer [0] == MAKE_MARKER (0x30, 0x26, 0xB2, 0x75) && buffer [1] == MAKE_MARKER (0x8E, 0x66, 0xCF, 0x11))
-		return 0 /*-SF_FORMAT_WMA-*/ ;
-
-	/* HMM (Hidden Markov Model) Tool Kit. */
-	if (2 * BE2H_32 (buffer [0]) + 12 == psf->filelength && buffer [2] == MAKE_MARKER (0, 2, 0, 0))
-		return SF_FORMAT_HTK ;
-
-	if (buffer [0] == MAKE_MARKER ('f', 'L', 'a', 'C'))
-		return SF_FORMAT_FLAC ;
-
-	if (buffer [0] == MAKE_MARKER ('2', 'B', 'I', 'T'))
-		return SF_FORMAT_AVR ;
-
-	if (buffer [0] == MAKE_MARKER ('R', 'F', '6', '4') && buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E'))
-		return SF_FORMAT_RF64 ;
-
-	if (buffer [0] == MAKE_MARKER ('I', 'D', '3', 3))
-	{	psf_log_printf (psf, "Found 'ID3' marker.\n") ;
-		if (id3_skip (psf))
-			return guess_file_type (psf) ;
-		return 0 ;
-		} ;
-
-	/* Turtle Beach SMP 16-bit */
-	if (buffer [0] == MAKE_MARKER ('S', 'O', 'U', 'N') && buffer [1] == MAKE_MARKER ('D', ' ', 'S', 'A'))
-		return 0 ;
-
-	/* Yamaha sampler format. */
-	if (buffer [0] == MAKE_MARKER ('S', 'Y', '8', '0') || buffer [0] == MAKE_MARKER ('S', 'Y', '8', '5'))
-		return 0 ;
-
-	if (buffer [0] == MAKE_MARKER ('a', 'j', 'k', 'g'))
-		return 0 /*-SF_FORMAT_SHN-*/ ;
-
-	/* This must be the last one. */
-	if (psf->filelength > 0 && (format = try_resource_fork (psf)) != 0)
-		return format ;
-
-	return 0 ;
-} /* guess_file_type */
-
-
-static int
-validate_sfinfo (SF_INFO *sfinfo)
-{	if (sfinfo->samplerate < 1)
-		return 0 ;
-	if (sfinfo->frames < 0)
-		return 0 ;
-	if (sfinfo->channels < 1)
-		return 0 ;
-	if ((SF_CONTAINER (sfinfo->format)) == 0)
-		return 0 ;
-	if ((SF_CODEC (sfinfo->format)) == 0)
-		return 0 ;
-	if (sfinfo->sections < 1)
-		return 0 ;
-	return 1 ;
-} /* validate_sfinfo */
-
-static int
-validate_psf (SF_PRIVATE *psf)
-{
-	if (psf->datalength < 0)
-	{	psf_log_printf (psf, "Invalid SF_PRIVATE field : datalength == %D.\n", psf->datalength) ;
-		return 0 ;
-		} ;
-	if (psf->dataoffset < 0)
-	{	psf_log_printf (psf, "Invalid SF_PRIVATE field : dataoffset == %D.\n", psf->dataoffset) ;
-		return 0 ;
-		} ;
-	if (psf->blockwidth && psf->blockwidth != psf->sf.channels * psf->bytewidth)
-	{	psf_log_printf (psf, "Invalid SF_PRIVATE field : channels * bytewidth == %d.\n",
-								psf->sf.channels * psf->bytewidth) ;
-		return 0 ;
-		} ;
-	return 1 ;
-} /* validate_psf */
-
-static void
-save_header_info (SF_PRIVATE *psf)
-{	snprintf (sf_parselog, sizeof (sf_parselog), "%s", psf->parselog.buf) ;
-} /* save_header_info */
-
-static void
-copy_filename (SF_PRIVATE *psf, const char *path)
-{	const char *ccptr ;
-	char *cptr ;
-
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", path) ;
-	if ((ccptr = strrchr (path, '/')) || (ccptr = strrchr (path, '\\')))
-		ccptr ++ ;
-	else
-		ccptr = path ;
-
-	snprintf (psf->file.name.c, sizeof (psf->file.name.c), "%s", ccptr) ;
-
-	/* Now grab the directory. */
-	snprintf (psf->file.dir.c, sizeof (psf->file.dir.c), "%s", path) ;
-	if ((cptr = strrchr (psf->file.dir.c, '/')) || (cptr = strrchr (psf->file.dir.c, '\\')))
-		cptr [1] = 0 ;
-	else
-		psf->file.dir.c [0] = 0 ;
-
-	return ;
-} /* copy_filename */
-
-/*==============================================================================
-*/
-
-static int
-psf_close (SF_PRIVATE *psf)
-{	uint32_t k ;
-	int	error = 0 ;
-
-	if (psf->codec_close)
-	{	error = psf->codec_close (psf) ;
-		/* To prevent it being called in psf->container_close(). */
-		psf->codec_close = NULL ;
-		} ;
-
-	if (psf->container_close)
-		error = psf->container_close (psf) ;
-
-	error = psf_fclose (psf) ;
-	psf_close_rsrc (psf) ;
-
-	/* For an ISO C compliant implementation it is ok to free a NULL pointer. */
-	free (psf->container_data) ;
-	free (psf->codec_data) ;
-	free (psf->interleave) ;
-	free (psf->dither) ;
-	free (psf->peak_info) ;
-	free (psf->broadcast_16k) ;
-	free (psf->loop_info) ;
-	free (psf->instrument) ;
-	free (psf->channel_map) ;
-	free (psf->format_desc) ;
-	free (psf->strings.storage) ;
-
-	if (psf->wchunks.chunks)
-		for (k = 0 ; k < psf->wchunks.used ; k++)
-			free (psf->wchunks.chunks [k].data) ;
-	free (psf->rchunks.chunks) ;
-	free (psf->wchunks.chunks) ;
-	free (psf->iterator) ;
-	free (psf->cart_16k) ;
-
-	memset (psf, 0, sizeof (SF_PRIVATE)) ;
-	free (psf) ;
-
-	return error ;
-} /* psf_close */
-
-SNDFILE *
-psf_open_file (SF_PRIVATE *psf, SF_INFO *sfinfo)
-{	int		error, format ;
-
-	sf_errno = error = 0 ;
-	sf_parselog [0] = 0 ;
-
-	if (psf->error)
-	{	error = psf->error ;
-		goto error_exit ;
-		} ;
-
-	if (psf->file.mode != SFM_READ && psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-	{	error = SFE_BAD_OPEN_MODE ;
-		goto error_exit ;
-		} ;
-
-	if (sfinfo == NULL)
-	{	error = SFE_BAD_SF_INFO_PTR ;
-		goto error_exit ;
-		} ;
-
-	/* Zero out these fields. */
-	sfinfo->frames = 0 ;
-	sfinfo->sections = 0 ;
-	sfinfo->seekable = 0 ;
-
-	if (psf->file.mode == SFM_READ)
-	{	if ((SF_CONTAINER (sfinfo->format)) == SF_FORMAT_RAW)
-		{	if (sf_format_check (sfinfo) == 0)
-			{	error = SFE_RAW_BAD_FORMAT ;
-				goto error_exit ;
-				} ;
-			}
-		else
-			memset (sfinfo, 0, sizeof (SF_INFO)) ;
-		} ;
-
-	memcpy (&psf->sf, sfinfo, sizeof (SF_INFO)) ;
-
-	psf->Magick 		= SNDFILE_MAGICK ;
-	psf->norm_float 	= SF_TRUE ;
-	psf->norm_double	= SF_TRUE ;
-	psf->dataoffset		= -1 ;
-	psf->datalength		= -1 ;
-	psf->read_current	= -1 ;
-	psf->write_current	= -1 ;
-	psf->auto_header 	= SF_FALSE ;
-	psf->rwf_endian		= SF_ENDIAN_LITTLE ;
-	psf->seek			= psf_default_seek ;
-	psf->float_int_mult = 0 ;
-	psf->float_max		= -1.0 ;
-
-	/* An attempt at a per SF_PRIVATE unique id. */
-	psf->unique_id		= psf_rand_int32 () ;
-
-	psf->sf.sections = 1 ;
-
-	psf->is_pipe = psf_is_pipe (psf) ;
-
-	if (psf->is_pipe)
-	{	psf->sf.seekable = SF_FALSE ;
-		psf->filelength = SF_COUNT_MAX ;
-		}
-	else
-	{	psf->sf.seekable = SF_TRUE ;
-
-		/* File is open, so get the length. */
-		psf->filelength = psf_get_filelen (psf) ;
-		} ;
-
-	if (psf->fileoffset > 0)
-	{	switch (psf->file.mode)
-		{	case SFM_READ :
-				if (psf->filelength < 44)
-				{	psf_log_printf (psf, "Short filelength: %D (fileoffset: %D)\n", psf->filelength, psf->fileoffset) ;
-					error = SFE_BAD_OFFSET ;
-					goto error_exit ;
-					} ;
-				break ;
-
-			case SFM_WRITE :
-				psf->fileoffset = 0 ;
-				psf_fseek (psf, 0, SEEK_END) ;
-				psf->fileoffset = psf_ftell (psf) ;
-				break ;
-
-			case SFM_RDWR :
-				error = SFE_NO_EMBEDDED_RDWR ;
-				goto error_exit ;
-			} ;
-
-		psf_log_printf (psf, "Embedded file offset : %D\n", psf->fileoffset) ;
-		} ;
-
-	if (psf->filelength == SF_COUNT_MAX)
-		psf_log_printf (psf, "Length : unknown\n") ;
-	else
-		psf_log_printf (psf, "Length : %D\n", psf->filelength) ;
-
-	if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->filelength == 0))
-	{	/* If the file is being opened for write or RDWR and the file is currently
-		** empty, then the SF_INFO struct must contain valid data.
-		*/
-		if ((SF_CONTAINER (psf->sf.format)) == 0)
-		{	error = SFE_ZERO_MAJOR_FORMAT ;
-			goto error_exit ;
-			} ;
-		if ((SF_CODEC (psf->sf.format)) == 0)
-		{	error = SFE_ZERO_MINOR_FORMAT ;
-			goto error_exit ;
-			} ;
-
-		if (sf_format_check (&psf->sf) == 0)
-		{	error = SFE_BAD_OPEN_FORMAT ;
-			goto error_exit ;
-			} ;
-		}
-	else if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_RAW)
-	{	/* If type RAW has not been specified then need to figure out file type. */
-		psf->sf.format = guess_file_type (psf) ;
-
-		if (psf->sf.format == 0)
-			psf->sf.format = format_from_extension (psf) ;
-		} ;
-
-	/* Prevent unnecessary seeks */
-	psf->last_op = psf->file.mode ;
-
-	/* Set bytewidth if known. */
-	switch (SF_CODEC (psf->sf.format))
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_ULAW :
-		case SF_FORMAT_ALAW :
-		case SF_FORMAT_DPCM_8 :
-				psf->bytewidth = 1 ;
-				break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_DPCM_16 :
-				psf->bytewidth = 2 ;
-				break ;
-
-		case SF_FORMAT_PCM_24 :
-				psf->bytewidth = 3 ;
-				break ;
-
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-				psf->bytewidth = 4 ;
-				break ;
-
-		case SF_FORMAT_DOUBLE :
-				psf->bytewidth = 8 ;
-				break ;
-		} ;
-
-	/* Call the initialisation function for the relevant file type. */
-	switch (SF_CONTAINER (psf->sf.format))
-	{	case	SF_FORMAT_WAV :
-		case	SF_FORMAT_WAVEX :
-				error = wav_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_AIFF :
-				error = aiff_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_AU :
-				error = au_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_RAW :
-				error = raw_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_W64 :
-				error = w64_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_RF64 :
-				error = rf64_open (psf) ;
-				break ;
-
-		/* Lite remove start */
-		case	SF_FORMAT_PAF :
-				error = paf_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_SVX :
-				error = svx_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_NIST :
-				error = nist_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_IRCAM :
-				error = ircam_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_VOC :
-				error = voc_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_SDS :
-				error = sds_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_OGG :
-				error = ogg_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_TXW :
-				error = txw_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_WVE :
-				error = wve_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_DWD :
-				error = dwd_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_MAT4 :
-				error = mat4_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_MAT5 :
-				error = mat5_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_PVF :
-				error = pvf_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_XI :
-				error = xi_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_HTK :
-				error = htk_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_SD2 :
-				error = sd2_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_REX2 :
-				error = rx2_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_AVR :
-				error = avr_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_FLAC :
-				error = flac_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_CAF :
-				error = caf_open (psf) ;
-				break ;
-
-		case	SF_FORMAT_MPC2K :
-				error = mpc2k_open (psf) ;
-				break ;
-
-		/* Lite remove end */
-
-		default :
-				error = SFE_UNKNOWN_FORMAT ;
-		} ;
-
-	if (error)
-		goto error_exit ;
-
-	/* For now, check whether embedding is supported. */
-	format = SF_CONTAINER (psf->sf.format) ;
-	if (psf->fileoffset > 0)
-	{	switch (format)
-		{	case SF_FORMAT_WAV :
-			case SF_FORMAT_WAVEX :
-			case SF_FORMAT_AIFF :
-			case SF_FORMAT_AU :
-				/* Actual embedded files. */
-				break ;
-
-			case SF_FORMAT_FLAC :
-				/* Flac with an ID3v2 header? */
-				break ;
-
-			default :
-				error = SFE_NO_EMBED_SUPPORT ;
-				goto error_exit ;
-			} ;
-		} ;
-
-	if (psf->fileoffset > 0)
-		psf_log_printf (psf, "Embedded file length : %D\n", psf->filelength) ;
-
-	if (psf->file.mode == SFM_RDWR && sf_format_check (&psf->sf) == 0)
-	{	error = SFE_BAD_MODE_RW ;
-		goto error_exit ;
-		} ;
-
-	if (validate_sfinfo (&psf->sf) == 0)
-	{	psf_log_SF_INFO (psf) ;
-		save_header_info (psf) ;
-		error = SFE_BAD_SF_INFO ;
-		goto error_exit ;
-		} ;
-
-	if (validate_psf (psf) == 0)
-	{	save_header_info (psf) ;
-		error = SFE_INTERNAL ;
-		goto error_exit ;
-		} ;
-
-	psf->read_current = 0 ;
-	psf->write_current = 0 ;
-	if (psf->file.mode == SFM_RDWR)
-	{	psf->write_current = psf->sf.frames ;
-		psf->have_written = psf->sf.frames > 0 ? SF_TRUE : SF_FALSE ;
-		} ;
-
-	memcpy (sfinfo, &psf->sf, sizeof (SF_INFO)) ;
-
-	return (SNDFILE *) psf ;
-
-error_exit :
-	sf_errno = error ;
-
-	if (error == SFE_SYSTEM)
-		snprintf (sf_syserr, sizeof (sf_syserr), "%s", psf->syserr) ;
-	snprintf (sf_parselog, sizeof (sf_parselog), "%s", psf->parselog.buf) ;
-
-	switch (error)
-	{	case SF_ERR_SYSTEM :
-		case SF_ERR_UNSUPPORTED_ENCODING :
-		case SFE_UNIMPLEMENTED :
-			break ;
-
-		case SFE_RAW_BAD_FORMAT :
-			break ;
-
-		default :
-			if (psf->file.mode == SFM_READ)
-			{	psf_log_printf (psf, "Parse error : %s\n", sf_error_number (error)) ;
-				error = SF_ERR_MALFORMED_FILE ;
-				} ;
-		} ;
-
-	psf_close (psf) ;
-	return NULL ;
-} /* psf_open_file */
-
-/*==============================================================================
-** Chunk getting and setting.
-*/
-
-int
-sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info)
-{	SF_PRIVATE 	*psf ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (chunk_info == NULL || chunk_info->data == NULL)
-		return SFE_BAD_CHUNK_PTR ;
-
-	if (psf->set_chunk)
-		return psf->set_chunk (psf, chunk_info) ;
-
-	return SFE_BAD_CHUNK_FORMAT ;
-} /* sf_set_chunk */
-
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info)
-{	SF_PRIVATE 	*psf ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (chunk_info)
-		return psf_get_chunk_iterator (psf, chunk_info->id) ;
-
-	return psf_get_chunk_iterator (psf, NULL) ;
-} /* sf_get_chunk_iterator */
-
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator)
-{	SF_PRIVATE 	*psf ;
-	SNDFILE	*sndfile = iterator ? iterator->sndfile : NULL ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (psf->next_chunk_iterator)
-		return psf->next_chunk_iterator (psf, iterator) ;
-
-	return NULL ;
-} /* sf_get_chunk_iterator_next */
-
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	SF_PRIVATE 	*psf ;
-	SNDFILE	*sndfile = iterator ? iterator->sndfile : NULL ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (chunk_info == NULL)
-		return SFE_BAD_CHUNK_PTR ;
-
-	if (psf->get_chunk_size)
-		return psf->get_chunk_size (psf, iterator, chunk_info) ;
-
-	return SFE_BAD_CHUNK_FORMAT ;
-	return 0 ;
-} /* sf_get_chunk_size */
-
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	SF_PRIVATE	*psf ;
-	SNDFILE	*sndfile = iterator ? iterator->sndfile : NULL ;
-
-	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-	if (chunk_info == NULL || chunk_info->data == NULL)
-		return SFE_BAD_CHUNK_PTR ;
-
-	if (psf->get_chunk_data)
-		return psf->get_chunk_data (psf, iterator, chunk_info) ;
-
-	return SFE_BAD_CHUNK_FORMAT ;
-} /* sf_get_chunk_data */
diff --git a/libs/libsndfile/src/sndfile.h.in b/libs/libsndfile/src/sndfile.h.in
deleted file mode 100644
index b1e32d7f21..0000000000
--- a/libs/libsndfile/src/sndfile.h.in
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** sndfile.h -- system-wide definitions
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_H
-#define SNDFILE_H
-
-/* This is the version 1.0.X header file. */
-#define	SNDFILE_1
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif	/* __cplusplus */
-
-/* The following file types can be read and written.
-** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
-** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
-** SF_FORMAT_SUBMASK can be used to separate the major and minor file
-** types.
-*/
-
-enum
-{	/* Major formats. */
-	SF_FORMAT_WAV			= 0x010000,		/* Microsoft WAV format (little endian default). */
-	SF_FORMAT_AIFF			= 0x020000,		/* Apple/SGI AIFF format (big endian). */
-	SF_FORMAT_AU			= 0x030000,		/* Sun/NeXT AU format (big endian). */
-	SF_FORMAT_RAW			= 0x040000,		/* RAW PCM data. */
-	SF_FORMAT_PAF			= 0x050000,		/* Ensoniq PARIS file format. */
-	SF_FORMAT_SVX			= 0x060000,		/* Amiga IFF / SVX8 / SV16 format. */
-	SF_FORMAT_NIST			= 0x070000,		/* Sphere NIST format. */
-	SF_FORMAT_VOC			= 0x080000,		/* VOC files. */
-	SF_FORMAT_IRCAM			= 0x0A0000,		/* Berkeley/IRCAM/CARL */
-	SF_FORMAT_W64			= 0x0B0000,		/* Sonic Foundry's 64 bit RIFF/WAV */
-	SF_FORMAT_MAT4			= 0x0C0000,		/* Matlab (tm) V4.2 / GNU Octave 2.0 */
-	SF_FORMAT_MAT5			= 0x0D0000,		/* Matlab (tm) V5.0 / GNU Octave 2.1 */
-	SF_FORMAT_PVF			= 0x0E0000,		/* Portable Voice Format */
-	SF_FORMAT_XI			= 0x0F0000,		/* Fasttracker 2 Extended Instrument */
-	SF_FORMAT_HTK			= 0x100000,		/* HMM Tool Kit format */
-	SF_FORMAT_SDS			= 0x110000,		/* Midi Sample Dump Standard */
-	SF_FORMAT_AVR			= 0x120000,		/* Audio Visual Research */
-	SF_FORMAT_WAVEX			= 0x130000,		/* MS WAVE with WAVEFORMATEX */
-	SF_FORMAT_SD2			= 0x160000,		/* Sound Designer 2 */
-	SF_FORMAT_FLAC			= 0x170000,		/* FLAC lossless file format */
-	SF_FORMAT_CAF			= 0x180000,		/* Core Audio File format */
-	SF_FORMAT_WVE			= 0x190000,		/* Psion WVE format */
-	SF_FORMAT_OGG			= 0x200000,		/* Xiph OGG container */
-	SF_FORMAT_MPC2K			= 0x210000,		/* Akai MPC 2000 sampler */
-	SF_FORMAT_RF64			= 0x220000,		/* RF64 WAV file */
-
-	/* Subtypes from here on. */
-
-	SF_FORMAT_PCM_S8		= 0x0001,		/* Signed 8 bit data */
-	SF_FORMAT_PCM_16		= 0x0002,		/* Signed 16 bit data */
-	SF_FORMAT_PCM_24		= 0x0003,		/* Signed 24 bit data */
-	SF_FORMAT_PCM_32		= 0x0004,		/* Signed 32 bit data */
-
-	SF_FORMAT_PCM_U8		= 0x0005,		/* Unsigned 8 bit data (WAV and RAW only) */
-
-	SF_FORMAT_FLOAT			= 0x0006,		/* 32 bit float data */
-	SF_FORMAT_DOUBLE		= 0x0007,		/* 64 bit float data */
-
-	SF_FORMAT_ULAW			= 0x0010,		/* U-Law encoded. */
-	SF_FORMAT_ALAW			= 0x0011,		/* A-Law encoded. */
-	SF_FORMAT_IMA_ADPCM		= 0x0012,		/* IMA ADPCM. */
-	SF_FORMAT_MS_ADPCM		= 0x0013,		/* Microsoft ADPCM. */
-
-	SF_FORMAT_GSM610		= 0x0020,		/* GSM 6.10 encoding. */
-	SF_FORMAT_VOX_ADPCM		= 0x0021,		/* OKI / Dialogix ADPCM */
-
-	SF_FORMAT_G721_32		= 0x0030,		/* 32kbs G721 ADPCM encoding. */
-	SF_FORMAT_G723_24		= 0x0031,		/* 24kbs G723 ADPCM encoding. */
-	SF_FORMAT_G723_40		= 0x0032,		/* 40kbs G723 ADPCM encoding. */
-
-	SF_FORMAT_DWVW_12		= 0x0040, 		/* 12 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_16		= 0x0041, 		/* 16 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_24		= 0x0042, 		/* 24 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_N		= 0x0043, 		/* N bit Delta Width Variable Word encoding. */
-
-	SF_FORMAT_DPCM_8		= 0x0050,		/* 8 bit differential PCM (XI only) */
-	SF_FORMAT_DPCM_16		= 0x0051,		/* 16 bit differential PCM (XI only) */
-
-	SF_FORMAT_VORBIS		= 0x0060,		/* Xiph Vorbis encoding. */
-
-	SF_FORMAT_ALAC_16		= 0x0070,		/* Apple Lossless Audio Codec (16 bit). */
-	SF_FORMAT_ALAC_20		= 0x0071,		/* Apple Lossless Audio Codec (20 bit). */
-	SF_FORMAT_ALAC_24		= 0x0072,		/* Apple Lossless Audio Codec (24 bit). */
-	SF_FORMAT_ALAC_32		= 0x0073,		/* Apple Lossless Audio Codec (32 bit). */
-
-	/* Endian-ness options. */
-
-	SF_ENDIAN_FILE			= 0x00000000,	/* Default file endian-ness. */
-	SF_ENDIAN_LITTLE		= 0x10000000,	/* Force little endian-ness. */
-	SF_ENDIAN_BIG			= 0x20000000,	/* Force big endian-ness. */
-	SF_ENDIAN_CPU			= 0x30000000,	/* Force CPU endian-ness. */
-
-	SF_FORMAT_SUBMASK		= 0x0000FFFF,
-	SF_FORMAT_TYPEMASK		= 0x0FFF0000,
-	SF_FORMAT_ENDMASK		= 0x30000000
-} ;
-
-/*
-** The following are the valid command numbers for the sf_command()
-** interface.  The use of these commands is documented in the file
-** command.html in the doc directory of the source code distribution.
-*/
-
-enum
-{	SFC_GET_LIB_VERSION				= 0x1000,
-	SFC_GET_LOG_INFO				= 0x1001,
-	SFC_GET_CURRENT_SF_INFO			= 0x1002,
-
-
-	SFC_GET_NORM_DOUBLE				= 0x1010,
-	SFC_GET_NORM_FLOAT				= 0x1011,
-	SFC_SET_NORM_DOUBLE				= 0x1012,
-	SFC_SET_NORM_FLOAT				= 0x1013,
-	SFC_SET_SCALE_FLOAT_INT_READ	= 0x1014,
-	SFC_SET_SCALE_INT_FLOAT_WRITE	= 0x1015,
-
-	SFC_GET_SIMPLE_FORMAT_COUNT		= 0x1020,
-	SFC_GET_SIMPLE_FORMAT			= 0x1021,
-
-	SFC_GET_FORMAT_INFO				= 0x1028,
-
-	SFC_GET_FORMAT_MAJOR_COUNT		= 0x1030,
-	SFC_GET_FORMAT_MAJOR			= 0x1031,
-	SFC_GET_FORMAT_SUBTYPE_COUNT	= 0x1032,
-	SFC_GET_FORMAT_SUBTYPE			= 0x1033,
-
-	SFC_CALC_SIGNAL_MAX				= 0x1040,
-	SFC_CALC_NORM_SIGNAL_MAX		= 0x1041,
-	SFC_CALC_MAX_ALL_CHANNELS		= 0x1042,
-	SFC_CALC_NORM_MAX_ALL_CHANNELS	= 0x1043,
-	SFC_GET_SIGNAL_MAX				= 0x1044,
-	SFC_GET_MAX_ALL_CHANNELS		= 0x1045,
-
-	SFC_SET_ADD_PEAK_CHUNK			= 0x1050,
-	SFC_SET_ADD_HEADER_PAD_CHUNK	= 0x1051,
-
-	SFC_UPDATE_HEADER_NOW			= 0x1060,
-	SFC_SET_UPDATE_HEADER_AUTO		= 0x1061,
-
-	SFC_FILE_TRUNCATE				= 0x1080,
-
-	SFC_SET_RAW_START_OFFSET		= 0x1090,
-
-	SFC_SET_DITHER_ON_WRITE			= 0x10A0,
-	SFC_SET_DITHER_ON_READ			= 0x10A1,
-
-	SFC_GET_DITHER_INFO_COUNT		= 0x10A2,
-	SFC_GET_DITHER_INFO				= 0x10A3,
-
-	SFC_GET_EMBED_FILE_INFO			= 0x10B0,
-
-	SFC_SET_CLIPPING				= 0x10C0,
-	SFC_GET_CLIPPING				= 0x10C1,
-
-	SFC_GET_INSTRUMENT				= 0x10D0,
-	SFC_SET_INSTRUMENT				= 0x10D1,
-
-	SFC_GET_LOOP_INFO				= 0x10E0,
-
-	SFC_GET_BROADCAST_INFO			= 0x10F0,
-	SFC_SET_BROADCAST_INFO			= 0x10F1,
-
-	SFC_GET_CHANNEL_MAP_INFO		= 0x1100,
-	SFC_SET_CHANNEL_MAP_INFO		= 0x1101,
-
-	SFC_RAW_DATA_NEEDS_ENDSWAP		= 0x1110,
-
-	/* Support for Wavex Ambisonics Format */
-	SFC_WAVEX_SET_AMBISONIC			= 0x1200,
-	SFC_WAVEX_GET_AMBISONIC			= 0x1201,
-
-	SFC_SET_VBR_ENCODING_QUALITY	= 0x1300,
-	SFC_SET_COMPRESSION_LEVEL		= 0x1301,
-
-	/* Cart Chunk support */
-	SFC_SET_CART_INFO				= 0x1400,
-	SFC_GET_CART_INFO				= 0x1401,
-
-	/* Following commands for testing only. */
-	SFC_TEST_IEEE_FLOAT_REPLACE		= 0x6001,
-
-	/*
-	** SFC_SET_ADD_* values are deprecated and will disappear at some
-	** time in the future. They are guaranteed to be here up to and
-	** including version 1.0.8 to avoid breakage of existing software.
-	** They currently do nothing and will continue to do nothing.
-	*/
-	SFC_SET_ADD_DITHER_ON_WRITE		= 0x1070,
-	SFC_SET_ADD_DITHER_ON_READ		= 0x1071
-} ;
-
-
-/*
-** String types that can be set and read from files. Not all file types
-** support this and even the file types which support one, may not support
-** all string types.
-*/
-
-enum
-{	SF_STR_TITLE					= 0x01,
-	SF_STR_COPYRIGHT				= 0x02,
-	SF_STR_SOFTWARE					= 0x03,
-	SF_STR_ARTIST					= 0x04,
-	SF_STR_COMMENT					= 0x05,
-	SF_STR_DATE						= 0x06,
-	SF_STR_ALBUM					= 0x07,
-	SF_STR_LICENSE					= 0x08,
-	SF_STR_TRACKNUMBER				= 0x09,
-	SF_STR_GENRE					= 0x10
-} ;
-
-/*
-** Use the following as the start and end index when doing metadata
-** transcoding.
-*/
-
-#define	SF_STR_FIRST	SF_STR_TITLE
-#define	SF_STR_LAST		SF_STR_GENRE
-
-enum
-{	/* True and false */
-	SF_FALSE	= 0,
-	SF_TRUE		= 1,
-
-	/* Modes for opening files. */
-	SFM_READ	= 0x10,
-	SFM_WRITE	= 0x20,
-	SFM_RDWR	= 0x30,
-
-	SF_AMBISONIC_NONE		= 0x40,
-	SF_AMBISONIC_B_FORMAT	= 0x41
-} ;
-
-/* Public error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
-** There are also a large number of private error numbers which are internal to
-** the library which can change at any time.
-*/
-
-enum
-{	SF_ERR_NO_ERROR				= 0,
-	SF_ERR_UNRECOGNISED_FORMAT	= 1,
-	SF_ERR_SYSTEM				= 2,
-	SF_ERR_MALFORMED_FILE		= 3,
-	SF_ERR_UNSUPPORTED_ENCODING	= 4
-} ;
-
-
-/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
-*/
-
-enum
-{	SF_CHANNEL_MAP_INVALID = 0,
-	SF_CHANNEL_MAP_MONO = 1,
-	SF_CHANNEL_MAP_LEFT,					/* Apple calls this 'Left' */
-	SF_CHANNEL_MAP_RIGHT,					/* Apple calls this 'Right' */
-	SF_CHANNEL_MAP_CENTER,					/* Apple calls this 'Center' */
-	SF_CHANNEL_MAP_FRONT_LEFT,
-	SF_CHANNEL_MAP_FRONT_RIGHT,
-	SF_CHANNEL_MAP_FRONT_CENTER,
-	SF_CHANNEL_MAP_REAR_CENTER,				/* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
-	SF_CHANNEL_MAP_REAR_LEFT,				/* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
-	SF_CHANNEL_MAP_REAR_RIGHT,				/* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
-	SF_CHANNEL_MAP_LFE,						/* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency'  */
-	SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER,	/* Apple calls this 'Left Center' */
-	SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER,	/* Apple calls this 'Right Center */
-	SF_CHANNEL_MAP_SIDE_LEFT,				/* Apple calls this 'Left Surround Direct' */
-	SF_CHANNEL_MAP_SIDE_RIGHT,				/* Apple calls this 'Right Surround Direct' */
-	SF_CHANNEL_MAP_TOP_CENTER,				/* Apple calls this 'Top Center Surround' */
-	SF_CHANNEL_MAP_TOP_FRONT_LEFT,			/* Apple calls this 'Vertical Height Left' */
-	SF_CHANNEL_MAP_TOP_FRONT_RIGHT,			/* Apple calls this 'Vertical Height Right' */
-	SF_CHANNEL_MAP_TOP_FRONT_CENTER,		/* Apple calls this 'Vertical Height Center' */
-	SF_CHANNEL_MAP_TOP_REAR_LEFT,			/* Apple and MS call this 'Top Back Left' */
-	SF_CHANNEL_MAP_TOP_REAR_RIGHT,			/* Apple and MS call this 'Top Back Right' */
-	SF_CHANNEL_MAP_TOP_REAR_CENTER,			/* Apple and MS call this 'Top Back Center' */
-
-	SF_CHANNEL_MAP_AMBISONIC_B_W,
-	SF_CHANNEL_MAP_AMBISONIC_B_X,
-	SF_CHANNEL_MAP_AMBISONIC_B_Y,
-	SF_CHANNEL_MAP_AMBISONIC_B_Z,
-
-	SF_CHANNEL_MAP_MAX
-} ;
-
-
-/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-
-typedef	struct SNDFILE_tag	SNDFILE ;
-
-/* The following typedef is system specific and is defined when libsndfile is
-** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
-** 64 bit file offsets.
-** On windows, we need to allow the same header file to be compiler by both GCC
-** and the Microsoft compiler.
-*/
-
-#if (defined (_MSCVER) || defined (_MSC_VER))
-typedef __int64		sf_count_t ;
-#define SF_COUNT_MAX		0x7fffffffffffffffi64
-#else
-typedef @TYPEOF_SF_COUNT_T@	sf_count_t ;
-#define SF_COUNT_MAX		@SF_COUNT_MAX@
-#endif
-
-
-/* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
-** On write, the SF_INFO structure is filled in by the user and passed into
-** sf_open ().
-*/
-
-struct SF_INFO
-{	sf_count_t	frames ;		/* Used to be called samples.  Changed to avoid confusion. */
-	int			samplerate ;
-	int			channels ;
-	int			format ;
-	int			sections ;
-	int			seekable ;
-} ;
-
-typedef	struct SF_INFO SF_INFO ;
-
-/* The SF_FORMAT_INFO struct is used to retrieve information about the sound
-** file formats libsndfile supports using the sf_command () interface.
-**
-** Using this interface will allow applications to support new file formats
-** and encoding types when libsndfile is upgraded, without requiring
-** re-compilation of the application.
-**
-** Please consult the libsndfile documentation (particularly the information
-** on the sf_command () interface) for examples of its use.
-*/
-
-typedef struct
-{	int			format ;
-	const char	*name ;
-	const char	*extension ;
-} SF_FORMAT_INFO ;
-
-/*
-** Enums and typedefs for adding dither on read and write.
-** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
-** and SFC_SET_DITHER_ON_READ.
-*/
-
-enum
-{	SFD_DEFAULT_LEVEL	= 0,
-	SFD_CUSTOM_LEVEL	= 0x40000000,
-
-	SFD_NO_DITHER		= 500,
-	SFD_WHITE			= 501,
-	SFD_TRIANGULAR_PDF	= 502
-} ;
-
-typedef struct
-{	int			type ;
-	double		level ;
-	const char	*name ;
-} SF_DITHER_INFO ;
-
-/* Struct used to retrieve information about a file embedded within a
-** larger file. See SFC_GET_EMBED_FILE_INFO.
-*/
-
-typedef struct
-{	sf_count_t	offset ;
-	sf_count_t	length ;
-} SF_EMBED_FILE_INFO ;
-
-/*
-**	Structs used to retrieve music sample information from a file.
-*/
-
-enum
-{	/*
-	**	The loop mode field in SF_INSTRUMENT will be one of the following.
-	*/
-	SF_LOOP_NONE = 800,
-	SF_LOOP_FORWARD,
-	SF_LOOP_BACKWARD,
-	SF_LOOP_ALTERNATING
-} ;
-
-typedef struct
-{	int gain ;
-	char basenote, detune ;
-	char velocity_lo, velocity_hi ;
-	char key_lo, key_hi ;
-	int loop_count ;
-
-	struct
-	{	int mode ;
-		uint32_t start ;
-		uint32_t end ;
-		uint32_t count ;
-	} loops [16] ; /* make variable in a sensible way */
-} SF_INSTRUMENT ;
-
-
-
-/* Struct used to retrieve loop information from a file.*/
-typedef struct
-{
-	short	time_sig_num ;	/* any positive integer    > 0  */
-	short	time_sig_den ;	/* any positive power of 2 > 0  */
-	int		loop_mode ;		/* see SF_LOOP enum             */
-
-	int		num_beats ;		/* this is NOT the amount of quarter notes !!!*/
-							/* a full bar of 4/4 is 4 beats */
-							/* a full bar of 7/8 is 7 beats */
-
-	float	bpm ;			/* suggestion, as it can be calculated using other fields:*/
-							/* file's length, file's sampleRate and our time_sig_den*/
-							/* -> bpms are always the amount of _quarter notes_ per minute */
-
-	int	root_key ;			/* MIDI note, or -1 for None */
-	int future [6] ;
-} SF_LOOP_INFO ;
-
-
-/*	Struct used to retrieve broadcast (EBU) information from a file.
-**	Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
-*/
-#define	SF_BROADCAST_INFO_VAR(coding_hist_size) \
-			struct \
-			{	char		description [256] ; \
-				char		originator [32] ; \
-				char		originator_reference [32] ; \
-				char		origination_date [10] ; \
-				char		origination_time [8] ; \
-				uint32_t	time_reference_low ; \
-				uint32_t	time_reference_high ; \
-				short		version ; \
-				char		umid [64] ; \
-				char		reserved [190] ; \
-				uint32_t	coding_history_size ; \
-				char		coding_history [coding_hist_size] ; \
-			}
-
-/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
-typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
-
-struct SF_CART_TIMER
-{	char	usage[4] ;
-	int32_t	value ;
-} ;
-
-typedef struct SF_CART_TIMER SF_CART_TIMER ;
-
-#define	SF_CART_INFO_VAR(p_tag_text_size) \
-			struct \
-			{	char		version [4] ; \
-				char		title [64] ; \
-				char		artist [64] ; \
-				char		cut_id [64] ; \
-				char		client_id [64] ; \
-				char		category [64] ; \
-				char		classification [64] ; \
-				char		out_cue [64] ; \
-				char		start_date [10] ; \
-				char		start_time [8] ; \
-				char		end_date [10] ; \
-				char		end_time [8] ; \
-				char		producer_app_id [64] ; \
-				char		producer_app_version [64] ; \
-				char		user_def [64] ; \
-				int32_t		level_reference ; \
-				SF_CART_TIMER	post_timers [8] ; \
-				char		reserved [276] ; \
-				char		url [1024] ; \
-				uint32_t	tag_text_size ; \
-				char		tag_text[p_tag_text_size] ; \
-			}
-
-typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
-
-/*	Virtual I/O functionality. */
-
-typedef sf_count_t		(*sf_vio_get_filelen)	(void *user_data) ;
-typedef sf_count_t		(*sf_vio_seek)		(sf_count_t offset, int whence, void *user_data) ;
-typedef sf_count_t		(*sf_vio_read)		(void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t		(*sf_vio_write)		(const void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t		(*sf_vio_tell)		(void *user_data) ;
-
-struct SF_VIRTUAL_IO
-{	sf_vio_get_filelen	get_filelen ;
-	sf_vio_seek			seek ;
-	sf_vio_read			read ;
-	sf_vio_write		write ;
-	sf_vio_tell			tell ;
-} ;
-
-typedef	struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
-
-
-/* Open the specified file for read, write or both. On error, this will
-** return a NULL pointer. To find the error number, pass a NULL SNDFILE
-** to sf_strerror ().
-** All calls to sf_open() should be matched with a call to sf_close().
-*/
-
-SNDFILE* 	sf_open		(const char *path, int mode, SF_INFO *sfinfo) ;
-
-
-/* Use the existing file descriptor to create a SNDFILE object. If close_desc
-** is TRUE, the file descriptor will be closed when sf_close() is called. If
-** it is FALSE, the descriptor will not be closed.
-** When passed a descriptor like this, the library will assume that the start
-** of file header is at the current file offset. This allows sound files within
-** larger container files to be read and/or written.
-** On error, this will return a NULL pointer. To find the error number, pass a
-** NULL SNDFILE to sf_strerror ().
-** All calls to sf_open_fd() should be matched with a call to sf_close().
-
-*/
-
-SNDFILE* 	sf_open_fd	(int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-
-SNDFILE* 	sf_open_virtual	(SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-
-
-/* sf_error () returns a error number which can be translated to a text
-** string using sf_error_number().
-*/
-
-int		sf_error		(SNDFILE *sndfile) ;
-
-
-/* sf_strerror () returns to the caller a pointer to the current error message for
-** the given SNDFILE.
-*/
-
-const char* sf_strerror (SNDFILE *sndfile) ;
-
-
-/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
-**
-*/
-
-const char*	sf_error_number	(int errnum) ;
-
-
-/* The following two error functions are deprecated but they will remain in the
-** library for the foreseeable future. The function sf_strerror() should be used
-** in their place.
-*/
-
-int		sf_perror		(SNDFILE *sndfile) ;
-int		sf_error_str	(SNDFILE *sndfile, char* str, size_t len) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int		sf_command	(SNDFILE *sndfile, int command, void *data, int datasize) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int		sf_format_check	(const SF_INFO *info) ;
-
-
-/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
-** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
-** stdio.h function fseek ().
-** An offset of zero with whence set to SEEK_SET will position the
-** read / write pointer to the first data sample.
-** On success sf_seek returns the current position in (multi-channel)
-** samples from the start of the file.
-** Please see the libsndfile documentation for moving the read pointer
-** separately from the write pointer on files open in mode SFM_RDWR.
-** On error all of these functions return -1.
-*/
-
-enum
-{	SF_SEEK_SET = SEEK_SET,
-	SF_SEEK_CUR = SEEK_CUR,
-	SF_SEEK_END = SEEK_END
-} ;
-
-sf_count_t	sf_seek 		(SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-
-/* Functions for retrieving and setting string data within sound files.
-** Not all file types support this features; AIFF and WAV do. For both
-** functions, the str_type parameter must be one of the SF_STR_* values
-** defined above.
-** On error, sf_set_string() returns non-zero while sf_get_string()
-** returns NULL.
-*/
-
-int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
-
-const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
-
-
-/* Return the library version string. */
-
-const char * sf_version_string (void) ;
-
-/* Return the current byterate at this point in the file. The byte rate in this
-** case is the number of bytes per second of audio data. For instance, for a
-** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
-** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
-** For some file formats the returned value will be accurate and exact, for some
-** it will be a close approximation, for some it will be the average bitrate for
-** the whole file and for some it will be a time varying value that was accurate
-** when the file was most recently read or written.
-** To get the bitrate, multiple this value by 8.
-** Returns -1 for unknown.
-*/
-int sf_current_byterate (SNDFILE *sndfile) ;
-
-/* Functions for reading/writing the waveform data of a sound file.
-*/
-
-sf_count_t	sf_read_raw		(SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t	sf_write_raw 	(SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
-
-
-/* Functions for reading and writing the data chunk in terms of frames.
-** The number of items actually read/written = frames * number of channels.
-**     sf_xxxx_raw		read/writes the raw data bytes from/to the file
-**     sf_xxxx_short	passes data in the native short format
-**     sf_xxxx_int		passes data in the native int format
-**     sf_xxxx_float	passes data in the native float format
-**     sf_xxxx_double	passes data in the native double format
-** All of these read/write function return number of frames read/written.
-*/
-
-sf_count_t	sf_readf_short	(SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_short	(SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_int	(SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_int 	(SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_float	(SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_float	(SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_double		(SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_double	(SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
-
-
-/* Functions for reading and writing the data chunk in terms of items.
-** Otherwise similar to above.
-** All of these read/write function return number of items read/written.
-*/
-
-sf_count_t	sf_read_short	(SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t	sf_write_short	(SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_int		(SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-sf_count_t	sf_write_int 	(SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_float	(SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-sf_count_t	sf_write_float	(SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_double	(SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-sf_count_t	sf_write_double	(SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
-
-
-/* Close the SNDFILE and clean up all memory allocations associated with this
-** file.
-** Returns 0 on success, or an error number.
-*/
-
-int		sf_close		(SNDFILE *sndfile) ;
-
-
-/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
-** to force the writing of data to disk. If the file is opened SFM_READ
-** no action is taken.
-*/
-
-void	sf_write_sync	(SNDFILE *sndfile) ;
-
-
-
-/* The function sf_wchar_open() is Windows Only!
-** Open a file passing in a Windows Unicode filename. Otherwise, this is
-** the same as sf_open().
-**
-** In order for this to work, you need to do the following:
-**
-**		#include <windows.h>
-**		#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-**		#including <sndfile.h>
-*/
-
-#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
-SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
-#endif
-
-
-
-
-/* Getting and setting of chunks from within a sound file.
-**
-** These functions allow the getting and setting of chunks within a sound file
-** (for those formats which allow it).
-**
-** These functions fail safely. Specifically, they will not allow you to overwrite
-** existing chunks or add extra versions of format specific reserved chunks but
-** should allow you to retrieve any and all chunks (may not be implemented for
-** all chunks or all file formats).
-*/
-
-struct SF_CHUNK_INFO
-{	char		id [64] ;	/* The chunk identifier. */
-	unsigned	id_size ;	/* The size of the chunk identifier. */
-	unsigned	datalen ;	/* The size of that data. */
-	void		*data ;		/* Pointer to the data. */
-} ;
-
-typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
-
-/* Set the specified chunk info (must be done before any audio data is written
-** to the file). This will fail for format specific reserved chunks.
-** The chunk_info->data pointer must be valid until the file is closed.
-** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
-*/
-int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/*
-** An opaque structure to an iterator over the all chunks of a given id
-*/
-typedef	struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
-
-/* Get an iterator for all chunks matching chunk_info.
-** The iterator will point to the first chunk matching chunk_info.
-** Chunks are matching, if (chunk_info->id) matches the first
-**     (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
-** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
-**     is returned.
-** The values of chunk_info->datalen and chunk_info->data are ignored.
-** If no matching chunks are found in the sndfile, NULL is returned.
-** The returned iterator will stay valid until one of the following occurs:
-**     a) The sndfile is closed.
-**     b) A new chunk is added using sf_set_chunk().
-**     c) Another chunk iterator function is called on the same SNDFILE* handle
-**        that causes the iterator to be modified.
-** The memory for the iterator belongs to the SNDFILE* handle and is freed when
-** sf_close() is called.
-*/
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/* Iterate through chunks by incrementing the iterator.
-** Increments the iterator and returns a handle to the new one.
-** After this call, iterator will no longer be valid, and you must use the
-**      newly returned handle from now on.
-** The returned handle can be used to access the next chunk matching
-**      the criteria as defined in sf_get_chunk_iterator().
-** If iterator points to the last chunk, this will free all resources
-**      associated with iterator and return NULL.
-** The returned iterator will stay valid until sf_get_chunk_iterator_next
-**      is called again, the sndfile is closed or a new chunk us added.
-*/
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
-
-
-/* Get the size of the specified chunk.
-** If the specified chunk exists, the size will be returned in the
-**      datalen field of the SF_CHUNK_INFO struct.
-**      Additionally, the id of the chunk will be copied to the id
-**      field of the SF_CHUNK_INFO struct and it's id_size field will
-**      be updated accordingly.
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-/* Get the specified chunk data.
-** If the specified chunk exists, up to chunk_info->datalen bytes of
-**      the chunk data will be copied into the chunk_info->data buffer
-**      (allocated by the caller) and the chunk_info->datalen field
-**      updated to reflect the size of the data. The id and id_size
-**      field will be updated according to the retrieved chunk
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-
-#ifdef __cplusplus
-}		/* extern "C" */
-#endif	/* __cplusplus */
-
-#endif	/* SNDFILE_H */
-
diff --git a/libs/libsndfile/src/sndfile.hh b/libs/libsndfile/src/sndfile.hh
deleted file mode 100644
index 0a0c62d7f6..0000000000
--- a/libs/libsndfile/src/sndfile.hh
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-** Copyright (C) 2005-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
-** The above modified BSD style license (GPL and LGPL compatible) applies to
-** this file. It does not apply to libsndfile itself which is released under
-** the GNU LGPL or the libsndfile test suite which is released under the GNU
-** GPL.
-** This means that this header file can be used under this modified BSD style
-** license, but the LGPL still holds for the libsndfile library itself.
-*/
-
-/*
-** sndfile.hh -- A lightweight C++ wrapper for the libsndfile API.
-**
-** All the methods are inlines and all functionality is contained in this
-** file. There is no separate implementation file.
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_HH
-#define SNDFILE_HH
-
-#include <sndfile.h>
-
-#include <string>
-#include <new> // for std::nothrow
-
-class SndfileHandle
-{	private :
-		struct SNDFILE_ref
-		{	SNDFILE_ref (void) ;
-			~SNDFILE_ref (void) ;
-
-			SNDFILE *sf ;
-			SF_INFO sfinfo ;
-			int ref ;
-			} ;
-
-		SNDFILE_ref *p ;
-
-	public :
-			/* Default constructor */
-			SndfileHandle (void) : p (NULL) {} ;
-			SndfileHandle (const char *path, int mode = SFM_READ,
-							int format = 0, int channels = 0, int samplerate = 0) ;
-			SndfileHandle (std::string const & path, int mode = SFM_READ,
-							int format = 0, int channels = 0, int samplerate = 0) ;
-			SndfileHandle (int fd, bool close_desc, int mode = SFM_READ,
-							int format = 0, int channels = 0, int samplerate = 0) ;
-			SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode = SFM_READ,
-							int format = 0, int channels = 0, int samplerate = 0) ;
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
-			SndfileHandle (LPCWSTR wpath, int mode = SFM_READ,
-							int format = 0, int channels = 0, int samplerate = 0) ;
-#endif
-
-			~SndfileHandle (void) ;
-
-			SndfileHandle (const SndfileHandle &orig) ;
-			SndfileHandle & operator = (const SndfileHandle &rhs) ;
-
-		/* Mainly for debugging/testing. */
-		int refCount (void) const { return (p == NULL) ? 0 : p->ref ; }
-
-		operator bool () const { return (p != NULL) ; }
-
-		bool operator == (const SndfileHandle &rhs) const { return (p == rhs.p) ; }
-
-		sf_count_t	frames (void) const		{ return p ? p->sfinfo.frames : 0 ; }
-		int			format (void) const		{ return p ? p->sfinfo.format : 0 ; }
-		int			channels (void) const	{ return p ? p->sfinfo.channels : 0 ; }
-		int			samplerate (void) const { return p ? p->sfinfo.samplerate : 0 ; }
-
-		int error (void) const ;
-		const char * strError (void) const ;
-
-		int command (int cmd, void *data, int datasize) ;
-
-		sf_count_t	seek (sf_count_t frames, int whence) ;
-
-		void writeSync (void) ;
-
-		int setString (int str_type, const char* str) ;
-
-		const char* getString (int str_type) const ;
-
-		static int formatCheck (int format, int channels, int samplerate) ;
-
-		sf_count_t read (short *ptr, sf_count_t items) ;
-		sf_count_t read (int *ptr, sf_count_t items) ;
-		sf_count_t read (float *ptr, sf_count_t items) ;
-		sf_count_t read (double *ptr, sf_count_t items) ;
-
-		sf_count_t write (const short *ptr, sf_count_t items) ;
-		sf_count_t write (const int *ptr, sf_count_t items) ;
-		sf_count_t write (const float *ptr, sf_count_t items) ;
-		sf_count_t write (const double *ptr, sf_count_t items) ;
-
-		sf_count_t readf (short *ptr, sf_count_t frames) ;
-		sf_count_t readf (int *ptr, sf_count_t frames) ;
-		sf_count_t readf (float *ptr, sf_count_t frames) ;
-		sf_count_t readf (double *ptr, sf_count_t frames) ;
-
-		sf_count_t writef (const short *ptr, sf_count_t frames) ;
-		sf_count_t writef (const int *ptr, sf_count_t frames) ;
-		sf_count_t writef (const float *ptr, sf_count_t frames) ;
-		sf_count_t writef (const double *ptr, sf_count_t frames) ;
-
-		sf_count_t	readRaw		(void *ptr, sf_count_t bytes) ;
-		sf_count_t	writeRaw	(const void *ptr, sf_count_t bytes) ;
-
-		/**< Raw access to the handle. SndfileHandle keeps ownership. */
-		SNDFILE * rawHandle (void) ;
-
-		/**< Take ownership of handle, if reference count is 1. */
-		SNDFILE * takeOwnership (void) ;
-} ;
-
-/*==============================================================================
-**	Nothing but implementation below.
-*/
-
-inline
-SndfileHandle::SNDFILE_ref::SNDFILE_ref (void)
-: ref (1)
-{}
-
-inline
-SndfileHandle::SNDFILE_ref::~SNDFILE_ref (void)
-{	if (sf != NULL) sf_close (sf) ; }
-
-inline
-SndfileHandle::SndfileHandle (const char *path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-	p = new (std::nothrow) SNDFILE_ref () ;
-
-	if (p != NULL)
-	{	p->ref = 1 ;
-
-		p->sfinfo.frames = 0 ;
-		p->sfinfo.channels = chans ;
-		p->sfinfo.format = fmt ;
-		p->sfinfo.samplerate = srate ;
-		p->sfinfo.sections = 0 ;
-		p->sfinfo.seekable = 0 ;
-
-		p->sf = sf_open (path, mode, &p->sfinfo) ;
-		} ;
-
-	return ;
-} /* SndfileHandle const char * constructor */
-
-inline
-SndfileHandle::SndfileHandle (std::string const & path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-	p = new (std::nothrow) SNDFILE_ref () ;
-
-	if (p != NULL)
-	{	p->ref = 1 ;
-
-		p->sfinfo.frames = 0 ;
-		p->sfinfo.channels = chans ;
-		p->sfinfo.format = fmt ;
-		p->sfinfo.samplerate = srate ;
-		p->sfinfo.sections = 0 ;
-		p->sfinfo.seekable = 0 ;
-
-		p->sf = sf_open (path.c_str (), mode, &p->sfinfo) ;
-		} ;
-
-	return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::SndfileHandle (int fd, bool close_desc, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-	if (fd < 0)
-		return ;
-
-	p = new (std::nothrow) SNDFILE_ref () ;
-
-	if (p != NULL)
-	{	p->ref = 1 ;
-
-		p->sfinfo.frames = 0 ;
-		p->sfinfo.channels = chans ;
-		p->sfinfo.format = fmt ;
-		p->sfinfo.samplerate = srate ;
-		p->sfinfo.sections = 0 ;
-		p->sfinfo.seekable = 0 ;
-
-		p->sf = sf_open_fd (fd, mode, &p->sfinfo, close_desc) ;
-		} ;
-
-	return ;
-} /* SndfileHandle fd constructor */
-
-inline
-SndfileHandle::SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-	p = new (std::nothrow) SNDFILE_ref () ;
-
-	if (p != NULL)
-	{	p->ref = 1 ;
-
-		p->sfinfo.frames = 0 ;
-		p->sfinfo.channels = chans ;
-		p->sfinfo.format = fmt ;
-		p->sfinfo.samplerate = srate ;
-		p->sfinfo.sections = 0 ;
-		p->sfinfo.seekable = 0 ;
-
-		p->sf = sf_open_virtual (&sfvirtual, mode, &p->sfinfo, user_data) ;
-		} ;
-
-	return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::~SndfileHandle (void)
-{	if (p != NULL && --p->ref == 0)
-		delete p ;
-} /* SndfileHandle destructor */
-
-
-inline
-SndfileHandle::SndfileHandle (const SndfileHandle &orig)
-: p (orig.p)
-{	if (p != NULL)
-		++p->ref ;
-} /* SndfileHandle copy constructor */
-
-inline SndfileHandle &
-SndfileHandle::operator = (const SndfileHandle &rhs)
-{
-	if (&rhs == this)
-		return *this ;
-	if (p != NULL && --p->ref == 0)
-		delete p ;
-
-	p = rhs.p ;
-	if (p != NULL)
-		++p->ref ;
-
-	return *this ;
-} /* SndfileHandle assignment operator */
-
-inline int
-SndfileHandle::error (void) const
-{	return sf_error (p->sf) ; }
-
-inline const char *
-SndfileHandle::strError (void) const
-{	return sf_strerror (p->sf) ; }
-
-inline int
-SndfileHandle::command (int cmd, void *data, int datasize)
-{	return sf_command (p->sf, cmd, data, datasize) ; }
-
-inline sf_count_t
-SndfileHandle::seek (sf_count_t frame_count, int whence)
-{	return sf_seek (p->sf, frame_count, whence) ; }
-
-inline void
-SndfileHandle::writeSync (void)
-{	sf_write_sync (p->sf) ; }
-
-inline int
-SndfileHandle::setString (int str_type, const char* str)
-{	return sf_set_string (p->sf, str_type, str) ; }
-
-inline const char*
-SndfileHandle::getString (int str_type) const
-{	return sf_get_string (p->sf, str_type) ; }
-
-inline int
-SndfileHandle::formatCheck (int fmt, int chans, int srate)
-{
-	SF_INFO sfinfo ;
-
-	sfinfo.frames = 0 ;
-	sfinfo.channels = chans ;
-	sfinfo.format = fmt ;
-	sfinfo.samplerate = srate ;
-	sfinfo.sections = 0 ;
-	sfinfo.seekable = 0 ;
-
-	return sf_format_check (&sfinfo) ;
-}
-
-/*---------------------------------------------------------------------*/
-
-inline sf_count_t
-SndfileHandle::read (short *ptr, sf_count_t items)
-{	return sf_read_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (int *ptr, sf_count_t items)
-{	return sf_read_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (float *ptr, sf_count_t items)
-{	return sf_read_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (double *ptr, sf_count_t items)
-{	return sf_read_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const short *ptr, sf_count_t items)
-{	return sf_write_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const int *ptr, sf_count_t items)
-{	return sf_write_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const float *ptr, sf_count_t items)
-{	return sf_write_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const double *ptr, sf_count_t items)
-{	return sf_write_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::readf (short *ptr, sf_count_t frame_count)
-{	return sf_readf_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (int *ptr, sf_count_t frame_count)
-{	return sf_readf_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (float *ptr, sf_count_t frame_count)
-{	return sf_readf_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (double *ptr, sf_count_t frame_count)
-{	return sf_readf_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const short *ptr, sf_count_t frame_count)
-{	return sf_writef_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const int *ptr, sf_count_t frame_count)
-{	return sf_writef_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const float *ptr, sf_count_t frame_count)
-{	return sf_writef_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const double *ptr, sf_count_t frame_count)
-{	return sf_writef_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readRaw (void *ptr, sf_count_t bytes)
-{	return sf_read_raw (p->sf, ptr, bytes) ; }
-
-inline sf_count_t
-SndfileHandle::writeRaw (const void *ptr, sf_count_t bytes)
-{	return sf_write_raw (p->sf, ptr, bytes) ; }
-
-inline SNDFILE *
-SndfileHandle::rawHandle (void)
-{	return (p ? p->sf : NULL) ; }
-
-inline SNDFILE *
-SndfileHandle::takeOwnership (void)
-{
-	if (p == NULL || (p->ref != 1))
-		return NULL ;
-
-	SNDFILE * sf = p->sf ;
-	p->sf = NULL ;
-	delete p ;
-	p = NULL ;
-	return sf ;
-}
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
-
-inline
-SndfileHandle::SndfileHandle (LPCWSTR wpath, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-	p = new (std::nothrow) SNDFILE_ref () ;
-
-	if (p != NULL)
-	{	p->ref = 1 ;
-
-		p->sfinfo.frames = 0 ;
-		p->sfinfo.channels = chans ;
-		p->sfinfo.format = fmt ;
-		p->sfinfo.samplerate = srate ;
-		p->sfinfo.sections = 0 ;
-		p->sfinfo.seekable = 0 ;
-
-		p->sf = sf_wchar_open (wpath, mode, &p->sfinfo) ;
-		} ;
-
-	return ;
-} /* SndfileHandle const wchar_t * constructor */
-
-#endif
-
-#endif	/* SNDFILE_HH */
-
diff --git a/libs/libsndfile/src/strings.c b/libs/libsndfile/src/strings.c
deleted file mode 100644
index c587e9b736..0000000000
--- a/libs/libsndfile/src/strings.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-#define STRINGS_DEBUG 0
-#if STRINGS_DEBUG
-static void hexdump (void *data, int len) ;
-#endif
-
-int
-psf_store_string (SF_PRIVATE *psf, int str_type, const char *str)
-{	char	new_str [128] ;
-	size_t	str_len ;
-	int		k, str_flags ;
-
-	if (str == NULL)
-		return SFE_STR_BAD_STRING ;
-
-	str_len = strlen (str) ;
-
-	/* A few extra checks for write mode. */
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((psf->strings.flags & SF_STR_ALLOW_START) == 0)
-			return SFE_STR_NO_SUPPORT ;
-		if (psf->have_written && (psf->strings.flags & SF_STR_ALLOW_END) == 0)
-			return SFE_STR_NO_SUPPORT ;
-		/* Only allow zero length strings for software. */
-		if (str_type != SF_STR_SOFTWARE && str_len == 0)
-			return SFE_STR_BAD_STRING ;
-		} ;
-
-	/* Find the next free slot in table. */
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-	{	/* If we find a matching entry clear it. */
-		if (psf->strings.data [k].type == str_type)
-			psf->strings.data [k].type = -1 ;
-
-		if (psf->strings.data [k].type == 0)
-			break ;
-		} ;
-
-	/* Determine flags */
-	str_flags = SF_STR_LOCATE_START ;
-	if (psf->file.mode == SFM_RDWR || psf->have_written)
-	{	if ((psf->strings.flags & SF_STR_ALLOW_END) == 0)
-			return SFE_STR_NO_ADD_END ;
-		str_flags = SF_STR_LOCATE_END ;
-		} ;
-
-	/* More sanity checking. */
-	if (k >= SF_MAX_STRINGS)
-		return SFE_STR_MAX_COUNT ;
-
-	if (k == 0 && psf->strings.storage_used != 0)
-	{	psf_log_printf (psf, "SFE_STR_WEIRD : k == 0 && psf->strings.storage_used != 0\n") ;
-		return SFE_STR_WEIRD ;
-		} ;
-
-	if (k != 0 && psf->strings.storage_used == 0)
-	{	psf_log_printf (psf, "SFE_STR_WEIRD : k != 0 && psf->strings.storage_used == 0\n") ;
-		return SFE_STR_WEIRD ;
-		} ;
-
-	/* Special case for the first string. */
-	if (k == 0)
-		psf->strings.storage_used = 0 ;
-
-	switch (str_type)
-	{	case SF_STR_SOFTWARE :
-				/* In write mode, want to append libsndfile-version to string. */
-				if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-				{	if (strstr (str, PACKAGE) == NULL)
-					{	/*
-						** If the supplied string does not already contain a
-						** libsndfile-X.Y.Z component, then add it.
-						*/
-						if (strlen (str) == 0)
-							snprintf (new_str, sizeof (new_str), "%s-%s", PACKAGE, VERSION) ;
-						else
-							snprintf (new_str, sizeof (new_str), "%s (%s-%s)", str, PACKAGE, VERSION) ;
-						}
-					else
-						snprintf (new_str, sizeof (new_str), "%s", str) ;
-
-					str = new_str ;
-					} ;
-				break ;
-
-		case SF_STR_TITLE :
-		case SF_STR_COPYRIGHT :
-		case SF_STR_ARTIST :
-		case SF_STR_COMMENT :
-		case SF_STR_DATE :
-		case SF_STR_ALBUM :
-		case SF_STR_LICENSE :
-		case SF_STR_TRACKNUMBER :
-		case SF_STR_GENRE :
-				break ;
-
-		default :
-			psf_log_printf (psf, "%s : SFE_STR_BAD_TYPE\n", __func__) ;
-			return SFE_STR_BAD_TYPE ;
-		} ;
-
-	/* Plus one to catch string terminator. */
-	str_len = strlen (str) + 1 ;
-
-	if (psf->strings.storage_used + str_len + 1 > psf->strings.storage_len)
-	{	char * temp = psf->strings.storage ;
-		size_t newlen = 2 * psf->strings.storage_len + str_len + 1 ;
-
-		newlen = newlen < 256 ? 256 : newlen ;
-
-		if ((psf->strings.storage = realloc (temp, newlen)) == NULL)
-		{	psf->strings.storage = temp ;
-			return SFE_MALLOC_FAILED ;
-			} ;
-
-		psf->strings.storage_len = newlen ;
-		} ;
-
-	psf->strings.data [k].type = str_type ;
-	psf->strings.data [k].offset = psf->strings.storage_used ;
-	psf->strings.data [k].flags = str_flags ;
-
-	memcpy (psf->strings.storage + psf->strings.storage_used, str, str_len) ;
-	psf->strings.storage_used += str_len ;
-
-	psf->strings.flags |= str_flags ;
-
-#if STRINGS_DEBUG
-	psf_log_printf (psf, "str_storage          : %p\n", psf->strings.storage) ;
-	psf_log_printf (psf, "storage_used             : %u\n", psf->strings.storage_used) ;
-	psf_log_printf (psf, "used                 : %d\n", psf->strings.storage_used) ;
-	psf_log_printf (psf, "remaining            : %d\n", psf->strings.storage_len - psf->strings.storage_used ;
-
-	hexdump (psf->strings.storage, 300) ;
-#endif
-
-	return 0 ;
-} /* psf_store_string */
-
-int
-psf_set_string (SF_PRIVATE *psf, int str_type, const char *str)
-{	if (psf->file.mode == SFM_READ)
-		return SFE_STR_NOT_WRITE ;
-
-	return psf_store_string (psf, str_type, str) ;
-} /* psf_set_string */
-
-const char*
-psf_get_string (SF_PRIVATE *psf, int str_type)
-{	int k ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-		if (str_type == psf->strings.data [k].type)
-			return psf->strings.storage + psf->strings.data [k].offset ;
-
-	return NULL ;
-} /* psf_get_string */
-
-int
-psf_location_string_count (const SF_PRIVATE * psf, int location)
-{	int k, count = 0 ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-		if (psf->strings.data [k].type > 0 && psf->strings.data [k].flags & location)
-			count ++ ;
-
-	return count ;
-} /* psf_location_string_count */
-
-/*==============================================================================
-*/
-
-#if STRINGS_DEBUG
-
-#include <ctype.h>
-static void
-hexdump (void *data, int len)
-{	unsigned char *ptr ;
-	int k ;
-
-	ptr = data ;
-
-	puts ("---------------------------------------------------------") ;
-	while (len >= 16)
-	{	for (k = 0 ; k < 16 ; k++)
-			printf ("%02X ", ptr [k] & 0xFF) ;
-		printf ("   ") ;
-		for (k = 0 ; k < 16 ; k++)
-			printf ("%c", psf_isprint (ptr [k]) ? ptr [k] : '.') ;
-		puts ("") ;
-		ptr += 16 ;
-		len -= 16 ;
-		} ;
-} /* hexdump */
-
-#endif
diff --git a/libs/libsndfile/src/svx.c b/libs/libsndfile/src/svx.c
deleted file mode 100644
index b611f760af..0000000000
--- a/libs/libsndfile/src/svx.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdarg.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
-*/
-
-#define FORM_MARKER	(MAKE_MARKER ('F', 'O', 'R', 'M'))
-#define SVX8_MARKER	(MAKE_MARKER ('8', 'S', 'V', 'X'))
-#define SV16_MARKER	(MAKE_MARKER ('1', '6', 'S', 'V'))
-#define VHDR_MARKER	(MAKE_MARKER ('V', 'H', 'D', 'R'))
-#define BODY_MARKER	(MAKE_MARKER ('B', 'O', 'D', 'Y'))
-
-#define ATAK_MARKER	(MAKE_MARKER ('A', 'T', 'A', 'K'))
-#define RLSE_MARKER	(MAKE_MARKER ('R', 'L', 'S', 'E'))
-
-#define c_MARKER	(MAKE_MARKER ('(', 'c', ')', ' '))
-#define NAME_MARKER	(MAKE_MARKER ('N', 'A', 'M', 'E'))
-#define AUTH_MARKER	(MAKE_MARKER ('A', 'U', 'T', 'H'))
-#define ANNO_MARKER	(MAKE_MARKER ('A', 'N', 'N', 'O'))
-#define CHAN_MARKER	(MAKE_MARKER ('C', 'H', 'A', 'N'))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-typedef struct
-{	unsigned int	oneShotHiSamples, repeatHiSamples, samplesPerHiCycle ;
-	unsigned short	samplesPerSec ;
-	unsigned char	octave, compression ;
-	unsigned int	volume ;
-} VHDR_CHUNK ;
-
-enum {
-	HAVE_FORM	= 0x01,
-
-	HAVE_SVX	= 0x02,
-	HAVE_VHDR	= 0x04,
-	HAVE_BODY	= 0x08
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static int	svx_close	(SF_PRIVATE *psf) ;
-static int	svx_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int 	svx_read_header	(SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-svx_open	(SF_PRIVATE *psf)
-{	int error ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = svx_read_header (psf)))
-			return error ;
-
-		psf->endian = SF_ENDIAN_BIG ;			/* All SVX files are big endian. */
-
-		psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-		if (psf->blockwidth)
-			psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SVX)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-		if (psf->endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU))
-			return SFE_BAD_ENDIAN ;
-
-		psf->endian = SF_ENDIAN_BIG ;			/* All SVX files are big endian. */
-
-		error = svx_write_header (psf, SF_FALSE) ;
-		if (error)
-			return error ;
-
-		psf->write_header = svx_write_header ;
-		} ;
-
-	psf->container_close = svx_close ;
-
-	if ((error = pcm_init (psf)))
-		return error ;
-
-	return 0 ;
-} /* svx_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-svx_read_header	(SF_PRIVATE *psf)
-{	VHDR_CHUNK		vhdr ;
-	unsigned int	FORMsize, vhdrsize, dword, marker ;
-	int				filetype = 0, parsestage = 0, done = 0 ;
-	int 			bytecount = 0, channels ;
-
-	if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-		psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-	memset (&vhdr, 0, sizeof (vhdr)) ;
-	psf_binheader_readf (psf, "p", 0) ;
-
-	/* Set default number of channels. Modify later if necessary */
-	psf->sf.channels = 1 ;
-
-	psf->sf.format = SF_FORMAT_SVX ;
-
-	while (! done)
-	{	psf_binheader_readf (psf, "m", &marker) ;
-		switch (marker)
-		{	case FORM_MARKER :
-					if (parsestage)
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &FORMsize) ;
-
-					if (FORMsize != psf->filelength - 2 * sizeof (dword))
-					{	dword = psf->filelength - 2 * sizeof (dword) ;
-						psf_log_printf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ;
-						FORMsize = dword ;
-						}
-					else
-						psf_log_printf (psf, "FORM : %d\n", FORMsize) ;
-					parsestage |= HAVE_FORM ;
-					break ;
-
-			case SVX8_MARKER :
-			case SV16_MARKER :
-					if (! (parsestage & HAVE_FORM))
-						return SFE_SVX_NO_FORM ;
-					filetype = marker ;
-					psf_log_printf (psf, " %M\n", marker) ;
-					parsestage |= HAVE_SVX ;
-					break ;
-
-			case VHDR_MARKER :
-					if (! (parsestage & (HAVE_FORM | HAVE_SVX)))
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &vhdrsize) ;
-
-					psf_log_printf (psf, " VHDR : %d\n", vhdrsize) ;
-
-					psf_binheader_readf (psf, "E4442114", &(vhdr.oneShotHiSamples), &(vhdr.repeatHiSamples),
-						&(vhdr.samplesPerHiCycle), &(vhdr.samplesPerSec), &(vhdr.octave), &(vhdr.compression),
-						&(vhdr.volume)) ;
-
-					psf_log_printf (psf, "  OneShotHiSamples  : %d\n", vhdr.oneShotHiSamples) ;
-					psf_log_printf (psf, "  RepeatHiSamples   : %d\n", vhdr.repeatHiSamples) ;
-					psf_log_printf (psf, "  samplesPerHiCycle : %d\n", vhdr.samplesPerHiCycle) ;
-					psf_log_printf (psf, "  Sample Rate       : %d\n", vhdr.samplesPerSec) ;
-					psf_log_printf (psf, "  Octave            : %d\n", vhdr.octave) ;
-
-					psf_log_printf (psf, "  Compression       : %d => ", vhdr.compression) ;
-
-					switch (vhdr.compression)
-					{	case 0 : psf_log_printf (psf, "None.\n") ;
-								break ;
-						case 1 : psf_log_printf (psf, "Fibonacci delta\n") ;
-								break ;
-						case 2 : psf_log_printf (psf, "Exponential delta\n") ;
-								break ;
-						} ;
-
-					psf_log_printf (psf, "  Volume            : %d\n", vhdr.volume) ;
-
-					psf->sf.samplerate 	= vhdr.samplesPerSec ;
-
-					if (filetype == SVX8_MARKER)
-					{	psf->sf.format |= SF_FORMAT_PCM_S8 ;
-						psf->bytewidth = 1 ;
-						}
-					else if (filetype == SV16_MARKER)
-					{	psf->sf.format |= SF_FORMAT_PCM_16 ;
-						psf->bytewidth = 2 ;
-						} ;
-
-					parsestage |= HAVE_VHDR ;
-					break ;
-
-			case BODY_MARKER :
-					if (! (parsestage & HAVE_VHDR))
-						return SFE_SVX_NO_BODY ;
-
-					psf_binheader_readf (psf, "E4", &dword) ;
-					psf->datalength = dword ;
-
-					psf->dataoffset = psf_ftell (psf) ;
-					if (psf->dataoffset < 0)
-						return SFE_SVX_NO_BODY ;
-
-					if (psf->datalength > psf->filelength - psf->dataoffset)
-					{	psf_log_printf (psf, " BODY : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
-						psf->datalength = psf->filelength - psf->dataoffset ;
-						}
-					else
-						psf_log_printf (psf, " BODY : %D\n", psf->datalength) ;
-
-					parsestage |= HAVE_BODY ;
-
-					if (! psf->sf.seekable)
-						break ;
-
-					psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-					break ;
-
-			case NAME_MARKER :
-					if (! (parsestage & HAVE_SVX))
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &dword) ;
-
-					psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-					if (strlen (psf->file.name.c) != dword)
-					{	if (dword > sizeof (psf->file.name.c) - 1)
-							return SFE_SVX_BAD_NAME_LENGTH ;
-
-						psf_binheader_readf (psf, "b", psf->file.name.c, dword) ;
-						psf->file.name.c [dword] = 0 ;
-						}
-					else
-						psf_binheader_readf (psf, "j", dword) ;
-					break ;
-
-			case ANNO_MARKER :
-					if (! (parsestage & HAVE_SVX))
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &dword) ;
-
-					psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-					psf_binheader_readf (psf, "j", dword) ;
-					break ;
-
-			case CHAN_MARKER :
-					if (! (parsestage & HAVE_SVX))
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &dword) ;
-
-					psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-					bytecount += psf_binheader_readf (psf, "E4", &channels) ;
-
-					if (channels == 2 || channels == 4)
-						psf_log_printf (psf, "  Channels : %d => mono\n", channels) ;
-					else if (channels == 6)
-					{	psf->sf.channels = 2 ;
-						psf_log_printf (psf, "  Channels : %d => stereo\n", channels) ;
-						}
-					else
-						psf_log_printf (psf, "  Channels : %d *** assuming mono\n", channels) ;
-
-					psf_binheader_readf (psf, "j", dword - bytecount) ;
-					break ;
-
-
-			case AUTH_MARKER :
-			case c_MARKER :
-					if (! (parsestage & HAVE_SVX))
-						return SFE_SVX_NO_FORM ;
-
-					psf_binheader_readf (psf, "E4", &dword) ;
-
-					psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-					psf_binheader_readf (psf, "j", dword) ;
-					break ;
-
-			default :
-					if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-						&& psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-					{	psf_binheader_readf (psf, "E4", &dword) ;
-
-						psf_log_printf (psf, "%M : %d (unknown marker)\n", marker, dword) ;
-
-						psf_binheader_readf (psf, "j", dword) ;
-						break ;
-						} ;
-					if ((dword = psf_ftell (psf)) & 0x03)
-					{	psf_log_printf (psf, "  Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
-
-						psf_binheader_readf (psf, "j", -3) ;
-						break ;
-						} ;
-					psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
-					done = 1 ;
-			} ;	/* switch (marker) */
-
-		if (! psf->sf.seekable && (parsestage & HAVE_BODY))
-			break ;
-
-		if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (dword))
-			break ;
-		} ; /* while (1) */
-
-	if (vhdr.compression)
-		return SFE_SVX_BAD_COMP ;
-
-	if (psf->dataoffset <= 0)
-		return SFE_SVX_NO_DATA ;
-
-	return 0 ;
-} /* svx_read_header */
-
-static int
-svx_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		svx_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* svx_close */
-
-static int
-svx_write_header (SF_PRIVATE *psf, int calc_length)
-{	static	char 	annotation	[] = "libsndfile by Erik de Castro Lopo\0\0\0" ;
-	sf_count_t	current ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* FORM marker and FORM size. */
-	psf_binheader_writef (psf, "Etm8", FORM_MARKER, (psf->filelength < 8) ?
-			psf->filelength * 0 : psf->filelength - 8) ;
-
-	psf_binheader_writef (psf, "m", (psf->bytewidth == 1) ? SVX8_MARKER : SV16_MARKER) ;
-
-	/* VHDR chunk. */
-	psf_binheader_writef (psf, "Em4", VHDR_MARKER, sizeof (VHDR_CHUNK)) ;
-	/* VHDR : oneShotHiSamples, repeatHiSamples, samplesPerHiCycle */
-	psf_binheader_writef (psf, "E444", psf->sf.frames, 0, 0) ;
-	/* VHDR : samplesPerSec, octave, compression */
-	psf_binheader_writef (psf, "E211", psf->sf.samplerate, 1, 0) ;
-	/* VHDR : volume */
-	psf_binheader_writef (psf, "E4", (psf->bytewidth == 1) ? 0xFF : 0xFFFF) ;
-
-	if (psf->sf.channels == 2)
-		psf_binheader_writef (psf, "Em44", CHAN_MARKER, 4, 6) ;
-
-	/* Filename and annotation strings. */
-	psf_binheader_writef (psf, "Emsms", NAME_MARKER, psf->file.name.c, ANNO_MARKER, annotation) ;
-
-	/* BODY marker and size. */
-	psf_binheader_writef (psf, "Etm8", BODY_MARKER, (psf->datalength < 0) ?
-			psf->datalength * 0 : psf->datalength) ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* svx_write_header */
-
diff --git a/libs/libsndfile/src/test_audio_detect.c b/libs/libsndfile/src/test_audio_detect.c
deleted file mode 100644
index 9706249eae..0000000000
--- a/libs/libsndfile/src/test_audio_detect.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-static unsigned char float_le_mono [] =
-{	0x36, 0x86, 0x21, 0x44, 0xB5, 0xB4, 0x49, 0x44, 0xA2, 0xC0, 0x71, 0x44, 0x7B, 0xD1, 0x8C, 0x44,
-	0x54, 0xAA, 0xA0, 0x44, 0x60, 0x67, 0xB4, 0x44, 0x22, 0x05, 0xC8, 0x44, 0x29, 0x80, 0xDB, 0x44,
-	0x04, 0xD5, 0xEE, 0x44, 0x27, 0x00, 0x01, 0x45, 0x50, 0x7F, 0x0A, 0x45, 0x53, 0xE6, 0x13, 0x45,
-	0x85, 0x33, 0x1D, 0x45, 0x43, 0x65, 0x26, 0x45, 0xEC, 0x79, 0x2F, 0x45, 0xE3, 0x6F, 0x38, 0x45,
-	0x98, 0x45, 0x41, 0x45, 0x77, 0xF9, 0x49, 0x45, 0xF6, 0x89, 0x52, 0x45, 0x8F, 0xF5, 0x5A, 0x45,
-	0xC9, 0x3A, 0x63, 0x45, 0x28, 0x58, 0x6B, 0x45, 0x3C, 0x4C, 0x73, 0x45, 0x9F, 0x15, 0x7B, 0x45,
-	0x75, 0x59, 0x81, 0x45, 0x64, 0x11, 0x85, 0x45, 0xF1, 0xB1, 0x88, 0x45, 0x78, 0x3A, 0x8C, 0x45,
-	0x58, 0xAA, 0x8F, 0x45, 0xF2, 0x00, 0x93, 0x45, 0xB2, 0x3D, 0x96, 0x45, 0x01, 0x60, 0x99, 0x45,
-	0x50, 0x67, 0x9C, 0x45, 0x15, 0x53, 0x9F, 0x45, 0xCC, 0x22, 0xA2, 0x45, 0xF0, 0xD5, 0xA4, 0x45,
-	0x07, 0x6C, 0xA7, 0x45, 0x9C, 0xE4, 0xA9, 0x45, 0x3D, 0x3F, 0xAC, 0x45, 0x7A, 0x7B, 0xAE, 0x45,
-	0xF2, 0x98, 0xB0, 0x45, 0x3C, 0x97, 0xB2, 0x45, 0x02, 0x76, 0xB4, 0x45, 0xEC, 0x34, 0xB6, 0x45,
-	0xA8, 0xD3, 0xB7, 0x45, 0xEB, 0x51, 0xB9, 0x45, 0x6F, 0xAF, 0xBA, 0x45, 0xF5, 0xEB, 0xBB, 0x45,
-	0x41, 0x07, 0xBD, 0x45, 0x21, 0x01, 0xBE, 0x45, 0x64, 0xD9, 0xBE, 0x45, 0xE3, 0x8F, 0xBF, 0x45,
-	0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-	0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-	0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-} ;
-
-static unsigned char int24_32_le_stereo [] =
-{
-	0x00, 0xE7, 0xFB, 0xFF, 0x00, 0x7C, 0xFD, 0xFF, 0x00, 0xA2, 0xFC, 0xFF, 0x00, 0x2B, 0xFC, 0xFF,
-	0x00, 0xF3, 0xFD, 0xFF, 0x00, 0x19, 0xFB, 0xFF, 0x00, 0xA5, 0xFE, 0xFF, 0x00, 0x8D, 0xFA, 0xFF,
-	0x00, 0x91, 0xFF, 0xFF, 0x00, 0xB5, 0xFA, 0xFF, 0x00, 0x91, 0x00, 0x00, 0x00, 0x5E, 0xFB, 0xFF,
-	0x00, 0xD9, 0x01, 0x00, 0x00, 0x82, 0xFB, 0xFF, 0x00, 0xDF, 0x03, 0x00, 0x00, 0x44, 0xFC, 0xFF,
-	0x00, 0x1C, 0x05, 0x00, 0x00, 0x77, 0xFC, 0xFF, 0x00, 0x8D, 0x06, 0x00, 0x00, 0x4F, 0xFC, 0xFF,
-	0x00, 0x84, 0x07, 0x00, 0x00, 0x74, 0xFC, 0xFF, 0x00, 0x98, 0x08, 0x00, 0x00, 0x33, 0xFD, 0xFF,
-	0x00, 0xB9, 0x09, 0x00, 0x00, 0x48, 0xFF, 0xFF, 0x00, 0xD1, 0x0A, 0x00, 0x00, 0x10, 0x02, 0x00,
-	0x00, 0x28, 0x0C, 0x00, 0x00, 0xA2, 0x05, 0x00, 0x00, 0xA7, 0x0C, 0x00, 0x00, 0x45, 0x08, 0x00,
-	0x00, 0x44, 0x0D, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0x00, 0x65, 0x0D, 0x00, 0x00, 0x51, 0x0B, 0x00,
-	0x00, 0x8B, 0x0D, 0x00, 0x00, 0x18, 0x0B, 0x00, 0x00, 0x37, 0x0E, 0x00, 0x00, 0x24, 0x0B, 0x00,
-	0x00, 0x00, 0x0F, 0x00, 0x00, 0xDD, 0x0A, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00, 0x31, 0x0A, 0x00,
-	0x00, 0x07, 0x12, 0x00, 0x00, 0xC0, 0x08, 0x00, 0x00, 0xF7, 0x12, 0x00, 0x00, 0x47, 0x06, 0x00,
-	0x00, 0xDD, 0x12, 0x00, 0x00, 0x6A, 0x03, 0x00, 0x00, 0xD5, 0x11, 0x00, 0x00, 0x99, 0x00, 0x00,
-	0x00, 0x01, 0x10, 0x00, 0x00, 0xC5, 0xFE, 0xFF, 0x00, 0xF4, 0x0D, 0x00, 0x00, 0x97, 0xFD, 0xFF,
-	0x00, 0x62, 0x0B, 0x00, 0x00, 0x75, 0xFC, 0xFF, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xC0, 0xFB, 0xFF,
-	0x00, 0x80, 0x06, 0x00, 0x00, 0x3C, 0xFB, 0xFF, 0x00, 0xDA, 0x03, 0x00, 0x00, 0xE4, 0xFA, 0xFF,
-	0x00, 0xEB, 0x01, 0x00, 0x00, 0x21, 0xFB, 0xFF, 0x00, 0x20, 0x00, 0x00, 0x00, 0xE7, 0xFB, 0xFF,
-} ;
-
-
-void
-test_audio_detect (void)
-{
-	SF_PRIVATE psf ;
-	AUDIO_DETECT ad ;
-	int errors = 0 ;
-
-	print_test_name ("Testing audio detect") ;
-
-	memset (&psf, 0, sizeof (psf)) ;
-
-	ad.endianness = SF_ENDIAN_LITTLE ;
-	ad.channels = 1 ;
-	if (audio_detect (&psf, &ad, float_le_mono, sizeof (float_le_mono)) != SF_FORMAT_FLOAT)
-	{	puts ("    float_le_mono") ;
-		errors ++ ;
-		} ;
-
-	ad.endianness = SF_ENDIAN_LITTLE ;
-	ad.channels = 2 ;
-	if (audio_detect (&psf, &ad, int24_32_le_stereo, sizeof (int24_32_le_stereo)) != SF_FORMAT_PCM_32)
-	{	if (errors == 0) puts ("\nFailed tests :\n") ;
-		puts ("    int24_32_le_stereo") ;
-		errors ++ ;
-		} ;
-
-	if (errors != 0)
-	{	printf ("\n    Errors : %d\n\n", errors) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-
-	return ;
-} /* test_audio_detect */
diff --git a/libs/libsndfile/src/test_broadcast_var.c b/libs/libsndfile/src/test_broadcast_var.c
deleted file mode 100644
index dbea943124..0000000000
--- a/libs/libsndfile/src/test_broadcast_var.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define	BCAST_MAX	512
-
-typedef SF_BROADCAST_INFO_VAR (BCAST_MAX) SF_BROADCAST_INFO_512 ;
-
-static void
-fill_coding_history (SF_BROADCAST_INFO_512 * bi)
-{	static const char *lines [] =
-	{	"Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit.",
-		"Donec dignissim erat\nvehicula libero condimentum\ndictum porta augue faucibus.",
-		"Maecenas nec turpis\nsit amet quam\nfaucibus adipiscing.",
-		"Mauris aliquam,\nlectus interdum\ntincidunt luctus.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"In auctor lorem\nvel est euismod\ncondimentum.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Ut vitae magna\nid dui placerat vehicula\nin id lectus.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Sed lacus leo,\nmolestie et luctus ac,\ntincidunt sit amet nisi.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Sed ligula neque,\ngravida semper vulputate laoreet,\ngravida eu tellus.",
-		"Donec dolor dolor,\nscelerisque in consequat ornare,\ntempor nec nisl."
-	} ;
-	int k ;
-
-	bi->coding_history [0] = 0 ;
-
-	for (k = 0 ; strlen (bi->coding_history) < bi->coding_history_size - 1 ; k ++)
-		append_snprintf (bi->coding_history, bi->coding_history_size, "%s\n", lines [k % ARRAY_LEN (lines)]) ;
-
-	return ;
-} /* fill_coding_listory */
-
-static void
-test_broadcast_var_set (void)
-{	SF_PRIVATE	sf_private, *psf ;
-	int k ;
-
-	psf = &sf_private ;
-	memset (psf, 0, sizeof (sf_private)) ;
-
-	print_test_name ("Testing broadcast_var_set ") ;
-
-	for (k = 64 ; k < BCAST_MAX ; k++)
-	{
-		SF_BROADCAST_INFO_512 bi ;
-
-		memset (&bi, 0, sizeof (bi)) ;
-
-		bi.coding_history_size = k ;
-		fill_coding_history (&bi) ;
-		bi.coding_history_size -- ;
-
-		broadcast_var_set (psf, (SF_BROADCAST_INFO*) &bi, sizeof (bi)) ;
-		} ;
-
-	if (psf->broadcast_16k != NULL)
-		free (psf->broadcast_16k) ;
-
-	puts ("ok") ;
-} /* test_broadcast_var_set */
-
-static void
-test_broadcast_var_zero (void)
-{	SF_PRIVATE	sf_private, *psf ;
-	SF_BROADCAST_INFO_VAR (0) bi ;
-
-	psf = &sf_private ;
-	memset (psf, 0, sizeof (sf_private)) ;
-	psf->file.mode = SFM_RDWR ;
-
-	print_test_name ("Testing broadcast_var_zero ") ;
-
-	memset (&bi, 0, sizeof (bi)) ;
-
-	broadcast_var_set (psf, (SF_BROADCAST_INFO*) &bi, sizeof (bi)) ;
-
-	if (psf->broadcast_16k->coding_history_size != 0)
-	{	printf ("\n\nLine %d: coding_history_size %d should be zero.\n\n", __LINE__, psf->broadcast_16k->coding_history_size) ;
-		exit (1) ;
-		} ;
-
-	if (psf->broadcast_16k != NULL)
-		free (psf->broadcast_16k) ;
-
-	puts ("ok") ;
-} /* test_broadcast_var_zero */
-
-void
-test_broadcast_var (void)
-{	test_broadcast_var_set () ;
-	test_broadcast_var_zero () ;
-} /* test_broadcast_var */
diff --git a/libs/libsndfile/src/test_cart_var.c b/libs/libsndfile/src/test_cart_var.c
deleted file mode 100644
index 532a755876..0000000000
--- a/libs/libsndfile/src/test_cart_var.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** Copyright (C) 2010-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define	CART_MAX	512
-
-typedef SF_CART_INFO_VAR (CART_MAX) SF_CART_INFO_512 ;
-
-static void
-fill_tag_text (SF_CART_INFO_512 * ci)
-{	static const char *lines [] =
-	{	"Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit.",
-		"Donec dignissim erat\nvehicula libero condimentum\ndictum porta augue faucibus.",
-		"Maecenas nec turpis\nsit amet quam\nfaucibus adipiscing.",
-		"Mauris aliquam,\nlectus interdum\ntincidunt luctus.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"In auctor lorem\nvel est euismod\ncondimentum.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Ut vitae magna\nid dui placerat vehicula\nin id lectus.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Sed lacus leo,\nmolestie et luctus ac,\ntincidunt sit amet nisi.",
-		"\n\n\n\n\n\n\n\n\n\n\n\n",
-		"Sed ligula neque,\ngravida semper vulputate laoreet,\ngravida eu tellus.",
-		"Donec dolor dolor,\nscelerisque in consequat ornare,\ntempor nec nisl."
-	} ;
-	int k ;
-
-	ci->tag_text [0] = 0 ;
-
-	for (k = 0 ; strlen (ci->tag_text) < ci->tag_text_size - 1 ; k ++)
-		append_snprintf (ci->tag_text, ci->tag_text_size, "%s\n", lines [k % ARRAY_LEN (lines)]) ;
-
-	return ;
-} /* fill_tag_text */
-
-void
-test_cart_var (void)
-{	SF_PRIVATE	sf_private, *psf ;
-	SF_CART_TIMER timer ;
-	int k ;
-
-	psf = &sf_private ;
-	memset (psf, 0, sizeof (sf_private)) ;
-
-	print_test_name ("Testing cart_var_set ") ;
-
-	for (k = 64 ; k < CART_MAX ; k++)
-	{
-		SF_CART_INFO_512 ci ;
-
-		memset (&ci, 0, sizeof (ci)) ;
-
-		memset (&timer, 0, sizeof (timer)) ;
-		memcpy (ci.post_timers, &timer, sizeof (timer)) ;
-
-		ci.tag_text_size = k ;
-		fill_tag_text (&ci) ;
-		ci.tag_text_size -- ;
-
-		cart_var_set (psf, (SF_CART_INFO*) &ci, sizeof (ci)) ;
-		} ;
-
-	if (psf->cart_16k != NULL)
-		free (psf->cart_16k) ;
-
-	puts ("ok") ;
-} /* test_cart_var */
diff --git a/libs/libsndfile/src/test_conversions.c b/libs/libsndfile/src/test_conversions.c
deleted file mode 100644
index 7e8c2edee0..0000000000
--- a/libs/libsndfile/src/test_conversions.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#include "common.h"
-#include "test_main.h"
-
-
-/*
-** This is a bit rough, but it is the nicest way to do it.
-*/
-
-#define cmp_test(line, ival, tval, str) \
-	if (ival != tval) \
-	{	printf (str, line, ival, tval) ; \
-		exit (1) ; \
-		} ;
-
-static void
-conversion_test (char endian)
-{
-	SF_PRIVATE	sf_private, *psf ;
-	const char * filename = "conversion.bin" ;
-	int64_t i64 = SF_PLATFORM_S64 (0x0123456789abcdef), t64 = 0 ;
-	char format_str [16] ;
-	char test_name [64] ;
-	char i8 = 12, t8 = 0 ;
-	short i16 = 0x123, t16 = 0 ;
-	int i24 = 0x23456, t24 = 0 ;
-	int i32 = 0x0a0b0c0d, t32 = 0 ;
-	int bytes ;
-
-	snprintf (format_str, sizeof (format_str), "%c12348", endian) ;
-
-	snprintf (test_name, sizeof (test_name), "Testing %s conversions", endian == 'e' ? "little endian" : "big endian") ;
-	print_test_name (test_name) ;
-
-	psf = &sf_private ;
-	memset (psf, 0, sizeof (sf_private)) ;
-
-	psf->file.mode = SFM_WRITE ;
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-	if (psf_fopen (psf) != 0)
-	{	printf ("\n\nError : failed to open file '%s' for write.\n\n", filename) ;
-		exit (1) ;
-		} ;
-
-	psf_binheader_writef (psf, format_str, i8, i16, i24, i32, i64) ;
-	psf_fwrite (psf->header, 1, psf->headindex, psf) ;
-	psf_fclose (psf) ;
-
-	memset (psf, 0, sizeof (sf_private)) ;
-
-	psf->file.mode = SFM_READ ;
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-	if (psf_fopen (psf) != 0)
-	{	printf ("\n\nError : failed to open file '%s' for read.\n\n", filename) ;
-		exit (1) ;
-		} ;
-
-	bytes = psf_binheader_readf (psf, format_str, &t8, &t16, &t24, &t32, &t64) ;
-	psf_fclose (psf) ;
-
-	if (bytes != 18)
-	{	printf ("\n\nLine %d : read %d bytes.\n\n", __LINE__, bytes) ;
-		exit (1) ;
-		} ;
-
-	cmp_test (__LINE__, i8, t8, "\n\nLine %d : 8 bit int failed %d -> %d.\n\n") ;
-	cmp_test (__LINE__, i16, t16, "\n\nLine %d : 16 bit int failed 0x%x -> 0x%x.\n\n") ;
-	cmp_test (__LINE__, i24, t24, "\n\nLine %d : 24 bit int failed 0x%x -> 0x%x.\n\n") ;
-	cmp_test (__LINE__, i32, t32, "\n\nLine %d : 32 bit int failed 0x%x -> 0x%x.\n\n") ;
-	cmp_test (__LINE__, i64, t64, "\n\nLine %d : 64 bit int failed 0x%" PRIx64 "x -> 0x%" PRIx64 "x.\n\n") ;
-
-	remove (filename) ;
-	puts ("ok") ;
-} /* conversion_test */
-
-void
-test_conversions (void)
-{
-	conversion_test ('E') ;
-	conversion_test ('e') ;
-} /* test_conversion */
-
diff --git a/libs/libsndfile/src/test_endswap.c b/libs/libsndfile/src/test_endswap.c
deleted file mode 100644
index 4931650c87..0000000000
--- a/libs/libsndfile/src/test_endswap.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-#define	FMT_SHORT	"0x%04x\n"
-#define	FMT_INT		"0x%08x\n"
-#define	FMT_INT64	"0x%016" PRIx64 "\n"
-
-/*==============================================================================
-** Test functions.
-*/
-
-
-static void
-dump_short_array (const char * name, short * data, int datalen)
-{	int k ;
-
-	printf ("%-6s : ", name) ;
-	for (k = 0 ; k < datalen ; k++)
-		printf (FMT_SHORT, data [k]) ;
-	putchar ('\n') ;
-} /* dump_short_array */
-
-static void
-test_endswap_short (void)
-{	short orig [4], first [4], second [4] ;
-	int k ;
-
-	printf ("    %-40s : ", "test_endswap_short") ;
-	fflush (stdout) ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-		orig [k] = 0x3210 + k ;
-
-	endswap_short_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_short_copy (second, first, ARRAY_LEN (second)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) == 0)
-	{	printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-		dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_short_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	if (memcmp (orig, second, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-		dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_short_array ("second", second, ARRAY_LEN (second)) ;
-		exit (1) ;
-		} ;
-
-	endswap_short_array (first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-		dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_short_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	endswap_short_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_short_copy (first, first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-		dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_short_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_endswap_short */
-
-static void
-dump_int_array (const char * name, int * data, int datalen)
-{	int k ;
-
-	printf ("%-6s : ", name) ;
-	for (k = 0 ; k < datalen ; k++)
-		printf (FMT_INT, data [k]) ;
-	putchar ('\n') ;
-} /* dump_int_array */
-
-static void
-test_endswap_int (void)
-{	int orig [4], first [4], second [4] ;
-	int k ;
-
-	printf ("    %-40s : ", "test_endswap_int") ;
-	fflush (stdout) ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-		orig [k] = 0x76543210 + k ;
-
-	endswap_int_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_int_copy (second, first, ARRAY_LEN (second)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) == 0)
-	{	printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-		dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	if (memcmp (orig, second, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int_array ("second", second, ARRAY_LEN (second)) ;
-		exit (1) ;
-		} ;
-
-	endswap_int_array (first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	endswap_int_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_int_copy (first, first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_endswap_int */
-
-static void
-dump_int64_t_array (const char * name, int64_t * data, int datalen)
-{	int k ;
-
-	printf ("%-6s : ", name) ;
-	for (k = 0 ; k < datalen ; k++)
-		printf (FMT_INT64, data [k]) ;
-	putchar ('\n') ;
-} /* dump_int64_t_array */
-
-static void
-test_endswap_int64_t (void)
-{	int64_t orig [4], first [4], second [4] ;
-	int k ;
-
-	printf ("    %-40s : ", "test_endswap_int64_t") ;
-	fflush (stdout) ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-		orig [k] = 0x0807050540302010LL + k ;
-
-	endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_int64_t_copy (second, first, ARRAY_LEN (second)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) == 0)
-	{	printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-		dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	if (memcmp (orig, second, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int64_t_array ("second", second, ARRAY_LEN (second)) ;
-		exit (1) ;
-		} ;
-
-	endswap_int64_t_array (first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_int64_t_copy (first, first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-		dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_endswap_int64_t */
-
-
-
-void
-test_endswap (void)
-{
-	test_endswap_short () ;
-	test_endswap_int () ;
-	test_endswap_int64_t () ;
-
-} /* test_endswap */
-
diff --git a/libs/libsndfile/src/test_endswap.def b/libs/libsndfile/src/test_endswap.def
deleted file mode 100644
index 9516e4d67c..0000000000
--- a/libs/libsndfile/src/test_endswap.def
+++ /dev/null
@@ -1,40 +0,0 @@
-autogen definitions test_endswap.tpl;
-
-int_type = {
-	name		= short ;
-	value		= 0x3210 ;
-	format		= FMT_SHORT ;
-	} ;
-
-int_type = {
-	name		= int ;
-	value		= 0x76543210 ;
-	format		= FMT_INT ;
-	} ;
-
-int_type = {
-	name		= int64_t ;
-	value		= "0x0807050540302010LL" ;
-	format		= FMT_INT64 ;
-	} ;
-
-int_size = {
-	name		= 16 ;
-	typename	= int16_t ;
-	value		= 0x4142 ;
-	strval		= "AB" ;
-	} ;
-
-int_size = {
-	name		= 32 ;
-	typename	= int32_t ;
-	value		= 0x30313233 ;
-	strval		= "0123" ;
-	} ;
-
-int_size = {
-	name		= 64 ;
-	typename	= int64_t ;
-	value		= 0x3031323334353637 ;
-	strval		= "01234567" ;
-	} ;
diff --git a/libs/libsndfile/src/test_endswap.tpl b/libs/libsndfile/src/test_endswap.tpl
deleted file mode 100644
index 89b7d1473a..0000000000
--- a/libs/libsndfile/src/test_endswap.tpl
+++ /dev/null
@@ -1,151 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-#define	FMT_SHORT	"0x%04x\n"
-#define	FMT_INT		"0x%08x\n"
-#define	FMT_INT64	"0x%016" PRIx64 "\n"
-
-/*==============================================================================
-** Test functions.
-*/
-
-[+ FOR int_type +]
-static void
-dump_[+ (get "name") +]_array (const char * name, [+ (get "name") +] * data, int datalen)
-{	int k ;
-
-	printf ("%-6s : ", name) ;
-	for (k = 0 ; k < datalen ; k++)
-		printf ([+ (get "format") +], data [k]) ;
-	putchar ('\n') ;
-} /* dump_[+ (get "name") +]_array */
-
-static void
-test_endswap_[+ (get "name") +] (void)
-{	[+ (get "name") +] orig [4], first [4], second [4] ;
-	int k ;
-
-	printf ("    %-40s : ", "test_endswap_[+ (get "name") +]") ;
-	fflush (stdout) ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-		orig [k] = [+ (get "value") +] + k ;
-
-	endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_[+ (get "name") +]_copy (second, first, ARRAY_LEN (second)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) == 0)
-	{	printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-		dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	if (memcmp (orig, second, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-		dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_[+ (get "name") +]_array ("second", second, ARRAY_LEN (second)) ;
-		exit (1) ;
-		} ;
-
-	endswap_[+ (get "name") +]_array (first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-		dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ;
-	endswap_[+ (get "name") +]_copy (first, first, ARRAY_LEN (first)) ;
-
-	if (memcmp (orig, first, sizeof (orig)) != 0)
-	{	printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-		dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-		dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_endswap_[+ (get "name") +] */
-[+ ENDFOR int_type
-+]
-
-[+ FOR int_size +]
-static void
-test_psf_put_be[+ (get "name") +] (void)
-{	const char *test = "[+ (get "strval") +]" ;
-	uint8_t array [32] ;
-	int k ;
-
-	printf ("    %-40s : ", __func__) ;
-	fflush (stdout) ;
-
-	for (k = 0 ; k < 10 ; k++)
-	{	memset (array, 0, sizeof (array)) ;
-
-		psf_put_be[+ (get "name") +] (array, k, [+ (get "value") +]) ;
-		if (memcmp (array + k, test, sizeof ([+ (get "typename") +])) != 0)
-		{	printf ("\n\nLine %d : Put failed at index %d.\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-		if (psf_get_be[+ (get "name") +] (array, k) != [+ (get "value") +])
-		{	printf ("\n\nLine %d : Get failed at index %d.\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	puts ("ok") ;
-} /* test_psf_put_be[+ (get "name") +] */
-[+ ENDFOR int_size
-+]
-
-void
-test_endswap (void)
-{
-[+ FOR int_type
-+]	test_endswap_[+ (get "name") +] () ;
-[+ ENDFOR int_type
-+]
-
-[+ FOR int_size
-+]	test_psf_put_be[+ (get "name") +] () ;
-[+ ENDFOR int_endsize
-+]
-
-} /* test_endswap */
-
diff --git a/libs/libsndfile/src/test_file_io.c b/libs/libsndfile/src/test_file_io.c
deleted file mode 100644
index 08fccebd21..0000000000
--- a/libs/libsndfile/src/test_file_io.c
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-static void make_data (int *data, int len, int seed) ;
-
-static void file_open_test (const char *filename) ;
-static void file_read_write_test (const char *filename) ;
-static void file_truncate_test (const char *filename) ;
-
-static void test_open_or_die (SF_PRIVATE *psf, int linenum) ;
-static void test_close_or_die (SF_PRIVATE *psf, int linenum) ;
-
-static void test_write_or_die	(SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ;
-static void test_read_or_die	(SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ;
-static void test_equal_or_die	(int *array1, int *array2, int len, int linenum) ;
-static void test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum) ;
-
-
-
-/*==============================================================================
-** Actual test functions.
-*/
-
-static void
-file_open_test (const char *filename)
-{	SF_PRIVATE sf_data, *psf ;
-	int		error ;
-
-	print_test_name ("Testing file open") ;
-
-	memset (&sf_data, 0, sizeof (sf_data)) ;
-	psf = &sf_data ;
-
-	/* Ensure that the file doesn't already exist. */
-	if (unlink (filename) != 0 && errno != ENOENT)
-	{	printf ("\n\nLine %d: unlink failed (%d) : %s\n\n", __LINE__, errno, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	psf->file.mode = SFM_READ ;
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-	/* Test that open for read fails if the file doesn't exist. */
-	error = psf_fopen (psf) ;
-	if (error == 0)
-	{	printf ("\n\nLine %d: psf_fopen() should have failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Reset error to zero. */
-	psf->error = SFE_NO_ERROR ;
-
-	/* Test file open in write mode. */
-	psf->file.mode = SFM_WRITE ;
-	test_open_or_die (psf, __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-
-	unlink (psf->file.path.c) ;
-
-	/* Test file open in read/write mode for a non-existant file. */
-	psf->file.mode = SFM_RDWR ;
-	test_open_or_die (psf, __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-
-	/* Test file open in read/write mode for an existing file. */
-	psf->file.mode = SFM_RDWR ;
-	test_open_or_die (psf, __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-
-	unlink (psf->file.path.c) ;
-	puts ("ok") ;
-} /* file_open_test */
-
-static void
-file_read_write_test (const char *filename)
-{	static int data_out	[512] ;
-	static int data_in	[512] ;
-
-	SF_PRIVATE sf_data, *psf ;
-	sf_count_t retval ;
-
-	/*
-	** Open a new file and write two blocks of data to the file. After each
-	** write, test that psf_get_filelen() returns the new length.
-	*/
-
-	print_test_name ("Testing file write") ;
-
-	memset (&sf_data, 0, sizeof (sf_data)) ;
-	psf = &sf_data ;
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-	/* Test file open in write mode. */
-	psf->file.mode = SFM_WRITE ;
-	test_open_or_die (psf, __LINE__) ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 1) ;
-	test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), sizeof (data_out), __LINE__) ;
-
-	if ((retval = psf_get_filelen (psf)) != sizeof (data_out))
-	{	printf ("\n\nLine %d: file length after write is not correct (%" PRId64 " should be %zd).\n\n", __LINE__, retval, sizeof (data_out)) ;
-		if (retval == 0)
-			printf ("An fsync() may be necessary before fstat() in psf_get_filelen().\n\n") ;
-		exit (1) ;
-		} ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 2) ;
-	test_write_or_die (psf, data_out, ARRAY_LEN (data_out), sizeof (data_out [0]), 2 * sizeof (data_out), __LINE__) ;
-
-	if ((retval = psf_get_filelen (psf)) != 2 * sizeof (data_out))
-	{	printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 2 * sizeof (data_out)) ;
-		exit (1) ;
-		} ;
-
-	test_close_or_die (psf, __LINE__) ;
-	puts ("ok") ;
-
-	/*
-	** Now open the file in read mode, check the file length and check
-	** that the data is correct.
-	*/
-
-	print_test_name ("Testing file read") ;
-
-	/* Test file open in write mode. */
-	psf->file.mode = SFM_READ ;
-	test_open_or_die (psf, __LINE__) ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 1) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 2) ;
-	test_read_or_die (psf, data_in, sizeof (data_in [0]), ARRAY_LEN (data_in), 2 * sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-
-	puts ("ok") ;
-
-	/*
-	** Open the file in read/write mode, seek around a bit and then seek to
-	** the end of the file and write another block of data (3rd block). Then
-	** go back and check that all three blocks are correct.
-	*/
-
-	print_test_name ("Testing file seek") ;
-
-	/* Test file open in read/write mode. */
-	psf->file.mode = SFM_RDWR ;
-	test_open_or_die (psf, __LINE__) ;
-
-	test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ;
-	test_seek_or_die (psf, 0, SEEK_END, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-	test_seek_or_die (psf, -1 * SIGNED_SIZEOF (data_out), SEEK_CUR, (sf_count_t) sizeof (data_out), __LINE__) ;
-
-	test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_CUR, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-	make_data (data_out, ARRAY_LEN (data_out), 3) ;
-	test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 3 * sizeof (data_out), __LINE__) ;
-
-	test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ;
-	make_data (data_out, ARRAY_LEN (data_out), 1) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	test_seek_or_die (psf, 2 * SIGNED_SIZEOF (data_out), SEEK_SET, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-	make_data (data_out, ARRAY_LEN (data_out), 3) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ;
-	make_data (data_out, ARRAY_LEN (data_out), 2) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-	puts ("ok") ;
-
-	/*
-	** Now test operations with a non-zero psf->fileoffset field. This field
-	** sets an artificial file start positions so that a seek to the start of
-	** the file will actually be a seek to the value given by psf->fileoffset.
-	*/
-
-	print_test_name ("Testing file offset") ;
-
-	/* Test file open in read/write mode. */
-	psf->file.mode = SFM_RDWR ;
-	psf->fileoffset = sizeof (data_out [0]) * ARRAY_LEN (data_out) ;
-	test_open_or_die (psf, __LINE__) ;
-
-	if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out))
-	{	printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 3 * sizeof (data_out)) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ;
-	make_data (data_out, ARRAY_LEN (data_out), 5) ;
-	test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 2 * sizeof (data_out), __LINE__) ;
-	test_close_or_die (psf, __LINE__) ;
-
-	/* final test with psf->fileoffset == 0. */
-
-	psf->file.mode = SFM_RDWR ;
-	psf->fileoffset = 0 ;
-	test_open_or_die (psf, __LINE__) ;
-
-	if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out))
-	{	printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 3 * sizeof (data_out)) ;
-		exit (1) ;
-		} ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 1) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 2) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	make_data (data_out, ARRAY_LEN (data_out), 5) ;
-	test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ;
-	test_equal_or_die	(data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-	test_close_or_die (psf, __LINE__) ;
-
-	puts ("ok") ;
-} /* file_read_write_test */
-
-static void
-file_truncate_test (const char *filename)
-{	SF_PRIVATE sf_data, *psf ;
-	unsigned char buffer [256] ;
-	int k ;
-
-	/*
-	** Open a new file and write two blocks of data to the file. After each
-	** write, test that psf_get_filelen() returns the new length.
-	*/
-
-	print_test_name ("Testing file truncate") ;
-
-	memset (&sf_data, 0, sizeof (sf_data)) ;
-	memset (buffer, 0xEE, sizeof (buffer)) ;
-
-	psf = &sf_data ;
-	snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-	/*
-	** Open the file write mode, write 0xEE data and then extend the file
-	** using truncate (the extended data should be 0x00).
-	*/
-	psf->file.mode = SFM_WRITE ;
-	test_open_or_die (psf, __LINE__) ;
-	test_write_or_die (psf, buffer, sizeof (buffer) / 2, 1, sizeof (buffer) / 2, __LINE__) ;
-	psf_ftruncate (psf, sizeof (buffer)) ;
-	test_close_or_die (psf, __LINE__) ;
-
-	/* Open the file in read mode and check the data. */
-	psf->file.mode = SFM_READ ;
-	test_open_or_die (psf, __LINE__) ;
-	test_read_or_die (psf, buffer, sizeof (buffer), 1, sizeof (buffer), __LINE__) ;
-	test_close_or_die (psf, __LINE__) ;
-
-	for (k = 0 ; k < SIGNED_SIZEOF (buffer) / 2 ; k++)
-		if (buffer [k] != 0xEE)
-		{	printf ("\n\nLine %d : buffer [%d] = %d (should be 0xEE)\n\n", __LINE__, k, buffer [k]) ;
-			exit (1) ;
-			} ;
-
-	for (k = SIGNED_SIZEOF (buffer) / 2 ; k < SIGNED_SIZEOF (buffer) ; k++)
-		if (buffer [k] != 0)
-		{	printf ("\n\nLine %d : buffer [%d] = %d (should be 0)\n\n", __LINE__, k, buffer [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Open the file in read/write and shorten the file using truncate. */
-	psf->file.mode = SFM_RDWR ;
-	test_open_or_die (psf, __LINE__) ;
-	psf_ftruncate (psf, sizeof (buffer) / 4) ;
-	test_close_or_die (psf, __LINE__) ;
-
-	/* Check the file length. */
-	psf->file.mode = SFM_READ ;
-	test_open_or_die (psf, __LINE__) ;
-	test_seek_or_die (psf, 0, SEEK_END, SIGNED_SIZEOF (buffer) / 4, __LINE__) ;
-	test_close_or_die (psf, __LINE__) ;
-
-	puts ("ok") ;
-} /* file_truncate_test */
-
-/*==============================================================================
-** Testing helper functions.
-*/
-
-static void
-test_open_or_die (SF_PRIVATE *psf, int linenum)
-{	int		error ;
-
-	/* Test that open for read fails if the file doesn't exist. */
-	error = psf_fopen (psf) ;
-	if (error)
-	{	printf ("\n\nLine %d: psf_fopen() failed : %s\n\n", linenum, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-} /* test_open_or_die */
-
-static void
-test_close_or_die (SF_PRIVATE *psf, int linenum)
-{
-	psf_fclose (psf) ;
-	if (psf_file_valid (psf))
-	{	printf ("\n\nLine %d: psf->file.filedes should not be valid.\n\n", linenum) ;
-		exit (1) ;
-		} ;
-
-} /* test_close_or_die */
-
-static void
-test_write_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum)
-{	sf_count_t	retval ;
-
-	retval = psf_fwrite (data, bytes, items, psf) ;
-	if (retval != items)
-	{	printf ("\n\nLine %d: psf_write() returned %" PRId64 " (should be %" PRId64 ")\n\n", linenum, retval, items) ;
-		exit (1) ;
-		} ;
-
-	if ((retval = psf_ftell (psf)) != new_position)
-	{	printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %" PRId64 ")\n\n", linenum, retval, new_position) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_or_die */
-
-static void
-test_read_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum)
-{	sf_count_t	retval ;
-
-	retval = psf_fread (data, bytes, items, psf) ;
-	if (retval != items)
-	{	printf ("\n\nLine %d: psf_write() returned %" PRId64 " (should be %" PRId64 ")\n\n", linenum, retval, items) ;
-		exit (1) ;
-		} ;
-
-	if ((retval = psf_ftell (psf)) != new_position)
-	{	printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %" PRId64 ")\n\n", linenum, retval, new_position) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_or_die */
-
-static void
-test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum)
-{	sf_count_t retval ;
-
-	retval = psf_fseek (psf, offset, whence) ;
-
-	if (retval != new_position)
-	{	printf ("\n\nLine %d: psf_fseek() failed. New position is %" PRId64 " (should be %" PRId64 ").\n\n",
-			linenum, retval, new_position) ;
-		exit (1) ;
-		} ;
-
-} /* test_seek_or_die */
-
-static void
-test_equal_or_die	(int *array1, int *array2, int len, int linenum)
-{	int k ;
-
-	for (k = 0 ; k < len ; k++)
-		if (array1 [k] != array2 [k])
-			printf ("\n\nLine %d: error at index %d (%d != %d).\n\n",
-				linenum, k, array1 [k], array2 [k]) ;
-
-	return ;
-} /* test_equal_or_die */
-
-static void
-make_data (int *data, int len, int seed)
-{	int k ;
-
-	srand (seed * 3333333 + 14756123) ;
-
-	for (k = 0 ; k < len ; k++)
-		data [k] = rand () ;
-
-} /* make_data */
-
-void
-test_file_io (void)
-{	const char *filename = "file_io.dat" ;
-
-	file_open_test	(filename) ;
-	file_read_write_test	(filename) ;
-	file_truncate_test (filename) ;
-
-	unlink (filename) ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_float.c b/libs/libsndfile/src/test_float.c
deleted file mode 100644
index 07879896e5..0000000000
--- a/libs/libsndfile/src/test_float.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <math.h>
-
-#include "common.h"
-#include "test_main.h"
-
-void
-test_float_convert (void)
-{	static float data [] =
-	{	0.0, 1.0, -1.0, 1.0 * M_PI, -1.0 * M_PI,
-		1e9, -1e9, 1e-9, -1e-9, 1e-10, -1e-10,
-		1e-19, -1e-19, 1e19, -1e19, 1e-20, -1e-20,
-		} ;
-
-	int k ;
-
-	print_test_name (__func__) ;
-
-	for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-	{	unsigned char bytes [4] ;
-		float test ;
-
-		float32_le_write (data [k], bytes) ;
-		test = float32_le_read (bytes) ;
-
-		if (fabs (data [k] - test) > 1e-20)
-		{	printf ("\n\nLine %d : Test %d, little endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-			exit (1) ;
-			} ;
-
-		float32_be_write (data [k], bytes) ;
-		test = float32_be_read (bytes) ;
-
-		if (fabs (data [k] - test) > 1e-20)
-		{	printf ("\n\nLine %d : Test %d, big endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-			exit (1) ;
-			} ;
-
-		} ;
-
-	puts ("ok") ;
-} /* test_float_convert */
-
-void
-test_double_convert (void)
-{	static double data [] =
-	{	0.0, 1.0, -1.0, 1.0 * M_PI, -1.0 * M_PI,
-		1e9, -1e9, 1e-9, -1e-9, 1e-10, -1e-10,
-		1e-19, -1e-19, 1e19, -1e19, 1e-20, -1e-20,
-		} ;
-
-	int k ;
-
-	print_test_name (__func__) ;
-
-	for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-	{	unsigned char bytes [8] ;
-		double test ;
-
-		double64_le_write (data [k], bytes) ;
-		test = double64_le_read (bytes) ;
-
-		if (fabs (data [k] - test) > 1e-20)
-		{	printf ("\n\nLine %d : Test %d, little endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-			exit (1) ;
-			} ;
-
-		double64_be_write (data [k], bytes) ;
-		test = double64_be_read (bytes) ;
-
-		if (fabs (data [k] - test) > 1e-20)
-		{	printf ("\n\nLine %d : Test %d, big endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-			exit (1) ;
-			} ;
-
-		} ;
-
-	puts ("ok") ;
-} /* test_double_convert */
-
diff --git a/libs/libsndfile/src/test_ima_oki_adpcm.c b/libs/libsndfile/src/test_ima_oki_adpcm.c
deleted file mode 100644
index 6c937d1173..0000000000
--- a/libs/libsndfile/src/test_ima_oki_adpcm.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-
-#include "test_main.h"
-
-#include "ima_oki_adpcm.c"
-
-static const unsigned char test_codes [] =
-{	0x08, 0x08, 0x04, 0x7f, 0x72, 0xf7, 0x9f, 0x7c, 0xd7, 0xbc, 0x7a, 0xa7, 0xb8,
-	0x4b, 0x0b, 0x38, 0xf6, 0x9d, 0x7a, 0xd7, 0xbc, 0x7a, 0xd7, 0xa8, 0x6c, 0x81,
-	0x98, 0xe4, 0x0e, 0x7a, 0xd7, 0x9e, 0x7b, 0xc7, 0xab, 0x7a, 0x85, 0xc0, 0xb3,
-	0x8f, 0x58, 0xd7, 0xad, 0x7a, 0xd7, 0xad, 0x7a, 0x87, 0xd0, 0x2b, 0x0e, 0x48,
-	0xd7, 0xad, 0x78, 0xf7, 0xbc, 0x7a, 0xb7, 0xa8, 0x4b, 0x88, 0x18, 0xd5, 0x8d,
-	0x6a, 0xa4, 0x98, 0x08, 0x00, 0x80, 0x88,
-} ;
-
-static const short test_pcm [] =
-{	32, 0, 32, 0, 32, 320, 880, -336, 2304, 4192, -992, 10128, 5360, -16352,
-	30208, 2272, -31872, 14688, -7040, -32432, 14128, -1392, -15488, 22960,
-	1232, -1584, 21488, -240, 2576, -15360, 960, -1152, -30032, 10320, 1008,
-	-30032, 16528, 1008, -30032, 16528, -5200, -30592, 15968, 448, -30592,
-	15968, 448, -2368, 30960, 3024, -80, 8384, 704, -1616, -29168, -1232, 1872,
-	-32768, 13792, -1728, -32768, 13792, 4480, -32192, 14368, -7360, -32752,
-	13808, -1712, -21456, 16992, 1472, -1344, 26848, -1088, 2016, -17728, 208,
-	-2112, -32768, 1376, -1728, -32768, 13792, -1728, -32768, 13792, -1728,
-	-32768, 13792, -1728, -32768, 13792, -1728, -4544, 32767, -1377, 1727,
-	15823, -2113, 207, -27345, 591, -2513, -32768, 13792, -1728, -32768, 13792,
-	10688, -31632, 14928, -6800, -32192, 14368, -1152, -20896, 17552, 2032,
-	-784, 22288, 560, -2256, -4816, 2176, 64, -21120, 9920, 6816, -24224, 16128,
-	608, -13488, 9584, 272, -2544, 16, -2304, -192, 1728, -16, 1568, 128, -1184,
-} ;
-
-
-static void
-test_oki_adpcm (void)
-{
-	IMA_OKI_ADPCM adpcm ;
-	unsigned char code ;
-	int i, j ;
-
-	print_test_name ("Testing ima/oki encoder") ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-	for (i = 0 ; i < ARRAY_LEN (test_codes) ; i++)
-		for (j = 0, code = test_codes [i] ; j < 2 ; j++, code <<= 4)
-			if (adpcm_decode (&adpcm, code >> 4) != test_pcm [2 * i + j])
-			{	printf ("\n\nFail at i = %d, j = %d.\n\n", i, j) ;
-				exit (1) ;
-				} ;
-
-	puts ("ok") ;
-
-	print_test_name ("Testing ima/oki decoder") ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-	for (i = 0 ; i < ARRAY_LEN (test_pcm) - 1 ; i += 2)
-	{	code = adpcm_encode (&adpcm, test_pcm [i]) ;
-		code = (code << 4) | adpcm_encode (&adpcm, test_pcm [i + 1]) ;
-		if (code != test_codes [i / 2])
-			{	printf ("\n\nFail at i = %d, %d should be %d\n\n", i, code, test_codes [i / 2]) ;
-				exit (1) ;
-				} ;
-		} ;
-
-	puts ("ok") ;
-} /* test_oki_adpcm */
-
-static void
-test_oki_adpcm_block (void)
-{
-	IMA_OKI_ADPCM adpcm ;
-	int k ;
-
-	if (ARRAY_LEN (adpcm.pcm) < ARRAY_LEN (test_pcm))
-	{	printf ("\n\nLine %d : ARRAY_LEN (adpcm->pcm) > ARRAY_LEN (test_pcm) (%d > %d).\n\n", __LINE__, ARRAY_LEN (adpcm.pcm), ARRAY_LEN (test_pcm)) ;
-		exit (1) ;
-		} ;
-
-	if (ARRAY_LEN (adpcm.codes) < ARRAY_LEN (test_codes))
-	{	printf ("\n\nLine %d : ARRAY_LEN (adcodes->codes) > ARRAY_LEN (test_codes).n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	print_test_name ("Testing ima/oki block encoder") ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-	memcpy (adpcm.pcm, test_pcm, sizeof (adpcm.pcm [0]) * ARRAY_LEN (test_pcm)) ;
-	adpcm.pcm_count = ARRAY_LEN (test_pcm) ;
-	adpcm.code_count = 13 ;
-
-	ima_oki_adpcm_encode_block (&adpcm) ;
-
-	if (adpcm.code_count * 2 != ARRAY_LEN (test_pcm))
-	{	printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.code_count * 2, ARRAY_LEN (test_pcm)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (test_codes) ; k++)
-		if (adpcm.codes [k] != test_codes [k])
-		{	printf ("\n\nLine %d : Fail at k = %d, %d should be %d\n\n", __LINE__, k, adpcm.codes [k], test_codes [k]) ;
-			exit (1) ;
-			} ;
-
-	puts ("ok") ;
-
-	print_test_name ("Testing ima/oki block decoder") ;
-
-	ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-	memcpy (adpcm.codes, test_codes, sizeof (adpcm.codes [0]) * ARRAY_LEN (test_codes)) ;
-	adpcm.code_count = ARRAY_LEN (test_codes) ;
-	adpcm.pcm_count = 13 ;
-
-	ima_oki_adpcm_decode_block (&adpcm) ;
-
-	if (adpcm.pcm_count != 2 * ARRAY_LEN (test_codes))
-	{	printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.pcm_count, 2 * ARRAY_LEN (test_codes)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (test_pcm) ; k++)
-		if (adpcm.pcm [k] != test_pcm [k])
-		{	printf ("\n\nLine %d : Fail at i = %d, %d should be %d.\n\n", __LINE__, k, adpcm.pcm [k], test_pcm [k]) ;
-			exit (1) ;
-			} ;
-
-	puts ("ok") ;
-} /* test_oki_adpcm_block */
-
-void
-test_ima_oki_adpcm (void)
-{
-	test_oki_adpcm () ;
-	test_oki_adpcm_block () ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_log_printf.c b/libs/libsndfile/src/test_log_printf.c
deleted file mode 100644
index e1806a1484..0000000000
--- a/libs/libsndfile/src/test_log_printf.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define	CMP_0_ARGS(line, err, fmt)	\
-	{	psf->parselog.indx = 0 ;			\
-		snprintf (buffer, sizeof (buffer), (fmt)) ;	\
-		psf_log_printf (psf, (fmt)) ;				\
-		err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;	\
-		}
-
-#define	CMP_2_ARGS(line, err, fmt, a)	\
-	{	psf->parselog.indx = 0 ;				\
-		snprintf (buffer, sizeof (buffer), (fmt), (a), (a)) ;	\
-		psf_log_printf (psf, (fmt), (a), (a)) ;					\
-		err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;	\
-		}
-
-#define	CMP_4_ARGS(line, err, fmt, a)	\
-	{	psf->parselog.indx = 0 ;				\
-		snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a)) ;	\
-		psf_log_printf (psf, (fmt), (a), (a), (a), (a)) ;				\
-		err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;	\
-		}
-
-#define	CMP_5_ARGS(line, err, fmt, a)	\
-	{	psf->parselog.indx = 0 ;				\
-		snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a)) ;	\
-		psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a)) ;					\
-		err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;		\
-		}
-
-#define	CMP_6_ARGS(line, err, fmt, a)	\
-	{	psf->parselog.indx = 0 ;				\
-		snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a), (a)) ;	\
-		psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a), (a)) ;					\
-		err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;			\
-		}
-
-static int
-compare_strings_or_die (int linenum, const char *fmt, const char* s1, const char* s2)
-{	int errors = 0 ;
-/*-puts (s1) ;puts (s2) ;-*/
-
-	if (strcmp (s1, s2) != 0)
-	{	printf ("\n\nLine %d: string compare mismatch:\n\t", linenum) ;
-		printf ("\"%s\"\n", fmt) ;
-		printf ("\t\"%s\"\n\t\"%s\"\n", s1, s2) ;
-		errors ++ ;
-		} ;
-
-	return errors ;
-} /* compare_strings_or_die */
-
-void
-test_log_printf (void)
-{	static char buffer [2048] ;
-	SF_PRIVATE	sf_private, *psf ;
-	int			k, errors = 0 ;
-	int			int_values [] = { 0, 1, 12, 123, 1234, 123456, -1, -12, -123, -1234, -123456 } ;
-
-	print_test_name ("Testing psf_log_printf") ;
-
-	psf = &sf_private ;
-	memset (psf, 0, sizeof (sf_private)) ;
-
-	CMP_0_ARGS (__LINE__, errors, " ->%%<- ") ;
-
-	/* Test printing of ints. */
-	for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-		CMP_6_ARGS (__LINE__, errors, "int A : %d, % d, %4d, % 4d, %04d, % 04d", int_values [k]) ;
-
-	for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-		CMP_5_ARGS (__LINE__, errors, "int B : %+d, %+4d, %+04d, %-d, %-4d", int_values [k]) ;
-
-	for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-		CMP_2_ARGS (__LINE__, errors, "int C : %- d, %- 4d", int_values [k]) ;
-
-	/* Test printing of unsigned ints. */
-	for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-		CMP_4_ARGS (__LINE__, errors, "D : %u, %4u, %04u, %0u", int_values [k]) ;
-
-	/* Test printing of hex ints. */
-	for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-		CMP_4_ARGS (__LINE__, errors, "E : %X, %4X, %04X, %0X", int_values [k]) ;
-
-	/* Test printing of strings. */
-	CMP_4_ARGS (__LINE__, errors, "B %s, %3s, %8s, %-8s", "str") ;
-
-	if (errors)
-	{	puts ("\nExiting due to errors.\n") ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_log_printf */
-
diff --git a/libs/libsndfile/src/test_main.c b/libs/libsndfile/src/test_main.c
deleted file mode 100644
index f51f7c9ee6..0000000000
--- a/libs/libsndfile/src/test_main.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "test_main.h"
-
-int
-main (void)
-{
-	test_conversions () ;
-	test_endswap () ;
-	test_float_convert () ;
-	test_double_convert () ;
-
-	test_log_printf () ;
-	test_file_io () ;
-
-	test_audio_detect () ;
-	test_ima_oki_adpcm () ;
-
-	test_psf_strlcpy_crlf () ;
-	test_broadcast_var () ;
-	test_cart_var () ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_main.h b/libs/libsndfile/src/test_main.h
deleted file mode 100644
index 6b2f28f4cd..0000000000
--- a/libs/libsndfile/src/test_main.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-static inline void
-print_test_name (const char * name)
-{	printf ("    %-40s : ", name) ;
-	fflush (stdout) ;
-} /* print_test_name */
-
-
-
-void test_conversions (void) ;
-void test_endswap (void) ;
-void test_log_printf (void) ;
-void test_file_io (void) ;
-
-void test_float_convert (void) ;
-void test_double_convert (void) ;
-
-void test_audio_detect (void) ;
-void test_ima_oki_adpcm (void) ;
-
-void test_psf_strlcpy_crlf (void) ;
-void test_broadcast_var (void) ;
-
-void test_cart_var (void) ;
diff --git a/libs/libsndfile/src/test_strncpy_crlf.c b/libs/libsndfile/src/test_strncpy_crlf.c
deleted file mode 100644
index 774ced1083..0000000000
--- a/libs/libsndfile/src/test_strncpy_crlf.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-void
-test_psf_strlcpy_crlf (void)
-{	const char *src = "a\nb\nc\n" ;
-	char *dest ;
-	int dest_len ;
-
-	print_test_name ("Testing psf_strlcpy_crlf") ;
-
-	for (dest_len = 3 ; dest_len < 30 ; dest_len++)
-	{	dest = calloc (1, dest_len + 1) ;
-		if (dest == NULL)
-		{	printf ("\n\nLine %d: calloc failed!\n\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		dest [dest_len] = '\xea' ;
-
-		psf_strlcpy_crlf (dest, src, dest_len, sizeof (*src)) ;
-
-		if (dest [dest_len] != '\xea')
-		{	printf ("\n\nLine %d: buffer overrun for dest_len == %d\n\n", __LINE__, dest_len) ;
-			exit (1) ;
-			} ;
-
-		free (dest) ;
-		} ;
-
-	puts ("ok") ;
-} /* test_psf_strlcpy_crlf */
diff --git a/libs/libsndfile/src/txw.c b/libs/libsndfile/src/txw.c
deleted file mode 100644
index 16525dfe29..0000000000
--- a/libs/libsndfile/src/txw.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*===========================================================================
-** Yamaha TX16 Sampler Files.
-**
-** This header parser was written using information from the SoX source code
-** and trial and error experimentation. The code here however is all original.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-txw_open	(SF_PRIVATE *psf)
-{	if (psf)
-		return SFE_UNIMPLEMENTED ;
-	return 0 ;
-} /* txw_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Markers.
-*/
-
-#define TXW_DATA_OFFSET		32
-
-#define	TXW_LOOPED			0x49
-#define	TXW_NO_LOOP			0xC9
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int txw_read_header (SF_PRIVATE *psf) ;
-
-static sf_count_t txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-/*
- * ftp://ftp.t0.or.at/pub/sound/tx16w/samples.yamaha
- * ftp://ftp.t0.or.at/pub/sound/tx16w/faq/tx16w.tec
- * http://www.t0.or.at/~mpakesch/tx16w/
- *
- * from tx16w.c sox 12.15: (7-Oct-98) (Mark Lakata and Leigh Smith)
- *  char filetype[6] "LM8953"
- *  nulls[10],
- *  dummy_aeg[6]
- *  format 0x49 = looped, 0xC9 = non-looped
- *  sample_rate 1 = 33 kHz, 2 = 50 kHz, 3 = 16 kHz
- *  atc_length[3] if sample rate 0, [2]&0xfe = 6: 33kHz, 0x10:50, 0xf6: 16,
- *					depending on [5] but to heck with it
- *  rpt_length[3] (these are for looped samples, attack and loop lengths)
- *  unused[2]
- */
-
-typedef struct
-{	unsigned char	format, srate, sr2, sr3 ;
-	unsigned short	srhash ;
-	unsigned int	attacklen, repeatlen ;
-} TXW_HEADER ;
-
-#define	ERROR_666	666
-
-int
-txw_open	(SF_PRIVATE *psf)
-{	int error ;
-
-	if (psf->file.mode != SFM_READ)
-		return SFE_UNIMPLEMENTED ;
-
-	if ((error = txw_read_header (psf)))
-			return error ;
-
- 	if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset)
-		return SFE_BAD_SEEK ;
-
-	psf->read_short		= txw_read_s ;
-	psf->read_int		= txw_read_i ;
-	psf->read_float		= txw_read_f ;
-	psf->read_double	= txw_read_d ;
-
-	psf->seek = txw_seek ;
-
-	return 0 ;
-} /* txw_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-txw_read_header	(SF_PRIVATE *psf)
-{	BUF_UNION	ubuf ;
-	TXW_HEADER txwh ;
-	const char	*strptr ;
-
-	memset (&txwh, 0, sizeof (txwh)) ;
-	memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-	psf_binheader_readf (psf, "pb", 0, ubuf.cbuf, 16) ;
-
-	if (memcmp (ubuf.cbuf, "LM8953\0\0\0\0\0\0\0\0\0\0", 16) != 0)
-		return ERROR_666 ;
-
-	psf_log_printf (psf, "Read only : Yamaha TX-16 Sampler (.txw)\nLM8953\n") ;
-
-	/* Jump 6 bytes (dummp_aeg), read format, read sample rate. */
-	psf_binheader_readf (psf, "j11", 6, &txwh.format, &txwh.srate) ;
-
-	/* 8 bytes (atc_length[3], rpt_length[3], unused[2]). */
-	psf_binheader_readf (psf, "e33j", &txwh.attacklen, &txwh.repeatlen, 2) ;
-	txwh.sr2 = (txwh.attacklen >> 16) & 0xFE ;
-	txwh.sr3 = (txwh.repeatlen >> 16) & 0xFE ;
-	txwh.attacklen &= 0x1FFFF ;
-	txwh.repeatlen &= 0x1FFFF ;
-
-	switch (txwh.format)
-	{	case TXW_LOOPED :
-				strptr = "looped" ;
-				break ;
-
-		case TXW_NO_LOOP :
-				strptr = "non-looped" ;
-				break ;
-
-		default :
-				psf_log_printf (psf, " Format      : 0x%02x => ?????\n", txwh.format) ;
-				return ERROR_666 ;
-		} ;
-
-	psf_log_printf (psf, " Format      : 0x%02X => %s\n", txwh.format, strptr) ;
-
-	strptr = NULL ;
-
-	switch (txwh.srate)
-	{	case 1 :
-				psf->sf.samplerate = 33333 ;
-				break ;
-
-		case 2 :
-				psf->sf.samplerate = 50000 ;
-				break ;
-
-		case 3 :
-				psf->sf.samplerate = 16667 ;
-				break ;
-
-		default :
-			/* This is ugly and braindead. */
-			txwh.srhash = ((txwh.sr2 & 0xFE) << 8) | (txwh.sr3 & 0xFE) ;
-			switch (txwh.srhash)
-			{	case ((0x6 << 8) | 0x52) :
-						psf->sf.samplerate = 33333 ;
-						break ;
-
-				case ((0x10 << 8) | 0x52) :
-						psf->sf.samplerate = 50000 ;
-						break ;
-
-				case ((0xF6 << 8) | 0x52) :
-						psf->sf.samplerate = 166667 ;
-						break ;
-
-				default :
-						strptr = " Sample Rate : Unknown : forcing to 33333\n" ;
-						psf->sf.samplerate = 33333 ;
-						break ;
-				} ;
-		} ;
-
-
-	if (strptr)
-		psf_log_printf (psf, strptr) ;
-	else if (txwh.srhash)
-		psf_log_printf (psf, " Sample Rate : %d (0x%X) => %d\n", txwh.srate, txwh.srhash, psf->sf.samplerate) ;
-	else
-		psf_log_printf (psf, " Sample Rate : %d => %d\n", txwh.srate, psf->sf.samplerate) ;
-
-	if (txwh.format == TXW_LOOPED)
-	{	psf_log_printf (psf, " Attack Len  : %d\n", txwh.attacklen) ;
-		psf_log_printf (psf, " Repeat Len  : %d\n", txwh.repeatlen) ;
-		} ;
-
-	psf->dataoffset = TXW_DATA_OFFSET ;
-	psf->datalength = psf->filelength - TXW_DATA_OFFSET ;
-	psf->sf.frames	= 2 * psf->datalength / 3 ;
-
-
-	if (psf->datalength % 3 == 1)
-		psf_log_printf (psf, "*** File seems to be truncated, %d extra bytes.\n",
-			(int) (psf->datalength % 3)) ;
-
-	if (txwh.attacklen + txwh.repeatlen > psf->sf.frames)
-		psf_log_printf (psf, "*** File has been truncated.\n") ;
-
-	psf->sf.format = SF_FORMAT_TXW | SF_FORMAT_PCM_16 ;
-	psf->sf.channels = 1 ;
-	psf->sf.sections = 1 ;
-	psf->sf.seekable = SF_TRUE ;
-
-	return 0 ;
-} /* txw_read_header */
-
-static sf_count_t
-txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	unsigned char	*ucptr ;
-	short			sample ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-
-	bufferlen = sizeof (ubuf.cbuf) / 3 ;
-	bufferlen -= (bufferlen & 1) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-		ucptr = ubuf.ucbuf ;
-		for (k = 0 ; k < readcount ; k += 2)
-		{	sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-			ptr [total + k] = sample ;
-			sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-			ptr [total + k + 1] = sample ;
-			ucptr += 3 ;
-			} ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* txw_read_s */
-
-static sf_count_t
-txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	unsigned char	*ucptr ;
-	short			sample ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-
-	bufferlen = sizeof (ubuf.cbuf) / 3 ;
-	bufferlen -= (bufferlen & 1) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-		ucptr = ubuf.ucbuf ;
-		for (k = 0 ; k < readcount ; k += 2)
-		{	sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-			ptr [total + k] = sample << 16 ;
-			sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-			ptr [total + k + 1] = sample << 16 ;
-			ucptr += 3 ;
-			} ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* txw_read_i */
-
-static sf_count_t
-txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	unsigned char	*ucptr ;
-	short			sample ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-	float			normfact ;
-
-	if (psf->norm_float == SF_TRUE)
-		normfact = 1.0 / 0x8000 ;
-	else
-		normfact = 1.0 / 0x10 ;
-
-	bufferlen = sizeof (ubuf.cbuf) / 3 ;
-	bufferlen -= (bufferlen & 1) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-		ucptr = ubuf.ucbuf ;
-		for (k = 0 ; k < readcount ; k += 2)
-		{	sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-			ptr [total + k] = normfact * sample ;
-			sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-			ptr [total + k + 1] = normfact * sample ;
-			ucptr += 3 ;
-			} ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* txw_read_f */
-
-static sf_count_t
-txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION		ubuf ;
-	unsigned char	*ucptr ;
-	short			sample ;
-	int				k, bufferlen, readcount, count ;
-	sf_count_t		total = 0 ;
-	double			normfact ;
-
-	if (psf->norm_double == SF_TRUE)
-		normfact = 1.0 / 0x8000 ;
-	else
-		normfact = 1.0 / 0x10 ;
-
-	bufferlen = sizeof (ubuf.cbuf) / 3 ;
-	bufferlen -= (bufferlen & 1) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : len ;
-		count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-		ucptr = ubuf.ucbuf ;
-		for (k = 0 ; k < readcount ; k += 2)
-		{	sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-			ptr [total + k] = normfact * sample ;
-			sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-			ptr [total + k + 1] = normfact * sample ;
-			ucptr += 3 ;
-			} ;
-
-		total += count ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* txw_read_d */
-
-static sf_count_t
-txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	if (psf && mode)
-		return offset ;
-
-	return 0 ;
-} /* txw_seek */
-
-#endif
diff --git a/libs/libsndfile/src/ulaw.c b/libs/libsndfile/src/ulaw.c
deleted file mode 100644
index ded46e929c..0000000000
--- a/libs/libsndfile/src/ulaw.c
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"common.h"
-
-static sf_count_t ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t ulaw_write_s2ulaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_i2ulaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_f2ulaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_d2ulaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-int
-ulaw_init (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	psf->read_short		= ulaw_read_ulaw2s ;
-		psf->read_int		= ulaw_read_ulaw2i ;
-		psf->read_float		= ulaw_read_ulaw2f ;
-		psf->read_double	= ulaw_read_ulaw2d ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	psf->write_short	= ulaw_write_s2ulaw ;
-		psf->write_int		= ulaw_write_i2ulaw ;
-		psf->write_float	= ulaw_write_f2ulaw ;
-		psf->write_double	= ulaw_write_d2ulaw ;
-		} ;
-
-	psf->bytewidth = 1 ;
-	psf->blockwidth = psf->sf.channels ;
-
-	if (psf->filelength > psf->dataoffset)
-		psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-	else
-		psf->datalength = 0 ;
-
-	psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-	return 0 ;
-} /* ulaw_init */
-
-/*==============================================================================
-*/
-
-static short ulaw_decode [256] =
-{	-32124,	-31100,	-30076,	-29052,	-28028,	-27004,	-25980,	-24956,
-	-23932,	-22908,	-21884,	-20860,	-19836,	-18812,	-17788,	-16764,
-	-15996,	-15484,	-14972,	-14460,	-13948,	-13436,	-12924,	-12412,
-	-11900,	-11388,	-10876,	-10364,	-9852,	-9340,	-8828,	-8316,
-	-7932,	-7676,	-7420,	-7164,	-6908,	-6652,	-6396,	-6140,
-	-5884,	-5628,	-5372,	-5116,	-4860,	-4604,	-4348,	-4092,
-	-3900,	-3772,	-3644,	-3516,	-3388,	-3260,	-3132,	-3004,
-	-2876,	-2748,	-2620,	-2492,	-2364,	-2236,	-2108,	-1980,
-	-1884,	-1820,	-1756,	-1692,	-1628,	-1564,	-1500,	-1436,
-	-1372,	-1308,	-1244,	-1180,	-1116,	-1052,	-988,	-924,
-	-876,	-844,	-812,	-780,	-748,	-716,	-684,	-652,
-	-620,	-588,	-556,	-524,	-492,	-460,	-428,	-396,
-	-372,	-356,	-340,	-324,	-308,	-292,	-276,	-260,
-	-244,	-228,	-212,	-196,	-180,	-164,	-148,	-132,
-	-120,	-112,	-104,	-96,	-88,	-80,	-72,	-64,
-	-56,	-48,	-40,	-32,	-24,	-16,	-8,		0,
-
-	32124,	31100,	30076,	29052,	28028,	27004,	25980,	24956,
-	23932,	22908,	21884,	20860,	19836,	18812,	17788,	16764,
-	15996,	15484,	14972,	14460,	13948,	13436,	12924,	12412,
-	11900,	11388,	10876,	10364,	9852,	9340,	8828,	8316,
-	7932,	7676,	7420,	7164,	6908,	6652,	6396,	6140,
-	5884,	5628,	5372,	5116,	4860,	4604,	4348,	4092,
-	3900,	3772,	3644,	3516,	3388,	3260,	3132,	3004,
-	2876,	2748,	2620,	2492,	2364,	2236,	2108,	1980,
-	1884,	1820,	1756,	1692,	1628,	1564,	1500,	1436,
-	1372,	1308,	1244,	1180,	1116,	1052,	988,	924,
-	876,	844,	812,	780,	748,	716,	684,	652,
-	620,	588,	556,	524,	492,	460,	428,	396,
-	372,	356,	340,	324,	308,	292,	276,	260,
-	244,	228,	212,	196,	180,	164,	148,	132,
-	120,	112,	104,	96,		88,		80,		72,		64,
-	56,		48,		40,		32,		24,		16,		8,		0
-} ;
-
-static
-unsigned char ulaw_encode [8193] =
-{	0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9,
-	0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3,
-	0xf3, 0xf2, 0xf2, 0xf1, 0xf1, 0xf0, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xee,
-	0xee, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb,
-	0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8,
-	0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5,
-	0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2,
-	0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf,
-	0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xde, 0xde,
-	0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc,
-	0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
-	0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9,
-	0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
-	0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd6,
-	0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
-	0xd5, 0xd5, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd3,
-	0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
-	0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0,
-	0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
-	0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce,
-	0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
-	0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
-	0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
-	0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb,
-	0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
-	0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
-	0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
-	0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8,
-	0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
-	0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
-	0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
-	0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5,
-	0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
-	0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
-	0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
-	0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2,
-	0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
-	0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
-	0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
-	0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf,
-	0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-	0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-	0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-	0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-	0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-	0xbe, 0xbe, 0xbe, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-	0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-	0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-	0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-	0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-	0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-	0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-	0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-	0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-	0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-	0xb8, 0xb8, 0xb8, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-	0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-	0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-	0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-	0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-	0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-	0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-	0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-	0xb2, 0xb2, 0xb2, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-	0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-	0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb0,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-	0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-	0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-	0xae, 0xae, 0xae, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-	0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-	0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-	0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-	0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-	0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-	0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-	0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-	0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-	0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-	0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-	0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-	0xa2, 0xa2, 0xa2, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-	0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-	0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-	0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-	0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-	0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-	0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-	0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-	0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-	0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-	0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-	0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-	0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-	0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-	0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-	0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-	0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-	0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-	0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-	0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-	0x8e, 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-	0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-	0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-	0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-	0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-	0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-	0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-	0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-	0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-	0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-	0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-	0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-	0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-	0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-	0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
-} ;
-
-static inline void
-ulaw2s_array (unsigned char *buffer, int count, short *ptr)
-{	while (--count >= 0)
-		ptr [count] = ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2s_array */
-
-static inline void
-ulaw2i_array (unsigned char *buffer, int count, int *ptr)
-{	while (--count >= 0)
-		ptr [count] = ulaw_decode [buffer [count]] << 16 ;
-} /* ulaw2i_array */
-
-static inline void
-ulaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact)
-{	while (--count >= 0)
-		ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2f_array */
-
-static inline void
-ulaw2d_array (const unsigned char *buffer, int count, double *ptr, double normfact)
-{	while (--count >= 0)
-		ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2d_array */
-
-static inline void
-s2ulaw_array (const short *ptr, int count, unsigned char *buffer)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [ptr [count] / 4] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [ptr [count] / -4] ;
-		} ;
-} /* s2ulaw_array */
-
-static inline void
-i2ulaw_array (const int *ptr, int count, unsigned char *buffer)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ;
-		} ;
-} /* i2ulaw_array */
-
-static inline void
-f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [lrintf (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [- lrintf (normfact * ptr [count])] ;
-		} ;
-} /* f2ulaw_array */
-
-static inline void
-d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
-{	while (--count >= 0)
-	{	if (ptr [count] >= 0)
-			buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ;
-		else
-			buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ;
-		} ;
-} /* d2ulaw_array */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		ulaw2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* ulaw_read_ulaw2s */
-
-static sf_count_t
-ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		ulaw2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* ulaw_read_ulaw2i */
-
-static sf_count_t
-ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		ulaw2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* ulaw_read_ulaw2f */
-
-static sf_count_t
-ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double	normfact ;
-
-	normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-		ulaw2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* ulaw_read_ulaw2d */
-
-/*=============================================================================================
-*/
-
-static sf_count_t
-ulaw_write_s2ulaw	(SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* ulaw_write_s2ulaw */
-
-static sf_count_t
-ulaw_write_i2ulaw	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* ulaw_write_i2ulaw */
-
-static sf_count_t
-ulaw_write_f2ulaw	(SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float	normfact ;
-
-	/* Factor in a divide by 4. */
-	normfact = (psf->norm_float == SF_TRUE) ? (0.25 * 0x7FFF) : 0.25 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* ulaw_write_f2ulaw */
-
-static sf_count_t
-ulaw_write_d2ulaw	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double	normfact ;
-
-	/* Factor in a divide by 4. */
-	normfact = (psf->norm_double) ? (0.25 * 0x7FFF) : 0.25 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		d2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-		writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* ulaw_write_d2ulaw */
-
diff --git a/libs/libsndfile/src/version-metadata.rc.in b/libs/libsndfile/src/version-metadata.rc.in
deleted file mode 100644
index ed79b22ad1..0000000000
--- a/libs/libsndfile/src/version-metadata.rc.in
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <windows.h>
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
-1 VERSIONINFO
-	FILEVERSION		@WIN_RC_VERSION@,0
-	PRODUCTVERSION	@WIN_RC_VERSION@,0
-	FILEOS			VOS__WINDOWS32
-	FILETYPE		VFT_DLL
-	FILESUBTYPE		VFT2_UNKNOWN
-	FILEFLAGSMASK	0x00000000
-	FILEFLAGS		0x00000000
-{
-	BLOCK "StringFileInfo"
-	{
-		BLOCK "040904e4"
-		{
-			VALUE "FileDescription", "A library for reading and writing audio files."
-			VALUE "FileVersion", "@CLEAN_VERSION@.0\0"
-			VALUE "Full Version", "@PACKAGE_VERSION@"
-			VALUE "InternalName", "libsndfile"
-			VALUE "LegalCopyright", "Copyright (C) 1999-2012, Licensed LGPL"
-			VALUE "OriginalFilename", "libsndfile-1.dll"
-			VALUE "ProductName", "libsndfile-1 DLL"
-			VALUE "ProductVersion", "@CLEAN_VERSION@.0\0"
-			VALUE "Language", "Language Neutral"
-		}
-	}
-	BLOCK "VarFileInfo"
-	{
-		VALUE "Translation", 0x0409, 0x04E4
-	}
-}
diff --git a/libs/libsndfile/src/voc.c b/libs/libsndfile/src/voc.c
deleted file mode 100644
index d13b03311b..0000000000
--- a/libs/libsndfile/src/voc.c
+++ /dev/null
@@ -1,882 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*	RANT:
-**	The VOC file format is the most brain damaged format I have yet had to deal
-**	with. No one programmer could have bee stupid enough to put this together.
-**	Instead it looks like a series of manic, dyslexic assembly language programmers
-**	hacked it to fit their needs.
-**	Utterly woeful.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-#define	VOC_MAX_SECTIONS	200
-
-enum
-{	VOC_TERMINATOR		= 0,
-	VOC_SOUND_DATA		= 1,
-	VOC_SOUND_CONTINUE	= 2,
-	VOC_SILENCE			= 3,
-	VOC_MARKER			= 4,
-	VOC_ASCII			= 5,
-	VOC_REPEAT			= 6,
-	VOC_END_REPEAT		= 7,
-	VOC_EXTENDED		= 8,
-	VOC_EXTENDED_II		= 9
-} ;
-
-typedef struct
-{	int 	samples ;
-	int		offset ;	/* Offset of zero => silence. */
-} SND_DATA_BLOCKS ;
-
-typedef struct
-{	unsigned int 	sections, section_types ;
-	int				samplerate, channels, bitwidth ;
-	SND_DATA_BLOCKS	blocks [VOC_MAX_SECTIONS] ;
-} VOC_DATA ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static	int	voc_close	(SF_PRIVATE *psf) ;
-static	int voc_write_header (SF_PRIVATE *psf, int calc_length) ;
-static	int voc_read_header	(SF_PRIVATE *psf) ;
-
-static const char* voc_encoding2str (int encoding) ;
-
-#if 0
-
-/*	These functions would be required for files with more than one VOC_SOUND_DATA
-**	segment. Not sure whether to bother implementing this.
-*/
-
-static int	voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc) ;
-
-static int	voc_multi_read_uc2s		(SF_PRIVATE *psf, short *ptr, int len) ;
-static int	voc_multi_read_les2s	(SF_PRIVATE *psf, short *ptr, int len) ;
-
-static int	voc_multi_read_uc2i		(SF_PRIVATE *psf, int *ptr, int len) ;
-static int	voc_multi_read_les2i	(SF_PRIVATE *psf, int *ptr, int len) ;
-
-static int	voc_multi_read_uc2f		(SF_PRIVATE *psf, float *ptr, int len) ;
-static int	voc_multi_read_les2f	(SF_PRIVATE *psf, float *ptr, int len) ;
-
-static int	voc_multi_read_uc2d		(SF_PRIVATE *psf, double *ptr, int len) ;
-static int	voc_multi_read_les2d	(SF_PRIVATE *psf, double *ptr, int len) ;
-#endif
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-voc_open	(SF_PRIVATE *psf)
-{	int subformat, error = 0 ;
-
-	if (psf->is_pipe)
-		return SFE_VOC_NO_PIPE ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = voc_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_VOC)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_LITTLE ;
-
-		if ((error = voc_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = voc_write_header ;
-		} ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	psf->container_close = voc_close ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-				error = pcm_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ALAW :
-				error = alaw_init (psf) ;
-				break ;
-
-		case SF_FORMAT_ULAW :
-				error = ulaw_init (psf) ;
-				break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return error ;
-} /* voc_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-voc_read_header	(SF_PRIVATE *psf)
-{	VOC_DATA	*pvoc ;
-	char	creative [20] ;
-	unsigned char block_type, rate_byte ;
-	short	version, checksum, encoding, dataoffset ;
-	int		offset ;
-
-	/* Set position to start of file to begin reading header. */
-	offset = psf_binheader_readf (psf, "pb", 0, creative, SIGNED_SIZEOF (creative)) ;
-
-	if (creative [sizeof (creative) - 1] != 0x1A)
-		return SFE_VOC_NO_CREATIVE ;
-
-	/* Terminate the string. */
-	creative [sizeof (creative) - 1] = 0 ;
-
-	if (strcmp ("Creative Voice File", creative))
-		return SFE_VOC_NO_CREATIVE ;
-
-	psf_log_printf (psf, "%s\n", creative) ;
-
-	offset += psf_binheader_readf (psf, "e222", &dataoffset, &version, &checksum) ;
-
-	psf->dataoffset = dataoffset ;
-
-	psf_log_printf (psf, 	"dataoffset : %d\n"
-							"version    : 0x%X\n"
-							"checksum   : 0x%X\n", psf->dataoffset, version, checksum) ;
-
-	if (version != 0x010A && version != 0x0114)
-		return SFE_VOC_BAD_VERSION ;
-
-	if (! (psf->codec_data = malloc (sizeof (VOC_DATA))))
-		return SFE_MALLOC_FAILED ;
-
-	pvoc = (VOC_DATA*) psf->codec_data ;
-
-	memset (pvoc, 0, sizeof (VOC_DATA)) ;
-
-	/* Set the default encoding now. */
-	psf->sf.format = SF_FORMAT_VOC ; /* Major format */
-	encoding = SF_FORMAT_PCM_U8 ; /* Minor format */
-	psf->endian = SF_ENDIAN_LITTLE ;
-
-	while (1)
-	{	unsigned size ;
-		short count ;
-
-		block_type = 0 ;
-		offset += psf_binheader_readf (psf, "1", &block_type) ;
-
-		switch (block_type)
-		{	case VOC_ASCII :
-					offset += psf_binheader_readf (psf, "e3", &size) ;
-
-					psf_log_printf (psf, " ASCII : %d\n", size) ;
-
-					if (size < sizeof (psf->header) - 1)
-					{	offset += psf_binheader_readf (psf, "b", psf->header, size) ;
-						psf->header [size] = 0 ;
-						psf_log_printf (psf, "  text : %s\n", psf->header) ;
-						continue ;
-						}
-
-					offset += psf_binheader_readf (psf, "j", size) ;
-					continue ;
-
-			case VOC_REPEAT :
-					offset += psf_binheader_readf (psf, "e32", &size, &count) ;
-					psf_log_printf (psf, " Repeat : %d\n", count) ;
-					continue ;
-
-			case VOC_SOUND_DATA :
-			case VOC_EXTENDED :
-			case VOC_EXTENDED_II :
-					break ;
-
-			default : psf_log_printf (psf, "*** Weird block marker (%d)\n", block_type) ;
-			} ;
-
-		break ;
-		} ;
-
-	if (block_type == VOC_SOUND_DATA)
-	{	unsigned char compression ;
-		int 	size ;
-
-		offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
-
-		psf->sf.samplerate = 1000000 / (256 - (rate_byte & 0xFF)) ;
-
-		psf_log_printf (psf, " Sound Data : %d\n  sr   : %d => %dHz\n  comp : %d\n",
-								size, rate_byte, psf->sf.samplerate, compression) ;
-
-		if (offset + size - 1 > psf->filelength)
-		{	psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-			psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-			return SFE_VOC_BAD_SECTIONS ;
-			}
-		else if (psf->filelength - offset - size > 4)
-		{	psf_log_printf (psf, "Seems to be a multi-segment file (#1).\n") ;
-			psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-			return SFE_VOC_BAD_SECTIONS ;
-			} ;
-
-		psf->dataoffset = offset ;
-		psf->dataend	= psf->filelength - 1 ;
-
-		psf->sf.channels = 1 ;
-		psf->bytewidth = 1 ;
-
-		psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-
-		return 0 ;
-		} ;
-
-	if (block_type == VOC_EXTENDED)
-	{	unsigned char pack, stereo, compression ;
-		unsigned short rate_short ;
-		int		size ;
-
-		offset += psf_binheader_readf (psf, "e3211", &size, &rate_short, &pack, &stereo) ;
-
-		psf_log_printf (psf, " Extended : %d\n", size) ;
-		if (size == 4)
-			psf_log_printf (psf, "  size   : 4\n") ;
-		else
-			psf_log_printf (psf, "  size   : %d (should be 4)\n", size) ;
-
-		psf_log_printf (psf,	"  pack   : %d\n"
-								"  stereo : %s\n", pack, (stereo ? "yes" : "no")) ;
-
-		if (stereo)
-		{	psf->sf.channels = 2 ;
-			psf->sf.samplerate = 128000000 / (65536 - rate_short) ;
-			}
-		else
-		{	psf->sf.channels = 1 ;
-			psf->sf.samplerate = 256000000 / (65536 - rate_short) ;
-			} ;
-
-		psf_log_printf (psf, "  sr     : %d => %dHz\n", (rate_short & 0xFFFF), psf->sf.samplerate) ;
-
-		offset += psf_binheader_readf (psf, "1", &block_type) ;
-
-		if (block_type != VOC_SOUND_DATA)
-		{	psf_log_printf (psf, "*** Expecting VOC_SOUND_DATA section.\n") ;
-			return SFE_VOC_BAD_FORMAT ;
-			} ;
-
-		offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
-
-		psf_log_printf (psf,	" Sound Data : %d\n"
-								"  sr     : %d\n"
-								"  comp   : %d\n", size, rate_byte, compression) ;
-
-
-		if (offset + size - 1 > psf->filelength)
-		{	psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-			psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-			return SFE_VOC_BAD_SECTIONS ;
-			}
-		else if (offset + size - 1 < psf->filelength)
-		{	psf_log_printf (psf, "Seems to be a multi-segment file (#2).\n") ;
-			psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-			return SFE_VOC_BAD_SECTIONS ;
-			} ;
-
-		psf->dataoffset = offset ;
-		psf->dataend = psf->filelength - 1 ;
-
-		psf->bytewidth = 1 ;
-
-		psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-
-		return 0 ;
-		}
-
-	if (block_type == VOC_EXTENDED_II)
-	{	unsigned char bitwidth, channels ;
-		int size, fourbytes ;
-
-		offset += psf_binheader_readf (psf, "e341124", &size, &psf->sf.samplerate,
-								&bitwidth, &channels, &encoding, &fourbytes) ;
-
-		if (size * 2 == psf->filelength - 39)
-		{	int temp_size = psf->filelength - 31 ;
-
-			psf_log_printf (psf, " Extended II : %d (SoX bug: should be %d)\n", size, temp_size) ;
-			size = temp_size ;
-			}
-		else
-			psf_log_printf (psf, " Extended II : %d\n", size) ;
-
-		psf_log_printf (psf,	"  sample rate : %d\n"
-								"  bit width   : %d\n"
-								"  channels    : %d\n", psf->sf.samplerate, bitwidth, channels) ;
-
-		if (bitwidth == 16 && encoding == 0)
-		{	encoding = 4 ;
-			psf_log_printf (psf, "  encoding    : 0 (SoX bug: should be 4 for 16 bit signed PCM)\n") ;
-			}
-		else
-			psf_log_printf (psf, "  encoding    : %d => %s\n", encoding, voc_encoding2str (encoding)) ;
-
-
-		psf_log_printf (psf, "  fourbytes   : %X\n", fourbytes) ;
-
-		psf->sf.channels = channels ;
-
-		psf->dataoffset = offset ;
-		psf->dataend	= psf->filelength - 1 ;
-
-		if (size + 31 == psf->filelength + 1)
-		{	/* Hack for reading files produced using
-			** sf_command (SFC_UPDATE_HEADER_NOW).
-			*/
-			psf_log_printf (psf, "Missing zero byte at end of file.\n") ;
-			size = psf->filelength - 30 ;
-			psf->dataend = 0 ;
-			}
-		else if (size + 31 > psf->filelength)
-		{	psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-			size = psf->filelength - 31 ;
-			}
-		else if (size + 31 < psf->filelength)
-			psf_log_printf (psf, "Seems to be a multi-segment file (#3).\n") ;
-
-		switch (encoding)
-		{	case 0 :
-					psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-					psf->bytewidth = 1 ;
-					break ;
-
-			case 4 :
-					psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_16 ;
-					psf->bytewidth = 2 ;
-					break ;
-
-			case 6 :
-					psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ALAW ;
-					psf->bytewidth = 1 ;
-					break ;
-
-			case 7 :
-					psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ULAW ;
-					psf->bytewidth = 1 ;
-					break ;
-
-			default : /* Unknown */
-					return SFE_UNKNOWN_FORMAT ;
-					break ;
-			} ;
-
-		} ;
-
-	return 0 ;
-} /* voc_read_header */
-
-/*====================================================================================
-*/
-
-static int
-voc_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	int			rate_const, subformat ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* VOC marker and 0x1A byte. */
-	psf_binheader_writef (psf, "eb1", "Creative Voice File", make_size_t (19), 0x1A) ;
-
-	/* Data offset, version and other. */
-	psf_binheader_writef (psf, "e222", 26, 0x0114, 0x111F) ;
-
-	/*	Use same logic as SOX.
-	**	If the file is mono 8 bit data, use VOC_SOUND_DATA.
-	**	If the file is mono 16 bit data, use VOC_EXTENED.
-	**	Otherwise use VOC_EXTENED_2.
-	*/
-
-	if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 1)
-	{	/* samplerate = 1000000 / (256 - rate_const) ; */
-		rate_const = 256 - 1000000 / psf->sf.samplerate ;
-
-		/* First type marker, length, rate_const and compression */
-		psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ;
-		}
-	else if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 2)
-	{	/* sample_rate = 128000000 / (65536 - rate_short) ; */
-		rate_const = 65536 - 128000000 / psf->sf.samplerate ;
-
-		/* First write the VOC_EXTENDED section
-		** 		marker, length, rate_const and compression
-		*/
-		psf_binheader_writef (psf, "e13211", VOC_EXTENDED, 4, rate_const, 0, 1) ;
-
-		/* samplerate = 1000000 / (256 - rate_const) ; */
-		rate_const = 256 - 1000000 / psf->sf.samplerate ;
-
-		/*	Now write the VOC_SOUND_DATA section
-		** 		marker, length, rate_const and compression
-		*/
-		psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ;
-		}
-	else
-	{	int length ;
-
-		if (psf->sf.channels < 1 || psf->sf.channels > 2)
-			return SFE_CHANNEL_COUNT ;
-
-		switch (subformat)
-		{	case SF_FORMAT_PCM_U8 :
-					psf->bytewidth = 1 ;
-					length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-					/* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */
-					psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ;
-					break ;
-
-			case SF_FORMAT_PCM_16 :
-					psf->bytewidth = 2 ;
-					length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-					/* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */
-					psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ;
-					break ;
-
-			case SF_FORMAT_ALAW :
-					psf->bytewidth = 1 ;
-					length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-					psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 6, 0) ;
-					break ;
-
-			case SF_FORMAT_ULAW :
-					psf->bytewidth = 1 ;
-					length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-					psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 7, 0) ;
-					break ;
-
-			default : return SFE_UNIMPLEMENTED ;
-			} ;
-		} ;
-
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* voc_write_header */
-
-static int
-voc_close	(SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	/*  Now we know for certain the length of the file we can re-write
-		**	correct values for the FORM, 8SVX and BODY chunks.
-		*/
-		unsigned char byte = VOC_TERMINATOR ;
-
-
-		psf_fseek (psf, 0, SEEK_END) ;
-
-		/* Write terminator */
-		psf_fwrite (&byte, 1, 1, psf) ;
-
-		voc_write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* voc_close */
-
-static const 	char*
-voc_encoding2str (int encoding)
-{
-	switch (encoding)
-	{	case 0 :	return "8 bit unsigned PCM" ;
-		case 4 :	return "16 bit signed PCM" ;
-		case 6 :	return "A-law" ;
-		case 7 :	return "u-law" ;
-		default :	break ;
-		}
-	return "*** Unknown ***" ;
-} /* voc_encoding2str */
-
-/*====================================================================================
-*/
-
-#if 0
-static int
-voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc)
-{
-	psf->sf.frames = 0 ;
-
-	if (pvoc->bitwidth == 8)
-	{	psf->read_short		= voc_multi_read_uc2s ;
-		psf->read_int		= voc_multi_read_uc2i ;
-		psf->read_float		= voc_multi_read_uc2f ;
-		psf->read_double	= voc_multi_read_uc2d ;
-		return 0 ;
-		} ;
-
-	if (pvoc->bitwidth == 16)
-	{	psf->read_short		= voc_multi_read_les2s ;
-		psf->read_int		= voc_multi_read_les2i ;
-		psf->read_float		= voc_multi_read_les2f ;
-		psf->read_double	= voc_multi_read_les2d ;
-		return 0 ;
-		} ;
-
-	psf_log_printf (psf, "Error : bitwith != 8 && bitwidth != 16.\n") ;
-
-	return SFE_UNIMPLEMENTED ;
-} /* voc_multi_read_int */
-
-/*------------------------------------------------------------------------------------
-*/
-
-static int
-voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_uc2s */
-
-static int
-voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_les2s */
-
-
-static int
-voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_uc2i */
-
-static int
-voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_les2i */
-
-
-static int
-voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_uc2f */
-
-static int
-voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_les2f */
-
-
-static int
-voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_uc2d */
-
-static int
-voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len)
-{
-
-	return 0 ;
-} /* voc_multi_read_les2d */
-
-#endif
-
-/*------------------------------------------------------------------------------------
-
-Creative Voice (VOC) file format
---------------------------------
-
-~From: galt@dsd.es.com
-
-(byte numbers are hex!)
-
-    HEADER (bytes 00-19)
-    Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block]
-
-- ---------------------------------------------------------------
-
-HEADER:
-=======
-     byte #     Description
-     ------     ------------------------------------------
-     00-12      "Creative Voice File"
-     13         1A (eof to abort printing of file)
-     14-15      Offset of first datablock in .voc file (std 1A 00
-                in Intel Notation)
-     16-17      Version number (minor,major) (VOC-HDR puts 0A 01)
-     18-19      1's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)
-
-- ---------------------------------------------------------------
-
-DATA BLOCK:
-===========
-
-   Data Block:  TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes)
-   NOTE: Terminator Block is an exception -- it has only the TYPE byte.
-
-      TYPE   Description     Size (3-byte int)   Info
-      ----   -----------     -----------------   -----------------------
-      00     Terminator      (NONE)              (NONE)
-      01     Sound data      2+length of data    *
-      02     Sound continue  length of data      Voice Data
-      03     Silence         3                   **
-      04     Marker          2                   Marker# (2 bytes)
-      05     ASCII           length of string    null terminated string
-      06     Repeat          2                   Count# (2 bytes)
-      07     End repeat      0                   (NONE)
-      08     Extended        4                   ***
-
-      *Sound Info Format:
-       ---------------------
-       00   Sample Rate
-       01   Compression Type
-       02+  Voice Data
-
-      **Silence Info Format:
-      ----------------------------
-      00-01  Length of silence - 1
-      02     Sample Rate
-
-
-    ***Extended Info Format:
-       ---------------------
-       00-01  Time Constant: Mono: 65536 - (256000000/sample_rate)
-                             Stereo: 65536 - (25600000/(2*sample_rate))
-       02     Pack
-       03     Mode: 0 = mono
-                    1 = stereo
-
-
-  Marker#           -- Driver keeps the most recent marker in a status byte
-  Count#            -- Number of repetitions + 1
-                         Count# may be 1 to FFFE for 0 - FFFD repetitions
-                         or FFFF for endless repetitions
-  Sample Rate       -- SR byte = 256-(1000000/sample_rate)
-  Length of silence -- in units of sampling cycle
-  Compression Type  -- of voice data
-                         8-bits    = 0
-                         4-bits    = 1
-                         2.6-bits  = 2
-                         2-bits    = 3
-                         Multi DAC = 3+(# of channels) [interesting--
-                                       this isn't in the developer's manual]
-
-
----------------------------------------------------------------------------------
-Addendum submitted by Votis Kokavessis:
-
-After some experimenting with .VOC files I found out that there is a Data Block
-Type 9, which is not covered in the VOC.TXT file. Here is what I was able to discover
-about this block type:
-
-
-TYPE: 09
-SIZE: 12 + length of data
-INFO: 12 (twelve) bytes
-
-INFO STRUCTURE:
-
-Bytes 0-1: (Word) Sample Rate (e.g. 44100)
-Bytes 2-3: zero (could be that bytes 0-3 are a DWord for Sample Rate)
-Byte 4: Sample Size in bits (e.g. 16)
-Byte 5: Number of channels (e.g. 1 for mono, 2 for stereo)
-Byte 6: Unknown (equal to 4 in all files I examined)
-Bytes 7-11: zero
-
-
--------------------------------------------------------------------------------------*/
-
-/*=====================================================================================
-**=====================================================================================
-**=====================================================================================
-**=====================================================================================
-*/
-
-/*------------------------------------------------------------------------
-The following is taken from the Audio File Formats FAQ dated 2-Jan-1995
-and submitted by Guido van Rossum <guido@cwi.nl>.
---------------------------------------------------------------------------
-Creative Voice (VOC) file format
---------------------------------
-
-From: galt@dsd.es.com
-
-(byte numbers are hex!)
-
-    HEADER (bytes 00-19)
-    Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block]
-
-- ---------------------------------------------------------------
-
-HEADER:
--------
-     byte #     Description
-     ------     ------------------------------------------
-     00-12      "Creative Voice File"
-     13         1A (eof to abort printing of file)
-     14-15      Offset of first datablock in .voc file (std 1A 00
-                in Intel Notation)
-     16-17      Version number (minor,major) (VOC-HDR puts 0A 01)
-     18-19      2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)
-
-- ---------------------------------------------------------------
-
-DATA BLOCK:
------------
-
-   Data Block:  TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes)
-   NOTE: Terminator Block is an exception -- it has only the TYPE byte.
-
-      TYPE   Description     Size (3-byte int)   Info
-      ----   -----------     -----------------   -----------------------
-      00     Terminator      (NONE)              (NONE)
-      01     Sound data      2+length of data    *
-      02     Sound continue  length of data      Voice Data
-      03     Silence         3                   **
-      04     Marker          2                   Marker# (2 bytes)
-      05     ASCII           length of string    null terminated string
-      06     Repeat          2                   Count# (2 bytes)
-      07     End repeat      0                   (NONE)
-      08     Extended        4                   ***
-
-      *Sound Info Format:       **Silence Info Format:
-       ---------------------      ----------------------------
-       00   Sample Rate           00-01  Length of silence - 1
-       01   Compression Type      02     Sample Rate
-       02+  Voice Data
-
-    ***Extended Info Format:
-       ---------------------
-       00-01  Time Constant: Mono: 65536 - (256000000/sample_rate)
-                             Stereo: 65536 - (25600000/(2*sample_rate))
-       02     Pack
-       03     Mode: 0 = mono
-                    1 = stereo
-
-
-  Marker#           -- Driver keeps the most recent marker in a status byte
-  Count#            -- Number of repetitions + 1
-                         Count# may be 1 to FFFE for 0 - FFFD repetitions
-                         or FFFF for endless repetitions
-  Sample Rate       -- SR byte = 256-(1000000/sample_rate)
-  Length of silence -- in units of sampling cycle
-  Compression Type  -- of voice data
-                         8-bits    = 0
-                         4-bits    = 1
-                         2.6-bits  = 2
-                         2-bits    = 3
-                         Multi DAC = 3+(# of channels) [interesting--
-                                       this isn't in the developer's manual]
-
-Detailed description of new data blocks (VOC files version 1.20 and above):
-
-        (Source is fax from Barry Boone at Creative Labs, 405/742-6622)
-
-BLOCK 8 - digitized sound attribute extension, must preceed block 1.
-          Used to define stereo, 8 bit audio
-        BYTE bBlockID;       // = 8
-        BYTE nBlockLen[3];   // 3 byte length
-        WORD wTimeConstant;  // time constant = same as block 1
-        BYTE bPackMethod;    // same as in block 1
-        BYTE bVoiceMode;     // 0-mono, 1-stereo
-
-        Data is stored left, right
-
-BLOCK 9 - data block that supersedes blocks 1 and 8.
-          Used for stereo, 16 bit.
-
-        BYTE bBlockID;          // = 9
-        BYTE nBlockLen[3];      // length 12 plus length of sound
-        DWORD dwSamplesPerSec;  // samples per second, not time const.
-        BYTE bBitsPerSample;    // e.g., 8 or 16
-        BYTE bChannels;         // 1 for mono, 2 for stereo
-        WORD wFormat;           // see below
-        BYTE reserved[4];       // pad to make block w/o data
-                                // have a size of 16 bytes
-
-        Valid values of wFormat are:
-
-                0x0000  8-bit unsigned PCM
-                0x0001  Creative 8-bit to 4-bit ADPCM
-                0x0002  Creative 8-bit to 3-bit ADPCM
-                0x0003  Creative 8-bit to 2-bit ADPCM
-                0x0004  16-bit signed PCM
-                0x0006  CCITT a-Law
-                0x0007  CCITT u-Law
-                0x02000 Creative 16-bit to 4-bit ADPCM
-
-        Data is stored left, right
-
-------------------------------------------------------------------------*/
diff --git a/libs/libsndfile/src/vox_adpcm.c b/libs/libsndfile/src/vox_adpcm.c
deleted file mode 100644
index 9abd42b0d7..0000000000
--- a/libs/libsndfile/src/vox_adpcm.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	This is the OKI / Dialogic ADPCM encoder/decoder. It converts from
-**	12 bit linear sample data to a 4 bit ADPCM.
-*/
-
-/*
- * Note: some early Dialogic hardware does not always reset the ADPCM encoder
- * at the start of each vox file. This can result in clipping and/or DC offset
- * problems when it comes to decoding the audio. Whilst little can be done
- * about the clipping, a DC offset can be removed by passing the decoded audio
- * through a high-pass filter at e.g. 10Hz.
- */
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"ima_oki_adpcm.h"
-
-
-static sf_count_t vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t vox_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t vox_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t vox_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static int vox_read_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, short *ptr, int len) ;
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-codec_close (SF_PRIVATE * psf)
-{
-	IMA_OKI_ADPCM * p = (IMA_OKI_ADPCM *) psf->codec_data ;
-
-	if (p->errors)
-		psf_log_printf (psf, "*** Warning : ADPCM state errors: %d\n", p->errors) ;
-	return p->errors ;
-} /* code_close */
-
-int
-vox_adpcm_init (SF_PRIVATE *psf)
-{	IMA_OKI_ADPCM *pvox = NULL ;
-
-	if (psf->file.mode == SFM_RDWR)
-		return SFE_BAD_MODE_RW ;
-
-	if (psf->file.mode == SFM_WRITE && psf->sf.channels != 1)
-		return SFE_CHANNEL_COUNT ;
-
-	if ((pvox = malloc (sizeof (IMA_OKI_ADPCM))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = (void*) pvox ;
-	memset (pvox, 0, sizeof (IMA_OKI_ADPCM)) ;
-
-	if (psf->file.mode == SFM_WRITE)
-	{	psf->write_short	= vox_write_s ;
-		psf->write_int		= vox_write_i ;
-		psf->write_float	= vox_write_f ;
-		psf->write_double	= vox_write_d ;
-		}
-	else
-	{	psf_log_printf (psf, "Header-less OKI Dialogic ADPCM encoded file.\n") ;
-		psf_log_printf (psf, "Setting up for 8kHz, mono, Vox ADPCM.\n") ;
-
-		psf->read_short		= vox_read_s ;
-		psf->read_int		= vox_read_i ;
-		psf->read_float		= vox_read_f ;
-		psf->read_double	= vox_read_d ;
-		} ;
-
-	/* Standard sample rate chennels etc. */
-	if (psf->sf.samplerate < 1)
-		psf->sf.samplerate	= 8000 ;
-	psf->sf.channels	= 1 ;
-
-	psf->sf.frames = psf->filelength * 2 ;
-
-	psf->sf.seekable = SF_FALSE ;
-	psf->codec_close = codec_close ;
-
-	/* Seek back to start of data. */
-	if (psf_fseek (psf, 0 , SEEK_SET) == -1)
-		return SFE_BAD_SEEK ;
-
-	ima_oki_adpcm_init (pvox, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-	return 0 ;
-} /* vox_adpcm_init */
-
-/*==============================================================================
-*/
-
-static int
-vox_read_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, short *ptr, int len)
-{	int	indx = 0, k ;
-
-	while (indx < len)
-	{	pvox->code_count = (len - indx > IMA_OKI_ADPCM_PCM_LEN) ? IMA_OKI_ADPCM_CODE_LEN : (len - indx + 1) / 2 ;
-
-		if ((k = psf_fread (pvox->codes, 1, pvox->code_count, psf)) != pvox->code_count)
-		{	if (psf_ftell (psf) != psf->filelength)
-				psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pvox->code_count) ;
-			if (k == 0)
-				break ;
-			} ;
-
-		pvox->code_count = k ;
-
-		ima_oki_adpcm_decode_block (pvox) ;
-
-		memcpy (&(ptr [indx]), pvox->pcm, pvox->pcm_count * sizeof (short)) ;
-		indx += pvox->pcm_count ;
-		} ;
-
-	return indx ;
-} /* vox_read_block */
-
-
-static sf_count_t
-vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM 	*pvox ;
-	int			readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	while (len > 0)
-	{	readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = vox_read_block (psf, pvox, ptr, readcount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_read_s */
-
-static sf_count_t
-vox_read_i	(SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = vox_read_block (psf, pvox, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = ((int) sptr [k]) << 16 ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_read_i */
-
-static sf_count_t
-vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = vox_read_block (psf, pvox, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (float) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_read_f */
-
-static sf_count_t
-vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, readcount, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-		count = vox_read_block (psf, pvox, sptr, readcount) ;
-		for (k = 0 ; k < readcount ; k++)
-			ptr [total + k] = normfact * (double) (sptr [k]) ;
-		total += count ;
-		len -= readcount ;
-		if (count != readcount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_read_d */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-vox_write_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, const short *ptr, int len)
-{	int	indx = 0, k ;
-
-	while (indx < len)
-	{	pvox->pcm_count = (len - indx > IMA_OKI_ADPCM_PCM_LEN) ? IMA_OKI_ADPCM_PCM_LEN : len - indx ;
-
-		memcpy (pvox->pcm, &(ptr [indx]), pvox->pcm_count * sizeof (short)) ;
-
-		ima_oki_adpcm_encode_block (pvox) ;
-
-		if ((k = psf_fwrite (pvox->codes, 1, pvox->code_count, psf)) != pvox->code_count)
-			psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pvox->code_count) ;
-
-		indx += pvox->pcm_count ;
-		} ;
-
-	return indx ;
-} /* vox_write_block */
-
-static sf_count_t
-vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM 	*pvox ;
-	int			writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	while (len)
-	{	writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-		count = vox_write_block (psf, pvox, ptr, writecount) ;
-
-		total += count ;
-		len -= count ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_write_s */
-
-static sf_count_t
-vox_write_i	(SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = ptr [total + k] >> 16 ;
-		count = vox_write_block (psf, pvox, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_write_i */
-
-static sf_count_t
-vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrintf (normfact * ptr [total + k]) ;
-		count = vox_write_block (psf, pvox, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_write_f */
-
-static sf_count_t
-vox_write_d	(SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	IMA_OKI_ADPCM *pvox ;
-	BUF_UNION	ubuf ;
-	short		*sptr ;
-	int			k, bufferlen, writecount, count ;
-	sf_count_t	total = 0 ;
-	double 		normfact ;
-
-	if (! psf->codec_data)
-		return 0 ;
-	pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	sptr = ubuf.sbuf ;
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-	while (len > 0)
-	{	writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-		for (k = 0 ; k < writecount ; k++)
-			sptr [k] = lrint (normfact * ptr [total + k]) ;
-		count = vox_write_block (psf, pvox, sptr, writecount) ;
-		total += count ;
-		len -= writecount ;
-		if (count != writecount)
-			break ;
-		} ;
-
-	return total ;
-} /* vox_write_d */
-
diff --git a/libs/libsndfile/src/w64.c b/libs/libsndfile/src/w64.c
deleted file mode 100644
index 2dbc962e13..0000000000
--- a/libs/libsndfile/src/w64.c
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<time.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"wav_w64.h"
-
-/*------------------------------------------------------------------------------
-** W64 files use 16 byte markers as opposed to the four byte marker of
-** WAV files.
-** For comparison purposes, an integer is required, so make an integer
-** hash for the 16 bytes using MAKE_HASH16 macro, but also create a 16
-** byte array containing the complete 16 bytes required when writing the
-** header.
-*/
-
-#define MAKE_HASH16(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xa, xb, xc, xd, xe, xf)	\
-			(	(x0)			^ ((x1) << 1)	^ ((x2) << 2)	^ ((x3) << 3) ^	\
-				((x4) << 4) 	^ ((x5) << 5)	^ ((x6) << 6)	^ ((x7) << 7) ^	\
-				((x8) << 8) 	^ ((x9) << 9)	^ ((xa) << 10)	^ ((xb) << 11) ^ \
-				((xc) << 12) 	^ ((xd) << 13)	^ ((xe) << 14)	^ ((xf) << 15)	)
-
-#define MAKE_MARKER16(name, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xa, xb, xc, xd, xe, xf)	\
-			static unsigned char name [16] = { (x0), (x1), (x2), (x3), (x4), (x5), \
-				(x6), (x7), (x8), (x9), (xa), (xb), (xc), (xd), (xe), (xf) }
-
-#define	riff_HASH16 MAKE_HASH16 ('r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11, \
-								0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00)
-
-#define	wave_HASH16 	MAKE_HASH16 ('w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11, \
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define	fmt_HASH16 		MAKE_HASH16 ('f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11, \
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define	fact_HASH16 	MAKE_HASH16 ('f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11, \
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define	data_HASH16 	MAKE_HASH16 ('d', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11, \
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define	ACID_HASH16 	MAKE_HASH16 (0x6D, 0x07, 0x1C, 0xEA, 0xA3, 0xEF, 0x78, 0x4C, \
-								0x90, 0x57, 0x7F, 0x79, 0xEE, 0x25, 0x2A, 0xAE)
-
-#define	levl_HASH16		MAKE_HASH16 (0x6c, 0x65, 0x76, 0x6c, 0xf3, 0xac, 0xd3, 0x11, \
-								0xd1, 0x8c, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define list_HASH16		MAKE_HASH16 (0x6C, 0x69, 0x73, 0x74, 0x2F, 0x91, 0xCF, 0x11, \
-								0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00)
-
-#define junk_HASH16		MAKE_HASH16 (0x6A, 0x75, 0x6E, 0x6b, 0xF3, 0xAC, 0xD3, 0x11, \
-								0x8C, 0xD1, 0x00, 0xC0, 0x4f, 0x8E, 0xDB, 0x8A)
-
-#define bext_MARKER		MAKE_HASH16 (0x62, 0x65, 0x78, 0x74, 0xf3, 0xac, 0xd3, 0xaa, \
-								0xd1, 0x8c, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define MARKER_HASH16	MAKE_HASH16 (0x56, 0x62, 0xf7, 0xab, 0x2d, 0x39, 0xd2, 0x11, \
-								0x86, 0xc7, 0x00, 0xc0, 0x4f, 0x8e, 0xdb, 0x8a)
-
-#define	SUMLIST_HASH16	MAKE_HASH16 (0xBC, 0x94, 0x5F, 0x92, 0x5A, 0x52, 0xD2, 0x11, \
-								0x86, 0xDC, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-
-MAKE_MARKER16 (riff_MARKER16, 'r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11,
-								0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00) ;
-
-
-MAKE_MARKER16 (wave_MARKER16, 'w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11,
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (fmt_MARKER16, 'f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11,
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (fact_MARKER16, 'f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11,
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (data_MARKER16, 'd', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11,
-								0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-enum
-{	HAVE_riff	= 0x01,
-	HAVE_wave	= 0x02,
-	HAVE_fmt	= 0x04,
-	HAVE_fact	= 0x08,
-	HAVE_data	= 0x20
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int	w64_read_header	(SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int	w64_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	w64_close (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-w64_open	(SF_PRIVATE *psf)
-{	WAV_PRIVATE * wpriv ;
-	int	subformat, error, blockalign = 0, framesperblock = 0 ;
-
-	if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-	psf->container_data = wpriv ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR &&psf->filelength > 0))
-	{	if ((error = w64_read_header (psf, &blockalign, &framesperblock)))
-			return error ;
-		} ;
-
-	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_W64)
-		return	SFE_BAD_OPEN_FORMAT ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		psf->endian = SF_ENDIAN_LITTLE ;		/* All W64 files are little endian. */
-
-		psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-		if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM)
-		{	blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-			framesperblock = -1 ;
-
-			/* FIXME : This block must go */
-			psf->filelength = SF_COUNT_MAX ;
-			psf->datalength = psf->filelength ;
-			if (psf->sf.frames <= 0)
-				psf->sf.frames = (psf->blockwidth) ? psf->filelength / psf->blockwidth : psf->filelength ;
-			/* EMXIF : This block must go */
-			} ;
-
-		if ((error = w64_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = w64_write_header ;
-		} ;
-
-	psf->container_close = w64_close ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					error = ulaw_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					error = alaw_init (psf) ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-					error = float32_init (psf) ;
-					break ;
-
-		case SF_FORMAT_DOUBLE :
-					error = double64_init (psf) ;
-					break ;
-
-		case SF_FORMAT_IMA_ADPCM :
-					error = wav_w64_ima_init (psf, blockalign, framesperblock) ;
-					break ;
-
-		case SF_FORMAT_MS_ADPCM :
-					error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ;
-					break ;
-		/* Lite remove end */
-
-		case SF_FORMAT_GSM610 :
-					error = gsm610_init (psf) ;
-					break ;
-
-		default : 	return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return error ;
-} /* w64_open */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-w64_read_header	(SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{	WAV_PRIVATE *wpriv ;
-	WAV_FMT 	*wav_fmt ;
-	int			dword = 0, marker, format = 0 ;
-	sf_count_t	chunk_size, bytesread = 0 ;
-	int			parsestage = 0, error, done = 0 ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-	wav_fmt = &wpriv->wav_fmt ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "p", 0) ;
-
-	while (! done)
-	{	/* Each new chunk must start on an 8 byte boundary, so jump if needed. */
-		if (psf->headindex & 0x7)
-			psf_binheader_readf (psf, "j", 8 - (psf->headindex & 0x7)) ;
-
-		/* Generate hash of 16 byte marker. */
-		bytesread += psf_binheader_readf (psf, "h", &marker) ;
-		chunk_size = 0 ;
-
-		switch (marker)
-		{	case riff_HASH16 :
-					if (parsestage)
-						return SFE_W64_NO_RIFF ;
-
-					bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ;
-
-					if (psf->filelength != chunk_size)
-						psf_log_printf (psf, "riff : %D (should be %D)\n", chunk_size, psf->filelength) ;
-					else
-						psf_log_printf (psf, "riff : %D\n", chunk_size) ;
-
-					parsestage |= HAVE_riff ;
-					break ;
-
-			case ACID_HASH16:
-					psf_log_printf (psf, "Looks like an ACID file. Exiting.\n") ;
-					return SFE_UNIMPLEMENTED ;
-
-			case wave_HASH16 :
-					if ((parsestage & HAVE_riff) != HAVE_riff)
-						return SFE_W64_NO_WAVE ;
-					psf_log_printf (psf, "wave\n") ;
-					parsestage |= HAVE_wave ;
-					break ;
-
-			case fmt_HASH16 :
-					if ((parsestage & (HAVE_riff | HAVE_wave)) != (HAVE_riff | HAVE_wave))
-						return SFE_WAV_NO_FMT ;
-
-					bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, " fmt : %D\n", chunk_size) ;
-
-					/* size of 16 byte marker and 8 byte chunk_size value. */
-					chunk_size -= 24 ;
-
-					if ((error = wav_w64_read_fmt_chunk (psf, (int) chunk_size)))
-						return error ;
-
-					if (chunk_size % 8)
-						psf_binheader_readf (psf, "j", 8 - (chunk_size % 8)) ;
-
-					format		= wav_fmt->format ;
-					parsestage |= HAVE_fmt ;
-					break ;
-
-			case fact_HASH16:
-					{	sf_count_t frames ;
-
-						psf_binheader_readf (psf, "e88", &chunk_size, &frames) ;
-						psf_log_printf (psf, "   fact : %D\n     frames : %D\n",
-										chunk_size, frames) ;
-						} ;
-					break ;
-
-
-			case data_HASH16 :
-					if ((parsestage & (HAVE_riff | HAVE_wave | HAVE_fmt)) != (HAVE_riff | HAVE_wave | HAVE_fmt))
-						return SFE_W64_NO_DATA ;
-
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-
-					psf->dataoffset = psf_ftell (psf) ;
-
-					psf->datalength = chunk_size - 24 ;
-
-					if (chunk_size % 8)
-						chunk_size += 8 - (chunk_size % 8) ;
-
-					psf_log_printf (psf, "data : %D\n", chunk_size) ;
-
-					parsestage |= HAVE_data ;
-
-					if (! psf->sf.seekable)
-						break ;
-
-					/* Seek past data and continue reading header. */
-					psf_fseek (psf, chunk_size, SEEK_CUR) ;
-					break ;
-
-			case levl_HASH16 :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "levl : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			case list_HASH16 :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "list : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			case junk_HASH16 :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "junk : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			case bext_MARKER :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "bext : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			case MARKER_HASH16 :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "marker : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			case SUMLIST_HASH16 :
-					psf_binheader_readf (psf, "e8", &chunk_size) ;
-					psf_log_printf (psf, "summary list : %D\n", chunk_size) ;
-					dword = chunk_size ;
-					psf_binheader_readf (psf, "j", dword - 24) ;
-					break ;
-
-			default :
-					psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
-					done = SF_TRUE ;
-					break ;
-			} ;	/* switch (dword) */
-
-		if (psf->sf.seekable == 0 && (parsestage & HAVE_data))
-			break ;
-
-		if (psf_ftell (psf) >= (psf->filelength - (2 * SIGNED_SIZEOF (dword))))
-			break ;
-		} ; /* while (1) */
-
-	if (psf->dataoffset <= 0)
-		return SFE_W64_NO_DATA ;
-
-	psf->endian = SF_ENDIAN_LITTLE ;		/* All W64 files are little endian. */
-
-	if (psf_ftell (psf) != psf->dataoffset)
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (psf->blockwidth)
-	{	if (psf->filelength - psf->dataoffset < psf->datalength)
-			psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-		else
-			psf->sf.frames = psf->datalength / psf->blockwidth ;
-		} ;
-
-	switch (format)
-	{	case WAVE_FORMAT_PCM :
-		case WAVE_FORMAT_EXTENSIBLE :
-					/* extensible might be FLOAT, MULAW, etc as well! */
-					psf->sf.format = SF_FORMAT_W64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-					break ;
-
-		case WAVE_FORMAT_MULAW :
-					psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ULAW) ;
-					break ;
-
-		case WAVE_FORMAT_ALAW :
-					psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ALAW) ;
-					break ;
-
-		case WAVE_FORMAT_MS_ADPCM :
-					psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ;
-					*blockalign = wav_fmt->msadpcm.blockalign ;
-					*framesperblock = wav_fmt->msadpcm.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_IMA_ADPCM :
-					psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ;
-					*blockalign = wav_fmt->ima.blockalign ;
-					*framesperblock = wav_fmt->ima.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_GSM610 :
-					psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_GSM610) ;
-					break ;
-
-		case WAVE_FORMAT_IEEE_FLOAT :
-					psf->sf.format = SF_FORMAT_W64 ;
-					psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-					break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	return 0 ;
-} /* w64_read_header */
-
-static int
-w64_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t 	fmt_size, current ;
-	size_t		fmt_pad = 0 ;
-	int 		subformat, add_fact_chunk = SF_FALSE ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		if (psf->bytewidth)
-			psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* riff marker, length, wave and 'fmt ' markers. */
-	psf_binheader_writef (psf, "eh8hh", riff_MARKER16, psf->filelength, wave_MARKER16, fmt_MARKER16) ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	switch (subformat)
-	{	case	SF_FORMAT_PCM_U8 :
-		case	SF_FORMAT_PCM_16 :
-		case	SF_FORMAT_PCM_24 :
-		case	SF_FORMAT_PCM_32 :
-					fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-					fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-					fmt_size += fmt_pad ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-					break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-					fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-					fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-					fmt_size += fmt_pad ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-					fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-					fmt_size += fmt_pad ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-					fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-					fmt_size += fmt_pad ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_IMA_ADPCM :
-					{	int		blockalign, framesperblock, bytespersec ;
-
-						blockalign		= wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-						framesperblock	= 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-						bytespersec		= (psf->sf.samplerate * blockalign) / framesperblock ;
-
-						/* fmt chunk. */
-						fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-						fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-						fmt_size += fmt_pad ;
-
-						/* fmt : size, WAV format type, channels. */
-						psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_IMA_ADPCM, psf->sf.channels) ;
-
-						/* fmt : samplerate, bytespersec. */
-						psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "e2222", blockalign, 4, 2, framesperblock) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_MS_ADPCM :
-					{	int blockalign, framesperblock, bytespersec, extrabytes ;
-
-						blockalign		= wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-						framesperblock	= 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-						bytespersec		= (psf->sf.samplerate * blockalign) / framesperblock ;
-
-						/* fmt chunk. */
-						extrabytes	= 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ;
-						fmt_size	= 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
-						fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-						fmt_size += fmt_pad ;
-
-						/* fmt : size, W64 format type, channels. */
-						psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ;
-
-						/* fmt : samplerate, bytespersec. */
-						psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "e22222", blockalign, 4, extrabytes, framesperblock, 7) ;
-
-						msadpcm_write_adapt_coeffs (psf) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-		/* Lite remove end */
-
-		case SF_FORMAT_GSM610 :
-					{	int bytespersec ;
-
-						bytespersec = (psf->sf.samplerate * WAV_W64_GSM610_BLOCKSIZE) / WAV_W64_GSM610_SAMPLES ;
-
-						/* fmt chunk. */
-						fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-						fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-						fmt_size += fmt_pad ;
-
-						/* fmt : size, WAV format type, channels. */
-						psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
-
-						/* fmt : samplerate, bytespersec. */
-						psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "e2222", WAV_W64_GSM610_BLOCKSIZE, 0, 2, WAV_W64_GSM610_SAMPLES) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		default : 	return SFE_UNIMPLEMENTED ;
-		} ;
-
-	/* Pad to 8 bytes with zeros. */
-	if (fmt_pad > 0)
-		psf_binheader_writef (psf, "z", fmt_pad) ;
-
-	if (add_fact_chunk)
-		psf_binheader_writef (psf, "eh88", fact_MARKER16, (sf_count_t) (16 + 8 + 8), psf->sf.frames) ;
-
-	psf_binheader_writef (psf, "eh8", data_MARKER16, psf->datalength + 24) ;
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* w64_write_header */
-
-static int
-w64_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-		w64_write_header (psf, SF_TRUE) ;
-
-	return 0 ;
-} /* w64_close */
-
diff --git a/libs/libsndfile/src/wav.c b/libs/libsndfile/src/wav.c
deleted file mode 100644
index 6e616b70ff..0000000000
--- a/libs/libsndfile/src/wav.c
+++ /dev/null
@@ -1,2048 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004-2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<time.h>
-#ifdef HAVE_INTTYPES_H
-#include	<inttypes.h>
-#endif
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"wav_w64.h"
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
- */
-
-#define RIFF_MARKER		(MAKE_MARKER ('R', 'I', 'F', 'F'))
-#define RIFX_MARKER		(MAKE_MARKER ('R', 'I', 'F', 'X'))
-#define WAVE_MARKER		(MAKE_MARKER ('W', 'A', 'V', 'E'))
-#define fmt_MARKER		(MAKE_MARKER ('f', 'm', 't', ' '))
-#define data_MARKER		(MAKE_MARKER ('d', 'a', 't', 'a'))
-#define fact_MARKER		(MAKE_MARKER ('f', 'a', 'c', 't'))
-#define PEAK_MARKER		(MAKE_MARKER ('P', 'E', 'A', 'K'))
-
-#define cue_MARKER		(MAKE_MARKER ('c', 'u', 'e', ' '))
-#define LIST_MARKER		(MAKE_MARKER ('L', 'I', 'S', 'T'))
-#define slnt_MARKER		(MAKE_MARKER ('s', 'l', 'n', 't'))
-#define wavl_MARKER		(MAKE_MARKER ('w', 'a', 'v', 'l'))
-#define INFO_MARKER		(MAKE_MARKER ('I', 'N', 'F', 'O'))
-#define plst_MARKER		(MAKE_MARKER ('p', 'l', 's', 't'))
-#define adtl_MARKER		(MAKE_MARKER ('a', 'd', 't', 'l'))
-#define labl_MARKER		(MAKE_MARKER ('l', 'a', 'b', 'l'))
-#define ltxt_MARKER		(MAKE_MARKER ('l', 't', 'x', 't'))
-#define note_MARKER		(MAKE_MARKER ('n', 'o', 't', 'e'))
-#define smpl_MARKER		(MAKE_MARKER ('s', 'm', 'p', 'l'))
-#define bext_MARKER		(MAKE_MARKER ('b', 'e', 'x', 't'))
-#define iXML_MARKER		(MAKE_MARKER ('i', 'X', 'M', 'L'))
-#define levl_MARKER		(MAKE_MARKER ('l', 'e', 'v', 'l'))
-#define MEXT_MARKER		(MAKE_MARKER ('M', 'E', 'X', 'T'))
-#define DISP_MARKER		(MAKE_MARKER ('D', 'I', 'S', 'P'))
-#define acid_MARKER		(MAKE_MARKER ('a', 'c', 'i', 'd'))
-#define strc_MARKER		(MAKE_MARKER ('s', 't', 'r', 'c'))
-#define PAD_MARKER		(MAKE_MARKER ('P', 'A', 'D', ' '))
-#define afsp_MARKER		(MAKE_MARKER ('a', 'f', 's', 'p'))
-#define clm_MARKER		(MAKE_MARKER ('c', 'l', 'm', ' '))
-#define elmo_MARKER		(MAKE_MARKER ('e', 'l', 'm', 'o'))
-#define cart_MARKER		(MAKE_MARKER ('c', 'a', 'r', 't'))
-#define FLLR_MARKER		(MAKE_MARKER ('F', 'L', 'L', 'R'))
-
-#define exif_MARKER		(MAKE_MARKER ('e', 'x', 'i', 'f'))
-#define ever_MARKER		(MAKE_MARKER ('e', 'v', 'e', 'r'))
-#define etim_MARKER		(MAKE_MARKER ('e', 't', 'i', 'm'))
-#define ecor_MARKER		(MAKE_MARKER ('e', 'c', 'o', 'r'))
-#define emdl_MARKER		(MAKE_MARKER ('e', 'm', 'd', 'l'))
-#define emnt_MARKER		(MAKE_MARKER ('e', 'm', 'n', 't'))
-#define erel_MARKER		(MAKE_MARKER ('e', 'r', 'e', 'l'))
-#define eucm_MARKER		(MAKE_MARKER ('e', 'u', 'c', 'm'))
-#define olym_MARKER		(MAKE_MARKER ('o', 'l', 'y', 'm'))
-#define minf_MARKER		(MAKE_MARKER ('m', 'i', 'n', 'f'))
-#define elm1_MARKER		(MAKE_MARKER ('e', 'l', 'm', '1'))
-#define regn_MARKER		(MAKE_MARKER ('r', 'e', 'g', 'n'))
-#define ovwf_MARKER		(MAKE_MARKER ('o', 'v', 'w', 'f'))
-#define umid_MARKER		(MAKE_MARKER ('u', 'm', 'i', 'd'))
-#define SyLp_MARKER		(MAKE_MARKER ('S', 'y', 'L', 'p'))
-#define Cr8r_MARKER		(MAKE_MARKER ('C', 'r', '8', 'r'))
-#define JUNK_MARKER		(MAKE_MARKER ('J', 'U', 'N', 'K'))
-#define PMX_MARKER		(MAKE_MARKER ('_', 'P', 'M', 'X'))
-#define inst_MARKER		(MAKE_MARKER ('i', 'n', 's', 't'))
-#define AFAn_MARKER		(MAKE_MARKER ('A', 'F', 'A', 'n'))
-
-
-#define ISFT_MARKER		(MAKE_MARKER ('I', 'S', 'F', 'T'))
-#define ICRD_MARKER		(MAKE_MARKER ('I', 'C', 'R', 'D'))
-#define ICOP_MARKER		(MAKE_MARKER ('I', 'C', 'O', 'P'))
-#define IARL_MARKER		(MAKE_MARKER ('I', 'A', 'R', 'L'))
-#define IART_MARKER		(MAKE_MARKER ('I', 'A', 'R', 'T'))
-#define INAM_MARKER		(MAKE_MARKER ('I', 'N', 'A', 'M'))
-#define IENG_MARKER		(MAKE_MARKER ('I', 'E', 'N', 'G'))
-#define IGNR_MARKER		(MAKE_MARKER ('I', 'G', 'N', 'R'))
-#define ICOP_MARKER		(MAKE_MARKER ('I', 'C', 'O', 'P'))
-#define IPRD_MARKER		(MAKE_MARKER ('I', 'P', 'R', 'D'))
-#define ISRC_MARKER		(MAKE_MARKER ('I', 'S', 'R', 'C'))
-#define ISBJ_MARKER		(MAKE_MARKER ('I', 'S', 'B', 'J'))
-#define ICMT_MARKER		(MAKE_MARKER ('I', 'C', 'M', 'T'))
-#define IAUT_MARKER		(MAKE_MARKER ('I', 'A', 'U', 'T'))
-#define ITRK_MARKER		(MAKE_MARKER ('I', 'T', 'R', 'K'))
-
-/* Weird WAVPACK marker which can show up at the start of the DATA section. */
-#define wvpk_MARKER (MAKE_MARKER ('w', 'v', 'p', 'k'))
-#define OggS_MARKER (MAKE_MARKER ('O', 'g', 'g', 'S'))
-
-#define WAV_PEAK_CHUNK_SIZE(ch) 	(2 * sizeof (int) + ch * (sizeof (float) + sizeof (int)))
-#define WAV_BEXT_MIN_CHUNK_SIZE		602
-#define WAV_BEXT_MAX_CHUNK_SIZE		(10 * 1024)
-
-#define WAV_CART_MIN_CHUNK_SIZE		2048
-#define WAV_CART_MAX_CHUNK_SIZE		0xffffffff
-
-
-enum
-{	HAVE_RIFF	= 0x01,
-	HAVE_WAVE	= 0x02,
-	HAVE_fmt	= 0x04,
-	HAVE_fact	= 0x08,
-	HAVE_PEAK	= 0x10,
-	HAVE_data	= 0x20,
-	HAVE_other	= 0x80000000
-} ;
-
-
-
-/*  known WAVEFORMATEXTENSIBLE GUIDS  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{	0x00000001, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{	0x00000002, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{	0x00000003, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{	0x00000006, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{	0x00000007, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{	0x00000001, 0x0721, 0x11d3, {	0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{	0x00000003, 0x0721, 0x11d3, {	0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-
-#if 0
-/* maybe interesting one day to read the following through sf_read_raw */
-/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX =
-{	0x8312B9C2, 0x2E6E, 0x11d4, {	0xA8, 0x24, 0xDE, 0x5B, 0x96, 0xC3, 0xAB, 0x21 }
-} ;
-#endif
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	wav_read_header		(SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int	wav_write_header	(SF_PRIVATE *psf, int calc_length) ;
-
-static int	wav_write_tailer (SF_PRIVATE *psf) ;
-static void wav_write_strings (SF_PRIVATE *psf, int location) ;
-static int	wav_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int	wav_close (SF_PRIVATE *psf) ;
-
-static int 	wav_subchunk_parse	(SF_PRIVATE *psf, int chunk, uint32_t length) ;
-static int 	exif_subchunk_parse	(SF_PRIVATE *psf, uint32_t length) ;
-static int	wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen) ;
-static int	wav_read_acid_chunk (SF_PRIVATE *psf, uint32_t chunklen) ;
-
-static int wav_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * wav_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int wav_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int wav_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-wav_open	(SF_PRIVATE *psf)
-{	WAV_PRIVATE * wpriv ;
-	int	format, subformat, error, blockalign = 0, framesperblock = 0 ;
-
-	if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-	psf->container_data = wpriv ;
-
-	wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-	psf->strings.flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = wav_read_header (psf, &blockalign, &framesperblock)))
-			return error ;
-
-		psf->next_chunk_iterator = wav_next_chunk_iterator ;
-		psf->get_chunk_size = wav_get_chunk_size ;
-		psf->get_chunk_data = wav_get_chunk_data ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if (psf->is_pipe)
-			return SFE_NO_PIPE_WRITE ;
-
-		wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-
-		format = SF_CONTAINER (psf->sf.format) ;
-		if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-		/* RIFF WAVs are little-endian, RIFX WAVs are big-endian, default to little */
-		psf->endian = SF_ENDIAN (psf->sf.format) ;
-		if (CPU_IS_BIG_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-			psf->endian = SF_ENDIAN_BIG ;
-		else if (psf->endian != SF_ENDIAN_BIG)
-			psf->endian = SF_ENDIAN_LITTLE ;
-
-		if (psf->file.mode != SFM_RDWR || psf->filelength < 44)
-		{	psf->filelength = 0 ;
-			psf->datalength = 0 ;
-			psf->dataoffset = 0 ;
-			psf->sf.frames = 0 ;
-			} ;
-
-		if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM)
-		{	blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-			framesperblock = -1 ; /* Corrected later. */
-			} ;
-
-		/* By default, add the peak chunk to floating point files. Default behaviour
-		** can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE).
-		*/
-		if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-		{	if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-				return SFE_MALLOC_FAILED ;
-			psf->peak_info->peak_loc = SF_PEAK_START ;
-			} ;
-
-		psf->write_header	= wav_write_header ;
-		psf->set_chunk		= wav_set_chunk ;
-		} ;
-
-	psf->container_close = wav_close ;
-	psf->command = wav_command ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-					error = pcm_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					error = ulaw_init (psf) ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					error = alaw_init (psf) ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_FLOAT :
-					error = float32_init (psf) ;
-					break ;
-
-		case SF_FORMAT_DOUBLE :
-					error = double64_init (psf) ;
-					break ;
-
-		case SF_FORMAT_IMA_ADPCM :
-					error = wav_w64_ima_init (psf, blockalign, framesperblock) ;
-					break ;
-
-		case SF_FORMAT_MS_ADPCM :
-					error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ;
-					break ;
-
-		case SF_FORMAT_G721_32 :
-					error = g72x_init (psf) ;
-					break ;
-		/* Lite remove end */
-
-		case SF_FORMAT_GSM610 :
-					error = gsm610_init (psf) ;
-					break ;
-
-		default : 	return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->filelength == 0))
-		return psf->write_header (psf, SF_FALSE) ;
-
-	return error ;
-} /* wav_open */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-wav_read_header	(SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{	WAV_PRIVATE	*wpriv ;
-	WAV_FMT		*wav_fmt ;
-	FACT_CHUNK	fact_chunk ;
-	uint32_t	marker, chunk_size = 0, RIFFsize = 0, done = 0, uk ;
-	int			parsestage = 0, error, format = 0 ;
-	char		buffer [256] ;
-
-	if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-		psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-	wav_fmt = &wpriv->wav_fmt ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pmj", 0, &marker, -4) ;
-	psf->headindex = 0 ;
-
-	/* RIFX signifies big-endian format for all header and data  to prevent
-	** lots of code copying here, we'll set the psf->rwf_endian flag once here,
-	** and never specify endian-ness for all other header ops/
-	*/
-	psf->rwf_endian = (marker == RIFF_MARKER) ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-	while (! done)
-	{	size_t jump = chunk_size & 1 ;
-
-		marker = chunk_size = 0 ;
-		psf_binheader_readf (psf, "jm4", jump, &marker, &chunk_size) ;
-		if (marker == 0)
-		{	psf_log_printf (psf, "Have 0 marker.\n") ;
-			break ;
-			} ;
-
-		psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-		switch (marker)
-		{	case RIFF_MARKER :
-			case RIFX_MARKER :
-					if (parsestage)
-						return SFE_WAV_NO_RIFF ;
-
-					parsestage |= HAVE_RIFF ;
-
-					RIFFsize = chunk_size ;
-
-					if (psf->fileoffset > 0 && psf->filelength > RIFFsize + 8)
-					{	/* Set file length. */
-						psf->filelength = RIFFsize + 8 ;
-						if (marker == RIFF_MARKER)
-							psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ;
-						else
-							psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ;
-						}
-					else if (psf->filelength < RIFFsize + 2 * SIGNED_SIZEOF (marker))
-					{	if (marker == RIFF_MARKER)
-							psf_log_printf (psf, "RIFF : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (marker)) ;
-						else
-							psf_log_printf (psf, "RIFX : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (marker)) ;
-
-						RIFFsize = psf->filelength - 2 * SIGNED_SIZEOF (RIFFsize) ;
-						}
-					else
-					{	if (marker == RIFF_MARKER)
-							psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ;
-						else
-							psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ;
-					} ;
-
-					psf_binheader_readf (psf, "m", &marker) ;
-					if (marker != WAVE_MARKER)
-						return SFE_WAV_NO_WAVE ;
-					parsestage |= HAVE_WAVE ;
-					psf_log_printf (psf, "WAVE\n") ;
-					chunk_size = 0 ;
-					break ;
-
-			case fmt_MARKER :
-					if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE))
-						return SFE_WAV_NO_FMT ;
-
-					/* If this file has a SECOND fmt chunk, I don't want to know about it. */
-					if (parsestage & HAVE_fmt)
-						break ;
-
-					parsestage |= HAVE_fmt ;
-
-					psf_log_printf (psf, "fmt  : %d\n", chunk_size) ;
-
-					if ((error = wav_w64_read_fmt_chunk (psf, chunk_size)))
-						return error ;
-
-					format = wav_fmt->format ;
-					break ;
-
-			case data_MARKER :
-					if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
-						return SFE_WAV_NO_DATA ;
-
-					if (psf->file.mode == SFM_RDWR && (parsestage & HAVE_other) != 0)
-						return SFE_RDWR_BAD_HEADER ;
-
-					parsestage |= HAVE_data ;
-
-					psf->datalength = chunk_size ;
-					psf->dataoffset = psf_ftell (psf) ;
-
-					if (psf->dataoffset > 0)
-					{	if (chunk_size == 0 && RIFFsize == 8 && psf->filelength > 44)
-						{	psf_log_printf (psf, "*** Looks like a WAV file which wasn't closed properly. Fixing it.\n") ;
-							psf->datalength = psf->filelength - psf->dataoffset ;
-							} ;
-
-						if (psf->datalength > psf->filelength - psf->dataoffset)
-						{	psf_log_printf (psf, "data : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
-							psf->datalength = psf->filelength - psf->dataoffset ;
-							}
-						else
-							psf_log_printf (psf, "data : %D\n", psf->datalength) ;
-
-						/* Only set dataend if there really is data at the end. */
-						if (psf->datalength + psf->dataoffset < psf->filelength)
-							psf->dataend = psf->datalength + psf->dataoffset ;
-
-						psf->datalength += chunk_size & 1 ;
-						chunk_size = 0 ;
-						} ;
-
-					if (! psf->sf.seekable || psf->dataoffset < 0)
-						break ;
-
-					/* Seek past data and continue reading header. */
-					psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-
-					if (psf_ftell (psf) != psf->datalength + psf->dataoffset)
-						psf_log_printf (psf, "*** psf_fseek past end error ***\n") ;
-					break ;
-
-			case fact_MARKER :
-					if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE))
-						return SFE_WAV_BAD_FACT ;
-
-					parsestage |= HAVE_fact ;
-
-					if ((parsestage & HAVE_fmt) != HAVE_fmt)
-						psf_log_printf (psf, "*** Should have 'fmt ' chunk before 'fact'\n") ;
-
-					psf_binheader_readf (psf, "4", & (fact_chunk.frames)) ;
-
-					if (chunk_size > SIGNED_SIZEOF (fact_chunk))
-						psf_binheader_readf (psf, "j", (int) (chunk_size - SIGNED_SIZEOF (fact_chunk))) ;
-
-					if (chunk_size)
-						psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-					else
-						psf_log_printf (psf, "%M : %d (should not be zero)\n", marker, chunk_size) ;
-
-					psf_log_printf (psf, "  frames  : %d\n", fact_chunk.frames) ;
-					break ;
-
-			case PEAK_MARKER :
-					if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
-						return SFE_WAV_PEAK_B4_FMT ;
-
-					parsestage |= HAVE_PEAK ;
-
-					psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-					if (chunk_size != WAV_PEAK_CHUNK_SIZE (psf->sf.channels))
-					{	psf_binheader_readf (psf, "j", chunk_size) ;
-						psf_log_printf (psf, "*** File PEAK chunk size doesn't fit with number of channels (%d).\n", psf->sf.channels) ;
-						return SFE_WAV_BAD_PEAK ;
-						} ;
-
-					if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-						return SFE_MALLOC_FAILED ;
-
-					/* read in rest of PEAK chunk. */
-					psf_binheader_readf (psf, "44", & (psf->peak_info->version), & (psf->peak_info->timestamp)) ;
-
-					if (psf->peak_info->version != 1)
-						psf_log_printf (psf, "  version    : %d *** (should be version 1)\n", psf->peak_info->version) ;
-					else
-						psf_log_printf (psf, "  version    : %d\n", psf->peak_info->version) ;
-
-					psf_log_printf (psf, "  time stamp : %d\n", psf->peak_info->timestamp) ;
-					psf_log_printf (psf, "    Ch   Position       Value\n") ;
-
-					for (uk = 0 ; uk < (uint32_t) psf->sf.channels ; uk++)
-					{	float value ;
-						uint32_t position ;
-
-						psf_binheader_readf (psf, "f4", &value, &position) ;
-						psf->peak_info->peaks [uk].value = value ;
-						psf->peak_info->peaks [uk].position = position ;
-
-						snprintf (buffer, sizeof (buffer), "    %2d   %-12" PRId64 "   %g\n",
-								uk, psf->peak_info->peaks [uk].position, psf->peak_info->peaks [uk].value) ;
-						buffer [sizeof (buffer) - 1] = 0 ;
-						psf_log_printf (psf, "%s", buffer) ;
-						} ;
-
-					psf->peak_info->peak_loc = ((parsestage & HAVE_data) == 0) ? SF_PEAK_START : SF_PEAK_END ;
-					break ;
-
-			case cue_MARKER :
-					parsestage |= HAVE_other ;
-
-					{	uint32_t bytesread, cue_count ;
-						int id, position, chunk_id, chunk_start, block_start, offset ;
-
-						bytesread = psf_binheader_readf (psf, "4", &cue_count) ;
-						psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-
-						if (cue_count > 10)
-						{	psf_log_printf (psf, "  Count : %d (skipping)\n", cue_count) ;
-							psf_binheader_readf (psf, "j", cue_count * 24) ;
-							break ;
-							} ;
-
-						psf_log_printf (psf, "  Count : %d\n", cue_count) ;
-
-						while (cue_count)
-						{	bytesread += psf_binheader_readf (psf, "444444", &id, &position,
-									&chunk_id, &chunk_start, &block_start, &offset) ;
-							psf_log_printf (psf,	"   Cue ID : %2d"
-													"  Pos : %5u  Chunk : %M"
-													"  Chk Start : %d  Blk Start : %d"
-													"  Offset : %5d\n",
-									id, position, chunk_id, chunk_start, block_start, offset) ;
-							cue_count -- ;
-							} ;
-
-						if (bytesread != chunk_size)
-						{	psf_log_printf (psf, "**** Chunk size weirdness (%d != %d)\n", chunk_size, bytesread) ;
-							psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-							} ;
-						} ;
-					break ;
-
-			case smpl_MARKER :
-					parsestage |= HAVE_other ;
-
-					psf_log_printf (psf, "smpl : %u\n", chunk_size) ;
-
-					if ((error = wav_read_smpl_chunk (psf, chunk_size)))
-						return error ;
-					break ;
-
-			case acid_MARKER :
-					parsestage |= HAVE_other ;
-
-					psf_log_printf (psf, "acid : %u\n", chunk_size) ;
-
-					if ((error = wav_read_acid_chunk (psf, chunk_size)))
-						return error ;
-					break ;
-
-			case INFO_MARKER :
-			case LIST_MARKER :
-					parsestage |= HAVE_other ;
-
-					if ((error = wav_subchunk_parse (psf, marker, chunk_size)) != 0)
-						return error ;
-					break ;
-
-			case bext_MARKER :
-					/*
-					The 'bext' chunk can actually be updated, so don't need to set this.
-					parsestage |= HAVE_other ;
-					*/
-					if ((error = wav_read_bext_chunk (psf, chunk_size)))
-						return error ;
-					break ;
-
-			case PAD_MARKER :
-					/*
-					We can eat into a 'PAD ' chunk if we need to.
-					parsestage |= HAVE_other ;
-					*/
-					psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-					psf_binheader_readf (psf, "j", chunk_size) ;
-					break ;
-
-			case cart_MARKER:
-					if ((error = wav_read_cart_chunk (psf, chunk_size)))
-						return error ;
-					break ;
-
-			case iXML_MARKER : /* See http://en.wikipedia.org/wiki/IXML */
-			case strc_MARKER : /* Multiple of 32 bytes. */
-			case afsp_MARKER :
-			case clm_MARKER :
-			case elmo_MARKER :
-			case levl_MARKER :
-			case plst_MARKER :
-			case minf_MARKER :
-			case elm1_MARKER :
-			case regn_MARKER :
-			case ovwf_MARKER :
-			case inst_MARKER :
-			case AFAn_MARKER :
-			case umid_MARKER :
-			case SyLp_MARKER :
-			case Cr8r_MARKER :
-			case JUNK_MARKER :
-			case PMX_MARKER :
-			case DISP_MARKER :
-			case MEXT_MARKER :
-			case FLLR_MARKER :
-					psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-					psf_binheader_readf (psf, "j", chunk_size) ;
-					break ;
-
-			default :
-					if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-						&& psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-					{	psf_log_printf (psf, "*** %M : %d (unknown marker)\n", marker, chunk_size) ;
-						psf_binheader_readf (psf, "j", chunk_size) ;
-						break ;
-						} ;
-					if (psf_ftell (psf) & 0x03)
-					{	psf_log_printf (psf, "  Unknown chunk marker at position %D. Resynching.\n", psf_ftell (psf) - 8) ;
-						psf_binheader_readf (psf, "j", -3) ;
-						/* File is too messed up so we prevent editing in RDWR mode here. */
-						parsestage |= HAVE_other ;
-						break ;
-						} ;
-					psf_log_printf (psf, "*** Unknown chunk marker (%X) at position %D. Exiting parser.\n", marker, psf_ftell (psf) - 8) ;
-					done = SF_TRUE ;
-					break ;
-			} ;	/* switch (marker) */
-
-		if (! psf->sf.seekable && (parsestage & HAVE_data))
-			break ;
-
-		if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (chunk_size))
-		{	psf_log_printf (psf, "End\n") ;
-			break ;
-			} ;
-		} ; /* while (1) */
-
-	if (psf->dataoffset <= 0)
-		return SFE_WAV_NO_DATA ;
-
-	/* WAVs can be little or big endian */
-	psf->endian = psf->rwf_endian ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (psf->is_pipe == 0)
-	{	/*
-		** Check for 'wvpk' at the start of the DATA section. Not able to
-		** handle this.
-		*/
-		psf_binheader_readf (psf, "4", &marker) ;
-		if (marker == wvpk_MARKER || marker == OggS_MARKER)
-			return SFE_WAV_WVPK_DATA ;
-		} ;
-
-	/* Seek to start of DATA section. */
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (psf->blockwidth)
-	{	if (psf->filelength - psf->dataoffset < psf->datalength)
-			psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-		else
-			psf->sf.frames = psf->datalength / psf->blockwidth ;
-		} ;
-
-	switch (format)
-	{	case WAVE_FORMAT_EXTENSIBLE :
-			if (psf->sf.format == (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM))
-			{	*blockalign = wav_fmt->msadpcm.blockalign ;
-				*framesperblock = wav_fmt->msadpcm.samplesperblock ;
-				} ;
-			break ;
-
-		case WAVE_FORMAT_PCM :
-					psf->sf.format = SF_FORMAT_WAV | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-					break ;
-
-		case WAVE_FORMAT_MULAW :
-		case IBM_FORMAT_MULAW :
-					psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ;
-					break ;
-
-		case WAVE_FORMAT_ALAW :
-		case IBM_FORMAT_ALAW :
-					psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ;
-					break ;
-
-		case WAVE_FORMAT_MS_ADPCM :
-					psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
-					*blockalign = wav_fmt->msadpcm.blockalign ;
-					*framesperblock = wav_fmt->msadpcm.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_IMA_ADPCM :
-					psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
-					*blockalign = wav_fmt->ima.blockalign ;
-					*framesperblock = wav_fmt->ima.samplesperblock ;
-					break ;
-
-		case WAVE_FORMAT_GSM610 :
-					psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
-					break ;
-
-		case WAVE_FORMAT_IEEE_FLOAT :
-					psf->sf.format = SF_FORMAT_WAV ;
-					psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-					break ;
-
-		case WAVE_FORMAT_G721_ADPCM :
-					psf->sf.format = SF_FORMAT_WAV | SF_FORMAT_G721_32 ;
-					break ;
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (wpriv->fmt_is_broken)
-		wav_w64_analyze (psf) ;
-
-	/* Only set the format endian-ness if its non-standard big-endian. */
-	if (psf->endian == SF_ENDIAN_BIG)
-		psf->sf.format |= SF_ENDIAN_BIG ;
-
-	return 0 ;
-} /* wav_read_header */
-
-static int
-wav_write_fmt_chunk (SF_PRIVATE *psf)
-{	int subformat, fmt_size, add_fact_chunk = 0 ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-					fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-					break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-					fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth */
-					psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_ULAW :
-					fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth, extrabytes */
-					psf_binheader_writef (psf, "222", psf->bytewidth * psf->sf.channels, 8, 0) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_ALAW :
-					fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 ;
-
-					/* fmt : format, channels, samplerate */
-					psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ;
-					/*  fmt : bytespersec */
-					psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-					/*  fmt : blockalign, bitwidth, extrabytes */
-					psf_binheader_writef (psf, "222", psf->bytewidth * psf->sf.channels, 8, 0) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		/* Lite remove start */
-		case SF_FORMAT_IMA_ADPCM :
-					{	int blockalign, framesperblock, bytespersec ;
-
-						blockalign		= wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-						framesperblock	= 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-						bytespersec		= (psf->sf.samplerate * blockalign) / framesperblock ;
-
-						/* fmt chunk. */
-						fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-						/* fmt : size, WAV format type, channels, samplerate, bytespersec */
-						psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_IMA_ADPCM,
-									psf->sf.channels, psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "2222", blockalign, 4, 2, framesperblock) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		case SF_FORMAT_MS_ADPCM :
-					{	int	blockalign, framesperblock, bytespersec, extrabytes ;
-
-						blockalign		= wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-						framesperblock	= 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-						bytespersec		= (psf->sf.samplerate * blockalign) / framesperblock ;
-
-						/* fmt chunk. */
-						extrabytes	= 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ;
-						fmt_size	= 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
-
-						/* fmt : size, WAV format type, channels. */
-						psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ;
-
-						/* fmt : samplerate, bytespersec. */
-						psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "22222", blockalign, 4, extrabytes, framesperblock, 7) ;
-
-						msadpcm_write_adapt_coeffs (psf) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-
-		case SF_FORMAT_G721_32 :
-					/* fmt chunk. */
-					fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-					/* fmt : size, WAV format type, channels, samplerate, bytespersec */
-					psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_G721_ADPCM,
-								psf->sf.channels, psf->sf.samplerate, psf->sf.samplerate * psf->sf.channels / 2) ;
-
-					/* fmt : blockalign, bitwidth, extrabytes, auxblocksize. */
-					psf_binheader_writef (psf, "2222", 64, 4, 2, 0) ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		/* Lite remove end */
-
-		case SF_FORMAT_GSM610 :
-					{	int	blockalign, framesperblock, bytespersec ;
-
-						blockalign		= WAV_W64_GSM610_BLOCKSIZE ;
-						framesperblock	= WAV_W64_GSM610_SAMPLES ;
-						bytespersec		= (psf->sf.samplerate * blockalign) / framesperblock ;
-
-						/* fmt chunk. */
-						fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-						/* fmt : size, WAV format type, channels. */
-						psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
-
-						/* fmt : samplerate, bytespersec. */
-						psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ;
-
-						/* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-						psf_binheader_writef (psf, "2222", blockalign, 0, 2, framesperblock) ;
-						} ;
-
-					add_fact_chunk = SF_TRUE ;
-					break ;
-
-		default : 	return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (add_fact_chunk)
-		psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ;
-
-	return 0 ;
-} /* wav_write_fmt_chunk */
-
-static int
-wavex_write_fmt_chunk (SF_PRIVATE *psf)
-{	WAV_PRIVATE	*wpriv ;
-	int subformat, fmt_size, add_fact_chunk = 0 ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	/* initial section (same for all, it appears) */
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-		case SF_FORMAT_ULAW :
-		case SF_FORMAT_ALAW :
-			fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2 + 2 + 8 ;
-
-			/* fmt : format, channels, samplerate */
-			psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_EXTENSIBLE, psf->sf.channels, psf->sf.samplerate) ;
-			/*  fmt : bytespersec */
-			psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-			/*  fmt : blockalign, bitwidth */
-			psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-			/* cbSize 22 is sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) */
-			psf_binheader_writef (psf, "2", 22) ;
-
-			/* wValidBitsPerSample, for our use same as bitwidth as we use it fully */
-			psf_binheader_writef (psf, "2", psf->bytewidth * 8) ;
-
-			/* For an Ambisonic file set the channel mask to zero.
-			** Otherwise use a default based on the channel count.
-			*/
-			if (wpriv->wavex_ambisonic != SF_AMBISONIC_NONE)
-				psf_binheader_writef (psf, "4", 0) ;
-			else if (wpriv->wavex_channelmask != 0)
-				psf_binheader_writef (psf, "4", wpriv->wavex_channelmask) ;
-			else
-			{	/*
-				** Ok some liberty is taken here to use the most commonly used channel masks
-				** instead of "no mapping". If you really want to use "no mapping" for 8 channels and less
-				** please don't use wavex. (otherwise we'll have to create a new SF_COMMAND)
-				*/
-				switch (psf->sf.channels)
-				{	case 1 :	/* center channel mono */
-						psf_binheader_writef (psf, "4", 0x4) ;
-						break ;
-
-					case 2 :	/* front left and right */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2) ;
-						break ;
-
-					case 4 :	/* Quad */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x10 | 0x20) ;
-						break ;
-
-					case 6 :	/* 5.1 */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) ;
-						break ;
-
-					case 8 :	/* 7.1 */
-						psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80) ;
-						break ;
-
-					default :	/* 0 when in doubt , use direct out, ie NO mapping*/
-						psf_binheader_writef (psf, "4", 0x0) ;
-						break ;
-					} ;
-				} ;
-			break ;
-
-		case SF_FORMAT_MS_ADPCM : /* Todo, GUID exists might have different header as per wav_write_header */
-		default :
-			return SFE_UNIMPLEMENTED ;
-		} ;
-
-	/* GUID section, different for each */
-
-	switch (subformat)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-			wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-						&MSGUID_SUBTYPE_PCM : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM) ;
-			break ;
-
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-						&MSGUID_SUBTYPE_IEEE_FLOAT : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT) ;
-			add_fact_chunk = SF_TRUE ;
-			break ;
-
-		case SF_FORMAT_ULAW :
-			wavex_write_guid (psf, &MSGUID_SUBTYPE_MULAW) ;
-			add_fact_chunk = SF_TRUE ;
-			break ;
-
-		case SF_FORMAT_ALAW :
-			wavex_write_guid (psf, &MSGUID_SUBTYPE_ALAW) ;
-			add_fact_chunk = SF_TRUE ;
-			break ;
-
-#if 0
-		/* This is dead code due to return in previous switch statement. */
-		case SF_FORMAT_MS_ADPCM : /* todo, GUID exists */
-			wavex_write_guid (psf, &MSGUID_SUBTYPE_MS_ADPCM) ;
-			add_fact_chunk = SF_TRUE ;
-			break ;
-			return SFE_UNIMPLEMENTED ;
-#endif
-
-		default : return SFE_UNIMPLEMENTED ;
-		} ;
-
-	if (add_fact_chunk)
-		psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ;
-
-	return 0 ;
-} /* wavex_write_fmt_chunk */
-
-
-static int
-wav_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	uint32_t	uk ;
-	int 		k, error, has_data = SF_FALSE ;
-
-	current = psf_ftell (psf) ;
-
-	if (current > psf->dataoffset)
-		has_data = SF_TRUE ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-		else if (psf->bytewidth > 0 && psf->sf.seekable == SF_TRUE)
-			psf->datalength = psf->sf.frames * psf->bytewidth * psf->sf.channels ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/*
-	** RIFX signifies big-endian format for all header and data.
-	** To prevent lots of code copying here, we'll set the psf->rwf_endian flag
-	** once here, and never specify endian-ness for all other header operations.
-	*/
-
-	/* RIFF/RIFX marker, length, WAVE and 'fmt ' markers. */
-
-	if (psf->endian == SF_ENDIAN_LITTLE)
-		psf_binheader_writef (psf, "etm8", RIFF_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ;
-	else
-		psf_binheader_writef (psf, "Etm8", RIFX_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ;
-
-	/* WAVE and 'fmt ' markers. */
-	psf_binheader_writef (psf, "mm", WAVE_MARKER, fmt_MARKER) ;
-
-	/* Write the 'fmt ' chunk. */
-	switch (SF_CONTAINER (psf->sf.format))
-	{	case SF_FORMAT_WAV :
-				if ((error = wav_write_fmt_chunk (psf)) != 0)
-					return error ;
-				break ;
-
-		case SF_FORMAT_WAVEX :
-				if ((error = wavex_write_fmt_chunk (psf)) != 0)
-					return error ;
-				break ;
-
-		default :
-				return SFE_UNIMPLEMENTED ;
-		} ;
-
-	/* The LIST/INFO chunk. */
-	if (psf->strings.flags & SF_STR_LOCATE_START)
-		wav_write_strings (psf, SF_STR_LOCATE_START) ;
-
-	if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-	{	psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-	if (psf->broadcast_16k != NULL)
-		wav_write_bext_chunk (psf) ;
-
-	if (psf->cart_16k != NULL)
-		wav_write_cart_chunk (psf) ;
-
-	if (psf->instrument != NULL)
-	{	int		tmp ;
-		double	dtune = (double) (0x40000000) / 25.0 ;
-
-		psf_binheader_writef (psf, "m4", smpl_MARKER, 9 * 4 + psf->instrument->loop_count * 6 * 4) ;
-		psf_binheader_writef (psf, "44", 0, 0) ; /* Manufacturer zero is everyone */
-		tmp = (int) (1.0e9 / psf->sf.samplerate) ; /* Sample period in nano seconds */
-		psf_binheader_writef (psf, "44", tmp, psf->instrument->basenote) ;
-		tmp = (uint32_t) (psf->instrument->detune * dtune + 0.5) ;
-		psf_binheader_writef (psf, "4", tmp) ;
-		psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
-		psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-		for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
-		{	int type ;
-
-			type = psf->instrument->loops [tmp].mode ;
-			type = (type == SF_LOOP_FORWARD ? 0 : type == SF_LOOP_BACKWARD ? 2 : type == SF_LOOP_ALTERNATING ? 1 : 32) ;
-
-			psf_binheader_writef (psf, "44", tmp, type) ;
-			psf_binheader_writef (psf, "44", psf->instrument->loops [tmp].start, psf->instrument->loops [tmp].end - 1) ;
-			psf_binheader_writef (psf, "44", 0, psf->instrument->loops [tmp].count) ;
-			} ;
-		} ;
-
-	/* Write custom headers. */
-	for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-		psf_binheader_writef (psf, "m4b", (int) psf->wchunks.chunks [uk].mark32, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-	if (psf->headindex + 16 < psf->dataoffset)
-	{	/* Add PAD data if necessary. */
-		k = psf->dataoffset - (psf->headindex + 16) ;
-		psf_binheader_writef (psf, "m4z", PAD_MARKER, k, make_size_t (k)) ;
-		} ;
-
-	psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ;
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-	if (psf->error)
-		return psf->error ;
-
-	if (has_data && psf->dataoffset != psf->headindex)
-	{	psf_log_printf (psf, "Oooops : has_data && psf->dataoffset != psf->headindex\n") ;
-		return psf->error = SFE_INTERNAL ;
-		} ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (! has_data)
-		psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-	else if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* wav_write_header */
-
-
-static int
-wav_write_tailer (SF_PRIVATE *psf)
-{	int		k ;
-
-	/* Reset the current header buffer length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-
-	if (psf->bytewidth > 0 && psf->sf.seekable == SF_TRUE)
-	{	psf->datalength = psf->sf.frames * psf->bytewidth * psf->sf.channels ;
-		psf->dataend = psf->dataoffset + psf->datalength ;
-		} ;
-
-	if (psf->dataend > 0)
-		psf_fseek (psf, psf->dataend, SEEK_SET) ;
-	else
-		psf->dataend = psf_fseek (psf, 0, SEEK_END) ;
-
-	/* Add a PEAK chunk if requested. */
-	if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END)
-	{	psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-		psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-		for (k = 0 ; k < psf->sf.channels ; k++)
-			psf_binheader_writef (psf, "f4", psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-		} ;
-
-	if (psf->strings.flags & SF_STR_LOCATE_END)
-		wav_write_strings (psf, SF_STR_LOCATE_END) ;
-
-	/* Write the tailer. */
-	if (psf->headindex > 0)
-		psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	return 0 ;
-} /* wav_write_tailer */
-
-static void
-wav_write_strings (SF_PRIVATE *psf, int location)
-{	int	k, prev_head_index, saved_head_index ;
-
-	if (psf_location_string_count (psf, location) == 0)
-		return ;
-
-	prev_head_index = psf->headindex + 4 ;
-
-	psf_binheader_writef (psf, "m4m", LIST_MARKER, 0xBADBAD, INFO_MARKER) ;
-
-	for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-	{	if (psf->strings.data [k].type == 0)
-			break ;
-		if (psf->strings.data [k].type < 0 || psf->strings.data [k].flags != location)
-			continue ;
-
-		switch (psf->strings.data [k].type)
-		{	case SF_STR_SOFTWARE :
-				psf_binheader_writef (psf, "ms", ISFT_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_TITLE :
-				psf_binheader_writef (psf, "ms", INAM_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_COPYRIGHT :
-				psf_binheader_writef (psf, "ms", ICOP_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_ARTIST :
-				psf_binheader_writef (psf, "ms", IART_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_COMMENT :
-				psf_binheader_writef (psf, "ms", ICMT_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_DATE :
-				psf_binheader_writef (psf, "ms", ICRD_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_GENRE :
-				psf_binheader_writef (psf, "ms", IGNR_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_ALBUM :
-				psf_binheader_writef (psf, "ms", IPRD_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			case SF_STR_TRACKNUMBER :
-				psf_binheader_writef (psf, "ms", ITRK_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-				break ;
-
-			default :
-				break ;
-			} ;
-		} ;
-
-	saved_head_index = psf->headindex ;
-	psf->headindex = prev_head_index ;
-	psf_binheader_writef (psf, "4", saved_head_index - prev_head_index - 4) ;
-	psf->headindex = saved_head_index ;
-
-} /* wav_write_strings */
-
-static int
-wav_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	wav_write_tailer (psf) ;
-
-		if (psf->file.mode == SFM_RDWR)
-		{	sf_count_t current = psf_ftell (psf) ;
-
-			/*
-			**	If the mode is RDWR and the current position is less than the
-			**	filelength, truncate the file.
-			*/
-
-			if (current < psf->filelength)
-			{	psf_ftruncate (psf, current) ;
-				psf->filelength = current ;
-				} ;
-			} ;
-
-		psf->write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* wav_close */
-
-static int
-wav_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize)
-{	WAV_PRIVATE	*wpriv ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-
-	switch (command)
-	{	case SFC_WAVEX_SET_AMBISONIC :
-			if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAVEX)
-			{	if (datasize == SF_AMBISONIC_NONE)
-					wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-				else if (datasize == SF_AMBISONIC_B_FORMAT)
-					wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-				else
-					return 0 ;
-				} ;
-			return wpriv->wavex_ambisonic ;
-
-		case SFC_WAVEX_GET_AMBISONIC :
-			return wpriv->wavex_ambisonic ;
-
-		case SFC_SET_CHANNEL_MAP_INFO :
-			wpriv->wavex_channelmask = wavex_gen_channel_mask (psf->channel_map, psf->sf.channels) ;
-			return (wpriv->wavex_channelmask != 0) ;
-
-		default :
-			break ;
-	} ;
-
-	return 0 ;
-} /* wav_command */
-
-static int
-wav_subchunk_parse (SF_PRIVATE *psf, int chunk, uint32_t chunk_length)
-{	sf_count_t	current_pos ;
-	char		buffer [512] ;
-	uint32_t 	dword, bytesread ;
-
-	current_pos = psf_fseek (psf, 0, SEEK_CUR) - 4 ;
-
-	bytesread = sizeof (chunk_length) ;
-
-	if (chunk_length <= 8)
-	{	/* This case is for broken files generated by PEAK. */
-		psf_log_printf (psf, "%M : %d (weird length)\n", chunk, chunk_length) ;
-		psf_binheader_readf (psf, "mj", &chunk, chunk_length - 4) ;
-		psf_log_printf (psf, "  %M\n", chunk) ;
-		return 0 ;
-		} ;
-
-	if (psf->headindex + chunk_length > SIGNED_SIZEOF (psf->header))
-	{	psf_log_printf (psf, "%M : %d (too long)\n", chunk, chunk_length) ;
-		psf_binheader_readf (psf, "j", chunk_length) ;
-		return 0 ;
-		} ;
-
-	if (current_pos + chunk_length > psf->filelength)
-	{	psf_log_printf (psf, "%M : %d (should be %d)\n", chunk, chunk_length, (int) (psf->filelength - current_pos)) ;
-		chunk_length = psf->filelength - current_pos ;
-		}
-	else
-		psf_log_printf (psf, "%M : %d\n", chunk, chunk_length) ;
-
-	while (bytesread < chunk_length)
-	{	bytesread += psf_binheader_readf (psf, "m", &chunk) ;
-
-		switch (chunk)
-		{	case adtl_MARKER :
-			case INFO_MARKER :
-					/* These markers don't contain anything, not even a chunk lebgth. */
-					psf_log_printf (psf, "  %M\n", chunk) ;
-					continue ;
-
-			case exif_MARKER :
-					psf_log_printf (psf, "  %M\n", chunk) ;
-					bytesread += exif_subchunk_parse (psf, chunk_length - bytesread) ;
-					continue ;
-
-			case data_MARKER :
-					psf_log_printf (psf, "  %M inside a LIST block??? Backing out.\n", chunk) ;
-					/* Jump back four bytes and return to caller. */
-					psf_binheader_readf (psf, "j", -4) ;
-					return 0 ;
-
-			case 0 :
-					/*
-					**	Four zero bytes where a marker was expected. Assume this means
-					**	the rest of the chunk is garbage.
-					*/
-					psf_log_printf (psf, "    *** Found weird-ass zero marker. Jumping to end of chunk.\n") ;
-					if (bytesread < chunk_length)
-						bytesread += psf_binheader_readf (psf, "j", chunk_length - bytesread + 4) ;
-					psf_log_printf (psf, "    *** Offset is now : 0x%X\n", psf_fseek (psf, 0, SEEK_CUR)) ;
-					return 0 ;
-
-			default :
-					break ;
-			} ;
-
-		switch (chunk)
-		{	case ISFT_MARKER :
-			case ICOP_MARKER :
-			case IARL_MARKER :
-			case IART_MARKER :
-			case ICMT_MARKER :
-			case ICRD_MARKER :
-			case IENG_MARKER :
-			case IGNR_MARKER :
-			case INAM_MARKER :
-			case IPRD_MARKER :
-			case ISBJ_MARKER :
-			case ISRC_MARKER :
-			case IAUT_MARKER :
-			case ITRK_MARKER :
-					bytesread += psf_binheader_readf (psf, "4", &dword) ;
-					dword += (dword & 1) ;
-					if (dword >= SIGNED_SIZEOF (buffer))
-					{	psf_log_printf (psf, "  *** %M : %d (too big)\n", chunk, dword) ;
-						psf_binheader_readf (psf, "j", dword) ;
-						break ;
-						} ;
-
-					bytesread += psf_binheader_readf (psf, "b", buffer, dword) ;
-					buffer [dword] = 0 ;
-					psf_log_printf (psf, "    %M : %s\n", chunk, buffer) ;
-					break ;
-
-			case labl_MARKER :
-					{	int mark_id ;
-
-						bytesread += psf_binheader_readf (psf, "44", &dword, &mark_id) ;
-						dword -= 4 ;
-						dword += (dword & 1) ;
-						if (dword < 1 || dword >= SIGNED_SIZEOF (buffer))
-						{	psf_log_printf (psf, "  *** %M : %d (too big)\n", chunk, dword) ;
-							psf_binheader_readf (psf, "j", dword) ;
-							break ;
-							} ;
-
-						bytesread += psf_binheader_readf (psf, "b", buffer, dword) ;
-						buffer [dword] = 0 ;
-						psf_log_printf (psf, "    %M : %d : %s\n", chunk, mark_id, buffer) ;
-						} ;
-					break ;
-
-
-			case DISP_MARKER :
-			case ltxt_MARKER :
-			case note_MARKER :
-					bytesread += psf_binheader_readf (psf, "4", &dword) ;
-					dword += (dword & 1) ;
-					bytesread += psf_binheader_readf (psf, "j", dword) ;
-					psf_log_printf (psf, "    %M : %d\n", chunk, dword) ;
-					break ;
-
-			default :
-					bytesread += psf_binheader_readf (psf, "4", &dword) ;
-					dword += (dword & 1) ;
-					psf_log_printf (psf, "    *** %M : %d\n", chunk, dword) ;
-					if (bytesread + dword > chunk_length)
-					{	bytesread += psf_binheader_readf (psf, "j", chunk_length - bytesread + 4) ;
-						continue ;
-						}
-					else
-						bytesread += psf_binheader_readf (psf, "j", dword) ;
-
-					if (dword >= chunk_length)
-						return 0 ;
-					break ;
-			} ;
-
-		switch (chunk)
-		{	case ISFT_MARKER :
-					psf_store_string (psf, SF_STR_SOFTWARE, buffer) ;
-					break ;
-			case ICOP_MARKER :
-					psf_store_string (psf, SF_STR_COPYRIGHT, buffer) ;
-					break ;
-			case INAM_MARKER :
-					psf_store_string (psf, SF_STR_TITLE, buffer) ;
-					break ;
-			case IART_MARKER :
-					psf_store_string (psf, SF_STR_ARTIST, buffer) ;
-					break ;
-			case ICMT_MARKER :
-					psf_store_string (psf, SF_STR_COMMENT, buffer) ;
-					break ;
-			case ICRD_MARKER :
-					psf_store_string (psf, SF_STR_DATE, buffer) ;
-					break ;
-			case IGNR_MARKER :
-					psf_store_string (psf, SF_STR_GENRE, buffer) ;
-					break ;
-			case IPRD_MARKER :
-					psf_store_string (psf, SF_STR_ALBUM, buffer) ;
-					break ;
-			case ITRK_MARKER :
-					psf_store_string (psf, SF_STR_TRACKNUMBER, buffer) ;
-					break ;
-			} ;
-		} ;
-
-	current_pos = psf_fseek (psf, 0, SEEK_CUR) - current_pos ;
-
-	if (current_pos - 4 != chunk_length)
-		psf_log_printf (psf, "**** Bad chunk length %d sbould be %D\n", chunk_length, current_pos - 4) ;
-
-	return 0 ;
-} /* wav_subchunk_parse */
-
-static int
-wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen)
-{	char buffer [512] ;
-	uint32_t bytesread = 0, dword, sampler_data, loop_count ;
-	uint32_t note, start, end, type = -1, count ;
-	int j, k ;
-
-	chunklen += (chunklen & 1) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	psf_log_printf (psf, "  Manufacturer : %X\n", dword) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	psf_log_printf (psf, "  Product      : %u\n", dword) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	psf_log_printf (psf, "  Period       : %u nsec\n", dword) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &note) ;
-	psf_log_printf (psf, "  Midi Note    : %u\n", note) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	if (dword != 0)
-	{	snprintf (buffer, sizeof (buffer), "%f",
-					(1.0 * 0x80000000) / ((uint32_t) dword)) ;
-		psf_log_printf (psf, "  Pitch Fract. : %s\n", buffer) ;
-		}
-	else
-		psf_log_printf (psf, "  Pitch Fract. : 0\n") ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	psf_log_printf (psf, "  SMPTE Format : %u\n", dword) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-	snprintf (buffer, sizeof (buffer), "%02d:%02d:%02d %02d",
-				(dword >> 24) & 0x7F, (dword >> 16) & 0x7F, (dword >> 8) & 0x7F, dword & 0x7F) ;
-	psf_log_printf (psf, "  SMPTE Offset : %s\n", buffer) ;
-
-	bytesread += psf_binheader_readf (psf, "4", &loop_count) ;
-	psf_log_printf (psf, "  Loop Count   : %u\n", loop_count) ;
-
-	/* Sampler Data holds the number of data bytes after the CUE chunks which
-	** is not actually CUE data. Display value after CUE data.
-	*/
-	bytesread += psf_binheader_readf (psf, "4", &sampler_data) ;
-
-	if ((psf->instrument = psf_instrument_alloc ()) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->instrument->loop_count = loop_count ;
-
-	for (j = 0 ; loop_count > 0 && chunklen - bytesread >= 24 ; j ++)
-	{	bytesread += psf_binheader_readf (psf, "4", &dword) ;
-		psf_log_printf (psf, "    Cue ID : %2u", dword) ;
-
-		bytesread += psf_binheader_readf (psf, "4", &type) ;
-		psf_log_printf (psf, "  Type : %2u", type) ;
-
-		bytesread += psf_binheader_readf (psf, "4", &start) ;
-		psf_log_printf (psf, "  Start : %5u", start) ;
-
-		bytesread += psf_binheader_readf (psf, "4", &end) ;
-		psf_log_printf (psf, "  End : %5u", end) ;
-
-		bytesread += psf_binheader_readf (psf, "4", &dword) ;
-		psf_log_printf (psf, "  Fraction : %5u", dword) ;
-
-		bytesread += psf_binheader_readf (psf, "4", &count) ;
-		psf_log_printf (psf, "  Count : %5u\n", count) ;
-
-		if (j < ARRAY_LEN (psf->instrument->loops))
-		{	psf->instrument->loops [j].start = start ;
-			psf->instrument->loops [j].end = end + 1 ;
-			psf->instrument->loops [j].count = count ;
-
-			switch (type)
-			{	case 0 :
-					psf->instrument->loops [j].mode = SF_LOOP_FORWARD ;
-					break ;
-				case 1 :
-					psf->instrument->loops [j].mode = SF_LOOP_ALTERNATING ;
-					break ;
-				case 2 :
-					psf->instrument->loops [j].mode = SF_LOOP_BACKWARD ;
-					break ;
-				default:
-					psf->instrument->loops [j].mode = SF_LOOP_NONE ;
-					break ;
-				} ;
-			} ;
-
-		loop_count -- ;
-		} ;
-
-	if (chunklen - bytesread == 0)
-	{	if (sampler_data != 0)
-			psf_log_printf (psf, "  Sampler Data : %u (should be 0)\n", sampler_data) ;
-		else
-			psf_log_printf (psf, "  Sampler Data : %u\n", sampler_data) ;
-		}
-	else
-	{	if (sampler_data != chunklen - bytesread)
-		{	psf_log_printf (psf, "  Sampler Data : %u (should have been %u)\n", sampler_data, chunklen - bytesread) ;
-			sampler_data = chunklen - bytesread ;
-			}
-		else
-			psf_log_printf (psf, "  Sampler Data : %u\n", sampler_data) ;
-
-		psf_log_printf (psf, "      ") ;
-		for (k = 0 ; k < (int) sampler_data ; k++)
-		{	char ch ;
-
-			if (k > 0 && (k % 20) == 0)
-				psf_log_printf (psf, "\n      ") ;
-
-			bytesread += psf_binheader_readf (psf, "1", &ch) ;
-			psf_log_printf (psf, "%02X ", ch & 0xFF) ;
-			} ;
-
-		psf_log_printf (psf, "\n") ;
-		} ;
-
-	psf->instrument->basenote = note ;
-	psf->instrument->gain = 1 ;
-	psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ;
-	psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ;
-
-	return 0 ;
-} /* wav_read_smpl_chunk */
-
-/*
-** The acid chunk goes a little something like this:
-**
-** 4 bytes          'acid'
-** 4 bytes (int)     length of chunk starting at next byte
-**
-** 4 bytes (int)     type of file:
-**        this appears to be a bit mask,however some combinations
-**        are probably impossible and/or qualified as "errors"
-**
-**        0x01 On: One Shot         Off: Loop
-**        0x02 On: Root note is Set Off: No root
-**        0x04 On: Stretch is On,   Off: Strech is OFF
-**        0x08 On: Disk Based       Off: Ram based
-**        0x10 On: ??????????       Off: ????????? (Acidizer puts that ON)
-**
-** 2 bytes (short)      root note
-**        if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B]
-**        if type 0x10 is ON  : [C,C#,(...),B] -> [0x3C to 0x47]
-**         (both types fit on same MIDI pitch albeit different octaves, so who cares)
-**
-** 2 bytes (short)      ??? always set to 0x8000
-** 4 bytes (float)      ??? seems to be always 0
-** 4 bytes (int)        number of beats
-** 2 bytes (short)      meter denominator   //always 4 in SF/ACID
-** 2 bytes (short)      meter numerator     //always 4 in SF/ACID
-**                      //are we sure about the order?? usually its num/denom
-** 4 bytes (float)      tempo
-**
-*/
-
-static int
-wav_read_acid_chunk (SF_PRIVATE *psf, uint32_t chunklen)
-{	char buffer [512] ;
-	uint32_t bytesread = 0 ;
-	int	beats, flags ;
-	short rootnote, q1, meter_denom, meter_numer ;
-	float q2, tempo ;
-
-	chunklen += (chunklen & 1) ;
-
-	bytesread += psf_binheader_readf (psf, "422f", &flags, &rootnote, &q1, &q2) ;
-
-	snprintf (buffer, sizeof (buffer), "%f", q2) ;
-
-	psf_log_printf (psf, "  Flags     : 0x%04x (%s,%s,%s,%s,%s)\n", flags,
-			(flags & 0x01) ? "OneShot" : "Loop",
-			(flags & 0x02) ? "RootNoteValid" : "RootNoteInvalid",
-			(flags & 0x04) ? "StretchOn" : "StretchOff",
-			(flags & 0x08) ? "DiskBased" : "RAMBased",
-			(flags & 0x10) ? "??On" : "??Off") ;
-
-	psf_log_printf (psf, "  Root note : 0x%x\n  ????      : 0x%04x\n  ????      : %s\n",
-				rootnote, q1, buffer) ;
-
-	bytesread += psf_binheader_readf (psf, "422f", &beats, &meter_denom, &meter_numer, &tempo) ;
-	snprintf (buffer, sizeof (buffer), "%f", tempo) ;
-	psf_log_printf (psf, "  Beats     : %d\n  Meter     : %d/%d\n  Tempo     : %s\n",
-				beats, meter_numer, meter_denom, buffer) ;
-
-	psf_binheader_readf (psf, "j", chunklen - bytesread) ;
-
-	if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->loop_info->time_sig_num	= meter_numer ;
-	psf->loop_info->time_sig_den	= meter_denom ;
-	psf->loop_info->loop_mode		= (flags & 0x01) ? SF_LOOP_NONE : SF_LOOP_FORWARD ;
-	psf->loop_info->num_beats		= beats ;
-	psf->loop_info->bpm				= tempo ;
-	psf->loop_info->root_key		= (flags & 0x02) ? rootnote : -1 ;
-
-	return 0 ;
-} /* wav_read_acid_chunk */
-
-int
-wav_read_bext_chunk (SF_PRIVATE *psf, uint32_t chunksize)
-{
-	SF_BROADCAST_INFO_16K * b ;
-	uint32_t bytes = 0 ;
-
-	if (chunksize < WAV_BEXT_MIN_CHUNK_SIZE)
-	{	psf_log_printf (psf, "bext : %u (should be >= %d)\n", chunksize, WAV_BEXT_MIN_CHUNK_SIZE) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-
-	if (chunksize > WAV_BEXT_MAX_CHUNK_SIZE)
-	{	psf_log_printf (psf, "bext : %u (should be < %d)\n", chunksize, WAV_BEXT_MAX_CHUNK_SIZE) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-
-	if (chunksize >= sizeof (SF_BROADCAST_INFO_16K))
-	{	psf_log_printf (psf, "bext : %u too big to be handled\n", chunksize) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-
-	psf_log_printf (psf, "bext : %u\n", chunksize) ;
-
-	if ((psf->broadcast_16k = broadcast_var_alloc ()) == NULL)
-	{	psf->error = SFE_MALLOC_FAILED ;
-		return psf->error ;
-		} ;
-
-	b = psf->broadcast_16k ;
-
-	bytes += psf_binheader_readf (psf, "b", b->description, sizeof (b->description)) ;
-	bytes += psf_binheader_readf (psf, "b", b->originator, sizeof (b->originator)) ;
-	bytes += psf_binheader_readf (psf, "b", b->originator_reference, sizeof (b->originator_reference)) ;
-	bytes += psf_binheader_readf (psf, "b", b->origination_date, sizeof (b->origination_date)) ;
-	bytes += psf_binheader_readf (psf, "b", b->origination_time, sizeof (b->origination_time)) ;
-	bytes += psf_binheader_readf (psf, "442", &b->time_reference_low, &b->time_reference_high, &b->version) ;
-	bytes += psf_binheader_readf (psf, "bj", &b->umid, sizeof (b->umid), 190) ;
-
-	if (chunksize > WAV_BEXT_MIN_CHUNK_SIZE)
-	{	/* File has coding history data. */
-
-		b->coding_history_size = chunksize - WAV_BEXT_MIN_CHUNK_SIZE ;
-
-		/* We do not parse the coding history */
-		bytes += psf_binheader_readf (psf, "b", b->coding_history, b->coding_history_size) ;
-		} ;
-
-	if (bytes < chunksize)
-		psf_binheader_readf (psf, "j", chunksize - bytes) ;
-
-	return 0 ;
-} /* wav_read_bext_chunk */
-
-int
-wav_write_bext_chunk (SF_PRIVATE *psf)
-{	SF_BROADCAST_INFO_16K *b ;
-
-	if (psf->broadcast_16k == NULL)
-		return -1 ;
-
-	b = psf->broadcast_16k ;
-
-	psf_binheader_writef (psf, "m4", bext_MARKER, WAV_BEXT_MIN_CHUNK_SIZE + b->coding_history_size) ;
-
-	/*
-	**	Note that it is very important the the field widths of the SF_BROADCAST_INFO
-	**	struct match those for the bext chunk fields.
-	*/
-
-	psf_binheader_writef (psf, "b", b->description, sizeof (b->description)) ;
-	psf_binheader_writef (psf, "b", b->originator, sizeof (b->originator)) ;
-	psf_binheader_writef (psf, "b", b->originator_reference, sizeof (b->originator_reference)) ;
-	psf_binheader_writef (psf, "b", b->origination_date, sizeof (b->origination_date)) ;
-	psf_binheader_writef (psf, "b", b->origination_time, sizeof (b->origination_time)) ;
-	psf_binheader_writef (psf, "442", b->time_reference_low, b->time_reference_high, b->version) ;
-	psf_binheader_writef (psf, "b", b->umid, sizeof (b->umid)) ;
-	psf_binheader_writef (psf, "z", make_size_t (190)) ;
-
-	if (b->coding_history_size > 0)
-		psf_binheader_writef (psf, "b", b->coding_history, make_size_t (b->coding_history_size)) ;
-
-	return 0 ;
-} /* wav_write_bext_chunk */
-
-int
-wav_read_cart_chunk (SF_PRIVATE *psf, uint32_t chunksize)
-{	SF_CART_INFO_16K *c ;
-	uint32_t bytes = 0 ;
-	int k ;
-
-	if (chunksize < WAV_CART_MIN_CHUNK_SIZE)
-	{	psf_log_printf (psf, "cart : %u (should be >= %d)\n", chunksize, WAV_CART_MIN_CHUNK_SIZE) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-	if (chunksize > WAV_CART_MAX_CHUNK_SIZE)
-	{	psf_log_printf (psf, "cart : %u (should be < %d)\n", chunksize, WAV_CART_MAX_CHUNK_SIZE) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-
-	if (chunksize >= sizeof (SF_CART_INFO_16K))
-	{	psf_log_printf (psf, "cart : %u too big to be handled\n", chunksize) ;
-		psf_binheader_readf (psf, "j", chunksize) ;
-		return 0 ;
-		} ;
-
-	psf_log_printf (psf, "cart : %u\n", chunksize) ;
-
-	if ((psf->cart_16k = cart_var_alloc ()) == NULL)
-	{	psf->error = SFE_MALLOC_FAILED ;
-		return psf->error ;
-		} ;
-
-	c = psf->cart_16k ;
-	bytes += psf_binheader_readf (psf, "b", c->version, sizeof (c->version)) ;
-	bytes += psf_binheader_readf (psf, "b", c->title, sizeof (c->title)) ;
-	bytes += psf_binheader_readf (psf, "b", c->artist, sizeof (c->artist)) ;
-	bytes += psf_binheader_readf (psf, "b", c->cut_id, sizeof (c->cut_id)) ;
-	bytes += psf_binheader_readf (psf, "b", c->client_id, sizeof (c->client_id)) ;
-	bytes += psf_binheader_readf (psf, "b", c->category, sizeof (c->category)) ;
-	bytes += psf_binheader_readf (psf, "b", c->classification, sizeof (c->classification)) ;
-	bytes += psf_binheader_readf (psf, "b", c->out_cue, sizeof (c->out_cue)) ;
-	bytes += psf_binheader_readf (psf, "b", c->start_date, sizeof (c->start_date)) ;
-	bytes += psf_binheader_readf (psf, "b", c->start_time, sizeof (c->start_time)) ;
-	bytes += psf_binheader_readf (psf, "b", c->end_date, sizeof (c->end_date)) ;
-	bytes += psf_binheader_readf (psf, "b", c->end_time, sizeof (c->end_time)) ;
-	bytes += psf_binheader_readf (psf, "b", c->producer_app_id, sizeof (c->producer_app_id)) ;
-	bytes += psf_binheader_readf (psf, "b", c->producer_app_version, sizeof (c->producer_app_version)) ;
-	bytes += psf_binheader_readf (psf, "b", c->user_def, sizeof (c->user_def)) ;
-	bytes += psf_binheader_readf (psf, "e4", &c->level_reference, sizeof (c->level_reference)) ;
-
-	for (k = 0 ; k < ARRAY_LEN (c->post_timers) ; k++)
-		bytes += psf_binheader_readf (psf, "b4", &c->post_timers [k].usage, make_size_t (4), &c->post_timers [k].value) ;
-
-	bytes += psf_binheader_readf (psf, "b", c->reserved, sizeof (c->reserved)) ;
-	bytes += psf_binheader_readf (psf, "b", c->url, sizeof (c->url)) ;
-
-	if (chunksize > WAV_CART_MIN_CHUNK_SIZE)
-	{	/* File has tag text. */
-		c->tag_text_size = chunksize - WAV_CART_MIN_CHUNK_SIZE ;
-		bytes += psf_binheader_readf (psf, "b", c->tag_text, make_size_t (c->tag_text_size)) ;
-		} ;
-
-	return 0 ;
-} /* wav_read_cart_chunk */
-
-int
-wav_write_cart_chunk (SF_PRIVATE *psf)
-{	SF_CART_INFO_16K *c ;
-	int k ;
-
-	if (psf->cart_16k == NULL)
-		return -1 ;
-
-	c = psf->cart_16k ;
-	psf_binheader_writef (psf, "m4", cart_MARKER, WAV_CART_MIN_CHUNK_SIZE + c->tag_text_size) ;
-	/*
-	**	Note that it is very important the the field widths of the SF_CART_INFO
-	**	struct match those for the cart chunk fields.
-	*/
-	psf_binheader_writef (psf, "b", c->version, sizeof (c->version)) ;
-	psf_binheader_writef (psf, "b", c->title, sizeof (c->title)) ;
-	psf_binheader_writef (psf, "b", c->artist, sizeof (c->artist)) ;
-	psf_binheader_writef (psf, "b", c->cut_id, sizeof (c->cut_id)) ;
-	psf_binheader_writef (psf, "b", c->client_id, sizeof (c->client_id)) ;
-	psf_binheader_writef (psf, "b", c->category, sizeof (c->category)) ;
-	psf_binheader_writef (psf, "b", c->classification, sizeof (c->classification)) ;
-	psf_binheader_writef (psf, "b", c->out_cue, sizeof (c->out_cue)) ;
-	psf_binheader_writef (psf, "b", c->start_date, sizeof (c->start_date)) ;
-	psf_binheader_writef (psf, "b", c->start_time, sizeof (c->start_time)) ;
-	psf_binheader_writef (psf, "b", c->end_date, sizeof (c->end_date)) ;
-	psf_binheader_writef (psf, "b", c->end_time, sizeof (c->end_time)) ;
-	psf_binheader_writef (psf, "b", c->producer_app_id, sizeof (c->producer_app_id)) ;
-	psf_binheader_writef (psf, "b", c->producer_app_version, sizeof (c->producer_app_version)) ;
-	psf_binheader_writef (psf, "b", c->user_def, sizeof (c->user_def)) ;
-	psf_binheader_writef (psf, "4", c->level_reference, sizeof (c->level_reference)) ;
-
-	for (k = 0 ; k < ARRAY_LEN (c->post_timers) ; k++)
-		psf_binheader_writef (psf, "b4", c->post_timers [k].usage, make_size_t (4), c->post_timers [k].value) ;
-
-	psf_binheader_writef (psf, "z", sizeof (c->reserved)) ;	// just write zeros, we don't have any other use for it
-	psf_binheader_writef (psf, "b", c->url, sizeof (c->url)) ;
-
-	if (c->tag_text_size > 0)
-		psf_binheader_writef (psf, "b", c->tag_text, make_size_t (c->tag_text_size)) ;
-
-	return 0 ;
-} /* wav_write_cart_chunk */
-
-static int
-exif_fill_and_sink (SF_PRIVATE *psf, char* buf, size_t bufsz, size_t toread)
-{
-	size_t bytesread = 0 ;
-
-	buf [0] = 0 ;
-	bufsz -= 1 ;
-	if (toread < bufsz)
-		bufsz = toread ;
-	bytesread = psf_binheader_readf (psf, "b", buf, bufsz) ;
-	buf [bufsz] = 0 ;
-
-	if (bytesread == bufsz && toread > bufsz)
-		bytesread += psf_binheader_readf (psf, "j", toread - bufsz) ;
-
-	return bytesread ;
-} /* exif_fill_and_sink */
-
-/*
-** Exif specification for audio files, at JEITA CP-3451 Exif 2.2 section 5
-** (Exif Audio File Specification) http://www.exif.org/Exif2-2.PDF
-*/
-static int
-exif_subchunk_parse (SF_PRIVATE *psf, uint32_t length)
-{	uint32_t marker, dword, vmajor = -1, vminor = -1, bytesread = 0 ;
-	char buf [4096] ;
-
-	while (bytesread < length)
-	{
-		bytesread += psf_binheader_readf (psf, "m", &marker) ;
-
-		switch (marker)
-		{
-			case 0 : /* camera padding? */
-				break ;
-
-			case ever_MARKER :
-				bytesread += psf_binheader_readf (psf, "j4", 4, &dword) ;
-				vmajor = 10 * (((dword >> 24) & 0xff) - '0') + (((dword >> 16) & 0xff) - '0') ;
-				vminor = 10 * (((dword >> 8) & 0xff) - '0') + ((dword & 0xff) - '0') ;
-				psf_log_printf (psf, "    EXIF Version : %u.%02u\n", vmajor, vminor) ;
-				break ;
-
-			case olym_MARKER :
-				bytesread += psf_binheader_readf (psf, "4", &dword) ;
-				psf_log_printf (psf, "%M : %u\n", marker, dword) ;
-				dword += (dword & 1) ;
-				bytesread += psf_binheader_readf (psf, "j", dword) ;
-				break ;
-
-			case emnt_MARKER : /* design information: null-terminated string */
-			case emdl_MARKER : /* model name ; null-terminated string */
-			case ecor_MARKER : /* manufacturer: null-terminated string */
-			case etim_MARKER : /* creation time: null-terminated string in the format "hour:minute:second.subsecond" */
-			case erel_MARKER : /* relation info: null-terminated string (filename) */
-			case eucm_MARKER : /* user comment: 4-byte size follows, then possibly unicode data */
-				bytesread += psf_binheader_readf (psf, "4", &dword) ;
-				bytesread += sizeof (dword) ;
-				dword += (dword & 1) ;
-
-				if (dword >= sizeof (buf))
-				{	psf_log_printf (psf, "*** Marker '%M' is too big %u\n\n", marker, dword) ;
-					return bytesread ;
-					} ;
-
-				bytesread += exif_fill_and_sink (psf, buf, sizeof (buf), dword) ;
-
-				/* BAD - don't know what's going on here -- maybe a bug in the camera */
-				/* field should be NULL-terminated but there's no room for it with the reported number */
-				/*  example output:     emdl : 8 (EX-Z1050) */
-				if (marker == emdl_MARKER && dword == strlen (buf) /* should be >= strlen+1*/)
-				{	psf_log_printf (psf, "    *** field size too small for string (sinking 2 bytes)\n") ;
-					bytesread += psf_binheader_readf (psf, "j", 2) ;
-					} ;
-
-				psf_log_printf (psf, "    %M : %d (%s)\n", marker, dword, buf) ;
-				if (dword > length)
-					return bytesread ;
-				break ;
-
-			default :
-				psf_log_printf (psf, "    *** %M (%d): -- ignored --\n", marker, marker) ;
-				break ;
-			} ;
-		} ;
-
-	return bytesread ;
-} /* exif_subchunk_parse */
-
-/*==============================================================================
-*/
-
-static int
-wav_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{	return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* wav_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-wav_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{	return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* wav_next_chunk_iterator */
-
-static int
-wav_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	int indx ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-	return SFE_NO_ERROR ;
-} /* wav_get_chunk_size */
-
-static int
-wav_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{	int indx ;
-	sf_count_t pos ;
-
-	if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-		return SFE_UNKNOWN_CHUNK ;
-
-	if (chunk_info->data == NULL)
-		return SFE_BAD_CHUNK_DATA_PTR ;
-
-	chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-	memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-	pos = psf_ftell (psf) ;
-	psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-	psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-	psf_fseek (psf, pos, SEEK_SET) ;
-
-	return SFE_NO_ERROR ;
-} /* wav_get_chunk_data */
diff --git a/libs/libsndfile/src/wav_w64.c b/libs/libsndfile/src/wav_w64.c
deleted file mode 100644
index cf0d3ef2b1..0000000000
--- a/libs/libsndfile/src/wav_w64.c
+++ /dev/null
@@ -1,678 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004-2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<string.h>
-#include	<ctype.h>
-#include	<time.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-#include	"wav_w64.h"
-
-/*  Known WAVEFORMATEXTENSIBLE GUIDS.  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{	0x00000001, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{	0x00000002, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{	0x00000003, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{	0x00000006, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{	0x00000007, 0x0000, 0x0010, {	0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{	0x00000001, 0x0721, 0x11d3, {	0x86, 0x44, 0xc8, 0xc1, 0xca, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{	0x00000003, 0x0721, 0x11d3, {	0x86, 0x44, 0xc8, 0xc1, 0xca, 0x00, 0x00, 0x00 }
-} ;
-
-
-#if 0
-/* maybe interesting one day to read the following through sf_read_raw */
-/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX =
-{	0x8312b9c2, 0x2e6e, 0x11d4, {	0xa8, 0x24, 0xde, 0x5b, 0x96, 0xc3, 0xab, 0x21 }
-} ;
-#endif
-
-/* This stores which bit in dwChannelMask maps to which channel */
-static const struct chanmap_s
-{	int id ;
-	const char * name ;
-} channel_mask_bits [] =
-{	/* WAVEFORMATEXTENSIBLE doesn't distuingish FRONT_LEFT from LEFT */
-	{	SF_CHANNEL_MAP_LEFT, "L" },
-	{	SF_CHANNEL_MAP_RIGHT, "R" },
-	{	SF_CHANNEL_MAP_CENTER, "C" },
-	{	SF_CHANNEL_MAP_LFE, "LFE" },
-	{	SF_CHANNEL_MAP_REAR_LEFT, "Ls" },
-	{	SF_CHANNEL_MAP_REAR_RIGHT, "Rs" },
-	{	SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, "Lc" },
-	{	SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, "Rc" },
-	{	SF_CHANNEL_MAP_REAR_CENTER, "Cs" },
-	{	SF_CHANNEL_MAP_SIDE_LEFT, "Sl" },
-	{	SF_CHANNEL_MAP_SIDE_RIGHT, "Sr" },
-	{	SF_CHANNEL_MAP_TOP_CENTER, "Tc" },
-	{	SF_CHANNEL_MAP_TOP_FRONT_LEFT, "Tfl" },
-	{	SF_CHANNEL_MAP_TOP_FRONT_CENTER, "Tfc" },
-	{	SF_CHANNEL_MAP_TOP_FRONT_RIGHT, "Tfr" },
-	{	SF_CHANNEL_MAP_TOP_REAR_LEFT, "Trl" },
-	{	SF_CHANNEL_MAP_TOP_REAR_CENTER, "Trc" },
-	{	SF_CHANNEL_MAP_TOP_REAR_RIGHT, "Trr" },
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int
-wavex_guid_equal (const EXT_SUBFORMAT * first, const EXT_SUBFORMAT * second)
-{	return !memcmp (first, second, sizeof (EXT_SUBFORMAT)) ;
-} /* wavex_guid_equal */
-
-
-
-int
-wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize)
-{	WAV_PRIVATE * wpriv ;
-	WAV_FMT *wav_fmt ;
-	int	bytesread, k, bytespersec = 0 ;
-
-	if ((wpriv = psf->container_data) == NULL)
-		return SFE_INTERNAL ;
-	wav_fmt = &wpriv->wav_fmt ;
-
-	memset (wav_fmt, 0, sizeof (WAV_FMT)) ;
-
-	if (fmtsize < 16)
-		return SFE_WAV_FMT_SHORT ;
-
-	/* assume psf->rwf_endian is already properly set */
-
-	/* Read the minimal WAV file header here. */
-	bytesread = psf_binheader_readf (psf, "224422",
-					&(wav_fmt->format), &(wav_fmt->min.channels),
-					&(wav_fmt->min.samplerate), &(wav_fmt->min.bytespersec),
-					&(wav_fmt->min.blockalign), &(wav_fmt->min.bitwidth)) ;
-
-	psf_log_printf (psf, "  Format        : 0x%X => %s\n", wav_fmt->format, wav_w64_format_str (wav_fmt->format)) ;
-	psf_log_printf (psf, "  Channels      : %d\n", wav_fmt->min.channels) ;
-	psf_log_printf (psf, "  Sample Rate   : %d\n", wav_fmt->min.samplerate) ;
-
-	if (wav_fmt->format == WAVE_FORMAT_PCM && wav_fmt->min.blockalign == 0
-		&& wav_fmt->min.bitwidth > 0 && wav_fmt->min.channels > 0)
-	{	wav_fmt->min.blockalign = wav_fmt->min.bitwidth / 8 + (wav_fmt->min.bitwidth % 8 > 0 ? 1 : 0) ;
-		wav_fmt->min.blockalign *= wav_fmt->min.channels ;
-		psf_log_printf (psf, "  Block Align   : 0 (should be %d)\n", wav_fmt->min.blockalign) ;
-		}
-	else
-		psf_log_printf (psf, "  Block Align   : %d\n", wav_fmt->min.blockalign) ;
-
-	if (wav_fmt->format == WAVE_FORMAT_PCM && wav_fmt->min.bitwidth == 24 &&
-			wav_fmt->min.blockalign == 4 * wav_fmt->min.channels)
-	{	psf_log_printf (psf, "  Bit Width     : 24\n") ;
-
-		psf_log_printf (psf, "\n"
-			"  Ambiguous information in 'fmt ' chunk. Possibile file types:\n"
-			"    0) Invalid IEEE float file generated by Syntrillium's Cooledit!\n"
-			"    1) File generated by ALSA's arecord containing 24 bit samples in 32 bit containers.\n"
-			"    2) 24 bit file with incorrect Block Align value.\n"
-			"\n") ;
-
-		wpriv->fmt_is_broken = 1 ;
-		}
-	else if (wav_fmt->min.bitwidth == 0)
-	{	switch (wav_fmt->format)
-		{	case WAVE_FORMAT_GSM610 :
-			case WAVE_FORMAT_IPP_ITU_G_723_1 :
-					psf_log_printf (psf, "  Bit Width     : %d\n", wav_fmt->min.bitwidth) ;
-					break ;
-			default :
-					psf_log_printf (psf, "  Bit Width     : %d (should not be 0)\n", wav_fmt->min.bitwidth) ;
-			}
-		}
-	else
-	{	switch (wav_fmt->format)
-		{	case WAVE_FORMAT_GSM610 :
-			case WAVE_FORMAT_IPP_ITU_G_723_1 :
-		psf_log_printf (psf, "  Bit Width     : %d (should be 0)\n", wav_fmt->min.bitwidth) ;
-					break ;
-			default :
-					psf_log_printf (psf, "  Bit Width     : %d\n", wav_fmt->min.bitwidth) ;
-			}
-		} ;
-
-	psf->sf.samplerate	= wav_fmt->min.samplerate ;
-	psf->sf.frames 		= 0 ;					/* Correct this when reading data chunk. */
-	psf->sf.channels	= wav_fmt->min.channels ;
-
-	switch (wav_fmt->format)
-	{	case WAVE_FORMAT_PCM :
-		case WAVE_FORMAT_IEEE_FLOAT :
-				bytespersec = wav_fmt->min.samplerate * wav_fmt->min.blockalign ;
-				if (wav_fmt->min.bytespersec != (unsigned) bytespersec)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-
-				psf->bytewidth = BITWIDTH2BYTES (wav_fmt->min.bitwidth) ;
-				break ;
-
-		case WAVE_FORMAT_ALAW :
-		case WAVE_FORMAT_MULAW :
-				if (wav_fmt->min.bytespersec / wav_fmt->min.blockalign != wav_fmt->min.samplerate)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, wav_fmt->min.samplerate * wav_fmt->min.blockalign) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-
-				psf->bytewidth = 1 ;
-				if (fmtsize >= 18)
-				{	bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->size20.extrabytes)) ;
-					psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->size20.extrabytes) ;
-					} ;
-				break ;
-
-		case WAVE_FORMAT_IMA_ADPCM :
-				if (wav_fmt->min.bitwidth != 4)
-					return SFE_WAV_ADPCM_NOT4BIT ;
-				if (wav_fmt->min.channels < 1 || wav_fmt->min.channels > 2)
-					return SFE_WAV_ADPCM_CHANNELS ;
-
-				bytesread +=
-				psf_binheader_readf (psf, "22", &(wav_fmt->ima.extrabytes), &(wav_fmt->ima.samplesperblock)) ;
-
-				bytespersec = (wav_fmt->ima.samplerate * wav_fmt->ima.blockalign) / wav_fmt->ima.samplesperblock ;
-				if (wav_fmt->ima.bytespersec != (unsigned) bytespersec)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ima.bytespersec, bytespersec) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->ima.bytespersec) ;
-
-				psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->ima.extrabytes) ;
-				psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->ima.samplesperblock) ;
-				break ;
-
-		case WAVE_FORMAT_MS_ADPCM :
-				if (wav_fmt->msadpcm.bitwidth != 4)
-					return SFE_WAV_ADPCM_NOT4BIT ;
-				if (wav_fmt->msadpcm.channels < 1 || wav_fmt->msadpcm.channels > 2)
-					return SFE_WAV_ADPCM_CHANNELS ;
-
-				bytesread +=
-				psf_binheader_readf (psf, "222", &(wav_fmt->msadpcm.extrabytes),
-						&(wav_fmt->msadpcm.samplesperblock), &(wav_fmt->msadpcm.numcoeffs)) ;
-
-				bytespersec = (wav_fmt->min.samplerate * wav_fmt->min.blockalign) / wav_fmt->msadpcm.samplesperblock ;
-				if (wav_fmt->min.bytespersec == (unsigned) bytespersec)
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-				else if (wav_fmt->min.bytespersec == (wav_fmt->min.samplerate / wav_fmt->msadpcm.samplesperblock) * wav_fmt->min.blockalign)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d (MS BUG!))\n", wav_fmt->min.bytespersec, bytespersec) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
-
-				psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->msadpcm.extrabytes) ;
-				psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->msadpcm.samplesperblock) ;
-				if (wav_fmt->msadpcm.numcoeffs > ARRAY_LEN (wav_fmt->msadpcm.coeffs))
-				{	psf_log_printf (psf, "  No. of Coeffs : %d (should be <= %d)\n", wav_fmt->msadpcm.numcoeffs, ARRAY_LEN (wav_fmt->msadpcm.coeffs)) ;
-					wav_fmt->msadpcm.numcoeffs = ARRAY_LEN (wav_fmt->msadpcm.coeffs) ;
-					}
-				else
-					psf_log_printf (psf, "  No. of Coeffs : %d\n", wav_fmt->msadpcm.numcoeffs) ;
-
-				psf_log_printf (psf, "    Index   Coeffs1   Coeffs2\n") ;
-				for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)
-				{	char buffer [128] ;
-
-					bytesread +=
-						psf_binheader_readf (psf, "22", &(wav_fmt->msadpcm.coeffs [k].coeff1), &(wav_fmt->msadpcm.coeffs [k].coeff2)) ;
-					snprintf (buffer, sizeof (buffer), "     %2d     %7d   %7d\n", k, wav_fmt->msadpcm.coeffs [k].coeff1, wav_fmt->msadpcm.coeffs [k].coeff2) ;
-					psf_log_printf (psf, buffer) ;
-					} ;
-				break ;
-
-		case WAVE_FORMAT_GSM610 :
-				if (wav_fmt->gsm610.channels != 1 || wav_fmt->gsm610.blockalign != 65)
-					return SFE_WAV_GSM610_FORMAT ;
-
-				bytesread +=
-				psf_binheader_readf (psf, "22", &(wav_fmt->gsm610.extrabytes), &(wav_fmt->gsm610.samplesperblock)) ;
-
-				if (wav_fmt->gsm610.samplesperblock != 320)
-					return SFE_WAV_GSM610_FORMAT ;
-
-				bytespersec = (wav_fmt->gsm610.samplerate * wav_fmt->gsm610.blockalign) / wav_fmt->gsm610.samplesperblock ;
-				if (wav_fmt->gsm610.bytespersec != (unsigned) bytespersec)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->gsm610.bytespersec, bytespersec) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->gsm610.bytespersec) ;
-
-				psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->gsm610.extrabytes) ;
-				psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->gsm610.samplesperblock) ;
-				break ;
-
-		case WAVE_FORMAT_EXTENSIBLE :
-				if (wav_fmt->ext.bytespersec / wav_fmt->ext.blockalign != wav_fmt->ext.samplerate)
-					psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ext.bytespersec, wav_fmt->ext.samplerate * wav_fmt->ext.blockalign) ;
-				else
-					psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->ext.bytespersec) ;
-
-				bytesread +=
-				psf_binheader_readf (psf, "224", &(wav_fmt->ext.extrabytes), &(wav_fmt->ext.validbits),
-						&(wav_fmt->ext.channelmask)) ;
-
-				psf_log_printf (psf, "  Valid Bits    : %d\n", wav_fmt->ext.validbits) ;
-
-				if (wav_fmt->ext.channelmask == 0)
-					psf_log_printf (psf, "  Channel Mask  : 0x0 (should not be zero)\n") ;
-				else
-				{	char buffer [512] ;
-					unsigned bit ;
-
-					wpriv->wavex_channelmask = wav_fmt->ext.channelmask ;
-
-					/* It's probably wise to ignore the channel mask if it is all zero */
-					free (psf->channel_map) ;
-
-					if ((psf->channel_map = calloc (psf->sf.channels, sizeof (psf->channel_map [0]))) == NULL)
-						return SFE_MALLOC_FAILED ;
-
-					/* Terminate the buffer we're going to append_snprintf into. */
-					buffer [0] = 0 ;
-
-					for (bit = k = 0 ; bit < ARRAY_LEN (channel_mask_bits) ; bit++)
-					{
-						if (wav_fmt->ext.channelmask & (1 << bit))
-						{	if (k > psf->sf.channels)
-							{	psf_log_printf (psf, "*** More channel map bits than there are channels.\n") ;
-								break ;
-								} ;
-
-							psf->channel_map [k++] = channel_mask_bits [bit].id ;
-							append_snprintf (buffer, sizeof (buffer), "%s, ", channel_mask_bits [bit].name) ;
-							} ;
-						} ;
-
-					/* Remove trailing ", ". */
-					bit = strlen (buffer) ;
-					buffer [--bit] = 0 ;
-					buffer [--bit] = 0 ;
-
-					if (k != psf->sf.channels)
-					{	psf_log_printf (psf, "  Channel Mask  : 0x%X\n", wav_fmt->ext.channelmask) ;
-						psf_log_printf (psf, "*** Less channel map bits than there are channels.\n") ;
-						}
-					else
-						psf_log_printf (psf, "  Channel Mask  : 0x%X (%s)\n", wav_fmt->ext.channelmask, buffer) ;
-					} ;
-
-				bytesread += psf_binheader_readf (psf, "422", &(wav_fmt->ext.esf.esf_field1), &(wav_fmt->ext.esf.esf_field2), &(wav_fmt->ext.esf.esf_field3)) ;
-
-				/* compare the esf_fields with each known GUID? and print? */
-				psf_log_printf (psf, "  Subformat\n") ;
-				psf_log_printf (psf, "    esf_field1 : 0x%X\n", wav_fmt->ext.esf.esf_field1) ;
-				psf_log_printf (psf, "    esf_field2 : 0x%X\n", wav_fmt->ext.esf.esf_field2) ;
-				psf_log_printf (psf, "    esf_field3 : 0x%X\n", wav_fmt->ext.esf.esf_field3) ;
-				psf_log_printf (psf, "    esf_field4 : ") ;
-				for (k = 0 ; k < 8 ; k++)
-				{	bytesread += psf_binheader_readf (psf, "1", &(wav_fmt->ext.esf.esf_field4 [k])) ;
-					psf_log_printf (psf, "0x%X ", wav_fmt->ext.esf.esf_field4 [k] & 0xFF) ;
-					} ;
-				psf_log_printf (psf, "\n") ;
-				psf->bytewidth = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ;
-
-				/* Compare GUIDs for known ones. */
-				if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_PCM))
-				{	psf->sf.format = SF_FORMAT_WAVEX | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-					psf_log_printf (psf, "    format : pcm\n") ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MS_ADPCM))
-				{	psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM) ;
-					psf_log_printf (psf, "    format : ms adpcm\n") ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_IEEE_FLOAT))
-				{	psf->sf.format = SF_FORMAT_WAVEX | ((psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT) ;
-					psf_log_printf (psf, "    format : IEEE float\n") ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_ALAW))
-				{	psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ALAW) ;
-					psf_log_printf (psf, "    format : A-law\n") ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MULAW))
-				{	psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ULAW) ;
-					psf_log_printf (psf, "    format : u-law\n") ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM))
-				{	psf->sf.format = SF_FORMAT_WAVEX | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-					psf_log_printf (psf, "    format : pcm (Ambisonic B)\n") ;
-					wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-					}
-				else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT))
-				{	psf->sf.format = SF_FORMAT_WAVEX | ((psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT) ;
-					psf_log_printf (psf, "    format : IEEE float (Ambisonic B)\n") ;
-					wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-					}
-				else
-					return SFE_UNIMPLEMENTED ;
-
-				break ;
-
-		case WAVE_FORMAT_G721_ADPCM :
-				psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->g72x.bytespersec) ;
-				if (fmtsize >= 20)
-				{	bytesread += psf_binheader_readf (psf, "22", &(wav_fmt->g72x.extrabytes), &(wav_fmt->g72x.auxblocksize)) ;
-					if (wav_fmt->g72x.extrabytes == 0)
-						psf_log_printf (psf, "  Extra Bytes   : %d (should be 2)\n", wav_fmt->g72x.extrabytes) ;
-					else
-						psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->g72x.extrabytes) ;
-						psf_log_printf (psf, "  Aux Blk Size  : %d\n", wav_fmt->g72x.auxblocksize) ;
-					}
-				else if (fmtsize == 18)
-				{	bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->g72x.extrabytes)) ;
-					psf_log_printf (psf, "  Extra Bytes   : %d%s\n", wav_fmt->g72x.extrabytes, wav_fmt->g72x.extrabytes != 0 ? " (should be 0)" : "") ;
-					}
-				else
-					psf_log_printf (psf, "*** 'fmt ' chunk should be bigger than this!\n") ;
-				break ;
-
-		default :
-				psf_log_printf (psf, "*** No 'fmt ' chunk dumper for this format!\n") ;
-				return SFE_WAV_BAD_FMT ;
-		} ;
-
-	if (bytesread > fmtsize)
-	{	psf_log_printf (psf, "*** wav_w64_read_fmt_chunk (bytesread > fmtsize)\n") ;
-		return SFE_WAV_BAD_FMT ;
-		}
-	else
-		psf_binheader_readf (psf, "j", fmtsize - bytesread) ;
-
-	psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;
-
-	return 0 ;
-} /* wav_w64_read_fmt_chunk */
-
-void
-wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat)
-{
-	psf_binheader_writef (psf, "422b", subformat->esf_field1,
-					subformat->esf_field2, subformat->esf_field3,
-					subformat->esf_field4, make_size_t (8)) ;
-} /* wavex_write_guid */
-
-
-int
-wavex_gen_channel_mask (const int *chan_map, int channels)
-{	int chan, mask = 0, bit = -1, last_bit = -1 ;
-
-	if (chan_map == NULL)
-		return 0 ;
-
-	for (chan = 0 ; chan < channels ; chan ++)
-	{	int k ;
-
-		for (k = bit + 1 ; k < ARRAY_LEN (channel_mask_bits) ; k++)
-			if (chan_map [chan] == channel_mask_bits [k].id)
-			{	bit = k ;
-				break ;
-				} ;
-
-		/* Check for bad sequence. */
-		if (bit <= last_bit)
-			return 0 ;
-
-		mask += 1 << bit ;
-		last_bit = bit ;
-		} ;
-
-	return mask ;
-} /* wavex_gen_channel_mask */
-
-void
-wav_w64_analyze (SF_PRIVATE *psf)
-{	unsigned char buffer [4096] ;
-	AUDIO_DETECT ad ;
-	int format = 0 ;
-
-	if (psf->is_pipe)
-	{	psf_log_printf (psf, "*** Error : Reading from a pipe. Can't analyze data section to figure out real data format.\n\n") ;
-		return ;
-		} ;
-
-	psf_log_printf (psf, "---------------------------------------------------\n"
-						"Format is known to be broken. Using detection code.\n") ;
-
-	/* Code goes here. */
-	ad.endianness = SF_ENDIAN_LITTLE ;
-	ad.channels = psf->sf.channels ;
-
-	psf_fseek (psf, 3 * 4 * 50, SEEK_SET) ;
-
-	while (psf_fread (buffer, 1, sizeof (buffer), psf) == sizeof (buffer))
-	{	format = audio_detect (psf, &ad, buffer, sizeof (buffer)) ;
-		if (format != 0)
-			break ;
-		} ;
-
-	/* Seek to start of DATA section. */
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if (format == 0)
-	{	psf_log_printf (psf, "wav_w64_analyze : detection failed.\n") ;
-		return ;
-		} ;
-
-	switch (format)
-	{	case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-			psf_log_printf (psf, "wav_w64_analyze : found format : 0x%X\n", format) ;
-			psf->sf.format = (psf->sf.format & ~SF_FORMAT_SUBMASK) + format ;
-			psf->bytewidth = 4 ;
-			psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-			break ;
-
-		case SF_FORMAT_PCM_24 :
-			psf_log_printf (psf, "wav_w64_analyze : found format : 0x%X\n", format) ;
-			psf->sf.format = (psf->sf.format & ~SF_FORMAT_SUBMASK) + format ;
-			psf->bytewidth = 3 ;
-			psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-			break ;
-
-		default :
-			psf_log_printf (psf, "wav_w64_analyze : unhandled format : 0x%X\n", format) ;
-			break ;
-		} ;
-
-	return ;
-} /* wav_w64_analyze */
-
-/*==============================================================================
-*/
-
-typedef struct
-{	int			ID ;
-	const char	*name ;
-} WAV_FORMAT_DESC ;
-
-#define STR(x)			#x
-#define FORMAT_TYPE(x)	{ x, STR (x) }
-
-static WAV_FORMAT_DESC wave_descs [] =
-{	FORMAT_TYPE	(WAVE_FORMAT_PCM),
-	FORMAT_TYPE (WAVE_FORMAT_MS_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_IEEE_FLOAT),
-	FORMAT_TYPE (WAVE_FORMAT_VSELP),
-	FORMAT_TYPE (WAVE_FORMAT_IBM_CVSD),
-	FORMAT_TYPE (WAVE_FORMAT_ALAW),
-	FORMAT_TYPE (WAVE_FORMAT_MULAW),
-	FORMAT_TYPE (WAVE_FORMAT_OKI_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_IMA_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_MEDIASPACE_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_SIERRA_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_G723_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_DIGISTD),
-	FORMAT_TYPE (WAVE_FORMAT_DIGIFIX),
-	FORMAT_TYPE (WAVE_FORMAT_DIALOGIC_OKI_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_MEDIAVISION_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_CU_CODEC),
-	FORMAT_TYPE (WAVE_FORMAT_YAMAHA_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_SONARC),
-	FORMAT_TYPE (WAVE_FORMAT_DSPGROUP_TRUESPEECH),
-	FORMAT_TYPE (WAVE_FORMAT_ECHOSC1),
-	FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF36),
-	FORMAT_TYPE (WAVE_FORMAT_APTX),
-	FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF10),
-	FORMAT_TYPE (WAVE_FORMAT_PROSODY_1612),
-	FORMAT_TYPE (WAVE_FORMAT_LRC),
-	FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC2),
-	FORMAT_TYPE (WAVE_FORMAT_GSM610),
-	FORMAT_TYPE (WAVE_FORMAT_MSNAUDIO),
-	FORMAT_TYPE (WAVE_FORMAT_ANTEX_ADPCME),
-	FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_VQLPC),
-	FORMAT_TYPE (WAVE_FORMAT_DIGIREAL),
-	FORMAT_TYPE (WAVE_FORMAT_DIGIADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_CR10),
-	FORMAT_TYPE (WAVE_FORMAT_NMS_VBXADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_ROLAND_RDAC),
-	FORMAT_TYPE (WAVE_FORMAT_ECHOSC3),
-	FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_DIGITALK),
-	FORMAT_TYPE (WAVE_FORMAT_XEBEC),
-	FORMAT_TYPE (WAVE_FORMAT_G721_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_G728_CELP),
-	FORMAT_TYPE (WAVE_FORMAT_MSG723),
-	FORMAT_TYPE (WAVE_FORMAT_MPEG),
-	FORMAT_TYPE (WAVE_FORMAT_RT24),
-	FORMAT_TYPE (WAVE_FORMAT_PAC),
-	FORMAT_TYPE (WAVE_FORMAT_MPEGLAYER3),
-	FORMAT_TYPE (WAVE_FORMAT_LUCENT_G723),
-	FORMAT_TYPE (WAVE_FORMAT_CIRRUS),
-	FORMAT_TYPE (WAVE_FORMAT_ESPCM),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE),
-	FORMAT_TYPE (WAVE_FORMAT_CANOPUS_ATRAC),
-	FORMAT_TYPE (WAVE_FORMAT_G726_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_G722_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_DSAT),
-	FORMAT_TYPE (WAVE_FORMAT_DSAT_DISPLAY),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_BYTE_ALIGNED),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC8),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC10),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC16),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC20),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT24),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29HW),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR12),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR18),
-	FORMAT_TYPE (WAVE_FORMAT_VOXWARE_TQ40),
-	FORMAT_TYPE (WAVE_FORMAT_SOFTSOUND),
-	FORMAT_TYPE (WAVE_FORMAT_VOXARE_TQ60),
-	FORMAT_TYPE (WAVE_FORMAT_MSRT24),
-	FORMAT_TYPE (WAVE_FORMAT_G729A),
-	FORMAT_TYPE (WAVE_FORMAT_MVI_MV12),
-	FORMAT_TYPE (WAVE_FORMAT_DF_G726),
-	FORMAT_TYPE (WAVE_FORMAT_DF_GSM610),
-	FORMAT_TYPE (WAVE_FORMAT_ONLIVE),
-	FORMAT_TYPE (WAVE_FORMAT_SBC24),
-	FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC3_SPDIF),
-	FORMAT_TYPE (WAVE_FORMAT_ZYXEL_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_PHILIPS_LPCBB),
-	FORMAT_TYPE (WAVE_FORMAT_PACKED),
-	FORMAT_TYPE (WAVE_FORMAT_RHETOREX_ADPCM),
-	FORMAT_TYPE (IBM_FORMAT_MULAW),
-	FORMAT_TYPE (IBM_FORMAT_ALAW),
-	FORMAT_TYPE (IBM_FORMAT_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_VIVO_G723),
-	FORMAT_TYPE (WAVE_FORMAT_VIVO_SIREN),
-	FORMAT_TYPE (WAVE_FORMAT_DIGITAL_G723),
-	FORMAT_TYPE (WAVE_FORMAT_CREATIVE_ADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH8),
-	FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH10),
-	FORMAT_TYPE (WAVE_FORMAT_QUARTERDECK),
-	FORMAT_TYPE (WAVE_FORMAT_FM_TOWNS_SND),
-	FORMAT_TYPE (WAVE_FORMAT_BZV_DIGITAL),
-	FORMAT_TYPE (WAVE_FORMAT_VME_VMPCM),
-	FORMAT_TYPE (WAVE_FORMAT_OLIGSM),
-	FORMAT_TYPE (WAVE_FORMAT_OLIADPCM),
-	FORMAT_TYPE (WAVE_FORMAT_OLICELP),
-	FORMAT_TYPE (WAVE_FORMAT_OLISBC),
-	FORMAT_TYPE (WAVE_FORMAT_OLIOPR),
-	FORMAT_TYPE (WAVE_FORMAT_LH_CODEC),
-	FORMAT_TYPE (WAVE_FORMAT_NORRIS),
-	FORMAT_TYPE (WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS),
-	FORMAT_TYPE (WAVE_FORMAT_DVM),
-	FORMAT_TYPE (WAVE_FORMAT_INTERWAV_VSC112),
-	FORMAT_TYPE (WAVE_FORMAT_IPP_ITU_G_723_1),
-	FORMAT_TYPE (WAVE_FORMAT_EXTENSIBLE),
-} ;
-
-char const*
-wav_w64_format_str (int k)
-{	int lower, upper, mid ;
-
-	lower = -1 ;
-	upper = sizeof (wave_descs) / sizeof (WAV_FORMAT_DESC) ;
-
-	/* binary search */
-	if ((wave_descs [0].ID <= k) && (k <= wave_descs [upper - 1].ID))
-	{
-		while (lower + 1 < upper)
-		{	mid = (upper + lower) / 2 ;
-
-			if (k == wave_descs [mid].ID)
-				return wave_descs [mid].name ;
-			if (k < wave_descs [mid].ID)
-				upper = mid ;
-			else
-				lower = mid ;
-			} ;
-		} ;
-
-	return "Unknown format" ;
-} /* wav_w64_format_str */
-
-int
-wav_w64_srate2blocksize (int srate_chan_product)
-{	if (srate_chan_product < 12000)
-		return 256 ;
-	if (srate_chan_product < 23000)
-		return 512 ;
-	if (srate_chan_product < 44000)
-		return 1024 ;
-	return 2048 ;
-} /* srate2blocksize */
diff --git a/libs/libsndfile/src/wav_w64.h b/libs/libsndfile/src/wav_w64.h
deleted file mode 100644
index 7e180801a6..0000000000
--- a/libs/libsndfile/src/wav_w64.h
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* This file contains definitions commong to WAV and W64 files. */
-
-
-#ifndef WAV_W64_H_INCLUDED
-#define WAV_W64_H_INCLUDED
-
-/*------------------------------------------------------------------------------
-** List of known WAV format tags
-*/
-
-enum
-{
-	/* keep sorted for wav_w64_format_str() */
-	WAVE_FORMAT_UNKNOWN					= 0x0000,		/* Microsoft Corporation */
-	WAVE_FORMAT_PCM						= 0x0001, 		/* Microsoft PCM format */
-	WAVE_FORMAT_MS_ADPCM				= 0x0002,		/* Microsoft ADPCM */
-	WAVE_FORMAT_IEEE_FLOAT				= 0x0003,		/* Micrososft 32 bit float format */
-	WAVE_FORMAT_VSELP					= 0x0004,		/* Compaq Computer Corporation */
-	WAVE_FORMAT_IBM_CVSD				= 0x0005,		/* IBM Corporation */
-	WAVE_FORMAT_ALAW					= 0x0006,		/* Microsoft Corporation */
-	WAVE_FORMAT_MULAW					= 0x0007,		/* Microsoft Corporation */
-	WAVE_FORMAT_OKI_ADPCM				= 0x0010,		/* OKI */
-	WAVE_FORMAT_IMA_ADPCM				= 0x0011,		/* Intel Corporation */
-	WAVE_FORMAT_MEDIASPACE_ADPCM		= 0x0012,		/* Videologic */
-	WAVE_FORMAT_SIERRA_ADPCM			= 0x0013,		/* Sierra Semiconductor Corp */
-	WAVE_FORMAT_G723_ADPCM				= 0x0014,		/* Antex Electronics Corporation */
-	WAVE_FORMAT_DIGISTD					= 0x0015,		/* DSP Solutions, Inc. */
-	WAVE_FORMAT_DIGIFIX					= 0x0016,		/* DSP Solutions, Inc. */
-	WAVE_FORMAT_DIALOGIC_OKI_ADPCM		= 0x0017,		/*  Dialogic Corporation  */
-	WAVE_FORMAT_MEDIAVISION_ADPCM		= 0x0018,		/*  Media Vision, Inc. */
-	WAVE_FORMAT_CU_CODEC				= 0x0019,		/* Hewlett-Packard Company */
-	WAVE_FORMAT_YAMAHA_ADPCM			= 0x0020,		/* Yamaha Corporation of America */
-	WAVE_FORMAT_SONARC					= 0x0021,		/* Speech Compression */
-	WAVE_FORMAT_DSPGROUP_TRUESPEECH 	= 0x0022,		/* DSP Group, Inc */
-	WAVE_FORMAT_ECHOSC1					= 0x0023,		/* Echo Speech Corporation */
-	WAVE_FORMAT_AUDIOFILE_AF36			= 0x0024,		/* Audiofile, Inc. */
-	WAVE_FORMAT_APTX					= 0x0025,		/* Audio Processing Technology */
-	WAVE_FORMAT_AUDIOFILE_AF10			= 0x0026,		/* Audiofile, Inc. */
-	WAVE_FORMAT_PROSODY_1612			= 0x0027,		/* Aculab plc */
-	WAVE_FORMAT_LRC						= 0x0028,		/* Merging Technologies S.A. */
-	WAVE_FORMAT_DOLBY_AC2				= 0x0030,		/* Dolby Laboratories */
-	WAVE_FORMAT_GSM610					= 0x0031,		/* Microsoft Corporation */
-	WAVE_FORMAT_MSNAUDIO				= 0x0032,		/* Microsoft Corporation */
-	WAVE_FORMAT_ANTEX_ADPCME			= 0x0033, 		/* Antex Electronics Corporation */
-	WAVE_FORMAT_CONTROL_RES_VQLPC		= 0x0034,		/* Control Resources Limited */
-	WAVE_FORMAT_DIGIREAL				= 0x0035,		/* DSP Solutions, Inc. */
-	WAVE_FORMAT_DIGIADPCM				= 0x0036,		/* DSP Solutions, Inc. */
-	WAVE_FORMAT_CONTROL_RES_CR10		= 0x0037,		/* Control Resources Limited */
-	WAVE_FORMAT_NMS_VBXADPCM			= 0x0038,		/* Natural MicroSystems */
-	WAVE_FORMAT_ROLAND_RDAC				= 0x0039,		/* Roland */
-	WAVE_FORMAT_ECHOSC3					= 0x003A,		/* Echo Speech Corporation */
-	WAVE_FORMAT_ROCKWELL_ADPCM			= 0x003B,		/* Rockwell International */
-	WAVE_FORMAT_ROCKWELL_DIGITALK		= 0x003C, 		/* Rockwell International */
-	WAVE_FORMAT_XEBEC					= 0x003D,		/* Xebec Multimedia Solutions Limited */
-	WAVE_FORMAT_G721_ADPCM				= 0x0040,		/* Antex Electronics Corporation */
-	WAVE_FORMAT_G728_CELP				= 0x0041,		/* Antex Electronics Corporation */
-	WAVE_FORMAT_MSG723					= 0x0042,		/* Microsoft Corporation */
-	WAVE_FORMAT_MPEG					= 0x0050,		/* Microsoft Corporation */
-	WAVE_FORMAT_RT24					= 0x0052,		/* InSoft Inc. */
-	WAVE_FORMAT_PAC						= 0x0053,		/* InSoft Inc. */
-	WAVE_FORMAT_MPEGLAYER3				= 0x0055,		/* MPEG 3 Layer 1 */
-	WAVE_FORMAT_LUCENT_G723				= 0x0059,		/* Lucent Technologies */
-	WAVE_FORMAT_CIRRUS					= 0x0060,		/* Cirrus Logic */
-	WAVE_FORMAT_ESPCM					= 0x0061,		/* ESS Technology */
-	WAVE_FORMAT_VOXWARE					= 0x0062,		/* Voxware Inc */
-	WAVE_FORMAT_CANOPUS_ATRAC			= 0x0063,		/* Canopus, Co., Ltd. */
-	WAVE_FORMAT_G726_ADPCM				= 0x0064,		/* APICOM */
-	WAVE_FORMAT_G722_ADPCM				= 0x0065,		/* APICOM */
-	WAVE_FORMAT_DSAT					= 0x0066,		/* Microsoft Corporation */
-	WAVE_FORMAT_DSAT_DISPLAY			= 0x0067,		/* Microsoft Corporation */
-	WAVE_FORMAT_VOXWARE_BYTE_ALIGNED	= 0x0069,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_AC8				= 0x0070,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_AC10			= 0x0071,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_AC16			= 0x0072,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_AC20			= 0x0073,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_RT24			= 0x0074,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_RT29			= 0x0075,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_RT29HW			= 0x0076,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_VR12			= 0x0077,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_VR18			= 0x0078,		/* Voxware Inc. */
-	WAVE_FORMAT_VOXWARE_TQ40			= 0x0079,		/* Voxware Inc. */
-	WAVE_FORMAT_SOFTSOUND				= 0x0080,		/* Softsound, Ltd. */
-	WAVE_FORMAT_VOXARE_TQ60				= 0x0081,		/* Voxware Inc. */
-	WAVE_FORMAT_MSRT24					= 0x0082,		/* Microsoft Corporation */
-	WAVE_FORMAT_G729A					= 0x0083,		/* AT&T Laboratories */
-	WAVE_FORMAT_MVI_MV12				= 0x0084,		/* Motion Pixels */
-	WAVE_FORMAT_DF_G726					= 0x0085,		/* DataFusion Systems (Pty) (Ltd) */
-	WAVE_FORMAT_DF_GSM610				= 0x0086,		/* DataFusion Systems (Pty) (Ltd) */
-	/* removed because duplicate */
-	/* WAVE_FORMAT_ISIAUDIO				= 0x0088, */	/* Iterated Systems, Inc. */
-	WAVE_FORMAT_ONLIVE					= 0x0089,		/* OnLive! Technologies, Inc. */
-	WAVE_FORMAT_SBC24					= 0x0091,		/* Siemens Business Communications Systems */
-	WAVE_FORMAT_DOLBY_AC3_SPDIF			= 0x0092,		/* Sonic Foundry */
-	WAVE_FORMAT_ZYXEL_ADPCM				= 0x0097,		/* ZyXEL Communications, Inc. */
-	WAVE_FORMAT_PHILIPS_LPCBB			= 0x0098,		/* Philips Speech Processing */
-	WAVE_FORMAT_PACKED					= 0x0099,		/* Studer Professional Audio AG */
-	WAVE_FORMAT_RHETOREX_ADPCM			= 0x0100,		/* Rhetorex, Inc. */
-
-	/* removed because of the following */
-	/* WAVE_FORMAT_IRAT					= 0x0101,*/		/* BeCubed Software Inc. */
-
-	/* these three are unofficial */
-	IBM_FORMAT_MULAW					= 0x0101,		/* IBM mu-law format */
-	IBM_FORMAT_ALAW						= 0x0102,		/* IBM a-law format */
-	IBM_FORMAT_ADPCM					= 0x0103,		/* IBM AVC Adaptive Differential PCM format */
-
-	WAVE_FORMAT_VIVO_G723				= 0x0111,		/* Vivo Software */
-	WAVE_FORMAT_VIVO_SIREN				= 0x0112,		/* Vivo Software */
-	WAVE_FORMAT_DIGITAL_G723			= 0x0123,		/* Digital Equipment Corporation */
-	WAVE_FORMAT_CREATIVE_ADPCM			= 0x0200,		/* Creative Labs, Inc */
-	WAVE_FORMAT_CREATIVE_FASTSPEECH8 	= 0x0202,		/* Creative Labs, Inc */
-	WAVE_FORMAT_CREATIVE_FASTSPEECH10 	= 0x0203,		/* Creative Labs, Inc */
-	WAVE_FORMAT_QUARTERDECK				= 0x0220,		/* Quarterdeck Corporation */
-	WAVE_FORMAT_FM_TOWNS_SND			= 0x0300,		/* Fujitsu Corporation */
-	WAVE_FORMAT_BZV_DIGITAL				= 0x0400,		/* Brooktree Corporation */
-	WAVE_FORMAT_VME_VMPCM				= 0x0680,		/* AT&T Labs, Inc. */
-	WAVE_FORMAT_OLIGSM					= 0x1000,		/* Ing C. Olivetti & C., S.p.A. */
-	WAVE_FORMAT_OLIADPCM				= 0x1001,		/* Ing C. Olivetti & C., S.p.A. */
-	WAVE_FORMAT_OLICELP					= 0x1002,		/* Ing C. Olivetti & C., S.p.A. */
-	WAVE_FORMAT_OLISBC					= 0x1003,		/* Ing C. Olivetti & C., S.p.A. */
-	WAVE_FORMAT_OLIOPR					= 0x1004,		/* Ing C. Olivetti & C., S.p.A. */
-	WAVE_FORMAT_LH_CODEC				= 0x1100,		/* Lernout & Hauspie */
-	WAVE_FORMAT_NORRIS					= 0x1400,		/* Norris Communications, Inc. */
-	/* removed because duplicate */
-	/* WAVE_FORMAT_ISIAUDIO				= 0x1401, */	/* AT&T Labs, Inc. */
-	WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS	= 0x1500,		/* AT&T Labs, Inc. */
-	WAVE_FORMAT_DVM						= 0x2000,		/* FAST Multimedia AG */
-	WAVE_FORMAT_INTERWAV_VSC112			= 0x7150,		/* ????? */
-
-	WAVE_FORMAT_IPP_ITU_G_723_1			= 0x7230,		/* Intel Performance Primitives g723 codec. */
-
-	WAVE_FORMAT_EXTENSIBLE				= 0xFFFE
-} ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-} MIN_WAV_FMT ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	dummy ;
-} WAV_FMT_SIZE20 ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	samplesperblock ;
-	unsigned short	numcoeffs ;
-	struct
-	{	short	coeff1 ;
-		short	coeff2 ;
-	}	coeffs [7] ;
-} MS_ADPCM_WAV_FMT ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	samplesperblock ;
-} IMA_ADPCM_WAV_FMT ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	auxblocksize ;
-} G72x_ADPCM_WAV_FMT ;
-
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	samplesperblock ;
-} GSM610_WAV_FMT ;
-
-typedef struct
-{	unsigned int	esf_field1 ;
-	unsigned short	esf_field2 ;
-	unsigned short	esf_field3 ;
-	char			esf_field4 [8] ;
-} EXT_SUBFORMAT ;
-
-typedef	struct
-{	unsigned short	format ;
-	unsigned short	channels ;
-	unsigned int	samplerate ;
-	unsigned int	bytespersec ;
-	unsigned short	blockalign ;
-	unsigned short	bitwidth ;
-	unsigned short	extrabytes ;
-	unsigned short	validbits ;
-	unsigned int	channelmask ;
-	EXT_SUBFORMAT	esf ;
-} EXTENSIBLE_WAV_FMT ;
-
-typedef union
-{	unsigned short		format ;
-	MIN_WAV_FMT			min ;
-	IMA_ADPCM_WAV_FMT	ima ;
-	MS_ADPCM_WAV_FMT	msadpcm ;
-	G72x_ADPCM_WAV_FMT	g72x ;
-	EXTENSIBLE_WAV_FMT	ext ;
-	GSM610_WAV_FMT		gsm610 ;
-	WAV_FMT_SIZE20		size20 ;
-	char				padding [512] ;
-} WAV_FMT ;
-
-typedef struct
-{	int frames ;
-} FACT_CHUNK ;
-
-typedef struct
-{	/* For ambisonic commands */
-	int	wavex_ambisonic ;
-	unsigned wavex_channelmask ;
-
-	/* Set to true when 'fmt ' chunk is ambiguous.*/
-	int fmt_is_broken ;
-	WAV_FMT wav_fmt ;
-} WAV_PRIVATE ;
-
-#define		WAV_W64_GSM610_BLOCKSIZE	65
-#define		WAV_W64_GSM610_SAMPLES		320
-
-/*------------------------------------------------------------------------------------
-**	Functions defined in wav_ms_adpcm.c
-*/
-
-#define	MSADPCM_ADAPT_COEFF_COUNT	7
-
-void	msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-**	Functions defined in wav_w64.c
-*/
-
-int 	wav_w64_srate2blocksize (int srate_chan_product) ;
-char const* wav_w64_format_str (int k) ;
-int		wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize) ;
-void	wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) ;
-void	wav_w64_analyze (SF_PRIVATE *psf) ;
-int		wavex_gen_channel_mask (const int *chan_map, int channels) ;
-
-int		wav_read_bext_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
-int		wav_write_bext_chunk (SF_PRIVATE *psf) ;
-
-int		wav_read_cart_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
-int		wav_write_cart_chunk (SF_PRIVATE *psf) ;
-
-#endif
-
diff --git a/libs/libsndfile/src/windows.c b/libs/libsndfile/src/windows.c
deleted file mode 100644
index 387afddafe..0000000000
--- a/libs/libsndfile/src/windows.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	This needs to be a separate file so that we don't have to include
-**	<windows.h> elsewhere (too many symbol clashes).
-*/
-
-
-#include "sfconfig.h"
-
-#if OS_IS_WIN32
-#include <windows.h>
-
-#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-#include "sndfile.h"
-#include "common.h"
-
-extern int sf_errno ;
-
-static void copy_filename (SF_PRIVATE * psf, LPCWSTR wpath) ;
-
-SNDFILE*
-sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo)
-{	SF_PRIVATE 	*psf ;
-	char utf8name [512] ;
-
-	if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-	{	sf_errno = SFE_MALLOC_FAILED ;
-		return	NULL ;
-		} ;
-
-	memset (psf, 0, sizeof (SF_PRIVATE)) ;
-	psf_init_files (psf) ;
-
-	if (WideCharToMultiByte (CP_UTF8, 0, wpath, -1, utf8name, sizeof (utf8name), NULL, NULL) == 0)
-		psf->file.path.wc [0] = 0 ;
-
-	psf_log_printf (psf, "File : '%s' (utf-8 converted from ucs-2)\n", utf8name) ;
-
-	copy_filename (psf, wpath) ;
-	psf->file.use_wchar = SF_TRUE ;
-	psf->file.mode = mode ;
-
-	psf->error = psf_fopen (psf) ;
-
-	return psf_open_file (psf, sfinfo) ;
-} /* sf_wchar_open */
-
-
-static void
-copy_filename (SF_PRIVATE *psf, LPCWSTR wpath)
-{	const wchar_t *cwcptr ;
-	wchar_t *wcptr ;
-
-	wcsncpy (psf->file.path.wc, wpath, ARRAY_LEN (psf->file.path.wc)) ;
-	psf->file.path.wc [ARRAY_LEN (psf->file.path.wc) - 1] = 0 ;
-	if ((cwcptr = wcsrchr (wpath, '/')) || (cwcptr = wcsrchr (wpath, '\\')))
-		cwcptr ++ ;
-	else
-		cwcptr = wpath ;
-
-	wcsncpy (psf->file.name.wc, cwcptr, ARRAY_LEN (psf->file.name.wc)) ;
-	psf->file.name.wc [ARRAY_LEN (psf->file.name.wc) - 1] = 0 ;
-
-	/* Now grab the directory. */
-	wcsncpy (psf->file.dir.wc, wpath, ARRAY_LEN (psf->file.dir.wc)) ;
-	psf->file.dir.wc [ARRAY_LEN (psf->file.dir.wc) - 1] = 0 ;
-
-	if ((wcptr = wcsrchr (psf->file.dir.wc, '/')) || (wcptr = wcsrchr (psf->file.dir.wc, '\\')))
-		wcptr [1] = 0 ;
-	else
-		psf->file.dir.wc [0] = 0 ;
-
-	return ;
-} /* copy_filename */
-
-#endif
diff --git a/libs/libsndfile/src/wve.c b/libs/libsndfile/src/wve.c
deleted file mode 100644
index c13e7ab9b7..0000000000
--- a/libs/libsndfile/src/wve.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 Reuben Thomas
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	"sfconfig.h"
-
-#include	<stdio.h>
-#include	<fcntl.h>
-#include	<string.h>
-#include	<ctype.h>
-
-#include	"sndfile.h"
-#include	"sfendian.h"
-#include	"common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues, and other magic numbers.
-*/
-
-#define ALAW_MARKER			MAKE_MARKER ('A', 'L', 'a', 'w')
-#define SOUN_MARKER			MAKE_MARKER ('S', 'o', 'u', 'n')
-#define DFIL_MARKER			MAKE_MARKER ('d', 'F', 'i', 'l')
-#define ESSN_MARKER			MAKE_MARKER ('e', '*', '*', '\0')
-#define PSION_VERSION		((unsigned short) 3856)
-#define PSION_DATAOFFSET	0x20
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int	wve_read_header (SF_PRIVATE *psf) ;
-static int	wve_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	wve_close (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-wve_open (SF_PRIVATE *psf)
-{	int	error = 0 ;
-
-	if (psf->is_pipe)
-		return SFE_WVE_NO_PIPE ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = wve_read_header (psf)))
-			return error ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_WVE)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_BIG ;
-
-		if ((error = wve_write_header (psf, SF_FALSE)))
-			return error ;
-
-		psf->write_header = wve_write_header ;
-		} ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	psf->container_close = wve_close ;
-
-	error = alaw_init (psf) ;
-
-	return error ;
-} /* wve_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_read_header (SF_PRIVATE *psf)
-{	int marker ;
-	unsigned short version, padding, repeats, trash ;
-	unsigned datalength ;
-
-	/* Set position to start of file to begin reading header. */
-	psf_binheader_readf (psf, "pm", 0, &marker) ;
-	if (marker != ALAW_MARKER)
-	{	psf_log_printf (psf, "Could not find '%M'\n", ALAW_MARKER) ;
-		return SFE_WVE_NOT_WVE ;
-		} ;
-
-	psf_binheader_readf (psf, "m", &marker) ;
-	if (marker != SOUN_MARKER)
-	{	psf_log_printf (psf, "Could not find '%M'\n", SOUN_MARKER) ;
-		return SFE_WVE_NOT_WVE ;
-		} ;
-
-	psf_binheader_readf (psf, "m", &marker) ;
-	if (marker != DFIL_MARKER)
-	{	psf_log_printf (psf, "Could not find '%M'\n", DFIL_MARKER) ;
-		return SFE_WVE_NOT_WVE ;
-		} ;
-
-	psf_binheader_readf (psf, "m", &marker) ;
-	if (marker != ESSN_MARKER)
-	{	psf_log_printf (psf, "Could not find '%M'\n", ESSN_MARKER) ;
-		return SFE_WVE_NOT_WVE ;
-		} ;
-
-	psf_binheader_readf (psf, "E2", &version) ;
-
-	psf_log_printf (psf, "Psion Palmtop Alaw (.wve)\n"
-			"  Sample Rate : 8000\n"
-			"  Channels    : 1\n"
-			"  Encoding    : A-law\n") ;
-
-	if (version != PSION_VERSION)
-		psf_log_printf (psf, "Psion version %d should be %d\n", version, PSION_VERSION) ;
-
-	psf_binheader_readf (psf, "E4", &datalength) ;
-	psf->dataoffset = PSION_DATAOFFSET ;
-	if (datalength != psf->filelength - psf->dataoffset)
-	{	psf->datalength = psf->filelength - psf->dataoffset ;
-		psf_log_printf (psf, "Data length %d should be %D\n", datalength, psf->datalength) ;
-		}
-	else
-		psf->datalength = datalength ;
-
-	psf_binheader_readf (psf, "E22222", &padding, &repeats, &trash, &trash, &trash) ;
-
-	psf->sf.format		= SF_FORMAT_WVE | SF_FORMAT_ALAW ;
-	psf->sf.samplerate	= 8000 ;
-	psf->sf.frames		= psf->datalength ;
-	psf->sf.channels	= 1 ;
-
-	return SFE_NO_ERROR ;
-} /* wve_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_write_header (SF_PRIVATE *psf, int calc_length)
-{	sf_count_t	current ;
-	unsigned datalen ;
-
-	current = psf_ftell (psf) ;
-
-	if (calc_length)
-	{	psf->filelength = psf_get_filelen (psf) ;
-
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		if (psf->dataend)
-			psf->datalength -= psf->filelength - psf->dataend ;
-
-		psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-		} ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	/* Write header. */
-	datalen = psf->datalength ;
-	psf_binheader_writef (psf, "Emmmm", ALAW_MARKER, SOUN_MARKER, DFIL_MARKER, ESSN_MARKER) ;
-	psf_binheader_writef (psf, "E2422222", PSION_VERSION, datalen, 0, 0, 0, 0, 0) ;
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->sf.channels != 1)
-		return SFE_CHANNEL_COUNT ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* wve_write_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_close (SF_PRIVATE *psf)
-{
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	/*  Now we know for certain the length of the file we can re-write
-		**	the header.
-		*/
-		wve_write_header (psf, SF_TRUE) ;
-		} ;
-
-	return 0 ;
-} /* wve_close */
diff --git a/libs/libsndfile/src/xi.c b/libs/libsndfile/src/xi.c
deleted file mode 100644
index fc442d1c3a..0000000000
--- a/libs/libsndfile/src/xi.c
+++ /dev/null
@@ -1,1230 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#define	MAX_XI_SAMPLES	16
-
-/*------------------------------------------------------------------------------
-** Private static functions and tyepdefs.
-*/
-
-typedef struct
-{	/* Warning, this filename is NOT nul terminated. */
-	char	filename [22] ;
-	char	software [20] ;
-	char	sample_name [22] ;
-
-	int		loop_begin, loop_end ;
-	int		sample_flags ;
-
-	/* Data for encoder and decoder. */
-	short	last_16 ;
-} XI_PRIVATE ;
-
-static int	xi_close		(SF_PRIVATE *psf) ;
-static int	xi_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int	xi_read_header	(SF_PRIVATE *psf) ;
-static int	dpcm_init 		(SF_PRIVATE *psf) ;
-
-
-static sf_count_t	dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-xi_open	(SF_PRIVATE *psf)
-{	XI_PRIVATE *pxi ;
-	int		subformat, error = 0 ;
-
-	if (psf->is_pipe)
-		return SFE_XI_NO_PIPE ;
-
-	if (psf->codec_data)
-		pxi = psf->codec_data ;
-	else if ((pxi = calloc (1, sizeof (XI_PRIVATE))) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->codec_data = pxi ;
-
-	if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-	{	if ((error = xi_read_header (psf)))
-			return error ;
-		} ;
-
-	subformat = SF_CODEC (psf->sf.format) ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_XI)
-			return	SFE_BAD_OPEN_FORMAT ;
-
-		psf->endian = SF_ENDIAN_LITTLE ;
-		psf->sf.channels = 1 ; /* Always mono */
-		psf->sf.samplerate = 44100 ; /* Always */
-
-		/* Set up default instrument and software name. */
-		memcpy (pxi->filename, "Default Name            ", sizeof (pxi->filename)) ;
-		memcpy (pxi->software, PACKAGE "-" VERSION "               ", sizeof (pxi->software)) ;
-
-		memset (pxi->sample_name, 0, sizeof (pxi->sample_name)) ;
-		snprintf (pxi->sample_name, sizeof (pxi->sample_name), "%s", "Sample #1") ;
-
-		pxi->sample_flags = (subformat == SF_FORMAT_DPCM_16) ? 16 : 0 ;
-
-		if (xi_write_header (psf, SF_FALSE))
-			return psf->error ;
-
-		psf->write_header = xi_write_header ;
-		} ;
-
-	psf->container_close = xi_close ;
-	psf->seek = dpcm_seek ;
-
-	psf->sf.seekable = SF_FALSE ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	switch (subformat)
-	{	case SF_FORMAT_DPCM_8 :		/* 8-bit differential PCM. */
-		case SF_FORMAT_DPCM_16 :	/* 16-bit differential PCM. */
-				error = dpcm_init (psf) ;
-				break ;
-
-		default : break ;
-		} ;
-
-	return error ;
-} /* xi_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-xi_close	(SF_PRIVATE * UNUSED (psf))
-{
-	return 0 ;
-} /* xi_close */
-
-/*==============================================================================
-*/
-
-static sf_count_t dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static int
-dpcm_init (SF_PRIVATE *psf)
-{	if (psf->bytewidth == 0 || psf->sf.channels == 0)
-		return SFE_INTERNAL ;
-
-	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-	if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-	{	switch (psf->bytewidth)
-		{	case 1 :
-					psf->read_short		= dpcm_read_dsc2s ;
-					psf->read_int		= dpcm_read_dsc2i ;
-					psf->read_float		= dpcm_read_dsc2f ;
-					psf->read_double	= dpcm_read_dsc2d ;
-					break ;
-			case 2 :
-					psf->read_short		= dpcm_read_dles2s ;
-					psf->read_int		= dpcm_read_dles2i ;
-					psf->read_float		= dpcm_read_dles2f ;
-					psf->read_double	= dpcm_read_dles2d ;
-					break ;
-			default :
-				psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ;
-				return SFE_UNIMPLEMENTED ;
-			} ;
-		} ;
-
-	if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-	{	switch (psf->bytewidth)
-		{	case 1 :
-					psf->write_short	= dpcm_write_s2dsc ;
-					psf->write_int		= dpcm_write_i2dsc ;
-					psf->write_float	= dpcm_write_f2dsc ;
-					psf->write_double	= dpcm_write_d2dsc ;
-					break ;
-			case 2 :
-					psf->write_short	= dpcm_write_s2dles ;
-					psf->write_int		= dpcm_write_i2dles ;
-					psf->write_float	= dpcm_write_f2dles ;
-					psf->write_double	= dpcm_write_d2dles ;
-					break ;
-			default :
-				psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ;
-				return SFE_UNIMPLEMENTED ;
-			} ;
-		} ;
-
-	psf->filelength = psf_get_filelen (psf) ;
-	psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-							psf->filelength - psf->dataoffset ;
-	psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-	return 0 ;
-} /* dpcm_init */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			total, bufferlen, len ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return SFE_INTERNAL ;
-
-	if (psf->datalength < 0 || psf->dataoffset < 0)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	if (offset == 0)
-	{	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-		pxi->last_16 = 0 ;
-		return 0 ;
-		} ;
-
-	if (offset < 0 || offset > psf->sf.frames)
-	{	psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	if (mode != SFM_READ)
-	{	/* What to do about write??? */
-		psf->error = SFE_BAD_SEEK ;
-		return	PSF_SEEK_ERROR ;
-		} ;
-
-	psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-	if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_DPCM_16)
-	{	total = offset ;
-		bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-		while (total > 0)
-		{	len = (total > bufferlen) ? bufferlen : total ;
-			total -= dpcm_read_dles2s (psf, ubuf.sbuf, len) ;
-			} ;
-		}
-	else
-	{	total = offset ;
-		bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-		while (total > 0)
-		{	len = (total > bufferlen) ? bufferlen : total ;
-			total -= dpcm_read_dsc2s (psf, ubuf.sbuf, len) ;
-			} ;
-		} ;
-
-	return offset ;
-} /* dpcm_seek */
-
-
-static int
-xi_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{	XI_PRIVATE	*pxi ;
-	sf_count_t	current ;
-	const char	*string ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return SFE_INTERNAL ;
-
-	current = psf_ftell (psf) ;
-
-	/* Reset the current header length to zero. */
-	psf->header [0] = 0 ;
-	psf->headindex = 0 ;
-	psf_fseek (psf, 0, SEEK_SET) ;
-
-	string = "Extended Instrument: " ;
-	psf_binheader_writef (psf, "b", string, strlen (string)) ;
-	psf_binheader_writef (psf, "b1", pxi->filename, sizeof (pxi->filename), 0x1A) ;
-
-	/* Write software version and two byte XI version. */
-	psf_binheader_writef (psf, "eb2", pxi->software, sizeof (pxi->software), (1 << 8) + 2) ;
-
-	/*
-	** Jump note numbers (96), volume envelope (48), pan envelope (48),
-	** volume points (1), pan points (1)
-	*/
-	psf_binheader_writef (psf, "z", (size_t) (96 + 48 + 48 + 1 + 1)) ;
-
-	/* Jump volume loop (3 bytes), pan loop (3), envelope flags (3), vibrato (3)
-	** fade out (2), 22 unknown bytes, and then write sample_count (2 bytes).
-	*/
-	psf_binheader_writef (psf, "ez2z2", (size_t) (4 * 3), 0x1234, make_size_t (22), 1) ;
-
-	pxi->loop_begin = 0 ;
-	pxi->loop_end = 0 ;
-
-	psf_binheader_writef (psf, "et844", psf->sf.frames, pxi->loop_begin, pxi->loop_end) ;
-
-	/* volume, fine tune, flags, pan, note, namelen */
-	psf_binheader_writef (psf, "111111", 128, 0, pxi->sample_flags, 128, 0, strlen (pxi->sample_name)) ;
-
-	psf_binheader_writef (psf, "b", pxi->sample_name, sizeof (pxi->sample_name)) ;
-
-
-
-
-
-	/* Header construction complete so write it out. */
-	psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-	if (psf->error)
-		return psf->error ;
-
-	psf->dataoffset = psf->headindex ;
-
-	if (current > 0)
-		psf_fseek (psf, current, SEEK_SET) ;
-
-	return psf->error ;
-} /* xi_write_header */
-
-static int
-xi_read_header (SF_PRIVATE *psf)
-{	char	buffer [64], name [32] ;
-	short	version, fade_out, sample_count ;
-	int		k, loop_begin, loop_end ;
-	int 	sample_sizes [MAX_XI_SAMPLES] ;
-
-	psf_binheader_readf (psf, "pb", 0, buffer, 21) ;
-
-	memset (sample_sizes, 0, sizeof (sample_sizes)) ;
-
-	buffer [20] = 0 ;
-	if (strcmp (buffer, "Extended Instrument:") != 0)
-		return SFE_XI_BAD_HEADER ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-	psf_binheader_readf (psf, "b", buffer, 23) ;
-
-	if (buffer [22] != 0x1A)
-		return SFE_XI_BAD_HEADER ;
-
-	buffer [22] = 0 ;
-	for (k = 21 ; k >= 0 && buffer [k] == ' ' ; k --)
-		buffer [k] = 0 ;
-
-	psf_log_printf (psf, "Extended Instrument : %s\n", buffer) ;
-	psf_store_string (psf, SF_STR_TITLE, buffer) ;
-
-	psf_binheader_readf (psf, "be2", buffer, 20, &version) ;
-	buffer [19] = 0 ;
-	for (k = 18 ; k >= 0 && buffer [k] == ' ' ; k --)
-		buffer [k] = 0 ;
-
-	psf_log_printf (psf, "Software : %s\nVersion  : %d.%02d\n", buffer, version / 256, version % 256) ;
-	psf_store_string (psf, SF_STR_SOFTWARE, buffer) ;
-
-	/* Jump note numbers (96), volume envelope (48), pan envelope (48),
-	** volume points (1), pan points (1)
-	*/
-	psf_binheader_readf (psf, "j", 96 + 48 + 48 + 1 + 1) ;
-
-	psf_binheader_readf (psf, "b", buffer, 12) ;
-	psf_log_printf (psf, "Volume Loop\n  sustain : %u\n  begin   : %u\n  end     : %u\n",
-						buffer [0], buffer [1], buffer [2]) ;
-	psf_log_printf (psf, "Pan Loop\n  sustain : %u\n  begin   : %u\n  end     : %u\n",
-						buffer [3], buffer [4], buffer [5]) ;
-	psf_log_printf (psf, "Envelope Flags\n  volume  : 0x%X\n  pan     : 0x%X\n",
-				buffer [6] & 0xFF, buffer [7] & 0xFF) ;
-
-	psf_log_printf (psf, "Vibrato\n  type    : %u\n  sweep   : %u\n  depth   : %u\n  rate    : %u\n",
-				buffer [8], buffer [9], buffer [10], buffer [11]) ;
-
-	/*
-	** Read fade_out then jump reserved (2 bytes) and ???? (20 bytes) and
-	** sample_count.
-	*/
-	psf_binheader_readf (psf, "e2j2", &fade_out, 2 + 20, &sample_count) ;
-	psf_log_printf (psf, "Fade out  : %d\n", fade_out) ;
-
-	/* XI file can contain up to 16 samples. */
-	if (sample_count > MAX_XI_SAMPLES)
-		return SFE_XI_EXCESS_SAMPLES ;
-
-	if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-		return SFE_MALLOC_FAILED ;
-
-	psf->instrument->basenote = 0 ;
-	/* Log all data for each sample. */
-	for (k = 0 ; k < sample_count ; k++)
-	{	psf_binheader_readf (psf, "e444", &(sample_sizes [k]), &loop_begin, &loop_end) ;
-
-		/* Read 5 know bytes, 1 unknown byte and 22 name bytes. */
-		psf_binheader_readf (psf, "bb", buffer, 6, name, 22) ;
-		name [21] = 0 ;
-
-		psf_log_printf (psf, "Sample #%d\n  name    : %s\n", k + 1, name) ;
-
-		psf_log_printf (psf, "  size    : %d\n", sample_sizes [k]) ;
-
-
-
-		psf_log_printf (psf, "  loop\n    begin : %d\n    end   : %d\n", loop_begin, loop_end) ;
-
-		psf_log_printf (psf, "  volume  : %u\n  f. tune : %d\n  flags   : 0x%02X ",
-					buffer [0] & 0xFF, buffer [1] & 0xFF, buffer [2] & 0xFF) ;
-
-		psf_log_printf (psf, " (") ;
-		if (buffer [2] & 1)
-			psf_log_printf (psf, " Loop") ;
-		if (buffer [2] & 2)
-			psf_log_printf (psf, " PingPong") ;
-		psf_log_printf (psf, (buffer [2] & 16) ? " 16bit" : " 8bit") ;
-		psf_log_printf (psf, " )\n") ;
-
-		psf_log_printf (psf, "  pan     : %u\n  note    : %d\n  namelen : %d\n",
-					buffer [3] & 0xFF, buffer [4], buffer [5]) ;
-
-		psf->instrument->basenote = buffer [4] ;
-		if (buffer [2] & 1)
-		{	psf->instrument->loop_count = 1 ;
-			psf->instrument->loops [0].mode = (buffer [2] & 2) ? SF_LOOP_ALTERNATING : SF_LOOP_FORWARD ;
-			psf->instrument->loops [0].start = loop_begin ;
-			psf->instrument->loops [0].end = loop_end ;
-			} ;
-
-		if (k != 0)
-			continue ;
-
-		if (buffer [2] & 16)
-		{	psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_16 ;
-			psf->bytewidth = 2 ;
-			}
-		else
-		{	psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_8 ;
-			psf->bytewidth = 1 ;
-			} ;
-		} ;
-
-	while (sample_count > 1 && sample_sizes [sample_count - 1] == 0)
-		sample_count -- ;
-
-	/* Currently, we can only handle 1 sample per file. */
-
-	if (sample_count > 2)
-	{	psf_log_printf (psf, "*** Sample count is less than 16 but more than 1.\n") ;
-		psf_log_printf (psf, "  sample count : %d    sample_sizes [%d] : %d\n",
-						sample_count, sample_count - 1, sample_sizes [sample_count - 1]) ;
-		return SFE_XI_EXCESS_SAMPLES ;
-		} ;
-
-	psf->datalength = sample_sizes [0] ;
-
-	psf->dataoffset = psf_ftell (psf) ;
-	if (psf->dataoffset < 0)
-	{	psf_log_printf (psf, "*** Bad Data Offset : %D\n", psf->dataoffset) ;
-		return SFE_BAD_OFFSET ;
-		} ;
-	psf_log_printf (psf, "Data Offset : %D\n", psf->dataoffset) ;
-
-	if (psf->dataoffset + psf->datalength > psf->filelength)
-	{	psf_log_printf (psf, "*** File seems to be truncated. Should be at least %D bytes long.\n",
-				psf->dataoffset + sample_sizes [0]) ;
-		psf->datalength = psf->filelength - psf->dataoffset ;
-		} ;
-
-	if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset)
-		return SFE_BAD_SEEK ;
-
-	psf->endian = SF_ENDIAN_LITTLE ;
-	psf->sf.channels = 1 ; /* Always mono */
-	psf->sf.samplerate = 44100 ; /* Always */
-
-	psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-	if (! psf->sf.frames && psf->blockwidth)
-		psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-	psf->instrument->gain = 1 ;
-	psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ;
-	psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ;
-
-	return 0 ;
-} /* xi_read_header */
-
-/*==============================================================================
-*/
-
-static void dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest) ;
-static void dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest) ;
-static void dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact) ;
-static void dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact) ;
-
-static void dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest) ;
-static void dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest) ;
-static void dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact) ;
-static void dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact) ;
-
-static sf_count_t
-dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		dsc2s_array (pxi, ubuf.scbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dsc2s */
-
-static sf_count_t
-dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		dsc2i_array (pxi, ubuf.scbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dsc2i */
-
-static sf_count_t
-dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		dsc2f_array (pxi, ubuf.scbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dsc2f */
-
-static sf_count_t
-dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		dsc2d_array (pxi, ubuf.scbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dsc2d */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		dles2s_array (pxi, ubuf.sbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dles2s */
-
-static sf_count_t
-dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		dles2i_array (pxi, ubuf.sbuf, readcount, ptr + total) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dles2i */
-
-static sf_count_t
-dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		dles2f_array (pxi, ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dles2f */
-
-static sf_count_t
-dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, readcount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		dles2d_array (pxi, ubuf.sbuf, readcount, ptr + total, normfact) ;
-		total += readcount ;
-		if (readcount < bufferlen)
-			break ;
-		len -= readcount ;
-		} ;
-
-	return total ;
-} /* dpcm_read_dles2d */
-
-/*==============================================================================
-*/
-
-static void s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count) ;
-static void i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count) ;
-static void f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact) ;
-static void d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact) ;
-
-static void	s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count) ;
-static void i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count) ;
-static void f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact) ;
-static void d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact) ;
-
-
-static sf_count_t
-dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_s2dsc */
-
-static sf_count_t
-dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_i2dsc */
-
-static sf_count_t
-dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen, normfact) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_f2dsc */
-
-static sf_count_t
-dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		d2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen, normfact) ;
-		writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_d2dsc */
-
-
-static sf_count_t
-dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		s2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_s2dles */
-
-static sf_count_t
-dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		i2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_i2dles */
-
-static sf_count_t
-dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	float		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		f2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen, normfact) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_f2dles */
-
-static sf_count_t
-dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{	BUF_UNION	ubuf ;
-	XI_PRIVATE	*pxi ;
-	int			bufferlen, writecount ;
-	sf_count_t	total = 0 ;
-	double		normfact ;
-
-	if ((pxi = psf->codec_data) == NULL)
-		return 0 ;
-
-	normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-	bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-	while (len > 0)
-	{	if (len < bufferlen)
-			bufferlen = (int) len ;
-		d2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen, normfact) ;
-		writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-		total += writecount ;
-		if (writecount < bufferlen)
-			break ;
-		len -= writecount ;
-		} ;
-
-	return total ;
-} /* dpcm_write_d2dles */
-
-
-/*==============================================================================
-*/
-
-static void
-dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest)
-{	signed char	last_val ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += src [k] ;
-		dest [k] = last_val << 8 ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* dsc2s_array */
-
-static void
-dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest)
-{	signed char	last_val ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += src [k] ;
-		dest [k] = last_val << 24 ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* dsc2i_array */
-
-static void
-dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact)
-{	signed char	last_val ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += src [k] ;
-		dest [k] = last_val * normfact ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* dsc2f_array */
-
-static void
-dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact)
-{	signed char	last_val ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += src [k] ;
-		dest [k] = last_val * normfact ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* dsc2d_array */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count)
-{	signed char	last_val, current ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = src [k] >> 8 ;
-		dest [k] = current - last_val ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* s2dsc_array */
-
-static void
-i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count)
-{	signed char	last_val, current ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = src [k] >> 24 ;
-		dest [k] = current - last_val ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* i2dsc_array */
-
-static void
-f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact)
-{	signed char	last_val, current ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = lrintf (src [k] * normfact) ;
-		dest [k] = current - last_val ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* f2dsc_array */
-
-static void
-d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact)
-{	signed char	last_val, current ;
-	int			k ;
-
-	last_val = pxi->last_16 >> 8 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = lrint (src [k] * normfact) ;
-		dest [k] = current - last_val ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val << 8 ;
-} /* d2dsc_array */
-
-/*==============================================================================
-*/
-
-static void
-dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest)
-{	short	last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += LE2H_16 (src [k]) ;
-		dest [k] = last_val ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* dles2s_array */
-
-static void
-dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest)
-{	short	last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += LE2H_16 (src [k]) ;
-		dest [k] = last_val << 16 ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* dles2i_array */
-
-static void
-dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact)
-{	short	last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += LE2H_16 (src [k]) ;
-		dest [k] = last_val * normfact ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* dles2f_array */
-
-static void
-dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact)
-{	short	last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	last_val += LE2H_16 (src [k]) ;
-		dest [k] = last_val * normfact ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* dles2d_array */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count)
-{	short	diff, last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	diff = src [k] - last_val ;
-		dest [k] = LE2H_16 (diff) ;
-		last_val = src [k] ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* s2dles_array */
-
-static void
-i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count)
-{	short	diff, last_val ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	diff = (src [k] >> 16) - last_val ;
-		dest [k] = LE2H_16 (diff) ;
-		last_val = src [k] >> 16 ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* i2dles_array */
-
-static void
-f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact)
-{	short	diff, last_val, current ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = lrintf (src [k] * normfact) ;
-		diff = current - last_val ;
-		dest [k] = LE2H_16 (diff) ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* f2dles_array */
-
-static void
-d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact)
-{	short	diff, last_val, current ;
-	int		k ;
-
-	last_val = pxi->last_16 ;
-
-	for (k = 0 ; k < count ; k++)
-	{	current = lrint (src [k] * normfact) ;
-		diff = current - last_val ;
-		dest [k] = LE2H_16 (diff) ;
-		last_val = current ;
-		} ;
-
-	pxi->last_16 = last_val ;
-} /* d2dles_array */
-
diff --git a/libs/libsndfile/tests/Makefile.am b/libs/libsndfile/tests/Makefile.am
deleted file mode 100644
index 089046bb81..0000000000
--- a/libs/libsndfile/tests/Makefile.am
+++ /dev/null
@@ -1,218 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-if ENABLE_TEST_COVERAGE
-CPP_TEST =
-else
-CPP_TEST = cpp_test
-endif
-
-AM_CPPFLAGS = -I$(top_srcdir)/src
-
-check_PROGRAMS = sfversion floating_point_test write_read_test \
-	lossy_comp_test error_test ulaw_test alaw_test dwvw_test \
-	peak_chunk_test command_test stdin_test stdout_test stdio_test \
-	pcm_test headerless_test pipe_test benchmark header_test misc_test \
-	raw_test string_test multi_file_test dither_test chunk_test \
-	scale_clip_test win32_test fix_this aiff_rw_test virtual_io_test \
-	locale_test largefile_test win32_ordinal_test ogg_test compression_size_test \
-	checksum_test external_libs_test rdwr_test format_check_test $(CPP_TEST) \
-	channel_test
-
-noinst_HEADERS = dft_cmp.h utils.h generate.h
-
-autogen_sources = write_read_test.tpl write_read_test.def	\
-					pcm_test.tpl pcm_test.def				\
-					header_test.tpl header_test.def			\
-					utils.tpl utils.def						\
-					scale_clip_test.tpl scale_clip_test.def	\
-					pipe_test.tpl pipe_test.def				\
-					rdwr_test.tpl rdwr_test.def				\
-					floating_point_test.tpl floating_point_test.def	\
-					benchmark.tpl benchmark.def
-
-EXTRA_DIST = $(autogen_sources)
-
-CLEANFILES = *~ *.exe
-
-#===============================================================================
-# If we're cross compiling from Linux to Windows and running the test suite
-# under Wine, we need a symbolic link to the generated libsndfile DLL.
-
-if LINUX_MINGW_CROSS_TEST
-
-$(check_PROGRAMS) : libsndfile-1.dll
-
-libsndfile-1.dll :
-	ln -s $(top_builddir)/src/.libs/$@ $@
-
-clean-local :
-	-rm -f libsndfile-1.dll
-
-endif
-
-#===============================================================================
-
-check: test_wrapper.sh
-	sh test_wrapper.sh
-
-# Need this target to force building of test programs.
-checkprograms : $(check_PROGRAMS)
-
-#===============================================================================
-
-sfversion_SOURCES = sfversion.c
-sfversion_LDADD = $(top_builddir)/src/libsndfile.la
-
-write_read_test_SOURCES = utils.c generate.c write_read_test.c
-write_read_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-lossy_comp_test_SOURCES = utils.c lossy_comp_test.c
-lossy_comp_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-fix_this_SOURCES = utils.c fix_this.c
-fix_this_LDADD = $(top_builddir)/src/libsndfile.la
-
-error_test_SOURCES = error_test.c utils.c
-error_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-ulaw_test_SOURCES = utils.c ulaw_test.c
-ulaw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-alaw_test_SOURCES = utils.c alaw_test.c
-alaw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-aiff_rw_test_SOURCES = utils.c aiff_rw_test.c
-aiff_rw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-command_test_SOURCES = command_test.c utils.c
-command_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-locale_test_SOURCES = locale_test.c utils.c
-locale_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-largefile_test_SOURCES = largefile_test.c utils.c
-largefile_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-pcm_test_SOURCES = pcm_test.c utils.c
-pcm_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-headerless_test_SOURCES = utils.c headerless_test.c
-headerless_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdin_test_SOURCES = stdin_test.c utils.c
-stdin_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdout_test_SOURCES = stdout_test.c
-stdout_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdio_test_SOURCES = stdio_test.c utils.c
-stdio_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-pipe_test_SOURCES = pipe_test.c utils.c
-pipe_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-benchmark_SOURCES = benchmark.c
-benchmark_LDADD = $(top_builddir)/src/libsndfile.la
-
-header_test_SOURCES = header_test.c utils.c
-header_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-misc_test_SOURCES = misc_test.c utils.c
-misc_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-raw_test_SOURCES = raw_test.c utils.c
-raw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-string_test_SOURCES = string_test.c utils.c
-string_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-dither_test_SOURCES = dither_test.c utils.c
-dither_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-chunk_test_SOURCES = chunk_test.c utils.c
-chunk_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-multi_file_test_SOURCES = multi_file_test.c utils.c
-multi_file_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-virtual_io_test_SOURCES = virtual_io_test.c utils.c
-virtual_io_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-ogg_test_SOURCES = ogg_test.c utils.c
-ogg_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-compression_size_test_SOURCES = compression_size_test.c utils.c
-compression_size_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-rdwr_test_SOURCES = rdwr_test.c utils.c
-rdwr_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-win32_test_SOURCES = win32_test.c
-# Link lib here so that generating the testsuite tarball works correctly.
-win32_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-win32_ordinal_test_SOURCES = win32_ordinal_test.c utils.c
-win32_ordinal_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-external_libs_test_SOURCES = external_libs_test.c utils.c
-external_libs_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-format_check_test_SOURCES = format_check_test.c utils.c
-format_check_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-channel_test_SOURCES = channel_test.c utils.c
-channel_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-cpp_test_SOURCES = cpp_test.cc utils.c
-cpp_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-checksum_test_SOURCES = checksum_test.c utils.c
-checksum_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-# Lite remove start
-dwvw_test_SOURCES = utils.c dwvw_test.c
-dwvw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-floating_point_test_SOURCES = utils.c dft_cmp.c floating_point_test.c
-floating_point_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-peak_chunk_test_SOURCES = peak_chunk_test.c utils.c
-peak_chunk_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-scale_clip_test_SOURCES = scale_clip_test.c utils.c
-scale_clip_test_LDADD = $(top_builddir)/src/libsndfile.la
-# Lite remove end
-
-#===============================================================================
-
-write_read_test.c: write_read_test.def write_read_test.tpl
-	cd $(srcdir) && autogen --writable write_read_test.def && cd $(abs_builddir)
-
-pcm_test.c: pcm_test.def pcm_test.tpl
-	cd $(srcdir) && autogen --writable pcm_test.def && cd $(abs_builddir)
-
-header_test.c: header_test.def header_test.tpl
-	cd $(srcdir) && autogen --writable header_test.def && cd $(abs_builddir)
-
-utils.c utils.h : utils.def utils.tpl
-	cd $(srcdir) && autogen --writable utils.def && cd $(abs_builddir)
-
-scale_clip_test.c: scale_clip_test.def scale_clip_test.tpl
-	cd $(srcdir) && autogen --writable scale_clip_test.def && cd $(abs_builddir)
-
-pipe_test.c: pipe_test.def pipe_test.tpl
-	cd $(srcdir) && autogen --writable pipe_test.def && cd $(abs_builddir)
-
-rdwr_test.c: rdwr_test.def rdwr_test.tpl
-	cd $(srcdir) && autogen --writable rdwr_test.def && cd $(abs_builddir)
-
-floating_point_test.c: floating_point_test.def floating_point_test.tpl
-	cd $(srcdir) && autogen --writable floating_point_test.def && cd $(abs_builddir)
-
-benchmark.c: benchmark.def benchmark.tpl
-	cd $(srcdir) && autogen --writable benchmark.def && cd $(abs_builddir)
-
-genfiles : write_read_test.c pcm_test.c header_test.c utils.c \
-		scale_clip_test.c pipe_test.c floating_point_test.c rdwr_test.c \
-		benchmark.c
-
diff --git a/libs/libsndfile/tests/aiff_rw_test.c b/libs/libsndfile/tests/aiff_rw_test.c
deleted file mode 100644
index 43d34dbc8f..0000000000
--- a/libs/libsndfile/tests/aiff_rw_test.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-
-static unsigned char aifc_data [] =
-{	'F' , 'O' , 'R' , 'M' ,
-	0x00, 0x00, 0x01, 0xE8, /* FORM length */
-
-	'A' , 'I' , 'F' , 'C' ,
-	0x43, 0x4F, 0x4D, 0x4D, /* COMM */
-	0x00, 0x00, 0x00, 0x26, /* COMM length */
-	0x00, 0x01, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x10, 0x40, 0x0D, 0xAC, 0x44,
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4F, 0x4E, 0x45, 0x0D, 'N' ,
-	'o' , 't' , ' ' , 'c' , 'o' , 'm' , 'p' , 'r' , 'e' , 's' , 's' , 'e' ,
-	'd' , 0x00,
-
-	'F' , 'V' , 'E' , 'R' , 0x00, 0x00, 0x00, 0x04, 0xA2, 0x80, 0x51, 0x40,
-
-	/* A 'MARK' chunk. */
-	'M' , 'A' , 'R' , 'K' , 0x00, 0x00, 0x00, 0x36, 0x00, 0x05,
-	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 'A' ,
-	0x00, 0x02, 0x00, 0x00, 0x11, 0x3A, 0x02, 'B' , 'C' , 0x00,
-	0x00, 0x03, 0x00, 0x00, 0x22, 0x74, 0x03, 'D' , 'E' , 'F',
-	0x00, 0x04, 0x00, 0x00, 0x33, 0xAE, 0x04, 'G' , 'H' , 'I', 'J' , 0x00,
-	0x00, 0x05, 0x00, 0x00, 0x44, 0xE8, 0x05, 'K' , 'L' , 'M', 'N' , 'O' ,
-
-	'S' , 'S' , 'N' , 'D' ,
-	0x00, 0x00, 0x01, 0x64, /* SSND length */
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-	0xFF, 0xE0, 0xFF, 0xDB, 0xFF, 0xD0, 0xFF, 0xD5, 0xFF, 0xD6, 0xFF, 0xD0,
-	0xFF, 0xBF, 0xFF, 0xBE, 0xFF, 0xB9, 0xFF, 0xC8, 0xFF, 0xBF, 0xFF, 0xD5,
-	0xFF, 0xC3, 0xFF, 0xBF, 0xFF, 0xB3, 0xFF, 0xBE, 0xFF, 0xB4, 0xFF, 0xAD,
-	0xFF, 0xAC, 0xFF, 0xAF, 0xFF, 0xB9, 0xFF, 0xB3, 0xFF, 0xA4, 0xFF, 0xA5,
-	0xFF, 0x93, 0xFF, 0x95, 0xFF, 0x97, 0xFF, 0x98, 0xFF, 0x99, 0xFF, 0x9E,
-	0xFF, 0x90, 0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x7C, 0xFF, 0x80, 0xFF, 0x7C,
-	0xFF, 0x72, 0xFF, 0x72, 0xFF, 0x6C, 0xFF, 0x75, 0xFF, 0x6E, 0xFF, 0x6F,
-	0xFF, 0x66, 0xFF, 0x62, 0xFF, 0x5C, 0xFF, 0x64, 0xFF, 0x50, 0xFF, 0x56,
-	0xFF, 0x56, 0xFF, 0x4A, 0xFF, 0x4A, 0xFF, 0x49, 0xFF, 0x44, 0xFF, 0x49,
-	0xFF, 0x3B, 0xFF, 0x3F, 0xFF, 0x48, 0xFF, 0x46, 0xFF, 0x42, 0xFF, 0x49,
-	0xFF, 0x43, 0xFF, 0x36, 0xFF, 0x40, 0xFF, 0x35, 0xFF, 0x3F, 0xFF, 0x36,
-	0xFF, 0x37, 0xFF, 0x2E, 0xFF, 0x23, 0xFF, 0x23, 0xFF, 0x21, 0xFF, 0x1F,
-	0xFF, 0x25, 0xFF, 0x2C, 0xFF, 0x1E, 0xFF, 0x22, 0xFF, 0x24, 0xFF, 0x2B,
-	0xFF, 0x35, 0xFF, 0x27, 0xFF, 0x2E, 0xFF, 0x21, 0xFF, 0x18, 0xFF, 0x21,
-	0xFF, 0x20, 0xFF, 0x0F, 0xFF, 0x21, 0xFF, 0x1A, 0xFF, 0x10, 0xFF, 0x09,
-	0xFF, 0x1E, 0xFF, 0x19, 0xFF, 0x21, 0xFF, 0x13, 0xFF, 0x1B, 0xFF, 0x18,
-	0xFF, 0x21, 0xFF, 0x0F, 0xFF, 0x1A, 0xFF, 0x16, 0xFF, 0x21, 0xFF, 0x1B,
-	0xFF, 0x1B, 0xFF, 0x23, 0xFF, 0x1A, 0xFF, 0x21, 0xFF, 0x26, 0xFF, 0x23,
-	0xFF, 0x26, 0xFF, 0x27, 0xFF, 0x30, 0xFF, 0x27, 0xFF, 0x2F, 0xFF, 0x28,
-	0xFF, 0x2C, 0xFF, 0x27, 0xFF, 0x33, 0xFF, 0x29, 0xFF, 0x33, 0xFF, 0x3A,
-	0xFF, 0x42, 0xFF, 0x3B, 0xFF, 0x4D, 0xFF, 0x4B, 0xFF, 0x4D, 0xFF, 0x4A,
-	0xFF, 0x67, 0xFF, 0x77, 0xFF, 0x73, 0xFF, 0x7B, 0xFF, 0xDE, 0xFF, 0xAD,
-	0x00, 0x4A, 0x00, 0x63, 0xEC, 0x8C, 0x03, 0xBB, 0x0E, 0xE4, 0x08, 0xF2,
-	0x00, 0x70, 0xE3, 0xD1, 0xE5, 0xE4, 0x01, 0x6E, 0x0A, 0x67, 0x1C, 0x74,
-	0xF8, 0x8E, 0x10, 0x7B, 0xEA, 0x3C, 0x09, 0x87, 0x1B, 0x24, 0xEF, 0x05,
-	0x17, 0x76, 0x0D, 0x5B, 0x02, 0x43, 0xF5, 0xEF, 0x0C, 0x1D, 0xF7, 0x61,
-	0x05, 0x95, 0x0B, 0xC2, 0xF1, 0x69, 0x1A, 0xA1, 0xEC, 0x75, 0xF4, 0x11,
-	0x13, 0x4F, 0x13, 0x71, 0xFA, 0x33, 0xEC, 0x32, 0xC8, 0xCF, 0x05, 0xB0,
-	0x0B, 0x61, 0x33, 0x19, 0xCE, 0x37, 0xEF, 0xD4, 0x21, 0x9D, 0xFA, 0xAE,
-} ;
-
-static void rw_test (const char *filename) ;
-
-int
-main (void)
-{	const char *filename = "rw.aifc" ;
-
-	print_test_name ("aiff_rw_test", filename) ;
-
-	dump_data_to_file (filename, aifc_data, sizeof (aifc_data)) ;
-
-	rw_test (filename) ;
-
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-rw_test (const char *filename)
-{	SNDFILE *file ;
-	SF_INFO	sfinfo_rd, sfinfo_rw ;
-
-	memset (&sfinfo_rd, 0, sizeof (sfinfo_rd)) ;
-	memset (&sfinfo_rw, 0, sizeof (sfinfo_rw)) ;
-
-	/* Open the file in read only mode and fill in the SF_INFO struct. */
-	if ((file = sf_open (filename, SFM_READ, &sfinfo_rd)) == NULL)
-	{	printf ("\n\nLine %d : sf_open SFM_READ failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	/* Now open read/write and close the file. */
-	if ((file = sf_open (filename, SFM_RDWR, &sfinfo_rw)) == NULL)
-	{	printf ("\n\nLine %d : sf_open SFM_RDWR failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	/* Open again as read only again and fill in a new SF_INFO struct.  */
-	memset (&sfinfo_rw, 0, sizeof (sfinfo_rw)) ;
-	if ((file = sf_open (filename, SFM_READ, &sfinfo_rw)) == NULL)
-	{	printf ("\n\nLine %d : sf_open SFM_RDWR failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	/* Now compare the two. */
-	if (sfinfo_rd.format != sfinfo_rw.format)
-	{	printf ("\n\nLine %d : format mismatch (0x%08X != 0x%08X).\n\n", __LINE__,
-			sfinfo_rd.format, sfinfo_rw.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo_rd.channels != sfinfo_rw.channels)
-	{	printf ("\n\nLine %d : channel count mismatch (%d != %d).\n\n", __LINE__,
-			sfinfo_rd.channels, sfinfo_rw.channels) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo_rd.frames != sfinfo_rw.frames)
-	{	printf ("\n\nLine %d : frame count mismatch (rd %" PRId64 " != rw %" PRId64 ").\n\n", __LINE__,
-			sfinfo_rd.frames, sfinfo_rw.frames) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* rw_test */
-
diff --git a/libs/libsndfile/tests/alaw_test.c b/libs/libsndfile/tests/alaw_test.c
deleted file mode 100644
index 6d71ffed98..0000000000
--- a/libs/libsndfile/tests/alaw_test.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(65536)
-
-static unsigned char	alaw_encode (int sample) ;
-static int				alaw_decode (unsigned int alawbyte) ;
-
-static	short			short_buffer [BUFFER_SIZE] ;
-static	unsigned char	alaw_buffer [BUFFER_SIZE] ;
-
-int
-main (void)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	const char	*filename ;
-	int			k ;
-
-	print_test_name ("alaw_test", "encoder") ;
-
-	filename = "test.raw" ;
-
-	sf_info_setup (&sfinfo, SF_FORMAT_RAW | SF_FORMAT_ALAW, 44100, 1) ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("sf_open_write failed with error : ") ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	/* Generate a file containing all possible 16 bit sample values
-	** and write it to disk as alaw encoded.frames.
-	*/
-
-	for (k = 0 ; k < 0x10000 ; k++)
-		short_buffer [k] = k & 0xFFFF ;
-
-	sf_write_short (file, short_buffer, BUFFER_SIZE) ;
-	sf_close (file) ;
-
-	/* Now open that file and compare the alaw encoded sample values
-	** with what they should be.
-	*/
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sf_read_raw (file, alaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
-	{	printf ("sf_read_raw : ") ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < 0x10000 ; k++)
-		if (alaw_encode (short_buffer [k]) != alaw_buffer [k])
-		{	printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, alaw_buffer [k], alaw_encode (short_buffer [k])) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	print_test_name ("alaw_test", "decoder") ;
-	/* Now generate a file containing all possible 8 bit encoded
-	** sample values and write it to disk as alaw encoded.frames.
-	*/
-
-	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < 256 ; k++)
-		alaw_buffer [k] = k & 0xFF ;
-
-	sf_write_raw (file, alaw_buffer, 256) ;
-	sf_close (file) ;
-
-	/* Now open that file and compare the alaw decoded sample values
-	** with what they should be.
-	*/
-
-	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sf_read_short (file, short_buffer, 256) != 256)
-	{	printf ("sf_read_short : ") ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-
-	for (k = 0 ; k < 256 ; k++)
-		if (short_buffer [k] != alaw_decode (alaw_buffer [k]))
-		{	printf ("Decoder error : sample #%d (0x%02X should be 0x%02X)\n", k, short_buffer [k], alaw_decode (alaw_buffer [k])) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-
-	return 0 ;
-} /* main */
-
-
-/*=================================================================================
-**	The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
-**
-**	This code is not compiled into libsndfile. It is only used to test the
-**	libsndfile lookup tables for correctness.
-**
-**	I have included the original authors comments.
-*/
-
-/*
-** A-law routines by Graeme W. Gill.
-** Date: 93/5/7
-**
-** References:
-** 1) CCITT Recommendation G.711
-**
-*/
-
-#define ACLIP 31744
-
-static
-unsigned char alaw_encode (int sample)
-{	static int exp_lut [128] =
-	{	1, 1, 2, 2, 3, 3, 3, 3,
-		4, 4, 4, 4, 4, 4, 4, 4,
-		5, 5, 5, 5, 5, 5, 5, 5,
-		5, 5, 5, 5, 5, 5, 5, 5,
-		6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7
-		} ;
-
-	int sign, exponent, mantissa ;
-	unsigned char Alawbyte ;
-
-	/* Get the sample into sign-magnitude. */
-	sign = ((~sample) >> 8) & 0x80 ;			/* set aside the sign */
-	if (sign == 0)
-		sample = -sample ;		/* get magnitude */
-	if (sample > ACLIP)
-		sample = ACLIP ;						/* clip the magnitude */
-
-	/* Convert from 16 bit linear to ulaw. */
-	if (sample >= 256)
-	{	exponent = exp_lut [(sample >> 8) & 0x7F] ;
-		mantissa = (sample >> (exponent + 3)) & 0x0F ;
-		Alawbyte = ((exponent << 4) | mantissa) ;
-		}
-	else
-		Alawbyte = (sample >> 4) ;
-
-	Alawbyte ^= (sign ^ 0x55) ;
-
-	return Alawbyte ;
-} /* alaw_encode */
-
-static
-int alaw_decode (unsigned int Alawbyte)
-{	static int exp_lut [8] = { 0, 264, 528, 1056, 2112, 4224, 8448, 16896 } ;
-	int sign, exponent, mantissa, sample ;
-
-	Alawbyte ^= 0x55 ;
-	sign = (Alawbyte & 0x80) ;
-	Alawbyte &= 0x7f ;			/* get magnitude */
-	if (Alawbyte >= 16)
-	{	exponent = (Alawbyte >> 4) & 0x07 ;
-		mantissa = Alawbyte & 0x0F ;
-		sample = exp_lut [exponent] + (mantissa << (exponent + 3)) ;
-		}
-	else
-		sample = (Alawbyte << 4) + 8 ;
-	if (sign == 0)
-		sample = -sample ;
-
-	return sample ;
-} /* alaw_decode */
-
diff --git a/libs/libsndfile/tests/benchmark-0.0.28 b/libs/libsndfile/tests/benchmark-0.0.28
deleted file mode 100644
index 2d2b06f9bc..0000000000
--- a/libs/libsndfile/tests/benchmark-0.0.28
+++ /dev/null
@@ -1,40 +0,0 @@
-erikd@coltrane > tests/benchmark 
-Benchmarking libsndfile-0.0.28
-------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   30660117 samples per sec
-    Raw read  PCM_16  :   62788982 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.37% of raw write
-    Read  short  from PCM_16 :  83.17% of raw read
-    Write int     to  PCM_24 :  30.78% of raw write
-    Read  int    from PCM_24 :  32.96% of raw read
-    Write int     to  PCM_32 :  42.05% of raw write
-    Read  int    from PCM_32 :  41.11% of raw read
-    Write float   to  PCM_16 :  17.75% of raw write
-    Read  float  from PCM_16 :  43.27% of raw read
-    Write float   to  PCM_24 :  15.30% of raw write
-    Read  float  from PCM_24 :  28.09% of raw read
-    Write float   to  PCM_32 :  14.55% of raw write
-    Read  float  from PCM_32 :  34.65% of raw read
-    Write float   to  FLOAT  :  28.98% of raw write
-    Read  float  from FLOAT  :  56.71% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  43.39% of raw write
-    Read  short  from PCM_16 :  49.12% of raw read
-    Write int     to  PCM_24 :  29.65% of raw write
-    Read  int    from PCM_24 :  33.66% of raw read
-    Write int     to  PCM_32 :  19.62% of raw write
-    Read  int    from PCM_32 :  21.97% of raw read
-    Write float   to  PCM_16 :  17.63% of raw write
-    Read  float  from PCM_16 :  31.43% of raw read
-    Write float   to  PCM_24 :  14.91% of raw write
-    Read  float  from PCM_24 :  27.99% of raw read
-    Write float   to  PCM_32 :  13.69% of raw write
-    Read  float  from PCM_32 :  22.23% of raw read
-    Write float   to  FLOAT  :  19.25% of raw write
-    Read  float  from FLOAT  :  25.66% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.0 b/libs/libsndfile/tests/benchmark-1.0.0
deleted file mode 100644
index 2922836419..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.0
+++ /dev/null
@@ -1,35 +0,0 @@
-Benchmarking libsndfile-1.0.0
------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31084269 samples per sec
-    Raw read  PCM_16  :   63597065 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.19% of raw write
-    Read  short  from PCM_16 :  82.93% of raw read
-    Write int     to  PCM_24 :  31.12% of raw write
-    Read  int    from PCM_24 :  37.90% of raw read
-    Write float   to  PCM_16 :  37.00% of raw write
-    Read  float  from PCM_16 :  45.53% of raw read
-    Write float   to  PCM_24 :  29.08% of raw write
-    Read  float  from PCM_24 :  28.48% of raw read
-    Write float   to  PCM_32 :  22.08% of raw write
-    Read  float  from PCM_32 :  31.21% of raw read
-    Write float   to  FLOAT  :  28.70% of raw write
-    Read  float  from FLOAT  :  56.32% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  22.08% of raw write
-    Read  short  from PCM_16 :  23.20% of raw read
-    Write int     to  PCM_24 :  30.96% of raw write
-    Read  int    from PCM_24 :  37.76% of raw read
-    Write float   to  PCM_16 :  35.82% of raw write
-    Read  float  from PCM_16 :  22.61% of raw read
-    Write float   to  PCM_24 :  27.70% of raw write
-    Read  float  from PCM_24 :  28.37% of raw read
-    Write float   to  PCM_32 :  20.77% of raw write
-    Read  float  from PCM_32 :  23.46% of raw read
-    Write float   to  FLOAT  :  15.03% of raw write
-    Read  float  from FLOAT  :  15.43% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.0rc2 b/libs/libsndfile/tests/benchmark-1.0.0rc2
deleted file mode 100644
index 770224672f..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.0rc2
+++ /dev/null
@@ -1,31 +0,0 @@
-Benchmarking libsndfile-1.0.0rc2
---------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31638069 samples per sec
-    Raw read  PCM_16  :   62788982 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  82.37% of raw write
-    Read  short  from PCM_16 :  82.17% of raw read
-    Write int     to  PCM_24 :  30.80% of raw write
-    Read  int    from PCM_24 :  37.95% of raw read
-    Write float   to  PCM_16 :  36.22% of raw write
-    Read  float  from PCM_16 :  23.32% of raw read
-    Write float   to  PCM_24 :  28.41% of raw write
-    Read  float  from PCM_24 :  28.41% of raw read
-    Write float   to  FLOAT  :  28.41% of raw write
-    Read  float  from FLOAT  :  57.50% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  21.73% of raw write
-    Read  short  from PCM_16 :  23.37% of raw read
-    Write int     to  PCM_24 :  31.02% of raw write
-    Read  int    from PCM_24 :  38.24% of raw read
-    Write float   to  PCM_16 :  35.51% of raw write
-    Read  float  from PCM_16 :  19.16% of raw read
-    Write float   to  PCM_24 :  27.37% of raw write
-    Read  float  from PCM_24 :  28.74% of raw read
-    Write float   to  FLOAT  :  15.11% of raw write
-    Read  float  from FLOAT  :  15.60% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix b/libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix
deleted file mode 100644
index 951bc56d25..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix
+++ /dev/null
@@ -1,38 +0,0 @@
-Benchmarking libsndfile-1.0.18pre15
------------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :  103189885 samples per sec
-    Raw read  PCM_16  :  660854036 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  95.08% of raw write
-    Read  short  from PCM_16 :  96.39% of raw read
-    Write int     to  PCM_24 :  54.55% of raw write
-    Read  int    from PCM_24 :  28.50% of raw read
-    Write int     to  PCM_32 :  46.97% of raw write
-    Read  int    from PCM_32 :  39.98% of raw read
-    Write float   to  PCM_16 :  60.85% of raw write
-    Read  float  from PCM_16 :  27.79% of raw read
-    Write float   to  PCM_24 :  46.23% of raw write
-    Read  float  from PCM_24 :  22.62% of raw read
-    Write float   to  PCM_32 :  35.38% of raw write
-    Read  float  from PCM_32 :  24.18% of raw read
-    Write float   to  FLOAT  :  47.73% of raw write
-    Read  float  from FLOAT  :  40.62% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  79.98% of raw write
-    Read  short  from PCM_16 :  49.27% of raw read
-    Write int     to  PCM_24 :  53.80% of raw write
-    Read  int    from PCM_24 :  28.50% of raw read
-    Write int     to  PCM_32 :  41.68% of raw write
-    Read  int    from PCM_32 :  25.89% of raw read
-    Write float   to  PCM_16 :  61.03% of raw write
-    Read  float  from PCM_16 :  27.74% of raw read
-    Write float   to  PCM_24 :  45.10% of raw write
-    Read  float  from PCM_24 :  22.43% of raw read
-    Write float   to  PCM_32 :  35.24% of raw write
-    Read  float  from PCM_32 :  22.37% of raw read
-    Write float   to  FLOAT  :  42.01% of raw write
-    Read  float  from FLOAT  :  28.98% of raw read
diff --git a/libs/libsndfile/tests/benchmark-1.0.18pre16-mingus b/libs/libsndfile/tests/benchmark-1.0.18pre16-mingus
deleted file mode 100644
index fa0584e149..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.18pre16-mingus
+++ /dev/null
@@ -1,38 +0,0 @@
-Benchmarking libsndfile-1.0.18pre15
------------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :  178237074 samples per sec
-    Raw read  PCM_16  :  368885269 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  98.84% of raw write
-    Read  short  from PCM_16 : 147.10% of raw read
-    Write int     to  PCM_24 :  33.74% of raw write
-    Read  int    from PCM_24 :  30.82% of raw read
-    Write int     to  PCM_32 :  48.34% of raw write
-    Read  int    from PCM_32 :  62.43% of raw read
-    Write float   to  PCM_16 :  41.86% of raw write
-    Read  float  from PCM_16 :  36.73% of raw read
-    Write float   to  PCM_24 :  28.38% of raw write
-    Read  float  from PCM_24 :  19.50% of raw read
-    Write float   to  PCM_32 :  23.68% of raw write
-    Read  float  from PCM_32 :  28.76% of raw read
-    Write float   to  FLOAT  :  47.21% of raw write
-    Read  float  from FLOAT  :  60.85% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  54.94% of raw write
-    Read  short  from PCM_16 :  59.03% of raw read
-    Write int     to  PCM_24 :  33.40% of raw write
-    Read  int    from PCM_24 :  31.98% of raw read
-    Write int     to  PCM_32 :  30.89% of raw write
-    Read  int    from PCM_32 :  33.68% of raw read
-    Write float   to  PCM_16 :  41.61% of raw write
-    Read  float  from PCM_16 :  26.76% of raw read
-    Write float   to  PCM_24 :  25.75% of raw write
-    Read  float  from PCM_24 :  19.84% of raw read
-    Write float   to  PCM_32 :  21.29% of raw write
-    Read  float  from PCM_32 :  21.78% of raw read
-    Write float   to  FLOAT  :  30.82% of raw write
-    Read  float  from FLOAT  :  35.04% of raw read
diff --git a/libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane b/libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane
deleted file mode 100644
index 12f71a8a78..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane
+++ /dev/null
@@ -1,39 +0,0 @@
-Benchmarking libsndfile-1.0.6pre10
-----------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   28845961 samples per sec
-    Raw read  PCM_16  :   63471874 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  86.21% of raw write
-    Read  short  from PCM_16 :  82.60% of raw read
-    Write int     to  PCM_24 :  34.89% of raw write
-    Read  int    from PCM_24 :  37.26% of raw read
-    Write int     to  PCM_32 :  43.36% of raw write
-    Read  int    from PCM_32 :  41.30% of raw read
-    Write float   to  PCM_16 :  43.02% of raw write
-    Read  float  from PCM_16 :  43.99% of raw read
-    Write float   to  PCM_24 :  32.72% of raw write
-    Read  float  from PCM_24 :  28.21% of raw read
-    Write float   to  PCM_32 :  25.92% of raw write
-    Read  float  from PCM_32 :  30.98% of raw read
-    Write float   to  FLOAT  :  46.65% of raw write
-    Read  float  from FLOAT  :  56.66% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  54.53% of raw write
-    Read  short  from PCM_16 :  56.32% of raw read
-    Write int     to  PCM_24 :  35.28% of raw write
-    Read  int    from PCM_24 :  37.33% of raw read
-    Write int     to  PCM_32 :  26.21% of raw write
-    Read  int    from PCM_32 :  23.51% of raw read
-    Write float   to  PCM_16 :  41.39% of raw write
-    Read  float  from PCM_16 :  23.56% of raw read
-    Write float   to  PCM_24 :  30.86% of raw write
-    Read  float  from PCM_24 :  28.27% of raw read
-    Write float   to  PCM_32 :  23.83% of raw write
-    Read  float  from PCM_32 :  20.54% of raw read
-    Write float   to  FLOAT  :  27.26% of raw write
-    Read  float  from FLOAT  :  29.04% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.6pre10-miles b/libs/libsndfile/tests/benchmark-1.0.6pre10-miles
deleted file mode 100644
index fffdb84630..0000000000
--- a/libs/libsndfile/tests/benchmark-1.0.6pre10-miles
+++ /dev/null
@@ -1,39 +0,0 @@
-Benchmarking libsndfile-1.0.6pre10
-----------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   40092612 samples per sec
-    Raw read  PCM_16  :   42382563 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  61.90% of raw write
-    Read  short  from PCM_16 : 100.20% of raw read
-    Write int     to  PCM_24 :  28.69% of raw write
-    Read  int    from PCM_24 :  33.62% of raw read
-    Write int     to  PCM_32 :  31.14% of raw write
-    Read  int    from PCM_32 :  51.04% of raw read
-    Write float   to  PCM_16 :  25.57% of raw write
-    Read  float  from PCM_16 :  28.17% of raw read
-    Write float   to  PCM_24 :  23.59% of raw write
-    Read  float  from PCM_24 :  24.14% of raw read
-    Write float   to  PCM_32 :  18.00% of raw write
-    Read  float  from PCM_32 :  22.59% of raw read
-    Write float   to  FLOAT  :  31.32% of raw write
-    Read  float  from FLOAT  :  51.54% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  42.81% of raw write
-    Read  short  from PCM_16 :  54.58% of raw read
-    Write int     to  PCM_24 :  29.28% of raw write
-    Read  int    from PCM_24 :  33.43% of raw read
-    Write int     to  PCM_32 :  22.21% of raw write
-    Read  int    from PCM_32 :  27.24% of raw read
-    Write float   to  PCM_16 :  25.76% of raw write
-    Read  float  from PCM_16 :  26.84% of raw read
-    Write float   to  PCM_24 :  23.71% of raw write
-    Read  float  from PCM_24 :  24.10% of raw read
-    Write float   to  PCM_32 :  18.47% of raw write
-    Read  float  from PCM_32 :  21.45% of raw read
-    Write float   to  FLOAT  :  22.46% of raw write
-    Read  float  from FLOAT  :  29.72% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-latest-coltrane b/libs/libsndfile/tests/benchmark-latest-coltrane
deleted file mode 100644
index 97ce29a8a9..0000000000
--- a/libs/libsndfile/tests/benchmark-latest-coltrane
+++ /dev/null
@@ -1,75 +0,0 @@
-erikd@coltrane > cat tests/benchmark-0.0.28         
-Benchmarking libsndfile-0.0.28
-------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31022959 samples per sec
-    Raw read  PCM_16  :   63471874 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.19% of raw write
-    Read  short  from PCM_16 :  82.28% of raw read
-    Write int     to  PCM_24 :  30.81% of raw write
-    Read  int    from PCM_24 :  32.92% of raw read
-    Write float   to  PCM_16 :  17.70% of raw write
-    Read  float  from PCM_16 :  43.64% of raw read
-    Write float   to  PCM_24 :  15.09% of raw write
-    Read  float  from PCM_24 :  27.79% of raw read
-    Write float   to  PCM_32 :  14.32% of raw write
-    Read  float  from PCM_32 :  34.42% of raw read
-    Write float   to  FLOAT  :  28.64% of raw write
-    Read  float  from FLOAT  :  56.77% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  44.04% of raw write
-    Read  short  from PCM_16 :  49.46% of raw read
-    Write int     to  PCM_24 :  28.92% of raw write
-    Read  int    from PCM_24 :  33.10% of raw read
-    Write float   to  PCM_16 :  17.30% of raw write
-    Read  float  from PCM_16 :  31.46% of raw read
-    Write float   to  PCM_24 :  14.62% of raw write
-    Read  float  from PCM_24 :  27.64% of raw read
-    Write float   to  PCM_32 :  13.65% of raw write
-    Read  float  from PCM_32 :  22.41% of raw read
-    Write float   to  FLOAT  :  19.13% of raw write
-    Read  float  from FLOAT  :  26.21% of raw read
-
-erikd@coltrane > tests/benchmark 
-Benchmarking libsndfile-1.0.0
------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   29884416 samples per sec
-    Raw read  PCM_16  :   63347175 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  88.24% of raw write
-    Read  short  from PCM_16 :  82.76% of raw read
-    Write int     to  PCM_24 :  34.95% of raw write
-    Read  int    from PCM_24 :  37.17% of raw read
-    Write int     to  PCM_32 :  43.86% of raw write
-    Read  int    from PCM_32 :  41.22% of raw read
-    Write float   to  PCM_16 :  42.07% of raw write
-    Read  float  from PCM_16 :  44.25% of raw read
-    Write float   to  PCM_24 :  32.43% of raw write
-    Read  float  from PCM_24 :  28.93% of raw read
-    Write float   to  PCM_32 :  25.60% of raw write
-    Read  float  from PCM_32 :  31.10% of raw read
-    Write float   to  FLOAT  :  45.55% of raw write
-    Read  float  from FLOAT  :  57.41% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  43.46% of raw write
-    Read  short  from PCM_16 :  43.99% of raw read
-    Write int     to  PCM_24 :  35.09% of raw write
-    Read  int    from PCM_24 :  37.34% of raw read
-    Write int     to  PCM_32 :  24.05% of raw write
-    Read  int    from PCM_32 :  19.74% of raw read
-    Write float   to  PCM_16 :  40.25% of raw write
-    Read  float  from PCM_16 :  32.15% of raw read
-    Write float   to  PCM_24 :  31.02% of raw write
-    Read  float  from PCM_24 :  28.82% of raw read
-    Write float   to  PCM_32 :  23.54% of raw write
-    Read  float  from PCM_32 :  23.65% of raw read
-    Write float   to  FLOAT  :  24.87% of raw write
-    Read  float  from FLOAT  :  20.28% of raw read
diff --git a/libs/libsndfile/tests/benchmark.c b/libs/libsndfile/tests/benchmark.c
deleted file mode 100644
index f33bfee43b..0000000000
--- a/libs/libsndfile/tests/benchmark.c
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-/*
-**	Neat solution to the Win32/OS2 binary file flage requirement.
-**	If O_BINARY isn't already defined by the inclusion of the system
-**	headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#define	WRITE_FLAGS	(O_WRONLY | O_CREAT | O_TRUNC | O_BINARY)
-#define	READ_FLAGS	(O_RDONLY | O_BINARY)
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__OS2__))
-	#define WRITE_PERMS	0777
-#else
-	#define WRITE_PERMS	(S_IRUSR | S_IWUSR | S_IRGRP)
-#endif
-
-#define	BUFFER_SIZE		(1<<18)
-#define	BLOCK_COUNT		(30)
-#define	TEST_DURATION	(5)		/* 5 Seconds. */
-
-typedef struct
-{	double	write_rate ;
-	double	read_rate ;
-} PERF_STATS ;
-
-static void	*data = NULL ;
-
-static void calc_raw_performance (PERF_STATS *stats) ;
-
-static void	calc_short_performance (int format, double read_rate, double write_rate) ;
-static void	calc_int_performance (int format, double read_rate, double write_rate) ;
-static void	calc_float_performance (int format, double read_rate, double write_rate) ;
-
-
-static int cpu_is_big_endian (void) ;
-
-static const char* get_subtype_str (int subtype) ;
-
-int
-main (int argc, char *argv [])
-{	PERF_STATS	stats ;
-	char		buffer [256] = "Benchmarking " ;
-	int			format_major ;
-
-	if (! (data = malloc (BUFFER_SIZE * sizeof (double))))
-	{	perror ("Error : malloc failed") ;
-		exit (1) ;
-		} ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer + strlen (buffer), sizeof (buffer) - strlen (buffer)) ;
-
-	puts (buffer) ;
-	memset (buffer, '-', strlen (buffer)) ;
-	puts (buffer) ;
-	printf ("Each test takes a little over %d seconds.\n\n", TEST_DURATION) ;
-
-	calc_raw_performance (&stats) ;
-
-	if (argc < 2 || strcmp ("--native-only", argv [1]) == 0)
-	{	puts ("\nNative endian I/O :") ;
-		format_major = cpu_is_big_endian () ? SF_FORMAT_AIFF : SF_FORMAT_WAV ;
-
-		calc_short_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-		} ;
-
-	if (argc < 2 || strcmp ("--swap-only", argv [1]) == 0)
-	{	puts ("\nEndian swapped I/O :") ;
-		format_major = cpu_is_big_endian () ? SF_FORMAT_WAV : SF_FORMAT_AIFF ;
-
-		calc_short_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-		} ;
-
-	puts ("") ;
-
-	free (data) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-calc_raw_performance (PERF_STATS *stats)
-{	clock_t start_clock, clock_time ;
-	int fd, k, byte_count, retval, op_count ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-
-	byte_count = BUFFER_SIZE * sizeof (short) ;
-
-	/* Collect write stats */
-	printf ("    Raw write PCM_16  : ") ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if ((fd = open (filename, WRITE_FLAGS, WRITE_PERMS)) < 0)
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = write (fd, data, byte_count)) != byte_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		close (fd) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	stats->write_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	stats->write_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%10.0f samples per sec\n", stats->write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Raw read  PCM_16  : ") ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if ((fd = open (filename, READ_FLAGS)) < 0)
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = read (fd, data, byte_count)) != byte_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		close (fd) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	stats->read_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	stats->read_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%10.0f samples per sec\n", stats->read_rate) ;
-
-	unlink (filename) ;
-} /* calc_raw_performance */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-calc_short_performance (int format, double read_rate, double write_rate)
-{	SNDFILE *file ;
-	SF_INFO	sfinfo ;
-	clock_t start_clock, clock_time ;
-	double	performance ;
-	int k, item_count, retval, op_count ;
-	const char* subtype ;
-	short *short_data ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-	subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-	short_data = data ;
-	item_count = BUFFER_SIZE ;
-	for (k = 0 ; k < item_count ; k++)
-		short_data [k] = 32700.0 * sin (2 * M_PI * k / 32000.0) ;
-
-	/* Collect write stats */
-	printf ("    Write %-5s   to  %s : ", "short", subtype) ;
-	fflush (stdout) ;
-
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-	sfinfo.frames = 1 ;
-	sfinfo.samplerate = 32000 ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		/* Turn off the addition of a PEAK chunk. */
-		sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_write_short (file, short_data, item_count)) != item_count)
-			{	printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Read  %-5s  from %s : ", "short", subtype) ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_read_short (file, short_data, item_count)) != item_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-	unlink (filename) ;
-
-} /* calc_short_performance */
-static void
-calc_int_performance (int format, double read_rate, double write_rate)
-{	SNDFILE *file ;
-	SF_INFO	sfinfo ;
-	clock_t start_clock, clock_time ;
-	double	performance ;
-	int k, item_count, retval, op_count ;
-	const char* subtype ;
-	int *int_data ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-	subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-	int_data = data ;
-	item_count = BUFFER_SIZE ;
-	for (k = 0 ; k < item_count ; k++)
-		int_data [k] = 32700.0 * (1<<16) * sin (2 * M_PI * k / 32000.0) ;
-
-	/* Collect write stats */
-	printf ("    Write %-5s   to  %s : ", "int", subtype) ;
-	fflush (stdout) ;
-
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-	sfinfo.frames = 1 ;
-	sfinfo.samplerate = 32000 ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		/* Turn off the addition of a PEAK chunk. */
-		sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_write_int (file, int_data, item_count)) != item_count)
-			{	printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Read  %-5s  from %s : ", "int", subtype) ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_read_int (file, int_data, item_count)) != item_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-	unlink (filename) ;
-
-} /* calc_int_performance */
-static void
-calc_float_performance (int format, double read_rate, double write_rate)
-{	SNDFILE *file ;
-	SF_INFO	sfinfo ;
-	clock_t start_clock, clock_time ;
-	double	performance ;
-	int k, item_count, retval, op_count ;
-	const char* subtype ;
-	float *float_data ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-	subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-	float_data = data ;
-	item_count = BUFFER_SIZE ;
-	for (k = 0 ; k < item_count ; k++)
-		float_data [k] = 1.0 * sin (2 * M_PI * k / 32000.0) ;
-
-	/* Collect write stats */
-	printf ("    Write %-5s   to  %s : ", "float", subtype) ;
-	fflush (stdout) ;
-
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-	sfinfo.frames = 1 ;
-	sfinfo.samplerate = 32000 ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		/* Turn off the addition of a PEAK chunk. */
-		sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_write_float (file, float_data, item_count)) != item_count)
-			{	printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Read  %-5s  from %s : ", "float", subtype) ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_read_float (file, float_data, item_count)) != item_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-	unlink (filename) ;
-
-} /* calc_float_performance */
-
-
-/*==============================================================================
-*/
-
-static int
-cpu_is_big_endian (void)
-{	unsigned char 	*cptr ;
-	int 			endtest ;
-
-	endtest = 0x12345678 ;
-
-	cptr = (unsigned char*) (&endtest) ;
-
-	if (cptr [0] == 0x12 && cptr [1] == 0x34 && cptr [3] == 0x78)
-		return SF_TRUE ;
-
-	return SF_FALSE ;
-} /* cpu_is_big_endian */
-
-static const char*
-get_subtype_str (int subtype)
-{	switch (subtype)
-	{	case SF_FORMAT_PCM_16 :
-				return "PCM_16" ;
-
-		case SF_FORMAT_PCM_24 :
-				return "PCM_24" ;
-
-		case SF_FORMAT_PCM_32 :
-				return "PCM_32" ;
-
-		case SF_FORMAT_FLOAT :
-				return "FLOAT " ;
-
-		case SF_FORMAT_DOUBLE :
-				return "DOUBLE" ;
-
-		default : break ;
-		} ;
-
-	return "UNKNOWN" ;
-} /* get_subtype_str */
-
diff --git a/libs/libsndfile/tests/benchmark.def b/libs/libsndfile/tests/benchmark.def
deleted file mode 100644
index 382bf3b1a6..0000000000
--- a/libs/libsndfile/tests/benchmark.def
+++ /dev/null
@@ -1,17 +0,0 @@
-autogen definitions benchmark.tpl;
-
-data_type = {
-	type_name		= short ;
-	multiplier		= "32700.0" ;
-	};
-
-data_type = {
-	type_name		= int ;
-	multiplier		= "32700.0 * (1 << 16)" ;
-	};
-
-data_type = {
-	type_name		= float ;
-	multiplier		= "1.0" ;
-	};
-
diff --git a/libs/libsndfile/tests/benchmark.tpl b/libs/libsndfile/tests/benchmark.tpl
deleted file mode 100644
index 14b22e2e22..0000000000
--- a/libs/libsndfile/tests/benchmark.tpl
+++ /dev/null
@@ -1,360 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-/*
-**	Neat solution to the Win32/OS2 binary file flage requirement.
-**	If O_BINARY isn't already defined by the inclusion of the system
-**	headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#define	WRITE_FLAGS	(O_WRONLY | O_CREAT | O_TRUNC | O_BINARY)
-#define	READ_FLAGS	(O_RDONLY | O_BINARY)
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__OS2__))
-	#define WRITE_PERMS	0777
-#else
-	#define WRITE_PERMS	(S_IRUSR | S_IWUSR | S_IRGRP)
-#endif
-
-#define	BUFFER_SIZE		(1 << 18)
-#define	BLOCK_COUNT		(30)
-#define	TEST_DURATION	(5)		/* 5 Seconds. */
-
-typedef struct
-{	double	write_rate ;
-	double	read_rate ;
-} PERF_STATS ;
-
-static void	*data = NULL ;
-
-static void calc_raw_performance (PERF_STATS *stats) ;
-
-[+ FOR data_type
-+]static void	calc_[+ (get "type_name") +]_performance (int format, double read_rate, double write_rate) ;
-[+ ENDFOR data_type
-+]
-
-static int cpu_is_big_endian (void) ;
-
-static const char* get_subtype_str (int subtype) ;
-
-int
-main (int argc, char *argv [])
-{	PERF_STATS	stats ;
-	char		buffer [256] = "Benchmarking " ;
-	int			format_major ;
-
-	if (! (data = malloc (BUFFER_SIZE * sizeof (double))))
-	{	perror ("Error : malloc failed") ;
-		exit (1) ;
-		} ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, buffer + strlen (buffer), sizeof (buffer) - strlen (buffer)) ;
-
-	puts (buffer) ;
-	memset (buffer, '-', strlen (buffer)) ;
-	puts (buffer) ;
-	printf ("Each test takes a little over %d seconds.\n\n", TEST_DURATION) ;
-
-	calc_raw_performance (&stats) ;
-
-	if (argc < 2 || strcmp ("--native-only", argv [1]) == 0)
-	{	puts ("\nNative endian I/O :") ;
-		format_major = cpu_is_big_endian () ? SF_FORMAT_AIFF : SF_FORMAT_WAV ;
-
-		calc_short_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-		} ;
-
-	if (argc < 2 || strcmp ("--swap-only", argv [1]) == 0)
-	{	puts ("\nEndian swapped I/O :") ;
-		format_major = cpu_is_big_endian () ? SF_FORMAT_WAV : SF_FORMAT_AIFF ;
-
-		calc_short_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_int_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-		calc_float_performance	(format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-		} ;
-
-	puts ("") ;
-
-	free (data) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-calc_raw_performance (PERF_STATS *stats)
-{	clock_t start_clock, clock_time ;
-	int fd, k, byte_count, retval, op_count ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-
-	byte_count = BUFFER_SIZE * sizeof (short) ;
-
-	/* Collect write stats */
-	printf ("    Raw write PCM_16  : ") ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if ((fd = open (filename, WRITE_FLAGS, WRITE_PERMS)) < 0)
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = write (fd, data, byte_count)) != byte_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		close (fd) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	stats->write_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	stats->write_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%10.0f samples per sec\n", stats->write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Raw read  PCM_16  : ") ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if ((fd = open (filename, READ_FLAGS)) < 0)
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = read (fd, data, byte_count)) != byte_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		close (fd) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	stats->read_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	stats->read_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%10.0f samples per sec\n", stats->read_rate) ;
-
-	unlink (filename) ;
-} /* calc_raw_performance */
-
-/*------------------------------------------------------------------------------
-*/
-
-[+ FOR data_type
-+]static void
-calc_[+ (get "type_name") +]_performance (int format, double read_rate, double write_rate)
-{	SNDFILE *file ;
-	SF_INFO	sfinfo ;
-	clock_t start_clock, clock_time ;
-	double	performance ;
-	int k, item_count, retval, op_count ;
-	const char* subtype ;
-	[+ (get "type_name") +] *[+ (get "type_name") +]_data ;
-	const char *filename ;
-
-	filename = "benchmark.dat" ;
-	subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-	[+ (get "type_name") +]_data = data ;
-	item_count = BUFFER_SIZE ;
-	for (k = 0 ; k < item_count ; k++)
-		[+ (get "type_name") +]_data [k] = [+ (get "multiplier") +] * sin (2 * M_PI * k / 32000.0) ;
-
-	/* Collect write stats */
-	printf ("    Write %-5s   to  %s : ", "[+ (get "type_name") +]", subtype) ;
-	fflush (stdout) ;
-
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-	sfinfo.frames = 1 ;
-	sfinfo.samplerate = 32000 ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		/* Turn off the addition of a PEAK chunk. */
-		sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_write_[+ (get "type_name") +] (file, [+ (get "type_name") +]_data, item_count)) != item_count)
-			{	printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-	/* Collect read stats */
-	printf ("    Read  %-5s  from %s : ", "[+ (get "type_name") +]", subtype) ;
-	fflush (stdout) ;
-
-	clock_time = 0 ;
-	op_count = 0 ;
-	start_clock = clock () ;
-
-	while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-	{	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-		{	printf ("Error : not able to open file : %s\n", filename) ;
-			perror ("") ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < BLOCK_COUNT ; k++)
-		{	if ((retval = sf_read_[+ (get "type_name") +] (file, [+ (get "type_name") +]_data, item_count)) != item_count)
-			{	printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-				exit (1) ;
-				} ;
-			} ;
-
-		sf_close (file) ;
-
-		clock_time = clock () - start_clock ;
-		op_count ++ ;
-		} ;
-
-	performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-	performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-	printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-	unlink (filename) ;
-
-} /* calc_[+ (get "type_name") +]_performance */
-[+ ENDFOR data_type
-+]
-
-/*==============================================================================
-*/
-
-static int
-cpu_is_big_endian (void)
-{	unsigned char 	*cptr ;
-	int 			endtest ;
-
-	endtest = 0x12345678 ;
-
-	cptr = (unsigned char*) (&endtest) ;
-
-	if (cptr [0] == 0x12 && cptr [1] == 0x34 && cptr [3] == 0x78)
-		return SF_TRUE ;
-
-	return SF_FALSE ;
-} /* cpu_is_big_endian */
-
-static const char*
-get_subtype_str (int subtype)
-{	switch (subtype)
-	{	case SF_FORMAT_PCM_16 :
-				return "PCM_16" ;
-
-		case SF_FORMAT_PCM_24 :
-				return "PCM_24" ;
-
-		case SF_FORMAT_PCM_32 :
-				return "PCM_32" ;
-
-		case SF_FORMAT_FLOAT :
-				return "FLOAT " ;
-
-		case SF_FORMAT_DOUBLE :
-				return "DOUBLE" ;
-
-		default : break ;
-		} ;
-
-	return "UNKNOWN" ;
-} /* get_subtype_str */
-
diff --git a/libs/libsndfile/tests/channel_test.c b/libs/libsndfile/tests/channel_test.c
deleted file mode 100644
index 8a69734389..0000000000
--- a/libs/libsndfile/tests/channel_test.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1 << 10)
-#define LOG_BUFFER_SIZE	1024
-
-static	void	channel_test			(void) ;
-static	double	max_diff		(const float *a, const float *b, int len) ;
-
-int
-main (void) // int argc, char *argv [])
-{	channel_test () ;
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-channel_test (void)
-{	static float	float_data [1024] ;
-	static float	read_float [1024] ;
-	static int		read_int [1024] ;
-	static short	read_short [1024] ;
-	unsigned int	ch, k ;
-
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.9) ;
-
-	for (ch = 1 ; ch <= 8 ; ch++)
-	{	SNDFILE	*file ;
-		SF_INFO	wsfinfo, rsfinfo ;
-		sf_count_t wframes = ARRAY_LEN (float_data) / ch ;
-		double	maxdiff ;
-		char	filename [256] ;
-
-		snprintf (filename, sizeof (filename), "chan_%d.wav", ch) ;
-		print_test_name (__func__, filename) ;
-
-		sf_info_setup (&wsfinfo, SF_FORMAT_WAV | SF_FORMAT_FLOAT, 48000, ch) ;
-		sf_info_clear (&rsfinfo) ;
-
-		/* Write the test file. */
-		file = test_open_file_or_die (filename, SFM_WRITE, &wsfinfo, SF_FALSE, __LINE__) ;
-		test_writef_float_or_die (file, 0, float_data, wframes, __LINE__) ;
-		sf_close (file) ;
-
-		/* Read it as float and test. */
-		file = test_open_file_or_die (filename, SFM_READ, &rsfinfo, SF_FALSE, __LINE__) ;
-		exit_if_true (rsfinfo.frames == 0,
-				"\n\nLine %d : Frames in file %" PRId64 ".\n\n", __LINE__, rsfinfo.frames) ;
-		exit_if_true (wframes != rsfinfo.frames,
-				"\n\nLine %d : Wrote %" PRId64 ", read %" PRId64 " frames.\n\n", __LINE__, wframes, rsfinfo.frames) ;
-
-		sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-		test_readf_float_or_die (file, 0, read_float, rsfinfo.frames, __LINE__) ;
-		compare_float_or_die (float_data, read_float, ch * rsfinfo.frames, __LINE__) ;
-
-		/* Read it as short and test. */
-		test_seek_or_die (file, 0, SEEK_SET, 0, ch, __LINE__) ;
-		test_readf_short_or_die (file, 0, read_short, rsfinfo.frames, __LINE__) ;
-
-		for (k = 0 ; k < ARRAY_LEN (read_float) ; k++)
-			read_float [k] = read_short [k] * (0.9 / 0x8000) ;
-
-		maxdiff = max_diff (float_data, read_float, ch * rsfinfo.frames) ;
-		exit_if_true (maxdiff > 0.5, "\n\nLine %d : Max diff is %f\n\n", __LINE__, maxdiff) ;
-
-		/* Read it as int and test. */
-		test_seek_or_die (file, 0, SEEK_SET, 0, ch, __LINE__) ;
-		test_readf_int_or_die (file, 0, read_int, rsfinfo.frames, __LINE__) ;
-
-		for (k = 0 ; k < ARRAY_LEN (read_float) ; k++)
-			read_float [k] = read_int [k] * (0.9 / 0x80000000) ;
-
-		maxdiff = max_diff (float_data, read_float, ch * rsfinfo.frames) ;
-		exit_if_true (maxdiff > 0.5, "\n\nLine %d : Max diff is %f\n\n", __LINE__, maxdiff) ;
-
-		sf_close (file) ;
-		unlink (filename) ;
-		printf ("ok\n") ;
-		} ;
-
-	return ;
-} /* channel_test */
-
-static double
-max_diff (const float *a, const float *b, int len)
-{	double mdiff = 0.0, diff ;
-	int k ;
-
-	for (k = 0 ; k < len ; k++)
-	{	diff = fabs (a [k] - b [k]) ;
-		mdiff = diff > mdiff ? diff : mdiff ;
-		// printf ("%4d:     % f        % f          % f          % f\n", k, a [k], b [k], diff, mdiff) ;
-		} ;
-
-	return mdiff ;
-} /* max_diff */
diff --git a/libs/libsndfile/tests/checksum_test.c b/libs/libsndfile/tests/checksum_test.c
deleted file mode 100644
index 544da93408..0000000000
--- a/libs/libsndfile/tests/checksum_test.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	SAMPLE_RATE	8000
-
-typedef struct
-{	int	enc_fmt ;
-
-	const char * enc_name ;
-	const char * dec_name ;
-
-	uint64_t	enc_cksum ;
-	uint64_t	dec_cksum ;
-} CHECKSUM ;
-
-static CHECKSUM
-checksum_orig [] =
-{
-	{	SF_FORMAT_RAW | SF_FORMAT_ULAW,
-		"checksum.ulaw", "cksum_ulaw.pcm16",
-		0x33aefae029e0c888LL, 0x595cd6e47edd0cffLL
-		},
-	{	SF_FORMAT_RAW | SF_FORMAT_ALAW,
-		"checksum.alaw", "cksum_alaw.pcm16",
-		0x48c798da3572d468LL, 0x6837d74869af5bb6LL
-		},
-	{	SF_FORMAT_RAW | SF_FORMAT_GSM610,
-		"checksum.gsm", "cksum_gsm.pcm16",
-		0x1b1f64ff2acf858fLL, 0x504179dbadd4bce6LL
-		},
-	{	SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM,
-		"checksum.vox", "cksum_vox.pcm16",
-		0xf1147fb3a298f4dfLL, 0xfc9c0cb8b12cb0abLL
-		},
-} ;
-
-static void checksum_test (const CHECKSUM * cksum) ;
-
-static float orig [1 << 14] ;
-static short data [1 << 14] ;
-
-int
-main (void)
-{	unsigned k ;
-
-	gen_windowed_sine_float (orig, ARRAY_LEN (orig), 0.9) ;
-
-	for (k = 0 ; k < ARRAY_LEN (checksum_orig) ; k++)
-		checksum_test (&checksum_orig [k]) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-checksum_test (const CHECKSUM * cksum)
-{	SNDFILE * file ;
-	SF_INFO info ;
-
-	print_test_name (__func__, cksum->enc_name) ;
-
-	info.format = cksum->enc_fmt ;
-	info.channels = 1 ;
-	info.samplerate	= SAMPLE_RATE ;
-
-	file = test_open_file_or_die (cksum->enc_name, SFM_WRITE, &info, 0, __LINE__) ;
-	test_write_float_or_die (file, 0, orig, ARRAY_LEN (orig), __LINE__) ;
-	sf_close (file) ;
-
-	check_file_hash_or_die (cksum->enc_name, cksum->enc_cksum, __LINE__) ;
-	puts ("ok") ;
-
-	/*------------------------------------------------------------------------*/
-
-	print_test_name (__func__, cksum->dec_name) ;
-
-	info.format = cksum->enc_fmt ;
-	info.channels = 1 ;
-	info.samplerate	= SAMPLE_RATE ;
-
-	file = test_open_file_or_die (cksum->enc_name, SFM_READ, &info, 0, __LINE__) ;
-	test_read_short_or_die (file, 0, data, ARRAY_LEN (data), __LINE__) ;
-	sf_close (file) ;
-
-	info.format = SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-	info.channels = 1 ;
-	info.samplerate	= SAMPLE_RATE ;
-
-	file = test_open_file_or_die (cksum->dec_name, SFM_WRITE, &info, 0, __LINE__) ;
-	test_write_short_or_die (file, 0, data, ARRAY_LEN (data), __LINE__) ;
-	sf_close (file) ;
-
-	check_file_hash_or_die (cksum->dec_name, cksum->dec_cksum, __LINE__) ;
-
-	remove (cksum->enc_name) ;
-	remove (cksum->dec_name) ;
-
-	puts ("ok") ;
-} /* checksum_test */
-
diff --git a/libs/libsndfile/tests/chunk_test.c b/libs/libsndfile/tests/chunk_test.c
deleted file mode 100644
index 5a036b1e07..0000000000
--- a/libs/libsndfile/tests/chunk_test.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN			(1 << 10)
-#define LOG_BUFFER_SIZE		1024
-
-static void	chunk_test (const char *filename, int format) ;
-
-static void
-chunk_test_helper (const char *filename, int format, const char * testdata) ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test adding chunks to WAV files\n") ;
-		printf ("           aiff - test adding chunks to AIFF files\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	chunk_test ("chunks_pcm16.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		chunk_test ("chunks_pcm16.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		chunk_test ("chunks_pcm16.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	chunk_test ("chunks_pcm16.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	chunk_test ("chunks_pcm16.caf", SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-		chunk_test ("chunks_alac.caf", SF_FORMAT_CAF | SF_FORMAT_ALAC_16) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-chunk_test_helper (const char *filename, int format, const char * testdata)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	SF_CHUNK_INFO	chunk_info ;
-	SF_CHUNK_ITERATOR * iterator ;
-	uint32_t		length_before ;
-	int				err, allow_fd ;
-
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_ALAC_16 :
-			allow_fd = SF_FALSE ;
-			break ;
-		default :
-			allow_fd = SF_TRUE ;
-			break ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Set up the chunk to write. */
-	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-	snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-	chunk_info.id_size = 4 ;
-	chunk_info.data = strdup (testdata) ;
-	chunk_info.datalen = strlen (chunk_info.data) ;
-
-	length_before = chunk_info.datalen ;
-
-	err = sf_set_chunk (file, &chunk_info) ;
-	exit_if_true (
-		err != SF_ERR_NO_ERROR,
-		"\n\nLine %d : sf_set_chunk returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-		) ;
-
-	memset (chunk_info.data, 0, chunk_info.datalen) ;
-	free (chunk_info.data) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-	snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-	chunk_info.id_size = 4 ;
-
-	iterator = sf_get_chunk_iterator (file, &chunk_info) ;
-	err = sf_get_chunk_size (iterator, &chunk_info) ;
-	exit_if_true (
-		err != SF_ERR_NO_ERROR,
-		"\n\nLine %d : sf_get_chunk_size returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-		) ;
-
-	exit_if_true (
-		length_before > chunk_info.datalen || chunk_info.datalen - length_before > 4,
-		"\n\nLine %d : testdata '%s' : Bad chunk length %u (previous length %u)\n\n", __LINE__, testdata, chunk_info.datalen, length_before
-		) ;
-
-	chunk_info.data = malloc (chunk_info.datalen) ;
-	err = sf_get_chunk_data (iterator, &chunk_info) ;
-	exit_if_true (
-		err != SF_ERR_NO_ERROR,
-		"\n\nLine %d : sf_get_chunk_size returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-		) ;
-
-	exit_if_true (
-		memcmp (testdata, chunk_info.data, length_before),
-		"\n\nLine %d : Data compare failed.\n    %s\n    %s\n\n", __LINE__, testdata, (char*) chunk_info.data
-		) ;
-
-	free (chunk_info.data) ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-} /* chunk_test_helper */
-
-static void
-multichunk_test_helper (const char *filename, int format, const char * testdata [], size_t testdata_len)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	SF_CHUNK_INFO	chunk_info ;
-	SF_CHUNK_ITERATOR * iterator ;
-	uint32_t		length_before [testdata_len] ;
-	int				err, allow_fd ;
-	size_t			i ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format		= format ;
-
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_ALAC_16 :
-			allow_fd = SF_FALSE ;
-			break ;
-		default :
-			allow_fd = SF_TRUE ;
-			break ;
-		} ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Set up the chunk to write. */
-	for (i = 0 ; i < testdata_len ; i++)
-	{	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-		snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-		chunk_info.id_size = 4 ;
-
-		chunk_info.data = strdup (testdata [i]) ;
-		chunk_info.datalen = strlen (chunk_info.data) ;
-
-		length_before [i] = chunk_info.datalen ;
-
-		err = sf_set_chunk (file, &chunk_info) ;
-		exit_if_true (
-			err != SF_ERR_NO_ERROR,
-			"\n\nLine %d : sf_set_chunk returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-			) ;
-
-		memset (chunk_info.data, 0, chunk_info.datalen) ;
-		free (chunk_info.data) ;
-	}
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-	snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-	chunk_info.id_size = 4 ;
-
-	iterator = sf_get_chunk_iterator (file, &chunk_info) ;
-
-	i = 0 ;
-	while (iterator)
-	{	memset (&chunk_info, 0, sizeof (chunk_info)) ;
-		err = sf_get_chunk_size (iterator, &chunk_info) ;
-		exit_if_true (
-			i > testdata_len,
-			"\n\nLine %d : iterated to chunk #%d, but only %d chunks have been written\n\n", __LINE__, (int) i, (int) testdata_len
-			) ;
-
-		exit_if_true (
-			err != SF_ERR_NO_ERROR,
-			"\n\nLine %d : sf_get_chunk_size returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-			) ;
-
-		exit_if_true (
-			length_before [i] > chunk_info.datalen || chunk_info.datalen - length_before [i] > 4,
-			"\n\nLine %d : testdata[%d] '%s' : Bad chunk length %u (previous length %u)\n\n", __LINE__, (int) i, testdata [i], chunk_info.datalen, length_before [i]
-			) ;
-
-		chunk_info.data = malloc (chunk_info.datalen) ;
-		err = sf_get_chunk_data (iterator, &chunk_info) ;
-		exit_if_true (
-			err != SF_ERR_NO_ERROR,
-			"\n\nLine %d : sf_get_chunk_size returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-			) ;
-
-		exit_if_true (
-			4 != chunk_info.id_size,
-			"\n\nLine %d : testdata[%d] : Bad ID length %u (previous length %u)\n\n", __LINE__, (int) i, chunk_info.id_size, 4
-			) ;
-		exit_if_true (
-			memcmp ("Test", chunk_info.id, 4),
-			"\n\nLine %d : ID compare failed at %d.\n    %s\n    %s\n\n", __LINE__, (int) i, "Test", (char*) chunk_info.id
-			) ;
-
-		exit_if_true (
-			memcmp (testdata [i], chunk_info.data, length_before [i]),
-			"\n\nLine %d : Data compare failed at %d.\n    %s\n    %s\n\n", __LINE__, (int) i, testdata [i], (char*) chunk_info.data
-			) ;
-
-		free (chunk_info.data) ;
-		iterator = sf_next_chunk_iterator (iterator) ;
-		i++ ;
-	}
-
-	sf_close (file) ;
-	unlink (filename) ;
-} /* multichunk_test_helper */
-
-
-static void
-chunk_test (const char *filename, int format)
-{	const char*		testdata [] =
-	{	"There can be only one.", "", "A", "AB", "ABC", "ABCD", "ABCDE" } ;
-	uint32_t k ;
-
-	print_test_name (__func__, filename) ;
-
-	for (k = 0 ; k < ARRAY_LEN (testdata) ; k++)
-		chunk_test_helper (filename, format, testdata [k]) ;
-
-	multichunk_test_helper (filename, format, testdata, ARRAY_LEN (testdata)) ;
-
-	puts ("ok") ;
-} /* chunk_test */
diff --git a/libs/libsndfile/tests/command_test.c b/libs/libsndfile/tests/command_test.c
deleted file mode 100644
index 9e6bfd485b..0000000000
--- a/libs/libsndfile/tests/command_test.c
+++ /dev/null
@@ -1,1570 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1 << 10)
-#define LOG_BUFFER_SIZE	1024
-
-static	void	float_norm_test			(const char *filename) ;
-static	void	double_norm_test		(const char *filename) ;
-static	void	format_tests			(void) ;
-static	void	calc_peak_test			(int filetype, const char *filename) ;
-static	void	truncate_test			(const char *filename, int filetype) ;
-static	void	instrument_test			(const char *filename, int filetype) ;
-static	void	channel_map_test		(const char *filename, int filetype) ;
-static	void	current_sf_info_test	(const char *filename) ;
-static	void	raw_needs_endswap_test	(const char *filename, int filetype) ;
-
-static	void	broadcast_test			(const char *filename, int filetype) ;
-static	void	broadcast_rdwr_test		(const char *filename, int filetype) ;
-static	void	broadcast_coding_history_test	(const char *filename) ;
-static	void	broadcast_coding_history_size	(const char *filename) ;
-
-/* Cart Chunk tests */
-static void	cart_test			(const char *filename, int filetype) ;
-static void	cart_rdwr_test			(const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-
-static	int		int_data	[BUFFER_LEN] ;
-static	float	float_data	[BUFFER_LEN] ;
-static	double	double_data	[BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           ver     - test sf_command (SFC_GETLIB_VERSION)\n") ;
-		printf ("           norm    - test floating point normalisation\n") ;
-		printf ("           format  - test format string commands\n") ;
-		printf ("           peak    - test peak calculation\n") ;
-		printf ("           trunc   - test file truncation\n") ;
-		printf ("           inst    - test set/get of SF_INSTRUMENT.\n") ;
-		printf ("           chanmap - test set/get of channel map data..\n") ;
-		printf ("           bext    - test set/get of SF_BROADCAST_INFO.\n") ;
-		printf ("           bextch  - test set/get of SF_BROADCAST_INFO coding_history.\n") ;
-		printf ("           cart    - test set/get of SF_CART_INFO.\n") ;
-		printf ("           rawend  - test SFC_RAW_NEEDS_ENDSWAP.\n") ;
-		printf ("           all     - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || strcmp (argv [1], "ver") == 0)
-	{	char buffer [128] ;
-
-		print_test_name ("version_test", "(none)") ;
-		buffer [0] = 0 ;
-		sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-		if (strlen (buffer) < 1)
-		{	printf ("Line %d: could not retrieve lib version.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-		puts ("ok") ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "norm") == 0)
-	{	/*	Preliminary float/double normalisation tests. More testing
-		**	is done in the program 'floating_point_test'.
-		*/
-		float_norm_test		("float.wav") ;
-		double_norm_test	("double.wav") ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "peak") == 0)
-	{	calc_peak_test (SF_ENDIAN_BIG		| SF_FORMAT_RAW, "be-peak.raw") ;
-		calc_peak_test (SF_ENDIAN_LITTLE	| SF_FORMAT_RAW, "le-peak.raw") ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "format"))
-	{	format_tests () ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "trunc") == 0)
-	{	truncate_test ("truncate.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_32) ;
-		truncate_test ("truncate.au" , SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "inst") == 0)
-	{	instrument_test ("instrument.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		instrument_test ("instrument.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_24) ;
-		/*-instrument_test ("instrument.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16) ;-*/
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "current_sf_info") == 0)
-	{	current_sf_info_test ("current.wav") ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "bext") == 0)
-	{	broadcast_test ("broadcast.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		broadcast_rdwr_test	("broadcast.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-		broadcast_test ("broadcast.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-		broadcast_rdwr_test	("broadcast.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-
-		broadcast_test ("broadcast.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		broadcast_rdwr_test	("broadcast.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "cart") == 0)
-	{	cart_test ("cart.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		cart_rdwr_test ("cart.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		cart_test ("cart.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		cart_rdwr_test ("cart.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "bextch") == 0)
-	{	broadcast_coding_history_test ("coding_history.wav") ;
-		broadcast_coding_history_size ("coding_hist_size.wav") ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "chanmap") == 0)
-	{	channel_map_test ("chanmap.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-		channel_map_test ("chanmap.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		channel_map_test ("chanmap.aifc" , SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		channel_map_test ("chanmap.caf" , SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "rawend") == 0)
-	{	raw_needs_endswap_test ("raw_end.wav", SF_FORMAT_WAV) ;
-		raw_needs_endswap_test ("raw_end.wavex", SF_FORMAT_WAVEX) ;
-		raw_needs_endswap_test ("raw_end.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-		raw_needs_endswap_test ("raw_end.aiff", SF_FORMAT_AIFF) ;
-		raw_needs_endswap_test ("raw_end.aiff_le", SF_ENDIAN_LITTLE | SF_FORMAT_AIFF) ;
-		test_count ++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-float_norm_test (const char *filename)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	unsigned int	k ;
-
-	print_test_name ("float_norm_test", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= (SF_FORMAT_RAW | SF_FORMAT_PCM_16) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= BUFFER_LEN ;
-
-	/* Create float_data with all values being less than 1.0. */
-	for (k = 0 ; k < BUFFER_LEN / 2 ; k++)
-		float_data [k] = (k + 5) / (2.0 * BUFFER_LEN) ;
-	for (k = BUFFER_LEN / 2 ; k < BUFFER_LEN ; k++)
-		float_data [k] = (k + 5) ;
-
-	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-	{	printf ("Line %d: sf_open_write failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	/* Normalisation is on by default so no need to do anything here. */
-
-	if ((k = sf_write_float (file, float_data, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-	{	printf ("Line %d: sf_write_float failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	/* Turn normalisation off. */
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	if ((k = sf_write_float (file, float_data + BUFFER_LEN / 2, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-	{	printf ("Line %d: sf_write_float failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	/* sfinfo struct should still contain correct data. */
-	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-	{	printf ("Line %d: sf_open_read failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != (SF_FORMAT_RAW | SF_FORMAT_PCM_16))
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, (SF_FORMAT_RAW | SF_FORMAT_PCM_16), sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Read float_data and check that it is normalised (ie default). */
-	if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (float_data [k] >= 1.0)
-		{	printf ("\n\nLine %d: float_data [%d] == %f which is greater than 1.0\n", __LINE__, k, float_data [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file, turn normalisation off, read float_data and check again. */
-	sf_seek (file, 0, SEEK_SET) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (float_data [k] < 1.0)
-		{	printf ("\n\nLine %d: float_data [%d] == %f which is less than 1.0\n", __LINE__, k, float_data [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file, turn normalisation on, read float_data and do final check. */
-	sf_seek (file, 0, SEEK_SET) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ;
-
-	if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (float_data [k] > 1.0)
-		{	printf ("\n\nLine %d: float_data [%d] == %f which is greater than 1.0\n", __LINE__, k, float_data [k]) ;
-			exit (1) ;
-			} ;
-
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-
-	printf ("ok\n") ;
-} /* float_norm_test */
-
-static void
-double_norm_test (const char *filename)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	unsigned int	k ;
-
-	print_test_name ("double_norm_test", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= (SF_FORMAT_RAW | SF_FORMAT_PCM_16) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= BUFFER_LEN ;
-
-	/* Create double_data with all values being less than 1.0. */
-	for (k = 0 ; k < BUFFER_LEN / 2 ; k++)
-		double_data [k] = (k + 5) / (2.0 * BUFFER_LEN) ;
-	for (k = BUFFER_LEN / 2 ; k < BUFFER_LEN ; k++)
-		double_data [k] = (k + 5) ;
-
-	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-	{	printf ("Line %d: sf_open_write failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	/* Normailsation is on by default so no need to do anything here. */
-	/*-sf_command (file, "set-norm-double", "true", 0) ;-*/
-
-	if ((k = sf_write_double (file, double_data, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-	{	printf ("Line %d: sf_write_double failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	/* Turn normalisation off. */
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	if ((k = sf_write_double (file, double_data + BUFFER_LEN / 2, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-	{	printf ("Line %d: sf_write_double failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-	{	printf ("Line %d: sf_open_read failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != (SF_FORMAT_RAW | SF_FORMAT_PCM_16))
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, (SF_FORMAT_RAW | SF_FORMAT_PCM_16), sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Read double_data and check that it is normalised (ie default). */
-	if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (double_data [k] >= 1.0)
-		{	printf ("\n\nLine %d: double_data [%d] == %f which is greater than 1.0\n", __LINE__, k, double_data [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file, turn normalisation off, read double_data and check again. */
-	sf_seek (file, 0, SEEK_SET) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (double_data [k] < 1.0)
-		{	printf ("\n\nLine %d: double_data [%d] == %f which is less than 1.0\n", __LINE__, k, double_data [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file, turn normalisation on, read double_data and do final check. */
-	sf_seek (file, 0, SEEK_SET) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ;
-
-	if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-	{	printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (double_data [k] > 1.0)
-		{	printf ("\n\nLine %d: double_data [%d] == %f which is greater than 1.0\n", __LINE__, k, double_data [k]) ;
-			exit (1) ;
-			} ;
-
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-
-	printf ("ok\n") ;
-} /* double_norm_test */
-
-static	void
-format_tests	(void)
-{	SF_FORMAT_INFO format_info ;
-	SF_INFO		sfinfo ;
-	const char	*last_name ;
-	int 		k, count ;
-
-	print_test_name ("format_tests", "(null)") ;
-
-	/* Clear out SF_INFO struct and set channels > 0. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.channels = 1 ;
-
-	/* First test simple formats. */
-
-	sf_command (NULL, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ;
-
-	if (count < 0 || count > 30)
-	{	printf ("Line %d: Weird count.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	format_info.format = 0 ;
-	sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-
-	last_name = format_info.name ;
-	for (k = 1 ; k < count ; k ++)
-	{	format_info.format = k ;
-		sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-		if (strcmp (last_name, format_info.name) >= 0)
-		{	printf ("\n\nLine %d: format names out of sequence `%s' < `%s'.\n", __LINE__, last_name, format_info.name) ;
-			exit (1) ;
-			} ;
-		sfinfo.format = format_info.format ;
-
-		if (! sf_format_check (&sfinfo))
-		{	printf ("\n\nLine %d: sf_format_check failed.\n", __LINE__) ;
-			printf ("        Name : %s\n", format_info.name) ;
-			printf ("        Format      : 0x%X\n", sfinfo.format) ;
-			printf ("        Channels    : 0x%X\n", sfinfo.channels) ;
-			printf ("        Sample Rate : 0x%X\n", sfinfo.samplerate) ;
-			exit (1) ;
-			} ;
-		last_name = format_info.name ;
-		} ;
-	format_info.format = 666 ;
-	sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-
-	/* Now test major formats. */
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ;
-
-	if (count < 0 || count > 30)
-	{	printf ("Line %d: Weird count.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	format_info.format = 0 ;
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-
-	last_name = format_info.name ;
-	for (k = 1 ; k < count ; k ++)
-	{	format_info.format = k ;
-		sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-		if (strcmp (last_name, format_info.name) >= 0)
-		{	printf ("\n\nLine %d: format names out of sequence (%d) `%s' < `%s'.\n", __LINE__, k, last_name, format_info.name) ;
-			exit (1) ;
-			} ;
-
-		last_name = format_info.name ;
-		} ;
-	format_info.format = 666 ;
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-
-	/* Now test subtype formats. */
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
-
-	if (count < 0 || count > 30)
-	{	printf ("Line %d: Weird count.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	format_info.format = 0 ;
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-
-	last_name = format_info.name ;
-	for (k = 1 ; k < count ; k ++)
-	{	format_info.format = k ;
-		sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-		} ;
-	format_info.format = 666 ;
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-
-
-	printf ("ok\n") ;
-} /* format_tests */
-
-static	void
-calc_peak_test (int filetype, const char *filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, format ;
-	double		peak ;
-
-	print_test_name ("calc_peak_test", filename) ;
-
-	format = (filetype | SF_FORMAT_PCM_16) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= format ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= BUFFER_LEN ;
-
-	/* Create double_data with max value of 0.5. */
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		double_data [k] = (k + 1) / (2.0 * BUFFER_LEN) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_CALC_SIGNAL_MAX, &peak, sizeof (peak)) ;
-	if (fabs (peak - (1 << 14)) > 1.0)
-	{	printf ("Line %d : Peak value should be %d (is %f).\n", __LINE__, (1 << 14), peak) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_CALC_NORM_SIGNAL_MAX, &peak, sizeof (peak)) ;
-	if (fabs (peak - 0.5) > 4e-5)
-	{	printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	format = (filetype | SF_FORMAT_FLOAT) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= format ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= BUFFER_LEN ;
-
-	/* Create double_data with max value of 0.5. */
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		double_data [k] = (k + 1) / (2.0 * BUFFER_LEN) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_CALC_SIGNAL_MAX, &peak, sizeof (peak)) ;
-	if (fabs (peak - 0.5) > 1e-5)
-	{	printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_CALC_NORM_SIGNAL_MAX, &peak, sizeof (peak)) ;
-	if (fabs (peak - 0.5) > 1e-5)
-	{	printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-
-	printf ("ok\n") ;
-} /* calc_peak_test */
-
-static void
-truncate_test (const char *filename, int filetype)
-{	SNDFILE 	*file ;
-	SF_INFO		sfinfo ;
-	sf_count_t	len ;
-
-	print_test_name ("truncate_test", filename) ;
-
-	sfinfo.samplerate	= 11025 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 2 ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_data, BUFFER_LEN, __LINE__) ;
-
-	len = 100 ;
-	if (sf_command (file, SFC_FILE_TRUNCATE, &len, sizeof (len)))
-	{	printf ("Line %d: sf_command (SFC_FILE_TRUNCATE) returned error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, len, 2, __LINE__) ;
-	test_seek_or_die (file, 0, SEEK_END, len, 2, __LINE__) ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* truncate_test */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-instrumet_rw_test (const char *filename)
-{	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-	SF_INSTRUMENT inst ;
-	memset (&sfinfo, 0, sizeof (SF_INFO)) ;
-
-	sndfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if (sf_command (sndfile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-	{	inst.basenote = 22 ;
-
-		if (sf_command (sndfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-			printf ("Sucess: [%s] updated\n", filename) ;
-		else
-			printf ("Error: SFC_SET_INSTRUMENT on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-		}
-	else
-		printf ("Error: SFC_GET_INSTRUMENT on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-
-
-	if (sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) != 0)
-		printf ("Error: SFC_UPDATE_HEADER_NOW on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-
-	sf_write_sync (sndfile) ;
-	sf_close (sndfile) ;
-
-	return ;
-} /* instrumet_rw_test */
-
-static void
-instrument_test (const char *filename, int filetype)
-{	static SF_INSTRUMENT write_inst =
-	{	2,		/* gain */
-		3, 		/* detune */
-		4, 		/* basenote */
-		5, 6,	/* key low and high */
-		7, 8,	/* velocity low and high */
-		2,		/* loop_count */
-		{	{	801, 2, 3, 0 },
-			{	801, 3, 4, 0 },
-		}
-	} ;
-	SF_INSTRUMENT read_inst ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-
-	print_test_name ("instrument_test", filename) ;
-
-	sfinfo.samplerate	= 11025 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 1 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_INSTRUMENT, &write_inst, sizeof (write_inst)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_INSTRUMENT) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&read_inst, 0, sizeof (read_inst)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_INSTRUMENT, &read_inst, sizeof (read_inst)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_GET_INSTRUMENT) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		return ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV)
-	{	/*
-		**	For all the fields that WAV doesn't support, modify the
-		**	write_inst struct to hold the default value that the WAV
-		**	module should hold.
-		*/
-		write_inst.detune = 0 ;
-		write_inst.key_lo = write_inst.velocity_lo = 0 ;
-		write_inst.key_hi = write_inst.velocity_hi = 127 ;
-		write_inst.gain = 1 ;
-		} ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-	{	/*
-		**	For all the fields that XI doesn't support, modify the
-		**	write_inst struct to hold the default value that the XI
-		**	module should hold.
-		*/
-		write_inst.basenote = 0 ;
-		write_inst.detune = 0 ;
-		write_inst.key_lo = write_inst.velocity_lo = 0 ;
-		write_inst.key_hi = write_inst.velocity_hi = 127 ;
-		write_inst.gain = 1 ;
-		} ;
-
-	if (memcmp (&write_inst, &read_inst, sizeof (write_inst)) != 0)
-	{	printf ("\n\nLine %d : instrument comparison failed.\n\n", __LINE__) ;
-		printf ("W  Base Note : %u\n"
-			"   Detune    : %u\n"
-			"   Low  Note : %u\tHigh Note : %u\n"
-			"   Low  Vel. : %u\tHigh Vel. : %u\n"
-			"   Gain      : %d\tCount     : %d\n"
-			"   mode      : %d\n"
-			"   start     : %d\tend       : %d\tcount  :%d\n"
-			"   mode      : %d\n"
-			"   start     : %d\tend       : %d\tcount  :%d\n\n",
-			write_inst.basenote,
-			write_inst.detune,
-			write_inst.key_lo, write_inst.key_hi,
-			write_inst.velocity_lo, write_inst.velocity_hi,
-			write_inst.gain, write_inst.loop_count,
-			write_inst.loops [0].mode, write_inst.loops [0].start,
-			write_inst.loops [0].end, write_inst.loops [0].count,
-			write_inst.loops [1].mode, write_inst.loops [1].start,
-			write_inst.loops [1].end, write_inst.loops [1].count) ;
-		printf ("R  Base Note : %u\n"
-			"   Detune    : %u\n"
-			"   Low  Note : %u\tHigh Note : %u\n"
-			"   Low  Vel. : %u\tHigh Vel. : %u\n"
-			"   Gain      : %d\tCount     : %d\n"
-			"   mode      : %d\n"
-			"   start     : %d\tend       : %d\tcount  :%d\n"
-			"   mode      : %d\n"
-			"   start     : %d\tend       : %d\tcount  :%d\n\n",
-			read_inst.basenote,
-			read_inst.detune,
-			read_inst.key_lo, read_inst.key_hi,
-			read_inst.velocity_lo, read_inst.velocity_hi,
-			read_inst.gain,	read_inst.loop_count,
-			read_inst.loops [0].mode, read_inst.loops [0].start,
-			read_inst.loops [0].end, read_inst.loops [0].count,
-			read_inst.loops [1].mode, read_inst.loops [1].start,
-			read_inst.loops [1].end, read_inst.loops [1].count) ;
-
-		if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_XI)
-			exit (1) ;
-		} ;
-
-	if (0) instrumet_rw_test (filename) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* instrument_test */
-
-static	void
-current_sf_info_test	(const char *filename)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO outinfo, ininfo ;
-
-	print_test_name ("current_sf_info_test", filename) ;
-
-	outinfo.samplerate	= 44100 ;
-	outinfo.format		= (SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-	outinfo.channels	= 1 ;
-	outinfo.frames		= 0 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &outinfo, SF_TRUE, __LINE__) ;
-	sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, 0) ;
-
-	exit_if_true (outinfo.frames != 0,
-		"\n\nLine %d : Initial sfinfo.frames is not zero.\n\n", __LINE__
-		) ;
-
-	test_write_double_or_die (outfile, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_command (outfile, SFC_GET_CURRENT_SF_INFO, &outinfo, sizeof (outinfo)) ;
-
-	exit_if_true (outinfo.frames != BUFFER_LEN,
-		"\n\nLine %d : Initial sfinfo.frames (%" PRId64 ") should be %d.\n\n", __LINE__,
-		outinfo.frames, BUFFER_LEN
-		) ;
-
-	/* Read file making sure no channel map exists. */
-	memset (&ininfo, 0, sizeof (ininfo)) ;
-	infile = test_open_file_or_die (filename, SFM_READ, &ininfo, SF_TRUE, __LINE__) ;
-
-	test_write_double_or_die (outfile, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-	sf_command (infile, SFC_GET_CURRENT_SF_INFO, &ininfo, sizeof (ininfo)) ;
-
-	exit_if_true (ininfo.frames != BUFFER_LEN,
-		"\n\nLine %d : Initial sfinfo.frames (%" PRId64 ") should be %d.\n\n", __LINE__,
-		ininfo.frames, BUFFER_LEN
-		) ;
-
-	sf_close (outfile) ;
-	sf_close (infile) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* current_sf_info_test */
-
-static void
-broadcast_test (const char *filename, int filetype)
-{	static SF_BROADCAST_INFO bc_write, bc_read ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int errors = 0 ;
-
-	print_test_name ("broadcast_test", filename) ;
-
-	sfinfo.samplerate	= 11025 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 1 ;
-
-	memset (&bc_write, 0, sizeof (bc_write)) ;
-
-	snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-	snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-	snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-	snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-	bc_write.coding_history_size = 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&bc_read, 0, sizeof (bc_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_GET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		return ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	if (bc_read.version != 1)
-	{	printf ("\n\nLine %d : Read bad version number %d.\n\n", __LINE__, bc_read.version) ;
-		exit (1) ;
-		return ;
-		} ;
-
-	bc_read.version = bc_write.version = 0 ;
-
-	if (memcmp (bc_write.description, bc_read.description, sizeof (bc_write.description)) != 0)
-	{	printf ("\n\nLine %d : description mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.description, bc_read.description) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (bc_write.originator, bc_read.originator, sizeof (bc_write.originator)) != 0)
-	{	printf ("\n\nLine %d : originator mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.originator, bc_read.originator) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (bc_write.originator_reference, bc_read.originator_reference, sizeof (bc_write.originator_reference)) != 0)
-	{	printf ("\n\nLine %d : originator_reference mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.originator_reference, bc_read.originator_reference) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (bc_write.origination_date, bc_read.origination_date, sizeof (bc_write.origination_date)) != 0)
-	{	printf ("\n\nLine %d : origination_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.origination_date, bc_read.origination_date) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (bc_write.origination_time, bc_read.origination_time, sizeof (bc_write.origination_time)) != 0)
-	{	printf ("\n\nLine %d : origination_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.origination_time, bc_read.origination_time) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (bc_write.umid, bc_read.umid, sizeof (bc_write.umid)) != 0)
-	{	printf ("\n\nLine %d : umid mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.umid, bc_read.umid) ;
-		errors ++ ;
-		} ;
-
-	if (errors)
-		exit (1) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* broadcast_test */
-
-static	void
-broadcast_rdwr_test (const char *filename, int filetype)
-{	SF_BROADCAST_INFO binfo ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-
-	print_test_name (__func__, filename) ;
-
-	create_short_sndfile (filename, filetype, 2) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	memset (&binfo, 0, sizeof (binfo)) ;
-
-	snprintf (binfo.description, sizeof (binfo.description), "Test description") ;
-	snprintf (binfo.originator, sizeof (binfo.originator), "Test originator") ;
-	snprintf (binfo.originator_reference, sizeof (binfo.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-	snprintf (binfo.origination_date, sizeof (binfo.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (binfo.origination_time, sizeof (binfo.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (binfo.umid, sizeof (binfo.umid), "Some umid") ;
-	binfo.coding_history_size = 0 ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-	frames = sfinfo.frames ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) != SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) should have failed but didn't.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (file) ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* broadcast_rdwr_test */
-
-static void
-check_coding_history_newlines (const char *filename)
-{	static SF_BROADCAST_INFO bc_write, bc_read ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	unsigned k ;
-
-	sfinfo.samplerate	= 22050 ;
-	sfinfo.format		= SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-	sfinfo.channels		= 1 ;
-
-	memset (&bc_write, 0, sizeof (bc_write)) ;
-
-	snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-	snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-	snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-	snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-	bc_write.coding_history_size = snprintf (bc_write.coding_history, sizeof (bc_write.coding_history), "This has\nUnix\nand\rMac OS9\rline endings.\nLast line") ; ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&bc_read, 0, sizeof (bc_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	if (bc_read.coding_history_size == 0)
-	{	printf ("\n\nLine %d : missing coding history.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (strstr (bc_read.coding_history, "Last line") == NULL)
-	{	printf ("\n\nLine %d : coding history truncated.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	for (k = 1 ; k < bc_read.coding_history_size ; k++)
-	{	if (bc_read.coding_history [k] == '\n' && bc_read.coding_history [k - 1] != '\r')
-		{	printf ("\n\nLine %d : '\\n' without '\\r' before.\n\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		if (bc_read.coding_history [k] == '\r' && bc_read.coding_history [k + 1] != '\n')
-		{	printf ("\n\nLine %d : '\\r' without '\\n' after.\n\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		if (bc_read.coding_history [k] == 0 && k < bc_read.coding_history_size - 1)
-		{	printf ("\n\nLine %d : '\\0' within coding history at index %d of %d.\n\n", __LINE__, k, bc_read.coding_history_size) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	return ;
-} /* check_coding_history_newlines */
-
-static void
-broadcast_coding_history_test (const char *filename)
-{	static SF_BROADCAST_INFO bc_write, bc_read ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	const char *default_history = "A=PCM,F=22050,W=16,M=mono" ;
-	const char *supplied_history =
-					"A=PCM,F=44100,W=24,M=mono,T=other\r\n"
-					"A=PCM,F=22050,W=16,M=mono,T=yet_another\r\n" ;
-
-	print_test_name ("broadcast_coding_history_test", filename) ;
-
-	sfinfo.samplerate	= 22050 ;
-	sfinfo.format		= SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-	sfinfo.channels		= 1 ;
-
-	memset (&bc_write, 0, sizeof (bc_write)) ;
-
-	snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-	snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-	snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-	snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-	/* Coding history will be filled in by the library. */
-	bc_write.coding_history_size = 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&bc_read, 0, sizeof (bc_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	if (bc_read.coding_history_size == 0)
-	{	printf ("\n\nLine %d : missing coding history.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (bc_read.coding_history_size < strlen (default_history) || memcmp (bc_read.coding_history, default_history, strlen (default_history)) != 0)
-	{	printf ("\n\n"
-				"Line %d : unexpected coding history '%.*s',\n"
-				"            should be '%s'\n\n", __LINE__, bc_read.coding_history_size, bc_read.coding_history, default_history) ;
-		exit (1) ;
-		} ;
-
-	bc_write.coding_history_size = strlen (supplied_history) ;
-	bc_write.coding_history_size = snprintf (bc_write.coding_history, sizeof (bc_write.coding_history), "%s", supplied_history) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&bc_read, 0, sizeof (bc_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	if (strstr (bc_read.coding_history, supplied_history) != bc_read.coding_history)
-	{	printf ("\n\nLine %d : unexpected coding history :\n"
-				"----------------------------------------------------\n%s"
-				"----------------------------------------------------\n"
-				"should be this :\n"
-				"----------------------------------------------------\n%s"
-				"----------------------------------------------------\n"
-				"with one more line at the end.\n\n",
-				__LINE__, bc_read.coding_history, supplied_history) ;
-		exit (1) ;
-		} ;
-
-	check_coding_history_newlines (filename) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* broadcast_coding_history_test */
-
-/*==============================================================================
-*/
-
-static void
-broadcast_coding_history_size (const char *filename)
-{	/* SF_BROADCAST_INFO struct with coding_history field of 1024 bytes. */
-	static SF_BROADCAST_INFO_VAR (1024) bc_write ;
-	static SF_BROADCAST_INFO_VAR (1024) bc_read ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int k ;
-
-	print_test_name (__func__, filename) ;
-
-	sfinfo.samplerate	= 22050 ;
-	sfinfo.format		= SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-	sfinfo.channels		= 1 ;
-
-	memset (&bc_write, 0, sizeof (bc_write)) ;
-
-	snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-	snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-	snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-	snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-	bc_write.coding_history_size = 0 ;
-
-	for (k = 0 ; bc_write.coding_history_size < 512 ; k++)
-	{	snprintf (bc_write.coding_history + bc_write.coding_history_size,
-			sizeof (bc_write.coding_history) - bc_write.coding_history_size, "line %4d\n", k) ;
-		bc_write.coding_history_size = strlen (bc_write.coding_history) ;
-		} ;
-
-	exit_if_true (bc_write.coding_history_size < 512,
-			"\n\nLine %d : bc_write.coding_history_size (%d) should be > 512.\n\n", __LINE__, bc_write.coding_history_size) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&bc_read, 0, sizeof (bc_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	exit_if_true (bc_read.coding_history_size < 512,
-			"\n\nLine %d : unexpected coding history size %d (should be > 512).\n\n", __LINE__, bc_read.coding_history_size) ;
-
-	exit_if_true (strstr (bc_read.coding_history, "libsndfile") == NULL,
-			"\n\nLine %d : coding history incomplete (should contain 'libsndfile').\n\n", __LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* broadcast_coding_history_size */
-
-/*==============================================================================
-*/
-static void
-cart_test (const char *filename, int filetype)
-{	static SF_CART_INFO ca_write, ca_read ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int errors = 0 ;
-
-	print_test_name ("cart_test", filename) ;
-
-	sfinfo.samplerate	= 11025 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 1 ;
-	memset (&ca_write, 0, sizeof (ca_write)) ;
-
-	// example test data
-	snprintf (ca_write.artist, sizeof (ca_write.artist), "Test artist") ;
-	snprintf (ca_write.version, sizeof (ca_write.version), "Test version") ;
-	snprintf (ca_write.cut_id, sizeof (ca_write.cut_id), "Test cut ID") ;
-	snprintf (ca_write.client_id, sizeof (ca_write.client_id), "Test client ID") ;
-	snprintf (ca_write.category, sizeof (ca_write.category), "Test category") ;
-	snprintf (ca_write.classification, sizeof (ca_write.classification), "Test classification") ;
-	snprintf (ca_write.out_cue, sizeof (ca_write.out_cue), "Test out cue") ;
-	snprintf (ca_write.start_date, sizeof (ca_write.start_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (ca_write.start_time, sizeof (ca_write.start_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (ca_write.end_date, sizeof (ca_write.end_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (ca_write.end_time, sizeof (ca_write.end_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (ca_write.producer_app_id, sizeof (ca_write.producer_app_id), "Test producer app id") ;
-	snprintf (ca_write.producer_app_version, sizeof (ca_write.producer_app_version), "Test producer app version") ;
-	snprintf (ca_write.user_def, sizeof (ca_write.user_def), "test user def test test") ;
-	ca_write.level_reference = 42 ;
-	snprintf (ca_write.url, sizeof (ca_write.url), "http://www.test.com/test_url") ;
-	snprintf (ca_write.tag_text, sizeof (ca_write.tag_text), "tag text test! \r\n") ; // must be terminated \r\n to be valid
-	ca_write.tag_text_size = strlen (ca_write.tag_text) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_SET_CART_INFO, &ca_write, sizeof (ca_write)) == SF_FALSE)
-		exit (1) ;
-
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&ca_read, 0, sizeof (ca_read)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	if (sf_command (file, SFC_GET_CART_INFO, &ca_read, sizeof (ca_read)) == SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_GET_CART_INFO) failed.\n\n", __LINE__) ;
-		exit (1) ;
-		return ;
-		} ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-
-	if (memcmp (ca_write.artist, ca_read.artist, sizeof (ca_write.artist)) != 0)
-	{	printf ("\n\nLine %d : artist mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.artist, ca_read.artist) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.version, ca_read.version, sizeof (ca_write.version)) != 0)
-	{	printf ("\n\nLine %d : version mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.version, ca_read.version) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.title, ca_read.title, sizeof (ca_write.title)) != 0)
-	{	printf ("\n\nLine %d : title mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.title, ca_read.title) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.cut_id, ca_read.cut_id, sizeof (ca_write.cut_id)) != 0)
-	{	printf ("\n\nLine %d : cut_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.cut_id, ca_read.cut_id) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.client_id, ca_read.client_id, sizeof (ca_write.client_id)) != 0)
-	{	printf ("\n\nLine %d : client_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.client_id, ca_read.client_id) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.category, ca_read.category, sizeof (ca_write.category)) != 0)
-	{	printf ("\n\nLine %d : category mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.category, ca_read.category) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.out_cue, ca_read.out_cue, sizeof (ca_write.out_cue)) != 0)
-	{	printf ("\n\nLine %d : out_cue mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.out_cue, ca_read.out_cue) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.start_date, ca_read.start_date, sizeof (ca_write.start_date)) != 0)
-	{	printf ("\n\nLine %d : start_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.start_date, ca_read.start_date) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.start_time, ca_read.start_time, sizeof (ca_write.start_time)) != 0)
-	{	printf ("\n\nLine %d : start_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.start_time, ca_read.start_time) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.end_date, ca_read.end_date, sizeof (ca_write.end_date)) != 0)
-	{	printf ("\n\nLine %d : end_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.end_date, ca_read.end_date) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.end_time, ca_read.end_time, sizeof (ca_write.end_time)) != 0)
-	{	printf ("\n\nLine %d : end_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.end_time, ca_read.end_time) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.producer_app_id, ca_read.producer_app_id, sizeof (ca_write.producer_app_id)) != 0)
-	{	printf ("\n\nLine %d : producer_app_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.producer_app_id, ca_read.producer_app_id) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.producer_app_version, ca_read.producer_app_version, sizeof (ca_write.producer_app_version)) != 0)
-	{	printf ("\n\nLine %d : producer_app_version mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.producer_app_version, ca_read.producer_app_version) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.user_def, ca_read.user_def, sizeof (ca_write.user_def)) != 0)
-	{	printf ("\n\nLine %d : user_def mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.user_def, ca_read.user_def) ;
-		errors ++ ;
-		} ;
-
-
-	if (ca_write.level_reference != ca_read.level_reference)
-	{	printf ("\n\nLine %d : level_reference mismatch :\n\twrite : '%d'\n\tread  : '%d'\n\n", __LINE__, ca_write.level_reference, ca_read.level_reference) ;
-		errors ++ ;
-		} ;
-
-	// TODO: make this more helpful
-	if (memcmp (ca_write.post_timers, ca_read.post_timers, sizeof (ca_write.post_timers)) != 0)
-	{	printf ("\n\nLine %d : post_timers mismatch :\n'\n\n", __LINE__) ;
-		errors ++ ;
-		} ;
-
-	if (memcmp (ca_write.url, ca_read.url, sizeof (ca_write.url)) != 0)
-	{	printf ("\n\nLine %d : url mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.url, ca_read.url) ;
-		errors ++ ;
-		} ;
-
-
-	if (memcmp (ca_write.tag_text, ca_read.tag_text, (size_t) (ca_read.tag_text_size)) != 0)
-	{	printf ("\n\nLine %d : tag_text mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.tag_text, ca_read.tag_text) ;
-		errors ++ ;
-		} ;
-
-
-	if (errors)
-		exit (1) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* cart_test */
-
-static	void
-cart_rdwr_test (const char *filename, int filetype)
-{	SF_CART_INFO cinfo ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-
-	print_test_name (__func__, filename) ;
-
-	create_short_sndfile (filename, filetype, 2) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	memset (&cinfo, 0, sizeof (cinfo)) ;
-
-	snprintf (cinfo.artist, sizeof (cinfo.artist), "Test artist") ;
-	snprintf (cinfo.version, sizeof (cinfo.version), "Test version") ;
-	snprintf (cinfo.cut_id, sizeof (cinfo.cut_id), "Test cut ID") ;
-	snprintf (cinfo.client_id, sizeof (cinfo.client_id), "Test client ID") ;
-	snprintf (cinfo.category, sizeof (cinfo.category), "Test category") ;
-	snprintf (cinfo.classification, sizeof (cinfo.classification), "Test classification") ;
-	snprintf (cinfo.out_cue, sizeof (cinfo.out_cue), "Test out cue") ;
-	snprintf (cinfo.start_date, sizeof (cinfo.start_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (cinfo.start_time, sizeof (cinfo.start_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (cinfo.end_date, sizeof (cinfo.end_date), "%d/%02d/%02d", 2006, 3, 30) ;
-	snprintf (cinfo.end_time, sizeof (cinfo.end_time), "%02d:%02d:%02d", 20, 27, 0) ;
-	snprintf (cinfo.producer_app_id, sizeof (cinfo.producer_app_id), "Test producer app id") ;
-	snprintf (cinfo.producer_app_version, sizeof (cinfo.producer_app_version), "Test producer app version") ;
-	snprintf (cinfo.user_def, sizeof (cinfo.user_def), "test user def test test") ;
-	cinfo.level_reference = 42 ;
-	snprintf (cinfo.url, sizeof (cinfo.url), "http://www.test.com/test_url") ;
-	snprintf (cinfo.tag_text, sizeof (cinfo.tag_text), "tag text test!\r\n") ;
-	cinfo.tag_text_size = strlen (cinfo.tag_text) ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-	frames = sfinfo.frames ;
-	if (sf_command (file, SFC_SET_CART_INFO, &cinfo, sizeof (cinfo)) != SF_FALSE)
-	{	printf ("\n\nLine %d : sf_command (SFC_SET_CART_INFO) should have failed but didn't.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (file) ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* cart_rdwr_test */
-
-/*==============================================================================
-*/
-
-static	void
-channel_map_test (const char *filename, int filetype)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	int channel_map_read [4], channel_map_write [4] =
-	{	SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE,
-		SF_CHANNEL_MAP_REAR_CENTER
-		} ;
-
-	print_test_name ("channel_map_test", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 11025 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= ARRAY_LEN (channel_map_read) ;
-
-	switch (filetype & SF_FORMAT_TYPEMASK)
-	{	/* WAVEX and RF64 have a default channel map, even if you don't specify one. */
-		case SF_FORMAT_WAVEX :
-		case SF_FORMAT_RF64 :
-			/* Write file without channel map. */
-			file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-			test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-			sf_close (file) ;
-
-			/* Read file making default channel map exists. */
-			file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-			exit_if_true (
-				sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map_read, sizeof (channel_map_read)) == SF_FALSE,
-				"\n\nLine %d : sf_command (SFC_GET_CHANNEL_MAP_INFO) should not have failed.\n\n", __LINE__
-				) ;
-			check_log_buffer_or_die (file, __LINE__) ;
-			sf_close (file) ;
-			break ;
-
-		default :
-			break ;
-		} ;
-
-	/* Write file with a channel map. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	exit_if_true (
-		sf_command (file, SFC_SET_CHANNEL_MAP_INFO, channel_map_write, sizeof (channel_map_write)) == SF_FALSE,
-		"\n\nLine %d : sf_command (SFC_SET_CHANNEL_MAP_INFO) failed.\n\n", __LINE__
-		) ;
-	test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-	/* Read file making sure no channel map exists. */
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	exit_if_true (
-		sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map_read, sizeof (channel_map_read)) != SF_TRUE,
-		"\n\nLine %d : sf_command (SFC_GET_CHANNEL_MAP_INFO) failed.\n\n", __LINE__
-		) ;
-	check_log_buffer_or_die (file, __LINE__) ;
-	sf_close (file) ;
-
-	exit_if_true (
-		memcmp (channel_map_read, channel_map_write, sizeof (channel_map_read)) != 0,
-		"\n\nLine %d : Channel map read does not match channel map written.\n\n", __LINE__
-		) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* channel_map_test */
-
-static	void
-raw_needs_endswap_test (const char *filename, int filetype)
-{	static int subtypes [] =
-	{	SF_FORMAT_FLOAT, SF_FORMAT_DOUBLE,
-		SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-		} ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	unsigned k ;
-	int needs_endswap ;
-
-	print_test_name (__func__, filename) ;
-
-	for (k = 0 ; k < ARRAY_LEN (subtypes) ; k++)
-	{
-		if (filetype == (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF))
-			switch (subtypes [k])
-			{	/* Little endian AIFF does not AFAIK support fl32 and fl64. */
-				case SF_FORMAT_FLOAT :
-				case SF_FORMAT_DOUBLE :
-					continue ;
-				default :
-					break ;
-				} ;
-
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-		sfinfo.samplerate	= 11025 ;
-		sfinfo.format		= filetype | subtypes [k] ;
-		sfinfo.channels		= 1 ;
-
-		file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-		test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-		sf_close (file) ;
-
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-		file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-		needs_endswap = sf_command (file, SFC_RAW_DATA_NEEDS_ENDSWAP, NULL, 0) ;
-
-		switch (filetype)
-		{	case SF_FORMAT_WAV :
-			case SF_FORMAT_WAVEX :
-			case SF_FORMAT_AIFF | SF_ENDIAN_LITTLE :
-				exit_if_true (needs_endswap != CPU_IS_BIG_ENDIAN,
-					"\n\nLine %d : SFC_RAW_DATA_NEEDS_ENDSWAP failed for (%d | %d).\n\n", __LINE__, filetype, k) ;
-				break ;
-
-			case SF_FORMAT_AIFF :
-			case SF_FORMAT_WAV | SF_ENDIAN_BIG :
-				exit_if_true (needs_endswap != CPU_IS_LITTLE_ENDIAN,
-					"\n\nLine %d : SFC_RAW_DATA_NEEDS_ENDSWAP failed for (%d | %d).\n\n", __LINE__, filetype, k) ;
-				break ;
-
-			default :
-				printf ("\n\nLine %d : bad format value %d.\n\n", __LINE__, filetype) ;
-				exit (1) ;
-				break ;
-			} ;
-
-		sf_close (file) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* raw_needs_endswap_test */
diff --git a/libs/libsndfile/tests/compression_size_test.c b/libs/libsndfile/tests/compression_size_test.c
deleted file mode 100644
index ddacf94905..0000000000
--- a/libs/libsndfile/tests/compression_size_test.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-#include	"dft_cmp.h"
-
-#define	SAMPLE_RATE		16000
-#define	DATA_LENGTH		(SAMPLE_RATE)
-
-static float data_out [DATA_LENGTH] ;
-
-static inline float
-max_float (float a, float b)
-{	return a > b ? a : b ;
-} /* max_float */
-
-static void
-vorbis_test (void)
-{	static float float_data [DFT_DATA_LENGTH] ;
-	const char * filename = "vorbis_test.oga" ;
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	float max_abs = 0.0 ;
-	unsigned k ;
-
-	print_test_name ("vorbis_test", filename) ;
-
-	/* Generate float data. */
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 1.0) ;
-
-	/* Set up output file type. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-
-	/*	The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-	**	<= 22050. Increasing the sample rate to 32000 avoids triggering it.
-	**	See https://trac.xiph.org/ticket/1229
-	*/
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	const char * errstr ;
-
-		errstr = sf_strerror (NULL) ;
-		if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-		{	printf ("Line %d: sf_open (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-			dump_log_buffer (NULL) ;
-			exit (1) ;
-			} ;
-
-		printf ("\n                                  Sample rate -> 32kHz    ") ;
-		sfinfo.samplerate = 32000 ;
-
-		file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-		} ;
-
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	memset (float_data, 0, sizeof (float_data)) ;
-
-	/* Read the file back in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	for (k = 0 ; k < ARRAY_LEN (float_data) ; k ++)
-		max_abs = max_float (max_abs, fabs (float_data [k])) ;
-
-	if (max_abs > 1.021)
-	{	printf ("\n\n    Error : max_abs %f should be < 1.021.\n\n", max_abs) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-	unlink (filename) ;
-} /* vorbis_test */
-
-static void
-compression_size_test (int format, const char * filename)
-{	/*
-	**	Encode two files, one at quality 0.3 and one at quality 0.5 and then
-	**	make sure that the quality 0.3 files is the smaller of the two.
-	*/
-	char q3_fname [64] ;
-	char q6_fname [64] ;
-	char test_name [64] ;
-
-	SNDFILE *q3_file, *q6_file ;
-	SF_INFO sfinfo ;
-	int q3_size, q6_size ;
-	double quality ;
-	int k ;
-
-	snprintf (q3_fname, sizeof (q3_fname), "q3_%s", filename) ;
-	snprintf (q6_fname, sizeof (q6_fname), "q6_%s", filename) ;
-
-	snprintf (test_name, sizeof (test_name), "q[36]_%s", filename) ;
-	print_test_name (__func__, test_name) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = format ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	q3_file = test_open_file_or_die (q3_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	q6_file = test_open_file_or_die (q6_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	quality = 0.3 ;
-	sf_command (q3_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-	quality = 0.6 ;
-	sf_command (q6_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-
-	for (k = 0 ; k < 5 ; k++)
-	{	gen_lowpass_signal_float (data_out, ARRAY_LEN (data_out)) ;
-		test_write_float_or_die (q3_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-		test_write_float_or_die (q6_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-		} ;
-
-	sf_close (q3_file) ;
-	sf_close (q6_file) ;
-
-	q3_size = file_length (q3_fname) ;
-	q6_size = file_length (q6_fname) ;
-
-	if (q3_size >= q6_size)
-	{	printf ("\n\nLine %d : q3 size (%d) >= q5 size (%d)\n\n", __LINE__, q3_size, q6_size) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-	unlink (q3_fname) ;
-	unlink (q6_fname) ;
-} /* compression_size_test */
-
-
-
-int
-main (int argc, char *argv [])
-{	int all_tests = 0, tests = 0 ;
-
-	if (argc != 2)
-	{	printf (
-			"Usage : %s <test>\n"
-			"    Where <test> is one of:\n"
-			"        vorbis - test Ogg/Vorbis\n"
-			"        flac   - test FLAC\n"
-			"        all    - perform all tests\n",
-			argv [0]) ;
-		exit (0) ;
-		} ;
-
-	if (! HAVE_EXTERNAL_LIBS)
-	{	puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-		return 0 ;
-	} ;
-
-	if (strcmp (argv [1], "all") == 0)
-		all_tests = 1 ;
-
-	if (all_tests || strcmp (argv [1], "vorbis") == 0)
-	{	vorbis_test () ;
-		compression_size_test (SF_FORMAT_OGG | SF_FORMAT_VORBIS, "vorbis.oga") ;
-		tests ++ ;
-		} ;
-
-	if (all_tests || strcmp (argv [1], "flac") == 0)
-	{	compression_size_test (SF_FORMAT_FLAC | SF_FORMAT_PCM_16, "pcm16.flac") ;
-		tests ++ ;
-		} ;
-
-	return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/cpp_test.cc b/libs/libsndfile/tests/cpp_test.cc
deleted file mode 100644
index 364ec86ee2..0000000000
--- a/libs/libsndfile/tests/cpp_test.cc
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-
-#include <sndfile.hh>
-
-#include "utils.h"
-
-static short	sbuffer [100] ;
-static int 		ibuffer [100] ;
-static float	fbuffer [100] ;
-static double	dbuffer [100] ;
-
-static void
-ceeplusplus_wchar_test (void)
-{
-#if 0
-	LPCWSTR filename = L"wchar_test.wav" ;
-
-	print_test_name (__func__, "ceeplusplus_wchar_test.wav") ;
-
-	/* Use this scope to make sure the created file is closed. */
-	{
-		SndfileHandle file (filename, SFM_WRITE, SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 44100) ;
-
-		if (file.refCount () != 1)
-		{	printf ("\n\n%s %d : Error : Reference count (%d) should be 1.\n\n", __func__, __LINE__, file.refCount ()) ;
-			exit (1) ;
-			} ;
-
-		/*	This should check that the file did in fact get created with a
-		**	wchar_t * filename.
-		*/
-		exit_if_true (
-			GetFileAttributesW (filename) == INVALID_FILE_ATTRIBUTES,
-			"\n\nLine %d : GetFileAttributes failed.\n\n", __LINE__
-			) ;
-	}
-
-	/* Use this because the file was created with CreateFileW. */
-	DeleteFileW (filename) ;
-
-	puts ("ok") ;
-#endif
-} /* ceeplusplus_wchar_test */
-
-
-
-static void
-create_file (const char * filename, int format)
-{	SndfileHandle file ;
-
-	if (file.refCount () != 0)
-	{	printf ("\n\n%s %d : Error : Reference count (%d) should be zero.\n\n", __func__, __LINE__, file.refCount ()) ;
-		exit (1) ;
-		} ;
-
-	file = SndfileHandle (filename, SFM_WRITE, format, 2, 48000) ;
-
-	if (file.refCount () != 1)
-	{	printf ("\n\n%s %d : Error : Reference count (%d) should be 1.\n\n", __func__, __LINE__, file.refCount ()) ;
-		exit (1) ;
-		} ;
-
-	file.setString (SF_STR_TITLE, filename) ;
-
-	/* Item write. */
-	file.write (sbuffer, ARRAY_LEN (sbuffer)) ;
-	file.write (ibuffer, ARRAY_LEN (ibuffer)) ;
-	file.write (fbuffer, ARRAY_LEN (fbuffer)) ;
-	file.write (dbuffer, ARRAY_LEN (dbuffer)) ;
-
-	/* Frame write. */
-	file.writef (sbuffer, ARRAY_LEN (sbuffer) / file.channels ()) ;
-	file.writef (ibuffer, ARRAY_LEN (ibuffer) / file.channels ()) ;
-	file.writef (fbuffer, ARRAY_LEN (fbuffer) / file.channels ()) ;
-	file.writef (dbuffer, ARRAY_LEN (dbuffer) / file.channels ()) ;
-
-	/* RAII takes care of the SndfileHandle. */
-} /* create_file */
-
-static void
-check_title (const SndfileHandle & file, const char * filename)
-{	const char *title = NULL ;
-
-	title = file.getString (SF_STR_TITLE) ;
-
-	if (title == NULL)
-	{	printf ("\n\n%s %d : Error : No title.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (strcmp (filename, title) != 0)
-	{	printf ("\n\n%s %d : Error : title '%s' should be '%s'\n\n", __func__, __LINE__, title, filename) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_title */
-
-static void
-read_file (const char * filename, int format)
-{	SndfileHandle file ;
-	sf_count_t count ;
-
-	if (file)
-	{	printf ("\n\n%s %d : Error : should not be here.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	file = SndfileHandle (filename) ;
-
-	if (1)
-	{	SndfileHandle file2 = file ;
-
-		if (file.refCount () != 2 || file2.refCount () != 2)
-		{	printf ("\n\n%s %d : Error : Reference count (%d) should be two.\n\n", __func__, __LINE__, file.refCount ()) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	if (file.refCount () != 1)
-	{	printf ("\n\n%s %d : Error : Reference count (%d) should be one.\n\n", __func__, __LINE__, file.refCount ()) ;
-		exit (1) ;
-		} ;
-
-	if (! file)
-	{	printf ("\n\n%s %d : Error : should not be here.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (file.format () != format)
-	{	printf ("\n\n%s %d : Error : format 0x%08x should be 0x%08x.\n\n", __func__, __LINE__, file.format (), format) ;
-		exit (1) ;
-		} ;
-
-	if (file.channels () != 2)
-	{	printf ("\n\n%s %d : Error : channels %d should be 2.\n\n", __func__, __LINE__, file.channels ()) ;
-		exit (1) ;
-		} ;
-
-	if (file.frames () != ARRAY_LEN (sbuffer) * 4)
-	{	printf ("\n\n%s %d : Error : frames %ld should be %lu.\n\n", __func__, __LINE__,
-				(long) file.frames (), (long) ARRAY_LEN (sbuffer) * 4 / 2) ;
-		exit (1) ;
-		} ;
-
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_AU :
-				break ;
-
-		default :
-			check_title (file, filename) ;
-			break ;
-		} ;
-
-	/* Item read. */
-	file.read (sbuffer, ARRAY_LEN (sbuffer)) ;
-	file.read (ibuffer, ARRAY_LEN (ibuffer)) ;
-	file.read (fbuffer, ARRAY_LEN (fbuffer)) ;
-	file.read (dbuffer, ARRAY_LEN (dbuffer)) ;
-
-	/* Frame read. */
-	file.readf (sbuffer, ARRAY_LEN (sbuffer) / file.channels ()) ;
-	file.readf (ibuffer, ARRAY_LEN (ibuffer) / file.channels ()) ;
-	file.readf (fbuffer, ARRAY_LEN (fbuffer) / file.channels ()) ;
-	file.readf (dbuffer, ARRAY_LEN (dbuffer) / file.channels ()) ;
-
-	count = file.seek (file.frames () - 10, SEEK_SET) ;
-	if (count != file.frames () - 10)
-	{	printf ("\n\n%s %d : Error : offset (%ld) should be %ld\n\n", __func__, __LINE__,
-				(long) count, (long) (file.frames () - 10)) ;
-		exit (1) ;
-		} ;
-
-	count = file.read (sbuffer, ARRAY_LEN (sbuffer)) ;
-	if (count != 10 * file.channels ())
-	{	printf ("\n\n%s %d : Error : count (%ld) should be %ld\n\n", __func__, __LINE__,
-				(long) count, (long) (10 * file.channels ())) ;
-		exit (1) ;
-		} ;
-
-	/* RAII takes care of the SndfileHandle. */
-} /* read_file */
-
-static void
-ceeplusplus_test (const char *filename, int format)
-{
-	print_test_name ("ceeplusplus_test", filename) ;
-
-	create_file (filename, format) ;
-	read_file (filename, format) ;
-
-	remove (filename) ;
-	puts ("ok") ;
-} /* ceeplusplus_test */
-
-static void
-ceeplusplus_extra_test (void)
-{	SndfileHandle file ;
-	const char * filename = "bad_file_name.wav" ;
-	int error ;
-
-	print_test_name ("ceeplusplus_extra_test", filename) ;
-
-	file = SndfileHandle (filename) ;
-
-	error = file.error () ;
-	if (error == 0)
-	{	printf ("\n\n%s %d : error should not be zero.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (file.strError () == NULL)
-	{	printf ("\n\n%s %d : strError should not return NULL.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (file.seek (0, SEEK_SET) != 0)
-	{	printf ("\n\n%s %d : bad seek ().\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* ceeplusplus_extra_test */
-
-
-static void
-ceeplusplus_rawhandle_test (const char *filename)
-{
-	SNDFILE* handle ;
-	{
-		SndfileHandle file (filename) ;
-		handle = file.rawHandle () ;
-		sf_read_float (handle, fbuffer, ARRAY_LEN (fbuffer)) ;
-	}
-} /* ceeplusplus_rawhandle_test */
-
-static void
-ceeplusplus_takeOwnership_test (const char *filename)
-{
-	SNDFILE* handle ;
-	{
-		SndfileHandle file (filename) ;
-		handle = file.takeOwnership () ;
-	}
-
-	if (sf_read_float (handle, fbuffer, ARRAY_LEN (fbuffer)) <= 0)
-	{	printf ("\n\n%s %d : error when taking ownership of handle.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		}
-
-	if (sf_close (handle) != 0)
-	{	printf ("\n\n%s %d : cannot close file.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		}
-
-	SndfileHandle file (filename) ;
-	SndfileHandle file2 (file) ;
-
-	if (file2.takeOwnership ())
-	{	printf ("\n\n%s %d : taking ownership of shared handle is not allowed.\n\n", __func__, __LINE__) ;
-		exit (1) ;
-		}
-} /* ceeplusplus_takeOwnership_test */
-
-static void
-ceeplusplus_handle_test (const char *filename, int format)
-{
-	print_test_name ("ceeplusplus_handle_test", filename) ;
-
-	create_file (filename, format) ;
-
-	if (0) ceeplusplus_rawhandle_test (filename) ;
-	ceeplusplus_takeOwnership_test (filename) ;
-
-	remove (filename) ;
-	puts ("ok") ;
-} /* ceeplusplus_test */
-
-int
-main (void)
-{
-	ceeplusplus_test ("cpp_test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-	ceeplusplus_test ("cpp_test.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_S8) ;
-	ceeplusplus_test ("cpp_test.au", SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-
-	ceeplusplus_extra_test () ;
-	ceeplusplus_handle_test ("cpp_test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-	ceeplusplus_wchar_test () ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/dft_cmp.c b/libs/libsndfile/tests/dft_cmp.c
deleted file mode 100644
index 439a53949a..0000000000
--- a/libs/libsndfile/tests/dft_cmp.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<math.h>
-
-#include	"dft_cmp.h"
-#include	"utils.h"
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-#define		DFT_SPEC_LENGTH		(DFT_DATA_LENGTH / 2)
-
-static void	dft_magnitude (const double *data, double *spectrum) ;
-static double calc_max_spectral_difference (const double *spec1, const double *spec2) ;
-
-/*--------------------------------------------------------------------------------
-**	Public functions.
-*/
-
-double
-dft_cmp_float (int linenum, const float *in_data, const float *test_data, int len, double target_snr, int allow_exit)
-{	static double orig [DFT_DATA_LENGTH] ;
-	static double test [DFT_DATA_LENGTH] ;
-	unsigned	k ;
-
-	if (len != DFT_DATA_LENGTH)
-	{	printf ("Error (line %d) : dft_cmp_float : Bad input array length.\n", linenum) ;
-		return 1 ;
-		} ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-	{	test [k] = test_data [k] ;
-		orig [k] = in_data [k] ;
-		} ;
-
-	return dft_cmp_double (linenum, orig, test, len, target_snr, allow_exit) ;
-} /* dft_cmp_float */
-
-double
-dft_cmp_double (int linenum, const double *orig, const double *test, int len, double target_snr, int allow_exit)
-{	static double orig_spec [DFT_SPEC_LENGTH] ;
-	static double test_spec [DFT_SPEC_LENGTH] ;
-	double		snr ;
-
-	if (! orig || ! test)
-	{	printf ("Error (line %d) : dft_cmp_double : Bad input arrays.\n", linenum) ;
-		return 1 ;
-		} ;
-
-	if (len != DFT_DATA_LENGTH)
-	{	printf ("Error (line %d) : dft_cmp_double : Bad input array length.\n", linenum) ;
-		return 1 ;
-		} ;
-
-	dft_magnitude (orig, orig_spec) ;
-	dft_magnitude (test, test_spec) ;
-
-	snr = calc_max_spectral_difference (orig_spec, test_spec) ;
-
-	if (snr > target_snr)
-	{	printf ("\n\nLine %d: Actual SNR (% 4.1f) > target SNR (% 4.1f).\n\n", linenum, snr, target_snr) ;
-		oct_save_double	(orig, test, len) ;
-		if (allow_exit)
-			exit (1) ;
-		} ;
-
-	if (snr < -500.0)
-		snr = -500.0 ;
-
-	return snr ;
-} /* dft_cmp_double */
-
-/*--------------------------------------------------------------------------------
-**	Quick dirty calculation of magnitude spectrum for real valued data using
-**	Discrete Fourier Transform. Since the data is real, the DFT is only
-**	calculated for positive frequencies.
-*/
-
-static void
-dft_magnitude (const double *data, double *spectrum)
-{	static double cos_angle [DFT_DATA_LENGTH] = { 0.0 } ;
-	static double sin_angle [DFT_DATA_LENGTH] ;
-
-	double	real_part, imag_part ;
-	int		k, n ;
-
-	/* If sine and cosine tables haven't been initialised, do so. */
-	if (cos_angle [0] == 0.0)
-		for (n = 0 ; n < DFT_DATA_LENGTH ; n++)
-		{	cos_angle [n] = cos (2.0 * M_PI * n / DFT_DATA_LENGTH) ;
-			sin_angle [n] = -1.0 * sin (2.0 * M_PI * n / DFT_DATA_LENGTH) ;
-			} ;
-
-	/* DFT proper. Since the data is real, only generate a half spectrum. */
-	for (k = 1 ; k < DFT_SPEC_LENGTH ; k++)
-	{	real_part = 0.0 ;
-		imag_part = 0.0 ;
-
-		for (n = 0 ; n < DFT_DATA_LENGTH ; n++)
-		{	real_part += data [n] * cos_angle [(k * n) % DFT_DATA_LENGTH] ;
-			imag_part += data [n] * sin_angle [(k * n) % DFT_DATA_LENGTH] ;
-			} ;
-
-		spectrum [k] = sqrt (real_part * real_part + imag_part * imag_part) ;
-		} ;
-
-	spectrum [DFT_DATA_LENGTH - 1] = 0.0 ;
-
-	spectrum [0] = spectrum [1] = spectrum [2] = spectrum [3] = spectrum [4] = 0.0 ;
-
-	return ;
-} /* dft_magnitude */
-
-static double
-calc_max_spectral_difference (const double *orig, const double *test)
-{	double orig_max = 0.0, max_diff = 0.0 ;
-	int	k ;
-
-	for (k = 0 ; k < DFT_SPEC_LENGTH ; k++)
-	{	if (orig_max < orig [k])
-			orig_max = orig [k] ;
-		if (max_diff < fabs (orig [k] - test [k]))
-			max_diff = fabs (orig [k] - test [k]) ;
-		} ;
-
-	if (max_diff < 1e-25)
-		return -500.0 ;
-
-	return 20.0 * log10 (max_diff / orig_max) ;
-} /* calc_max_spectral_difference */
diff --git a/libs/libsndfile/tests/dft_cmp.h b/libs/libsndfile/tests/dft_cmp.h
deleted file mode 100644
index 3cbdd118e7..0000000000
--- a/libs/libsndfile/tests/dft_cmp.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#define		DFT_DATA_LENGTH		(2048)
-
-double	dft_cmp_float (int linenum, const float *orig, const float *test, int len, double tolerance, int allow_exit) ;
-
-double	dft_cmp_double (int linenum, const double *orig, const double *test, int len, double tolerance, int allow_exit) ;
-
diff --git a/libs/libsndfile/tests/dither_test.c b/libs/libsndfile/tests/dither_test.c
deleted file mode 100644
index e9eef7c136..0000000000
--- a/libs/libsndfile/tests/dither_test.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-
-#include	<stdio.h>
-#include	<stdlib.h>
-#include	<unistd.h>
-#include	<string.h>
-#include	<math.h>
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN		(1 << 16)
-#define LOG_BUFFER_SIZE	1024
-
-static void	dither_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static	short	data_out [BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test WAV file peak chunk\n") ;
-		printf ("           aiff - test AIFF file PEAK chunk\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	dither_test ("dither.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	dither_test ("dither.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	dither_test ("dither.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	dither_test ("dither.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	dither_test ("dither.nist", SF_FORMAT_NIST | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	dither_test ("dither.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	dither_test ("dither.ircam", SF_FORMAT_IRCAM | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	dither_test ("dither.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	dither_test ("dither.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	dither_test ("dither.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	dither_test ("dither.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	dither_test ("dither.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_S8) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-dither_test (const char *filename, int filetype)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	SF_DITHER_INFO	dither ;
-
-	print_test_name ("dither_test", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/* Check for old version of the dither API. */
-	if (sf_command (file, SFC_SET_DITHER_ON_WRITE, NULL, SF_TRUE) == 0)
-	{	printf ("\n\nLine %d: Should have an error here but don't.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	memset (&dither, 0, sizeof (dither)) ;
-	dither.type = SFD_WHITE ;
-	dither.level = 0 ;
-
-	if (sf_command (file, SFC_SET_DITHER_ON_WRITE, &dither, sizeof (dither)) != 0)
-	{	printf ("\n\nLine %d: sf_command (SFC_SET_DITHER_ON_WRITE) returned error : %s\n\n",
-			__LINE__, sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("\n\nLine %d: Bad frame count %d (should be %d)\n\n", __LINE__, (int) sfinfo.frames, BUFFER_LEN) ;
-		} ;
-
-	sf_close (file) ;
-	/*-unlink (filename) ;-*/
-
-	puts ("ok") ;
-} /* dither_test */
-
diff --git a/libs/libsndfile/tests/dwvw_test.c b/libs/libsndfile/tests/dwvw_test.c
deleted file mode 100644
index 2bd11d18c9..0000000000
--- a/libs/libsndfile/tests/dwvw_test.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(10000)
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-static	void	dwvw_test (const char *filename, int format, int bit_width) ;
-
-int
-main (void)
-{
-	dwvw_test ("dwvw12.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_12, 12) ;
-	dwvw_test ("dwvw16.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_16, 16) ;
-	dwvw_test ("dwvw24.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_24, 24) ;
-
-	return 0 ;
-} /* main */
-
-static void
-dwvw_test (const char *filename, int format, int bit_width)
-{	static	int		write_buf [BUFFER_SIZE] ;
-	static	int		read_buf [BUFFER_SIZE] ;
-
-	SNDFILE	*file ;
-	SF_INFO sfinfo ;
-	double 	value ;
-	int		k, bit_mask ;
-
-	srand (123456) ;
-
-	/* Only want to grab the top bit_width bits. */
-	bit_mask = (-1 << (32 - bit_width)) ;
-
-	print_test_name ("dwvw_test", filename) ;
-
-	sf_info_setup (&sfinfo, format, 44100, 1) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/* Generate random.frames. */
-	for (k = 0 ; k < BUFFER_SIZE / 2 ; k++)
-	{	value = 0x7FFFFFFF * sin (123.0 / sfinfo.samplerate * 2 * k * M_PI) ;
-		write_buf [k] = bit_mask & lrint (value) ;
-		} ;
-
-	for ( ; k < BUFFER_SIZE ; k++)
-		write_buf [k] = bit_mask & ((rand () << 11) ^ (rand () >> 11)) ;
-
-	sf_write_int (file, write_buf, BUFFER_SIZE) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if ((k = sf_read_int (file, read_buf, BUFFER_SIZE)) != BUFFER_SIZE)
-	{	printf ("Error (line %d) : Only read %d/%d.frames.\n", __LINE__, k, BUFFER_SIZE) ;
-		exit (1) ;
-		}
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-	{	if (read_buf [k] != write_buf [k])
-		{	printf ("Error (line %d) : %d != %d at position %d/%d\n", __LINE__,
-				write_buf [k] >> (32 - bit_width), read_buf [k] >> (32 - bit_width),
-				k, BUFFER_SIZE) ;
-			oct_save_int (write_buf, read_buf, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-
-	return ;
-} /* dwvw_test */
-
diff --git a/libs/libsndfile/tests/error_test.c b/libs/libsndfile/tests/error_test.c
deleted file mode 100644
index 4207c0a3cf..0000000000
--- a/libs/libsndfile/tests/error_test.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if OS_IS_WIN32
-#include <windows.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(1 << 15)
-#define	SHORT_BUFFER	(256)
-
-static void
-error_number_test (void)
-{	const char 	*noerror, *errstr ;
-	int			k ;
-
-	print_test_name ("error_number_test", "") ;
-
-	noerror = sf_error_number (0) ;
-
-	for (k = 1 ; k < 300 ; k++)
-	{	errstr = sf_error_number (k) ;
-
-		/* Test for termination condition. */
-		if (errstr == noerror)
-			break ;
-
-		/* Test for error. */
-		if (strstr (errstr, "This is a bug in libsndfile."))
-		{	printf ("\n\nError : error number %d : %s\n\n\n", k, errstr) ;
-			exit (1) ;
-			} ;
-		} ;
-
-
-	puts ("ok") ;
-	return ;
-} /* error_number_test */
-
-static void
-error_value_test (void)
-{	static unsigned char aiff_data [0x1b0] =
-	{	'F' , 'O' , 'R' , 'M' ,
-		0x00, 0x00, 0x01, 0xA8, /* FORM length */
-
-		'A' , 'I' , 'F' , 'C' ,
-		} ;
-
-	const char *filename = "error.aiff" ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	int error_num ;
-
-	print_test_name ("error_value_test", filename) ;
-
-	dump_data_to_file (filename, aiff_data, sizeof (aiff_data)) ;
-
-	file = sf_open (filename, SFM_READ, &sfinfo) ;
-	if (file != NULL)
-	{	printf ("\n\nLine %d : Should not have been able to open this file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((error_num = sf_error (NULL)) <= 1 || error_num > 300)
-	{	printf ("\n\nLine %d : Should not have had an error number of %d.\n\n", __LINE__, error_num) ;
-		exit (1) ;
-		} ;
-
-	remove (filename) ;
-	puts ("ok") ;
-	return ;
-} /* error_value_test */
-
-static void
-no_file_test (const char * filename)
-{	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-
-	print_test_name (__func__, filename) ;
-
-	unlink (filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-	exit_if_true (sndfile != NULL, "\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* no_file_test */
-
-static void
-zero_length_test (const char *filename)
-{	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-	FILE		*file ;
-
-	print_test_name (__func__, filename) ;
-
-	/* Create a zero length file. */
-	file = fopen (filename, "w") ;
-	exit_if_true (file == NULL, "\n\nLine %d : fopen ('%s') failed.\n", __LINE__, filename) ;
-	fclose (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-	exit_if_true (sndfile != NULL, "\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-
-	exit_if_true (0 && sf_error (NULL) != SF_ERR_UNRECOGNISED_FORMAT,
-		"\n\nLine %3d : Error : %s\n       should be : %s\n", __LINE__,
-		sf_strerror (NULL), sf_error_number (SF_ERR_UNRECOGNISED_FORMAT)) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* zero_length_test */
-
-static void
-bad_wav_test (const char * filename)
-{	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-
-	FILE		*file ;
-	const char	data [] = "RIFF    WAVEfmt            " ;
-
-	print_test_name (__func__, filename) ;
-
-	if ((file = fopen (filename, "w")) == NULL)
-	{	printf ("\n\nLine %d : fopen returned NULL.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	exit_if_true (fwrite (data, sizeof (data), 1, file) != 1, "\n\nLine %d : fwrite failed.\n", __LINE__) ;
-	fclose (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-	if (sndfile)
-	{	printf ("\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* bad_wav_test */
-
-static void
-error_close_test (void)
-{	static short buffer [SHORT_BUFFER] ;
-	const char	*filename = "error_close.wav" ;
-	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-	FILE		*file ;
-
-	print_test_name (__func__, filename) ;
-
-	/* Open a FILE* from which we will extract a file descriptor. */
-	if ((file = fopen (filename, "w")) == NULL)
-	{	printf ("\n\nLine %d : fopen returned NULL.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Set parameters for writing the file. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-
-	sndfile = sf_open_fd (fileno (file), SFM_WRITE, &sfinfo, SF_TRUE) ;
-	if (sndfile == NULL)
-	{	printf ("\n\nLine %d : sf_open_fd failed : %s\n", __LINE__, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	test_write_short_or_die (sndfile, 0, buffer, ARRAY_LEN (buffer), __LINE__) ;
-
-	/* Now close the fd associated with file before calling sf_close. */
-	fclose (file) ;
-
-	if (sf_close (sndfile) == 0)
-	{
-#if OS_IS_WIN32
-		OSVERSIONINFOEX osvi ;
-
-		memset (&osvi, 0, sizeof (OSVERSIONINFOEX)) ;
-		osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX) ;
-
-		if (GetVersionEx ((OSVERSIONINFO *) &osvi))
-		{	printf ("\n\nLine %d : sf_close should not have returned zero.\n", __LINE__) ;
-			printf ("\nHowever, this is a known bug in version %d.%d of windows so we'll ignore it.\n\n",
-					(int) osvi.dwMajorVersion, (int) osvi.dwMinorVersion) ;
-			} ;
-#else
-		printf ("\n\nLine %d : sf_close should not have returned zero.\n", __LINE__) ;
-		exit (1) ;
-#endif
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* error_close_test */
-
-int
-main (void)
-{
-	error_number_test () ;
-	error_value_test () ;
-
-	error_close_test () ;
-
-	no_file_test ("no_file.wav") ;
-	zero_length_test ("zero_length.wav") ;
-	bad_wav_test ("bad_wav.wav") ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/external_libs_test.c b/libs/libsndfile/tests/external_libs_test.c
deleted file mode 100644
index 86b029078e..0000000000
--- a/libs/libsndfile/tests/external_libs_test.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static void major_format_test (void) ;
-static void subtype_format_test (void) ;
-static void simple_format_test (void) ;
-
-int
-main (void)
-{
-	major_format_test () ;
-	subtype_format_test () ;
-	simple_format_test () ;
-
-	return 0 ;
-} /* main */
-
-static void
-major_format_test (void)
-{	SF_FORMAT_INFO	info ;
-	int have_ogg = 0, have_flac = 0 ;
-	int m, major_count ;
-
-	print_test_name (__func__, NULL) ;
-
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-	for (m = 0 ; m < major_count ; m++)
-	{	info.format = m ;
-		sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-		have_flac = info.format == SF_FORMAT_FLAC ? 1 : have_flac ;
-		have_ogg = info.format == SF_FORMAT_OGG ? 1 : have_ogg ;
-		} ;
-
-	if (HAVE_EXTERNAL_LIBS)
-	{	exit_if_true (have_flac == 0, "\n\nLine %d : FLAC should be available.\n\n", __LINE__) ;
-		exit_if_true (have_ogg == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-		}
-	else
-	{	exit_if_true (have_flac, "\n\nLine %d : FLAC should not be available.\n\n", __LINE__) ;
-		exit_if_true (have_ogg, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-		} ;
-
-	puts ("ok") ;
-} /* major_format_test */
-
-static void
-subtype_format_test (void)
-{	SF_FORMAT_INFO	info ;
-	int have_vorbis = 0 ;
-	int s, subtype_count ;
-
-	print_test_name (__func__, NULL) ;
-
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &subtype_count, sizeof (int)) ;
-
-	for (s = 0 ; s < subtype_count ; s++)
-	{	info.format = s ;
-		sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &info, sizeof (info)) ;
-
-		have_vorbis = info.format == SF_FORMAT_VORBIS ? 1 : have_vorbis ;
-		} ;
-
-	if (HAVE_EXTERNAL_LIBS)
-		exit_if_true (have_vorbis == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-	else
-		exit_if_true (have_vorbis, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-
-	puts ("ok") ;
-} /* subtype_format_test */
-
-static void
-simple_format_test (void)
-{	SF_FORMAT_INFO	info ;
-	int have_flac = 0, have_ogg = 0, have_vorbis = 0 ;
-	int s, simple_count ;
-
-	print_test_name (__func__, NULL) ;
-
-	sf_command (NULL, SFC_GET_SIMPLE_FORMAT_COUNT, &simple_count, sizeof (int)) ;
-
-	for (s = 0 ; s < simple_count ; s++)
-	{	info.format = s ;
-		sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &info, sizeof (info)) ;
-
-		switch (info.format & SF_FORMAT_TYPEMASK)
-		{	case SF_FORMAT_FLAC :
-				have_flac = 1 ;
-				break ;
-
-			case SF_FORMAT_OGG :
-				have_ogg = 1 ;
-				break ;
-
-			default :
-				break ;
-			} ;
-
-		switch (info.format & SF_FORMAT_SUBMASK)
-		{	case SF_FORMAT_VORBIS :
-				have_vorbis = 1 ;
-				break ;
-
-			default :
-				break ;
-			} ;
-
-		} ;
-
-	if (HAVE_EXTERNAL_LIBS)
-	{	exit_if_true (have_flac == 0, "\n\nLine %d : FLAC should be available.\n\n", __LINE__) ;
-		exit_if_true (have_ogg == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-		exit_if_true (have_vorbis == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-		}
-	else
-	{	exit_if_true (have_flac, "\n\nLine %d : FLAC should not be available.\n\n", __LINE__) ;
-		exit_if_true (have_ogg, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-		exit_if_true (have_vorbis, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-		} ;
-
-	puts ("ok") ;
-} /* simple_format_test */
diff --git a/libs/libsndfile/tests/fix_this.c b/libs/libsndfile/tests/fix_this.c
deleted file mode 100644
index 4cbb8d43ac..0000000000
--- a/libs/libsndfile/tests/fix_this.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <math.h>
-#include <inttypes.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define		BUFFER_SIZE		(1 << 14)
-#define		SAMPLE_RATE		(11025)
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-static	void	lcomp_test_int	(const char *str, const char *filename, int filetype, double margin) ;
-
-static	int		error_function (double data, double orig, double margin) ;
-static	int		decay_response (int k) ;
-
-static	void	gen_signal_double (double *data, double scale, int datalen) ;
-
-/* Force the start of these buffers to be double aligned. Sparc-solaris will
-** choke if they are not.
-*/
-
-typedef union
-{	double	d [BUFFER_SIZE + 1] ;
-	int 	i [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-static	BUFFER	data_buffer ;
-static	BUFFER	orig_buffer ;
-
-int
-main (void)
-{	const char	*filename = "test.au" ;
-
-	lcomp_test_int	("au_g721", filename, SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_G721_32, 0.06) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-lcomp_test_int (const char *str, const char *filename, int filetype, double margin)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, m, *orig, *data ;
-	sf_count_t	datalen, seekpos ;
-	int64_t		sum_abs ;
-	double		scale ;
-
-	printf ("\nThis is program is not part of the libsndfile test suite.\n\n") ;
-
-	printf ("    lcomp_test_int      : %s ... ", str) ;
-	fflush (stdout) ;
-
-	datalen = BUFFER_SIZE ;
-
-	scale = 1.0 * 0x10000 ;
-
-	data = data_buffer.i ;
-	orig = orig_buffer.i ;
-
-	gen_signal_double (orig_buffer.d, 32000.0 * scale, datalen) ;
-	for (k = 0 ; k < datalen ; k++)
-		orig [k] = orig_buffer.d [k] ;
-
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_writef_int (file, orig, datalen)) != datalen)
-	{	printf ("sf_writef_int failed with short write (%" PRId64 " => %d).\n", datalen, k) ;
-		exit (1) ;
-		} ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (int)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-	{	printf ("sf_open_read failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + datalen / 2))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if ((k = sf_readf_int (file, data, datalen)) != datalen)
-	{	printf ("Line %d: short read (%d should be %" PRId64 ").\n", __LINE__, k, datalen) ;
-		exit (1) ;
-		} ;
-
-	sum_abs = 0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k] / scale, orig [k] / scale, margin))
-		{	printf ("Line %d: Incorrect sample (#%d : %f should be %f).\n", __LINE__, k, data [k] / scale, orig [k] / scale) ;
-			oct_save_int (orig, data, datalen) ;
-			exit (1) ;
-			} ;
-		sum_abs += abs (data [k]) ;
-		} ;
-
-	if (sum_abs < 1.0)
-	{	printf ("Line %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("Line %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__, sfinfo.frames - datalen, k) ;
-		exit (1) ;
-		} ;
-
-	/*	This check is only for block based encoders which must append silence
-	**	to the end of a file so as to fill out a block.
-	*/
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [k] / scale) > decay_response (k))
-			{	printf ("Line %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, k, data [k], decay_response (k)) ;
-				exit (1) ;
-				} ;
-
-	if (! sfinfo.seekable)
-	{	printf ("ok\n") ;
-		return ;
-		} ;
-
-	/* Now test sf_seek function. */
-
-	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-	{	printf ("Line %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (m = 0 ; m < 3 ; m++)
-	{	int n ;
-
-		if ((k = sf_readf_int (file, data, 11)) != 11)
-		{	printf ("Line %d: Incorrect read length (11 => %d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		for (k = 0 ; k < 11 ; k++)
-			if (error_function (data [k] / scale, orig [k + m * 11] / scale, margin))
-			{	printf ("Line %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + m * 11, orig [k + m * 11], data [k]) ;
-				for (n = 0 ; n < 1 ; n++)
-					printf ("%d ", data [n]) ;
-				printf ("\n") ;
-				exit (1) ;
-				} ;
-		} ;
-
-	seekpos = BUFFER_SIZE / 10 ;
-
-	/* Check seek from start of file. */
-	if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-	{	printf ("Seek to start of file + %" PRId64 " failed (%d).\n", seekpos, k) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_int (file, data, 1)) != 1)
-	{	printf ("Line %d: sf_readf_int (file, data, 1) returned %d.\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	if (error_function ((double) data [0], (double) orig [seekpos], margin))
-	{	printf ("Line %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-	{	printf ("Line %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %" PRId64 ")\n", __LINE__, k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-	k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-	sf_readf_int (file, data, 1) ;
-	if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
-	{	printf ("Line %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos], k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-	/* Check seek backward from current position. */
-	k = sf_seek (file, -20, SEEK_CUR) ;
-	sf_readf_int (file, data, 1) ;
-	if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
-	{	printf ("sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", data [0], orig [seekpos], k, seekpos) ;
-		exit (1) ;
-		} ;
-
-	/* Check that read past end of file returns number of items. */
-	sf_seek (file, (int) sfinfo.frames, SEEK_SET) ;
-
- 	if ((k = sf_readf_int (file, data, datalen)) != 0)
- 	{	printf ("Line %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
- 		exit (1) ;
- 		} ;
-
-	/* Check seek backward from end. */
-	if ((k = sf_seek (file, 5 - (int) sfinfo.frames, SEEK_END)) != 5)
-	{	printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
-		exit (1) ;
-		} ;
-
-	sf_readf_int (file, data, 1) ;
-	if (error_function (data [0] / scale, orig [5] / scale, margin))
-	{	printf ("Line %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-} /* lcomp_test_int */
-
-/*========================================================================================
-**	Auxiliary functions
-*/
-
-#define		SIGNAL_MAXVAL	30000.0
-#define		DECAY_COUNT		800
-
-static int
-decay_response (int k)
-{	if (k < 1)
-		return (int) (1.2 * SIGNAL_MAXVAL) ;
-	if (k > DECAY_COUNT)
-		return 0 ;
-	return (int) (1.2 * SIGNAL_MAXVAL * (DECAY_COUNT - k) / (1.0 * DECAY_COUNT)) ;
-} /* decay_response */
-
-static void
-gen_signal_double (double *data, double scale, int datalen)
-{	int		k, ramplen ;
-	double	amp = 0.0 ;
-
-	ramplen = datalen / 18 ;
-
-	for (k = 0 ; k < datalen ; k++)
-	{	if (k <= ramplen)
-			amp = scale * k / ((double) ramplen) ;
-		else if (k > datalen - ramplen)
-			amp = scale * (datalen - k) / ((double) ramplen) ;
-
-		data [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k + 1)) / ((double) SAMPLE_RATE))
-							+ 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k + 1)) / ((double) SAMPLE_RATE))) ;
-		} ;
-
-	return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{	double error ;
-
-	if (fabs (orig) <= 500.0)
-		error = fabs (fabs (data) - fabs (orig)) / 2000.0 ;
-	else if (fabs (orig) <= 1000.0)
-		error = fabs (data - orig) / 3000.0 ;
-	else
-		error = fabs (data - orig) / fabs (orig) ;
-
-	if (error > margin)
-	{	printf ("\n\n*******************\nError : %f\n", error) ;
-		return 1 ;
-		} ;
-	return 0 ;
-} /* error_function */
-
diff --git a/libs/libsndfile/tests/floating_point_test.c b/libs/libsndfile/tests/floating_point_test.c
deleted file mode 100644
index aaf53866ea..0000000000
--- a/libs/libsndfile/tests/floating_point_test.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "dft_cmp.h"
-#include "utils.h"
-
-#define	SAMPLE_RATE			16000
-
-static void	float_scaled_test	(const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-static void	double_scaled_test	(const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-
-static void float_short_little_test (const char * filename) ;
-static void float_short_big_test (const char * filename) ;
-static void float_int_little_test (const char * filename) ;
-static void float_int_big_test (const char * filename) ;
-static void double_short_little_test (const char * filename) ;
-static void double_short_big_test (const char * filename) ;
-static void double_int_little_test (const char * filename) ;
-static void double_int_big_test (const char * filename) ;
-
-
-static	double	double_data [DFT_DATA_LENGTH] ;
-static	double	double_test [DFT_DATA_LENGTH] ;
-
-static float	float_data [DFT_DATA_LENGTH] ;
-static float	float_test [DFT_DATA_LENGTH] ;
-
-static double	double_data [DFT_DATA_LENGTH] ;
-static short	short_data [DFT_DATA_LENGTH] ;
-static int		int_data [DFT_DATA_LENGTH] ;
-
-int
-main (int argc, char *argv [])
-{	int allow_exit = 1 ;
-
-	if (argc == 2 && ! strstr (argv [1], "no-exit"))
-		allow_exit = 0 ;
-
-#if ((HAVE_LRINTF == 0) && (HAVE_LRINT_REPLACEMENT == 0))
-	puts ("*** Cannot run this test on this platform because it lacks lrintf().") ;
-	exit (0) ;
-#endif
-
-	/* Float tests. */
-	float_scaled_test	("float.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-	/* Test both signed and unsigned 8 bit files. */
-	float_scaled_test	("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-	float_scaled_test	("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-	float_scaled_test	("pcm_16.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-	float_scaled_test	("pcm_24.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_24, -138.0) ;
-	float_scaled_test	("pcm_32.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_32, -163.0) ;
-
-	float_scaled_test	("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-	float_scaled_test	("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-	float_scaled_test	("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-	float_scaled_test	("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-	float_scaled_test	("gsm610.raw"	, allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-	float_scaled_test	("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-	float_scaled_test	("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-	float_scaled_test	("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-	/*	PAF files do not use the same encoding method for 24 bit PCM data as other file
-	**	formats so we need to explicitly test it here.
-	*/
-	float_scaled_test	("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-	float_scaled_test	("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-
-	float_scaled_test	("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-	float_scaled_test	("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-	float_scaled_test	("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-	float_scaled_test	("adpcm.vox", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-	float_scaled_test	("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-	float_scaled_test	("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -41.0) ;
-
-	float_scaled_test	("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-	float_scaled_test	("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-	float_scaled_test	("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -170.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-	float_scaled_test	("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-	float_scaled_test	("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-	float_scaled_test	("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-	float_scaled_test	("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -31.0) ;
-#endif
-
-	float_scaled_test	("replace_float.raw", allow_exit, SF_TRUE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-	/*==============================================================================
-	** Double tests.
-	*/
-
-	double_scaled_test	("double.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -300.0) ;
-
-	/* Test both signed (AIFF) and unsigned (WAV) 8 bit files. */
-	double_scaled_test	("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-	double_scaled_test	("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-	double_scaled_test	("pcm_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-	double_scaled_test	("pcm_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_24, -135.0) ;
-	double_scaled_test	("pcm_32.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_32, -184.0) ;
-
-	double_scaled_test	("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-	double_scaled_test	("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-	double_scaled_test	("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-	double_scaled_test	("ms_adpcm.wav"	, allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-	double_scaled_test	("gsm610.raw"	, allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-	double_scaled_test	("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-	double_scaled_test	("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-	double_scaled_test	("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-	/*	24 bit PCM PAF files tested here. */
-	double_scaled_test	("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-	double_scaled_test	("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-
-	double_scaled_test	("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-	double_scaled_test	("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-	double_scaled_test	("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-	double_scaled_test	("adpcm.vox" , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-	double_scaled_test	("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-	double_scaled_test	("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -42.0) ;
-
-	double_scaled_test	("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-	double_scaled_test	("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-	double_scaled_test	("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -180.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-	double_scaled_test	("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-	double_scaled_test	("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-	double_scaled_test	("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-	double_scaled_test	("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -29.0) ;
-#endif
-
-	double_scaled_test	("replace_double.raw", allow_exit, SF_TRUE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -300.0) ;
-
-	putchar ('\n') ;
-	/* Float int tests. */
-	float_short_little_test ("float_short_little.au") ;
-	float_short_big_test ("float_short_big.au") ;
-	float_int_little_test ("float_int_little.au") ;
-	float_int_big_test ("float_int_big.au") ;
-	double_short_little_test ("double_short_little.au") ;
-	double_short_big_test ("double_short_big.au") ;
-	double_int_little_test ("double_int_little.au") ;
-	double_int_big_test ("double_int_big.au") ;
-
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
- *	Here are the test functions.
- */
-
-static void
-float_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		snr ;
-
-	print_test_name ("float_scaled_test", filename) ;
-
-	gen_windowed_sine_float (float_data, DFT_DATA_LENGTH, 1.0) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DFT_DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	test_write_float_or_die (file, 0, float_data, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_test, 0, sizeof (float_test)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-	exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-	exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, float_test, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	snr = dft_cmp_float (__LINE__, float_data, float_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-	exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-	printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-	unlink (filename) ;
-
-	return ;
-} /* float_scaled_test */
-
-static void
-double_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		snr ;
-
-	print_test_name ("double_scaled_test", filename) ;
-
-	gen_windowed_sine_double (double_data, DFT_DATA_LENGTH, 0.95) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DFT_DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	test_write_double_or_die (file, 0, double_data, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_test, 0, sizeof (double_test)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-	exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-	exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, double_test, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	snr = dft_cmp_double (__LINE__, double_data, double_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-	exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-	printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-	unlink (filename) ;
-
-	return ;
-} /* double_scaled_test */
-
-/*==============================================================================
-*/
-
-
-static void
-float_short_little_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("float_short_little_test", filename) ;
-
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (short_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (float_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-		if ((unsigned) abs (short_data [k]) > max)
-			max = abs (short_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* float_short_little_test */
-
-static void
-float_short_big_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("float_short_big_test", filename) ;
-
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (short_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (float_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-		if ((unsigned) abs (short_data [k]) > max)
-			max = abs (short_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* float_short_big_test */
-
-static void
-float_int_little_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("float_int_little_test", filename) ;
-
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (int_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (float_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-		if ((unsigned) abs (int_data [k]) > max)
-			max = abs (int_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* float_int_little_test */
-
-static void
-float_int_big_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("float_int_big_test", filename) ;
-
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (int_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (float_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-		if ((unsigned) abs (int_data [k]) > max)
-			max = abs (int_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* float_int_big_test */
-
-static void
-double_short_little_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("double_short_little_test", filename) ;
-
-	gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (short_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (double_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-		if ((unsigned) abs (short_data [k]) > max)
-			max = abs (short_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* double_short_little_test */
-
-static void
-double_short_big_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("double_short_big_test", filename) ;
-
-	gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (short_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (double_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-		if ((unsigned) abs (short_data [k]) > max)
-			max = abs (short_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* double_short_big_test */
-
-static void
-double_int_little_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("double_int_little_test", filename) ;
-
-	gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (int_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (double_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-		if ((unsigned) abs (int_data [k]) > max)
-			max = abs (int_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* double_int_little_test */
-
-static void
-double_int_big_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("double_int_big_test", filename) ;
-
-	gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN (int_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN (double_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-		if ((unsigned) abs (int_data [k]) > max)
-			max = abs (int_data [k]) ;
-
-	if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* double_int_big_test */
-
-
diff --git a/libs/libsndfile/tests/floating_point_test.def b/libs/libsndfile/tests/floating_point_test.def
deleted file mode 100644
index 3441d34bc7..0000000000
--- a/libs/libsndfile/tests/floating_point_test.def
+++ /dev/null
@@ -1,32 +0,0 @@
-autogen definitions floating_point_test.tpl;
-
-endian_type = {
-	end_name		= little ;
-	end_type		= SF_ENDIAN_LITTLE ;
-	} ;
-
-endian_type = {
-	end_name		= big ;
-	end_type		= SF_ENDIAN_BIG ;
-	} ;
-
-float_type = {
-	float_name		= float ;
-	minor_type		= SF_FORMAT_FLOAT ;
-	} ;
-
-float_type = {
-	float_name		= double ;
-	minor_type		= SF_FORMAT_DOUBLE ;
-	} ;
-
-int_type = {
-	int_name		= short ;
-	int_max			= 0x7FFF ;
-	} ;
-
-int_type = {
-	int_name		= int ;
-	int_max			= 0x7FFFFFFF ;
-	} ;
-
diff --git a/libs/libsndfile/tests/floating_point_test.tpl b/libs/libsndfile/tests/floating_point_test.tpl
deleted file mode 100644
index 4b2d21caab..0000000000
--- a/libs/libsndfile/tests/floating_point_test.tpl
+++ /dev/null
@@ -1,355 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "dft_cmp.h"
-#include "utils.h"
-
-#define	SAMPLE_RATE			16000
-
-static void	float_scaled_test	(const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-static void	double_scaled_test	(const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]static void [+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test (const char * filename) ;
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type
-+]
-
-static	double	double_data [DFT_DATA_LENGTH] ;
-static	double	double_test [DFT_DATA_LENGTH] ;
-
-static float	float_data [DFT_DATA_LENGTH] ;
-static float	float_test [DFT_DATA_LENGTH] ;
-
-static double	double_data [DFT_DATA_LENGTH] ;
-static short	short_data [DFT_DATA_LENGTH] ;
-static int		int_data [DFT_DATA_LENGTH] ;
-
-int
-main (int argc, char *argv [])
-{	int allow_exit = 1 ;
-
-	if (argc == 2 && ! strstr (argv [1], "no-exit"))
-		allow_exit = 0 ;
-
-#if (HAVE_LRINTF == 0)
-	puts ("*** Cannot run this test on this platform because it lacks lrintf().") ;
-	exit (0) ;
-#endif
-
-	/* Float tests. */
-	float_scaled_test	("float.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-	/* Test both signed and unsigned 8 bit files. */
-	float_scaled_test	("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-	float_scaled_test	("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-	float_scaled_test	("pcm_16.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-	float_scaled_test	("pcm_24.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_24, -138.0) ;
-	float_scaled_test	("pcm_32.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_32, -163.0) ;
-
-	float_scaled_test	("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-	float_scaled_test	("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-	float_scaled_test	("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-	float_scaled_test	("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-	float_scaled_test	("gsm610.raw"	, allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-	float_scaled_test	("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-	float_scaled_test	("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-	float_scaled_test	("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-	/*	PAF files do not use the same encoding method for 24 bit PCM data as other file
-	**	formats so we need to explicitly test it here.
-	*/
-	float_scaled_test	("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-	float_scaled_test	("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-
-	float_scaled_test	("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-	float_scaled_test	("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-	float_scaled_test	("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-	float_scaled_test	("adpcm.vox", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-	float_scaled_test	("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-	float_scaled_test	("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -41.0) ;
-
-	float_scaled_test	("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-	float_scaled_test	("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-	float_scaled_test	("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -170.0) ;
-
-	float_scaled_test	("alac_16.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_16, -90.0) ;
-	float_scaled_test	("alac_32.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_32, -181.0) ;
-	float_scaled_test	("alac_24.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_24, -160.0) ;
-	float_scaled_test	("alac_20.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_20, -134.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-	float_scaled_test	("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-	float_scaled_test	("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-	float_scaled_test	("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-	float_scaled_test	("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -31.0) ;
-#endif
-
-	float_scaled_test	("replace_float.raw", allow_exit, SF_TRUE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-	/*==============================================================================
-	** Double tests.
-	*/
-
-	double_scaled_test	("double.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -205.0) ;
-
-	/* Test both signed (AIFF) and unsigned (WAV) 8 bit files. */
-	double_scaled_test	("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-	double_scaled_test	("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-	double_scaled_test	("pcm_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-	double_scaled_test	("pcm_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_24, -135.0) ;
-	double_scaled_test	("pcm_32.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_32, -184.0) ;
-
-	double_scaled_test	("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-	double_scaled_test	("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-	double_scaled_test	("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-	double_scaled_test	("ms_adpcm.wav"	, allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-	double_scaled_test	("gsm610.raw"	, allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-	double_scaled_test	("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-	double_scaled_test	("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-	double_scaled_test	("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-	/*	24 bit PCM PAF files tested here. */
-	double_scaled_test	("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-	double_scaled_test	("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-
-	double_scaled_test	("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-	double_scaled_test	("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-	double_scaled_test	("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-	double_scaled_test	("adpcm.vox" , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-	double_scaled_test	("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-	double_scaled_test	("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -42.0) ;
-
-	double_scaled_test	("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-	double_scaled_test	("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-	double_scaled_test	("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -180.0) ;
-
-	double_scaled_test	("alac_16.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_16, -90.0) ;
-	double_scaled_test	("alac_20.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_20, -134.0) ;
-	double_scaled_test	("alac_24.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_24, -158.0) ;
-	double_scaled_test	("alac_32.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_32, -186.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-	double_scaled_test	("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-	double_scaled_test	("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-	double_scaled_test	("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-	double_scaled_test	("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -29.0) ;
-#endif
-
-	double_scaled_test	("replace_double.raw", allow_exit, SF_TRUE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -205.0) ;
-
-	putchar ('\n') ;
-	/* Float int tests. */
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]	[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test ("[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +].au") ;
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type
-+]
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
- *	Here are the test functions.
- */
-
-static void
-float_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		snr ;
-	int			byterate ;
-
-	print_test_name ("float_scaled_test", filename) ;
-
-	gen_windowed_sine_float (float_data, DFT_DATA_LENGTH, 1.0) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DFT_DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	test_write_float_or_die (file, 0, float_data, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_test, 0, sizeof (float_test)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-	exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-	exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, float_test, DFT_DATA_LENGTH, __LINE__) ;
-
-	byterate = sf_current_byterate (file) ;
-	exit_if_true (byterate <= 0, "\n\nLine %d: byterate is zero.\n", __LINE__) ;
-
-	sf_close (file) ;
-
-	snr = dft_cmp_float (__LINE__, float_data, float_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-	exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-	printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-	unlink (filename) ;
-
-	return ;
-} /* float_scaled_test */
-
-static void
-double_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		snr ;
-	int			byterate ;
-
-	print_test_name ("double_scaled_test", filename) ;
-
-	gen_windowed_sine_double (double_data, DFT_DATA_LENGTH, 0.95) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DFT_DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	test_write_double_or_die (file, 0, double_data, DFT_DATA_LENGTH, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_test, 0, sizeof (double_test)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-	exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-	exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-	exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, double_test, DFT_DATA_LENGTH, __LINE__) ;
-
-	byterate = sf_current_byterate (file) ;
-	exit_if_true (byterate <= 0, "\n\nLine %d: byterate is zero.\n", __LINE__) ;
-
-	sf_close (file) ;
-
-	snr = dft_cmp_double (__LINE__, double_data, double_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-	exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-	printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-	unlink (filename) ;
-
-	return ;
-} /* double_scaled_test */
-
-/*==============================================================================
-*/
-
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]
-static void
-[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test (const char * filename)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	unsigned	k, max ;
-
-	print_test_name ("[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test", filename) ;
-
-	gen_windowed_sine_[+ (get "float_name") +] ([+ (get "float_name") +]_data, ARRAY_LEN ([+ (get "float_name") +]_data), 0.98) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= ARRAY_LEN ([+ (get "int_name") +]_data) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= [+ (get "end_type") +] | SF_FORMAT_AU | [+ (get "minor_type") +] ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_[+ (get "float_name") +]_or_die (file, 0, [+ (get "float_name") +]_data, ARRAY_LEN ([+ (get "float_name") +]_data), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.frames != ARRAY_LEN ([+ (get "float_name") +]_data))
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	test_read_[+ (get "int_name") +]_or_die (file, 0, [+ (get "int_name") +]_data, ARRAY_LEN ([+ (get "int_name") +]_data), __LINE__) ;
-	sf_close (file) ;
-
-	max = 0 ;
-	for (k = 0 ; k < ARRAY_LEN ([+ (get "int_name") +]_data) ; k++)
-		if ((unsigned) abs ([+ (get "int_name") +]_data [k]) > max)
-			max = abs ([+ (get "int_name") +]_data [k]) ;
-
-	if (1.0 * abs (max - [+ (get "int_max") +]) / [+ (get "int_max") +] > 0.01)
-	{	printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, [+ (get "int_max") +]) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* [+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test */
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type +]
-
diff --git a/libs/libsndfile/tests/format_check_test.c b/libs/libsndfile/tests/format_check_test.c
deleted file mode 100644
index a371c71ff7..0000000000
--- a/libs/libsndfile/tests/format_check_test.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "utils.h"
-
-static void format_error_test (void) ;
-static void format_combo_test (void) ;
-
-int
-main (void)
-{
-	format_error_test () ;
-	format_combo_test () ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-format_error_test (void)
-{	const char *filename = "format-error.wav" ;
-	SNDFILE *file ;
-	SF_INFO info ;
-
-	print_test_name (__func__, NULL) ;
-
-	memset (&info, 0, sizeof (info)) ;
-	info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-	info.channels = 1 ;
-	info.samplerate = 44100 ;
-
-	info.format = SF_FORMAT_WAV ;
-	file = sf_open (filename, SFM_WRITE, &info) ;
-	exit_if_true (file != NULL, "\n\nLine %d : Format should not be valid.\n\n", __LINE__) ;
-	exit_if_true (
-		strstr (sf_strerror (NULL), "minor format") == NULL,
-		"\n\nLine %d : Error string should reference bad 'minor format'.\n\n", __LINE__
-		) ;
-
-	info.format = SF_FORMAT_PCM_16 ;
-	file = sf_open (filename, SFM_WRITE, &info) ;
-	exit_if_true (file != NULL, "\n\nLine %d : Format should not be valid.\n\n", __LINE__) ;
-	exit_if_true (
-		strstr (sf_strerror (NULL), "major format") == NULL,
-		"\n\nLine %d : Error string should reference bad 'major format'.\n\n", __LINE__
-		) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* format_error_test */
-
-static void
-format_combo_test (void)
-{	int container_max, codec_max, cont, codec ;
-
-	print_test_name (__func__, NULL) ;
-
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &container_max, sizeof (container_max)) ;
-	sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &codec_max, sizeof (codec_max)) ;
-
-	for (cont = 0 ; cont < container_max + 10 ; cont ++)
-	{	SF_FORMAT_INFO major_fmt_info ;
-
-		memset (&major_fmt_info, 0, sizeof (major_fmt_info)) ;
-		major_fmt_info.format = cont ;
-		(void) sf_command (NULL, SFC_GET_FORMAT_MAJOR, &major_fmt_info, sizeof (major_fmt_info)) ;
-
-		for (codec = 0 ; codec < codec_max + 10 ; codec ++)
-		{	SF_FORMAT_INFO subtype_fmt_info ;
-			SNDFILE * sndfile ;
-			SF_INFO info ;
-			char filename [128] ;
-			int subtype_is_valid, check_is_valid ;
-
-			memset (&subtype_fmt_info, 0, sizeof (subtype_fmt_info)) ;
-			subtype_fmt_info.format = codec ;
-			subtype_is_valid = sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &subtype_fmt_info, sizeof (subtype_fmt_info)) == 0 ;
-
-			sf_info_setup (&info, major_fmt_info.format | subtype_fmt_info.format, 22050, 1) ;
-
-			check_is_valid = sf_format_check (&info) ;
-
-			exit_if_true (
-				NOT (subtype_is_valid) && check_is_valid,
-				"\n\nLine %d : Subtype is not valid but checks ok.\n",
-				__LINE__
-				) ;
-
-			snprintf (filename, sizeof (filename), "format-check.%s", major_fmt_info.extension) ;
-
-			sndfile = sf_open (filename, SFM_WRITE, &info) ;
-
-			sf_close (sndfile) ;
-			unlink (filename) ;
-
-			if (major_fmt_info.extension != NULL && strcmp (major_fmt_info.extension, "sd2") == 0)
-			{	snprintf (filename, sizeof (filename), "._format-check.%s", major_fmt_info.extension) ;
-				unlink (filename) ;
-				} ;
-
-			exit_if_true (
-				sndfile && NOT (check_is_valid),
-				"\n\nError : Format was not valid but file opened correctly.\n"
-				"    Container : %s\n"
-				"    Codec     : %s\n\n",
-				major_fmt_info.name, subtype_fmt_info.name
-				) ;
-
-			exit_if_true (
-				NOT (sndfile) && check_is_valid,
-				"\n\nError : Format was valid but file failed to open.\n"
-				"    Container : %s\n"
-				"    Codec     : %s\n\n",
-				major_fmt_info.name, subtype_fmt_info.name
-				) ;
-			} ;
-		} ;
-
-	puts ("ok") ;
-} /* format_combo_test */
-
diff --git a/libs/libsndfile/tests/generate.c b/libs/libsndfile/tests/generate.c
deleted file mode 100644
index 653018b0f4..0000000000
--- a/libs/libsndfile/tests/generate.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-#include "generate.h"
-
-#define	SF_MAX(x, y)		((x) > (y) ? (x) : (y))
-
-static float crappy_snare (float *output, int len, int offset, float gain, float maxabs) ;
-
-void
-generate_file (const char * filename, int format, int len)
-{	float * output ;
-	float maxabs = 0.0 ;
-
-	output = calloc (len, sizeof (float)) ;
-
-	maxabs = crappy_snare (output, len, 0, 0.95, maxabs) ;
-	maxabs = crappy_snare (output, len, len / 4, 0.85, maxabs) ;
-	maxabs = crappy_snare (output, len, 2 * len / 4, 0.85, maxabs) ;
-	crappy_snare (output, len, 3 * len / 4, 0.85, maxabs) ;
-
-	write_mono_file (filename, format, 44100, output, len) ;
-
-	free (output) ;
-} /* generate_file */
-
-static inline float
-rand_float (void)
-{	return rand () / (0.5 * RAND_MAX) - 1.0 ;
-} /* rand_float */
-
-static float
-crappy_snare (float *output, int len, int offset, float gain, float maxabs)
-{	int k ;
-	float env = 0.0 ;
-
-	for (k = offset ; k < len && env < gain ; k++)
-	{	env += 0.03 ;
-		output [k] += env * rand_float () ;
-		maxabs = SF_MAX (maxabs, fabs (output [k])) ;
-		} ;
-
-	for ( ; k < len && env > 1e-8 ; k++)
-	{	env *= 0.995 ;
-		output [k] += env * rand_float () ;
-		maxabs = SF_MAX (maxabs, fabs (output [k])) ;
-		} ;
-
-	return maxabs ;
-} /* crappy_snare */
diff --git a/libs/libsndfile/tests/generate.h b/libs/libsndfile/tests/generate.h
deleted file mode 100644
index 709ea61191..0000000000
--- a/libs/libsndfile/tests/generate.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-void generate_file (const char * filename, int format, int len) ;
diff --git a/libs/libsndfile/tests/header_test.c b/libs/libsndfile/tests/header_test.c
deleted file mode 100644
index 9802fd9e58..0000000000
--- a/libs/libsndfile/tests/header_test.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN		(1<<10)
-#define LOG_BUFFER_SIZE	1024
-
-static void	update_header_test (const char *filename, int typemajor) ;
-
-static void	update_seek_short_test	(const char *filename, int filetype) ;
-static void	update_seek_int_test	(const char *filename, int filetype) ;
-static void	update_seek_float_test	(const char *filename, int filetype) ;
-static void	update_seek_double_test	(const char *filename, int filetype) ;
-
-
-static void extra_header_test (const char *filename, int filetype) ;
-
-static void header_shrink_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static	int	data_out [BUFFER_LEN] ;
-static	int	data_in	[BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test WAV file peak chunk\n") ;
-		printf ("           aiff - test AIFF file PEAK chunk\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all=!strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	update_header_test ("header.wav", SF_FORMAT_WAV) ;
-		update_seek_short_test ("header_short.wav", SF_FORMAT_WAV) ;
-		update_seek_int_test ("header_int.wav", SF_FORMAT_WAV) ;
-		update_seek_float_test ("header_float.wav", SF_FORMAT_WAV) ;
-		update_seek_double_test ("header_double.wav", SF_FORMAT_WAV) ;
-		header_shrink_test ("header_shrink.wav", SF_FORMAT_WAV) ;
-		extra_header_test ("extra.wav", SF_FORMAT_WAV) ;
-
-		update_header_test ("header.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_short_test ("header_short.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_int_test ("header_int.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_float_test ("header_float.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_double_test ("header_double.wavex", SF_FORMAT_WAVEX) ;
-		header_shrink_test ("header_shrink.wavex", SF_FORMAT_WAVEX) ;
-		extra_header_test ("extra.wavex", SF_FORMAT_WAVEX) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	update_header_test ("header.aiff", SF_FORMAT_AIFF) ;
-		update_seek_short_test ("header_short.aiff", SF_FORMAT_AIFF) ;
-		update_seek_int_test ("header_int.aiff", SF_FORMAT_AIFF) ;
-		update_seek_float_test ("header_float.aiff", SF_FORMAT_AIFF) ;
-		update_seek_double_test ("header_double.aiff", SF_FORMAT_AIFF) ;
-		header_shrink_test ("header_shrink.wav", SF_FORMAT_AIFF) ;
-		extra_header_test ("extra.aiff", SF_FORMAT_AIFF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	update_header_test ("header.au", SF_FORMAT_AU) ;
-		update_seek_short_test ("header_short.au", SF_FORMAT_AU) ;
-		update_seek_int_test ("header_int.au", SF_FORMAT_AU) ;
-		update_seek_float_test ("header_float.au", SF_FORMAT_AU) ;
-		update_seek_double_test ("header_double.au", SF_FORMAT_AU) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	update_header_test ("header.caf", SF_FORMAT_CAF) ;
-		update_seek_short_test ("header_short.caf", SF_FORMAT_CAF) ;
-		update_seek_int_test ("header_int.caf", SF_FORMAT_CAF) ;
-		update_seek_float_test ("header_float.caf", SF_FORMAT_CAF) ;
-		update_seek_double_test ("header_double.caf", SF_FORMAT_CAF) ;
-		/* extra_header_test ("extra.caf", SF_FORMAT_CAF) ; */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	update_header_test ("header.nist", SF_FORMAT_NIST) ;
-		update_seek_short_test ("header_short.nist", SF_FORMAT_NIST) ;
-		update_seek_int_test ("header_int.nist", SF_FORMAT_NIST) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	update_header_test ("header.paf", SF_FORMAT_PAF) ;
-		update_seek_short_test ("header_short.paf", SF_FORMAT_PAF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	update_header_test ("header.ircam", SF_FORMAT_IRCAM) ;
-		update_seek_short_test ("header_short.ircam", SF_FORMAT_IRCAM) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	update_header_test ("header.w64", SF_FORMAT_W64) ;
-		update_seek_short_test ("header_short.w64", SF_FORMAT_W64) ;
-		update_seek_int_test ("header_int.w64", SF_FORMAT_W64) ;
-		update_seek_float_test ("header_float.w64", SF_FORMAT_W64) ;
-		update_seek_double_test ("header_double.w64", SF_FORMAT_W64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	update_header_test ("header.rf64", SF_FORMAT_RF64) ;
-		update_seek_short_test ("header_short.rf64", SF_FORMAT_RF64) ;
-		update_seek_int_test ("header_int.rf64", SF_FORMAT_RF64) ;
-		update_seek_float_test ("header_float.rf64", SF_FORMAT_RF64) ;
-		update_seek_double_test ("header_double.rf64", SF_FORMAT_RF64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	update_header_test ("header.mat4", SF_FORMAT_MAT4) ;
-		update_seek_short_test ("header_short.mat4", SF_FORMAT_MAT4) ;
-		update_seek_int_test ("header_int.mat4", SF_FORMAT_MAT4) ;
-		update_seek_float_test ("header_float.mat4", SF_FORMAT_MAT4) ;
-		update_seek_double_test ("header_double.mat4", SF_FORMAT_MAT4) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	update_header_test ("header.mat5", SF_FORMAT_MAT5) ;
-		update_seek_short_test ("header_short.mat5", SF_FORMAT_MAT5) ;
-		update_seek_int_test ("header_int.mat5", SF_FORMAT_MAT5) ;
-		update_seek_float_test ("header_float.mat5", SF_FORMAT_MAT5) ;
-		update_seek_double_test ("header_double.mat5", SF_FORMAT_MAT5) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	update_header_test ("header.pvf", SF_FORMAT_PVF) ;
-		update_seek_short_test ("header_short.pvf", SF_FORMAT_PVF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "avr"))
-	{	update_header_test ("header.avr", SF_FORMAT_AVR) ;
-		update_seek_short_test ("header_short.avr", SF_FORMAT_AVR) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	update_header_test ("header.htk", SF_FORMAT_HTK) ;
-		update_seek_short_test ("header_short.htk", SF_FORMAT_HTK) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	update_header_test ("header.svx", SF_FORMAT_SVX) ;
-		update_seek_short_test ("header_short.svx", SF_FORMAT_SVX) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	update_header_test ("header.voc", SF_FORMAT_VOC) ;
-		/*-update_seek_short_test ("header_short.voc", SF_FORMAT_VOC) ;-*/
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sds"))
-	{	update_header_test ("header.sds", SF_FORMAT_SDS) ;
-		/*-update_seek_short_test ("header_short.sds", SF_FORMAT_SDS) ;-*/
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mpc2k"))
-	{	update_header_test ("header.mpc", SF_FORMAT_MPC2K) ;
-		update_seek_short_test ("header_short.mpc", SF_FORMAT_MPC2K) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-update_header_sub (const char *filename, int typemajor, int write_mode)
-{	SNDFILE		*outfile, *infile ;
-	SF_INFO		sfinfo ;
-	int			k ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-	sfinfo.channels = 1 ;
-	sfinfo.frames = 0 ;
-
-	outfile = test_open_file_or_die (filename, write_mode, &sfinfo, SF_TRUE, __LINE__) ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data_out [k] = k + 1 ;
-	test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	if (typemajor != SF_FORMAT_HTK)
-	{	/* The HTK header is not correct when the file is first written. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		sf_close (infile) ;
-		} ;
-
-	sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-	/*
-	** Open file and check log buffer for an error. If header update failed
-	** the the log buffer will contain errors.
-	*/
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	check_log_buffer_or_die (infile, __LINE__) ;
-
-	if (sfinfo.frames < BUFFER_LEN || sfinfo.frames > BUFFER_LEN + 50)
-	{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), BUFFER_LEN) ;
-		dump_log_buffer (infile) ;
-		exit (1) ;
-		} ;
-
-	test_read_int_or_die (infile, 0, data_in, BUFFER_LEN, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (data_out [k] != k + 1)
-			printf ("Error : line %d\n", __LINE__) ;
-
-	sf_close (infile) ;
-
-	/* Set auto update on. */
-	sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-	/* Write more data_out. */
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data_out [k] = k + 2 ;
-	test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	/* Open file again and make sure no errors in log buffer. */
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	check_log_buffer_or_die (infile, __LINE__) ;
-
-	if (sfinfo.frames < 2 * BUFFER_LEN || sfinfo.frames > 2 * BUFFER_LEN + 50)
-	{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * BUFFER_LEN) ;
-		dump_log_buffer (infile) ;
-		exit (1) ;
-		} ;
-
-	sf_close (infile) ;
-
-	sf_close (outfile) ;
-
-	unlink (filename) ;
-} /* update_header_sub */
-
-static void
-update_header_test (const char *filename, int typemajor)
-{
-	print_test_name ("update_header_test", filename) ;
-
-	update_header_sub (filename, typemajor, SFM_WRITE) ;
-	update_header_sub (filename, typemajor, SFM_RDWR) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* update_header_test */
-
-/*==============================================================================
-*/
-
-static void
-update_seek_short_test	(const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-    sf_count_t frames ;
-    short buffer [8] ;
-	int k ;
-
-	print_test_name ("update_seek_short_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound outfile with no data. */
-	sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-	sfinfo.samplerate = 48000 ;
-	sfinfo.channels = 2 ;
-
-	if (sf_format_check (&sfinfo) == SF_FALSE)
-		sfinfo.channels = 1 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 0 ; k < 6 ; k++)
-	{	test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		check_log_buffer_or_die (infile, __LINE__) ;
-		sf_close (infile) ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-		else
-			test_writef_short_or_die (outfile, k, buffer, frames, __LINE__) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* update_seek_short_test */
-
-static void
-update_seek_int_test	(const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-    sf_count_t frames ;
-    int buffer [8] ;
-	int k ;
-
-	print_test_name ("update_seek_int_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound outfile with no data. */
-	sfinfo.format = filetype | SF_FORMAT_PCM_32 ;
-	sfinfo.samplerate = 48000 ;
-	sfinfo.channels = 2 ;
-
-	if (sf_format_check (&sfinfo) == SF_FALSE)
-		sfinfo.channels = 1 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 0 ; k < 6 ; k++)
-	{	test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		check_log_buffer_or_die (infile, __LINE__) ;
-		sf_close (infile) ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_int_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-		else
-			test_writef_int_or_die (outfile, k, buffer, frames, __LINE__) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* update_seek_int_test */
-
-static void
-update_seek_float_test	(const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-    sf_count_t frames ;
-    float buffer [8] ;
-	int k ;
-
-	print_test_name ("update_seek_float_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound outfile with no data. */
-	sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-	sfinfo.samplerate = 48000 ;
-	sfinfo.channels = 2 ;
-
-	if (sf_format_check (&sfinfo) == SF_FALSE)
-		sfinfo.channels = 1 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 0 ; k < 6 ; k++)
-	{	test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		check_log_buffer_or_die (infile, __LINE__) ;
-		sf_close (infile) ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_float_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-		else
-			test_writef_float_or_die (outfile, k, buffer, frames, __LINE__) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* update_seek_float_test */
-
-static void
-update_seek_double_test	(const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-    sf_count_t frames ;
-    double buffer [8] ;
-	int k ;
-
-	print_test_name ("update_seek_double_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound outfile with no data. */
-	sfinfo.format = filetype | SF_FORMAT_DOUBLE ;
-	sfinfo.samplerate = 48000 ;
-	sfinfo.channels = 2 ;
-
-	if (sf_format_check (&sfinfo) == SF_FALSE)
-		sfinfo.channels = 1 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 0 ; k < 6 ; k++)
-	{	test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		check_log_buffer_or_die (infile, __LINE__) ;
-		sf_close (infile) ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_double_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-		else
-			test_writef_double_or_die (outfile, k, buffer, frames, __LINE__) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* update_seek_double_test */
-
-
-
-static void
-header_shrink_test (const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	float buffer [8], bufferin [8] ;
-
-	print_test_name ("header_shrink_test", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-	sfinfo.channels = 1 ;
-
-	memset (buffer, 0xA0, sizeof (buffer)) ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	/* Test the file with extra header data. */
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-	sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, SF_FALSE) ;
-	sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-	test_writef_float_or_die (outfile, 0, buffer, frames, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read. */
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_readf_float_or_die (infile, 0, bufferin, frames, __LINE__) ;
-	sf_close (infile) ;
-
-	compare_float_or_die (buffer, bufferin, frames, __LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-	return ;
-} /* header_shrink_test */
-
-
-static void
-extra_header_test (const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-    sf_count_t frames ;
-    short buffer [8] ;
-	int k = 0 ;
-
-	print_test_name ("extra_header_test", filename) ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = (filetype | SF_FORMAT_PCM_16) ;
-	sfinfo.channels = 1 ;
-
-	memset (buffer, 0xA0, sizeof (buffer)) ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	/* Test the file with extra header data. */
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, 462) ;
-	sf_set_string (outfile, SF_STR_TITLE, filename) ;
-	test_writef_short_or_die (outfile, k, buffer, frames, 464) ;
-	sf_set_string (outfile, SF_STR_COPYRIGHT, "(c) 1980 Erik") ;
-	sf_close (outfile) ;
-
-#if 1
-	/*
-	**  Erik de Castro Lopo <erikd@mega-nerd.com> May 23 2004.
-	**
-	** This file has extra string data in the header and therefore cannot
-	** currently be opened in SFM_RDWR mode. This is fixable, but its in
-	** a part of the code I don't want to fiddle with until the Ogg/Vorbis
-	** integration is done.
-	*/
-
-	if ((infile = sf_open (filename, SFM_RDWR, &sfinfo)) != NULL)
-	{	printf ("\n\nError : should not be able to open this file in SFM_RDWR.\n\n") ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-	return ;
-#else
-
-	hexdump_file (filename, 0, 100000) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, 491) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 1 ; k < 6 ; k++)
-	{
-		printf ("\n*** pass %d\n", k) ;
-		memset (buffer, 0xA0 + k, sizeof (buffer)) ;
-
-
-		test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, 512) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, 513) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		if (0)
-		{	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, 517) ;
-			check_log_buffer_or_die (infile, 518) ;
-			sf_close (infile) ;
-			} ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", 523, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, 529) ;
-		else
-			test_writef_short_or_die (outfile, k, buffer, frames, 531) ;
-		hexdump_file (filename, 0, 100000) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-#endif
-} /* extra_header_test */
-
diff --git a/libs/libsndfile/tests/header_test.def b/libs/libsndfile/tests/header_test.def
deleted file mode 100644
index 959703ef0c..0000000000
--- a/libs/libsndfile/tests/header_test.def
+++ /dev/null
@@ -1,22 +0,0 @@
-autogen definitions header_test.tpl;
-
-data_type = {
-	name	= "short" ;
-	format	= "SF_FORMAT_PCM_16" ;
-	} ;
-
-data_type = {
-	name	= "int" ;
-	format	= "SF_FORMAT_PCM_32" ;
-	} ;
-
-data_type = {
-	name	= "float" ;
-	format	= "SF_FORMAT_FLOAT" ;
-	} ;
-
-data_type = {
-	name	= "double" ;
-	format	= "SF_FORMAT_DOUBLE" ;
-	} ;
-
diff --git a/libs/libsndfile/tests/header_test.tpl b/libs/libsndfile/tests/header_test.tpl
deleted file mode 100644
index 6545bb498b..0000000000
--- a/libs/libsndfile/tests/header_test.tpl
+++ /dev/null
@@ -1,543 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-#include <math.h>
-
-#include <sys/stat.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN		(1 << 10)
-#define LOG_BUFFER_SIZE	1024
-
-static void	update_header_test (const char *filename, int typemajor) ;
-
-[+ FOR data_type
-+]static void	update_seek_[+ (get "name") +]_test	(const char *filename, int filetype) ;
-[+ ENDFOR data_type
-+]
-
-static void extra_header_test (const char *filename, int filetype) ;
-
-static void header_shrink_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static	int	data_out [BUFFER_LEN] ;
-static	int	data_in	[BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test WAV file peak chunk\n") ;
-		printf ("           aiff - test AIFF file PEAK chunk\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all= !strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	update_header_test ("header.wav", SF_FORMAT_WAV) ;
-		update_seek_short_test ("header_short.wav", SF_FORMAT_WAV) ;
-		update_seek_int_test ("header_int.wav", SF_FORMAT_WAV) ;
-		update_seek_float_test ("header_float.wav", SF_FORMAT_WAV) ;
-		update_seek_double_test ("header_double.wav", SF_FORMAT_WAV) ;
-		header_shrink_test ("header_shrink.wav", SF_FORMAT_WAV) ;
-		extra_header_test ("extra.wav", SF_FORMAT_WAV) ;
-
-		update_header_test ("header.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_short_test ("header_short.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_int_test ("header_int.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_float_test ("header_float.wavex", SF_FORMAT_WAVEX) ;
-		update_seek_double_test ("header_double.wavex", SF_FORMAT_WAVEX) ;
-		header_shrink_test ("header_shrink.wavex", SF_FORMAT_WAVEX) ;
-		extra_header_test ("extra.wavex", SF_FORMAT_WAVEX) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	update_header_test ("header.aiff", SF_FORMAT_AIFF) ;
-		update_seek_short_test ("header_short.aiff", SF_FORMAT_AIFF) ;
-		update_seek_int_test ("header_int.aiff", SF_FORMAT_AIFF) ;
-		update_seek_float_test ("header_float.aiff", SF_FORMAT_AIFF) ;
-		update_seek_double_test ("header_double.aiff", SF_FORMAT_AIFF) ;
-		header_shrink_test ("header_shrink.wav", SF_FORMAT_AIFF) ;
-		extra_header_test ("extra.aiff", SF_FORMAT_AIFF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	update_header_test ("header.au", SF_FORMAT_AU) ;
-		update_seek_short_test ("header_short.au", SF_FORMAT_AU) ;
-		update_seek_int_test ("header_int.au", SF_FORMAT_AU) ;
-		update_seek_float_test ("header_float.au", SF_FORMAT_AU) ;
-		update_seek_double_test ("header_double.au", SF_FORMAT_AU) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	update_header_test ("header.caf", SF_FORMAT_CAF) ;
-		update_seek_short_test ("header_short.caf", SF_FORMAT_CAF) ;
-		update_seek_int_test ("header_int.caf", SF_FORMAT_CAF) ;
-		update_seek_float_test ("header_float.caf", SF_FORMAT_CAF) ;
-		update_seek_double_test ("header_double.caf", SF_FORMAT_CAF) ;
-		/* extra_header_test ("extra.caf", SF_FORMAT_CAF) ; */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	update_header_test ("header.nist", SF_FORMAT_NIST) ;
-		update_seek_short_test ("header_short.nist", SF_FORMAT_NIST) ;
-		update_seek_int_test ("header_int.nist", SF_FORMAT_NIST) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	update_header_test ("header.paf", SF_FORMAT_PAF) ;
-		update_seek_short_test ("header_short.paf", SF_FORMAT_PAF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	update_header_test ("header.ircam", SF_FORMAT_IRCAM) ;
-		update_seek_short_test ("header_short.ircam", SF_FORMAT_IRCAM) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	update_header_test ("header.w64", SF_FORMAT_W64) ;
-		update_seek_short_test ("header_short.w64", SF_FORMAT_W64) ;
-		update_seek_int_test ("header_int.w64", SF_FORMAT_W64) ;
-		update_seek_float_test ("header_float.w64", SF_FORMAT_W64) ;
-		update_seek_double_test ("header_double.w64", SF_FORMAT_W64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	update_header_test ("header.rf64", SF_FORMAT_RF64) ;
-		update_seek_short_test ("header_short.rf64", SF_FORMAT_RF64) ;
-		update_seek_int_test ("header_int.rf64", SF_FORMAT_RF64) ;
-		update_seek_float_test ("header_float.rf64", SF_FORMAT_RF64) ;
-		update_seek_double_test ("header_double.rf64", SF_FORMAT_RF64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	update_header_test ("header.mat4", SF_FORMAT_MAT4) ;
-		update_seek_short_test ("header_short.mat4", SF_FORMAT_MAT4) ;
-		update_seek_int_test ("header_int.mat4", SF_FORMAT_MAT4) ;
-		update_seek_float_test ("header_float.mat4", SF_FORMAT_MAT4) ;
-		update_seek_double_test ("header_double.mat4", SF_FORMAT_MAT4) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	update_header_test ("header.mat5", SF_FORMAT_MAT5) ;
-		update_seek_short_test ("header_short.mat5", SF_FORMAT_MAT5) ;
-		update_seek_int_test ("header_int.mat5", SF_FORMAT_MAT5) ;
-		update_seek_float_test ("header_float.mat5", SF_FORMAT_MAT5) ;
-		update_seek_double_test ("header_double.mat5", SF_FORMAT_MAT5) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	update_header_test ("header.pvf", SF_FORMAT_PVF) ;
-		update_seek_short_test ("header_short.pvf", SF_FORMAT_PVF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "avr"))
-	{	update_header_test ("header.avr", SF_FORMAT_AVR) ;
-		update_seek_short_test ("header_short.avr", SF_FORMAT_AVR) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	update_header_test ("header.htk", SF_FORMAT_HTK) ;
-		update_seek_short_test ("header_short.htk", SF_FORMAT_HTK) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	update_header_test ("header.svx", SF_FORMAT_SVX) ;
-		update_seek_short_test ("header_short.svx", SF_FORMAT_SVX) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	update_header_test ("header.voc", SF_FORMAT_VOC) ;
-		/*-update_seek_short_test ("header_short.voc", SF_FORMAT_VOC) ;-*/
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sds"))
-	{	update_header_test ("header.sds", SF_FORMAT_SDS) ;
-		/*-update_seek_short_test ("header_short.sds", SF_FORMAT_SDS) ;-*/
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mpc2k"))
-	{	update_header_test ("header.mpc", SF_FORMAT_MPC2K) ;
-		update_seek_short_test ("header_short.mpc", SF_FORMAT_MPC2K) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-update_header_sub (const char *filename, int typemajor, int write_mode)
-{	SNDFILE		*outfile, *infile ;
-	SF_INFO		sfinfo ;
-	int			k ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-	sfinfo.channels = 1 ;
-	sfinfo.frames = 0 ;
-
-	outfile = test_open_file_or_die (filename, write_mode, &sfinfo, SF_TRUE, __LINE__) ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data_out [k] = k + 1 ;
-	test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	if (typemajor != SF_FORMAT_HTK)
-	{	/* The HTK header is not correct when the file is first written. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		sf_close (infile) ;
-		} ;
-
-	sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-	/*
-	** Open file and check log buffer for an error. If header update failed
-	** the the log buffer will contain errors.
-	*/
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	check_log_buffer_or_die (infile, __LINE__) ;
-
-	if (sfinfo.frames < BUFFER_LEN || sfinfo.frames > BUFFER_LEN + 50)
-	{	printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, BUFFER_LEN) ;
-		dump_log_buffer (infile) ;
-		exit (1) ;
-		} ;
-
-	test_read_int_or_die (infile, 0, data_in, BUFFER_LEN, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (data_out [k] != k + 1)
-			printf ("Error : line %d\n", __LINE__) ;
-
-	sf_close (infile) ;
-
-	/* Set auto update on. */
-	sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-	/* Write more data_out. */
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data_out [k] = k + 2 ;
-	test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	/* Open file again and make sure no errors in log buffer. */
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	check_log_buffer_or_die (infile, __LINE__) ;
-
-	if (sfinfo.frames < 2 * BUFFER_LEN || sfinfo.frames > 2 * BUFFER_LEN + 50)
-	{	printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, 2 * BUFFER_LEN) ;
-		dump_log_buffer (infile) ;
-		exit (1) ;
-		} ;
-
-	sf_close (infile) ;
-
-	sf_close (outfile) ;
-
-	unlink (filename) ;
-} /* update_header_sub */
-
-static void
-update_header_test (const char *filename, int typemajor)
-{
-	print_test_name ("update_header_test", filename) ;
-
-	update_header_sub (filename, typemajor, SFM_WRITE) ;
-	update_header_sub (filename, typemajor, SFM_RDWR) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* update_header_test */
-
-/*==============================================================================
-*/
-
-[+ FOR data_type
-+]static void
-update_seek_[+ (get "name") +]_test	(const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	[+ (get "name") +] buffer [8] ;
-	int k ;
-
-	print_test_name ("update_seek_[+ (get "name") +]_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound outfile with no data. */
-	sfinfo.format = filetype | [+ (get "format") +] ;
-	sfinfo.samplerate = 48000 ;
-	sfinfo.channels = 2 ;
-
-	if (sf_format_check (&sfinfo) == SF_FALSE)
-		sfinfo.channels = 1 ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-	** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-	{	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 0 ; k < 6 ; k++)
-	{	test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-		check_log_buffer_or_die (infile, __LINE__) ;
-		sf_close (infile) ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %" PRId64 ")\n", __LINE__, sfinfo.frames, k + frames) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_[+ (get "name") +]_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-		else
-			test_writef_[+ (get "name") +]_or_die (outfile, k, buffer, frames, __LINE__) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* update_seek_[+ (get "name") +]_test */
-
-[+ ENDFOR data_type
-+]
-
-static void
-header_shrink_test (const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	float buffer [8], bufferin [8] ;
-
-	print_test_name ("header_shrink_test", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-	sfinfo.channels = 1 ;
-
-	memset (buffer, 0xA0, sizeof (buffer)) ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	/* Test the file with extra header data. */
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-	sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, SF_FALSE) ;
-	sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-	test_writef_float_or_die (outfile, 0, buffer, frames, __LINE__) ;
-	sf_close (outfile) ;
-
-	/* Open again for read. */
-	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_readf_float_or_die (infile, 0, bufferin, frames, __LINE__) ;
-	sf_close (infile) ;
-
-	compare_float_or_die (buffer, bufferin, frames, __LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-	return ;
-} /* header_shrink_test */
-
-
-static void
-extra_header_test (const char *filename, int filetype)
-{	SNDFILE *outfile, *infile ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	short buffer [8] ;
-	int k = 0 ;
-
-	print_test_name ("extra_header_test", filename) ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = (filetype | SF_FORMAT_PCM_16) ;
-	sfinfo.channels = 1 ;
-
-	memset (buffer, 0xA0, sizeof (buffer)) ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	/* Test the file with extra header data. */
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, [+ (tpl-file-line "%2$d") +]) ;
-	sf_set_string (outfile, SF_STR_TITLE, filename) ;
-	test_writef_short_or_die (outfile, k, buffer, frames, [+ (tpl-file-line "%2$d") +]) ;
-	sf_set_string (outfile, SF_STR_COPYRIGHT, "(c) 1980 Erik") ;
-	sf_close (outfile) ;
-
-#if 1
-	/*
-	**  Erik de Castro Lopo <erikd@mega-nerd.com> May 23 2004.
-	**
-	** This file has extra string data in the header and therefore cannot
-	** currently be opened in SFM_RDWR mode. This is fixable, but its in
-	** a part of the code I don't want to fiddle with until the Ogg/Vorbis
-	** integration is done.
-	*/
-
-	if ((infile = sf_open (filename, SFM_RDWR, &sfinfo)) != NULL)
-	{	printf ("\n\nError : should not be able to open this file in SFM_RDWR.\n\n") ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-	return ;
-#else
-
-	hexdump_file (filename, 0, 100000) ;
-
-	/* Open again for read/write. */
-	outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, [+ (tpl-file-line "%2$d") +]) ;
-
-	/*
-	** In auto header update mode, seeking to the end of the file with
-	** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-	** will seek to 0 anyway
-	*/
-	if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-	{	printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	/* Now write some frames. */
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	for (k = 1 ; k < 6 ; k++)
-	{
-		printf ("\n*** pass %d\n", k) ;
-		memset (buffer, 0xA0 + k, sizeof (buffer)) ;
-
-
-		test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, [+ (tpl-file-line "%2$d") +]) ;
-		test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, [+ (tpl-file-line "%2$d") +]) ;
-
-		/* Open file again and make sure no errors in log buffer. */
-		if (0)
-		{	infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, [+ (tpl-file-line "%2$d") +]) ;
-			check_log_buffer_or_die (infile, [+ (tpl-file-line "%2$d") +]) ;
-			sf_close (infile) ;
-			} ;
-
-		if (sfinfo.frames != k * frames)
-		{	printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %" PRId64 ")\n", [+ (tpl-file-line "%2$d") +], sfinfo.frames, k + frames) ;
-			dump_log_buffer (infile) ;
-			exit (1) ;
-			} ;
-
-		if ((k & 1) == 0)
-			test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, [+ (tpl-file-line "%2$d") +]) ;
-		else
-			test_writef_short_or_die (outfile, k, buffer, frames, [+ (tpl-file-line "%2$d") +]) ;
-		hexdump_file (filename, 0, 100000) ;
-		} ;
-
-	sf_close (outfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-#endif
-} /* extra_header_test */
-
diff --git a/libs/libsndfile/tests/headerless_test.c b/libs/libsndfile/tests/headerless_test.c
deleted file mode 100644
index 6d3e2f2589..0000000000
--- a/libs/libsndfile/tests/headerless_test.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(2000)
-
-static void old_test (void) ;
-static void headerless_test (const char * filename, int format, int expected) ;
-
-int
-main (void)
-{
-	old_test () ;
-
-	headerless_test ("raw.vox", SF_FORMAT_VOX_ADPCM, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM) ;
-	headerless_test ("raw.gsm", SF_FORMAT_GSM610, SF_FORMAT_RAW | SF_FORMAT_GSM610) ;
-
-	headerless_test ("raw.snd", SF_FORMAT_ULAW, SF_FORMAT_RAW | SF_FORMAT_ULAW) ;
-	headerless_test ("raw.au" , SF_FORMAT_ULAW, SF_FORMAT_RAW | SF_FORMAT_ULAW) ;
-
-	return 0 ;
-} /* main */
-
-static void
-headerless_test (const char * filename, int format, int expected)
-{	static	short	buffer [BUFFER_SIZE] ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-
-	format &= SF_FORMAT_SUBMASK ;
-
-	print_test_name (__func__, filename) ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		buffer [k] = k ;
-
-	sfinfo.samplerate	= 8000 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= SF_FORMAT_RAW | format ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if ((k = sf_write_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-	{	printf ("Line %d: sf_write_short failed with short write (%d => %d).\n", __LINE__, BUFFER_SIZE, k) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* We should be able to detect these so clear sfinfo. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != expected)
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, expected, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < BUFFER_SIZE)
-	{	printf ("Line %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* headerless_test */
-
-static void
-old_test (void)
-{	static	short	buffer [BUFFER_SIZE] ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, filetype ;
-	const char	*filename = "headerless.wav" ;
-
-	print_test_name (__func__, "") ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		buffer [k] = k ;
-
-	filetype = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-
-	sfinfo.samplerate	= 32000 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if ((k = sf_write_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-	{	printf ("Line %d: sf_write_short failed with short write (%d => %d).\n", __LINE__, BUFFER_SIZE, k) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Read as RAW but get the bit width and endian-ness correct. */
-	sfinfo.format = filetype = SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < BUFFER_SIZE)
-	{	printf ("Line %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if ((k = sf_read_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-	{	printf ("Line %d: short read (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < BUFFER_SIZE - 22 ; k++)
-		if (buffer [k + 22] != k)
-		{	printf ("Line %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, k, buffer [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* old_test */
-
diff --git a/libs/libsndfile/tests/largefile_test.c b/libs/libsndfile/tests/largefile_test.c
deleted file mode 100644
index 328a589a02..0000000000
--- a/libs/libsndfile/tests/largefile_test.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-** Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1024 * 1024)
-#define	BUFFER_COUNT	(768)
-
-static void largefile_test (int filetype, const char * filename) ;
-
-int
-main (void)
-{
-	largefile_test (SF_FORMAT_WAV, "largefile.wav") ;
-	largefile_test (SF_FORMAT_AIFF, "largefile.aiff") ;
-
-	return 0 ;
-} /* main */
-
-static void
-largefile_test (int filetype, const char * filename)
-{	static float data [BUFFER_LEN] ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int k ;
-
-	print_test_name ("largefile_test", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 2 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format = (filetype | SF_FORMAT_PCM_32) ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	for (k = 0 ; k < BUFFER_COUNT ; k++)
-		test_write_float_or_die (file, k, data, BUFFER_LEN, __LINE__) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if ((sfinfo.frames * sfinfo.channels) / BUFFER_LEN != BUFFER_COUNT)
-	{	printf ("\n\nLine %d : bad frame count.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-
-
-	return ;
-} /* largefile_test */
-
diff --git a/libs/libsndfile/tests/locale_test.c b/libs/libsndfile/tests/locale_test.c
deleted file mode 100644
index b67d549c58..0000000000
--- a/libs/libsndfile/tests/locale_test.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-** Copyright (C) 2005-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#if OS_IS_WIN32
-#include <windows.h>
-#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-#endif
-
-#include "sndfile.h"
-#include "utils.h"
-
-static void utf8_test (void) ;
-static void wchar_test (void) ;
-
-int
-main (void)
-{
-	utf8_test () ;
-	wchar_test () ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-wchar_test (void)
-{
-#if OS_IS_WIN32
-	SNDFILE * file ;
-	SF_INFO info ;
-	LPCWSTR filename = L"test.wav" ;
-
-	print_test_name (__func__, "test.wav") ;
-
-	info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-	info.channels = 1 ;
-	info.samplerate = 44100 ;
-
-	file = sf_wchar_open (filename, SFM_WRITE, &info) ;
-	exit_if_true (file == NULL, "\n\nLine %d : sf_wchar_open failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-	sf_close (file) ;
-
-	/*	This should check that the file did in fact get created with a
-	**	wchar_t * filename.
-	*/
-	exit_if_true (
-		GetFileAttributesW (filename) == INVALID_FILE_ATTRIBUTES,
-		"\n\nLine %d : GetFileAttributes failed.\n\n", __LINE__
-		) ;
-
-	/* Use this because the file was created with CreateFileW. */
-	DeleteFileW (filename) ;
-
-	puts ("ok") ;
-#endif
-} /* wchar_test */
-
-/*==============================================================================
-*/
-
-typedef struct
-{	const char *locale ;
-	int utf8 ;
-	const char *filename ;
-	int	width ;
-} LOCALE_DATA ;
-
-static void locale_test (const LOCALE_DATA * locdata) ;
-
-static void
-utf8_test (void)
-{	LOCALE_DATA ldata [] =
-	{	{	"de_DE", 1, "F\303\274\303\237e.au", 7 },
-		{	"en_AU", 1, "kangaroo.au", 11 },
-		{	"POSIX", 0, "posix.au", 8 },
-		{	"pt_PT", 1, "concei\303\247\303\243o.au", 12 },
-
-#if OS_IS_WIN32 == 0
-		{	"ja_JP", 1, "\343\201\212\343\201\257\343\202\210\343\201\206\343\201\224\343\201\226\343\201\204\343\201\276\343\201\231.au", 21 },
-#endif
-
-		{	"vi_VN", 1, "qu\341\273\221c ng\341\273\257.au", 11 },
-		{	NULL, 0, NULL, 0 }
-		} ;
-	int k ;
-
-	for (k = 0 ; ldata [k].locale != NULL ; k++)
-		locale_test (ldata + k) ;
-} /* utf8_test */
-
-
-static void
-locale_test (const LOCALE_DATA * ldata)
-{
-#if (HAVE_LOCALE_H == 0 || HAVE_SETLOCALE == 0)
-	locname = filename = NULL ;
-	width = 0 ;
-	return ;
-#else
-	const short wdata [] = { 1, 2, 3, 4, 5, 6, 7, 8 } ;
-	short rdata [ARRAY_LEN (wdata)] ;
-	const char *old_locale ;
-	char utf8_locname [32] ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-
-	snprintf (utf8_locname, sizeof (utf8_locname), "%s%s", ldata->locale, ldata->utf8 ? ".UTF-8" : "") ;
-
-	/* Change the locale saving the old one. */
-	if ((old_locale = setlocale (LC_CTYPE, utf8_locname)) == NULL)
-		return ;
-
-	printf ("    locale_test           %-8s : %s %*c ", ldata->locale, ldata->filename, 24 - ldata->width, ' ') ;
-	fflush (stdout) ;
-
-	sfinfo.format = SF_FORMAT_AU | SF_FORMAT_PCM_16 ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = 44100 ;
-
-	file = test_open_file_or_die (ldata->filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-	test_write_short_or_die (file, 0, wdata, ARRAY_LEN (wdata), __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (ldata->filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-	test_read_short_or_die (file, 0, rdata, ARRAY_LEN (rdata), __LINE__) ;
-	sf_close (file) ;
-
-	unlink (ldata->filename) ;
-
-	/* Restore old locale. */
-	setlocale (LC_CTYPE, old_locale) ;
-
-	puts ("ok") ;
-#endif
-} /* locale_test */
-
diff --git a/libs/libsndfile/tests/lossy_comp_test.c b/libs/libsndfile/tests/lossy_comp_test.c
deleted file mode 100644
index 5f9f593f8f..0000000000
--- a/libs/libsndfile/tests/lossy_comp_test.c
+++ /dev/null
@@ -1,2372 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(1 << 14)
-#define	SAMPLE_RATE		11025
-
-#ifndef		M_PI
-#define		M_PI		3.14159265358979323846264338
-#endif
-
-#define		LCT_MAX(x, y)	((x) > (y) ? (x) : (y))
-
-static	void	lcomp_test_short	(const char *filename, int filetype, int chan, double margin) ;
-static	void	lcomp_test_int		(const char *filename, int filetype, int chan, double margin) ;
-static	void	lcomp_test_float	(const char *filename, int filetype, int chan, double margin) ;
-static	void	lcomp_test_double	(const char *filename, int filetype, int chan, double margin) ;
-
-static	void	sdlcomp_test_short	(const char *filename, int filetype, int chan, double margin) ;
-static	void	sdlcomp_test_int	(const char *filename, int filetype, int chan, double margin) ;
-static	void	sdlcomp_test_float	(const char *filename, int filetype, int chan, double margin) ;
-static	void	sdlcomp_test_double	(const char *filename, int filetype, int chan, double margin) ;
-
-static void		read_raw_test (const char *filename, int filetype, int chan) ;
-
-static	int		error_function (double data, double orig, double margin) ;
-static	int		decay_response (int k) ;
-
-static	void	gen_signal_double (double *data, double scale, int channels, int datalen) ;
-
-static	void	smoothed_diff_short (short *data, unsigned int datalen) ;
-static	void	smoothed_diff_int (int *data, unsigned int datalen) ;
-static	void	smoothed_diff_float (float *data, unsigned int datalen) ;
-static	void	smoothed_diff_double (double *data, unsigned int datalen) ;
-
-static void		check_comment (SNDFILE * file, int format, int lineno) ;
-
-static int		is_lossy (int filetype) ;
-
-/*
-** Force the start of these buffers to be double aligned. Sparc-solaris will
-** choke if they are not.
-*/
-typedef union
-{	double	d [BUFFER_SIZE + 1] ;
-	float	f [BUFFER_SIZE + 1] ;
-	int		i [BUFFER_SIZE + 1] ;
-	short	s [BUFFER_SIZE + 1] ;
-	char	c [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-static	BUFFER	data_buffer ;
-static	BUFFER	orig_buffer ;
-static	BUFFER	smooth_buffer ;
-
-static const char *long_comment =
-	"This is really quite a long comment. It is designed to be long enough "
-	"to screw up the encoders and decoders if the file container format does "
-	"not handle things correctly. If everything is working correctly, the "
-	"decoder will only decode the actual audio data, and not this string at "
-	"the end of the file." ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav_ima     - test IMA ADPCM WAV file functions\n") ;
-		printf ("           wav_msadpcm - test MS ADPCM WAV file functions\n") ;
-		printf ("           wav_gsm610  - test GSM 6.10 WAV file functions\n") ;
-		printf ("           wav_ulaw    - test u-law WAV file functions\n") ;
-		printf ("           wav_alaw    - test A-law WAV file functions\n") ;
-		printf ("           wve         - test Psion WVE file functions\n") ;
-		printf ("           all         - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || strcmp (argv [1], "wav_pcm") == 0)
-	{	/* This is just a sanity test for PCM encoding. */
-		lcomp_test_short	("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 1e-50) ;
-		lcomp_test_int		("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_32, 2, 1e-50) ;
-		lcomp_test_short	("pcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 1e-50) ;
-		lcomp_test_int		("pcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, 2, 1e-50) ;
-		/* Lite remove start */
-		lcomp_test_float	("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT, 2, 1e-50) ;
-		lcomp_test_double	("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_DOUBLE, 2, 1e-50) ;
-		/* Lite remove end */
-
-		read_raw_test ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 2) ;
-		test_count++ ;
-		} ;
-
-	/* For all the rest, if the file format supports more than 1 channel, use stereo. */
-	/* Lite remove start */
-	if (do_all || strcmp (argv [1], "wav_ima") == 0)
-	{	lcomp_test_short	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_int		("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.65) ;
-		lcomp_test_float	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_double	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-		lcomp_test_short	("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_int		("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_float	("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_double	("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-		sdlcomp_test_short	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_int	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_float	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_double	("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "wav_msadpcm") == 0)
-	{	lcomp_test_short	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_int		("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_float	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_double	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-		lcomp_test_short	("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_int		("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_float	("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_double	("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-		sdlcomp_test_short	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_int	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_float	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_double	("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "wav_g721") == 0)
-	{	printf ("**** Fix this later : error bound should be 0.06 ****\n") ;
-		lcomp_test_short	("g721.wav", SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-		lcomp_test_int		("g721.wav", SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-
-		lcomp_test_short	("g721.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-		lcomp_test_int		("g721.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (do_all || strcmp (argv [1], "wav_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-
-		lcomp_test_short	("ulaw.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "wav_alaw") == 0)
-	{	lcomp_test_short	("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "wav_gsm610") == 0)
-	{	/* Don't do lcomp_test_XXX as the errors are too big. */
-		sdlcomp_test_short	("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_int	("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-
-		sdlcomp_test_short	("gsm610.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_int	("gsm610.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-
-		/* Lite remove start */
-		sdlcomp_test_float	("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_double	("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "aiff_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "aiff_alaw") == 0)
-	{	lcomp_test_short	("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "aiff_gsm610") == 0)
-	{	/* Don't do lcomp_test_XXX as the errors are too big. */
-		sdlcomp_test_short	("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_int	("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-		/* Lite remove start */
-		sdlcomp_test_float	("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_double	("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (strcmp (argv [1], "aiff_ima") == 0)
-	{	lcomp_test_short	("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_int		("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		/* Lite remove start */
-		lcomp_test_float	("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_double	("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		/* Lite remove end */
-		} ;
-
-	if (do_all || strcmp (argv [1], "au_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "au_alaw") == 0)
-	{	lcomp_test_short	("alaw.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || strcmp (argv [1], "au_g721") == 0)
-	{	printf ("**** Fix this later : error bound should be 0.06 ****\n") ;
-		lcomp_test_short	("g721.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-		lcomp_test_int		("g721.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-		lcomp_test_float	("g721.au", SF_ENDIAN_LITTLE 	| SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-		lcomp_test_double	("g721.au", SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-
-/*-		sdlcomp_test_short	("g721.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-		sdlcomp_test_int	("g721.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-		sdlcomp_test_float  ("g721.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-		sdlcomp_test_double	("g721.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.12) ;
--*/
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "au_g723") == 0)
-	{	printf ("**** Fix this later : error bound should be 0.16 ****\n") ;
-		lcomp_test_short	("g723_24.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-		lcomp_test_int		("g723_24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-		lcomp_test_float	("g723_24.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-		lcomp_test_double	("g723_24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-
-		lcomp_test_short	("g723_40.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.85) ;
-		lcomp_test_int		("g723_40.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.84) ;
-		lcomp_test_float	("g723_40.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.86) ;
-		lcomp_test_double	("g723_40.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.86) ;
-
-/*-		sdlcomp_test_short	("g723.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-		sdlcomp_test_int	("g723.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-		sdlcomp_test_float	("g723.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-		sdlcomp_test_double	("g723.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
--*/
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (do_all || strcmp (argv [1], "caf_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "caf_alaw") == 0)
-	{	lcomp_test_short	("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2) ;
-		test_count++ ;
-		} ;
-
-
-	if (do_all || strcmp (argv [1], "raw_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "raw_alaw") == 0)
-	{	lcomp_test_short	("alaw.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "raw_gsm610") == 0)
-	{	/* Don't do lcomp_test_XXX as the errors are too big. */
-		sdlcomp_test_short	("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_int	("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_float	("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-		sdlcomp_test_double	("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "ogg_vorbis") == 0)
-	{	if (HAVE_EXTERNAL_LIBS)
-		{	/* Don't do lcomp_test_XXX as the errors are too big. */
-			sdlcomp_test_short	("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-			sdlcomp_test_int	("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-			sdlcomp_test_float	("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-			sdlcomp_test_double	("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-			}
-		else
-			puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || strcmp (argv [1], "ircam_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.ircam", SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_float	("ulaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.ircam", SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "ircam_alaw") == 0)
-	{	lcomp_test_short	("alaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.ircam", SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_float	("alaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.ircam", SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "nist_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_float	("ulaw.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "nist_alaw") == 0)
-	{	lcomp_test_short	("alaw.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_float	("alaw.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "voc_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_float	("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "voc_alaw") == 0)
-	{	lcomp_test_short	("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_float	("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (do_all || strcmp (argv [1], "w64_ulaw") == 0)
-	{	lcomp_test_short	("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_int		("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-		lcomp_test_double	("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "w64_alaw") == 0)
-	{	lcomp_test_short	("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_int		("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-		lcomp_test_double	("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-		/* Lite remove end */
-
-		read_raw_test ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2) ;
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || strcmp (argv [1], "w64_ima") == 0)
-	{	lcomp_test_short	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_int		("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_float	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		lcomp_test_double	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-		sdlcomp_test_short	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_int	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_float	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		sdlcomp_test_double	("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "w64_msadpcm") == 0)
-	{	lcomp_test_short	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_int		("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_float	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		lcomp_test_double	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-		sdlcomp_test_short	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_int	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_float	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		sdlcomp_test_double	("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "wve") == 0)
-	{	lcomp_test_short	("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-		lcomp_test_int		("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-		/* Lite remove start */
-		lcomp_test_float	("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-		lcomp_test_double	("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	/* Lite remove end */
-
-	if (do_all || strcmp (argv [1], "w64_gsm610") == 0)
-	{	/* Don't do lcomp_test_XXX as the errors are too big. */
-		sdlcomp_test_short	("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-		sdlcomp_test_int	("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-		/* Lite remove start */
-		sdlcomp_test_float	("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-		sdlcomp_test_double	("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || strcmp (argv [1], "vox_adpcm") == 0)
-	{	lcomp_test_short	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-		lcomp_test_int		("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-		lcomp_test_float	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-		lcomp_test_double	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-
-		sdlcomp_test_short	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-		sdlcomp_test_int	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-		sdlcomp_test_float	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-		sdlcomp_test_double	("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || strcmp (argv [1], "xi_dpcm") == 0)
-	{	lcomp_test_short	("8bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_8, 1, 0.25) ;
-		lcomp_test_int		("8bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_8, 1, 0.25) ;
-
-		lcomp_test_short	("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-		lcomp_test_int		("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-		lcomp_test_float	("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-		lcomp_test_double	("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (test_count == 0)
-	{	printf ("************************************\n") ;
-		printf ("*  No '%s' test defined.\n", argv [1]) ;
-		printf ("************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-lcomp_test_short (const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos, half_max_abs ;
-	sf_count_t		datalen ;
-	short			*orig, *data ;
-
-	print_test_name ("lcomp_test_short", filename) ;
-
-	datalen = BUFFER_SIZE / channels ;
-
-	data = data_buffer.s ;
-	orig = orig_buffer.s ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < channels * datalen ; k++)
-		orig [k] = (short) (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_writef_short_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (short)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + datalen / 20))
-	{	printf ("Too many frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, data, datalen, __LINE__) ;
-
-	half_max_abs = 0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k], orig [k], margin))
-		{	printf ("\n\nLine %d: Incorrect sample A (#%d : %d should be %d).\n", __LINE__, k, data [k], orig [k]) ;
-			oct_save_short (orig, data, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-		} ;
-
-	if (half_max_abs < 1.0)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_short (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-			channels * sfinfo.frames - datalen, k) ;
-		exit (1) ;
-		} ;
-
-	/*	This check is only for block based encoders which must append silence
-	**	to the end of a file so as to fill out a block.
-	*/
-	for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-		if (abs (data [channels * k]) > decay_response (channels * k))
-		{	printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-			exit (1) ;
-			} ;
-
-	if (! sfinfo.seekable)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("ok\n") ;
-		return ;
-		} ;
-
-	/* Now test sf_seek function. */
-
-	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-	{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (m = 0 ; m < 3 ; m++)
-	{	test_readf_short_or_die (file, m, data, 11, __LINE__) ;
-
-		for (k = 0 ; k < channels * 11 ; k++)
-			if (error_function (1.0 * data [k], 1.0 * orig [k + channels * m * 11], margin))
-			{	printf ("\n\nLine %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-				for (m = 0 ; m < channels ; m++)
-					printf ("%d ", data [m]) ;
-				printf ("\n") ;
-				exit (1) ;
-				} ;
-		} ;
-
-	seekpos = BUFFER_SIZE / 10 ;
-
-	/* Check seek from start of file. */
-	if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-	{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-		exit (1) ;
-		} ;
-
-	test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-	{	printf ("\n\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_short failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-	k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-	test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\n\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-		oct_save_short (orig, data, datalen) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-	/* Check seek backward from current position. */
-	k = sf_seek (file, -20, SEEK_CUR) ;
-	test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-		exit (1) ;
-		} ;
-
-	/* Check that read past end of file returns number of items. */
-	sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
- 	if ((k = sf_readf_short (file, data, datalen)) != 0)
- 	{	printf ("\n\nLine %d: Return value from sf_readf_short past end of file incorrect (%d).\n", __LINE__, k) ;
- 		exit (1) ;
- 		} ;
-
-	/* Check seek backward from end. */
-	if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-		exit (1) ;
-		} ;
-
-	test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (1.0 * data [0], 1.0 * orig [5 * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5 * channels]) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* lcomp_test_short */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_int (const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, half_max_abs ;
-	sf_count_t		datalen, seekpos ;
-	double			scale, max_val ;
-	int				*orig, *data ;
-
-	print_test_name ("lcomp_test_int", filename) ;
-
-	datalen = BUFFER_SIZE / channels ;
-
-	if (is_lossy (filetype))
-	{	scale = 1.0 * 0x10000 ;
-		max_val = 32000.0 * scale ;
-		}
-	else
-	{	scale = 1.0 ;
-		max_val = 0x7fffffff * scale ;
-		} ;
-
-	data = data_buffer.i ;
-	orig = orig_buffer.i ;
-
-	gen_signal_double (orig_buffer.d, max_val, channels, datalen) ;
-
-	for (k = 0 ; k < channels * datalen ; k++)
-		orig [k] = lrint (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_writef_int_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (int)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + datalen / 20))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, data, datalen, __LINE__) ;
-
-	half_max_abs = 0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k] / scale, orig [k] / scale, margin))
-		{	printf ("\nLine %d: Incorrect sample (#%d : %f should be %f).\n", __LINE__, k, data [k] / scale, orig [k] / scale) ;
-			oct_save_int (orig, data, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-		} ;
-
-	if (half_max_abs < 1.0)
-	{	printf ("\n\nLine %d: Signal is all zeros (%d, 0x%X).\n", __LINE__, half_max_abs, half_max_abs) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-			channels * sfinfo.frames - datalen, k) ;
-		exit (1) ;
-		} ;
-
-	/*	This check is only for block based encoders which must append silence
-	**	to the end of a file so as to fill out a block.
-	*/
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [channels * k] / scale) > decay_response (channels * k))
-			{	printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-				exit (1) ;
-				} ;
-
-	if (! sfinfo.seekable)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("ok\n") ;
-		return ;
-		} ;
-
-	/* Now test sf_seek function. */
-
-	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-	{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (m = 0 ; m < 3 ; m++)
-	{	test_readf_int_or_die (file, m, data, 11, __LINE__) ;
-
-		for (k = 0 ; k < channels * 11 ; k++)
-			if (error_function (data [k] / scale, orig [k + channels * m * 11] / scale, margin))
-			{	printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-				for (m = 0 ; m < channels ; m++)
-					printf ("%d ", data [m]) ;
-				printf ("\n") ;
-				exit (1) ;
-				} ;
-		} ;
-
-	seekpos = BUFFER_SIZE / 10 ;
-
-	/* Check seek from start of file. */
-	if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-	{	printf ("Seek to start of file + %" PRId64 " failed (%d).\n", seekpos, k) ;
-		exit (1) ;
-		} ;
-
-	test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %" PRId64 ")\n", __LINE__, k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-	k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-	test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-	/* Check seek backward from current position. */
-	k = sf_seek (file, -20, SEEK_CUR) ;
-	test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-		exit (1) ;
-		} ;
-
-	/* Check that read past end of file returns number of items. */
-	sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
- 	if ((k = sf_readf_int (file, data, datalen)) != 0)
- 	{	printf ("\n\nLine %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
- 		exit (1) ;
- 		} ;
-
-	/* Check seek backward from end. */
-	if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-		exit (1) ;
-		} ;
-
-	test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0] / scale, orig [5 * channels] / scale, margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* lcomp_test_int */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_float (const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos ;
-	sf_count_t		datalen ;
-	float			*orig, *data ;
-	double			half_max_abs ;
-
-	print_test_name ("lcomp_test_float", filename) ;
-
-	datalen = BUFFER_SIZE / channels ;
-
-	data = data_buffer.f ;
-	orig = orig_buffer.f ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < channels * datalen ; k++)
-		orig [k] = orig_buffer.d [k] ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_writef_float_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (float)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + datalen / 20))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_readf_float_or_die (file, 0, data, datalen, __LINE__) ;
-
-	half_max_abs = 0.0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k], orig [k], margin))
-		{	printf ("\nLine %d: Incorrect sample A (#%d : %f should be %f).\n", __LINE__, k, data [k], orig [k]) ;
-			oct_save_float (orig, data, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, fabs (0.5 * data [k])) ;
-		} ;
-
-	if (half_max_abs < 1.0)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_float (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-			channels * sfinfo.frames - datalen, k) ;
-		exit (1) ;
-		} ;
-
-	/*	This check is only for block based encoders which must append silence
-	**	to the end of a file so as to fill out a block.
-	*/
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [channels * k]) > decay_response (channels * k))
-			{	printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%f) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-				exit (1) ;
-				} ;
-
-	if (! sfinfo.seekable)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("ok\n") ;
-		return ;
-		} ;
-
-	/* Now test sf_seek function. */
-
-	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-	{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (m = 0 ; m < 3 ; m++)
-	{	test_readf_float_or_die (file, 0, data, 11, __LINE__) ;
-
-		for (k = 0 ; k < channels * 11 ; k++)
-			if (error_function (data [k], orig [k + channels * m * 11], margin))
-			{	printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %f => %f).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-				for (m = 0 ; m < channels ; m++)
-					printf ("%f ", data [m]) ;
-				printf ("\n") ;
-				exit (1) ;
-				} ;
-		} ;
-
-	seekpos = BUFFER_SIZE / 10 ;
-
-	/* Check seek from start of file. */
-	if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-	{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-		exit (1) ;
-		} ;
-
-	test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-
-	if (error_function (data [0], orig [seekpos * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_float failed (%f, %f).\n", __LINE__, orig [1], data [0]) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-	k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-	test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_float failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-	/* Check seek backward from current position. */
-	k = sf_seek (file, -20, SEEK_CUR) ;
-	test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_float failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-		exit (1) ;
-		} ;
-
-	/* Check that read past end of file returns number of items. */
-	sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
- 	if ((k = sf_readf_float (file, data, datalen)) != 0)
- 	{	printf ("\n\nLine %d: Return value from sf_readf_float past end of file incorrect (%d).\n", __LINE__, k) ;
- 		exit (1) ;
- 		} ;
-
-	/* Check seek backward from end. */
-	if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-		exit (1) ;
-		} ;
-
-	test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [5 * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* lcomp_test_float */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_double (const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos ;
-	sf_count_t		datalen ;
-	double			*orig, *data ;
-	double			half_max_abs ;
-
-	print_test_name ("lcomp_test_double", filename) ;
-
-	datalen = BUFFER_SIZE / channels ;
-
-	data = data_buffer.d ;
-	orig = orig_buffer.d ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < channels * datalen ; k++)
-		orig [k] = orig_buffer.d [k] ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_writef_double_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + datalen / 20))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_readf_double_or_die (file, 0, data, datalen, __LINE__) ;
-
-	half_max_abs = 0.0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k], orig [k], margin))
-		{	printf ("\nLine %d: Incorrect sample A (#%d : %f should be %f).\n", __LINE__, k, data [k], orig [k]) ;
-			oct_save_double (orig, data, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-		} ;
-
-	if (half_max_abs < 1.0)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_double (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-			channels * sfinfo.frames - datalen, k) ;
-		exit (1) ;
-		} ;
-
-	/*	This check is only for block based encoders which must append silence
-	**	to the end of a file so as to fill out a block.
-	*/
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [channels * k]) > decay_response (channels * k))
-			{	printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%f) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-				exit (1) ;
-				} ;
-
-	if (! sfinfo.seekable)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("ok\n") ;
-		return ;
-		} ;
-
-	/* Now test sf_seek function. */
-
-	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-	{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-		exit (1) ;
-		} ;
-
-	for (m = 0 ; m < 3 ; m++)
-	{	test_readf_double_or_die (file, m, data, 11, __LINE__) ;
-
-		for (k = 0 ; k < channels * 11 ; k++)
-			if (error_function (data [k], orig [k + channels * m * 11], margin))
-			{	printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %f => %f).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-				for (m = 0 ; m < channels ; m++)
-					printf ("%f ", data [m]) ;
-				printf ("\n") ;
-				exit (1) ;
-				} ;
-		} ;
-
-	seekpos = BUFFER_SIZE / 10 ;
-
-	/* Check seek from start of file. */
-	if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-	{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-		exit (1) ;
-		} ;
-
-	test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-
-	if (error_function (data [0], orig [seekpos * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_double failed (%f, %f).\n", __LINE__, orig [1], data [0]) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-	k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-	test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_double failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-		exit (1) ;
-		} ;
-
-	seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-	/* Check seek backward from current position. */
-	k = sf_seek (file, -20, SEEK_CUR) ;
-	test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-	{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_double failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-		exit (1) ;
-		} ;
-
-	/* Check that read past end of file returns number of items. */
-	sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
- 	if ((k = sf_readf_double (file, data, datalen)) != 0)
- 	{	printf ("\n\nLine %d: Return value from sf_readf_double past end of file incorrect (%d).\n", __LINE__, k) ;
- 		exit (1) ;
- 		} ;
-
-	/* Check seek backward from end. */
-	if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-	{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-		exit (1) ;
-		} ;
-
-	test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-	if (error_function (data [0], orig [5 * channels], margin))
-	{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* lcomp_test_double */
-
-/*========================================================================================
-**	Smoothed differential loss compression tests.
-*/
-
-static void
-sdlcomp_test_short	(const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos, half_max_abs ;
-	sf_count_t		datalen ;
-	short			*orig, *data, *smooth ;
-
-channels = 1 ;
-	print_test_name ("sdlcomp_test_short", filename) ;
-
-	datalen = BUFFER_SIZE ;
-
-	orig = orig_buffer.s ;
-	data = data_buffer.s ;
-	smooth = smooth_buffer.s ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < datalen ; k++)
-		orig [k] = lrint (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	/*	The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-	**	<= 22050. Increasing the sample rate to 32000 avoids triggering it.
-	**	See https://trac.xiph.org/ticket/1229
-	*/
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	const char * errstr ;
-
-		errstr = sf_strerror (NULL) ;
-		if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-		{	printf ("Line %d: sf_open_fd (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-			dump_log_buffer (NULL) ;
-			exit (1) ;
-			} ;
-
-		printf ("\n                                  Sample rate -> 32kHz    ") ;
-		sfinfo.samplerate = 32000 ;
-
-		file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-		} ;
-
-	test_write_short_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (short)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + 400))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, data, datalen, __LINE__) ;
-
-	memcpy (smooth, orig, datalen * sizeof (short)) ;
-	smoothed_diff_short (data, datalen) ;
-	smoothed_diff_short (smooth, datalen) ;
-
-	half_max_abs = 0.0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (1.0 * data [k], 1.0 * smooth [k], margin))
-		{	printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, data [k], smooth [k]) ;
-			oct_save_short (orig, smooth, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-		} ;
-
-	if (half_max_abs < 1)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_read_short (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [k]) > decay_response (k))
-			{	printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, data [k], decay_response (k)) ;
-				exit (1) ;
-				} ;
-
-	/* Now test sf_seek function. */
-	if (sfinfo.seekable)
-	{	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-		{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		for (m = 0 ; m < 3 ; m++)
-		{	test_readf_short_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-			smoothed_diff_short (data, datalen / 7) ;
-			memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (short)) ;
-			smoothed_diff_short (smooth, datalen / 7) ;
-
-			for (k = 0 ; k < datalen / 7 ; k++)
-				if (error_function (1.0 * data [k], 1.0 * smooth [k], margin))
-				{	printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), smooth [k], data [k]) ;
-					for (m = 0 ; m < 10 ; m++)
-						printf ("%d ", data [k]) ;
-					printf ("\n") ;
-					exit (1) ;
-					} ;
-			} ; /* for (m = 0 ; m < 3 ; m++) */
-
-		seekpos = BUFFER_SIZE / 10 ;
-
-		/* Check seek from start of file. */
-		if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-		{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-			exit (1) ;
-			} ;
-		test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_short failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-			exit (1) ;
-			} ;
-
-		if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-		k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-		test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-		/* Check seek backward from current position. */
-		k = sf_seek (file, -20, SEEK_CUR) ;
-		test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-			exit (1) ;
-			} ;
-
-		/* Check that read past end of file returns number of items. */
-		sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-		if ((k = sf_read_short (file, data, datalen)) != 0)
-		{	printf ("\n\nLine %d: Return value from sf_read_short past end of file incorrect (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		/* Check seek backward from end. */
-
-		if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-			exit (1) ;
-			} ;
-
-		test_read_short_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (1.0 * data [0], 1.0 * orig [5 * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_short failed (%d should be %d).\n", __LINE__, data [0], orig [5 * channels]) ;
-			exit (1) ;
-			} ;
-		} /* if (sfinfo.seekable) */
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* sdlcomp_test_short */
-
-static	void
-sdlcomp_test_int	(const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos, half_max_abs ;
-	sf_count_t		datalen ;
-	int				*orig, *data, *smooth ;
-	double			scale ;
-
-channels = 1 ;
-
-	print_test_name ("sdlcomp_test_int", filename) ;
-
-	datalen = BUFFER_SIZE ;
-	scale = 1.0 * 0x10000 ;
-
-	orig = orig_buffer.i ;
-	data = data_buffer.i ;
-	smooth = smooth_buffer.i ;
-
-	gen_signal_double (orig_buffer.d, 32000.0 * scale, channels, datalen) ;
-	for (k = 0 ; k < datalen ; k++)
-		orig [k] = lrint (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	/*	The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-	**	<= 22050. Increasing the sample rate to 32000 avoids triggering it.
-	**	See https://trac.xiph.org/ticket/1229
-	*/
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	const char * errstr ;
-
-		errstr = sf_strerror (NULL) ;
-		if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-		{	printf ("Line %d: sf_open_fd (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-			dump_log_buffer (NULL) ;
-			exit (1) ;
-			} ;
-
-		printf ("\n                                  Sample rate -> 32kHz    ") ;
-		sfinfo.samplerate = 32000 ;
-
-		file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-		} ;
-
-	test_writef_int_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (int)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + 400))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, data, datalen, __LINE__) ;
-
-	memcpy (smooth, orig, datalen * sizeof (int)) ;
-	smoothed_diff_int (data, datalen) ;
-	smoothed_diff_int (smooth, datalen) ;
-
-	half_max_abs = abs (data [0] >> 16) ;
-	for (k = 1 ; k < datalen ; k++)
-	{	if (error_function (data [k] / scale, smooth [k] / scale, margin))
-		{	printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, data [k], smooth [k]) ;
-			oct_save_int (orig, smooth, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-		} ;
-
-	if (half_max_abs < 1)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_IMA_ADPCM &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610 &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_G721_32 &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_G723_24)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [k]) > decay_response (k))
-			{	printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, data [k], decay_response (k)) ;
-				exit (1) ;
-				} ;
-
-	/* Now test sf_seek function. */
-	if (sfinfo.seekable)
-	{	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-		{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		for (m = 0 ; m < 3 ; m++)
-		{	test_readf_int_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-			smoothed_diff_int (data, datalen / 7) ;
-			memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (int)) ;
-			smoothed_diff_int (smooth, datalen / 7) ;
-
-			for (k = 0 ; k < datalen / 7 ; k++)
-				if (error_function (data [k] / scale, smooth [k] / scale, margin))
-				{	printf ("\nLine %d: Incorrect sample (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), smooth [k], data [k]) ;
-					for (m = 0 ; m < 10 ; m++)
-						printf ("%d ", data [k]) ;
-					printf ("\n") ;
-					exit (1) ;
-					} ;
-			} ; /* for (m = 0 ; m < 3 ; m++) */
-
-		seekpos = BUFFER_SIZE / 10 ;
-
-		/* Check seek from start of file. */
-		if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-		{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-			exit (1) ;
-			} ;
-		test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-			exit (1) ;
-			} ;
-
-		if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-		k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-		test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-		/* Check seek backward from current position. */
-		k = sf_seek (file, -20, SEEK_CUR) ;
-		test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-		if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-			exit (1) ;
-			} ;
-
-		/* Check that read past end of file returns number of items. */
-		sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-		if ((k = sf_readf_int (file, data, datalen)) != 0)
-		{	printf ("\n\nLine %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		/* Check seek backward from end. */
-
-		if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-			exit (1) ;
-			} ;
-
-		test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-		if (error_function (data [0] / scale, orig [5] / scale, margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_int failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-			exit (1) ;
-			} ;
-		} /* if (sfinfo.seekable) */
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* sdlcomp_test_int */
-
-static void
-sdlcomp_test_float	(const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos ;
-	sf_count_t		datalen ;
-	float			*orig, *data, *smooth ;
-	double			half_max_abs ;
-
-channels = 1 ;
-
-	print_test_name ("sdlcomp_test_float", filename) ;
-
-	if ((filetype & SF_FORMAT_SUBMASK) == SF_FORMAT_VORBIS)
-	{	puts ("Not working for this format.") ;
-		return ;
-		} ;
-
-printf ("** fix this ** ") ;
-
-	datalen = BUFFER_SIZE ;
-
-	orig = orig_buffer.f ;
-	data = data_buffer.f ;
-	smooth = smooth_buffer.f ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < datalen ; k++)
-		orig [k] = lrint (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_write_float_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (float)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + 400))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, data, datalen, __LINE__) ;
-
-	memcpy (smooth, orig, datalen * sizeof (float)) ;
-	smoothed_diff_float (data, datalen) ;
-	smoothed_diff_float (smooth, datalen) ;
-
-	half_max_abs = fabs (data [0]) ;
-	for (k = 1 ; k < datalen ; k++)
-	{	if (error_function (data [k], smooth [k], margin))
-		{	printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, (int) data [k], (int) smooth [k]) ;
-			oct_save_float (orig, smooth, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-		} ;
-
-	if (half_max_abs <= 0.0)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		printf ("half_max_abs : % 10.6f\n", half_max_abs) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_read_float (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [k]) > decay_response (k))
-			{	printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, (int) data [k], (int) decay_response (k)) ;
-				exit (1) ;
-				} ;
-
-	/* Now test sf_seek function. */
-	if (sfinfo.seekable)
-	{	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-		{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		for (m = 0 ; m < 3 ; m++)
-		{	test_read_float_or_die (file, 0, data, datalen / 7, __LINE__) ;
-
-			smoothed_diff_float (data, datalen / 7) ;
-			memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (float)) ;
-			smoothed_diff_float (smooth, datalen / 7) ;
-
-			for (k = 0 ; k < datalen / 7 ; k++)
-				if (error_function (data [k], smooth [k], margin))
-				{	printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), (int) smooth [k], (int) data [k]) ;
-					for (m = 0 ; m < 10 ; m++)
-						printf ("%d ", (int) data [k]) ;
-					printf ("\n") ;
-					exit (1) ;
-					} ;
-			} ; /* for (m = 0 ; m < 3 ; m++) */
-
-		seekpos = BUFFER_SIZE / 10 ;
-
-		/* Check seek from start of file. */
-		if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-		{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-			exit (1) ;
-			} ;
-		test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-
-		if (error_function (data [0], orig [seekpos * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_float failed (%d, %d).\n", __LINE__, (int) orig [1], (int) data [0]) ;
-			exit (1) ;
-			} ;
-
-		if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-		k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-		test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_float failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-		/* Check seek backward from current position. */
-		k = sf_seek (file, -20, SEEK_CUR) ;
-		test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_float failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos) ;
-			exit (1) ;
-			} ;
-
-		/* Check that read past end of file returns number of items. */
-		sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-		if ((k = sf_read_float (file, data, datalen)) != 0)
-		{	printf ("\n\nLine %d: Return value from sf_read_float past end of file incorrect (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		/* Check seek backward from end. */
-
-		if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-			exit (1) ;
-			} ;
-
-		test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [5 * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_float failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-			exit (1) ;
-			} ;
-		} /* if (sfinfo.seekable) */
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* sdlcomp_test_float */
-
-static void
-sdlcomp_test_double	(const char *filename, int filetype, int channels, double margin)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, m, seekpos ;
-	sf_count_t		datalen ;
-	double			*orig, *data, *smooth, half_max_abs ;
-
-channels = 1 ;
-	print_test_name ("sdlcomp_test_double", filename) ;
-
-	if ((filetype & SF_FORMAT_SUBMASK) == SF_FORMAT_VORBIS)
-	{	puts ("Not working for this format.") ;
-		return ;
-		} ;
-
-	datalen = BUFFER_SIZE ;
-
-	orig = orig_buffer.d ;
-	data = data_buffer.d ;
-	smooth = smooth_buffer.d ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_write_double_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + 400))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, datalen, __LINE__) ;
-
-	memcpy (smooth, orig, datalen * sizeof (double)) ;
-	smoothed_diff_double (data, datalen) ;
-	smoothed_diff_double (smooth, datalen) ;
-
-	half_max_abs = 0.0 ;
-	for (k = 0 ; k < datalen ; k++)
-	{	if (error_function (data [k], smooth [k], margin))
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, (int) data [k], (int) smooth [k]) ;
-			oct_save_double (orig, smooth, datalen) ;
-			exit (1) ;
-			} ;
-		half_max_abs = LCT_MAX (half_max_abs, 0.5 * fabs (data [k])) ;
-		} ;
-
-	if (half_max_abs < 1.0)
-	{	printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((k = sf_read_double (file, data, datalen)) != sfinfo.frames - datalen)
-	{	printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-		(sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-		for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-			if (abs (data [k]) > decay_response (k))
-			{	printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, (int) data [k], (int) decay_response (k)) ;
-				exit (1) ;
-				} ;
-
-	/* Now test sf_seek function. */
-	if (sfinfo.seekable)
-	{	if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-		{	printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		for (m = 0 ; m < 3 ; m++)
-		{	test_read_double_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-			smoothed_diff_double (data, datalen / 7) ;
-			memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (double)) ;
-			smoothed_diff_double (smooth, datalen / 7) ;
-
-			for (k = 0 ; k < datalen / 7 ; k++)
-				if (error_function (data [k], smooth [k], margin))
-				{	printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), (int) smooth [k], (int) data [k]) ;
-					for (m = 0 ; m < 10 ; m++)
-						printf ("%d ", (int) data [k]) ;
-					printf ("\n") ;
-					exit (1) ;
-					} ;
-			} ; /* for (m = 0 ; m < 3 ; m++) */
-
-		seekpos = BUFFER_SIZE / 10 ;
-
-		/* Check seek from start of file. */
-		if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-		{	printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-			exit (1) ;
-			} ;
-		test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-
-		if (error_function (data [0], orig [seekpos * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_double failed (%d, %d).\n", __LINE__, (int) orig [1], (int) data [0]) ;
-			exit (1) ;
-			} ;
-
-		if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-		k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-		test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos + 1) ;
-			exit (1) ;
-			} ;
-
-		seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-		/* Check seek backward from current position. */
-		k = sf_seek (file, -20, SEEK_CUR) ;
-		test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-		{	printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos) ;
-			exit (1) ;
-			} ;
-
-		/* Check that read past end of file returns number of items. */
-		sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-		if ((k = sf_read_double (file, data, datalen)) != 0)
-		{	printf ("\n\nLine %d: Return value from sf_read_double past end of file incorrect (%d).\n", __LINE__, k) ;
-			exit (1) ;
-			} ;
-
-		/* Check seek backward from end. */
-
-		if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-		{	printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-			exit (1) ;
-			} ;
-
-		test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-		if (error_function (data [0], orig [5 * channels], margin))
-		{	printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_double failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-			exit (1) ;
-			} ;
-		} /* if (sfinfo.seekable) */
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* sdlcomp_test_double */
-
-static void
-read_raw_test (const char *filename, int filetype, int channels)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	sf_count_t		count, datalen ;
-	short			*orig, *data ;
-	int				k ;
-
-	print_test_name ("read_raw_test", filename) ;
-
-	datalen = ARRAY_LEN (orig_buffer.s) / 2 ;
-
-	orig = orig_buffer.s ;
-	data = data_buffer.s ;
-
-	gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-	for (k = 0 ; k < datalen ; k++)
-		orig [k] = lrint (orig_buffer.d [k]) ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= 123456789 ;	/* Ridiculous value. */
-	sfinfo.channels		= channels ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_short_or_die (file, 0, orig, datalen, __LINE__) ;
-	sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-	sf_close (file) ;
-
-	memset (data, 0, datalen * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < datalen / channels)
-	{	printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames > (datalen + 400))
-	{	printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != channels)
-	{	printf ("Incorrect number of channels in file.\n") ;
-		exit (1) ;
-		} ;
-
-	check_comment (file, filetype, __LINE__) ;
-
-	count = sf_read_raw (file, orig_buffer.c, datalen + 5 * channels) ;
-	if (count != sfinfo.channels * sfinfo.frames)
-	{	printf ("\nLine %d : sf_read_raw returned %" PRId64 " should be %" PRId64 "\n", __LINE__, count, sfinfo.channels * sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* read_raw_test */
-
-/*========================================================================================
-**	Auxiliary functions
-*/
-
-#define		SIGNAL_MAXVAL	30000.0
-#define		DECAY_COUNT		1000
-
-static int
-decay_response (int k)
-{	if (k < 1)
-		return (int) (1.2 * SIGNAL_MAXVAL) ;
-	if (k > DECAY_COUNT)
-		return 0 ;
-	return (int) (1.2 * SIGNAL_MAXVAL * (DECAY_COUNT - k) / (1.0 * DECAY_COUNT)) ;
-} /* decay_response */
-
-static void
-gen_signal_double (double *data, double scale, int channels, int datalen)
-{	int		k, ramplen ;
-	double	amp = 0.0 ;
-
-	ramplen = DECAY_COUNT ;
-
-	if (channels == 1)
-	{	for (k = 0 ; k < datalen ; k++)
-		{	if (k <= ramplen)
-				amp = scale * k / ((double) ramplen) ;
-			else if (k > datalen - ramplen)
-				amp = scale * (datalen - k) / ((double) ramplen) ;
-
-/*-printf ("%3d : %g\n", k, amp) ;-*/
-
-			data [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-							+ 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-			} ;
-		}
-	else
-	{	for (k = 0 ; k < datalen ; k ++)
-		{	if (k <= ramplen)
-				amp = scale * k / ((double) ramplen) ;
-			else if (k > datalen - ramplen)
-				amp = scale * (datalen - k) / ((double) ramplen) ;
-
-			data [2 * k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-							+ 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-			data [2 * k + 1] = amp * (0.4 * sin (55.5 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-							+ 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-			} ;
-		} ;
-
-	return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{	double error ;
-
-	if (fabs (orig) <= 500.0)
-		error = fabs (fabs (data) - fabs (orig)) / 2000.0 ;
-	else if (fabs (orig) <= 1000.0)
-		error = fabs (data - orig) / 3000.0 ;
-	else
-		error = fabs (data - orig) / fabs (orig) ;
-
-	if (error > margin)
-	{	printf ("\n\nerror_function (data = %f, orig = %f, margin = %f) -> %f\n", data, orig, margin, error) ;
-		return 1 ;
-		} ;
-	return 0 ;
-} /* error_function */
-
-static void
-smoothed_diff_short (short *data, unsigned int datalen)
-{	unsigned int k ;
-	double memory = 0.0 ;
-
-	/* Calculate the smoothed sample-to-sample difference. */
-	for (k = 0 ; k < datalen - 1 ; k++)
-	{	memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
-		data [k] = (short) memory ;
-		} ;
-	data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_short */
-
-static void
-smoothed_diff_int (int *data, unsigned int datalen)
-{	unsigned int k ;
-	double memory = 0.0 ;
-
-	/* Calculate the smoothed sample-to-sample difference. */
-	for (k = 0 ; k < datalen - 1 ; k++)
-	{	memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
-		data [k] = (int) memory ;
-		} ;
-	data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_int */
-
-static	void
-smoothed_diff_float (float *data, unsigned int datalen)
-{	unsigned int k ;
-	float memory = 0.0 ;
-
-	/* Calculate the smoothed sample-to-sample difference. */
-	for (k = 0 ; k < datalen - 1 ; k++)
-	{	memory = 0.7 * memory + (1 - 0.7) * (data [k+1] - data [k]) ;
-		data [k] = memory ;
-		} ;
-	data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_float */
-
-static	void
-smoothed_diff_double (double *data, unsigned int datalen)
-{	unsigned int k ;
-	double memory = 0.0 ;
-
-	/* Calculate the smoothed sample-to-sample difference. */
-	for (k = 0 ; k < datalen - 1 ; k++)
-	{	memory = 0.7 * memory + (1 - 0.7) * (data [k+1] - data [k]) ;
-		data [k] = memory ;
-		} ;
-	data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_double */
-
-static void
-check_comment (SNDFILE * file, int format, int lineno)
-{	const char		*comment ;
-
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_AIFF :
-		case SF_FORMAT_WAV :
-		case SF_FORMAT_WAVEX :
-			break ;
-		default :
-			return ;
-		} ;
-
-	comment = sf_get_string (file, SF_STR_COMMENT) ;
-	if (comment == NULL)
-	{	printf ("\n\nLine %d : File does not contain a comment string.\n\n", lineno) ;
-		exit (1) ;
-		} ;
-
-	if (strcmp (comment, long_comment) != 0)
-	{	printf ("\n\nLine %d : File comment does not match comment written.\n\n", lineno) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_comment */
-
-static int
-is_lossy (int filetype)
-{
-	switch (SF_FORMAT_SUBMASK & filetype)
-	{	case SF_FORMAT_PCM_U8 :
-		case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_16 :
-		case SF_FORMAT_PCM_24 :
-		case SF_FORMAT_PCM_32 :
-		case SF_FORMAT_FLOAT :
-		case SF_FORMAT_DOUBLE :
-			return 0 ;
-
-		default :
-			break ;
-		} ;
-
-	return 1 ;
-} /* is_lossy */
-
diff --git a/libs/libsndfile/tests/misc_test.c b/libs/libsndfile/tests/misc_test.c
deleted file mode 100644
index b95e421dce..0000000000
--- a/libs/libsndfile/tests/misc_test.c
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN		(1 << 10)
-#define LOG_BUFFER_SIZE	1024
-
-static void	zero_data_test (const char *filename, int format) ;
-static void	filesystem_full_test (int format) ;
-static void	permission_test (const char *filename, int typemajor) ;
-static void	wavex_amb_test (const char *filename) ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test WAV file peak chunk\n") ;
-		printf ("           aiff - test AIFF file PEAK chunk\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	zero_data_test ("zerolen.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.wav", SF_FORMAT_WAV) ;
-		wavex_amb_test ("ambisonic.wav") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	zero_data_test ("zerolen.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.aiff", SF_FORMAT_AIFF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	zero_data_test ("zerolen.au", SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.au", SF_FORMAT_AU) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	zero_data_test ("zerolen.caf", SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.caf", SF_FORMAT_CAF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	zero_data_test ("zerolen.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.svx", SF_FORMAT_SVX) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	zero_data_test ("zerolen.nist", SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.nist", SF_FORMAT_NIST) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	zero_data_test ("zerolen.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.paf", SF_FORMAT_PAF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	zero_data_test ("zerolen.ircam", SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.ircam", SF_FORMAT_IRCAM) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	zero_data_test ("zerolen.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.voc", SF_FORMAT_VOC) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	zero_data_test ("zerolen.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.w64", SF_FORMAT_W64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	zero_data_test ("zerolen.rf64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.rf64", SF_FORMAT_W64) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	zero_data_test ("zerolen.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.mat4", SF_FORMAT_MAT4) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	zero_data_test ("zerolen.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.mat5", SF_FORMAT_MAT5) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	zero_data_test ("zerolen.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.pvf", SF_FORMAT_PVF) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	zero_data_test ("zerolen.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.htk", SF_FORMAT_HTK) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "avr"))
-	{	zero_data_test ("zerolen.avr", SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.avr", SF_FORMAT_AVR) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sds"))
-	{	zero_data_test ("zerolen.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.sds", SF_FORMAT_SDS) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mpc2k"))
-	{	zero_data_test ("zerolen.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
-		filesystem_full_test (SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
-		permission_test ("readonly.mpc", SF_FORMAT_MPC2K) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ogg"))
-	{	zero_data_test ("zerolen.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;
-		/*-filesystem_full_test (SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;-*/
-		permission_test ("readonly.oga", SF_FORMAT_OGG) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-zero_data_test (const char *filename, int format)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_OGG :
-			if (HAVE_EXTERNAL_LIBS == 0)
-				return ;
-			break ;
-		default :
-			break ;
-		} ;
-
-	print_test_name ("zero_data_test", filename) ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = format ;
-	sfinfo.channels = 1 ;
-	sfinfo.frames = 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* zero_data_test */
-
-static void
-filesystem_full_test (int format)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	struct stat buf ;
-
-	const char	*filename = "/dev/full", *errorstr ;
-
-#if (defined (WIN32) || defined (_WIN32))
-	/* Can't run this test on Win32 so return. */
-	return ;
-#endif
-
-	/* Make sure errno is zero before doing anything else. */
-	errno = 0 ;
-
-	print_test_name ("filesystem_full_test", filename) ;
-
-	if (stat (filename, &buf) != 0)
-	{	puts ("/dev/full missing") ;
-		return ;
-		} ;
-
-	if (S_ISCHR (buf.st_mode) == 0 && S_ISBLK (buf.st_mode) == 0)
-	{	puts ("/dev/full is not a device file") ;
-		return ;
-		} ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = format ;
-	sfinfo.channels = 1 ;
-	sfinfo.frames = 0 ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) != NULL)
-	{	printf ("\n\nLine %d : Error, file should not have openned.\n", __LINE__ - 1) ;
-		exit (1) ;
-		} ;
-
-	errorstr = sf_strerror (file) ;
-
-	if (strstr (errorstr, " space ") == NULL || strstr (errorstr, "device") == NULL)
-	{	printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-} /* filesystem_full_test */
-
-static void
-permission_test (const char *filename, int typemajor)
-{
-#if (OS_IS_WIN32)
-	/* Avoid compiler warnings. */
-	filename = filename ;
-	typemajor = typemajor ;
-
-	/* Can't run this test on Win32 so return. */
-	return ;
-#else
-
-	FILE		*textfile ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	const char	*errorstr ;
-
-	/* Make sure errno is zero before doing anything else. */
-	errno = 0 ;
-
-	if (getuid () == 0)
-	{	/* If running as root bypass this test.
-		** Root is allowed to open a readonly file for write.
-		*/
-		return ;
-		} ;
-
-	print_test_name ("permission_test", filename) ;
-
-	if (access (filename, F_OK) == 0)
-	{	chmod (filename, S_IWUSR) ;
-		unlink (filename) ;
-		} ;
-
-	if ((textfile = fopen (filename, "w")) == NULL)
-	{	printf ("\n\nLine %d : not able to open text file for write.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	fprintf (textfile, "This is a read only file.\n") ;
-	fclose (textfile) ;
-
-	if (chmod (filename, S_IRUSR | S_IRGRP))
-	{	printf ("\n\nLine %d : chmod failed", __LINE__) ;
-		fflush (stdout) ;
-		perror ("") ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-	sfinfo.channels = 1 ;
-	sfinfo.frames = 0 ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) != NULL)
-	{	printf ("\n\nLine %d : Error, file should not have opened.\n", __LINE__ - 1) ;
-		exit (1) ;
-		} ;
-
-	errorstr = sf_strerror (file) ;
-
-	if (strstr (errorstr, "ermission denied") == NULL)
-	{	printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-		exit (1) ;
-		} ;
-
-	if (chmod (filename, S_IWUSR | S_IWGRP))
-	{	printf ("\n\nLine %d : chmod failed", __LINE__) ;
-		fflush (stdout) ;
-		perror ("") ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-
-	puts ("ok") ;
-
-#endif
-} /* permission_test */
-
-static void
-wavex_amb_test (const char *filename)
-{	static short buffer [800] ;
-	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-	sf_count_t	frames ;
-
-	print_test_name (__func__, filename) ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.format = SF_FORMAT_WAVEX | SF_FORMAT_PCM_16 ;
-	sfinfo.channels = 4 ;
-
-	frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_WAVEX_SET_AMBISONIC, NULL, SF_AMBISONIC_B_FORMAT) ;
-	test_writef_short_or_die (file, 0, buffer, frames, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	exit_if_true (
-		sf_command (file, SFC_WAVEX_GET_AMBISONIC, NULL, 0) != SF_AMBISONIC_B_FORMAT,
-		"\n\nLine %d : Error, this file should be in Ambisonic B format.\n", __LINE__
-		) ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* wavex_amb_test */
diff --git a/libs/libsndfile/tests/multi_file_test.c b/libs/libsndfile/tests/multi_file_test.c
deleted file mode 100644
index 502d15a6ba..0000000000
--- a/libs/libsndfile/tests/multi_file_test.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	DATA_LENGTH 		(512)
-
-static void write_file_at_end (int fd, int filetype, int channels, int file_num) ;
-
-static void multi_file_test (const char *filename, int *formats, int format_count) ;
-
-static short data [DATA_LENGTH] ;
-
-static int 	wav_formats [] =
-{	SF_FORMAT_WAV | SF_FORMAT_PCM_16,
-	SF_FORMAT_WAV | SF_FORMAT_PCM_24,
-	SF_FORMAT_WAV | SF_FORMAT_ULAW,
-	SF_FORMAT_WAV | SF_FORMAT_ALAW,
-	/* Lite remove start */
-	SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM,
-	SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM,
-	/* Lite remove end */
-	/*-SF_FORMAT_WAV | SF_FORMAT_GSM610 Doesn't work yet. -*/
-} ;
-
-static int 	aiff_formats [] =
-{	SF_FORMAT_AIFF | SF_FORMAT_PCM_16,
-	SF_FORMAT_AIFF | SF_FORMAT_PCM_24,
-	SF_FORMAT_AIFF | SF_FORMAT_ULAW,
-	SF_FORMAT_AIFF | SF_FORMAT_ALAW
-} ;
-
-static int 	au_formats [] =
-{	SF_FORMAT_AU | SF_FORMAT_PCM_16,
-	SF_FORMAT_AU | SF_FORMAT_PCM_24,
-	SF_FORMAT_AU | SF_FORMAT_ULAW,
-	SF_FORMAT_AU | SF_FORMAT_ALAW
-} ;
-
-static int verbose = SF_FALSE ;
-
-int
-main (int argc, char **argv)
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc == 3 && strcmp (argv [2], "-v") == 0)
-	{	verbose = SF_TRUE ;
-		argc -- ;
-		} ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav   - test WAV file functions (little endian)\n") ;
-		printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-		printf ("           au    - test AU file functions\n") ;
-#if 0
-		printf ("           svx   - test 8SVX/16SV file functions\n") ;
-		printf ("           nist  - test NIST Sphere file functions\n") ;
-		printf ("           ircam - test IRCAM file functions\n") ;
-		printf ("           voc   - Create Voice file functions\n") ;
-		printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-#endif
-		printf ("           all   - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = !strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	multi_file_test	("multi_wav.dat", wav_formats, ARRAY_LEN (wav_formats)) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	multi_file_test	("multi_aiff.dat", aiff_formats, ARRAY_LEN (aiff_formats)) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	multi_file_test	("multi_au.dat", au_formats, ARRAY_LEN (au_formats)) ;
-		test_count++ ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-/*======================================================================================
-*/
-
-static void
-multi_file_test (const char *filename, int *formats, int format_count)
-{	SNDFILE				*sndfile ;
-	SF_INFO				sfinfo ;
-	SF_EMBED_FILE_INFO	embed_info ;
-	sf_count_t			filelen ;
-	int					fd, k, file_count = 0 ;
-
-	print_test_name ("multi_file_test", filename) ;
-
-	unlink (filename) ;
-
-	if ((fd = open (filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) < 0)
-	{	printf ("\n\nLine %d: open failed : %s\n", __LINE__, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	k = write (fd, "1234", 4) ;
-
-	for (k = 0 ; k < format_count ; k++)
-		write_file_at_end (fd, formats [k], 2, k) ;
-
-	filelen = file_length_fd (fd) ;
-
-	embed_info.offset = 4 ;
-	embed_info.length = 0 ;
-
-
-	for (file_count = 1 ; embed_info.offset + embed_info.length < filelen ; file_count ++)
-	{
-		if (verbose)
-		{	puts ("\n------------------------------------") ;
-			printf ("This offset : %" PRId64 "\n", embed_info.offset + embed_info.length) ;
-			} ;
-
-		if (lseek (fd, embed_info.offset + embed_info.length, SEEK_SET) < 0)
-		{	printf ("\n\nLine %d: lseek failed : %s\n", __LINE__, strerror (errno)) ;
-			exit (1) ;
-			} ;
-
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-		if ((sndfile = sf_open_fd (fd, SFM_READ, &sfinfo, SF_FALSE)) == NULL)
-		{	printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ;
-			printf ("Embedded file number : %d   offset : %" PRId64 "\n", file_count, embed_info.offset) ;
-			puts (sf_strerror (sndfile)) ;
-			dump_log_buffer (sndfile) ;
-			exit (1) ;
-			} ;
-
-		sf_command (sndfile, SFC_GET_EMBED_FILE_INFO, &embed_info, sizeof (embed_info)) ;
-
-		sf_close (sndfile) ;
-
-		if (verbose)
-			printf ("\nNext offset : %" PRId64 "\nNext length : %" PRId64 "\n", embed_info.offset, embed_info.length) ;
-		} ;
-
-	file_count -- ;
-
-	if (file_count != format_count)
-	{	printf ("\n\nLine %d: file count (%d) not equal to %d.\n\n", __LINE__, file_count, format_count) ;
-		printf ("Embedded file number : %d\n", file_count) ;
-		exit (1) ;
-		} ;
-
-	close (fd) ;
-	unlink (filename) ;
-	printf ("ok\n") ;
-
-	return ;
-} /* multi_file_test */
-
-/*======================================================================================
-*/
-
-static void
-write_file_at_end (int fd, int filetype, int channels, int file_num)
-{	SNDFILE *sndfile ;
-	SF_INFO sfinfo ;
-
-	int	frames, k ;
-
-	lseek (fd, 0, SEEK_END) ;
-
-	for (k = 0 ; k < DATA_LENGTH ; k++)
-		data [k] = k ;
-
-	frames = DATA_LENGTH / channels ;
-
-	sfinfo.format = filetype ;
-	sfinfo.channels = channels ;
-	sfinfo.samplerate = 44100 ;
-
-	if ((sndfile = sf_open_fd (fd, SFM_WRITE, &sfinfo, SF_FALSE)) == NULL)
-	{	printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ;
-		printf ("Embedded file number : %d\n", file_num) ;
-		puts (sf_strerror (sndfile)) ;
-		dump_log_buffer (sndfile) ;
-		exit (1) ;
-		} ;
-
-	if (sf_writef_short (sndfile, data, frames) != frames)
-	{	printf ("\n\nLine %d: short write\n", __LINE__) ;
-		printf ("Embedded file number : %d\n", file_num) ;
-		exit (1) ;
-		} ;
-
-	sf_close (sndfile) ;
-} /* write_file_at_end */
-
diff --git a/libs/libsndfile/tests/ogg_test.c b/libs/libsndfile/tests/ogg_test.c
deleted file mode 100644
index 4b1be031fc..0000000000
--- a/libs/libsndfile/tests/ogg_test.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
-** Copyright (C) 2007-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	SAMPLE_RATE			44100
-#define	DATA_LENGTH			(SAMPLE_RATE / 8)
-
-typedef union
-{	double d [DATA_LENGTH] ;
-	float f [DATA_LENGTH] ;
-	int i [DATA_LENGTH] ;
-	short s [DATA_LENGTH] ;
-} BUFFER ;
-
-static BUFFER data_out ;
-static BUFFER data_in ;
-
-static void
-ogg_short_test (void)
-{	const char * filename = "vorbis_short.oga" ;
-
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	short seek_data [10] ;
-	unsigned k ;
-
-	print_test_name ("ogg_short_test", filename) ;
-
-	/* Generate float data. */
-	gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 1.0 * 0x7F00) ;
-
-	/* Convert to shorteger. */
-	for (k = 0 ; k < ARRAY_LEN (data_out.s) ; k++)
-		data_out.s [k] = lrintf (data_out.f [k]) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_short_or_die (file, 0, data_out.s, ARRAY_LEN (data_out.s), __LINE__) ;
-	sf_close (file) ;
-
-	/* Read the file in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_short_or_die (file, 0, data_in.s, ARRAY_LEN (data_in.s), __LINE__) ;
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	/* Test seeking. */
-	print_test_name ("ogg_seek_test", filename) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-	test_read_short_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-	compare_short_or_die (seek_data, data_in.s + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-	/* Test seek to end of file. */
-	test_seek_or_die (file, 0, SEEK_END, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-} /* ogg_short_test */
-
-static void
-ogg_int_test (void)
-{	const char * filename = "vorbis_int.oga" ;
-
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	int seek_data [10] ;
-	unsigned k ;
-
-	print_test_name ("ogg_int_test", filename) ;
-
-	/* Generate float data. */
-	gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 1.0 * 0x7FFF0000) ;
-
-	/* Convert to integer. */
-	for (k = 0 ; k < ARRAY_LEN (data_out.i) ; k++)
-		data_out.i [k] = lrintf (data_out.f [k]) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_int_or_die (file, 0, data_out.i, ARRAY_LEN (data_out.i), __LINE__) ;
-	sf_close (file) ;
-
-	/* Read the file in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_int_or_die (file, 0, data_in.i, ARRAY_LEN (data_in.i), __LINE__) ;
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	/* Test seeking. */
-	print_test_name ("ogg_seek_test", filename) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-	test_read_int_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-	compare_int_or_die (seek_data, data_in.i + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-} /* ogg_int_test */
-
-static void
-ogg_float_test (void)
-{	const char * filename = "vorbis_float.oga" ;
-
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	float seek_data [10] ;
-
-	print_test_name ("ogg_float_test", filename) ;
-
-	gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 0.95) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_float_or_die (file, 0, data_out.f, ARRAY_LEN (data_out.f), __LINE__) ;
-	sf_close (file) ;
-
-	/* Read the file in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_float_or_die (file, 0, data_in.f, ARRAY_LEN (data_in.f), __LINE__) ;
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	/* Test seeking. */
-	print_test_name ("ogg_seek_test", filename) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-	test_read_float_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-	compare_float_or_die (seek_data, data_in.f + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-} /* ogg_float_test */
-
-static void
-ogg_double_test (void)
-{	const char * filename = "vorbis_double.oga" ;
-
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	double seek_data [10] ;
-
-	print_test_name ("ogg_double_test", filename) ;
-
-	gen_windowed_sine_double (data_out.d, ARRAY_LEN (data_out.d), 0.95) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_double_or_die (file, 0, data_out.d, ARRAY_LEN (data_out.d), __LINE__) ;
-	sf_close (file) ;
-
-	/* Read the file in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_double_or_die (file, 0, data_in.d, ARRAY_LEN (data_in.d), __LINE__) ;
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	/* Test seeking. */
-	print_test_name ("ogg_seek_test", filename) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-	test_read_double_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-	compare_double_or_die (seek_data, data_in.d + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-} /* ogg_double_test */
-
-
-static void
-ogg_stereo_seek_test (const char * filename, int format)
-{	static float data [SAMPLE_RATE] ;
-	static float stereo_out [SAMPLE_RATE * 2] ;
-
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	sf_count_t pos ;
-	unsigned k ;
-
-	print_test_name (__func__, filename) ;
-
-	gen_windowed_sine_float (data, ARRAY_LEN (data), 0.95) ;
-	for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-	{	stereo_out [2 * k] = data [k] ;
-		stereo_out [2 * k + 1] = data [ARRAY_LEN (data) - k - 1] ;
-		} ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = format ;
-	sfinfo.channels = 2 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	test_write_float_or_die (file, 0, stereo_out, ARRAY_LEN (stereo_out), __LINE__) ;
-	sf_close (file) ;
-
-	/* Open file in again for reading. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	/* Read in the whole file. */
-	test_read_float_or_die (file, 0, stereo_out, ARRAY_LEN (stereo_out), __LINE__) ;
-
-	/* Now hammer seeking code. */
-	test_seek_or_die (file, 234, SEEK_SET, 234, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + (234 * sfinfo.channels), 10, __LINE__) ;
-
-	test_seek_or_die (file, 442, SEEK_SET, 442, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + (442 * sfinfo.channels), 10, __LINE__) ;
-
-	test_seek_or_die (file, 12, SEEK_CUR, 442 + 10 + 12, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + ((442 + 10 + 12) * sfinfo.channels), 10, __LINE__) ;
-
-	test_seek_or_die (file, 12, SEEK_CUR, 442 + 20 + 24, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + ((442 + 20 + 24) * sfinfo.channels), 10, __LINE__) ;
-
-	pos = 500 - sfinfo.frames ;
-	test_seek_or_die (file, pos, SEEK_END, 500, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + (500 * sfinfo.channels), 10, __LINE__) ;
-
-	pos = 10 - sfinfo.frames ;
-	test_seek_or_die (file, pos, SEEK_END, 10, sfinfo.channels, __LINE__) ;
-	test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-	compare_float_or_die (data, stereo_out + (10 * sfinfo.channels), 10, __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-	unlink (filename) ;
-} /* ogg_stereo_seek_test */
-
-
-int
-main (void)
-{
-	if (HAVE_EXTERNAL_LIBS)
-	{	ogg_short_test () ;
-		ogg_int_test () ;
-		ogg_float_test () ;
-		ogg_double_test () ;
-
-		/*-ogg_stereo_seek_test ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;-*/
-		ogg_stereo_seek_test ("vorbis_seek.ogg", SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;
-		}
-	else
-		puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-	return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/open_fail_test.c b/libs/libsndfile/tests/open_fail_test.c
deleted file mode 100644
index 620f3bad25..0000000000
--- a/libs/libsndfile/tests/open_fail_test.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-** Copyright (C) 2003,2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-int
-main (void)
-{	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-
-	FILE		*bad_file ;
-	const char	*bad_wav = "bad_wav.wav" ;
-	const char	bad_data [] = "RIFF    WAVEfmt            " ;
-
-	print_test_name ("open_fail_test", bad_wav) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	sndfile = sf_open ("let's hope this file doesn't exist", SFM_READ, &sfinfo) ;
-
-	if (sndfile)
-	{	printf ("Line %d: should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if ((bad_file = fopen (bad_wav, "w")) == NULL)
-	{	printf ("Line %d: fopen returned NULL.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	fwrite (bad_data, sizeof (bad_data), 1, bad_file) ;
-	fclose (bad_file) ;
-
-	sndfile = sf_open (bad_wav, SFM_READ, &sfinfo) ;
-
-	if (sndfile)
-	{	printf ("Line %d: should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	unlink (bad_wav) ;
-	puts ("ok") ;
-
-	return 0 ;
-} /* main */
-
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch 
-** revision control system.
-**
-** arch-tag: 24440323-00b1-4e4b-87c5-0e3b7e9605e9
-*/
diff --git a/libs/libsndfile/tests/pcm_test.c b/libs/libsndfile/tests/pcm_test.c
deleted file mode 100644
index 86511f65e4..0000000000
--- a/libs/libsndfile/tests/pcm_test.c
+++ /dev/null
@@ -1,1723 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(1<<12)
-
-static void	lrintf_test (void) ;
-
-static void	pcm_test_bits_8	(const char *filename, int filetype, uint64_t hash) ;
-static void	pcm_test_bits_16	(const char *filename, int filetype, uint64_t hash) ;
-static void	pcm_test_bits_24	(const char *filename, int filetype, uint64_t hash) ;
-static void	pcm_test_bits_32	(const char *filename, int filetype, uint64_t hash) ;
-
-static void pcm_test_float	(const char *filename, int filetype, uint64_t hash, int replace_float) ;
-static void pcm_test_double	(const char *filename, int filetype, uint64_t hash, int replace_float) ;
-
-typedef union
-{	double	d [BUFFER_SIZE + 1] ;
-	float	f [BUFFER_SIZE + 1] ;
-	int		i [BUFFER_SIZE + 1] ;
-	short	s [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-/* Data written to the file. */
-static	BUFFER	data_out ;
-
-/* Data read back from the file. */
-static	BUFFER	data_in ;
-
-int
-main (void)
-{
-	lrintf_test () ;
-
-	pcm_test_bits_8	("pcm-s8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_S8, 0x1cda335091249dbfLL) ;
-	pcm_test_bits_8	("pcm-u8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_U8, 0x7f748c433d695f3fLL) ;
-
-	pcm_test_bits_16 ("le-pcm16.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0x3a2b956c881ebf08LL) ;
-	pcm_test_bits_16 ("be-pcm16.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0xd9e2f840c55750f8LL) ;
-
-	pcm_test_bits_24 ("le-pcm24.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0x933b6a759ab496f8LL) ;
-	pcm_test_bits_24 ("be-pcm24.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0xbb1f3eaf9c30b6f8LL) ;
-
-	pcm_test_bits_32 ("le-pcm32.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0xa77aece1c1c17f08LL) ;
-	pcm_test_bits_32 ("be-pcm32.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0x3099ddf142d0b0f8LL) ;
-
-	/* Lite remove start */
-	pcm_test_float	("le-float.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_FALSE) ;
-	pcm_test_float	("be-float.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_FALSE) ;
-
-	pcm_test_double	("le-double.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_FALSE) ;
-	pcm_test_double	("be-double.raw", SF_ENDIAN_BIG	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_FALSE) ;
-
-	pcm_test_float	("le-float.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_TRUE) ;
-	pcm_test_float	("be-float.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_TRUE) ;
-
-	pcm_test_double	("le-double.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_TRUE) ;
-	pcm_test_double	("be-double.raw", SF_ENDIAN_BIG	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_TRUE) ;
-	/* Lite remove end */
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-lrintf_test (void)
-{	int k, items ;
-	float	*float_data ;
-	int		*int_data ;
-
-	print_test_name ("lrintf_test", "") ;
-
-	items = 1024 ;
-
-	float_data = data_out.f ;
-	int_data = data_in.i ;
-
-	for (k = 0 ; k < items ; k++)
-		float_data [k] = (k * ((k % 2) ? 333333.0 : -333333.0)) ;
-
-	for (k = 0 ; k < items ; k++)
-		int_data [k] = lrintf (float_data [k]) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (int_data [k] - float_data [k]) > 1.0)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %d).\n", __LINE__, k, float_data [k], int_data [k]) ;
-			exit (1) ;
-			} ;
-
-	printf ("ok\n") ;
-} /* lrintf_test */
-
-static void
-pcm_test_bits_8 (const char *filename, int filetype, uint64_t hash)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, items, zero_count ;
-	short		*short_out, *short_in ;
-	int			*int_out, *int_in ;
-	/* Lite remove start */
-	float		*float_out, *float_in ;
-	double		*double_out, *double_in ;
-	/* Lite remove end */
-
-	print_test_name ("pcm_test_bits_8", filename) ;
-
-	items = 127 ;
-
-	short_out = data_out.s ;
-	short_in = data_in.s ;
-
-	zero_count = 0 ;
-	for (k = 0 ; k < items ; k++)
-	{	short_out [k] = ((k * ((k % 2) ? 1 : -1)) << 8) ;
-		zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (short_in, 0, items * sizeof (short)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (short_out [k] != short_in [k])
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Finally, check the file hash. */
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_int ()
-	*/
-	zero_count = 0 ;
-
-	int_out = data_out.i ;
-	int_in = data_in.i ;
-	for (k = 0 ; k < items ; k++)
-	{	int_out [k] = ((k * ((k % 2) ? 1 : -1)) << 24) ;
-		zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (int_in, 0, items * sizeof (int)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (int_out [k] != int_in [k])
-		{	printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Lite remove start */
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_float ()
-	*/
-	zero_count = 0 ;
-
-	float_out = data_out.f ;
-	float_in = data_in.f ;
-	for (k = 0 ; k < items ; k++)
-	{	float_out [k] = (k * ((k % 2) ? 1 : -1)) ;
-		zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_in, 0, items * sizeof (float)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (float_out [k] - float_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_double ()
-	*/
-	zero_count = 0 ;
-
-	double_out = data_out.d ;
-	double_in = data_in.d ;
-	for (k = 0 ; k < items ; k++)
-	{	double_out [k] = (k * ((k % 2) ? 1 : -1)) ;
-		zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_in, 0, items * sizeof (double)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (double_out [k] - double_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-	/* Lite remove end */
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* pcm_test_bits_8 */
-
-static void
-pcm_test_bits_16 (const char *filename, int filetype, uint64_t hash)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, items, zero_count ;
-	short		*short_out, *short_in ;
-	int			*int_out, *int_in ;
-	/* Lite remove start */
-	float		*float_out, *float_in ;
-	double		*double_out, *double_in ;
-	/* Lite remove end */
-
-	print_test_name ("pcm_test_bits_16", filename) ;
-
-	items = 1024 ;
-
-	short_out = data_out.s ;
-	short_in = data_in.s ;
-
-	zero_count = 0 ;
-	for (k = 0 ; k < items ; k++)
-	{	short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-		zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (short_in, 0, items * sizeof (short)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (short_out [k] != short_in [k])
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Finally, check the file hash. */
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_int ()
-	*/
-	zero_count = 0 ;
-
-	int_out = data_out.i ;
-	int_in = data_in.i ;
-	for (k = 0 ; k < items ; k++)
-	{	int_out [k] = ((k * ((k % 2) ? 3 : -3)) << 16) ;
-		zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (int_in, 0, items * sizeof (int)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (int_out [k] != int_in [k])
-		{	printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Lite remove start */
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_float ()
-	*/
-	zero_count = 0 ;
-
-	float_out = data_out.f ;
-	float_in = data_in.f ;
-	for (k = 0 ; k < items ; k++)
-	{	float_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-		zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_in, 0, items * sizeof (float)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (float_out [k] - float_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_double ()
-	*/
-	zero_count = 0 ;
-
-	double_out = data_out.d ;
-	double_in = data_in.d ;
-	for (k = 0 ; k < items ; k++)
-	{	double_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-		zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_in, 0, items * sizeof (double)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (double_out [k] - double_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-	/* Lite remove end */
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* pcm_test_bits_16 */
-
-static void
-pcm_test_bits_24 (const char *filename, int filetype, uint64_t hash)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, items, zero_count ;
-	short		*short_out, *short_in ;
-	int			*int_out, *int_in ;
-	/* Lite remove start */
-	float		*float_out, *float_in ;
-	double		*double_out, *double_in ;
-	/* Lite remove end */
-
-	print_test_name ("pcm_test_bits_24", filename) ;
-
-	items = 1024 ;
-
-	short_out = data_out.s ;
-	short_in = data_in.s ;
-
-	zero_count = 0 ;
-	for (k = 0 ; k < items ; k++)
-	{	short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-		zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (short_in, 0, items * sizeof (short)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (short_out [k] != short_in [k])
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Finally, check the file hash. */
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_int ()
-	*/
-	zero_count = 0 ;
-
-	int_out = data_out.i ;
-	int_in = data_in.i ;
-	for (k = 0 ; k < items ; k++)
-	{	int_out [k] = ((k * ((k % 2) ? 3333 : -3333)) << 8) ;
-		zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (int_in, 0, items * sizeof (int)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (int_out [k] != int_in [k])
-		{	printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Lite remove start */
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_float ()
-	*/
-	zero_count = 0 ;
-
-	float_out = data_out.f ;
-	float_in = data_in.f ;
-	for (k = 0 ; k < items ; k++)
-	{	float_out [k] = (k * ((k % 2) ? 3333 : -3333)) ;
-		zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_in, 0, items * sizeof (float)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (float_out [k] - float_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_double ()
-	*/
-	zero_count = 0 ;
-
-	double_out = data_out.d ;
-	double_in = data_in.d ;
-	for (k = 0 ; k < items ; k++)
-	{	double_out [k] = (k * ((k % 2) ? 3333 : -3333)) ;
-		zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_in, 0, items * sizeof (double)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (double_out [k] - double_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-	/* Lite remove end */
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* pcm_test_bits_24 */
-
-static void
-pcm_test_bits_32 (const char *filename, int filetype, uint64_t hash)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, items, zero_count ;
-	short		*short_out, *short_in ;
-	int			*int_out, *int_in ;
-	/* Lite remove start */
-	float		*float_out, *float_in ;
-	double		*double_out, *double_in ;
-	/* Lite remove end */
-
-	print_test_name ("pcm_test_bits_32", filename) ;
-
-	items = 1024 ;
-
-	short_out = data_out.s ;
-	short_in = data_in.s ;
-
-	zero_count = 0 ;
-	for (k = 0 ; k < items ; k++)
-	{	short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-		zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (short_in, 0, items * sizeof (short)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (short_out [k] != short_in [k])
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Finally, check the file hash. */
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_int ()
-	*/
-	zero_count = 0 ;
-
-	int_out = data_out.i ;
-	int_in = data_in.i ;
-	for (k = 0 ; k < items ; k++)
-	{	int_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-		zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (int_in, 0, items * sizeof (int)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (int_out [k] != int_in [k])
-		{	printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Lite remove start */
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_float ()
-	*/
-	zero_count = 0 ;
-
-	float_out = data_out.f ;
-	float_in = data_in.f ;
-	for (k = 0 ; k < items ; k++)
-	{	float_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-		zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_in, 0, items * sizeof (float)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (float_out [k] - float_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_double ()
-	*/
-	zero_count = 0 ;
-
-	double_out = data_out.d ;
-	double_in = data_in.d ;
-	for (k = 0 ; k < items ; k++)
-	{	double_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-		zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_in, 0, items * sizeof (double)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (double_out [k] - double_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-	/* Lite remove end */
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* pcm_test_bits_32 */
-
-
-
-/*==============================================================================
-*/
-
-static void
-pcm_test_float (const char *filename, int filetype, uint64_t hash, int replace_float)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, items, frames ;
-	int				sign ;
-	double			*data, error ;
-
-	print_test_name (replace_float ?  "pcm_test_float (replace)" : "pcm_test_float", filename) ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = 1, k = 0 ; k < items ; k++)
-	{	data [k] = ((double) (k * sign)) / 100.0 ;
-		sign = (sign > 0) ? -1 : 1 ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Now test Stereo. */
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-	{	printf ("ok\n") ;
-		return ;
-		} ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-		data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= filetype ;
-
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	sf_close (file) ;
-
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != frames)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, frames, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 40, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* pcm_test_float */
-
-static void
-pcm_test_double (const char *filename, int	filetype, uint64_t hash, int replace_float)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, items, frames ;
-	int				sign ;
-	double			*data, error ;
-
-	/* This is the best test routine. Other should be brought up to this standard. */
-
-	print_test_name (replace_float ?  "pcm_test_double (replace)" : "pcm_test_double", filename) ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = 1, k = 0 ; k < items ; k++)
-	{	data [k] = ((double) (k * sign)) / 100.0 ;
-		sign = (sign > 0) ? -1 : 1 ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-	sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-	/* File hashing on Win32 fails due to slighty different
-	** calculated values of the sin() function.
-	*/
-	hash = hash ; /* Avoid compiler warning. */
-#else
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, 14, sfinfo.channels, __LINE__) ;
-
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Now test Stereo. */
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-	{	printf ("ok\n") ;
-		return ;
-		} ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-		data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= filetype ;
-
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-	/* File hashing on Win32 fails due to slighty different
-	** calculated values.
-	*/
-	hash = hash ; /* Avoid compiler warning. */
-#else
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != frames)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, frames, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 40, 4, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames -10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* pcm_test_double */
-
-/*==============================================================================
-*/
diff --git a/libs/libsndfile/tests/pcm_test.def b/libs/libsndfile/tests/pcm_test.def
deleted file mode 100644
index b81f05943b..0000000000
--- a/libs/libsndfile/tests/pcm_test.def
+++ /dev/null
@@ -1,34 +0,0 @@
-autogen definitions pcm_test.tpl;
-
-data_type = {
-	name		= "bits_8" ;
-	item_count	= 127 ;
-	short_func	= "((k * ((k % 2) ? 1 : -1)) << 8)" ;
-	int_func	= "((k * ((k % 2) ? 1 : -1)) << 24)" ;
-	float_func	= "(k * ((k % 2) ? 1 : -1))" ;
-	} ;
-
-data_type = {
-	name		= "bits_16" ;
-	item_count	= 1024 ;
-	short_func	= "(k * ((k % 2) ? 3 : -3))" ;
-	int_func	= "((k * ((k % 2) ? 3 : -3)) << 16)" ;
-	float_func	= "(k * ((k % 2) ? 3 : -3))" ;
-	} ;
-
-data_type = {
-	name		= "bits_24" ;
-	item_count	= 1024 ;
-	short_func	= "(k * ((k % 2) ? 3 : -3))" ;
-	int_func	= "((k * ((k % 2) ? 3333 : -3333)) << 8)" ;
-	float_func	= "(k * ((k % 2) ? 3333 : -3333))" ;
-	} ;
-
-data_type = {
-	name		= "bits_32" ;
-	item_count	= 1024 ;
-	short_func	= "(k * ((k % 2) ? 3 : -3))" ;
-	int_func	= "(k * ((k % 2) ? 333333 : -333333))" ;
-	float_func	= "(k * ((k % 2) ? 333333 : -333333))" ;
-	} ;
-
diff --git a/libs/libsndfile/tests/pcm_test.tpl b/libs/libsndfile/tests/pcm_test.tpl
deleted file mode 100644
index 459e741d0a..0000000000
--- a/libs/libsndfile/tests/pcm_test.tpl
+++ /dev/null
@@ -1,931 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(1 << 12)
-
-static void	lrintf_test (void) ;
-
-[+ FOR data_type
-+]static void	pcm_test_[+ (get "name") +]	(const char *filename, int filetype, uint64_t hash) ;
-[+ ENDFOR data_type
-+]
-static void pcm_test_float	(const char *filename, int filetype, uint64_t hash, int replace_float) ;
-static void pcm_test_double	(const char *filename, int filetype, uint64_t hash, int replace_float) ;
-
-typedef union
-{	double	d [BUFFER_SIZE + 1] ;
-	float	f [BUFFER_SIZE + 1] ;
-	int		i [BUFFER_SIZE + 1] ;
-	short	s [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-/* Data written to the file. */
-static	BUFFER	data_out ;
-
-/* Data read back from the file. */
-static	BUFFER	data_in ;
-
-int
-main (void)
-{
-	lrintf_test () ;
-
-	pcm_test_bits_8	("pcm-s8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_S8, 0x1cda335091249dbfLL) ;
-	pcm_test_bits_8	("pcm-u8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_U8, 0x7f748c433d695f3fLL) ;
-
-	pcm_test_bits_16 ("le-pcm16.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0x3a2b956c881ebf08LL) ;
-	pcm_test_bits_16 ("be-pcm16.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0xd9e2f840c55750f8LL) ;
-
-	pcm_test_bits_24 ("le-pcm24.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0x933b6a759ab496f8LL) ;
-	pcm_test_bits_24 ("be-pcm24.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0xbb1f3eaf9c30b6f8LL) ;
-
-	pcm_test_bits_32 ("le-pcm32.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0xa77aece1c1c17f08LL) ;
-	pcm_test_bits_32 ("be-pcm32.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0x3099ddf142d0b0f8LL) ;
-
-	/* Lite remove start */
-	pcm_test_float	("le-float.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_FALSE) ;
-	pcm_test_float	("be-float.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_FALSE) ;
-
-	pcm_test_double	("le-double.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_FALSE) ;
-	pcm_test_double	("be-double.raw", SF_ENDIAN_BIG	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_FALSE) ;
-
-	pcm_test_float	("le-float.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_TRUE) ;
-	pcm_test_float	("be-float.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_TRUE) ;
-
-	pcm_test_double	("le-double.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_TRUE) ;
-	pcm_test_double	("be-double.raw", SF_ENDIAN_BIG	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_TRUE) ;
-	/* Lite remove end */
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-lrintf_test (void)
-{	int k, items ;
-	float	*float_data ;
-	int		*int_data ;
-
-	print_test_name ("lrintf_test", "") ;
-
-	items = 1024 ;
-
-	float_data = data_out.f ;
-	int_data = data_in.i ;
-
-	for (k = 0 ; k < items ; k++)
-		float_data [k] = (k * ((k % 2) ? 333333.0 : -333333.0)) ;
-
-	for (k = 0 ; k < items ; k++)
-		int_data [k] = lrintf (float_data [k]) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (int_data [k] - float_data [k]) > 1.0)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %d).\n", __LINE__, k, float_data [k], int_data [k]) ;
-			exit (1) ;
-			} ;
-
-	printf ("ok\n") ;
-} /* lrintf_test */
-
-[+ FOR data_type
-+]static void
-pcm_test_[+ (get "name") +] (const char *filename, int filetype, uint64_t hash)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, items, zero_count ;
-	short		*short_out, *short_in ;
-	int			*int_out, *int_in ;
-	/* Lite remove start */
-	float		*float_out, *float_in ;
-	double		*double_out, *double_in ;
-	/* Lite remove end */
-
-	print_test_name ("pcm_test_[+ (get "name") +]", filename) ;
-
-	items = [+ (get "item_count") +] ;
-
-	short_out = data_out.s ;
-	short_in = data_in.s ;
-
-	zero_count = 0 ;
-	for (k = 0 ; k < items ; k++)
-	{	short_out [k] = [+ (get "short_func") +] ;
-		zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (short_in, 0, items * sizeof (short)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (short_out [k] != short_in [k])
-		{	printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Finally, check the file hash. */
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_int ()
-	*/
-	zero_count = 0 ;
-
-	int_out = data_out.i ;
-	int_in = data_in.i ;
-	for (k = 0 ; k < items ; k++)
-	{	int_out [k] = [+ (get "int_func") +] ;
-		zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (int_in, 0, items * sizeof (int)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (int_out [k] != int_in [k])
-		{	printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Lite remove start */
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_float ()
-	*/
-	zero_count = 0 ;
-
-	float_out = data_out.f ;
-	float_in = data_in.f ;
-	for (k = 0 ; k < items ; k++)
-	{	float_out [k] = [+ (get "float_func") +] ;
-		zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (float_in, 0, items * sizeof (float)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-	test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (float_out [k] - float_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/*--------------------------------------------------------------------------
-	** Test sf_read/write_double ()
-	*/
-	zero_count = 0 ;
-
-	double_out = data_out.d ;
-	double_in = data_in.d ;
-	for (k = 0 ; k < items ; k++)
-	{	double_out [k] = [+ (get "float_func") +] ;
-		zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-		} ;
-
-	if (zero_count > items / 4)
-	{	printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-		exit (1) ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	memset (double_in, 0, items * sizeof (double)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-	test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-	for (k = 0 ; k < items ; k++)
-		if (fabs (double_out [k] - double_in [k]) > 1e-10)
-		{	printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-	/* Lite remove end */
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* pcm_test_[+ (get "name") +] */
-
-[+ ENDFOR data_type
-+]
-
-/*==============================================================================
-*/
-
-static void
-pcm_test_float (const char *filename, int filetype, uint64_t hash, int replace_float)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, items, frames ;
-	int				sign ;
-	double			*data, error ;
-
-	print_test_name (replace_float ? "pcm_test_float (replace)" : "pcm_test_float", filename) ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = 1, k = 0 ; k < items ; k++)
-	{	data [k] = ((double) (k * sign)) / 100.0 ;
-		sign = (sign > 0) ? -1 : 1 ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-	sf_close (file) ;
-
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to end of file. */
-	test_seek_or_die (file, 0, SEEK_END, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Now test Stereo. */
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-	{	printf ("ok\n") ;
-		return ;
-		} ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-		data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= filetype ;
-
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	sf_close (file) ;
-
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != frames)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, frames, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 40, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* pcm_test_float */
-
-static void
-pcm_test_double (const char *filename, int	filetype, uint64_t hash, int replace_float)
-{	SNDFILE			*file ;
-	SF_INFO			sfinfo ;
-	int				k, items, frames ;
-	int				sign ;
-	double			*data, error ;
-
-	/* This is the best test routine. Other should be brought up to this standard. */
-
-	print_test_name (replace_float ? "pcm_test_double (replace)" : "pcm_test_double", filename) ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = 1, k = 0 ; k < items ; k++)
-	{	data [k] = ((double) (k * sign)) / 100.0 ;
-		sign = (sign > 0) ? -1 : 1 ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-	sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-	/* File hashing on Win32 fails due to slighty different
-	** calculated values of the sin() function.
-	*/
-	hash = hash ; /* Avoid compiler warning. */
-#else
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != items)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, items, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, 14, sfinfo.channels, __LINE__) ;
-
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Now test Stereo. */
-
-	if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-	{	printf ("ok\n") ;
-		return ;
-		} ;
-
-	items = BUFFER_SIZE ;
-
-	data = data_out.d ;
-	for (sign = -1, k = 0 ; k < items ; k++)
-		data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= items ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= filetype ;
-
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-	/* File hashing on Win32 fails due to slighty different
-	** calculated values.
-	*/
-	hash = hash ; /* Avoid compiler warning. */
-#else
-	check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-	memset (data, 0, items * sizeof (double)) ;
-
-	if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-	if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-	{	printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != frames)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, frames, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-
-	for (sign = -1, k = 0 ; k < items ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 40, 4, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames -10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-		{	printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	sf_close (file) ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* pcm_test_double */
-
-/*==============================================================================
-*/
diff --git a/libs/libsndfile/tests/peak_chunk_test.c b/libs/libsndfile/tests/peak_chunk_test.c
deleted file mode 100644
index 9e5332a1e4..0000000000
--- a/libs/libsndfile/tests/peak_chunk_test.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1 << 15)
-#define LOG_BUFFER_SIZE	1024
-
-
-static	void	test_float_peak	(const char *filename, int filetype) ;
-static	void	read_write_peak_test	(const char *filename, int filetype) ;
-
-static void		check_logged_peaks (char *buffer) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static	double	data [BUFFER_LEN] ;
-static	char	log_buffer [LOG_BUFFER_SIZE] ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           aiff - test AIFF file PEAK chunk\n") ;
-		printf ("           caf  - test CAF file PEAK chunk\n") ;
-		printf ("           wav  - test WAV file peak chunk\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	test_float_peak ("peak_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-		test_float_peak ("peak_float.wavex", SF_FORMAT_WAVEX | SF_FORMAT_FLOAT) ;
-		test_float_peak ("peak_float.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-		read_write_peak_test ("rw_peak.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-		read_write_peak_test ("rw_peak.wavex", SF_FORMAT_WAVEX | SF_FORMAT_FLOAT) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	test_float_peak	("peak_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-		read_write_peak_test ("rw_peak.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	test_float_peak	("peak_float.caf", SF_FORMAT_CAF | SF_FORMAT_FLOAT) ;
-
-		read_write_peak_test ("rw_peak.caf", SF_FORMAT_CAF | SF_FORMAT_FLOAT) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-test_float_peak (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, frames, count ;
-
-	print_test_name ("test_float_peak", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= filetype ;
-	sfinfo.channels		= 4 ;
-	sfinfo.frames		= 0 ;
-
-	frames = BUFFER_LEN / sfinfo.channels ;
-
-	/* Create some random data with a peak value of 0.66. */
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data [k] = (rand () % 2000) / 3000.0 ;
-
-	/* Insert some larger peaks a know locations. */
-	data [4 * (frames / 8) + 0] = (frames / 8) * 0.01 ;	/* First channel */
-	data [4 * (frames / 6) + 1] = (frames / 6) * 0.01 ;	/* Second channel */
-	data [4 * (frames / 4) + 2] = (frames / 4) * 0.01 ;	/* Third channel */
-	data [4 * (frames / 2) + 3] = (frames / 2) * 0.01 ;	/* Fourth channel */
-
-	/* Write a file with PEAK chunks. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-
-	/* Try to confuse the header writer by adding a removing the PEAK chunk. */
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-	/*	Write the data in four passed. The data is designed so that peaks will
-	**	be written in the different calls to sf_write_double ().
-	*/
-	for (count = 0 ; count < 4 ; count ++)
-		test_write_double_or_die (file, 0, data + count * BUFFER_LEN / 4, BUFFER_LEN / 4, BUFFER_LEN / 4) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-
-	if (sfinfo.format != filetype)
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != frames)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, frames, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 4)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Check these two commands. */
-	if (sf_command (file, SFC_GET_SIGNAL_MAX, data, sizeof (double)) == SF_FALSE)
-	{	printf ("\n\nLine %d: Command should have returned SF_TRUE.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (fabs (data [0] - (frames / 2) * 0.01) > 0.01)
-	{	printf ("\n\nLine %d: Bad peak value (%f should be %f) for command SFC_GET_SIGNAL_MAX.\n", __LINE__, data [0], (frames / 2) * 0.01) ;
-		exit (1) ;
-		} ;
-
-	if (sf_command (file, SFC_GET_MAX_ALL_CHANNELS, data, sizeof (double) * sfinfo.channels) == SF_FALSE)
-	{	printf ("\n\nLine %d: Command should have returned SF_TRUE.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (fabs (data [3] - (frames / 2) * 0.01) > 0.01)
-	{	printf ("\n\nLine %d: Bad peak value (%f should be %f) for command SFC_GET_MAX_ALL_CHANNELS.\n", __LINE__, data [0], (frames / 2) * 0.01) ;
-		exit (1) ;
-		} ;
-
-	/* Get the log buffer data. */
-	log_buffer [0] = 0 ;
-	sf_command	(file, SFC_GET_LOG_INFO, log_buffer, LOG_BUFFER_SIZE) ;
-
-	if (strlen (log_buffer) == 0)
-	{	printf ("\n\nLine %d: Empty log buffer,\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_logged_peaks (log_buffer) ;
-
-	sf_close (file) ;
-
-	/* Write a file ***without*** PEAK chunks. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-
-	/* Try to confuse the header writer by adding a removing the PEAK chunk. */
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-	/*	Write the data in four passed. The data is designed so that peaks will
-	**	be written in the different calls to sf_write_double ().
-	*/
-	for (count = 0 ; count < 4 ; count ++)
-		test_write_double_or_die (file, 0, data + count * BUFFER_LEN / 4, BUFFER_LEN / 4, BUFFER_LEN / 4) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-
-	/* Check these two commands. */
-	if (sf_command (file, SFC_GET_SIGNAL_MAX, data, sizeof (double)))
-	{	printf ("\n\nLine %d: Command should have returned SF_FALSE.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (sf_command (file, SFC_GET_MAX_ALL_CHANNELS, data, sizeof (double) * sfinfo.channels))
-	{	printf ("\n\nLine %d: Command should have returned SF_FALSE.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	/* Get the log buffer data. */
-	log_buffer [0] = 0 ;
-	sf_command	(file, SFC_GET_LOG_INFO, log_buffer, LOG_BUFFER_SIZE) ;
-
-	if (strlen (log_buffer) == 0)
-	{	printf ("\n\nLine %d: Empty log buffer,\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (strstr (log_buffer, "PEAK :") != NULL)
-	{	printf ("\n\nLine %d: Should not have a PEAK chunk in this file.\n\n", __LINE__) ;
-		puts (log_buffer) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	printf ("ok\n") ;
-} /* test_float_peak */
-
-static void
-check_logged_peaks (char *buffer)
-{	char 	*cptr ;
-	int		k, chan, channel_count, position ;
-	float	value ;
-
-	if (strstr (buffer, "should") || strstr (buffer, "*"))
-	{	printf ("\n\nLine %d: Something wrong in buffer. Dumping.\n", __LINE__) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	channel_count = 0 ;
-	cptr = strstr (buffer, "Channels") ;
-	if (cptr && sscanf (cptr, "Channels      : %d", &k) == 1)
-		channel_count = k ;
-	else if (cptr && sscanf (cptr, "Channels / frame : %d", &k) == 1)
-		channel_count = k ;
-	else
-	{	printf ("\n\nLine %d: Couldn't find channel count.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (channel_count != 4)
-	{	printf ("\n\nLine %d: Wrong channel count (4 ->%d).\n", __LINE__, channel_count) ;
-		exit (1) ;
-		} ;
-
-	if (! (cptr = strstr (buffer, "Ch   Position       Value")))
-	{	printf ("\n\nLine %d: Can't find PEAK data.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < channel_count ; k++)
-	{	if (! (cptr = strchr (cptr, '\n')))
-		{	printf ("\n\nLine %d: Got lost.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-		if (sscanf (cptr, "%d %d %f", &chan, &position, &value) != 3)
-		{	printf ("\n\nLine %d: sscanf failed.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-		if (position == 0)
-		{	printf ("\n\nLine %d: peak position for channel %d should not be at offset 0.\n", __LINE__, chan) ;
-			printf ("%s", buffer) ;
-			exit (1) ;
-			} ;
-		if (chan != k || fabs ((position) * 0.01 - value) > 1e-6)
-		{	printf ("\n\nLine %d: Error : peak value incorrect!\n", __LINE__) ;
-			printf ("%s", buffer) ;
-			printf ("\n\nLine %d: %d %f %f\n", __LINE__, chan, position * 0.01, value) ;
-			exit (1) ;
-			} ;
-		cptr ++ ; /* Move past current newline. */
-		} ;
-
-} /* check_logged_peaks */
-
-static	void
-read_write_peak_test (const char *filename, int filetype)
-{	SNDFILE	*file ;
-	SF_INFO	sfinfo ;
-
-	double	small_data [10], max_peak = 0.0 ;
-	unsigned k ;
-
-	print_test_name (__func__, filename) ;
-
-	for (k = 0 ; k < ARRAY_LEN (small_data) ; k ++)
-		small_data [k] = 0.1 ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= filetype ;
-	sfinfo.frames		= 0 ;
-
-	/* Open the file, add peak chunk and write samples with value 0.1. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-	test_write_double_or_die (file, 0, small_data, ARRAY_LEN (small_data), __LINE__) ;
-
-	sf_close (file) ;
-
-	/* Open the fiel RDWR, write sample valied 1.25. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-
-	for (k = 0 ; k < ARRAY_LEN (small_data) ; k ++)
-		small_data [k] = 1.0 ;
-
-	test_write_double_or_die (file, 0, small_data, ARRAY_LEN (small_data), __LINE__) ;
-
-	sf_command (file, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (max_peak)) ;
-
-	sf_close (file) ;
-
-	exit_if_true (max_peak < 0.1, "\n\nLine %d : max peak (%5.3f) should not be 0.1.\n\n", __LINE__, max_peak) ;
-
-	/* Open the file and test the values written to the PEAK chunk. */
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	exit_if_true (sfinfo.channels * sfinfo.frames != 2 * ARRAY_LEN (small_data),
-			"Line %d : frame count is %" PRId64 ", should be %zd\n", __LINE__, sfinfo.frames, 2 * ARRAY_LEN (small_data)) ;
-
-	sf_command (file, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (double)) ;
-
-	sf_close (file) ;
-
-	exit_if_true (max_peak < 1.0, "\n\nLine %d : max peak (%5.3f) should be 1.0.\n\n", __LINE__, max_peak) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* read_write_peak_test */
-
diff --git a/libs/libsndfile/tests/pedantic-header-test.sh.in b/libs/libsndfile/tests/pedantic-header-test.sh.in
deleted file mode 100644
index 8b1962803a..0000000000
--- a/libs/libsndfile/tests/pedantic-header-test.sh.in
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2010-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-if test ! -f @top_srcdir@/tests/sfversion.c ; then
-	exit 0
-	fi
-
-echo -n "    Pedantic header test           : "
-
-# Only do this if the compiler is GCC.
-if test -n "@GCC_MAJOR_VERSION@" ; then
-
-	CC=`echo "@CC@" | sed "s/.*shave cc //"`
-	# Compile with -Werror and -pedantic.
-	$CC -std=c99 -Werror -pedantic -I@top_builddir@/src -c @top_srcdir@/tests/sfversion.c -o /dev/null
-
-	# Check compiler return status.
-	if test $? -ne 0 ; then
-		echo
-		exit 1
-		fi
-
-	echo "ok"
-else
-	echo "n/a"
-	fi
-
-exit 0
diff --git a/libs/libsndfile/tests/pipe_test.c b/libs/libsndfile/tests/pipe_test.c
deleted file mode 100644
index 10fa5725c9..0000000000
--- a/libs/libsndfile/tests/pipe_test.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from and writing to pipes.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if (OS_IS_WIN32 || HAVE_PIPE == 0 || HAVE_WAITPID == 0)
-
-int
-main (void)
-{
-	puts ("    pipe_test  : this test doesn't work on this OS.") ;
-	return 0 ;
-} /* main */
-
-#else
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-typedef struct
-{	int			format ;
-	const char	*ext ;
-} FILETYPE ;
-
-static int		file_exists (const char *filename) ;
-static void		useek_pipe_rw_test (int filetype, const char *ext) ;
-static void		pipe_read_test (int filetype, const char *ext) ;
-static void		pipe_write_test (const char *ext) ;
-static void		pipe_test_others (FILETYPE*, FILETYPE*) ;
-
-static FILETYPE read_write_types [] =
-{	{	SF_FORMAT_RAW	, "raw"		},
-	{	SF_FORMAT_AU	, "au"		},
-	/* Lite remove start */
-	{	SF_FORMAT_PAF	, "paf"		},
-	{	SF_FORMAT_IRCAM	, "ircam"	},
-	{	SF_FORMAT_PVF	, "pvf"	},
-	/* Lite remove end */
-	{	0				, NULL		}
-} ;
-
-static FILETYPE read_only_types [] =
-{	{	SF_FORMAT_RAW	, "raw"		},
-	{	SF_FORMAT_AU	, "au"		},
-	{	SF_FORMAT_AIFF	, "aiff"	},
-	{	SF_FORMAT_WAV	, "wav"		},
-	{	SF_FORMAT_W64	, "w64"		},
-	/* Lite remove start */
-	{	SF_FORMAT_PAF	, "paf"		},
-	{	SF_FORMAT_NIST	, "nist"	},
-	{	SF_FORMAT_IRCAM	, "ircam"	},
-	{	SF_FORMAT_MAT4	, "mat4"	},
-	{	SF_FORMAT_MAT5	, "mat5"	},
-	{	SF_FORMAT_SVX	, "svx"		},
-	{	SF_FORMAT_PVF	, "pvf"		},
-	/* Lite remove end */
-	{	0				, NULL		}
-} ;
-
-int
-main (void)
-{	int k ;
-
-	if (file_exists ("libsndfile.spec.in"))
-		exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-	for (k = 0 ; read_only_types [k].format ; k++)
-		pipe_read_test (read_only_types [k].format, read_only_types [k].ext) ;
-
-	for (k = 0 ; read_write_types [k].format ; k++)
-		pipe_write_test (read_write_types [k].ext) ;
-
-	for (k = 0 ; read_write_types [k].format ; k++)
-		useek_pipe_rw_test (read_write_types [k].format, read_write_types [k].ext) ;
-
-	if (0)
-		pipe_test_others (read_write_types, read_only_types) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-pipe_read_test (int filetype, const char *ext)
-{	static short data [PIPE_TEST_LEN] ;
-	static char buffer [256] ;
-	static char filename [256] ;
-
-	SNDFILE	*outfile ;
-	SF_INFO sfinfo ;
-	int k, retval ;
-
-	snprintf (filename, sizeof (filename), "pipe_in.%s", ext) ;
-	print_test_name ("pipe_read_test", filename) ;
-
-	sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = 44100 ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-	sf_close (outfile) ;
-
-	snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s ", filename, ext) ;
-	if ((retval = system (buffer)) != 0)
-	{	retval = WEXITSTATUS (retval) ;
-		printf ("\n\n    Line %d : pipe test returned error for file type \"%s\".\n\n", __LINE__, ext) ;
-		exit (retval) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-
-	return ;
-} /* pipe_read_test */
-
-static void
-pipe_write_test (const char *ext)
-{	static char buffer [256] ;
-
-	int retval ;
-
-	print_test_name ("pipe_write_test", ext) ;
-
-	snprintf (buffer, sizeof (buffer), "./stdout_test %s | ./stdin_test %s ", ext, ext) ;
-	if ((retval = system (buffer)))
-	{	retval = WEXITSTATUS (retval) ;
-		printf ("\n\n     Line %d : pipe test returned error file type \"%s\".\n\n", __LINE__, ext) ;
-		exit (retval) ;
-		} ;
-
-	puts ("ok") ;
-
-	return ;
-} /* pipe_write_test */
-
-/*==============================================================================
-*/
-
-
-static void
-useek_pipe_rw_short (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{	static short buffer [PIPE_TEST_LEN] ;
-	static short data [PIPE_TEST_LEN] ;
-	SNDFILE *outfile ;
-	SNDFILE *infile_piped ;
-
-	int k, status = 0 ;
-	int pipefd [2] ;
-	pid_t pida ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	/*
-	** Create the pipe.
-	*/
-	exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-	/*
-	** Attach the write end of the pipe to be written to.
-	*/
-	if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-		printf ("\t%s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (outfile) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/*
-	** Attach the read end of the pipe to be read from.
-	*/
-	if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Fork a child process that will write directly into the pipe. */
-	if ((pida = fork ()) == 0) /* child process */
-	{	test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-		exit (0) ;
-		} ;
-
-	/* In the parent process, read from the pipe and compare what is read
-	** to what is written, if they match everything went as planned.
-	*/
-	test_readf_short_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-	if (memcmp (buffer, data, sizeof (buffer)) != 0)
-	{	printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Wait for the child process to return. */
-	waitpid (pida, &status, 0) ;
-	status = WEXITSTATUS (status) ;
-	sf_close (outfile) ;
-	sf_close (infile_piped) ;
-
-	if (status != 0)
-	{	printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* useek_pipe_rw_short */
-
-
-static void
-useek_pipe_rw_float (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{	static float buffer [PIPE_TEST_LEN] ;
-	static float data [PIPE_TEST_LEN] ;
-	SNDFILE *outfile ;
-	SNDFILE *infile_piped ;
-
-	int k, status = 0 ;
-	int pipefd [2] ;
-	pid_t pida ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	/*
-	** Create the pipe.
-	*/
-	exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-	/*
-	** Attach the write end of the pipe to be written to.
-	*/
-	if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-		printf ("\t%s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (outfile) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/*
-	** Attach the read end of the pipe to be read from.
-	*/
-	if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Fork a child process that will write directly into the pipe. */
-	if ((pida = fork ()) == 0) /* child process */
-	{	test_writef_float_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-		exit (0) ;
-		} ;
-
-	/* In the parent process, read from the pipe and compare what is read
-	** to what is written, if they match everything went as planned.
-	*/
-	test_readf_float_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-	if (memcmp (buffer, data, sizeof (buffer)) != 0)
-	{	printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Wait for the child process to return. */
-	waitpid (pida, &status, 0) ;
-	status = WEXITSTATUS (status) ;
-	sf_close (outfile) ;
-	sf_close (infile_piped) ;
-
-	if (status != 0)
-	{	printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* useek_pipe_rw_float */
-
-
-static void
-useek_pipe_rw_double (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{	static double buffer [PIPE_TEST_LEN] ;
-	static double data [PIPE_TEST_LEN] ;
-	SNDFILE *outfile ;
-	SNDFILE *infile_piped ;
-
-	int k, status = 0 ;
-	int pipefd [2] ;
-	pid_t pida ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	/*
-	** Create the pipe.
-	*/
-	exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-	/*
-	** Attach the write end of the pipe to be written to.
-	*/
-	if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-		printf ("\t%s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (outfile) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/*
-	** Attach the read end of the pipe to be read from.
-	*/
-	if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Fork a child process that will write directly into the pipe. */
-	if ((pida = fork ()) == 0) /* child process */
-	{	test_writef_double_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-		exit (0) ;
-		} ;
-
-	/* In the parent process, read from the pipe and compare what is read
-	** to what is written, if they match everything went as planned.
-	*/
-	test_readf_double_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-	if (memcmp (buffer, data, sizeof (buffer)) != 0)
-	{	printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Wait for the child process to return. */
-	waitpid (pida, &status, 0) ;
-	status = WEXITSTATUS (status) ;
-	sf_close (outfile) ;
-	sf_close (infile_piped) ;
-
-	if (status != 0)
-	{	printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* useek_pipe_rw_double */
-
-
-
-
-static void
-useek_pipe_rw_test (int filetype, const char *ext)
-{	SF_INFO sfinfo_write ;
-	SF_INFO sfinfo_read ;
-
-	print_test_name ("useek_pipe_rw_test", ext) ;
-
-	/*
-	** Setup the INFO structures for the filetype we will be
-	** working with.
-	*/
-	sfinfo_write.format = filetype | SF_FORMAT_PCM_16 ;
-	sfinfo_write.channels = 1 ;
-	sfinfo_write.samplerate = 44100 ;
-
-
-	sfinfo_read.format = 0 ;
-	if (filetype == SF_FORMAT_RAW)
-	{	sfinfo_read.format = filetype | SF_FORMAT_PCM_16 ;
-		sfinfo_read.channels = 1 ;
-		sfinfo_read.samplerate = 44100 ;
-		} ;
-
-	useek_pipe_rw_short (ext, &sfinfo_write, &sfinfo_read) ;
-
-	sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_FLOAT ;
-	if (sf_format_check (&sfinfo_read) != 0)
-		useek_pipe_rw_float (ext, &sfinfo_write, &sfinfo_read) ;
-
-	sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_DOUBLE ;
-	if (sf_format_check (&sfinfo_read) != 0)
-		useek_pipe_rw_double (ext, &sfinfo_write, &sfinfo_read) ;
-
-	puts ("ok") ;
-	return ;
-} /* useek_pipe_rw_test */
-
-
-
-static void
-pipe_test_others (FILETYPE* list1, FILETYPE* list2)
-{	SF_FORMAT_INFO	info ;
-	int		k, m, major_count, in_list ;
-
-	print_test_name ("pipe_test_others", "") ;
-
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-	for (k = 0 ; k < major_count ; k++)
-	{	info.format = k ;
-
-		sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-		in_list = SF_FALSE ;
-		for (m = 0 ; list1 [m].format ; m++)
-			if (info.format == list1 [m].format)
-				in_list = SF_TRUE ;
-
-		for (m = 0 ; list2 [m].format ; m++)
-			if (info.format == list2 [m].format)
-				in_list = SF_TRUE ;
-
-		if (in_list)
-			continue ;
-
-		printf ("%s  %x\n", info.name, info.format) ;
-
-		if (1)
-		{	static short data [PIPE_TEST_LEN] ;
-			static char buffer [256] ;
-			static const char *filename = "pipe_in.dat" ;
-
-			SNDFILE	*outfile ;
-			SF_INFO sfinfo ;
-			int retval ;
-
-			sfinfo.format = info.format | SF_FORMAT_PCM_16 ;
-			sfinfo.channels = 1 ;
-			sfinfo.samplerate = 44100 ;
-
-			outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-			test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-			sf_close (outfile) ;
-
-			snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s %d ", filename, info.extension, PIPE_TEST_LEN) ;
-			if ((retval = system (buffer)) == 0)
-			{	retval = WEXITSTATUS (retval) ;
-				printf ("\n\n     Line %d : pipe test should have returned error file type \"%s\" but didn't.\n\n", __LINE__, info.name) ;
-				exit (1) ;
-				} ;
-
-			unlink (filename) ;
-			} ;
-		} ;
-
-
-	puts ("ok") ;
-
-	return ;
-} /* pipe_test_others */
-
-
-/*==============================================================================
-*/
-
-static int
-file_exists (const char *filename)
-{	struct stat buf ;
-
-	if (stat (filename, &buf))
-		return 0 ;
-
-	return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/pipe_test.def b/libs/libsndfile/tests/pipe_test.def
deleted file mode 100644
index 6469cca1ec..0000000000
--- a/libs/libsndfile/tests/pipe_test.def
+++ /dev/null
@@ -1,14 +0,0 @@
-autogen definitions pipe_test.tpl;
-
-data_type = { 
-	type_name	= short ;
-	};
-
-data_type = { 
-	type_name	= float ;
-	};
-
-data_type = { 
-	type_name 	= double ;
-	};
-
diff --git a/libs/libsndfile/tests/pipe_test.tpl b/libs/libsndfile/tests/pipe_test.tpl
deleted file mode 100644
index 1bc1f4367e..0000000000
--- a/libs/libsndfile/tests/pipe_test.tpl
+++ /dev/null
@@ -1,374 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from and writing to pipes.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if (OS_IS_WIN32 || defined __OS2__ || HAVE_PIPE == 0 || HAVE_WAITPID == 0)
-
-int
-main (void)
-{
-	puts ("    pipe_test  : this test doesn't work on this OS.") ;
-	return 0 ;
-} /* main */
-
-#else
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-typedef struct
-{	int			format ;
-	const char	*ext ;
-} FILETYPE ;
-
-static int		file_exists (const char *filename) ;
-static void		useek_pipe_rw_test (int filetype, const char *ext) ;
-static void		pipe_read_test (int filetype, const char *ext) ;
-static void		pipe_write_test (const char *ext) ;
-static void		pipe_test_others (FILETYPE*, FILETYPE*) ;
-
-static FILETYPE read_write_types [] =
-{	{	SF_FORMAT_RAW	, "raw"		},
-	{	SF_FORMAT_AU	, "au"		},
-	/* Lite remove start */
-	{	SF_FORMAT_PAF	, "paf"		},
-	{	SF_FORMAT_IRCAM	, "ircam"	},
-	{	SF_FORMAT_PVF	, "pvf"	},
-	/* Lite remove end */
-	{	0				, NULL		}
-} ;
-
-static FILETYPE read_only_types [] =
-{	{	SF_FORMAT_RAW	, "raw"		},
-	{	SF_FORMAT_AU	, "au"		},
-	{	SF_FORMAT_AIFF	, "aiff"	},
-	{	SF_FORMAT_WAV	, "wav"		},
-	{	SF_FORMAT_W64	, "w64"		},
-	/* Lite remove start */
-	{	SF_FORMAT_PAF	, "paf"		},
-	{	SF_FORMAT_NIST	, "nist"	},
-	{	SF_FORMAT_IRCAM	, "ircam"	},
-	{	SF_FORMAT_MAT4	, "mat4"	},
-	{	SF_FORMAT_MAT5	, "mat5"	},
-	{	SF_FORMAT_SVX	, "svx"		},
-	{	SF_FORMAT_PVF	, "pvf"		},
-	/* Lite remove end */
-	{	0				, NULL		}
-} ;
-
-int
-main (void)
-{	int k ;
-
-	if (file_exists ("libsndfile.spec.in"))
-		exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-	for (k = 0 ; read_only_types [k].format ; k++)
-		pipe_read_test (read_only_types [k].format, read_only_types [k].ext) ;
-
-	for (k = 0 ; read_write_types [k].format ; k++)
-		pipe_write_test (read_write_types [k].ext) ;
-
-	for (k = 0 ; read_write_types [k].format ; k++)
-		useek_pipe_rw_test (read_write_types [k].format, read_write_types [k].ext) ;
-
-	if (0)
-		pipe_test_others (read_write_types, read_only_types) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-pipe_read_test (int filetype, const char *ext)
-{	static short data [PIPE_TEST_LEN] ;
-	static char buffer [256] ;
-	static char filename [256] ;
-
-	SNDFILE	*outfile ;
-	SF_INFO sfinfo ;
-	int k, retval ;
-
-	snprintf (filename, sizeof (filename), "pipe_in.%s", ext) ;
-	print_test_name ("pipe_read_test", filename) ;
-
-	sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = 44100 ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-	sf_close (outfile) ;
-
-	snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s ", filename, ext) ;
-	if ((retval = system (buffer)) != 0)
-	{	retval = WEXITSTATUS (retval) ;
-		printf ("\n\n    Line %d : pipe test returned error for file type \"%s\".\n\n", __LINE__, ext) ;
-		exit (retval) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-
-	return ;
-} /* pipe_read_test */
-
-static void
-pipe_write_test (const char *ext)
-{	static char buffer [256] ;
-
-	int retval ;
-
-	print_test_name ("pipe_write_test", ext) ;
-
-	snprintf (buffer, sizeof (buffer), "./stdout_test %s | ./stdin_test %s ", ext, ext) ;
-	if ((retval = system (buffer)))
-	{	retval = WEXITSTATUS (retval) ;
-		printf ("\n\n     Line %d : pipe test returned error file type \"%s\".\n\n", __LINE__, ext) ;
-		exit (retval) ;
-		} ;
-
-	puts ("ok") ;
-
-	return ;
-} /* pipe_write_test */
-
-/*==============================================================================
-*/
-
-[+ FOR data_type +]
-static void
-useek_pipe_rw_[+ (get "type_name") +] (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{	static [+ (get "type_name") +] buffer [PIPE_TEST_LEN] ;
-	static [+ (get "type_name") +] data [PIPE_TEST_LEN] ;
-	SNDFILE *outfile ;
-	SNDFILE *infile_piped ;
-
-	int k, status = 0 ;
-	int pipefd [2] ;
-	pid_t pida ;
-
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	/*
-	** Create the pipe.
-	*/
-	exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-	/*
-	** Attach the write end of the pipe to be written to.
-	*/
-	if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-		printf ("\t%s\n\n", sf_strerror (outfile)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (outfile) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/*
-	** Attach the read end of the pipe to be read from.
-	*/
-	if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-	{	printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-	{	printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Fork a child process that will write directly into the pipe. */
-	if ((pida = fork ()) == 0) /* child process */
-	{	test_writef_[+ (get "type_name") +]_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-		exit (0) ;
-		} ;
-
-	/* In the parent process, read from the pipe and compare what is read
-	** to what is written, if they match everything went as planned.
-	*/
-	test_readf_[+ (get "type_name") +]_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-	if (memcmp (buffer, data, sizeof (buffer)) != 0)
-	{	printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-		exit (1) ;
-		} ;
-
-	/* Wait for the child process to return. */
-	waitpid (pida, &status, 0) ;
-	status = WEXITSTATUS (status) ;
-	sf_close (outfile) ;
-	sf_close (infile_piped) ;
-
-	if (status != 0)
-	{	printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* useek_pipe_rw_[+ (get "type_name") +] */
-
-[+ ENDFOR data_type +]
-
-
-static void
-useek_pipe_rw_test (int filetype, const char *ext)
-{	SF_INFO sfinfo_write ;
-	SF_INFO sfinfo_read ;
-
-	print_test_name ("useek_pipe_rw_test", ext) ;
-
-	/*
-	** Setup the INFO structures for the filetype we will be
-	** working with.
-	*/
-	sfinfo_write.format = filetype | SF_FORMAT_PCM_16 ;
-	sfinfo_write.channels = 1 ;
-	sfinfo_write.samplerate = 44100 ;
-
-
-	sfinfo_read.format = 0 ;
-	if (filetype == SF_FORMAT_RAW)
-	{	sfinfo_read.format = filetype | SF_FORMAT_PCM_16 ;
-		sfinfo_read.channels = 1 ;
-		sfinfo_read.samplerate = 44100 ;
-		} ;
-
-	useek_pipe_rw_short (ext, &sfinfo_write, &sfinfo_read) ;
-
-	sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_FLOAT ;
-	if (sf_format_check (&sfinfo_read) != 0)
-		useek_pipe_rw_float (ext, &sfinfo_write, &sfinfo_read) ;
-
-	sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_DOUBLE ;
-	if (sf_format_check (&sfinfo_read) != 0)
-		useek_pipe_rw_double (ext, &sfinfo_write, &sfinfo_read) ;
-
-	puts ("ok") ;
-	return ;
-} /* useek_pipe_rw_test */
-
-
-
-static void
-pipe_test_others (FILETYPE* list1, FILETYPE* list2)
-{	SF_FORMAT_INFO	info ;
-	int		k, m, major_count, in_list ;
-
-	print_test_name ("pipe_test_others", "") ;
-
-	sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-	for (k = 0 ; k < major_count ; k++)
-	{	info.format = k ;
-
-		sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-		in_list = SF_FALSE ;
-		for (m = 0 ; list1 [m].format ; m++)
-			if (info.format == list1 [m].format)
-				in_list = SF_TRUE ;
-
-		for (m = 0 ; list2 [m].format ; m++)
-			if (info.format == list2 [m].format)
-				in_list = SF_TRUE ;
-
-		if (in_list)
-			continue ;
-
-		printf ("%s  %x\n", info.name, info.format) ;
-
-		if (1)
-		{	static short data [PIPE_TEST_LEN] ;
-			static char buffer [256] ;
-			static const char *filename = "pipe_in.dat" ;
-
-			SNDFILE	*outfile ;
-			SF_INFO sfinfo ;
-			int retval ;
-
-			sfinfo.format = info.format | SF_FORMAT_PCM_16 ;
-			sfinfo.channels = 1 ;
-			sfinfo.samplerate = 44100 ;
-
-			outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-			test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-			sf_close (outfile) ;
-
-			snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s %d ", filename, info.extension, PIPE_TEST_LEN) ;
-			if ((retval = system (buffer)) == 0)
-			{	retval = WEXITSTATUS (retval) ;
-				printf ("\n\n     Line %d : pipe test should have returned error file type \"%s\" but didn't.\n\n", __LINE__, info.name) ;
-				exit (1) ;
-				} ;
-
-			unlink (filename) ;
-			} ;
-		} ;
-
-
-	puts ("ok") ;
-
-	return ;
-} /* pipe_test_others */
-
-
-/*==============================================================================
-*/
-
-static int
-file_exists (const char *filename)
-{	struct stat buf ;
-
-	if (stat (filename, &buf))
-		return 0 ;
-
-	return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/raw_test.c b/libs/libsndfile/tests/raw_test.c
deleted file mode 100644
index 002f3ee4ab..0000000000
--- a/libs/libsndfile/tests/raw_test.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1 << 10)
-#define LOG_BUFFER_SIZE	1024
-
-static	void	raw_offset_test (const char *filename, int typeminor) ;
-static	void	bad_raw_test (void) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static	short	data [BUFFER_LEN] ;
-
-int
-main (void)
-{
-	raw_offset_test ("offset.raw", SF_FORMAT_PCM_16) ;
-	bad_raw_test () ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static void
-raw_offset_test (const char *filename, int typeminor)
-{	SNDFILE		*sndfile ;
-	SF_INFO		sfinfo ;
-	sf_count_t	start ;
-	int			k ;
-
-	print_test_name ("raw_offset_test", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= SF_FORMAT_RAW | typeminor ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	sndfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	start = 0 ;
-	sf_command (sndfile, SFC_FILE_TRUNCATE, &start, sizeof (start)) ;
-
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		data [k] = k ;
-	test_write_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-
-	sf_close (sndfile) ;
-
-	sndfile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	check_log_buffer_or_die (sndfile, __LINE__) ;
-
-	if (abs (BUFFER_LEN - sfinfo.frames) > 1)
-	{	printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, BUFFER_LEN) ;
-		dump_log_buffer (sndfile) ;
-		exit (1) ;
-		} ;
-
-	memset (data, 0 , sizeof (data)) ;
-	test_read_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (data [k] != k)
-			printf ("Error : line %d\n", __LINE__) ;
-
-	/* Set dataoffset to 2 bytes from beginning of file. */
-	start = 2 ;
-	sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-	/* Seek to new start */
-	test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	memset (data, 0 , sizeof (data)) ;
-	test_read_short_or_die (sndfile, 0, data, BUFFER_LEN - 1, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN - 1 ; k++)
-		if (data [k] != k + 1)
-		{	printf ("Error : line %d\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-	/* Set dataoffset to 4 bytes from beginning of file. */
-	start = 4 ;
-	sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-	/* Seek to new start */
-	test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	memset (data, 0 , sizeof (data)) ;
-	test_read_short_or_die (sndfile, 0, data, BUFFER_LEN - 2, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN - 2 ; k++)
-		if (data [k] != k + 2)
-		{	printf ("Error : line %d\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-	/* Set dataoffset back to 0 bytes from beginning of file. */
-	start = 0 ;
-	sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-	/* Seek to new start */
-	test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	memset (data, 0 , sizeof (data)) ;
-	test_read_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-	for (k = 0 ; k < BUFFER_LEN ; k++)
-		if (data [k] != k)
-		{	printf ("Error : line %d\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-	sf_close (sndfile) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* raw_offset_test */
-
-static void
-bad_raw_test (void)
-{	FILE		*textfile ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	const char	*errorstr, *filename = "bad.raw" ;
-
-	print_test_name ("bad_raw_test", filename) ;
-
-	if ((textfile = fopen (filename, "w")) == NULL)
-	{	printf ("\n\nLine %d : not able to open text file for write.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	fprintf (textfile, "This is not a valid file.\n") ;
-	fclose (textfile) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= SF_FORMAT_RAW | 0xABCD ;
-	sfinfo.channels		= 1 ;
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) != NULL)
-	{	printf ("\n\nLine %d : Error, file should not have opened.\n", __LINE__ - 1) ;
-		exit (1) ;
-		} ;
-
-	errorstr = sf_strerror (file) ;
-
-	if (strstr (errorstr, "Bad format field in SF_INFO struct") == NULL)
-	{	printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-		exit (1) ;
-		} ;
-
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* bad_raw_test */
-
diff --git a/libs/libsndfile/tests/rdwr_test.def b/libs/libsndfile/tests/rdwr_test.def
deleted file mode 100644
index 43c1089818..0000000000
--- a/libs/libsndfile/tests/rdwr_test.def
+++ /dev/null
@@ -1,32 +0,0 @@
-autogen definitions rdwr_test.tpl;
-
-data_type = {
-	name	= "short" ;
-	type	= "short" ;
-	format	= "SF_FORMAT_PCM_16" ;
-	} ;
-
-data_type = {
-	name	= "int" ;
-	type	= "int" ;
-	format	= "SF_FORMAT_PCM_32" ;
-	} ;
-
-data_type = {
-	name	= "float" ;
-	type	= "float" ;
-	format	= "SF_FORMAT_FLOAT" ;
-	} ;
-
-data_type = {
-	name	= "double" ;
-	type	= "double" ;
-	format	= "SF_FORMAT_DOUBLE" ;
-	} ;
-
-data_type = {
-	name	= "raw" ;
-	type	= "unsigned char" ;
-	format	= "SF_FORMAT_PCM_U8" ;
-	} ;
-
diff --git a/libs/libsndfile/tests/rdwr_test.tpl b/libs/libsndfile/tests/rdwr_test.tpl
deleted file mode 100644
index 8cfdd3687e..0000000000
--- a/libs/libsndfile/tests/rdwr_test.tpl
+++ /dev/null
@@ -1,105 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-[+ FOR data_type
-+]static void	rdwr_[+ (get "name") +]_test	(const char *filename) ;
-[+ ENDFOR data_type
-+]
-
-int
-main (void)
-{
-	rdwr_short_test ("rdwr_short.wav") ;
-	rdwr_int_test ("rdwr_int.wav") ;
-	rdwr_float_test ("rdwr_float.wav") ;
-	rdwr_double_test ("rdwr_double.wav") ;
-	rdwr_raw_test ("rdwr_raw.wav") ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-[+ FOR data_type
-+]static void
-rdwr_[+ (get "name") +]_test	(const char *filename)
-{	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	[+ (get "type") +] buffer [160] ;
-
-	print_test_name ("rdwr_[+ (get "name") +]_test", filename) ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Create sound file with no data. */
-	sfinfo.format = SF_FORMAT_WAV | [+ (get "format") +] ;
-	sfinfo.samplerate = 16000 ;
-	sfinfo.channels = 1 ;
-
-	unlink (filename) ;
-
-	frames = ARRAY_LEN (buffer) ;
-
-	/* Open again for read/write. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-	test_write_[+ (get "name") +]_or_die (file, 0, buffer, frames, __LINE__) ;
-
-	test_read_[+ (get "name") +]_or_die (file, 0, buffer, frames, __LINE__) ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* rdwr_[+ (get "name") +]_test */
-
-[+ ENDFOR data_type
-+]
-
diff --git a/libs/libsndfile/tests/scale_clip_test.c b/libs/libsndfile/tests/scale_clip_test.c
deleted file mode 100644
index 57b0b96073..0000000000
--- a/libs/libsndfile/tests/scale_clip_test.c
+++ /dev/null
@@ -1,1853 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef		M_PI
-#define		M_PI	3.14159265358979323846264338
-#endif
-
-#define	HALF_BUFFER_SIZE	(1 << 12)
-#define	BUFFER_SIZE			(2 * HALF_BUFFER_SIZE)
-
-#define	SINE_AMP		1.1
-#define	MAX_ERROR		0.0202
-
-
-static void	flt_scale_clip_test_16 (const char *filename, int filetype, float maxval) ;
-static void	flt_scale_clip_test_24 (const char *filename, int filetype, float maxval) ;
-static void	flt_scale_clip_test_32 (const char *filename, int filetype, float maxval) ;
-static void	flt_scale_clip_test_08 (const char *filename, int filetype, float maxval) ;
-
-static void	dbl_scale_clip_test_16 (const char *filename, int filetype, float maxval) ;
-static void	dbl_scale_clip_test_24 (const char *filename, int filetype, float maxval) ;
-static void	dbl_scale_clip_test_32 (const char *filename, int filetype, float maxval) ;
-static void	dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval) ;
-
-
-
-static void flt_short_clip_read_test (const char *filename, int filetype) ;
-static void flt_int_clip_read_test (const char *filename, int filetype) ;
-
-static void dbl_short_clip_read_test (const char *filename, int filetype) ;
-static void dbl_int_clip_read_test (const char *filename, int filetype) ;
-
-
-
-static void short_flt_scale_write_test (const char *filename, int filetype) ;
-static void short_dbl_scale_write_test (const char *filename, int filetype) ;
-
-static void int_flt_scale_write_test (const char *filename, int filetype) ;
-static void int_dbl_scale_write_test (const char *filename, int filetype) ;
-
-
-typedef union
-{	double	dbl [BUFFER_SIZE] ;
-	float	flt [BUFFER_SIZE] ;
-	int		i [BUFFER_SIZE] ;
-	short	s [BUFFER_SIZE] ;
-} BUFFER ;
-
-/* Data buffer. */
-static	BUFFER	buffer_out ;
-static	BUFFER	buffer_in ;
-
-int
-main (void)
-{
-	flt_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-	flt_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-	dbl_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-	dbl_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-	/*
-	**	Now use SF_FORMAT_AU where possible because it allows both
-	**	big and little endian files.
-	*/
-
-	flt_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	flt_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	flt_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	flt_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	flt_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-	flt_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-	dbl_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	dbl_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	dbl_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	dbl_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	dbl_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-	dbl_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-	flt_short_clip_read_test	("flt_short.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	flt_int_clip_read_test		("flt_int.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	dbl_short_clip_read_test	("dbl_short.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-	dbl_int_clip_read_test		("dbl_int.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-	short_flt_scale_write_test	("short_flt.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	int_flt_scale_write_test	("int_flt.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	short_dbl_scale_write_test	("short_dbl.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-	int_dbl_scale_write_test	("int_dbl.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-
-static void
-flt_scale_clip_test_16 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	float		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("flt_scale_clip_test_16", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x8000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* flt_scale_clip_test_16 */
-
-static void
-flt_scale_clip_test_24 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	float		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("flt_scale_clip_test_24", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x800000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* flt_scale_clip_test_24 */
-
-static void
-flt_scale_clip_test_32 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	float		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("flt_scale_clip_test_32", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x80000000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* flt_scale_clip_test_32 */
-
-static void
-flt_scale_clip_test_08 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	float		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("flt_scale_clip_test_08", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-	test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x80)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* flt_scale_clip_test_08 */
-
-
-
-static void
-dbl_scale_clip_test_16 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	double		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("dbl_scale_clip_test_16", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x8000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* dbl_scale_clip_test_16 */
-
-static void
-dbl_scale_clip_test_24 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	double		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("dbl_scale_clip_test_24", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x800000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* dbl_scale_clip_test_24 */
-
-static void
-dbl_scale_clip_test_32 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	double		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("dbl_scale_clip_test_32", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x80000000)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* dbl_scale_clip_test_32 */
-
-static void
-dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	double		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("dbl_scale_clip_test_08", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-	test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0 / 0x80)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* dbl_scale_clip_test_08 */
-
-
-
-
-/*==============================================================================
-*/
-
-
-static void flt_short_clip_read_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	float		*data_out ;
-	short			*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("flt_short_clip_read_test", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.s ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-	data_out [BUFFER_SIZE / 8] = 1.0 ;
-	data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-	data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-	data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/* Save unclipped data to the file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-	/*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
-	sf_close (file) ;
-
-	/* Check the first half. */
-	max_value = 0 ;
-	for (k = 0 ; k < sfinfo.frames ; k++)
-	{	/* Check if data_out has different sign from data_in. */
-		if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-			exit (1) ;
-			} ;
-		max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* flt_short_clip_read_test */
-static void flt_int_clip_read_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	float		*data_out ;
-	int			*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("flt_int_clip_read_test", filename) ;
-
-	data_out = buffer_out.flt ;
-	data_in = buffer_in.i ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-	data_out [BUFFER_SIZE / 8] = 1.0 ;
-	data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-	data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-	data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/* Save unclipped data to the file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-	/*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
-	sf_close (file) ;
-
-	/* Check the first half. */
-	max_value = 0 ;
-	for (k = 0 ; k < sfinfo.frames ; k++)
-	{	/* Check if data_out has different sign from data_in. */
-		if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-			exit (1) ;
-			} ;
-		max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* flt_int_clip_read_test */
-
-static void dbl_short_clip_read_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		*data_out ;
-	short			*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("dbl_short_clip_read_test", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.s ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-	data_out [BUFFER_SIZE / 8] = 1.0 ;
-	data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-	data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-	data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/* Save unclipped data to the file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-	/*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
-	sf_close (file) ;
-
-	/* Check the first half. */
-	max_value = 0 ;
-	for (k = 0 ; k < sfinfo.frames ; k++)
-	{	/* Check if data_out has different sign from data_in. */
-		if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-			exit (1) ;
-			} ;
-		max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* dbl_short_clip_read_test */
-static void dbl_int_clip_read_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		*data_out ;
-	int			*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("dbl_int_clip_read_test", filename) ;
-
-	data_out = buffer_out.dbl ;
-	data_in = buffer_in.i ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-	data_out [BUFFER_SIZE / 8] = 1.0 ;
-	data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-	data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-	data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/* Save unclipped data to the file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-	/*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
-	sf_close (file) ;
-
-	/* Check the first half. */
-	max_value = 0 ;
-	for (k = 0 ; k < sfinfo.frames ; k++)
-	{	/* Check if data_out has different sign from data_in. */
-		if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-			exit (1) ;
-			} ;
-		max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* dbl_int_clip_read_test */
-
-
-/*==============================================================================
-*/
-
-
-static void short_flt_scale_write_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*data_out ;
-	float	*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("short_flt_clip_write_test", filename) ;
-
-	data_out = buffer_out.s ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = lrintf (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != 3 * BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	/* Check the first section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the second section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value > 1.0)
-	{	printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the third section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* short_flt_scale_write_test */
-static void short_dbl_scale_write_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*data_out ;
-	double	*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("short_dbl_clip_write_test", filename) ;
-
-	data_out = buffer_out.s ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = lrint (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != 3 * BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	/* Check the first section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the second section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value > 1.0)
-	{	printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the third section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* short_dbl_scale_write_test */
-
-static void int_flt_scale_write_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*data_out ;
-	float	*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("int_flt_clip_write_test", filename) ;
-
-	data_out = buffer_out.i ;
-	data_in = buffer_in.flt ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = lrintf (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != 3 * BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	/* Check the first section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the second section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value > 1.0)
-	{	printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the third section. */
-	test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* int_flt_scale_write_test */
-static void int_dbl_scale_write_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*data_out ;
-	double	*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("int_dbl_clip_write_test", filename) ;
-
-	data_out = buffer_out.i ;
-	data_in = buffer_in.dbl ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = lrint (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-	test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != 3 * BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	/* Check the first section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the second section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value > 1.0)
-	{	printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the third section. */
-	test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* int_dbl_scale_write_test */
-
-
-
diff --git a/libs/libsndfile/tests/scale_clip_test.def b/libs/libsndfile/tests/scale_clip_test.def
deleted file mode 100644
index 345981912b..0000000000
--- a/libs/libsndfile/tests/scale_clip_test.def
+++ /dev/null
@@ -1,56 +0,0 @@
-autogen definitions scale_clip_test.tpl;
-
-float_type = {
-	float_type_name		= "float" ;
-	float_short_name	= "flt" ;
-	float_upper_name	= "FLOAT" ;
-	float_to_int		= "lrintf" ;
-	} ;
-
-float_type = {
-	float_type_name		= "double" ;
-	float_short_name	= "dbl" ;
-	float_upper_name	= "DOUBLE" ;
-	float_to_int		= "lrint" ;
-	} ;
-
-
-
-int_type = {
-	int_type_name	= "short" ;
-	int_short_name	= "s" ;
-	int_max_value	= 0x7FFFF ;
-	} ;
-
-int_type = {
-	int_type_name	= "int" ;
-	int_short_name	= "i" ;
-	int_max_value	= 0x7FFFFFFF ;
-	} ;
-
-
-
-data_type = {
-	name		= "16" ;
-	bit_count	= 16 ;
-	error_val	= "1.0 / 0x8000" ;
-	} ;
-
-data_type = {
-	name		= "24" ;
-	bit_count	= 24 ;
-	error_val	= "1.0 / 0x800000" ;
-	} ;
-
-data_type = {
-	name		= "32" ;
-	bit_count	= 32 ;
-	error_val	= "1.0 / 0x80000000" ;
-	} ;
-
-data_type = {
-	name		= "08" ;
-	bit_count	= 8 ;
-	error_val	= "1.0 / 0x80" ;
-	} ;
-
diff --git a/libs/libsndfile/tests/scale_clip_test.tpl b/libs/libsndfile/tests/scale_clip_test.tpl
deleted file mode 100644
index 39ddf57c1f..0000000000
--- a/libs/libsndfile/tests/scale_clip_test.tpl
+++ /dev/null
@@ -1,438 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef		M_PI
-#define		M_PI	3.14159265358979323846264338
-#endif
-
-#define	HALF_BUFFER_SIZE	(1 << 12)
-#define	BUFFER_SIZE			(2 * HALF_BUFFER_SIZE)
-
-#define	SINE_AMP		1.1
-#define	MAX_ERROR		0.0202
-
-[+ FOR float_type +]
-[+ FOR data_type
-+]static void	[+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] (const char *filename, int filetype, float maxval) ;
-[+ ENDFOR data_type
-+][+ ENDFOR float_type +]
-
-[+ FOR float_type +]
-[+ FOR int_type
-+]static void [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test (const char *filename, int filetype) ;
-[+ ENDFOR int_type
-+][+ ENDFOR float_type +]
-
-[+ FOR int_type +]
-[+ FOR float_type
-+]static void [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test (const char *filename, int filetype) ;
-[+ ENDFOR float_type
-+][+ ENDFOR int_type +]
-
-typedef union
-{	double	dbl [BUFFER_SIZE] ;
-	float	flt [BUFFER_SIZE] ;
-	int		i [BUFFER_SIZE] ;
-	short	s [BUFFER_SIZE] ;
-} BUFFER ;
-
-/* Data buffer. */
-static	BUFFER	buffer_out ;
-static	BUFFER	buffer_in ;
-
-int
-main (void)
-{
-	flt_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-	flt_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-	dbl_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-	dbl_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-	/*
-	**	Now use SF_FORMAT_AU where possible because it allows both
-	**	big and little endian files.
-	*/
-
-	flt_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	flt_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	flt_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	flt_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	flt_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-	flt_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-	dbl_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	dbl_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-	dbl_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	dbl_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-	dbl_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-	dbl_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-	flt_short_clip_read_test	("flt_short.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	flt_int_clip_read_test		("flt_int.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	dbl_short_clip_read_test	("dbl_short.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-	dbl_int_clip_read_test		("dbl_int.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-	short_flt_scale_write_test	("short_flt.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	int_flt_scale_write_test	("int_flt.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	short_dbl_scale_write_test	("short_dbl.au"	, SF_ENDIAN_BIG		| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-	int_dbl_scale_write_test	("int_dbl.au"	, SF_ENDIAN_LITTLE	| SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-[+ FOR float_type +]
-[+ FOR data_type
-+]static void
-[+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] (const char *filename, int filetype, float maxval)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k ;
-	[+ (get "float_type_name") +]		*data_out, *data_in ;
-	double		diff, clip_max_diff ;
-
-	print_test_name ("[+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +]", filename) ;
-
-	data_out = buffer_out.[+ (get "float_short_name") +] ;
-	data_in = buffer_in.[+ (get "float_short_name") +] ;
-
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-		data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-		} ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/*
-	**	Write two versions of the data:
-	**		normalized and clipped
-	**		un-normalized and clipped.
-	*/
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;
-	test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;
-	test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	/* Check normalized version. */
-	clip_max_diff = 0.0 ;
-	for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > 1.0)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > 1.0)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > [+ (get "error_val") +])
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	/* Check the un-normalized data. */
-	clip_max_diff = 0.0 ;
-	for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-	{	if (fabs (data_in [k]) > maxval)
-		{	printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-			exit (1) ;
-			} ;
-
-		if (data_out [k] * data_in [k] < 0.0)
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-			exit (1) ;
-			} ;
-
-		if (fabs (data_out [k]) > maxval)
-			continue ;
-
-		diff = fabs (data_out [k] - data_in [k]) ;
-		if (diff > clip_max_diff)
-			clip_max_diff = diff ;
-		} ;
-
-	if (clip_max_diff < 1e-20)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	if (clip_max_diff > 1.0)
-	{	printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-		exit (1) ;
-		} ;
-
-	printf ("ok\n") ;
-	unlink (filename) ;
-} /* [+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] */
-
-[+ ENDFOR data_type
-+]
-[+ ENDFOR float_type +]
-
-/*==============================================================================
-*/
-
-[+ FOR float_type +]
-[+ FOR int_type
-+]static void [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	[+ (get "float_type_name") +]		*data_out ;
-	[+ (get "int_type_name") +]			*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("[+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test", filename) ;
-
-	data_out = buffer_out.[+ (get "float_short_name") +] ;
-	data_in = buffer_in.[+ (get "int_short_name") +] ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-	data_out [BUFFER_SIZE / 8] = 1.0 ;
-	data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-	data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-	data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	/* Save unclipped data to the file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-	test_read_[+ (get "int_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-	/*-sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;-*/
-	sf_close (file) ;
-
-	/* Check the first half. */
-	max_value = 0 ;
-	for (k = 0 ; k < sfinfo.frames ; k++)
-	{	/* Check if data_out has different sign from data_in. */
-		if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-		{	printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-			exit (1) ;
-			} ;
-		max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test */
-[+ ENDFOR int_type
-+][+ ENDFOR float_type +]
-
-/*==============================================================================
-*/
-
-[+ FOR int_type +]
-[+ FOR float_type
-+]static void [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test (const char *filename, int filetype)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	[+ (get "int_type_name") +]		*data_out ;
-	[+ (get "float_type_name") +]	*data_in, max_value ;
-	int			k ;
-
-	print_test_name ("[+ (get "int_type_name") +]_[+ (get "float_short_name") +]_clip_write_test", filename) ;
-
-	data_out = buffer_out.[+ (get "int_short_name") +] ;
-	data_in = buffer_in.[+ (get "float_short_name") +] ;
-
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		data_out [k] = [+ (get "float_to_int") +] ([+ (get "int_max_value") +] * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= filetype ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-	test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-	test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-	sf_close (file) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-	if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-	{	printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames != 3 * BUFFER_SIZE)
-	{	printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, 3 * BUFFER_SIZE, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	/* Check the first section. */
-	test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the second section. */
-	test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value > 1.0)
-	{	printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	/* Check the third section. */
-	test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-	max_value = 0.0 ;
-	for (k = 0 ; k < BUFFER_SIZE ; k++)
-		max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-	if (max_value < 1000.0)
-	{	printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test */
-[+ ENDFOR float_type
-+][+ ENDFOR int_type +]
-
-
diff --git a/libs/libsndfile/tests/sftest.c b/libs/libsndfile/tests/sftest.c
deleted file mode 100644
index 78a9f7faaf..0000000000
--- a/libs/libsndfile/tests/sftest.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#define	BUFFER_SIZE		(1024)
-
-
-static short buffer [BUFFER_SIZE] ;
-
-int
-main (int argc, char *argv [])
-{	SNDFILE	*file ;
-	SF_INFO sfinfo ;
-	int		k, count, max = 0, total = 0 ;
-
-	if (argc < 2)
-	{	printf ("Expecting input file name.\n") ;
-		return 0 ;
-		} ;
-
-	if (! (file = sf_open (argv [1], SFM_READ, &sfinfo)))
-	{	printf ("sf_open_read failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	while ((count = sf_read_short (file, buffer, BUFFER_SIZE)))
-	{	for (k = 0 ; k < count ; k++)
-			if (abs (buffer [k]) > max)
-				max = abs (buffer [k]) ;
-		total += count ;
-		} ;
-
-	printf ("Total         : %d\n", total) ;
-	printf ("Maximun value : %d\n", max) ;
-
-	sf_close (file) ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/sfversion.c b/libs/libsndfile/tests/sfversion.c
deleted file mode 100644
index c464f08647..0000000000
--- a/libs/libsndfile/tests/sfversion.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sndfile.h>
-
-#define	BUFFER_SIZE	(256)
-
-
-int
-main (void)
-{	static char	strbuffer [BUFFER_SIZE] ;
-	const char * ver ;
-
-	sf_command (NULL, SFC_GET_LIB_VERSION, strbuffer, sizeof (strbuffer)) ;
-	ver = sf_version_string () ;
-
-	if (strcmp (ver, strbuffer) != 0)
-	{	printf ("Version mismatch : '%s' != '%s'\n\n", ver, strbuffer) ;
-		exit (1) ;
-		} ;
-
-	printf ("%s", strbuffer) ;
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/stdin_test.c b/libs/libsndfile/tests/stdin_test.c
deleted file mode 100644
index a893915cce..0000000000
--- a/libs/libsndfile/tests/stdin_test.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_LEN		(1 << 16)
-
-static	void	stdin_test	(int typemajor, int count) ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0, test_count = 0 ;
-
-	if (BUFFER_LEN < PIPE_TEST_LEN)
-	{	fprintf (stderr, "Error : BUFFER_LEN < PIPE_TEST_LEN.\n\n") ;
-		exit (1) ;
-		} ;
-
-	if (argc != 2)
-	{	fprintf (stderr, "This program cannot be run by itself. It needs\n") ;
-		fprintf (stderr, "to be run from the stdio_test program.\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "raw"))
-	{	stdin_test	(SF_FORMAT_RAW, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	stdin_test	(SF_FORMAT_WAV, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	stdin_test	(SF_FORMAT_AIFF, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	stdin_test	(SF_FORMAT_AU, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	stdin_test	(SF_FORMAT_PAF, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	stdin_test	(SF_FORMAT_SVX, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	stdin_test	(SF_FORMAT_NIST, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	stdin_test	(SF_FORMAT_IRCAM, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	stdin_test	(SF_FORMAT_VOC, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	stdin_test	(SF_FORMAT_W64, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	stdin_test	(SF_FORMAT_MAT4, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	stdin_test	(SF_FORMAT_MAT5, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	stdin_test	(SF_FORMAT_PVF, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	stdin_test	(SF_FORMAT_HTK, PIPE_TEST_LEN) ;
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	fprintf (stderr, "\n*****************************************\n") ;
-		fprintf (stderr, "*  stdin_test : No '%s' test defined.\n", argv [1]) ;
-		fprintf (stderr, "*****************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-static	void
-stdin_test	(int typemajor, int count)
-{	static	short	data [BUFFER_LEN] ;
-
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, total, err ;
-
-	if (typemajor == SF_FORMAT_RAW)
-	{	sfinfo.samplerate	= 44100 ;
-		sfinfo.format		= SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-		sfinfo.channels		= 1 ;
-		sfinfo.frames		= 0 ;
-		}
-	else
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	if ((file = sf_open_fd (STDIN_FILENO, SFM_READ, &sfinfo, SF_TRUE)) == NULL)
-	{	fprintf (stderr, "sf_open_fd failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		dump_log_buffer (NULL) ;
-		exit (1) ;
-		} ;
-
-	err = sf_error (file) ;
-	if (err != SF_ERR_NO_ERROR)
-	{	printf ("Line %d : unexpected error : %s\n", __LINE__, sf_error_number (err)) ;
-		exit (1) ;
-		} ;
-
-	if ((sfinfo.format & SF_FORMAT_TYPEMASK) != typemajor)
-	{	fprintf (stderr, "\n\nError : File type doesn't match.\n") ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.samplerate != 44100)
-	{	fprintf (stderr, "\n\nError : Sample rate (%d) should be 44100\n", sfinfo.samplerate) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	fprintf (stderr, "\n\nError : Channels (%d) should be 1\n", sfinfo.channels) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < count)
-	{	fprintf (stderr, "\n\nError : Sample count (%ld) should be %d\n", (long) sfinfo.frames, count) ;
-		exit (1) ;
-		} ;
-
-	total = 0 ;
-	while ((k = sf_read_short (file, data + total, BUFFER_LEN - total)) > 0)
-		total += k ;
-
-	if (total != count)
-	{	fprintf (stderr, "\n\nError : Expected %d frames, read %d.\n", count, total) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < total ; k++)
-		if (data [k] != PIPE_INDEX (k))
-		{	printf ("\n\nError : data [%d] == %d, should have been %d.\n\n", k, data [k], k) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	return ;
-} /* stdin_test */
-
diff --git a/libs/libsndfile/tests/stdio_test.c b/libs/libsndfile/tests/stdio_test.c
deleted file mode 100644
index 80a696cf53..0000000000
--- a/libs/libsndfile/tests/stdio_test.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from stdin and writing to
-** stdout.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#include "utils.h"
-
-/* EMX is OS/2. */
-#if (OS_IS_WIN32) || defined (__EMX__)
-
-int
-main (void)
-{
-	puts ("    stdio_test : this test doesn't work on win32.") ;
-	return 0 ;
-} /* main */
-
-#else
-
-#ifndef WIFEXITED
-#define WIFEXITED(s) (((s) & 0xff) == 0)
-#endif
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
-#endif
-
-
-static size_t	file_length (const char *filename) ;
-static int		file_exists (const char *filename) ;
-static void		stdio_test (const char *filetype) ;
-
-static const char *filetypes [] =
-{	"raw", "wav", "aiff", "au", "paf", "svx", "nist", "ircam",
-	"voc", "w64", "mat4", "mat5", "pvf",
-	NULL
-} ;
-
-int
-main (void)
-{	int k ;
-
-	if (file_exists ("libsndfile.spec.in"))
-		exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-	for (k = 0 ; filetypes [k] ; k++)
-		stdio_test (filetypes [k]) ;
-
-	return 0 ;
-} /* main */
-
-
-static void
-stdio_test (const char *filetype)
-{	static char buffer [256] ;
-
-	int file_size, retval ;
-
-	print_test_name ("stdio_test", filetype) ;
-
-	snprintf (buffer, sizeof (buffer), "./stdout_test %s > stdio.%s", filetype, filetype) ;
-	if ((retval = system (buffer)))
-	{	retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-		printf ("%s : %s", buffer, (strerror (retval))) ;
-		exit (1) ;
-		} ;
-
-	snprintf (buffer, sizeof (buffer), "stdio.%s", filetype) ;
-	if ((file_size = file_length (buffer)) < PIPE_TEST_LEN)
-	{	printf ("\n    Error : test file '%s' too small (%d).\n\n", buffer, file_size) ;
-		exit (1) ;
-		} ;
-
-	snprintf (buffer, sizeof (buffer), "./stdin_test %s < stdio.%s", filetype, filetype) ;
-	if ((retval = system (buffer)))
-	{	retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-		printf ("%s : %s", buffer, (strerror (retval))) ;
-		exit (1) ;
-		} ;
-
-	snprintf (buffer, sizeof (buffer), "rm stdio.%s", filetype) ;
-	if ((retval = system (buffer)))
-	{	retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-		printf ("%s : %s", buffer, (strerror (retval))) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-
-	return ;
-} /* stdio_test */
-
-
-
-
-static size_t
-file_length (const char *filename)
-{	struct stat buf ;
-
-	if (stat (filename, &buf))
-	{	perror (filename) ;
-		exit (1) ;
-		} ;
-
-	return buf.st_size ;
-} /* file_length */
-
-static int
-file_exists (const char *filename)
-{	struct stat buf ;
-
-	if (stat (filename, &buf))
-		return 0 ;
-
-	return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/stdout_test.c b/libs/libsndfile/tests/stdout_test.c
deleted file mode 100644
index 850718dc1b..0000000000
--- a/libs/libsndfile/tests/stdout_test.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static	void	stdout_test	(int typemajor, int count) ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all, test_count = 0 ;
-
-	if (argc != 2)
-	{	fprintf (stderr, "This program cannot be run by itself. It needs\n") ;
-		fprintf (stderr, "to be run from the stdio_test program.\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "raw"))
-	{	stdout_test	(SF_FORMAT_RAW, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	stdout_test	(SF_FORMAT_WAV, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	stdout_test	(SF_FORMAT_AIFF, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	stdout_test	(SF_FORMAT_AU, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	stdout_test	(SF_FORMAT_PAF, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	stdout_test	(SF_FORMAT_SVX, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	stdout_test	(SF_FORMAT_NIST, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	stdout_test	(SF_FORMAT_IRCAM, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	stdout_test	(SF_FORMAT_VOC, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	stdout_test	(SF_FORMAT_W64, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	stdout_test	(SF_FORMAT_MAT4, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	stdout_test	(SF_FORMAT_MAT5, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	stdout_test	(SF_FORMAT_PVF, PIPE_TEST_LEN) ;
-		test_count ++ ;
-		} ;
-
-	if (test_count == 0)
-	{	fprintf (stderr, "\n******************************************\n") ;
-		fprintf (stderr, "*  stdout_test : No '%s' test defined.\n", argv [1]) ;
-		fprintf (stderr, "******************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-static	void
-stdout_test	(int typemajor, int count)
-{	static	short	data [PIPE_TEST_LEN] ;
-
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			k, total, this_write ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.format		= (typemajor | SF_FORMAT_PCM_16) ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	/* Create some random data. */
-	for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-		data [k] = PIPE_INDEX (k) ;
-
-	if ((file = sf_open ("-", SFM_WRITE, &sfinfo)) == NULL)
-	{	fprintf (stderr, "sf_open_write failed with error : ") ;
-		fprintf (stderr, "%s\n", sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	total = 0 ;
-
-	while (total < count)
-	{	this_write = (count - total > 1024) ? 1024 : count - total ;
-		if ((k = sf_write_short (file, data + total, this_write)) != this_write)
-		{	fprintf (stderr, "sf_write_short # %d failed with short write (%d -> %d)\n", count, this_write, k) ;
-			exit (1) ;
-			} ;
-		total += k ;
-		} ;
-
-	sf_close (file) ;
-
-	return ;
-} /* stdout_test */
-
diff --git a/libs/libsndfile/tests/string_test.c b/libs/libsndfile/tests/string_test.c
deleted file mode 100644
index eac716e8b2..0000000000
--- a/libs/libsndfile/tests/string_test.c
+++ /dev/null
@@ -1,795 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-
-#define	BUFFER_LEN			(1 << 10)
-#define LOG_BUFFER_SIZE		1024
-
-static void	string_start_test (const char *filename, int typemajor) ;
-static void	string_start_end_test (const char *filename, int typemajor) ;
-static void	string_multi_set_test (const char *filename, int typemajor) ;
-static void	string_rdwr_test (const char *filename, int typemajor) ;
-static void	string_short_rdwr_test (const char *filename, int typemajor) ;
-static void	string_rdwr_grow_test (const char *filename, int typemajor) ;
-static void	string_header_update (const char *filename, int typemajor) ;
-
-static void	software_string_test (const char *filename) ;
-
-static int str_count (const char * haystack, const char * needle) ;
-
-int
-main (int argc, char *argv [])
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav  - test adding strings to WAV files\n") ;
-		printf ("           aiff - test adding strings to AIFF files\n") ;
-		printf ("           flac - test adding strings to FLAC files\n") ;
-		printf ("           ogg  - test adding strings to OGG files\n") ;
-		printf ("           all  - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = ! strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	string_start_end_test ("strings.wav", SF_FORMAT_WAV) ;
-		string_multi_set_test ("multi.wav", SF_FORMAT_WAV) ;
-		string_rdwr_test ("rdwr.wav", SF_FORMAT_WAV) ;
-		string_short_rdwr_test ("short_rdwr.wav", SF_FORMAT_WAV) ;
-		string_rdwr_grow_test ("rdwr_grow.wav", SF_FORMAT_WAV) ;
-		string_header_update ("header_update.wav", SF_FORMAT_WAV) ;
-
-		string_start_end_test ("strings.wavex", SF_FORMAT_WAVEX) ;
-		string_multi_set_test ("multi.wavex", SF_FORMAT_WAVEX) ;
-		string_rdwr_test ("rdwr.wavex", SF_FORMAT_WAVEX) ;
-		string_short_rdwr_test ("short_rdwr.wavex", SF_FORMAT_WAVEX) ;
-
-		string_start_end_test ("strings.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-		string_multi_set_test ("multi.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-		string_rdwr_test ("rdwr.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-		string_short_rdwr_test ("short_rdwr.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-
-		software_string_test ("software_string.wav") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	string_start_end_test ("strings.aiff", SF_FORMAT_AIFF) ;
-		/*
-		TODO : Fix src/aiff.c so these tests pass.
-		string_multi_set_test ("multi.aiff", SF_FORMAT_AIFF) ;
-		string_rdwr_test ("rdwr.aiff", SF_FORMAT_AIFF) ;
-		string_short_rdwr_test ("short_rdwr.aiff", SF_FORMAT_AIFF) ;
-		string_rdwr_grow_test ("rdwr_grow.aiff", SF_FORMAT_AIFF) ;
-		string_header_update ("header_update.aiff", SF_FORMAT_AIFF) ;
-		*/
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "flac"))
-	{	if (HAVE_EXTERNAL_LIBS)
-			string_start_test ("strings.flac", SF_FORMAT_FLAC) ;
-		else
-			puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ogg"))
-	{	if (HAVE_EXTERNAL_LIBS)
-			string_start_test ("vorbis.oga", SF_FORMAT_OGG) ;
-		else
-			puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	puts ("\n\n     **** String test not working yet for RF64 format. ****\n") ;
-		/*
-		string_start_end_test ("strings.rf64", SF_FORMAT_RF64) ;
-		string_multi_set_test ("multi.rf64", SF_FORMAT_RF64) ;
-		string_rdwr_test ("rdwr.rf64", SF_FORMAT_RF64) ;
-		string_short_rdwr_test ("short_rdwr.rf64", SF_FORMAT_RF64) ;
-		*/
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**	Here are the test functions.
-*/
-
-static const char
-	software	[]	= "software (libsndfile-X.Y.Z)",
-	artist		[]	= "The Artist",
-	copyright	[]	= "Copyright (c) 2001 Artist",
-	comment		[]	= "Comment goes here!!!",
-	date		[]	= "2001/01/27",
-	album		[]	= "The Album",
-	license		[]	= "The license",
-	title		[]	= "This is the title",
-	long_title	[]	= "This is a very long and very boring title for this file",
-	long_artist	[]	= "The artist who kept on changing its name",
-	genre		[]	= "The genre",
-	trackno		[]	= "Track three" ;
-
-
-static	short	data_out [BUFFER_LEN] ;
-
-static void
-string_start_end_test (const char *filename, int typemajor)
-{	const char	*cptr ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			errors = 0 ;
-
-	print_test_name ("string_start_end_test", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format		= typemajor | SF_FORMAT_PCM_16 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/* Write stuff at start of file. */
-	sf_set_string (file, SF_STR_TITLE, filename) ;
-	sf_set_string (file, SF_STR_SOFTWARE, software) ;
-	sf_set_string (file, SF_STR_ARTIST, artist) ;
-	sf_set_string (file, SF_STR_GENRE, genre) ;
-	sf_set_string (file, SF_STR_TRACKNUMBER, trackno) ;
-
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	/* Write more stuff at end of file. */
-	sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-	sf_set_string (file, SF_STR_COMMENT, comment) ;
-	sf_set_string (file, SF_STR_DATE, date) ;
-	sf_set_string (file, SF_STR_ALBUM, album) ;
-	sf_set_string (file, SF_STR_LICENSE, license) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("***** Bad frame count %d (should be %d)\n\n", (int) sfinfo.frames, BUFFER_LEN) ;
-		errors ++ ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_TITLE) ;
-	if (cptr == NULL || strcmp (filename, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad filename  : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_COPYRIGHT) ;
-	if (cptr == NULL || strcmp (copyright, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad copyright : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_SOFTWARE) ;
-	if (cptr == NULL || strstr (cptr, software) != cptr)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad software  : %s\n", cptr) ;
-		} ;
-
-	if (str_count (cptr, "libsndfile") != 1)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad software  : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_ARTIST) ;
-	if (cptr == NULL || strcmp (artist, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad artist    : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_COMMENT) ;
-	if (cptr == NULL || strcmp (comment, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad comment   : %s\n", cptr) ;
-		} ;
-
-	if (typemajor != SF_FORMAT_AIFF)
-	{	cptr = sf_get_string (file, SF_STR_DATE) ;
-		if (cptr == NULL || strcmp (date, cptr) != 0)
-		{	if (errors++ == 0)
-				puts ("\n") ;
-			printf ("    Bad date      : %s\n", cptr) ;
-			} ;
-
-		cptr = sf_get_string (file, SF_STR_GENRE) ;
-		if (cptr == NULL || strcmp (genre, cptr) != 0)
-		{	if (errors++ == 0)
-				puts ("\n") ;
-			printf ("    Bad genre     : %s\n", cptr) ;
-			} ;
-		} ;
-
-	switch (typemajor)
-	{	case SF_FORMAT_AIFF :
-		case SF_FORMAT_WAV :
-		case SF_FORMAT_WAVEX :
-		case SF_ENDIAN_BIG | SF_FORMAT_WAV :
-			break ;
-
-		default :
-			cptr = sf_get_string (file, SF_STR_ALBUM) ;
-			if (cptr == NULL || strcmp (album, cptr) != 0)
-			{	if (errors++ == 0)
-					puts ("\n") ;
-				printf ("    Bad album   : %s\n", cptr) ;
-				} ;
-
-			cptr = sf_get_string (file, SF_STR_LICENSE) ;
-			if (cptr == NULL || strcmp (license, cptr) != 0)
-			{	if (errors++ == 0)
-					puts ("\n") ;
-				printf ("    Bad license : %s\n", cptr) ;
-				} ;
-
-			cptr = sf_get_string (file, SF_STR_TRACKNUMBER) ;
-			if (cptr == NULL || strcmp (genre, cptr) != 0)
-			{	if (errors++ == 0)
-					puts ("\n") ;
-				printf ("    Bad track no. : %s\n", cptr) ;
-				} ;
-			break ;
-		} ;
-
-	if (errors > 0)
-	{	printf ("\n*** Error count : %d ***\n\n", errors) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_start_end_test */
-
-static void
-string_start_test (const char *filename, int typemajor)
-{	const char	*cptr ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			errors = 0 ;
-
-	print_test_name ("string_start_test", filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	switch (typemajor)
-	{	case SF_FORMAT_OGG :
-			sfinfo.format = typemajor | SF_FORMAT_VORBIS ;
-			break ;
-
-		default :
-			sfinfo.format = typemajor | SF_FORMAT_PCM_16 ;
-			break ;
-		} ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/* Write stuff at start of file. */
-	sf_set_string (file, SF_STR_TITLE, filename) ;
-	sf_set_string (file, SF_STR_SOFTWARE, software) ;
-	sf_set_string (file, SF_STR_ARTIST, artist) ;
-	sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-	sf_set_string (file, SF_STR_COMMENT, comment) ;
-	sf_set_string (file, SF_STR_DATE, date) ;
-	sf_set_string (file, SF_STR_ALBUM, album) ;
-	sf_set_string (file, SF_STR_LICENSE, license) ;
-
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sfinfo.frames != BUFFER_LEN)
-	{	printf ("***** Bad frame count %d (should be %d)\n\n", (int) sfinfo.frames, BUFFER_LEN) ;
-		errors ++ ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_TITLE) ;
-	if (cptr == NULL || strcmp (filename, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad filename  : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_COPYRIGHT) ;
-	if (cptr == NULL || strcmp (copyright, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad copyright : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_SOFTWARE) ;
-	if (cptr == NULL || strstr (cptr, software) != cptr)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad software  : %s\n", cptr) ;
-		} ;
-
-	if (str_count (cptr, "libsndfile") != 1)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad software  : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_ARTIST) ;
-	if (cptr == NULL || strcmp (artist, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad artist    : %s\n", cptr) ;
-		} ;
-
-	cptr = sf_get_string (file, SF_STR_COMMENT) ;
-	if (cptr == NULL || strcmp (comment, cptr) != 0)
-	{	if (errors++ == 0)
-			puts ("\n") ;
-		printf ("    Bad comment   : %s\n", cptr) ;
-		} ;
-
-	if (typemajor != SF_FORMAT_AIFF)
-	{	cptr = sf_get_string (file, SF_STR_DATE) ;
-		if (cptr == NULL || strcmp (date, cptr) != 0)
-		{	if (errors++ == 0)
-				puts ("\n") ;
-			printf ("    Bad date      : %s\n", cptr) ;
-			} ;
-		} ;
-
-	if (typemajor != SF_FORMAT_WAV && typemajor != SF_FORMAT_AIFF)
-	{	cptr = sf_get_string (file, SF_STR_ALBUM) ;
-		if (cptr == NULL || strcmp (album, cptr) != 0)
-		{	if (errors++ == 0)
-				puts ("\n") ;
-			printf ("    Bad album     : %s\n", cptr) ;
-			} ;
-		} ;
-
-	if (typemajor != SF_FORMAT_WAV && typemajor != SF_FORMAT_AIFF)
-	{	cptr = sf_get_string (file, SF_STR_LICENSE) ;
-		if (cptr == NULL || strcmp (license, cptr) != 0)
-		{	if (errors++ == 0)
-				puts ("\n") ;
-			printf ("    Bad license   : %s\n", cptr) ;
-			} ;
-		} ;
-
-	if (errors > 0)
-	{	printf ("\n*** Error count : %d ***\n\n", errors) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_start_test */
-
-static void
-string_multi_set_test (const char *filename, int typemajor)
-{	static const char
-		new_software	[]	= "new software (libsndfile-X.Y.Z)",
-		new_copyright	[]	= "Copyright (c) 2001 New Artist",
-		new_artist		[]	= "The New Artist",
-		new_title		[]	= "This is the new title" ;
-
-	static char buffer [2048] ;
-	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int			count ;
-
-	print_test_name (__func__, filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.format		= typemajor | SF_FORMAT_PCM_16 ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-	/* Write stuff at start of file. */
-	sf_set_string (file, SF_STR_TITLE, title) ;
-	sf_set_string (file, SF_STR_SOFTWARE, software) ;
-	sf_set_string (file, SF_STR_ARTIST, artist) ;
-
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	/* Write it all again. */
-
-	sf_set_string (file, SF_STR_TITLE, new_title) ;
-	sf_set_string (file, SF_STR_SOFTWARE, new_software) ;
-	sf_set_string (file, SF_STR_ARTIST, new_artist) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-	sf_set_string (file, SF_STR_COMMENT, comment) ;
-	sf_set_string (file, SF_STR_DATE, date) ;
-	sf_set_string (file, SF_STR_ALBUM, album) ;
-	sf_set_string (file, SF_STR_LICENSE, license) ;
-	sf_set_string (file, SF_STR_COPYRIGHT, new_copyright) ;
-	sf_set_string (file, SF_STR_COMMENT, comment) ;
-	sf_set_string (file, SF_STR_DATE, date) ;
-	sf_set_string (file, SF_STR_ALBUM, album) ;
-	sf_set_string (file, SF_STR_LICENSE, license) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	sf_command	(file, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ;
-	sf_close (file) ;
-
-	count = str_count (buffer, new_title) ;
-	exit_if_true (count < 1, "\n\nLine %d : Could not find new_title in :\n%s\n", __LINE__, buffer) ;
-	exit_if_true (count > 1, "\n\nLine %d : new_title appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-	count = str_count (buffer, software) ;
-	exit_if_true (count < 1, "\n\nLine %d : Could not find new_software in :\n%s\n", __LINE__, buffer) ;
-	exit_if_true (count > 1, "\n\nLine %d : new_software appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-	count = str_count (buffer, new_artist) ;
-	exit_if_true (count < 1, "\n\nLine %d : Could not find new_artist in :\n%s\n", __LINE__, buffer) ;
-	exit_if_true (count > 1, "\n\nLine %d : new_artist appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-	count = str_count (buffer, new_copyright) ;
-	exit_if_true (count < 1, "\n\nLine %d : Could not find new_copyright in :\n%s\n", __LINE__, buffer) ;
-	exit_if_true (count > 1, "\n\nLine %d : new_copyright appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_multi_set_test */
-
-static void
-string_rdwr_test (const char *filename, int typemajor)
-{	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	const char * str ;
-
-	print_test_name (__func__, filename) ;
-	create_short_sndfile (filename, typemajor | SF_FORMAT_PCM_16, 2) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-	frames = sfinfo.frames ;
-	sf_set_string (file, SF_STR_TITLE, title) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-	frames = sfinfo.frames ;
-	sf_set_string (file, SF_STR_TITLE, title) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	sf_set_string (file, SF_STR_ARTIST, artist) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	str = sf_get_string (file, SF_STR_ARTIST) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_ARTIST string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_rdwr_test */
-
-static void
-string_short_rdwr_test (const char *filename, int typemajor)
-{	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames = BUFFER_LEN ;
-	const char * str ;
-
-	print_test_name (__func__, filename) ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.format		= typemajor | SF_FORMAT_PCM_16 ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 1 ;
-	sfinfo.frames		= 0 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	sf_set_string (file, SF_STR_TITLE, long_title) ;
-	sf_set_string (file, SF_STR_ARTIST, long_artist) ;
-	sf_close (file) ;
-
-	/* Open the file RDWR. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, long_title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-	str = sf_get_string (file, SF_STR_ARTIST) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, long_artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-	/* Change title and artist. */
-	sf_set_string (file, SF_STR_TITLE, title) ;
-	sf_set_string (file, SF_STR_ARTIST, artist) ;
-
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-	str = sf_get_string (file, SF_STR_ARTIST) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_ARTIST string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_short_rdwr_test */
-
-static int
-str_count (const char * haystack, const char * needle)
-{	int count = 0 ;
-
-	while ((haystack = strstr (haystack, needle)) != NULL)
-	{	count ++ ;
-		haystack ++ ;
-		} ;
-
-	return count ;
-} /* str_count */
-
-#define MIN(a, b)	((a) < (b) ? (a) : (b))
-
-static void
-software_string_test (const char *filename)
-{	size_t k ;
-
-	print_test_name (__func__, filename) ;
-
-	for (k = 0 ; k < 50 ; k++)
-	{	const char *result ;
-		char sfname [64] = "" ;
-		SNDFILE *file ;
-		SF_INFO info ;
-
-		sf_info_setup (&info, SF_FORMAT_WAV | SF_FORMAT_PCM_16, 44100, 1) ;
-		file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_TRUE, __LINE__) ;
-
-		snprintf (sfname, MIN (k, sizeof (sfname)), "%s", "abcdefghijklmnopqrestvwxyz0123456789abcdefghijklmnopqrestvwxyz") ;
-
-		exit_if_true (sf_set_string (file, SF_STR_SOFTWARE, sfname),
-			"\n\nLine %d : sf_set_string (f, SF_STR_SOFTWARE, '%s') failed : %s\n", __LINE__, sfname, sf_strerror (file)) ;
-
-		sf_close (file) ;
-
-		file = test_open_file_or_die (filename, SFM_READ, &info, SF_TRUE, __LINE__) ;
-		result = sf_get_string (file, SF_STR_SOFTWARE) ;
-
-		exit_if_true (result == NULL, "\n\nLine %d : sf_get_string (file, SF_STR_SOFTWARE) returned NULL.\n\n", __LINE__) ;
-
-		exit_if_true (strstr (result, sfname) != result,
-			"\n\nLine %d : Can't fine string '%s' in '%s'\n\n", __LINE__, sfname, result) ;
-		sf_close (file) ;
-		} ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-} /* software_string_test */
-
-
-static void
-string_rdwr_grow_test (const char *filename, int typemajor)
-{	SNDFILE *file ;
-	SF_INFO sfinfo ;
-	sf_count_t frames ;
-	const char * str ;
-
-	print_test_name (__func__, filename) ;
-
-	/* Create a file that contains some strings. Then open the file in RDWR mode and
-		 grow the file by writing more audio data to it. Check that the audio data has
-		 been added to the file, and that the strings are still there. */
-
-	/* Create a short file that contains a string. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 2 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format		= typemajor | SF_FORMAT_PCM_16 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	/* Write data to file. */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-	/* Write some strings at end of file. */
-	sf_set_string (file, SF_STR_TITLE , title) ;
-	sf_set_string (file, SF_STR_COMMENT, comment) ;
-	sf_close (file) ;
-
-
-	/* Now open file again in SFM_RDWR mode and write more audio data to it. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-	/* Write more data to file.  */
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-	sf_close (file) ;
-
-
-	/* Now open file again. It should now contain two BUFFER_LEN's worth of frames and the strings. */
-	frames = 2 * BUFFER_LEN / sfinfo.channels ;
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-	/* Check the strings */
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-	str = sf_get_string (file, SF_STR_COMMENT) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_COMMENT string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, comment) != 0, "\n\nLine %d : SF_STR_COMMENT doesn't match what was written.\n", __LINE__) ;
-
-	sf_close (file) ;
-	unlink (filename) ;
-
-	puts ("ok") ;
-} /* string_rdwr_grow_test */
-
-static void
-string_header_update (const char *filename, int typemajor)
-{	SNDFILE *file , *file1 ;
-	SF_INFO sfinfo , sfinfo1 ;
-	sf_count_t frames ;
-	const char * str ;
-	const int GROW_BUFFER_AMOUNT = 4 ; /* this should be less than half the size of the string header */
-
-	print_test_name (__func__, filename) ;
-
-	/* Create a short file. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.channels		= 2 ;
-	sfinfo.frames		= 0 ;
-	sfinfo.format		= typemajor | SF_FORMAT_PCM_16 ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-	test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-	sf_set_string (file, SF_STR_TITLE, long_title) ;
-	sf_close (file) ;
-
-
-	/* Check that SFC_UPDATE_HEADER_NOW correctly calculates datalength. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-	/* Write a very small amount of new audio data that doesn't completely overwrite the existing header. */
-	test_write_short_or_die (file, 0, data_out, GROW_BUFFER_AMOUNT, __LINE__) ;
-
-	/* Update the header without closing the file. */
-	sf_command (file, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-	/* The file should now contain BUFFER_LEN + GROW_BUFFER_AMOUNT frames.
-		Open a second handle to the file and check the reported length. */
-	memset (&sfinfo1, 0, sizeof (sfinfo1)) ;
-	file1 = test_open_file_or_die (filename, SFM_READ, &sfinfo1, SF_TRUE, __LINE__) ;
-
-	frames = (BUFFER_LEN + GROW_BUFFER_AMOUNT) / sfinfo.channels ;
-	exit_if_true (frames != sfinfo1.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo1.frames, frames) ;
-
-	/* The strings are probably not readable by the second soundfile handle because write_tailer has not yet been called.
-		It's a design decision whether SFC_UPDATE_HEADER_NOW should write the tailer. I think it's fine that it doesn't.  */
-
-	sf_close (file1) ;
-	sf_close (file) ;
-
-
-	/* Check that sf_close correctly calculates datalength. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-	/* Write a very small amount of new audio data that doesn't completely overwrite the existing header. */
-	test_write_short_or_die (file, 0, data_out, GROW_BUFFER_AMOUNT, __LINE__) ;
-	sf_close (file) ;
-
-
-	/* Open file again and verify data and string. */
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-	frames = (BUFFER_LEN + 2*GROW_BUFFER_AMOUNT) / sfinfo.channels ;
-	exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-	str = sf_get_string (file, SF_STR_TITLE) ;
-	exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-	exit_if_true (strcmp (str, long_title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-	sf_close (file) ;
-	unlink (filename) ;
-	puts ("ok") ;
-} /* string_header_update */
diff --git a/libs/libsndfile/tests/test_wrapper.sh.in b/libs/libsndfile/tests/test_wrapper.sh.in
deleted file mode 100644
index daf030b05f..0000000000
--- a/libs/libsndfile/tests/test_wrapper.sh.in
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2008-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-HOST_TRIPLET=@HOST_TRIPLET@
-PACKAGE_VERSION=@PACKAGE_VERSION@
-LIB_VERSION=`echo $PACKAGE_VERSION | sed "s/[a-z].*//"`
-
-if test -f tests/sfversion@EXEEXT@ ; then
-	cd tests
-	fi
-
-if test ! -f sfversion@EXEEXT@ ; then
-	echo "Not able to find test executables."
-	exit 1
-	fi
-
-if test -f libsndfile.so.$LIB_VERSION ; then
-	# This will work on Linux, but not on Mac.
-	# Windows is already sorted out.
-	export LD_LIBRARY_PATH=`pwd`
-	if test ! -f libsndfile.so.1 ; then
-		ln -s libsndfile.so.$LIB_VERSION libsndfile.so.1
-		fi
-	fi
-
-sfversion=`./sfversion@EXEEXT@ | sed "s/-exp$//"`
-
-if test $sfversion != libsndfile-$PACKAGE_VERSION ; then
-	echo "Error : sfversion ($sfversion) and PACKAGE_VERSION ($PACKAGE_VERSION) don't match."
-	exit 1
-	fi
-
-# Force exit on errors.
-set -e
-
-# Generic-tests
-uname -a
-
-# Check the header file.
-sh pedantic-header-test.sh
-
-# Need this for when we're running from files collected into the
-# libsndfile-testsuite-@PACKAGE_VERSION@ tarball.
-if test -x test_main@EXEEXT@ ; then
-	echo "Running unit tests from src/ directory of source code tree."
-	./test_main@EXEEXT@
-	echo
-	echo "Running end-to-end tests from tests/ directory."
-	fi
-
-./error_test@EXEEXT@
-./pcm_test@EXEEXT@
-./ulaw_test@EXEEXT@
-./alaw_test@EXEEXT@
-./dwvw_test@EXEEXT@
-./command_test@EXEEXT@ ver
-./command_test@EXEEXT@ norm
-./command_test@EXEEXT@ format
-./command_test@EXEEXT@ peak
-./command_test@EXEEXT@ trunc
-./command_test@EXEEXT@ inst
-./command_test@EXEEXT@ current_sf_info
-./command_test@EXEEXT@ bext
-./command_test@EXEEXT@ bextch
-./command_test@EXEEXT@ chanmap
-./command_test@EXEEXT@ cart
-./floating_point_test@EXEEXT@
-./checksum_test@EXEEXT@
-./scale_clip_test@EXEEXT@
-./headerless_test@EXEEXT@
-./rdwr_test@EXEEXT@
-./locale_test@EXEEXT@
-./win32_ordinal_test@EXEEXT@
-./external_libs_test@EXEEXT@
-./format_check_test@EXEEXT@
-./channel_test@EXEEXT@
-
-# The w64 G++ compiler requires an extra runtime DLL which we don't have,
-# so skip this test.
-case "$HOST_TRIPLET" in
-	x86_64-w64-mingw32)
-		;;
-	i686-w64-mingw32)
-		;;
-	*)
-		./cpp_test@EXEEXT@
-		;;
-	esac
-
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed common tests."
-echo "----------------------------------------------------------------------"
-
-# aiff-tests
-./write_read_test@EXEEXT@ aiff
-./lossy_comp_test@EXEEXT@ aiff_ulaw
-./lossy_comp_test@EXEEXT@ aiff_alaw
-./lossy_comp_test@EXEEXT@ aiff_gsm610
-echo "=========================="
-echo "./lossy_comp_test@EXEEXT@ aiff_ima"
-echo "=========================="
-./peak_chunk_test@EXEEXT@ aiff
-./header_test@EXEEXT@ aiff
-./misc_test@EXEEXT@ aiff
-./string_test@EXEEXT@ aiff
-./multi_file_test@EXEEXT@ aiff
-./aiff_rw_test@EXEEXT@
-./chunk_test@EXEEXT@ aiff
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AIFF files."
-echo "----------------------------------------------------------------------"
-
-# au-tests
-./write_read_test@EXEEXT@ au
-./lossy_comp_test@EXEEXT@ au_ulaw
-./lossy_comp_test@EXEEXT@ au_alaw
-./lossy_comp_test@EXEEXT@ au_g721
-./lossy_comp_test@EXEEXT@ au_g723
-./header_test@EXEEXT@ au
-./misc_test@EXEEXT@ au
-./multi_file_test@EXEEXT@ au
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AU files."
-echo "----------------------------------------------------------------------"
-
-# caf-tests
-./write_read_test@EXEEXT@ caf
-./lossy_comp_test@EXEEXT@ caf_ulaw
-./lossy_comp_test@EXEEXT@ caf_alaw
-./header_test@EXEEXT@ caf
-./peak_chunk_test@EXEEXT@ caf
-./misc_test@EXEEXT@ caf
-./chunk_test@EXEEXT@ caf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on CAF files."
-echo "----------------------------------------------------------------------"
-
-# wav-tests
-./write_read_test@EXEEXT@ wav
-./lossy_comp_test@EXEEXT@ wav_pcm
-./lossy_comp_test@EXEEXT@ wav_ima
-./lossy_comp_test@EXEEXT@ wav_msadpcm
-./lossy_comp_test@EXEEXT@ wav_ulaw
-./lossy_comp_test@EXEEXT@ wav_alaw
-./lossy_comp_test@EXEEXT@ wav_gsm610
-./lossy_comp_test@EXEEXT@ wav_g721
-./peak_chunk_test@EXEEXT@ wav
-./header_test@EXEEXT@ wav
-./misc_test@EXEEXT@ wav
-./string_test@EXEEXT@ wav
-./multi_file_test@EXEEXT@ wav
-./chunk_test@EXEEXT@ wav
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on WAV files."
-echo "----------------------------------------------------------------------"
-
-# w64-tests
-./write_read_test@EXEEXT@ w64
-./lossy_comp_test@EXEEXT@ w64_ima
-./lossy_comp_test@EXEEXT@ w64_msadpcm
-./lossy_comp_test@EXEEXT@ w64_ulaw
-./lossy_comp_test@EXEEXT@ w64_alaw
-./lossy_comp_test@EXEEXT@ w64_gsm610
-./header_test@EXEEXT@ w64
-./misc_test@EXEEXT@ w64
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on W64 files."
-echo "----------------------------------------------------------------------"
-
-# rf64-tests
-./write_read_test@EXEEXT@ rf64
-./header_test@EXEEXT@ rf64
-./misc_test@EXEEXT@ rf64
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on RF64 files."
-echo "----------------------------------------------------------------------"
-
-# raw-tests
-./write_read_test@EXEEXT@ raw
-./lossy_comp_test@EXEEXT@ raw_ulaw
-./lossy_comp_test@EXEEXT@ raw_alaw
-./lossy_comp_test@EXEEXT@ raw_gsm610
-./lossy_comp_test@EXEEXT@ vox_adpcm
-./raw_test@EXEEXT@
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on RAW (header-less) files."
-echo "----------------------------------------------------------------------"
-
-# paf-tests
-./write_read_test@EXEEXT@ paf
-./header_test@EXEEXT@ paf
-./misc_test@EXEEXT@ paf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on PAF files."
-echo "----------------------------------------------------------------------"
-
-# svx-tests
-./write_read_test@EXEEXT@ svx
-./header_test@EXEEXT@ svx
-./misc_test@EXEEXT@ svx
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SVX files."
-echo "----------------------------------------------------------------------"
-
-# nist-tests
-./write_read_test@EXEEXT@ nist
-./lossy_comp_test@EXEEXT@ nist_ulaw
-./lossy_comp_test@EXEEXT@ nist_alaw
-./header_test@EXEEXT@ nist
-./misc_test@EXEEXT@ nist
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on NIST files."
-echo "----------------------------------------------------------------------"
-
-# ircam-tests
-./write_read_test@EXEEXT@ ircam
-./lossy_comp_test@EXEEXT@ ircam_ulaw
-./lossy_comp_test@EXEEXT@ ircam_alaw
-./header_test@EXEEXT@ ircam
-./misc_test@EXEEXT@ ircam
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on IRCAM files."
-echo "----------------------------------------------------------------------"
-
-# voc-tests
-./write_read_test@EXEEXT@ voc
-./lossy_comp_test@EXEEXT@ voc_ulaw
-./lossy_comp_test@EXEEXT@ voc_alaw
-./header_test@EXEEXT@ voc
-./misc_test@EXEEXT@ voc
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on VOC files."
-echo "----------------------------------------------------------------------"
-
-# mat4-tests
-./write_read_test@EXEEXT@ mat4
-./header_test@EXEEXT@ mat4
-./misc_test@EXEEXT@ mat4
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MAT4 files."
-echo "----------------------------------------------------------------------"
-
-# mat5-tests
-./write_read_test@EXEEXT@ mat5
-./header_test@EXEEXT@ mat5
-./misc_test@EXEEXT@ mat5
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MAT5 files."
-echo "----------------------------------------------------------------------"
-
-# pvf-tests
-./write_read_test@EXEEXT@ pvf
-./header_test@EXEEXT@ pvf
-./misc_test@EXEEXT@ pvf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on PVF files."
-echo "----------------------------------------------------------------------"
-
-# xi-tests
-./lossy_comp_test@EXEEXT@ xi_dpcm
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on XI files."
-echo "----------------------------------------------------------------------"
-
-# htk-tests
-./write_read_test@EXEEXT@ htk
-./header_test@EXEEXT@ htk
-./misc_test@EXEEXT@ htk
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on HTK files."
-echo "----------------------------------------------------------------------"
-
-# avr-tests
-./write_read_test@EXEEXT@ avr
-./header_test@EXEEXT@ avr
-./misc_test@EXEEXT@ avr
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AVR files."
-echo "----------------------------------------------------------------------"
-
-# sds-tests
-./write_read_test@EXEEXT@ sds
-./header_test@EXEEXT@ sds
-./misc_test@EXEEXT@ sds
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SDS files."
-echo "----------------------------------------------------------------------"
-
-# sd2-tests
-./write_read_test@EXEEXT@ sd2
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SD2 files."
-echo "----------------------------------------------------------------------"
-
-# wve-tests
-./lossy_comp_test@EXEEXT@ wve
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on WVE files."
-echo "----------------------------------------------------------------------"
-
-# mpc2k-tests
-./write_read_test@EXEEXT@ mpc2k
-./header_test@EXEEXT@ mpc2k
-./misc_test@EXEEXT@ mpc2k
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MPC 2000 files."
-echo "----------------------------------------------------------------------"
-
-# flac-tests
-./write_read_test@EXEEXT@ flac
-./compression_size_test@EXEEXT@ flac
-./string_test@EXEEXT@ flac
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on FLAC files."
-echo "----------------------------------------------------------------------"
-
-# vorbis-tests
-./ogg_test@EXEEXT@
-./compression_size_test@EXEEXT@ vorbis
-./lossy_comp_test@EXEEXT@ ogg_vorbis
-./string_test@EXEEXT@ ogg
-./misc_test@EXEEXT@ ogg
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on OGG/VORBIS files."
-echo "----------------------------------------------------------------------"
-
-# io-tests
-./stdio_test@EXEEXT@
-./pipe_test@EXEEXT@
-./virtual_io_test@EXEEXT@
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed stdio/pipe/vio tests."
-echo "----------------------------------------------------------------------"
-
-
diff --git a/libs/libsndfile/tests/ulaw_test.c b/libs/libsndfile/tests/ulaw_test.c
deleted file mode 100644
index fc0d497aa0..0000000000
--- a/libs/libsndfile/tests/ulaw_test.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define	BUFFER_SIZE		(65536)
-
-static unsigned char	ulaw_encode (int sample) ;
-static int				ulaw_decode (unsigned int ulawbyte) ;
-
-static	short			short_buffer [BUFFER_SIZE] ;
-static	unsigned char	ulaw_buffer [BUFFER_SIZE] ;
-
-int
-main (void)
-{	SNDFILE		*file ;
-	SF_INFO 	sfinfo ;
-	const char	*filename ;
-	int			k ;
-
-	print_test_name ("ulaw_test", "encoder") ;
-
-	filename = "test.raw" ;
-
-	sf_info_setup (&sfinfo, SF_FORMAT_RAW | SF_FORMAT_ULAW, 44100, 1) ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("sf_open_write failed with error : ") ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	/* Generate a file containing all possible 16 bit sample values
-	** and write it to disk as ulaw encoded.frames.
-	*/
-
-	for (k = 0 ; k < 0x10000 ; k++)
-		short_buffer [k] = k & 0xFFFF ;
-
-	sf_write_short (file, short_buffer, BUFFER_SIZE) ;
-	sf_close (file) ;
-
-	/* Now open that file and compare the ulaw encoded sample values
-	** with what they should be.
-	*/
-
-	if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sf_read_raw (file, ulaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
-	{	printf ("sf_read_raw : ") ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < 0x10000 ; k++)
-		if (ulaw_encode (short_buffer [k]) != ulaw_buffer [k])
-		{	printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, ulaw_buffer [k], ulaw_encode (short_buffer [k])) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	print_test_name ("ulaw_test", "decoder") ;
-
-	/* Now generate a file containing all possible 8 bit encoded
-	** sample values and write it to disk as ulaw encoded.frames.
-	*/
-
-	if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; k < 256 ; k++)
-		ulaw_buffer [k] = k & 0xFF ;
-
-	sf_write_raw (file, ulaw_buffer, 256) ;
-	sf_close (file) ;
-
-	/* Now open that file and compare the ulaw decoded sample values
-	** with what they should be.
-	*/
-
-	if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-	{	printf ("sf_open_write failed with error : ") ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	if (sf_read_short (file, short_buffer, 256) != 256)
-	{	printf ("sf_read_short : ") ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-
-	for (k = 0 ; k < 256 ; k++)
-		if (short_buffer [k] != ulaw_decode (ulaw_buffer [k]))
-		{	printf ("Decoder error : sample #%d (0x%04X should be 0x%04X)\n", k, short_buffer [k], ulaw_decode (ulaw_buffer [k])) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-
-	unlink (filename) ;
-
-	return 0 ;
-} /* main */
-
-
-/*=================================================================================
-**	The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
-**
-**	This code is not compiled into libsndfile. It is only used to test the
-**	libsndfile lookup tables for correctness.
-**
-**	I have included the original authors comments.
-*/
-
-/*
-** This routine converts from linear to ulaw.
-**
-** Craig Reese: IDA/Supercomputing Research Center
-** Joe Campbell: Department of Defense
-** 29 September 1989
-**
-** References:
-** 1) CCITT Recommendation G.711  (very difficult to follow)
-** 2) "A New Digital Technique for Implementation of Any
-**     Continuous PCM Companding Law," Villeret, Michel,
-**     et al. 1973 IEEE Int. Conf. on Communications, Vol 1,
-**     1973, pg. 11.12-11.17
-** 3) MIL-STD-188-113,"Interoperability and Performance Standards
-**     for Analog-to_Digital Conversion Techniques,"
-**     17 February 1987
-**
-** Input: Signed 16 bit linear sample
-** Output: 8 bit ulaw sample
-*/
-
-#define uBIAS 0x84		/* define the add-in bias for 16 bit.frames */
-#define uCLIP 32635
-
-static
-unsigned char ulaw_encode (int sample)
-{	static int exp_lut [256] =
-	{	0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-		4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-		5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-		6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-		7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-		} ;
-
-	int sign, exponent, mantissa ;
-	unsigned char ulawbyte ;
-
-	/* Get the sample into sign-magnitude. */
-	sign = (sample >> 8) & 0x80 ;					/* set aside the sign */
-	if (sign != 0)
-		sample = -sample ;							/* get magnitude */
-	if (sample > uCLIP)
-		sample = uCLIP ;							/* clip the magnitude */
-
-	/* Convert from 16 bit linear to ulaw. */
-	sample = sample + uBIAS ;
-	exponent = exp_lut [(sample >> 7) & 0xFF] ;
-	mantissa = (sample >> (exponent + 3)) & 0x0F ;
-	ulawbyte = ~ (sign | (exponent << 4) | mantissa) ;
-
-	return ulawbyte ;
-} /* ulaw_encode */
-
-
-/*
-** This routine converts from ulaw to 16 bit linear.
-**
-** Craig Reese: IDA/Supercomputing Research Center
-** 29 September 1989
-**
-** References:
-** 1) CCITT Recommendation G.711  (very difficult to follow)
-** 2) MIL-STD-188-113,"Interoperability and Performance Standards
-**     for Analog-to_Digital Conversion Techniques,"
-**     17 February 1987
-**
-** Input: 8 bit ulaw sample
-** Output: signed 16 bit linear sample
-*/
-
-static
-int ulaw_decode (unsigned int ulawbyte)
-{	static int exp_lut [8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 } ;
-	int sign, exponent, mantissa, sample ;
-
-	ulawbyte = ~ ulawbyte ;
-	sign = (ulawbyte & 0x80) ;
-	exponent = (ulawbyte >> 4) & 0x07 ;
-	mantissa = ulawbyte & 0x0F ;
-	sample = exp_lut [exponent] + (mantissa << (exponent + 3)) ;
-	if (sign != 0)
-		sample = -sample ;
-
-	return sample ;
-} /* ulaw_decode */
-
diff --git a/libs/libsndfile/tests/utils.c b/libs/libsndfile/tests/utils.c
deleted file mode 100644
index 882c969ab1..0000000000
--- a/libs/libsndfile/tests/utils.c
+++ /dev/null
@@ -1,1162 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Utility functions to make writing the test suite easier.
-**
-**	The .c and .h files were generated automagically with Autogen from
-**	the files utils.def and utils.tpl.
-*/
-
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef	M_PI
-#define	M_PI		3.14159265358979323846264338
-#endif
-
-#define	LOG_BUFFER_SIZE		2048
-
-/*
-**	Neat solution to the Win32/OS2 binary file flage requirement.
-**	If O_BINARY isn't already defined by the inclusion of the system
-**	headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-
-void
-gen_windowed_sine_float (float *data, int len, double maximum)
-{	int k ;
-
-	memset (data, 0, len * sizeof (float)) ;
-	/*
-	**	Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-	**	bucket to minimise spreading of energy over more than one bucket.
-	**	Also do not want to make the frequency too high as some of the
-	**	codecs (ie gsm610) have a quite severe high frequency roll off.
-	*/
-	len /= 2 ;
-
-	for (k = 0 ; k < len ; k++)
-	{	data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-		/* Apply Hanning Window. */
-		data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-		}
-
-	return ;
-} /* gen_windowed_sine_float */
-
-void
-gen_windowed_sine_double (double *data, int len, double maximum)
-{	int k ;
-
-	memset (data, 0, len * sizeof (double)) ;
-	/*
-	**	Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-	**	bucket to minimise spreading of energy over more than one bucket.
-	**	Also do not want to make the frequency too high as some of the
-	**	codecs (ie gsm610) have a quite severe high frequency roll off.
-	*/
-	len /= 2 ;
-
-	for (k = 0 ; k < len ; k++)
-	{	data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-		/* Apply Hanning Window. */
-		data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-		}
-
-	return ;
-} /* gen_windowed_sine_double */
-
-
-void
-create_short_sndfile (const char *filename, int format, int channels)
-{	short data [2 * 3 * 4 * 5 * 6 * 7] = { 0, } ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.channels = channels ;
-	sfinfo.format = format ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Error (%s, %d) : sf_open failed : %s\n", __FILE__, __LINE__, sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-	sf_close (file) ;
-} /* create_short_sndfile */
-
-void
-check_file_hash_or_die (const char *filename, uint64_t target_hash, int line_num)
-{	static unsigned char buf [4096] ;
-	uint64_t	cksum ;
-	FILE 		*file ;
-	int			k, read_count ;
-
-	memset (buf, 0, sizeof (buf)) ;
-
-	/* The 'b' in the mode string means binary for Win32. */
-	if ((file = fopen (filename, "rb")) == NULL)
-	{	printf ("\n\nLine %d: could not open file '%s'\n\n", line_num, filename) ;
-		exit (1) ;
-		} ;
-
-	cksum = 0 ;
-
-	while ((read_count = fread (buf, 1, sizeof (buf), file)))
-		for (k = 0 ; k < read_count ; k++)
-			cksum = cksum * 511 + buf [k] ;
-
-	fclose (file) ;
-
-	if (target_hash == 0)
-	{	printf (" 0x%016" PRIx64 "\n", cksum) ;
-		return ;
-		} ;
-
-	if (cksum != target_hash)
-	{	printf ("\n\nLine %d: incorrect hash value 0x%016" PRIx64 " should be 0x%016" PRIx64 ".\n\n", line_num, cksum, target_hash) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_file_hash_or_die */
-
-void
-print_test_name (const char *test, const char *filename)
-{	int count ;
-
-	if (test == NULL)
-	{	printf (__FILE__ ": bad test of filename parameter.\n") ;
-		exit (1) ;
-		} ;
-
-	if (filename == NULL || strlen (filename) == 0)
-	{	printf ("    %-30s : ", test) ;
-		count = 25 ;
-		}
-	else
-	{	printf ("    %-30s : %s ", test, filename) ;
-		count = 24 - strlen (filename) ;
-		} ;
-
-	while (count -- > 0)
-		putchar ('.') ;
-	putchar (' ') ;
-
-	fflush (stdout) ;
-} /* print_test_name */
-
-void
-dump_data_to_file (const char *filename, const void *data, unsigned int datalen)
-{	FILE *file ;
-
-	if ((file = fopen (filename, "wb")) == NULL)
-	{	printf ("\n\nLine %d : could not open file : %s\n\n", __LINE__, filename) ;
-		exit (1) ;
-		} ;
-
-	if (fwrite (data, 1, datalen, file) != datalen)
-	{	printf ("\n\nLine %d : fwrite failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	fclose (file) ;
-
-} /* dump_data_to_file */
-
-/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-*/
-
-static char octfilename [] = "error.dat" ;
-
-int
-oct_save_short	(const short *a, const short *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen (octfilename, "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d" "\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d" "\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_short */
-int
-oct_save_int	(const int *a, const int *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen (octfilename, "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d" "\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% d" "\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_int */
-int
-oct_save_float	(const float *a, const float *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen (octfilename, "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% g" "\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% g" "\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_float */
-int
-oct_save_double	(const double *a, const double *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen (octfilename, "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% g" "\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, "% g" "\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_double */
-
-
-void
-check_log_buffer_or_die (SNDFILE *file, int line_num)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-	int			count ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	count = sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (LOG_BUFFER_SIZE - count < 2)
-	{	printf ("\n\nLine %d : Possible long log buffer.\n", line_num) ;
-		exit (1) ;
-		}
-
-	/* Look for "Should" */
-	if (strstr (buffer, "ould"))
-	{	printf ("\n\nLine %d : Log buffer contains `ould'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	/* Look for "**" */
-	if (strstr (buffer, "*"))
-	{	printf ("\n\nLine %d : Log buffer contains `*'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	/* Look for "Should" */
-	if (strstr (buffer, "nknown marker"))
-	{	printf ("\n\nLine %d : Log buffer contains `nknown marker'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_log_buffer_or_die */
-
-int
-string_in_log_buffer (SNDFILE *file, const char *s)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-	int			count ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	count = sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (LOG_BUFFER_SIZE - count < 2)
-	{	printf ("Possible long log buffer.\n") ;
-		exit (1) ;
-		}
-
-	/* Look for string */
-	return strstr (buffer, s) ? SF_TRUE : SF_FALSE ;
-} /* string_in_log_buffer */
-
-void
-hexdump_file (const char * filename, sf_count_t offset, sf_count_t length)
-{
-	FILE * file ;
-	char buffer [16] ;
-	int k, m, ch, readcount ;
-
-	if (length > 1000000)
-	{	printf ("\n\nError : length (%ld) too long.\n\n", SF_COUNT_TO_LONG (offset)) ;
-		exit (1) ;
-		} ;
-
-	if ((file = fopen (filename, "r")) == NULL)
-	{	printf ("\n\nError : hexdump_file (%s) could not open file for read.\n\n", filename) ;
-		exit (1) ;
-		} ;
-
-	if (fseek (file, offset, SEEK_SET) != 0)
-	{	printf ("\n\nError : fseek(file, %ld, SEEK_SET) failed : %s\n\n", SF_COUNT_TO_LONG (offset), strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	puts ("\n\n") ;
-
-	for (k = 0 ; k < length ; k+= sizeof (buffer))
-	{	readcount = fread (buffer, 1, sizeof (buffer), file) ;
-
-		printf ("%08lx : ", SF_COUNT_TO_LONG (offset + k)) ;
-
-		for (m = 0 ; m < readcount ; m++)
-			printf ("%02x ", buffer [m] & 0xFF) ;
-
-		for (m = readcount ; m < SIGNED_SIZEOF (buffer) ; m++)
-			printf ("   ") ;
-
-		printf ("  ") ;
-		for (m = 0 ; m < readcount ; m++)
-		{	ch = isprint (buffer [m]) ? buffer [m] : '.' ;
-			putchar (ch) ;
-			} ;
-
-		if (readcount < SIGNED_SIZEOF (buffer))
-			break ;
-
-		putchar ('\n') ;
-		} ;
-
-	puts ("\n") ;
-
-	fclose (file) ;
-} /* hexdump_file */
-
-void
-dump_log_buffer (SNDFILE *file)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (strlen (buffer) < 1)
-		puts ("Log buffer empty.\n") ;
-	else
-		puts (buffer) ;
-
-	return ;
-} /* dump_log_buffer */
-
-SNDFILE *
-test_open_file_or_die (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num)
-{	static int count = 0 ;
-
-	SNDFILE *file ;
-	const char *modestr, *func_name ;
-	int oflags = 0, omode = 0, err ;
-
-	/*
-	** Need to test both sf_open() and sf_open_fd().
-	** Do so alternately.
-	*/
-	switch (mode)
-	{	case SFM_READ :
-				modestr = "SFM_READ" ;
-				oflags = O_RDONLY | O_BINARY ;
-				omode = 0 ;
-				break ;
-
-		case SFM_WRITE :
-				modestr = "SFM_WRITE" ;
-				oflags = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-				omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-
-		case SFM_RDWR :
-				modestr = "SFM_RDWR" ;
-				oflags = O_RDWR | O_CREAT | O_BINARY ;
-				omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-		default :
-				printf ("\n\nLine %d: Bad mode.\n", line_num) ;
-				fflush (stdout) ;
-				exit (1) ;
-		} ;
-
-	if (OS_IS_WIN32)
-	{	/* Windows does not understand and ignores the S_IRGRP flag, but Wine
-		** gives a run time warning message, so just clear it.
-		*/
-		omode &= ~S_IRGRP ;
-		} ;
-
-	if (allow_fd && ((++count) & 1) == 1)
-	{	int fd ;
-
-		/* Only use the three argument open() function if omode != 0. */
-		fd = (omode == 0) ? open (filename, oflags) : open (filename, oflags, omode) ;
-
-		if (fd < 0)
-		{	printf ("\n\n%s : open failed : %s\n", __func__, strerror (errno)) ;
-			exit (1) ;
-			} ;
-
-		func_name = "sf_open_fd" ;
-		file = sf_open_fd (fd, mode, sfinfo, SF_TRUE) ;
-		}
-	else
-	{	func_name = "sf_open" ;
-		file = sf_open (filename, mode, sfinfo) ;
-		} ;
-
-	if (file == NULL)
-	{	printf ("\n\nLine %d: %s (%s) failed : %s\n\n", line_num, func_name, modestr, sf_strerror (NULL)) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	err = sf_error (file) ;
-	if (err != SF_ERR_NO_ERROR)
-	{	printf ("\n\nLine %d : sf_error : %s\n\n", line_num, sf_error_number (err)) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	return file ;
-} /* test_open_file_or_die */
-
-void
-test_read_write_position_or_die (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos)
-{	sf_count_t pos ;
-
-	/* Check the current read position. */
-	if (read_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_READ)) != read_pos)
-	{	printf ("\n\nLine %d ", line_num) ;
-		if (pass > 0)
-			printf ("(pass %d): ", pass) ;
-		printf ("Read position (%ld) should be %ld.\n", SF_COUNT_TO_LONG (pos), SF_COUNT_TO_LONG (read_pos)) ;
-		exit (1) ;
-		} ;
-
-	/* Check the current write position. */
-	if (write_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_WRITE)) != write_pos)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : Write position (%ld) should be %ld.\n",
-						SF_COUNT_TO_LONG (pos), SF_COUNT_TO_LONG (write_pos)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_write_position */
-
-void
-test_seek_or_die (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num)
-{	sf_count_t	position ;
-	const char	*channel_name, *whence_name ;
-
-	switch (whence)
-	{	case SEEK_SET :
-				whence_name = "SEEK_SET" ;
-				break ;
-		case SEEK_CUR :
-				whence_name = "SEEK_CUR" ;
-				break ;
-		case SEEK_END :
-				whence_name = "SEEK_END" ;
-				break ;
-
-		/* SFM_READ */
-		case SEEK_SET | SFM_READ :
-				whence_name = "SFM_READ | SEEK_SET" ;
-				break ;
-		case SEEK_CUR | SFM_READ :
-				whence_name = "SFM_READ | SEEK_CUR" ;
-				break ;
-		case SEEK_END | SFM_READ :
-				whence_name = "SFM_READ | SEEK_END" ;
-				break ;
-
-		/* SFM_WRITE */
-		case SEEK_SET | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_SET" ;
-				break ;
-		case SEEK_CUR | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_CUR" ;
-				break ;
-		case SEEK_END | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_END" ;
-				break ;
-
-		default :
-				printf ("\n\nLine %d: bad whence parameter.\n", line_num) ;
-				exit (1) ;
-		} ;
-
-	channel_name = (channels == 1) ? "Mono" : "Stereo" ;
-
-	if ((position = sf_seek (file, offset, whence)) != new_pos)
-	{	printf ("\n\nLine %d : %s : sf_seek (file, %ld, %s) returned %ld (should be %ld).\n\n",
-					line_num, channel_name, SF_COUNT_TO_LONG (offset), whence_name,
-					SF_COUNT_TO_LONG (position), SF_COUNT_TO_LONG (new_pos)) ;
-		exit (1) ;
-		} ;
-
-} /* test_seek_or_die */
-
-
-
-void
-test_read_short_or_die (SNDFILE *file, int pass, short *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_short (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_short failed with short read (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_short_or_die */
-
-void
-test_read_int_or_die (SNDFILE *file, int pass, int *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_int (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_int failed with short read (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_int_or_die */
-
-void
-test_read_float_or_die (SNDFILE *file, int pass, float *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_float (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_float failed with short read (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_float_or_die */
-
-void
-test_read_double_or_die (SNDFILE *file, int pass, double *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_double (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_double failed with short read (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_double_or_die */
-
-
-void
-test_readf_short_or_die (SNDFILE *file, int pass, short *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_readf_short (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_readf_short failed with short readf (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_readf_short_or_die */
-
-void
-test_readf_int_or_die (SNDFILE *file, int pass, int *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_readf_int (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_readf_int failed with short readf (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_readf_int_or_die */
-
-void
-test_readf_float_or_die (SNDFILE *file, int pass, float *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_readf_float (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_readf_float failed with short readf (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_readf_float_or_die */
-
-void
-test_readf_double_or_die (SNDFILE *file, int pass, double *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_readf_double (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_readf_double failed with short readf (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_readf_double_or_die */
-
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_raw (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_raw failed with short read (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_raw_or_die */
-
-
-
-void
-test_write_short_or_die (SNDFILE *file, int pass, const short *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_short (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_short failed with short write (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_short_or_die */
-
-void
-test_write_int_or_die (SNDFILE *file, int pass, const int *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_int (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_int failed with short write (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_int_or_die */
-
-void
-test_write_float_or_die (SNDFILE *file, int pass, const float *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_float (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_float failed with short write (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_float_or_die */
-
-void
-test_write_double_or_die (SNDFILE *file, int pass, const double *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_double (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_double failed with short write (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_double_or_die */
-
-
-void
-test_writef_short_or_die (SNDFILE *file, int pass, const short *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_writef_short (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_writef_short failed with short writef (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_writef_short_or_die */
-
-void
-test_writef_int_or_die (SNDFILE *file, int pass, const int *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_writef_int (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_writef_int failed with short writef (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_writef_int_or_die */
-
-void
-test_writef_float_or_die (SNDFILE *file, int pass, const float *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_writef_float (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_writef_float failed with short writef (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_writef_float_or_die */
-
-void
-test_writef_double_or_die (SNDFILE *file, int pass, const double *test, sf_count_t frames, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_writef_double (file, test, frames)) != frames)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_writef_double failed with short writef (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_writef_double_or_die */
-
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_raw (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_raw failed with short write (%ld => %ld).\n",
-						SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_raw_or_die */
-
-
-void
-compare_short_or_die (const short *left, const short *right, unsigned count, int line_num)
-{
-	unsigned k ;
-
-	for (k = 0 ; k < count ;k++)
-		if (left [k] != right [k])
-		{	printf ("\n\nLine %d : Error at index %d, " "% d" " should be " "% d" ".\n\n", line_num, k, left [k], right [k]) ;
-			exit (1) ;
-			} ;
-
-	return ;
-} /* compare_short_or_die */
-void
-compare_int_or_die (const int *left, const int *right, unsigned count, int line_num)
-{
-	unsigned k ;
-
-	for (k = 0 ; k < count ;k++)
-		if (left [k] != right [k])
-		{	printf ("\n\nLine %d : Error at index %d, " "% d" " should be " "% d" ".\n\n", line_num, k, left [k], right [k]) ;
-			exit (1) ;
-			} ;
-
-	return ;
-} /* compare_int_or_die */
-void
-compare_float_or_die (const float *left, const float *right, unsigned count, int line_num)
-{
-	unsigned k ;
-
-	for (k = 0 ; k < count ;k++)
-		if (left [k] != right [k])
-		{	printf ("\n\nLine %d : Error at index %d, " "% g" " should be " "% g" ".\n\n", line_num, k, left [k], right [k]) ;
-			exit (1) ;
-			} ;
-
-	return ;
-} /* compare_float_or_die */
-void
-compare_double_or_die (const double *left, const double *right, unsigned count, int line_num)
-{
-	unsigned k ;
-
-	for (k = 0 ; k < count ;k++)
-		if (left [k] != right [k])
-		{	printf ("\n\nLine %d : Error at index %d, " "% g" " should be " "% g" ".\n\n", line_num, k, left [k], right [k]) ;
-			exit (1) ;
-			} ;
-
-	return ;
-} /* compare_double_or_die */
-
-
-
-void
-delete_file (int format, const char *filename)
-{	char rsrc_name [512], *fname ;
-
-	unlink (filename) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SD2)
-		return ;
-
-	/*
-	** Now try for a resource fork stored as a separate file.
-	** Grab the un-adulterated filename again.
-	*/
-	snprintf (rsrc_name, sizeof (rsrc_name), "%s", filename) ;
-
-	if ((fname = strrchr (rsrc_name, '/')) != NULL)
-		fname ++ ;
-	else if ((fname = strrchr (rsrc_name, '\\')) != NULL)
-		fname ++ ;
-	else
-		fname = rsrc_name ;
-
-	memmove (fname + 2, fname, strlen (fname) + 1) ;
-	fname [0] = '.' ;
-	fname [1] = '_' ;
-
-	unlink (rsrc_name) ;
-} /* delete_file */
-
-static int allowed_open_files = -1 ;
-
-void
-count_open_files (void)
-{
-#if OS_IS_WIN32
-	return ;
-#else
-	int k, count = 0 ;
-	struct stat statbuf ;
-
-	if (allowed_open_files > 0)
-		return ;
-
-	for (k = 0 ; k < 1024 ; k++)
-		if (fstat (k, &statbuf) == 0)
-			count ++ ;
-
-	allowed_open_files = count ;
-#endif
-} /* count_open_files */
-
-void
-increment_open_file_count (void)
-{	allowed_open_files ++ ;
-} /* increment_open_file_count */
-
-void
-check_open_file_count_or_die (int lineno)
-{
-#if OS_IS_WIN32
-	lineno = 0 ;
-	return ;
-#else
-	int k, count = 0 ;
-	struct stat statbuf ;
-
-	if (allowed_open_files < 0)
-		count_open_files () ;
-
-	for (k = 0 ; k < 1024 ; k++)
-		if (fstat (k, &statbuf) == 0)
-			count ++ ;
-
-	if (count > allowed_open_files)
-	{	printf ("\nLine %d : number of open files (%d) > allowed (%d).\n\n", lineno, count, allowed_open_files) ;
-		exit (1) ;
-		} ;
-#endif
-} /* check_open_file_count_or_die */
-
-void
-write_mono_file (const char * filename, int format, int srate, float * output, int len)
-{	SNDFILE * file ;
-	SF_INFO sfinfo ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	sfinfo.samplerate = srate ;
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("sf_open (%s) : %s\n", filename, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	sf_write_float (file, output, len) ;
-
-	sf_close (file) ;
-} /* write_mono_file */
-
-void
-gen_lowpass_noise_float (float *data, int len)
-{	int32_t value = 0x1243456 ;
-	double sample, last_val = 0.0 ;
-	int k ;
-
-	for (k = 0 ; k < len ; k++)
-	{	/* Not a crypto quality RNG. */
-		value = 11117 * value + 211231 ;
-		value = 11117 * value + 211231 ;
-		value = 11117 * value + 211231 ;
-
-		sample = value / (0x7fffffff * 1.000001) ;
-		sample = 0.2 * sample - 0.9 * last_val ;
-
-		data [k] = last_val = sample ;
-		} ;
-
-} /* gen_lowpass_noise_float */
-
-
-/*
-**	Windows is fucked.
-**	If a file is opened R/W and data is written to it, then fstat will return
-**	the correct file length, but stat will return zero.
-*/
-
-sf_count_t
-file_length (const char * fname)
-{	struct stat data ;
-
-	if (stat (fname, &data) != 0)
-		return 0 ;
-
-	return (sf_count_t) data.st_size ;
-} /* file_length */
-
-sf_count_t
-file_length_fd (int fd)
-{	struct stat data ;
-
-	memset (&data, 0, sizeof (data)) ;
-	if (fstat (fd, &data) != 0)
-		return 0 ;
-
-	return (sf_count_t) data.st_size ;
-} /* file_length_fd */
-
-
-
-
diff --git a/libs/libsndfile/tests/utils.def b/libs/libsndfile/tests/utils.def
deleted file mode 100644
index 0d94183d2e..0000000000
--- a/libs/libsndfile/tests/utils.def
+++ /dev/null
@@ -1,52 +0,0 @@
-autogen definitions utils.tpl;
-
-float_type = {
-	name = float ;
-	};
-
-float_type = {
-	name = double ;
-	};
-
-/*----------------------------------*/
-
-io_type = {
-	io_element	= short ;
-	format_str		= "\"% d\"" ;
-	};
-
-io_type = {
-	io_element	= int ;
-	format_str		= "\"% d\"" ;
-	};
-
-io_type = {
-	io_element	= float ;
-	format_str		= "\"% g\"" ;
-	};
-
-io_type = {
-	io_element 	= double ;
-	format_str		= "\"% g\"" ;
-	};
-
-read_op = {
-	op_element	= read ;
-	count_name	= items ;
-	};
-
-read_op = {
-	op_element	= readf ;
-	count_name	= frames ;
-	};
-
-write_op = {
-	op_element	= write ;
-	count_name	= items ;
-	};
-
-write_op = {
-	op_element	= writef ;
-	count_name	= frames ;
-	};
-
diff --git a/libs/libsndfile/tests/utils.h b/libs/libsndfile/tests/utils.h
deleted file mode 100644
index 79da2861dc..0000000000
--- a/libs/libsndfile/tests/utils.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Utility functions to make writing the test suite easier.
-**
-**	The .c and .h files were generated automagically with Autogen from
-**	the files utils.def and utils.tpl.
-*/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif	/* __cplusplus */
-
-#include <stdint.h>
-#include <stdarg.h>
-
-#define SF_COUNT_TO_LONG(x)	((long) (x))
-#define	ARRAY_LEN(x)		((int) (sizeof (x)) / (sizeof ((x) [0])))
-#define SIGNED_SIZEOF(x)	((int64_t) (sizeof (x)))
-#define	NOT(x)				(! (x))
-
-#define	PIPE_INDEX(x)	((x) + 500)
-#define	PIPE_TEST_LEN	12345
-
-
-void gen_windowed_sine_float (float *data, int len, double maximum) ;
-void gen_windowed_sine_double (double *data, int len, double maximum) ;
-
-
-void	create_short_sndfile (const char *filename, int format, int channels) ;
-
-void	check_file_hash_or_die	(const char *filename, uint64_t target_hash, int line_num) ;
-
-void	print_test_name (const char *test, const char *filename) ;
-
-void	dump_data_to_file (const char *filename, const void *data, unsigned int datalen) ;
-
-void	write_mono_file (const char * filename, int format, int srate, float * output, int len) ;
-
-static inline void
-exit_if_true (int test, const char *format, ...)
-{	if (test)
-	{	va_list	argptr ;
-		va_start (argptr, format) ;
-		vprintf (format, argptr) ;
-		va_end (argptr) ;
-		exit (1) ;
-		} ;
-} /* exit_if_true */
-
-/*
-**	Functions for saving two vectors of data in an ascii text file which
-**	can then be loaded into GNU octave for comparison.
-*/
-
-int	oct_save_short	(const short *a, const short *b, int len) ;
-int	oct_save_int	(const int *a, const int *b, int len) ;
-int	oct_save_float	(const float *a, const float *b, int len) ;
-int	oct_save_double	(const double *a, const double *b, int len) ;
-
-
-void	delete_file (int format, const char *filename) ;
-
-void	count_open_files (void) ;
-void	increment_open_file_count (void) ;
-void	check_open_file_count_or_die (int lineno) ;
-
-#ifdef SNDFILE_H
-
-static inline void
-sf_info_clear (SF_INFO * info)
-{	memset (info, 0, sizeof (SF_INFO)) ;
-} /* sf_info_clear */
-
-static inline void
-sf_info_setup (SF_INFO * info, int format, int samplerate, int channels)
-{	sf_info_clear (info) ;
-
-	info->format = format ;
-	info->samplerate = samplerate ;
-	info->channels = channels ;
-} /* sf_info_setup */
-
-
-void 	dump_log_buffer (SNDFILE *file) ;
-void 	check_log_buffer_or_die (SNDFILE *file, int line_num) ;
-int 	string_in_log_buffer (SNDFILE *file, const char *s) ;
-void	hexdump_file (const char * filename, sf_count_t offset, sf_count_t length) ;
-
-
-SNDFILE *test_open_file_or_die
-			(const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num) ;
-
-void 	test_read_write_position_or_die
-			(SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos) ;
-
-void	test_seek_or_die
-			(SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num) ;
-
-
-void 	test_read_short_or_die
-			(SNDFILE *file, int pass, short *test, sf_count_t items, int line_num) ;
-void 	test_read_int_or_die
-			(SNDFILE *file, int pass, int *test, sf_count_t items, int line_num) ;
-void 	test_read_float_or_die
-			(SNDFILE *file, int pass, float *test, sf_count_t items, int line_num) ;
-void 	test_read_double_or_die
-			(SNDFILE *file, int pass, double *test, sf_count_t items, int line_num) ;
-
-void 	test_readf_short_or_die
-			(SNDFILE *file, int pass, short *test, sf_count_t frames, int line_num) ;
-void 	test_readf_int_or_die
-			(SNDFILE *file, int pass, int *test, sf_count_t frames, int line_num) ;
-void 	test_readf_float_or_die
-			(SNDFILE *file, int pass, float *test, sf_count_t frames, int line_num) ;
-void 	test_readf_double_or_die
-			(SNDFILE *file, int pass, double *test, sf_count_t frames, int line_num) ;
-
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num) ;
-
-
-void 	test_write_short_or_die
-			(SNDFILE *file, int pass, const short *test, sf_count_t items, int line_num) ;
-void 	test_write_int_or_die
-			(SNDFILE *file, int pass, const int *test, sf_count_t items, int line_num) ;
-void 	test_write_float_or_die
-			(SNDFILE *file, int pass, const float *test, sf_count_t items, int line_num) ;
-void 	test_write_double_or_die
-			(SNDFILE *file, int pass, const double *test, sf_count_t items, int line_num) ;
-
-void 	test_writef_short_or_die
-			(SNDFILE *file, int pass, const short *test, sf_count_t frames, int line_num) ;
-void 	test_writef_int_or_die
-			(SNDFILE *file, int pass, const int *test, sf_count_t frames, int line_num) ;
-void 	test_writef_float_or_die
-			(SNDFILE *file, int pass, const float *test, sf_count_t frames, int line_num) ;
-void 	test_writef_double_or_die
-			(SNDFILE *file, int pass, const double *test, sf_count_t frames, int line_num) ;
-
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num) ;
-
-void compare_short_or_die (const short *left, const short *right, unsigned count, int line_num) ;
-void compare_int_or_die (const int *left, const int *right, unsigned count, int line_num) ;
-void compare_float_or_die (const float *left, const float *right, unsigned count, int line_num) ;
-void compare_double_or_die (const double *left, const double *right, unsigned count, int line_num) ;
-
-
-
-void	gen_lowpass_noise_float (float *data, int len) ;
-
-sf_count_t		file_length (const char * fname) ;
-sf_count_t		file_length_fd (int fd) ;
-
-#endif
-
-#ifdef __cplusplus
-}		/* extern "C" */
-#endif	/* __cplusplus */
-
-
-
diff --git a/libs/libsndfile/tests/utils.tpl b/libs/libsndfile/tests/utils.tpl
deleted file mode 100644
index d88e263ff0..0000000000
--- a/libs/libsndfile/tests/utils.tpl
+++ /dev/null
@@ -1,897 +0,0 @@
-[+ AutoGen5 template h c +]
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**	Utility functions to make writing the test suite easier.
-**
-**	The .c and .h files were generated automagically with Autogen from
-**	the files utils.def and utils.tpl.
-*/
-
-[+ CASE (suffix) +]
-[+ ==  h  +]
-
-#ifdef __cplusplus
-extern "C" {
-#endif	/* __cplusplus */
-
-#include <stdint.h>
-#include <stdarg.h>
-
-#define	ARRAY_LEN(x)		((int) (sizeof (x)) / (sizeof ((x) [0])))
-#define SIGNED_SIZEOF(x)	((int64_t) (sizeof (x)))
-#define	NOT(x)				(! (x))
-
-#define	PIPE_INDEX(x)	((x) + 500)
-#define	PIPE_TEST_LEN	12345
-
-
-[+ FOR float_type
-+]void gen_windowed_sine_[+ (get "name") +] ([+ (get "name") +] *data, int len, double maximum) ;
-[+ ENDFOR float_type
-+]
-
-void	create_short_sndfile (const char *filename, int format, int channels) ;
-
-void	check_file_hash_or_die	(const char *filename, uint64_t target_hash, int line_num) ;
-
-void	print_test_name (const char *test, const char *filename) ;
-
-void	dump_data_to_file (const char *filename, const void *data, unsigned int datalen) ;
-
-void	write_mono_file (const char * filename, int format, int srate, float * output, int len) ;
-
-#ifdef __GNUC__
-static inline void
-exit_if_true (int test, const char *format, ...)
-#ifdef __USE_MINGW_ANSI_STDIO
-	__attribute__ ((format (gnu_printf, 2, 3))) ;
-#else
-	__attribute__ ((format (printf, 2, 3))) ;
-#endif
-#endif
-
-static inline void
-exit_if_true (int test, const char *format, ...)
-{	if (test)
-	{	va_list	argptr ;
-		va_start (argptr, format) ;
-		vprintf (format, argptr) ;
-		va_end (argptr) ;
-		exit (1) ;
-		} ;
-} /* exit_if_true */
-
-/*
-**	Functions for saving two vectors of data in an ascii text file which
-**	can then be loaded into GNU octave for comparison.
-*/
-
-[+ FOR io_type
-+]int	oct_save_[+ (get "io_element") +]	(const [+ (get "io_element") +] *a, const [+ (get "io_element") +] *b, int len) ;
-[+ ENDFOR io_type
-+]
-
-void	delete_file (int format, const char *filename) ;
-
-void	count_open_files (void) ;
-void	increment_open_file_count (void) ;
-void	check_open_file_count_or_die (int lineno) ;
-
-#ifdef SNDFILE_H
-
-static inline void
-sf_info_clear (SF_INFO * info)
-{	memset (info, 0, sizeof (SF_INFO)) ;
-} /* sf_info_clear */
-
-static inline void
-sf_info_setup (SF_INFO * info, int format, int samplerate, int channels)
-{	sf_info_clear (info) ;
-
-	info->format = format ;
-	info->samplerate = samplerate ;
-	info->channels = channels ;
-} /* sf_info_setup */
-
-
-void 	dump_log_buffer (SNDFILE *file) ;
-void 	check_log_buffer_or_die (SNDFILE *file, int line_num) ;
-int 	string_in_log_buffer (SNDFILE *file, const char *s) ;
-void	hexdump_file (const char * filename, sf_count_t offset, sf_count_t length) ;
-
-
-SNDFILE *test_open_file_or_die
-			(const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num) ;
-
-void 	test_read_write_position_or_die
-			(SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos) ;
-
-void	test_seek_or_die
-			(SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num) ;
-
-[+ FOR read_op +]
-[+ FOR io_type
-+]void 	test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die
-			(SNDFILE *file, int pass, [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num) ;
-[+ ENDFOR io_type +][+ ENDFOR read_op +]
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num) ;
-
-[+ FOR write_op +]
-[+ FOR io_type
-+]void 	test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die
-			(SNDFILE *file, int pass, const [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num) ;
-[+ ENDFOR io_type +][+ ENDFOR write_op +]
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num) ;
-
-[+ FOR io_type
-+]void compare_[+ (get "io_element") +]_or_die (const [+ (get "io_element") +] *expected, const [+ (get "io_element") +] *actual, unsigned count, int line_num) ;
-[+ ENDFOR io_type +]
-
-
-void	gen_lowpass_signal_float (float *data, int len) ;
-
-sf_count_t		file_length (const char * fname) ;
-sf_count_t		file_length_fd (int fd) ;
-
-#endif
-
-#ifdef __cplusplus
-}		/* extern "C" */
-#endif	/* __cplusplus */
-
-[+  ==  c  +]
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef	M_PI
-#define	M_PI		3.14159265358979323846264338
-#endif
-
-#define	LOG_BUFFER_SIZE		2048
-
-/*
-**	Neat solution to the Win32/OS2 binary file flage requirement.
-**	If O_BINARY isn't already defined by the inclusion of the system
-**	headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-[+ FOR float_type +]
-void
-gen_windowed_sine_[+ (get "name") +] ([+ (get "name") +] *data, int len, double maximum)
-{	int k ;
-
-	memset (data, 0, len * sizeof ([+ (get "name") +])) ;
-	/*
-	**	Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-	**	bucket to minimise spreading of energy over more than one bucket.
-	**	Also do not want to make the frequency too high as some of the
-	**	codecs (ie gsm610) have a quite severe high frequency roll off.
-	*/
-	len /= 2 ;
-
-	for (k = 0 ; k < len ; k++)
-	{	data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-		/* Apply Hanning Window. */
-		data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-		}
-
-	return ;
-} /* gen_windowed_sine_[+ (get "name") +] */
-[+ ENDFOR float_type +]
-
-void
-create_short_sndfile (const char *filename, int format, int channels)
-{	short data [2 * 3 * 4 * 5 * 6 * 7] = { 0, } ;
-	SNDFILE *file ;
-	SF_INFO sfinfo ;
-
-	sfinfo.samplerate = 44100 ;
-	sfinfo.channels = channels ;
-	sfinfo.format = format ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("Error (%s, %d) : sf_open failed : %s\n", __FILE__, __LINE__, sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-	sf_close (file) ;
-} /* create_short_sndfile */
-
-void
-check_file_hash_or_die (const char *filename, uint64_t target_hash, int line_num)
-{	static unsigned char buf [4096] ;
-	uint64_t	cksum ;
-	FILE 		*file ;
-	int			k, read_count ;
-
-	memset (buf, 0, sizeof (buf)) ;
-
-	/* The 'b' in the mode string means binary for Win32. */
-	if ((file = fopen (filename, "rb")) == NULL)
-	{	printf ("\n\nLine %d: could not open file '%s'\n\n", line_num, filename) ;
-		exit (1) ;
-		} ;
-
-	cksum = 0 ;
-
-	while ((read_count = fread (buf, 1, sizeof (buf), file)))
-		for (k = 0 ; k < read_count ; k++)
-			cksum = cksum * 511 + buf [k] ;
-
-	fclose (file) ;
-
-	if (target_hash == 0)
-	{	printf (" 0x%016" PRIx64 "\n", cksum) ;
-		return ;
-		} ;
-
-	if (cksum != target_hash)
-	{	printf ("\n\nLine %d: incorrect hash value 0x%016" PRIx64 " should be 0x%016" PRIx64 ".\n\n", line_num, cksum, target_hash) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_file_hash_or_die */
-
-void
-print_test_name (const char *test, const char *filename)
-{	int count ;
-
-	if (test == NULL)
-	{	printf (__FILE__ ": bad test of filename parameter.\n") ;
-		exit (1) ;
-		} ;
-
-	if (filename == NULL || strlen (filename) == 0)
-	{	printf ("    %-30s : ", test) ;
-		count = 25 ;
-		}
-	else
-	{	printf ("    %-30s : %s ", test, filename) ;
-		count = 24 - strlen (filename) ;
-		} ;
-
-	while (count -- > 0)
-		putchar ('.') ;
-	putchar (' ') ;
-
-	fflush (stdout) ;
-} /* print_test_name */
-
-void
-dump_data_to_file (const char *filename, const void *data, unsigned int datalen)
-{	FILE *file ;
-
-	if ((file = fopen (filename, "wb")) == NULL)
-	{	printf ("\n\nLine %d : could not open file : %s\n\n", __LINE__, filename) ;
-		exit (1) ;
-		} ;
-
-	if (fwrite (data, 1, datalen, file) != datalen)
-	{	printf ("\n\nLine %d : fwrite failed.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	fclose (file) ;
-
-} /* dump_data_to_file */
-
-/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-*/
-
-static char octfilename [] = "error.dat" ;
-
-[+ FOR io_type
-+]int
-oct_save_[+ (get "io_element") +]	(const [+ (get "io_element") +] *a, const [+ (get "io_element") +] *b, int len)
-{	FILE 	*file ;
-	int		k ;
-
-	if (! (file = fopen (octfilename, "w")))
-		return 1 ;
-
-	fprintf (file, "# Not created by Octave\n") ;
-
-	fprintf (file, "# name: a\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, [+ (get "format_str") +] "\n", a [k]) ;
-
-	fprintf (file, "# name: b\n") ;
-	fprintf (file, "# type: matrix\n") ;
-	fprintf (file, "# rows: %d\n", len) ;
-	fprintf (file, "# columns: 1\n") ;
-
-	for (k = 0 ; k < len ; k++)
-		fprintf (file, [+ (get "format_str") +] "\n", b [k]) ;
-
-	fclose (file) ;
-	return 0 ;
-} /* oct_save_[+ (get "io_element") +] */
-[+ ENDFOR io_type
-+]
-
-void
-check_log_buffer_or_die (SNDFILE *file, int line_num)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-	int			count ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	count = sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (LOG_BUFFER_SIZE - count < 2)
-	{	printf ("\n\nLine %d : Possible long log buffer.\n", line_num) ;
-		exit (1) ;
-		}
-
-	/* Look for "Should" */
-	if (strstr (buffer, "ould"))
-	{	printf ("\n\nLine %d : Log buffer contains `ould'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	/* Look for "**" */
-	if (strstr (buffer, "*"))
-	{	printf ("\n\nLine %d : Log buffer contains `*'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	/* Look for "Should" */
-	if (strstr (buffer, "nknown marker"))
-	{	printf ("\n\nLine %d : Log buffer contains `nknown marker'. Dumping.\n", line_num) ;
-		puts (buffer) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* check_log_buffer_or_die */
-
-int
-string_in_log_buffer (SNDFILE *file, const char *s)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-	int			count ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	count = sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (LOG_BUFFER_SIZE - count < 2)
-	{	printf ("Possible long log buffer.\n") ;
-		exit (1) ;
-		}
-
-	/* Look for string */
-	return strstr (buffer, s) ? SF_TRUE : SF_FALSE ;
-} /* string_in_log_buffer */
-
-void
-hexdump_file (const char * filename, sf_count_t offset, sf_count_t length)
-{
-	FILE * file ;
-	char buffer [16] ;
-	int k, m, ch, readcount ;
-
-	if (length > 1000000)
-	{	printf ("\n\nError : length (%" PRId64 ") too long.\n\n", offset) ;
-		exit (1) ;
-		} ;
-
-	if ((file = fopen (filename, "r")) == NULL)
-	{	printf ("\n\nError : hexdump_file (%s) could not open file for read.\n\n", filename) ;
-		exit (1) ;
-		} ;
-
-	if (fseek (file, offset, SEEK_SET) != 0)
-	{	printf ("\n\nError : fseek(file, %" PRId64 ", SEEK_SET) failed : %s\n\n", offset, strerror (errno)) ;
-		exit (1) ;
-		} ;
-
-	puts ("\n\n") ;
-
-	for (k = 0 ; k < length ; k+= sizeof (buffer))
-	{	readcount = fread (buffer, 1, sizeof (buffer), file) ;
-
-		printf ("%08" PRIx64 " : ", offset + k) ;
-
-		for (m = 0 ; m < readcount ; m++)
-			printf ("%02x ", buffer [m] & 0xFF) ;
-
-		for (m = readcount ; m < SIGNED_SIZEOF (buffer) ; m++)
-			printf ("   ") ;
-
-		printf ("  ") ;
-		for (m = 0 ; m < readcount ; m++)
-		{	ch = isprint (buffer [m]) ? buffer [m] : '.' ;
-			putchar (ch) ;
-			} ;
-
-		if (readcount < SIGNED_SIZEOF (buffer))
-			break ;
-
-		putchar ('\n') ;
-		} ;
-
-	puts ("\n") ;
-
-	fclose (file) ;
-} /* hexdump_file */
-
-void
-dump_log_buffer (SNDFILE *file)
-{	static char	buffer [LOG_BUFFER_SIZE] ;
-
-	memset (buffer, 0, sizeof (buffer)) ;
-
-	/* Get the log buffer data. */
-	sf_command	(file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-	if (strlen (buffer) < 1)
-		puts ("Log buffer empty.\n") ;
-	else
-		puts (buffer) ;
-
-	return ;
-} /* dump_log_buffer */
-
-SNDFILE *
-test_open_file_or_die (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num)
-{	static int count = 0 ;
-
-	SNDFILE *file ;
-	const char *modestr, *func_name ;
-	int oflags = 0, omode = 0, err ;
-
-	/*
-	** Need to test both sf_open() and sf_open_fd().
-	** Do so alternately.
-	*/
-	switch (mode)
-	{	case SFM_READ :
-				modestr = "SFM_READ" ;
-				oflags = O_RDONLY | O_BINARY ;
-				omode = 0 ;
-				break ;
-
-		case SFM_WRITE :
-				modestr = "SFM_WRITE" ;
-				oflags = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-				omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-
-		case SFM_RDWR :
-				modestr = "SFM_RDWR" ;
-				oflags = O_RDWR | O_CREAT | O_BINARY ;
-				omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-				break ;
-		default :
-				printf ("\n\nLine %d: Bad mode.\n", line_num) ;
-				fflush (stdout) ;
-				exit (1) ;
-		} ;
-
-	if (OS_IS_WIN32)
-	{	/* Windows does not understand and ignores the S_IRGRP flag, but Wine
-		** gives a run time warning message, so just clear it.
-		*/
-		omode &= ~S_IRGRP ;
-		} ;
-
-	if (allow_fd && ((++count) & 1) == 1)
-	{	int fd ;
-
-		/* Only use the three argument open() function if omode != 0. */
-		fd = (omode == 0) ? open (filename, oflags) : open (filename, oflags, omode) ;
-
-		if (fd < 0)
-		{	printf ("\n\n%s : open failed : %s\n", __func__, strerror (errno)) ;
-			exit (1) ;
-			} ;
-
-		func_name = "sf_open_fd" ;
-		file = sf_open_fd (fd, mode, sfinfo, SF_TRUE) ;
-		}
-	else
-	{	func_name = "sf_open" ;
-		file = sf_open (filename, mode, sfinfo) ;
-		} ;
-
-	if (file == NULL)
-	{	printf ("\n\nLine %d: %s (%s) failed : %s\n\n", line_num, func_name, modestr, sf_strerror (NULL)) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	err = sf_error (file) ;
-	if (err != SF_ERR_NO_ERROR)
-	{	printf ("\n\nLine %d : sf_error : %s\n\n", line_num, sf_error_number (err)) ;
-		dump_log_buffer (file) ;
-		exit (1) ;
-		} ;
-
-	return file ;
-} /* test_open_file_or_die */
-
-void
-test_read_write_position_or_die (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos)
-{	sf_count_t pos ;
-
-	/* Check the current read position. */
-	if (read_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_READ)) != read_pos)
-	{	printf ("\n\nLine %d ", line_num) ;
-		if (pass > 0)
-			printf ("(pass %d): ", pass) ;
-		printf ("Read position (%" PRId64 ") should be %" PRId64 ".\n", pos, read_pos) ;
-		exit (1) ;
-		} ;
-
-	/* Check the current write position. */
-	if (write_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_WRITE)) != write_pos)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : Write position (%" PRId64 ") should be %" PRId64 ".\n", pos, write_pos) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_write_position */
-
-void
-test_seek_or_die (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num)
-{	sf_count_t	position ;
-	const char	*channel_name, *whence_name ;
-
-	switch (whence)
-	{	case SEEK_SET :
-				whence_name = "SEEK_SET" ;
-				break ;
-		case SEEK_CUR :
-				whence_name = "SEEK_CUR" ;
-				break ;
-		case SEEK_END :
-				whence_name = "SEEK_END" ;
-				break ;
-
-		/* SFM_READ */
-		case SEEK_SET | SFM_READ :
-				whence_name = "SFM_READ | SEEK_SET" ;
-				break ;
-		case SEEK_CUR | SFM_READ :
-				whence_name = "SFM_READ | SEEK_CUR" ;
-				break ;
-		case SEEK_END | SFM_READ :
-				whence_name = "SFM_READ | SEEK_END" ;
-				break ;
-
-		/* SFM_WRITE */
-		case SEEK_SET | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_SET" ;
-				break ;
-		case SEEK_CUR | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_CUR" ;
-				break ;
-		case SEEK_END | SFM_WRITE :
-				whence_name = "SFM_WRITE | SEEK_END" ;
-				break ;
-
-		default :
-				printf ("\n\nLine %d: bad whence parameter.\n", line_num) ;
-				exit (1) ;
-		} ;
-
-	channel_name = (channels == 1) ? "Mono" : "Stereo" ;
-
-	if ((position = sf_seek (file, offset, whence)) != new_pos)
-	{	printf ("\n\nLine %d : %s : sf_seek (file, %" PRId64 ", %s) returned %" PRId64 " (should be %" PRId64 ").\n\n",
-					line_num, channel_name, offset, whence_name, position, new_pos) ;
-		exit (1) ;
-		} ;
-
-} /* test_seek_or_die */
-
-[+ FOR read_op +]
-[+ FOR io_type +]
-void
-test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die (SNDFILE *file, int pass, [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_[+ (get "op_element") +]_[+ (get "io_element") +] (file, test, [+ (get "count_name") +])) != [+ (get "count_name") +])
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_[+ (get "op_element") +]_[+ (get "io_element") +] failed with short [+ (get "op_element") +] (%" PRId64 " => %" PRId64 ").\n",
-						[+ (get "count_name") +], count) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +][+ ENDFOR read_op +]
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_read_raw (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_read_raw failed with short read (%" PRId64 " => %" PRId64 ").\n", items, count) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_read_raw_or_die */
-
-[+ FOR write_op +]
-[+ FOR io_type +]
-void
-test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die (SNDFILE *file, int pass, const [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_[+ (get "op_element") +]_[+ (get "io_element") +] (file, test, [+ (get "count_name") +])) != [+ (get "count_name") +])
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_[+ (get "op_element") +]_[+ (get "io_element") +] failed with short [+ (get "op_element") +] (%" PRId64 " => %" PRId64 ").\n",
-						[+ (get "count_name") +], count) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +][+ ENDFOR write_op +]
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num)
-{	sf_count_t count ;
-
-	if ((count = sf_write_raw (file, test, items)) != items)
-	{	printf ("\n\nLine %d", line_num) ;
-		if (pass > 0)
-			printf (" (pass %d)", pass) ;
-		printf (" : sf_write_raw failed with short write (%" PRId64 " => %" PRId64 ").\n", items, count) ;
-		fflush (stdout) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* test_write_raw_or_die */
-
-
-[+ FOR io_type
-+]void
-compare_[+ (get "io_element") +]_or_die (const [+ (get "io_element") +] *expected, const [+ (get "io_element") +] *actual, unsigned count, int line_num)
-{
-	unsigned k ;
-
-	for (k = 0 ; k < count ; k++)
-		if (expected [k] != actual [k])
-		{	printf ("\n\nLine %d : Error at index %d, got " [+ (get "format_str") +] ", should be " [+ (get "format_str") +] ".\n\n", line_num, k, actual [k], expected [k]) ;
-			exit (1) ;
-			} ;
-
-	return ;
-} /* compare_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +]
-
-
-void
-delete_file (int format, const char *filename)
-{	char rsrc_name [512], *fname ;
-
-	unlink (filename) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SD2)
-		return ;
-
-	/*
-	** Now try for a resource fork stored as a separate file.
-	** Grab the un-adulterated filename again.
-	*/
-	snprintf (rsrc_name, sizeof (rsrc_name), "%s", filename) ;
-
-	if ((fname = strrchr (rsrc_name, '/')) != NULL)
-		fname ++ ;
-	else if ((fname = strrchr (rsrc_name, '\\')) != NULL)
-		fname ++ ;
-	else
-		fname = rsrc_name ;
-
-	memmove (fname + 2, fname, strlen (fname) + 1) ;
-	fname [0] = '.' ;
-	fname [1] = '_' ;
-
-	unlink (rsrc_name) ;
-} /* delete_file */
-
-static int allowed_open_files = -1 ;
-
-void
-count_open_files (void)
-{
-#if OS_IS_WIN32
-	return ;
-#else
-	int k, count = 0 ;
-	struct stat statbuf ;
-
-	if (allowed_open_files > 0)
-		return ;
-
-	for (k = 0 ; k < 1024 ; k++)
-		if (fstat (k, &statbuf) == 0)
-			count ++ ;
-
-	allowed_open_files = count ;
-#endif
-} /* count_open_files */
-
-void
-increment_open_file_count (void)
-{	allowed_open_files ++ ;
-} /* increment_open_file_count */
-
-void
-check_open_file_count_or_die (int lineno)
-{
-#if OS_IS_WIN32
-	(void) lineno ;
-	return ;
-#else
-	int k, count = 0 ;
-	struct stat statbuf ;
-
-	if (allowed_open_files < 0)
-		count_open_files () ;
-
-	for (k = 0 ; k < 1024 ; k++)
-		if (fstat (k, &statbuf) == 0)
-			count ++ ;
-
-	if (count > allowed_open_files)
-	{	printf ("\nLine %d : number of open files (%d) > allowed (%d).\n\n", lineno, count, allowed_open_files) ;
-		exit (1) ;
-		} ;
-#endif
-} /* check_open_file_count_or_die */
-
-void
-write_mono_file (const char * filename, int format, int srate, float * output, int len)
-{	SNDFILE * file ;
-	SF_INFO sfinfo ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	sfinfo.samplerate = srate ;
-	sfinfo.channels = 1 ;
-	sfinfo.format = format ;
-
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	printf ("sf_open (%s) : %s\n", filename, sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	sf_write_float (file, output, len) ;
-
-	sf_close (file) ;
-} /* write_mono_file */
-
-void
-gen_lowpass_signal_float (float *data, int len)
-{	int32_t value = 0x1243456 ;
-	double sample, last_val = 0.0 ;
-	int k ;
-
-	for (k = 0 ; k < len ; k++)
-	{	/* Not a crypto quality RNG. */
-		value = 11117 * value + 211231 ;
-		value = 11117 * value + 211231 ;
-		value = 11117 * value + 211231 ;
-
-		sample = value / (0x7fffffff * 1.000001) ;
-		sample = 0.2 * sample - 0.9 * last_val ;
-
-		last_val = sample ;
-
-		data [k] = 0.5 * (sample + sin (2.0 * k * M_PI * 1.0 / 32.0)) ;
-		} ;
-
-} /* gen_lowpass_signal_float */
-
-
-/*
-**	Windows is fucked.
-**	If a file is opened R/W and data is written to it, then fstat will return
-**	the correct file length, but stat will return zero.
-*/
-
-sf_count_t
-file_length (const char * fname)
-{	struct stat data ;
-
-	if (stat (fname, &data) != 0)
-		return 0 ;
-
-	return (sf_count_t) data.st_size ;
-} /* file_length */
-
-sf_count_t
-file_length_fd (int fd)
-{	struct stat data ;
-
-	memset (&data, 0, sizeof (data)) ;
-	if (fstat (fd, &data) != 0)
-		return 0 ;
-
-	return (sf_count_t) data.st_size ;
-} /* file_length_fd */
-
-
-[+ ESAC +]
-
diff --git a/libs/libsndfile/tests/virtual_io_test.c b/libs/libsndfile/tests/virtual_io_test.c
deleted file mode 100644
index 1aae063df8..0000000000
--- a/libs/libsndfile/tests/virtual_io_test.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <fcntl.h>
-#include <math.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static void vio_test (const char *fname, int format) ;
-
-int
-main (void)
-{
-	vio_test ("vio_pcm16.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-	vio_test ("vio_pcm24.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_24) ;
-	vio_test ("vio_float.au", SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-	vio_test ("vio_pcm24.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_24) ;
-
-	return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-typedef struct
-{	sf_count_t offset, length ;
-	unsigned char data [16 * 1024] ;
-} VIO_DATA ;
-
-static sf_count_t
-vfget_filelen (void *user_data)
-{	VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-	return vf->length ;
-} /* vfget_filelen */
-
-static sf_count_t
-vfseek (sf_count_t offset, int whence, void *user_data)
-{	VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-	switch (whence)
-	{	case SEEK_SET :
-			vf->offset = offset ;
-			break ;
-
-		case SEEK_CUR :
-			vf->offset = vf->offset + offset ;
-			break ;
-
-		case SEEK_END :
-			vf->offset = vf->length + offset ;
-			break ;
-		default :
-			break ;
-		} ;
-
-	return vf->offset ;
-} /* vfseek */
-
-static sf_count_t
-vfread (void *ptr, sf_count_t count, void *user_data)
-{	VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-	/*
-	**	This will brack badly for files over 2Gig in length, but
-	**	is sufficient for testing.
-	*/
-	if (vf->offset + count > vf->length)
-		count = vf->length - vf->offset ;
-
-	memcpy (ptr, vf->data + vf->offset, count) ;
-	vf->offset += count ;
-
-	return count ;
-} /* vfread */
-
-static sf_count_t
-vfwrite (const void *ptr, sf_count_t count, void *user_data)
-{	VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-	/*
-	**	This will break badly for files over 2Gig in length, but
-	**	is sufficient for testing.
-	*/
-	if (vf->offset >= SIGNED_SIZEOF (vf->data))
-		return 0 ;
-
-	if (vf->offset + count > SIGNED_SIZEOF (vf->data))
-		count = sizeof (vf->data) - vf->offset ;
-
-	memcpy (vf->data + vf->offset, ptr, (size_t) count) ;
-	vf->offset += count ;
-
-	if (vf->offset > vf->length)
-		vf->length = vf->offset ;
-
-	return count ;
-} /* vfwrite */
-
-static sf_count_t
-vftell (void *user_data)
-{	VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-	return vf->offset ;
-} /* vftell */
-
-
-/*==============================================================================
-*/
-
-static void
-gen_short_data (short * data, int len, int start)
-{	int k ;
-
-	for (k = 0 ; k < len ; k++)
-		data [k] = start + k ;
-} /* gen_short_data */
-
-
-static void
-check_short_data (short * data, int len, int start, int line)
-{	int k ;
-
-	for (k = 0 ; k < len ; k++)
-		if (data [k] != start + k)
-		{	printf ("\n\nLine %d : data [%d] = %d (should be %d).\n\n", line, k, data [k], start + k) ;
-			exit (1) ;
-			} ;
-} /* gen_short_data */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-vio_test (const char *fname, int format)
-{	static VIO_DATA vio_data ;
-	static short data [256] ;
-
-	SF_VIRTUAL_IO vio ;
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-
-	print_test_name ("virtual i/o test", fname) ;
-
-	/* Set up pointers to the locally defined functions. */
-	vio.get_filelen = vfget_filelen ;
-	vio.seek = vfseek ;
-	vio.read = vfread ;
-	vio.write = vfwrite ;
-	vio.tell = vftell ;
-
-	/* Set virtual file offset and length to zero. */
-	vio_data.offset = 0 ;
-	vio_data.length = 0 ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.format = format ;
-	sfinfo.channels = 2 ;
-	sfinfo.samplerate = 44100 ;
-
-	if ((file = sf_open_virtual (&vio, SFM_WRITE, &sfinfo, &vio_data)) == NULL)
-	{	printf ("\n\nLine %d : sf_open_write failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-		exit (1) ;
-		} ;
-
-	if (vfget_filelen (&vio_data) < 0)
-	{	printf ("\n\nLine %d : vfget_filelen returned negative length.\n\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	gen_short_data (data, ARRAY_LEN (data), 0) ;
-	sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-	gen_short_data (data, ARRAY_LEN (data), 1) ;
-	sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-	gen_short_data (data, ARRAY_LEN (data), 2) ;
-	sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-	sf_close (file) ;
-
-	/* Now test read. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	vio_data.offset = 0 ;
-
-	if ((file = sf_open_virtual (&vio, SFM_READ, &sfinfo, &vio_data)) == NULL)
-	{	printf ("\n\nLine %d : sf_open_write failed with error : ", __LINE__) ;
-		fflush (stdout) ;
-		puts (sf_strerror (NULL)) ;
-
-		dump_data_to_file (fname, vio_data.data, vio_data.length) ;
-		exit (1) ;
-		} ;
-
-
-	sf_read_short (file, data, ARRAY_LEN (data)) ;
-	check_short_data (data, ARRAY_LEN (data), 0, __LINE__) ;
-
-	sf_read_short (file, data, ARRAY_LEN (data)) ;
-	check_short_data (data, ARRAY_LEN (data), 1, __LINE__) ;
-
-	sf_read_short (file, data, ARRAY_LEN (data)) ;
-	check_short_data (data, ARRAY_LEN (data), 2, __LINE__) ;
-
-	sf_close (file) ;
-
-	puts ("ok") ;
-} /* vio_test */
-
diff --git a/libs/libsndfile/tests/vorbis_test.c b/libs/libsndfile/tests/vorbis_test.c
deleted file mode 100644
index 9f5797fde9..0000000000
--- a/libs/libsndfile/tests/vorbis_test.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-#include	"dft_cmp.h"
-
-#define	SAMPLE_RATE		16000
-#define	DATA_LENGTH		(SAMPLE_RATE / 8)
-
-static float data_out [DATA_LENGTH] ;
-
-static inline float
-max_float (float a, float b)
-{	return a > b ? a : b ;
-} /* max_float */
-
-static void
-vorbis_test (void)
-{	static float float_data [DFT_DATA_LENGTH] ;
-	const char * filename = "vorbis_test.oga" ;
-	SNDFILE * file ;
-	SF_INFO sfinfo ;
-	float max_abs = 0.0 ;
-	unsigned k ;
-
-	print_test_name ("vorbis_test", filename) ;
-
-	/* Generate float data. */
-	gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 1.0) ;
-
-	/* Set up output file type. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-
-	/*	The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-	**	<= 22050. Increasing the sample rate to 32000 avoids triggering it.
-	**	See https://trac.xiph.org/ticket/1229
-	*/
-	if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-	{	const char * errstr ;
-
-		errstr = sf_strerror (NULL) ;
-		if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-		{	printf ("Line %d: sf_open (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-			dump_log_buffer (NULL) ;
-			exit (1) ;
-			} ;
-
-		printf ("\n                                  Sample rate -> 32kHz    ") ;
-		sfinfo.samplerate = 32000 ;
-
-		file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-		} ;
-
-	test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	memset (float_data, 0, sizeof (float_data)) ;
-
-	/* Read the file back in again. */
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-	test_read_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-	sf_close (file) ;
-
-	for (k = 0 ; k < ARRAY_LEN (float_data) ; k ++)
-		max_abs = max_float (max_abs, fabs (float_data [k])) ;
-
-	if (max_abs > 1.021)
-	{	printf ("\n\n    Error : max_abs %f should be < 1.021.\n\n", max_abs) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-	unlink (filename) ;
-} /* vorbis_test */
-
-static void
-vorbis_quality_test (void)
-{	/*
-	**	Encode two files, one at quality 0.3 and one at quality 0.5 and then
-	**	make sure that the quality 0.3 files is the smaller of the two.
-	*/
-	const char * q3_fname = "q3_vorbis.oga" ;
-	const char * q5_fname = "q5_vorbis.oga" ;
-
-	SNDFILE *q3_file, *q5_file ;
-	SF_INFO sfinfo ;
-	int q3_size, q5_size ;
-	double quality ;
-	int k ;
-
-	print_test_name (__func__, "q[35]_vorbis.oga") ;
-
-	memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	/* Set up output file type. */
-	sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-	sfinfo.channels = 1 ;
-	sfinfo.samplerate = SAMPLE_RATE ;
-
-	/* Write the output file. */
-	q3_file = test_open_file_or_die (q3_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-	q5_file = test_open_file_or_die (q5_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-	quality = 0.3 ;
-	sf_command (q3_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-	quality = 0.5 ;
-	sf_command (q5_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-
-	for (k = 0 ; k < 5 ; k++)
-	{	gen_lowpass_noise_float (data_out, ARRAY_LEN (data_out)) ;
-		test_write_float_or_die (q3_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-		test_write_float_or_die (q5_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-		} ;
-
-	sf_close (q3_file) ;
-	sf_close (q5_file) ;
-
-	q3_size = file_length (q3_fname) ;
-	q5_size = file_length (q5_fname) ;
-
-	if (q3_size >= q5_size)
-	{	printf ("\n\nLine %d : q3 size (%d) >= q5 size (%d)\n\n", __LINE__, q3_size, q5_size) ;
-		exit (1) ;
-		} ;
-
-	puts ("ok") ;
-	unlink (q3_fname) ;
-	unlink (q5_fname) ;
-} /* vorbis_quality_test */
-
-
-
-int
-main (void)
-{
-	if (HAVE_EXTERNAL_LIBS)
-	{	vorbis_test () ;
-		vorbis_quality_test () ;
-		}
-	else
-		puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-	return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/win32_ordinal_test.c b/libs/libsndfile/tests/win32_ordinal_test.c
deleted file mode 100644
index 5324a2ed57..0000000000
--- a/libs/libsndfile/tests/win32_ordinal_test.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-** Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <sys/types.h>
-
-#include "utils.h"
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__CYGWIN__))
-#define TEST_WIN32		1
-#else
-#define TEST_WIN32		0
-#endif
-
-#if TEST_WIN32
-#include <windows.h>
-
-
-static const char * locations [] =
-{	".", "../src/", "src/", "../src/.libs/", "src/.libs/",
-	NULL
-} ; /* locations. */
-
-static int
-test_ordinal (HMODULE hmod, const char * func_name, int ordinal)
-{	char *lpmsg ;
-	void *name, *ord ;
-
-	print_test_name ("win32_ordinal_test", func_name) ;
-
-#if SIZEOF_VOIDP == 8
-#define	LPCSTR_OF_ORDINAL(x)	((LPCSTR) ((int64_t) (x)))
-#else
-#define	LPCSTR_OF_ORDINAL(x)	((LPCSTR) (x))
-#endif
-
-	ord = GetProcAddress (hmod, LPCSTR_OF_ORDINAL (ordinal)) ;
-	if ((name = GetProcAddress (hmod, func_name)) == NULL)
-	{	FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError (),
-					MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpmsg, 0, NULL) ;
-		/*-puts (lpmsg) ;-*/
-		} ;
-
-	if (name != NULL && ord != NULL && name == ord)
-	{	puts ("ok") ;
-		return 0 ;
-		} ;
-
-	puts ("fail") ;
-	return 1 ;
-} /* test_ordinal */
-
-static void
-win32_ordinal_test (void)
-{	static char buffer [1024] ;
-	static char func_name [1024] ;
-	HMODULE hmod = NULL ;
-	FILE * file = NULL ;
-	int k, ordinal, errors = 0 ;
-
-	for (k = 0 ; locations [k] != NULL ; k++)
-	{	snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.def", locations [k]) ;
-		if ((file = fopen (buffer, "r")) != NULL)
-			break ;
-		} ;
-
-	if (file == NULL)
-	{	puts ("\n\nError : cannot open DEF file.\n") ;
-		exit (1) ;
-		} ;
-
-	for (k = 0 ; locations [k] != NULL ; k++)
-	{	snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.dll", locations [k]) ;
-		if ((hmod = (HMODULE) LoadLibrary (buffer)) != NULL)
-			break ;
-		} ;
-
-	if (hmod == NULL)
-	{	puts ("\n\nError : cannot load DLL.\n") ;
-		exit (1) ;
-		} ;
-
-	while (fgets (buffer, sizeof (buffer), file) != NULL)
-	{	func_name [0] = 0 ;
-		ordinal = 0 ;
-
-		if (sscanf (buffer, "%s @%d", func_name, &ordinal) != 2)
-			continue ;
-
-		errors += test_ordinal (hmod, func_name, ordinal) ;
-		} ;
-
-	FreeLibrary (hmod) ;
-
-	fclose (file) ;
-
-	if (errors > 0)
-	{	printf ("\n\nErrors : %d\n\n", errors) ;
-		exit (1) ;
-		} ;
-
-	return ;
-} /* win32_ordinal_test */
-
-#endif
-
-int
-main (void)
-{
-#if (TEST_WIN32 && WIN32_TARGET_DLL)
-	win32_ordinal_test () ;
-#endif
-
-	return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/win32_test.c b/libs/libsndfile/tests/win32_test.c
deleted file mode 100644
index d0dc6d8ea4..0000000000
--- a/libs/libsndfile/tests/win32_test.c
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-#include "sndfile.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#define SIGNED_SIZEOF(x)	((int) sizeof (x))
-
-/* EMX is OS/2. */
-#if defined (__CYGWIN__) || defined (__EMX__)
-
-	#define		LSEEK	lseek
-	#define		FSTAT	fstat
-
-	typedef		struct stat			STATBUF ;
-	typedef		off_t				INT64 ;
-
-	static char dir_cmd [] = "ls -l" ;
-
-#elif (defined (WIN32) || defined (_WIN32))
-
-	#define		LSEEK	_lseeki64
-	#define		FSTAT	_fstati64
-
-	typedef		struct _stati64		STATBUF ;
-	typedef		__int64				INT64 ;
-
-	static char dir_cmd [] = "dir" ;
-
-#else
-
-	#define		LSEEK	lseek
-	#define		FSTAT	fstat
-
-	typedef		struct stat		STATBUF ;
-	typedef		sf_count_t		INT64 ;
-
-	#define		O_BINARY	0
-	static char dir_cmd [] = "ls -l" ;
-
-#endif
-
-static void show_fstat_error (void) ;
-static void show_lseek_error (void) ;
-static void show_stat_fstat_error (void) ;
-static void write_to_closed_file (void) ;
-
-int
-main (void)
-{
-	puts ("\n\n\n\n"
-		"This program shows up errors in the Win32 implementation of\n"
-		"a couple of POSIX API functions on some versions of windoze.\n"
-		"It can also be compiled on Linux (which works correctly) and\n"
-		"other OSes just to provide a sanity check.\n"
-		) ;
-
-	show_fstat_error () ;
-	show_lseek_error () ;
-	show_stat_fstat_error () ;
-	write_to_closed_file () ;
-
-	puts ("\n\n") ;
-
-	return 0 ;
-} /* main */
-
-static void
-show_fstat_error (void)
-{	static const char *filename = "fstat.dat" ;
-	static char data [256] ;
-
-	STATBUF 	statbuf ;
-	int fd, mode, flags ;
-
-	if (sizeof (statbuf.st_size) != sizeof (INT64))
-	{	printf ("\n\nLine %d: Error, sizeof (statbuf.st_size) != 8.\n\n", __LINE__) ;
-		return ;
-		} ;
-
-	puts ("\n64 bit fstat() test.\n--------------------") ;
-
-	printf ("0) Create a file, write %d bytes and close it.\n", SIGNED_SIZEOF (data)) ;
-	mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-	flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-	if ((fd = open (filename, mode, flags)) < 0)
-	{	printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-	assert (write (fd, data, sizeof (data)) > 0) ;
-	close (fd) ;
-
-	printf ("1) Re-open file in read/write mode and write another %d bytes at the end.\n", SIGNED_SIZEOF (data)) ;
-	mode = O_RDWR | O_BINARY ;
-	flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-	if ((fd = open (filename, mode, flags)) < 0)
-	{	printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-	LSEEK (fd, 0, SEEK_END) ;
-	assert (write (fd, data, sizeof (data)) > 0) ;
-
-	printf ("2) Now use system (\"%s %s\") to show the file length.\n\n", dir_cmd, filename) ;
-
-	/* Would use snprintf, but thats not really available on windows. */
-	memset (data, 0, sizeof (data)) ;
-	strncpy (data, dir_cmd, sizeof (data) - 1) ;
-	strncat (data, " ", sizeof (data) - 1 - strlen (data)) ;
-	strncat (data, filename, sizeof (data) - 1 - strlen (data)) ;
-
-	assert (system (data) >= 0) ;
-	puts ("") ;
-
-	printf ("3) Now use fstat() to get the file length.\n") ;
-	if (FSTAT (fd, &statbuf) != 0)
-	{	printf ("\n\nLine %d: fstat() returned error : %s\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-
-	printf ("4) According to fstat(), the file length is %ld, ", (long) statbuf.st_size) ;
-
-	close (fd) ;
-
-	if (statbuf.st_size != 2 * sizeof (data))
-		printf ("but thats just plain ***WRONG***.\n\n") ;
-	else
-	{	printf ("which is correct.\n\n") ;
-		unlink (filename) ;
-		} ;
-
-} /* show_fstat_error */
-
-static void
-show_lseek_error (void)
-{	static const char *filename = "fstat.dat" ;
-	static char data [256] ;
-
-	INT64	retval ;
-	int fd, mode, flags ;
-
-	puts ("\n64 bit lseek() test.\n--------------------") ;
-
-	printf ("0) Create a file, write %d bytes and close it.\n", SIGNED_SIZEOF (data)) ;
-	mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-	flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-	if ((fd = open (filename, mode, flags)) < 0)
-	{	printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-	assert (write (fd, data, sizeof (data)) > 0) ;
-	close (fd) ;
-
-	printf ("1) Re-open file in read/write mode and write another %d bytes at the end.\n", SIGNED_SIZEOF (data)) ;
-	mode = O_RDWR | O_BINARY ;
-	flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-	if ((fd = open (filename, mode, flags)) < 0)
-	{	printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-
-	LSEEK (fd, 0, SEEK_END) ;
-	assert (write (fd, data, sizeof (data)) > 0) ;
-
-	printf ("2) Now use system (\"%s %s\") to show the file length.\n\n", dir_cmd, filename) ;
-
-	/* Would use snprintf, but thats not really available on windows. */
-	memset (data, 0, sizeof (data)) ;
-	strncpy (data, dir_cmd, sizeof (data) - 1) ;
-	strncat (data, " ", sizeof (data) - 1 - strlen (data)) ;
-	strncat (data, filename, sizeof (data) - 1 - strlen (data)) ;
-
-	assert (system (data) >= 0) ;
-	puts ("") ;
-
-	printf ("3) Now use lseek() to go to the end of the file.\n") ;
-	retval = LSEEK (fd, 0, SEEK_END) ;
-
-	printf ("4) We are now at position %ld, ", (long) retval) ;
-
-	close (fd) ;
-
-	if (retval != 2 * sizeof (data))
-		printf ("but thats just plain ***WRONG***.\n\n") ;
-	else
-	{	printf ("which is correct.\n\n") ;
-		unlink (filename) ;
-		} ;
-
-} /* show_lseek_error */
-
-static void
-show_stat_fstat_error (void)
-{	static const char *filename = "stat_fstat.dat" ;
-	static char data [256] ;
-
-	int fd, mode, flags ;
-	int stat_size, fstat_size ;
-	struct stat buf ;
-
-	/* Known to fail on WinXP. */
-	puts ("\nstat/fstat test.\n----------------") ;
-
-	printf ("0) Create a file and write %d bytes.\n", SIGNED_SIZEOF (data)) ;
-
-	mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-	flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-	if ((fd = open (filename, mode, flags)) < 0)
-	{	printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-
-	assert (write (fd, data, sizeof (data)) > 0) ;
-
-	printf ("1) Now call stat and fstat on the file and retreive the file lengths.\n") ;
-
-	if (stat (filename, &buf) != 0)
-	{	printf ("\n\nLine %d: stat() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		goto error_exit ;
-		} ;
-	stat_size = buf.st_size ;
-
-	if (fstat (fd, &buf) != 0)
-	{	printf ("\n\nLine %d: fstat() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		goto error_exit ;
-		} ;
-	fstat_size = buf.st_size ;
-
-	printf ("2) Size returned by stat and fstat is %d and %d, ", stat_size, fstat_size) ;
-
-
-	if (stat_size == 0 || stat_size != fstat_size)
-		printf ("but thats just plain ***WRONG***.\n\n") ;
-	else
-		printf ("which is correct.\n\n") ;
-
-error_exit :
-
-	close (fd) ;
-	unlink (filename) ;
-
-	return ;
-} /* show_stat_fstat_error */
-
-
-static void
-write_to_closed_file (void)
-{	const char * filename = "closed_write_test.txt" ;
-	struct stat buf ;
-	FILE * file ;
-	int		fd ;
-
-	puts ("\nWrite to closed file test.\n--------------------------") ;
-
-	printf ("0) First we open file for write using fopen().\n") ;
-	if ((file = fopen (filename, "w")) == NULL)
-	{	printf ("\n\nLine %d: fopen() failed : %s\n\n", __LINE__, strerror (errno)) ;
-		return ;
-		} ;
-
-	printf ("1) Now we grab the file descriptor fileno().\n") ;
-	fd = fileno (file) ;
-
-	printf ("2) Write some text via the file descriptor.\n") ;
-	assert (write (fd, "a\n", 2) > 0) ;
-
-	printf ("3) Now we close the file using fclose().\n") ;
-	fclose (file) ;
-
-	stat (filename, &buf) ;
-	printf ("   File size is %d bytes.\n", (int) buf.st_size) ;
-
-	printf ("4) Now write more data to the file descriptor which should fail.\n") ;
-	if (write (fd, "b\n", 2) < 0)
-		printf ("5) Good, write returned an error code as it should have.\n") ;
-	else
-	{	printf ("5) Attempting to write to a closed file should have failed but didn't! *** WRONG ***\n") ;
-
-		stat (filename, &buf) ;
-		printf ("   File size is %d bytes.\n", (int) buf.st_size) ;
-		} ;
-
-	unlink (filename) ;
-
-	return ;
-} /* write_to_closed_file */
diff --git a/libs/libsndfile/tests/write_read_test.c b/libs/libsndfile/tests/write_read_test.c
deleted file mode 100644
index 9f8a8f538b..0000000000
--- a/libs/libsndfile/tests/write_read_test.c
+++ /dev/null
@@ -1,3731 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include	<math.h>
-
-#if (defined (WIN32) || defined (_WIN32))
-#include	<fcntl.h>
-static int truncate (const char *filename, int ignored) ;
-#endif
-
-#include	<sndfile.h>
-
-#include	"utils.h"
-#include	"generate.h"
-
-#define	SAMPLE_RATE			11025
-#define	DATA_LENGTH			(1<<12)
-
-#define	SILLY_WRITE_COUNT	(234)
-
-static void	pcm_test_char (const char *str, int format, int long_file_okz) ;
-static void	pcm_test_short (const char *str, int format, int long_file_okz) ;
-static void	pcm_test_24bit (const char *str, int format, int long_file_okz) ;
-static void	pcm_test_int (const char *str, int format, int long_file_okz) ;
-static void	pcm_test_float (const char *str, int format, int long_file_okz) ;
-static void	pcm_test_double (const char *str, int format, int long_file_okz) ;
-
-static void empty_file_test (const char *filename, int format) ;
-
-typedef union
-{	double d [DATA_LENGTH] ;
-	float f [DATA_LENGTH] ;
-	int i [DATA_LENGTH] ;
-	short s [DATA_LENGTH] ;
-	char c [DATA_LENGTH] ;
-} BUFFER ;
-
-static	BUFFER	orig_data ;
-static	BUFFER	test_data ;
-
-int
-main (int argc, char **argv)
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	count_open_files () ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav   - test WAV file functions (little endian)\n") ;
-		printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-		printf ("           au    - test AU file functions\n") ;
-		printf ("           avr   - test AVR file functions\n") ;
-		printf ("           caf   - test CAF file functions\n") ;
-		printf ("           raw   - test RAW header-less PCM file functions\n") ;
-		printf ("           paf   - test PAF file functions\n") ;
-		printf ("           svx   - test 8SVX/16SV file functions\n") ;
-		printf ("           nist  - test NIST Sphere file functions\n") ;
-		printf ("           ircam - test IRCAM file functions\n") ;
-		printf ("           voc   - Create Voice file functions\n") ;
-		printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-		printf ("           flac  - test FLAC file functions\n") ;
-		printf ("           mpc2k - test MPC 2000 file functions\n") ;
-		printf ("           rf64  - test RF64 file functions\n") ;
-		printf ("           all   - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = !strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	pcm_test_char	("char.wav"		, SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.wav"		, SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_char	("char.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.rifx"		, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_24bit	("24bit.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float.wav"	, SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.wav"	, SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		pcm_test_float	("float.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		pcm_test_float	("float.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	pcm_test_char	("char_u8.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char	("char_s8.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.aiff"		, SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_short	("short_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_short	("short_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_short	("dwvw16.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_16, SF_TRUE) ;
-		pcm_test_24bit	("dwvw24.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_24, SF_TRUE) ;
-
-		pcm_test_float	("float.aifc"	, SF_FORMAT_AIFF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.aifc"	, SF_FORMAT_AIFF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	pcm_test_char	("char.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.au"	, SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.au", SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		pcm_test_char	("char_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	pcm_test_char	("char.caf"		, SF_FORMAT_CAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.caf"	, SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.caf"	, SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.caf"		, SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.caf"	, SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.caf"	, SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		pcm_test_short	("short_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_le.caf", SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "raw"))
-	{	pcm_test_char	("char_s8.raw"	, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_char	("char_u8.raw"	, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, SF_FALSE) ;
-
-		pcm_test_short	("short_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_24bit	("24bit_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int	("int_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-		pcm_test_double	("double_le.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_be.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	pcm_test_char	("char_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_char	("char_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-		pcm_test_24bit	("24bit_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	pcm_test_char	("char.svx" , SF_FORMAT_SVX | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-		empty_file_test ("empty_char.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-		empty_file_test ("empty_short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	pcm_test_short	("short_le.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_24bit	("24bit_be.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.nist"	, SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_be.nist"	, SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	pcm_test_short	("short_be.ircam"	, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.ircam"	, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.ircam"		, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.ircam"		, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.ircam"	, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.ircam"	, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	pcm_test_char 	("char.voc" , SF_FORMAT_VOC | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	pcm_test_short	("short_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.mat4"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.mat4"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		empty_file_test ("empty_short.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.mat4", SF_FORMAT_MAT4 | SF_FORMAT_FLOAT) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	pcm_test_char 	("char_be.mat5"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char 	("char_le.mat5"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.mat5"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.mat5"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		increment_open_file_count () ;
-
-		empty_file_test ("empty_char.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.mat5", SF_FORMAT_MAT5 | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	pcm_test_char 	("char.pvf"	, SF_FORMAT_PVF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int.pvf"	, SF_FORMAT_PVF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	pcm_test_short	("short.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mpc2k"))
-	{	pcm_test_short	("short.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "avr"))
-	{	pcm_test_char 	("char_u8.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char 	("char_s8.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	pcm_test_char	("char.w64"		, SF_FORMAT_W64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.w64"		, SF_FORMAT_W64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.w64"	, SF_FORMAT_W64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.w64"	, SF_FORMAT_W64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.w64", SF_FORMAT_W64 | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sds"))
-	{	pcm_test_char	("char.sds"		, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.sds"	, SF_FORMAT_SDS | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.sds"	, SF_FORMAT_SDS | SF_FORMAT_PCM_24, SF_FALSE) ;
-
-		empty_file_test ("empty_char.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_S8) ;
-		empty_file_test ("empty_short.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sd2"))
-	{	pcm_test_char	("char.sd2"		, SF_FORMAT_SD2 | SF_FORMAT_PCM_S8, SF_TRUE) ;
-		pcm_test_short	("short.sd2"	, SF_FORMAT_SD2 | SF_FORMAT_PCM_16, SF_TRUE) ;
-		pcm_test_24bit	("24bit.sd2"	, SF_FORMAT_SD2 | SF_FORMAT_PCM_24, SF_TRUE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "flac"))
-	{	if (HAVE_EXTERNAL_LIBS)
-		{	pcm_test_char	("char.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, SF_TRUE) ;
-			pcm_test_short	("short.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, SF_TRUE) ;
-			pcm_test_24bit	("24bit.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, SF_TRUE) ;
-			}
-		else
-			puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	pcm_test_char	("char.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.rf64"		, SF_FORMAT_RF64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		empty_file_test ("empty_char.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.rf64", SF_FORMAT_RF64 | SF_FORMAT_FLOAT) ;
-		/* Lite remove end */
-
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	/* Only open file descriptors should be stdin, stdout and stderr. */
-	check_open_file_count_or_die (__LINE__) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Helper functions and macros.
-*/
-
-static void	create_short_file (const char *filename) ;
-
-#define	CHAR_ERROR(x,y)		(abs ((x) - (y)) > 255)
-#define	INT_ERROR(x,y)		(((x) - (y)) != 0)
-#define	TRIBYTE_ERROR(x,y)	(abs ((x) - (y)) > 255)
-#define	FLOAT_ERROR(x,y)	(fabs ((x) - (y)) > 1e-5)
-
-#define CONVERT_DATA(k,len,new,orig)					\
-			{	for ((k) = 0 ; (k) < (len) ; (k) ++)	\
-					(new) [k] = (orig) [k] ;			\
-				}
-
-
-/*======================================================================================
-*/
-
-static void mono_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_char_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_char (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	short		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_char", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-	orig = orig_data.s ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_char_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_char_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_char_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_char_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_char */
-
-static void
-mono_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (short)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (CHAR_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_short (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (CHAR_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (CHAR_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (CHAR_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (CHAR_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_short (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_char_test */
-
-static void
-stereo_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_short_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (short)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (CHAR_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (CHAR_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_short (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_short_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (CHAR_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (CHAR_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (CHAR_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_char_test */
-
-static void
-mono_rdwr_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_short_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_short_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (CHAR_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_short (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_short_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (CHAR_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_short (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_short_test */
-
-static void
-new_rdwr_char_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	short		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_short_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_short_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_short_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_short_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_short_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_char_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_short_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_short (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	short		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_short", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-	orig = orig_data.s ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_short_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_short_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_short_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_short_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_short */
-
-static void
-mono_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (short)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_short (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_short (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_short_test */
-
-static void
-stereo_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_short_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (short)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_short (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_short_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_short_test */
-
-static void
-mono_rdwr_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	short		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_short_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_short_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (INT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_short (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_short_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (INT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_short (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_short_test */
-
-static void
-new_rdwr_short_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	short		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_short_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_short_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_short_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_short_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_short_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_short_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_24bit_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_24bit (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	int		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_24bit", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-	orig = orig_data.i ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_24bit_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_24bit */
-
-static void
-mono_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (int)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (TRIBYTE_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_int (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (TRIBYTE_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (TRIBYTE_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (TRIBYTE_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (TRIBYTE_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_int (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_24bit_test */
-
-static void
-stereo_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_int_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (int)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (TRIBYTE_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (TRIBYTE_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_int (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_int_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (TRIBYTE_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (TRIBYTE_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (TRIBYTE_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_24bit_test */
-
-static void
-mono_rdwr_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_int_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_int_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (TRIBYTE_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_int (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_int_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (TRIBYTE_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_int (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_int_test */
-
-static void
-new_rdwr_24bit_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	int		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_int_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_int_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_int_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_int_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_int_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_24bit_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_int_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_int (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	int		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_int", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-	orig = orig_data.i ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_int_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_int_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_int_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_int_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_int */
-
-static void
-mono_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (int)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_int (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (INT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_int (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_int_test */
-
-static void
-stereo_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_int_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (int)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_int (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_int_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (INT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_int_test */
-
-static void
-mono_rdwr_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	int		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_int_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_int_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (INT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_int (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_int_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (INT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_int (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_int_test */
-
-static void
-new_rdwr_int_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	int		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.i ;
-	test = test_data.i ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_int_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_int_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_int_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_int_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_int_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_int_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_float_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_float (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	float		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_float", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-	orig = orig_data.f ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_float_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_float_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_float_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_float_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_float */
-
-static void
-mono_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	float		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.f ;
-	test = test_data.f ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_float_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_float_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (float)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_float_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_float (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_float_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_float_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_float_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_float_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_float (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_float_test */
-
-static void
-stereo_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	float		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-	orig = orig_data.f ;
-	test = test_data.f ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_float_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (float)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_float_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_float_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_float (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_float_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_float_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_float_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_float_test */
-
-static void
-mono_rdwr_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	float		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.f ;
-	test = test_data.f ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_float_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_float_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (FLOAT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_float (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_float_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (FLOAT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_float (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_float_test */
-
-static void
-new_rdwr_float_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	float		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.f ;
-	test = test_data.f ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_float_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_float_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_float_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_float_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_float_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_float_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_double_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_double (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	double		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_double", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-	orig = orig_data.d ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_double_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		mono_rdwr_double_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_double_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-			(format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-		new_rdwr_double_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_double */
-
-static void
-mono_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.d ;
-	test = test_data.d ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_double_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_double_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (double)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_double_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_double (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_double_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if (FLOAT_ERROR (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_double (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_double_test */
-
-static void
-stereo_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-	orig = orig_data.d ;
-	test = test_data.d ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_double_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof (double)) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-				__LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_double (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_double_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_double_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if (FLOAT_ERROR (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_double_test */
-
-static void
-mono_rdwr_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	double		*orig, *test ;
-	int			k, pass ;
-
-	orig = orig_data.d ;
-	test = test_data.d ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_double_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_double_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (FLOAT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_double (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_double_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if (FLOAT_ERROR (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_double (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_double_test */
-
-static void
-new_rdwr_double_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	double		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.d ;
-	test = test_data.d ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_double_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_double_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_double_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_double_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_double_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_double_test */
-
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-empty_file_test (const char *filename, int format)
-{	SNDFILE		*file ;
-	SF_INFO	info ;
-	int allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("empty_file_test", filename) ;
-
-	unlink (filename) ;
-
-	info.samplerate = 48000 ;
-	info.channels = 2 ;
-	info.format = format ;
-
-	if (sf_format_check (&info) == SF_FALSE)
-	{	info.channels = 1 ;
-		if (sf_format_check (&info) == SF_FALSE)
-		{	puts ("invalid file format") ;
-			return ;
-			} ;
-		} ;
-
-	/* Create an empty file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &info, allow_fd, __LINE__) ;
-	sf_close (file) ;
-
-	/* Open for read and check the length. */
-	file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-	if (SF_COUNT_TO_LONG (info.frames) != 0)
-	{	printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Open for read/write and check the length. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &info, allow_fd, __LINE__) ;
-
-	if (SF_COUNT_TO_LONG (info.frames) != 0)
-	{	printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Open for read and check the length. */
-	file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-	if (SF_COUNT_TO_LONG (info.frames) != 0)
-	{	printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	check_open_file_count_or_die (__LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-
-	return ;
-} /* empty_file_test */
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-create_short_file (const char *filename)
-{	FILE *file ;
-
-	if (! (file = fopen (filename, "w")))
-	{	printf ("create_short_file : fopen (%s, \"w\") failed.", filename) ;
-		fflush (stdout) ;
-		perror (NULL) ;
-		exit (1) ;
-		} ;
-
-	fprintf (file, "This is the file data.\n") ;
-
-	fclose (file) ;
-} /* create_short_file */
-
-#if (defined (WIN32) || defined (__WIN32))
-
-/* Win32 does not have truncate (nor does it have the POSIX function ftruncate).
-** Hack somethng up here to over come this. This function can only truncate to a
-** length of zero.
-*/
-
-static int
-truncate (const char *filename, int ignored)
-{	int fd ;
-
-	ignored = 0 ;
-
-	if ((fd = open (filename, O_RDWR | O_TRUNC | O_BINARY)) < 0)
-		return 0 ;
-
-	close (fd) ;
-
-	return 0 ;
-} /* truncate */
-
-#endif
-
-static void
-multi_seek_test (const char * filename, int format)
-{	SNDFILE * file ;
-	SF_INFO info ;
-	sf_count_t pos ;
-	int k ;
-
-	/* This test doesn't work on the following. */
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_RAW :
-			return ;
-
-		default :
-			break ;
-		} ;
-
-	memset (&info, 0, sizeof (info)) ;
-
-	generate_file (filename, format, 88200) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-
-	for (k = 0 ; k < 10 ; k++)
-	{	pos = info.frames / (k + 2) ;
-		test_seek_or_die (file, pos, SEEK_SET, pos, info.channels, __LINE__) ;
-		} ;
-
-	sf_close (file) ;
-} /* multi_seek_test */
-
-static void
-write_seek_extend_test (const char * filename, int format)
-{	SNDFILE * file ;
-	SF_INFO info ;
-	short	*orig, *test ;
-	unsigned items, k ;
-
-	/* This test doesn't work on the following. */
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_FLAC :
-		case SF_FORMAT_HTK :
-		case SF_FORMAT_PAF :
-		case SF_FORMAT_SDS :
-		case SF_FORMAT_SVX :
-			return ;
-
-		default :
-			break ;
-		} ;
-
-	memset (&info, 0, sizeof (info)) ;
-
-	info.samplerate = 48000 ;
-	info.channels = 1 ;
-	info.format = format ;
-
-	items = 512 ;
-	exit_if_true (items > ARRAY_LEN (orig_data.s), "Line %d : Bad assumption.\n", __LINE__) ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig_data.s) ; k++)
-		orig [k] = 0x3fff ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_FALSE, __LINE__) ;
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-
-	/* Extend the file using a seek. */
-	test_seek_or_die (file, 2 * items, SEEK_SET, 2 * items, info.channels, __LINE__) ;
-
-	test_writef_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-	test_read_short_or_die (file, 0, test, 3 * items, __LINE__) ;
-	sf_close (file) ;
-
-	/* Can't do these formats due to scaling. */
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-			return ;
-		default :
-			break ;
-		} ;
-
-	for (k = 0 ; k < items ; k++)
-	{	exit_if_true (test [k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, k, test [k]) ;
-		exit_if_true (test [items + k] != 0, "Line %d : test [%d] == %d, should be 0.\n", __LINE__, items + k, test [items + k]) ;
-		exit_if_true (test [2 * items + k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, 2 * items + k, test [2 * items + k]) ;
-		} ;
-
-	return ;
-} /* write_seek_extend_test */
-
-
diff --git a/libs/libsndfile/tests/write_read_test.def b/libs/libsndfile/tests/write_read_test.def
deleted file mode 100644
index 3316aec577..0000000000
--- a/libs/libsndfile/tests/write_read_test.def
+++ /dev/null
@@ -1,75 +0,0 @@
-autogen definitions write_read_test.tpl;
-
-data_type = {
-	type_name		= char ;
-	data_type		= short ;
-	data_field		= s ;
-	error_func		= CHAR_ERROR ;
-	format_char		= "0x%X" ;
-	max_val			= "32000.0" ;
-	max_error		= "255" ;
-	} ;
-
-data_type = {
-	type_name		= short ;
-	data_type		= short ;
-	data_field		= s ;
-	error_func		= INT_ERROR ;
-	format_char		= "0x%X" ;
-	max_val			= "32000.0" ;
-	max_error		= "0" ;
-	} ;
-
-data_type = {
-	type_name		= "20bit" ;
-	data_type		= int ;
-	data_field		= i ;
-	error_func		= BIT_20_ERROR ;
-	format_char		= "0x%X" ;
-	max_val			= "(1.0 * 0x7F00000)" ;
-	max_error		= "4096" ;
-	} ;
-
-data_type = {
-	type_name		= "24bit" ;
-	data_type		= int ;
-	data_field		= i ;
-	error_func		= TRIBYTE_ERROR ;
-	format_char		= "0x%X" ;
-	max_val			= "(1.0 * 0x7F000000)" ;
-	max_error		= "256" ;
-	} ;
-
-data_type = {
-	type_name		= int ;
-	data_type		= int ;
-	data_field		= i ;
-	error_func		= INT_ERROR ;
-	format_char		= "0x%X" ;
-	max_val			= "(1.0 * 0x7F000000)" ;
-	max_error		= "0" ;
-	} ;
-
-/* Lite remove start */
-
-data_type = {
-	type_name		= float ;
-	data_type		= float ;
-	data_field		= f ;
-	error_func		= FLOAT_ERROR ;
-	format_char		= "%g" ;
-	max_val			= "1.0" ;
-	max_error		= "0" ;
-	} ;
-
-data_type = {
-	type_name		= double ;
-	data_type		= double ;
-	data_field		= d ;
-	error_func		= FLOAT_ERROR ;
-	format_char		= "%g" ;
-	max_val			= "1.0" ;
-	max_error		= "0" ;
-	} ;
-
-/* Lite remove end */
diff --git a/libs/libsndfile/tests/write_read_test.tpl b/libs/libsndfile/tests/write_read_test.tpl
deleted file mode 100644
index 55bf1db173..0000000000
--- a/libs/libsndfile/tests/write_read_test.tpl
+++ /dev/null
@@ -1,1184 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-#include "generate.h"
-
-#define	SAMPLE_RATE			11025
-#define	DATA_LENGTH			(1 << 12)
-
-#define	SILLY_WRITE_COUNT	(234)
-
-[+ FOR data_type
-+]static void	pcm_test_[+ (get "type_name") +] (const char *str, int format, int long_file_okz) ;
-[+ ENDFOR data_type
-+]
-static void empty_file_test (const char *filename, int format) ;
-
-typedef union
-{	double d [DATA_LENGTH] ;
-	float f [DATA_LENGTH] ;
-	int i [DATA_LENGTH] ;
-	short s [DATA_LENGTH] ;
-	char c [DATA_LENGTH] ;
-} BUFFER ;
-
-static	BUFFER	orig_data ;
-static	BUFFER	test_data ;
-
-int
-main (int argc, char **argv)
-{	int		do_all = 0 ;
-	int		test_count = 0 ;
-
-	count_open_files () ;
-
-	if (argc != 2)
-	{	printf ("Usage : %s <test>\n", argv [0]) ;
-		printf ("    Where <test> is one of the following:\n") ;
-		printf ("           wav   - test WAV file functions (little endian)\n") ;
-		printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-		printf ("           au    - test AU file functions\n") ;
-		printf ("           avr   - test AVR file functions\n") ;
-		printf ("           caf   - test CAF file functions\n") ;
-		printf ("           raw   - test RAW header-less PCM file functions\n") ;
-		printf ("           paf   - test PAF file functions\n") ;
-		printf ("           svx   - test 8SVX/16SV file functions\n") ;
-		printf ("           nist  - test NIST Sphere file functions\n") ;
-		printf ("           ircam - test IRCAM file functions\n") ;
-		printf ("           voc   - Create Voice file functions\n") ;
-		printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-		printf ("           flac  - test FLAC file functions\n") ;
-		printf ("           mpc2k - test MPC 2000 file functions\n") ;
-		printf ("           rf64  - test RF64 file functions\n") ;
-		printf ("           all   - perform all tests\n") ;
-		exit (1) ;
-		} ;
-
-	do_all = !strcmp (argv [1], "all") ;
-
-	if (do_all || ! strcmp (argv [1], "wav"))
-	{	pcm_test_char	("char.wav"		, SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.wav"	, SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.wav"		, SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_char	("char.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.rifx"		, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_24bit	("24bit.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float.wav"	, SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.wav"	, SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		pcm_test_float	("float.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.rifx"	, SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		pcm_test_float	("float.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.wavex"	, SF_FORMAT_WAVEX | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "aiff"))
-	{	pcm_test_char	("char_u8.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char	("char_s8.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.aiff"	, SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.aiff"		, SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_short	("short_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_sowt.aifc"	, SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		pcm_test_short	("short_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_twos.aifc"	, SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_short	("dwvw16.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_16, SF_TRUE) ;
-		pcm_test_24bit	("dwvw24.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_24, SF_TRUE) ;
-
-		pcm_test_float	("float.aifc"	, SF_FORMAT_AIFF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.aifc"	, SF_FORMAT_AIFF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "au"))
-	{	pcm_test_char	("char.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.au"	, SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.au"	, SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.au", SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		pcm_test_char	("char_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_le.au"	, SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "caf"))
-	{	pcm_test_char	("char.caf"		, SF_FORMAT_CAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.caf"	, SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.caf"	, SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.caf"		, SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.caf"	, SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.caf"	, SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		pcm_test_short	("short_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float_le.caf"	, SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_le.caf", SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		pcm_test_short	("alac16.caf"	, SF_FORMAT_CAF | SF_FORMAT_ALAC_16, SF_FALSE) ;
-		pcm_test_20bit	("alac20.caf"	, SF_FORMAT_CAF | SF_FORMAT_ALAC_20, SF_FALSE) ;
-		pcm_test_24bit	("alac24.caf"	, SF_FORMAT_CAF | SF_FORMAT_ALAC_24, SF_FALSE) ;
-		pcm_test_int	("alac32.caf"	, SF_FORMAT_CAF | SF_FORMAT_ALAC_32, SF_FALSE) ;
-
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "raw"))
-	{	pcm_test_char	("char_s8.raw"	, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_char	("char_u8.raw"	, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, SF_FALSE) ;
-
-		pcm_test_short	("short_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_24bit	("24bit_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int	("int_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float_le.raw"	, SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_be.raw"	, SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-		pcm_test_double	("double_le.raw", SF_ENDIAN_LITTLE	| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_be.raw", SF_ENDIAN_BIG		| SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-		test_count++ ;
-		} ;
-
-	/* Lite remove start */
-	if (do_all || ! strcmp (argv [1], "paf"))
-	{	pcm_test_char	("char_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_char	("char_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.paf", SF_ENDIAN_LITTLE	| SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-		pcm_test_24bit	("24bit_be.paf", SF_ENDIAN_BIG		| SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "svx"))
-	{	pcm_test_char	("char.svx" , SF_FORMAT_SVX | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-		empty_file_test ("empty_char.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-		empty_file_test ("empty_short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "nist"))
-	{	pcm_test_short	("short_le.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_be.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit_le.nist", SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_24bit	("24bit_be.nist", SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int_le.nist"	, SF_ENDIAN_LITTLE	| SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_be.nist"	, SF_ENDIAN_BIG		| SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "ircam"))
-	{	pcm_test_short	("short_be.ircam"	, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.ircam"	, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.ircam"		, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.ircam"		, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.ircam"	, SF_ENDIAN_BIG	| SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.ircam"	, SF_ENDIAN_LITTLE	| SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "voc"))
-	{	pcm_test_char 	("char.voc" , SF_FORMAT_VOC | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat4"))
-	{	pcm_test_short	("short_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.mat4"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.mat4"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_be.mat4"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_le.mat4"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		empty_file_test ("empty_short.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.mat4", SF_FORMAT_MAT4 | SF_FORMAT_FLOAT) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mat5"))
-	{	pcm_test_char 	("char_be.mat5"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char 	("char_le.mat5"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_short	("short_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int_be.mat5"		, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_int 	("int_le.mat5"		, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		pcm_test_float	("float_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_float	("float_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double_be.mat5"	, SF_ENDIAN_BIG	| SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		pcm_test_double	("double_le.mat5"	, SF_ENDIAN_LITTLE	| SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-		increment_open_file_count () ;
-
-		empty_file_test ("empty_char.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.mat5", SF_FORMAT_MAT5 | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "pvf"))
-	{	pcm_test_char 	("char.pvf"	, SF_FORMAT_PVF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_int	("int.pvf"	, SF_FORMAT_PVF | SF_FORMAT_PCM_32, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "htk"))
-	{	pcm_test_short	("short.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "mpc2k"))
-	{	pcm_test_short	("short.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "avr"))
-	{	pcm_test_char 	("char_u8.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_char 	("char_s8.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.avr"	, SF_FORMAT_AVR | SF_FORMAT_PCM_16, SF_FALSE) ;
-		test_count++ ;
-		} ;
-	/* Lite remove end */
-
-	if (do_all || ! strcmp (argv [1], "w64"))
-	{	pcm_test_char	("char.w64"		, SF_FORMAT_W64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.w64"	, SF_FORMAT_W64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.w64"		, SF_FORMAT_W64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-		/* Lite remove start */
-		pcm_test_float	("float.w64"	, SF_FORMAT_W64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.w64"	, SF_FORMAT_W64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		/* Lite remove end */
-
-		empty_file_test ("empty_char.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.w64", SF_FORMAT_W64 | SF_FORMAT_FLOAT) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sds"))
-	{	pcm_test_char	("char.sds"		, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, SF_FALSE) ;
-		pcm_test_short	("short.sds"	, SF_FORMAT_SDS | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.sds"	, SF_FORMAT_SDS | SF_FORMAT_PCM_24, SF_FALSE) ;
-
-		empty_file_test ("empty_char.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_S8) ;
-		empty_file_test ("empty_short.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "sd2"))
-	{	pcm_test_char	("char.sd2"		, SF_FORMAT_SD2 | SF_FORMAT_PCM_S8, SF_TRUE) ;
-		pcm_test_short	("short.sd2"	, SF_FORMAT_SD2 | SF_FORMAT_PCM_16, SF_TRUE) ;
-		pcm_test_24bit	("24bit.sd2"	, SF_FORMAT_SD2 | SF_FORMAT_PCM_24, SF_TRUE) ;
-		pcm_test_int	("32bit.sd2"	, SF_FORMAT_SD2 | SF_FORMAT_PCM_32, SF_TRUE) ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "flac"))
-	{	if (HAVE_EXTERNAL_LIBS)
-		{	pcm_test_char	("char.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, SF_TRUE) ;
-			pcm_test_short	("short.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, SF_TRUE) ;
-			pcm_test_24bit	("24bit.flac"	, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, SF_TRUE) ;
-			}
-		else
-			puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-		test_count++ ;
-		} ;
-
-	if (do_all || ! strcmp (argv [1], "rf64"))
-	{	pcm_test_char	("char.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-		pcm_test_short	("short.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-		pcm_test_24bit	("24bit.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-		pcm_test_int	("int.rf64"		, SF_FORMAT_RF64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-		/* Lite remove start */
-		pcm_test_float	("float.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-		pcm_test_double	("double.rf64"	, SF_FORMAT_RF64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-		empty_file_test ("empty_char.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_U8) ;
-		empty_file_test ("empty_short.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-		empty_file_test ("empty_float.rf64", SF_FORMAT_RF64 | SF_FORMAT_FLOAT) ;
-		/* Lite remove end */
-
-		test_count++ ;
-		} ;
-
-	if (test_count == 0)
-	{	printf ("Mono : ************************************\n") ;
-		printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-		printf ("Mono : ************************************\n") ;
-		return 1 ;
-		} ;
-
-	/* Only open file descriptors should be stdin, stdout and stderr. */
-	check_open_file_count_or_die (__LINE__) ;
-
-	return 0 ;
-} /* main */
-
-/*============================================================================================
-**	Helper functions and macros.
-*/
-
-static void	create_short_file (const char *filename) ;
-
-#define	CHAR_ERROR(x, y)		(abs ((x) - (y)) > 255)
-#define	INT_ERROR(x, y)			(((x) - (y)) != 0)
-#define	BIT_20_ERROR(x, y)		(abs ((x) - (y)) > 4095)
-#define	TRIBYTE_ERROR(x, y)		(abs ((x) - (y)) > 255)
-#define	FLOAT_ERROR(x, y)		(fabs ((x) - (y)) > 1e-5)
-
-#define CONVERT_DATA(k, len, new, orig)					\
-			{	for ((k) = 0 ; (k) < (len) ; (k) ++)	\
-					(new) [k] = (orig) [k] ;			\
-				}
-
-[+ FOR data_type
-+]
-/*======================================================================================
-*/
-
-static void mono_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_[+ (get "type_name") +] (const char *filename, int format, int long_file_ok)
-{	SF_INFO		sfinfo ;
-	[+ (get "data_type") +]		*orig ;
-	int			k, allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("pcm_test_[+ (get "type_name") +]", filename) ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, [+ (get "max_val") +]) ;
-
-	orig = orig_data.[+ (get "data_field") +] ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	/* Some test broken out here. */
-
-	mono_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* Sub format DWVW does not allow seeking. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	unlink (filename) ;
-		printf ("no seek : ok\n") ;
-		return ;
-		} ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC
-		&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_16
-		&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_20
-		&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_24
-		&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_32
-		)
-		mono_rdwr_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* If the format doesn't support stereo we're done. */
-	sfinfo.channels = 2 ;
-	if (sf_format_check (&sfinfo) == 0)
-	{	unlink (filename) ;
-		puts ("no stereo : ok") ;
-		return ;
-		} ;
-
-	stereo_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-	/* New read/write test. Not sure if this is needed yet. */
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF
-			&& (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC
-			&& (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC
-			&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_16
-			&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_20
-			&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_24
-			&& (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_32
-			)
-		new_rdwr_[+ (get "type_name") +]_test (filename, format, allow_fd) ;
-
-	delete_file (format, filename) ;
-
-	puts ("ok") ;
-	return ;
-} /* pcm_test_[+ (get "type_name") +] */
-
-static void
-mono_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	[+ (get "data_type") +]		*orig, *test ;
-	sf_count_t	count ;
-	int			k, items, total ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	orig = orig_data.[+ (get "data_field") +] ;
-	test = test_data.[+ (get "data_field") +] ;
-
-	items = DATA_LENGTH ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_write_[+ (get "data_type") +]_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-	test_write_[+ (get "data_type") +]_or_die (file, 0, orig, items, __LINE__) ;
-	sf_write_sync (file) ;
-
-	/* Add non-audio data after the audio. */
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof ([+ (get "data_type") +])) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, items) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > 2 * items)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, items) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_read_[+ (get "data_type") +]_or_die (file, 0, test, items, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if ([+ (get "error_func") +] (orig [k], test [k]))
-		{	printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			oct_save_[+ (get "data_type") +] (orig, test, items) ;
-			exit (1) ;
-			} ;
-
-	/* Test multiple short reads. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	total = 0 ;
-	for (k = 1 ; k <= 32 ; k++)
-	{	int ik ;
-
-		test_read_[+ (get "data_type") +]_or_die (file, 0, test + total, k, __LINE__) ;
-		total += k ;
-
-		for (ik = 0 ; ik < total ; ik++)
-			if ([+ (get "error_func") +] (orig [ik], test [ik]))
-			{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, ik, orig [ik], test [ik]) ;
-				exit (1) ;
-				} ;
-		} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_read_[+ (get "data_type") +]_or_die (file, 0, test, 4, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if ([+ (get "error_func") +] (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* For some codecs we can't go past here. */
-	if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-			(format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-	{	sf_close (file) ;
-		unlink (filename) ;
-		printf ("no seek : ") ;
-		return ;
-		} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-	test_read_[+ (get "data_type") +]_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if ([+ (get "error_func") +] (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-	test_read_[+ (get "data_type") +]_or_die (file, 0, test + 20, 4, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if ([+ (get "error_func") +] (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_read_[+ (get "data_type") +]_or_die (file, 0, test + 10, 4, __LINE__) ;
-	for (k = 10 ; k < 14 ; k++)
-		if ([+ (get "error_func") +] (orig [k], test [k]))
-		{	printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	count = 0 ;
-	while (count < sfinfo.frames)
-		count += sf_read_[+ (get "data_type") +] (file, test, 311) ;
-
-	/* Check that no error has occurred. */
-	if (sf_error (file))
-	{	printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	/* Check that we haven't read beyond EOF. */
-	if (count > sfinfo.frames)
-	{	printf ("\n\nLines %d : read past end of file (%" PRId64 " should be %" PRId64 ")\n", __LINE__, count, sfinfo.frames) ;
-		exit (1) ;
-		} ;
-
-	test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-	sf_close (file) ;
-
-	multi_seek_test (filename, format) ;
-	write_seek_extend_test (filename, format) ;
-
-} /* mono_[+ (get "type_name") +]_test */
-
-static void
-stereo_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	[+ (get "data_type") +]		*orig, *test ;
-	int			k, items, frames ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	gen_windowed_sine_double (orig_data.d, DATA_LENGTH, [+ (get "max_val") +]) ;
-
-	orig = orig_data.[+ (get "data_field") +] ;
-	test = test_data.[+ (get "data_field") +] ;
-
-	/* Make this a macro so gdb steps over it in one go. */
-	CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-	sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-	test_writef_[+ (get "data_type") +]_or_die (file, 0, orig, frames, __LINE__) ;
-
-	sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-	sf_close (file) ;
-
-	memset (test, 0, items * sizeof ([+ (get "data_type") +])) ;
-
-	if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-		memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-				__LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n",
-				__LINE__, sfinfo.frames, frames) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok && sfinfo.frames > frames)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%" PRId64 " should be %d)\n",
-				__LINE__, sfinfo.frames, frames) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 2)
-	{	printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	check_log_buffer_or_die (file, __LINE__) ;
-
-	test_readf_[+ (get "data_type") +]_or_die (file, 0, test, frames, __LINE__) ;
-	for (k = 0 ; k < items ; k++)
-		if ([+ (get "error_func") +] (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to start of file. */
-	test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-	test_readf_[+ (get "data_type") +]_or_die (file, 0, test, 2, __LINE__) ;
-	for (k = 0 ; k < 4 ; k++)
-		if ([+ (get "error_func") +] (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from start of file. */
-	test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-	/* Check for errors here. */
-	if (sf_error (file))
-	{	printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-		puts (sf_strerror (file)) ;
-		exit (1) ;
-		} ;
-
-	if (sf_read_[+ (get "data_type") +] (file, test, 1) > 0)
-	{	printf ("Line %d: Should return 0.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! sf_error (file))
-	{	printf ("Line %d: Should return an error.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-	/*-----------------------*/
-
-	test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 10, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if ([+ (get "error_func") +] (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from current position. */
-	test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-	test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 40 ; k < 44 ; k++)
-		if ([+ (get "error_func") +] (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	/* Seek to offset from end of file. */
-	test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-	test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 20, 2, __LINE__) ;
-	for (k = 20 ; k < 24 ; k++)
-		if ([+ (get "error_func") +] (test [k], orig [k]))
-		{	printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-} /* stereo_[+ (get "type_name") +]_test */
-
-static void
-mono_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{	SNDFILE		*file ;
-	SF_INFO		sfinfo ;
-	[+ (get "data_type") +]		*orig, *test ;
-	int			k, pass ;
-
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_ALAC_16 :
-		case SF_FORMAT_ALAC_20 :
-		case SF_FORMAT_ALAC_24 :
-		case SF_FORMAT_ALAC_32 :
-			allow_fd = 0 ;
-			break ;
-
-		default :
-			break ;
-		} ;
-
-	orig = orig_data.[+ (get "data_field") +] ;
-	test = test_data.[+ (get "data_field") +] ;
-
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-		|| (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-		unlink (filename) ;
-	else
-	{	/* Create a short file. */
-		create_short_file (filename) ;
-
-		/* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-		** If this returns a valif pointer sf_open() screwed up.
-		*/
-		if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-		{	printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-			exit (1) ;
-			} ;
-
-		/* Truncate the file to zero bytes. */
-		if (truncate (filename, 0) < 0)
-		{	printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-			perror (NULL) ;
-			exit (1) ;
-			} ;
-		} ;
-
-	/* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-	** all the usual data required when opening the file in WRITE mode.
-	*/
-	sfinfo.samplerate	= SAMPLE_RATE ;
-	sfinfo.frames		= DATA_LENGTH ;
-	sfinfo.channels		= 1 ;
-	sfinfo.format		= format ;
-
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	/* Do 3 writes followed by reads. After each, check the data and the current
-	** read and write offsets.
-	*/
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		/* Write some data. */
-		test_write_[+ (get "data_type") +]_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_[+ (get "data_type") +]_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if ([+ (get "error_func") +] (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) A : Error at sample %d ([+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_[+ (get "data_type") +] (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-
-	/* Open the file again to check the data. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-	if (sfinfo.format != format)
-	{	printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.frames < 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Not enough frames in file. (%" PRId64 " < %d)\n", __LINE__, sfinfo.frames, 3 * DATA_LENGTH) ;
-		exit (1) ;
-		}
-
-	if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-	{	printf ("\n\nLine %d : Incorrect number of frames in file. (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, 3 * DATA_LENGTH) ;
-		exit (1) ;
-		} ;
-
-	if (sfinfo.channels != 1)
-	{	printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-		exit (1) ;
-		} ;
-
-	if (! long_file_ok)
-		test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-	else
-		test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-	for (pass = 1 ; pass <= 3 ; pass ++)
-	{	orig [20] = pass * 2 ;
-
-		test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-		/* Read what we just wrote. */
-		test_read_[+ (get "data_type") +]_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-		/* Check the data. */
-		for (k = 0 ; k < DATA_LENGTH ; k++)
-			if ([+ (get "error_func") +] (orig [k], test [k]))
-			{	printf ("\n\nLine %d (pass %d) B : Error at sample %d ([+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, pass, k, orig [k], test [k]) ;
-				oct_save_[+ (get "data_type") +] (orig, test, DATA_LENGTH) ;
-				exit (1) ;
-				} ;
-
-		} ; /* for (pass ...) */
-
-	sf_close (file) ;
-} /* mono_rdwr_[+ (get "data_type") +]_test */
-
-static void
-new_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int allow_fd)
-{	SNDFILE *wfile, *rwfile ;
-	SF_INFO	sfinfo ;
-	[+ (get "data_type") +]		*orig, *test ;
-	int		items, frames ;
-
-	orig = orig_data.[+ (get "data_field") +] ;
-	test = test_data.[+ (get "data_field") +] ;
-
-	sfinfo.samplerate	= 44100 ;
-	sfinfo.frames		= SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-	sfinfo.channels		= 2 ;
-	sfinfo.format		= format ;
-
-	items = DATA_LENGTH ;
-	frames = items / sfinfo.channels ;
-
-	wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-	sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-	test_writef_[+ (get "data_type") +]_or_die (wfile, 1, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-	test_writef_[+ (get "data_type") +]_or_die (wfile, 2, orig, frames, __LINE__) ;
-	sf_write_sync (wfile) ;
-
-	rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-	if (sfinfo.frames != 2 * frames)
-	{	printf ("\n\nLine %d : incorrect number of frames in file (%" PRId64 " should be %d)\n\n", __LINE__, sfinfo.frames, 2 * frames) ;
-		exit (1) ;
-		} ;
-
-	test_writef_[+ (get "data_type") +]_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-	test_readf_[+ (get "data_type") +]_or_die (rwfile, 1, test, frames, __LINE__) ;
-	test_readf_[+ (get "data_type") +]_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-	sf_close (wfile) ;
-	sf_close (rwfile) ;
-} /* new_rdwr_[+ (get "type_name") +]_test */
-
-[+ ENDFOR data_type +]
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-empty_file_test (const char *filename, int format)
-{	SNDFILE		*file ;
-	SF_INFO	info ;
-	int allow_fd ;
-
-	/* Sd2 files cannot be opened from an existing file descriptor. */
-	allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-	print_test_name ("empty_file_test", filename) ;
-
-	unlink (filename) ;
-
-	info.samplerate = 48000 ;
-	info.channels = 2 ;
-	info.format = format ;
-
-	if (sf_format_check (&info) == SF_FALSE)
-	{	info.channels = 1 ;
-		if (sf_format_check (&info) == SF_FALSE)
-		{	puts ("invalid file format") ;
-			return ;
-			} ;
-		} ;
-
-	/* Create an empty file. */
-	file = test_open_file_or_die (filename, SFM_WRITE, &info, allow_fd, __LINE__) ;
-	sf_close (file) ;
-
-	/* Open for read and check the length. */
-	file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-	if (info.frames != 0)
-	{	printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-			exit (1) ;
-			} ;
-
-	sf_close (file) ;
-
-	/* Open for read/write and check the length. */
-	file = test_open_file_or_die (filename, SFM_RDWR, &info, allow_fd, __LINE__) ;
-
-	if (info.frames != 0)
-	{	printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	/* Open for read and check the length. */
-	file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-	if (info.frames != 0)
-	{	printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-		exit (1) ;
-		} ;
-
-	sf_close (file) ;
-
-	check_open_file_count_or_die (__LINE__) ;
-
-	unlink (filename) ;
-	puts ("ok") ;
-
-	return ;
-} /* empty_file_test */
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-create_short_file (const char *filename)
-{	FILE *file ;
-
-	if (! (file = fopen (filename, "w")))
-	{	printf ("create_short_file : fopen (%s, \"w\") failed.", filename) ;
-		fflush (stdout) ;
-		perror (NULL) ;
-		exit (1) ;
-		} ;
-
-	fprintf (file, "This is the file data.\n") ;
-
-	fclose (file) ;
-} /* create_short_file */
-
-
-static void
-multi_seek_test (const char * filename, int format)
-{	SNDFILE * file ;
-	SF_INFO info ;
-	sf_count_t pos ;
-	int k ;
-
-	/* This test doesn't work on the following. */
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_RAW :
-			return ;
-
-		default :
-			break ;
-		} ;
-
-	memset (&info, 0, sizeof (info)) ;
-
-	generate_file (filename, format, 88200) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-
-	for (k = 0 ; k < 10 ; k++)
-	{	pos = info.frames / (k + 2) ;
-		test_seek_or_die (file, pos, SEEK_SET, pos, info.channels, __LINE__) ;
-		} ;
-
-	sf_close (file) ;
-} /* multi_seek_test */
-
-static void
-write_seek_extend_test (const char * filename, int format)
-{	SNDFILE * file ;
-	SF_INFO info ;
-	short	*orig, *test ;
-	unsigned items, k ;
-
-	/* This test doesn't work on the following container formats. */
-	switch (format & SF_FORMAT_TYPEMASK)
-	{	case SF_FORMAT_FLAC :
-		case SF_FORMAT_HTK :
-		case SF_FORMAT_PAF :
-		case SF_FORMAT_SDS :
-		case SF_FORMAT_SVX :
-			return ;
-
-		default :
-			break ;
-		} ;
-
-	/* This test doesn't work on the following codec formats. */
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_ALAC_16 :
-		case SF_FORMAT_ALAC_20 :
-		case SF_FORMAT_ALAC_24 :
-		case SF_FORMAT_ALAC_32 :
-			return ;
-
-		default :
-			break ;
-		} ;
-
-	memset (&info, 0, sizeof (info)) ;
-
-	info.samplerate = 48000 ;
-	info.channels = 1 ;
-	info.format = format ;
-
-	items = 512 ;
-	exit_if_true (items > ARRAY_LEN (orig_data.s), "Line %d : Bad assumption.\n", __LINE__) ;
-
-	orig = orig_data.s ;
-	test = test_data.s ;
-
-	for (k = 0 ; k < ARRAY_LEN (orig_data.s) ; k++)
-		orig [k] = 0x3fff ;
-
-	file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_FALSE, __LINE__) ;
-	test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-
-	/* Extend the file using a seek. */
-	test_seek_or_die (file, 2 * items, SEEK_SET, 2 * items, info.channels, __LINE__) ;
-
-	test_writef_short_or_die (file, 0, orig, items, __LINE__) ;
-	sf_close (file) ;
-
-	file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-	test_read_short_or_die (file, 0, test, 3 * items, __LINE__) ;
-	sf_close (file) ;
-
-	/* Can't do these formats due to scaling. */
-	switch (format & SF_FORMAT_SUBMASK)
-	{	case SF_FORMAT_PCM_S8 :
-		case SF_FORMAT_PCM_U8 :
-			return ;
-		default :
-			break ;
-		} ;
-
-	for (k = 0 ; k < items ; k++)
-	{	exit_if_true (test [k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, k, test [k]) ;
-		exit_if_true (test [items + k] != 0, "Line %d : test [%d] == %d, should be 0.\n", __LINE__, items + k, test [items + k]) ;
-		exit_if_true (test [2 * items + k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, 2 * items + k, test [2 * items + k]) ;
-		} ;
-
-	return ;
-} /* write_seek_extend_test */
-
-
diff --git a/libs/win32/libsndfile/cleancount b/libs/win32/libsndfile/cleancount
deleted file mode 100644
index 56a6051ca2..0000000000
--- a/libs/win32/libsndfile/cleancount
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/libs/win32/libsndfile/config.h b/libs/win32/libsndfile/config.h
deleted file mode 100644
index d32301d30c..0000000000
--- a/libs/win32/libsndfile/config.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
-** Copyright (C) 2002-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** This is the Win32 version of the file config.h which is autogenerated
-** on Unix systems.
-*/
-
-#pragma warning (disable : 4244)
-#pragma warning (disable : 4761)
-
-#include <malloc.h>
-
-/* Set to 1 if the compile is GNU GCC. */
-/* #undef COMPILER_IS_GCC */
-
-/* Target processor clips on negative float to int conversion. */
-#define CPU_CLIPS_NEGATIVE 1
-
-/* Target processor clips on positive float to int conversion. */
-#define CPU_CLIPS_POSITIVE 0
-
-/* Target processor is big endian. */
-#define CPU_IS_BIG_ENDIAN 0
-
-/* Target processor is little endian. */
-#define CPU_IS_LITTLE_ENDIAN 1
-
-/* Set to 1 to enable experimental code. */
-#define ENABLE_EXPERIMENTAL_CODE 0
-
-/* Major version of GCC or 3 otherwise. */
-/* #undef GCC_MAJOR_VERSION */
-
-/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
-/* #undef HAVE_ALSA_ASOUNDLIB_H */
-
-/* Define to 1 if you have the <byteswap.h> header file. */
-/* #undef HAVE_BYTESWAP_H */
-
-/* Define to 1 if you have the `calloc' function. */
-#define HAVE_CALLOC 1
-
-/* Define to 1 if you have the `ceil' function. */
-#define HAVE_CEIL 1
-
-/* Set to 1 if S_IRGRP is defined. */
-#define HAVE_DECL_S_IRGRP 0
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-/* #undef HAVE_DLFCN_H */
-
-/* Define to 1 if you have the <endian.h> header file. */
-/* #undef HAVE_ENDIAN_H */
-
-/* Define to 1 if you have the `fdatasync' function. */
-
-/* #undef HAVE_FDATASYNC */
-
-/* Define to 1 if you have libflac 1.1.1 */
-/* #undef HAVE_FLAC_1_1_1 1 */
-
-/* Define to 1 if you have the <FLAC/all.h> header file. */
-/* #undef HAVE_FLAC_ALL_H 1 */
-
-/* Set to 1 if the compile supports the struct hack. */
-#define HAVE_FLEXIBLE_ARRAY 1
-
-/* Define to 1 if you have the `floor' function. */
-#define HAVE_FLOOR 1
-
-/* Define to 1 if you have the `fmod' function. */
-#define HAVE_FMOD 1
-
-/* Define to 1 if you have the `free' function. */
-#define HAVE_FREE 1
-
-/* Define to 1 if you have the `fstat' function. */
-#define HAVE_FSTAT 1
-
-/* Define to 1 if you have the `fsync' function. */
-/* #undef HAVE_FSYNC */
-
-/* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the `gmtime' function. */
-#define HAVE_GMTIME 1
-
-/* Define to 1 if you have the `gmtime_r' function. */
-/* #undef HAVE_GMTIME_R */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-/* #define HAVE_INTTYPES_H */
-
-/* Define to 1 if you have the `m' library (-lm). */
-#define HAVE_LIBM 1
-
-/* Define if you have C99's lrint function. */
-/* #undef HAVE_LRINT */
-
-/* Define if you have C99's lrintf function. */
-/* #undef HAVE_LRINTF */
-
-/* Define to 1 if you have the `lseek' function. */
-#define HAVE_LSEEK 1
-
-/* Define to 1 if you have the `malloc' function. */
-#define HAVE_MALLOC 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-/* #undef HAVE_MMAP */
-
-/* Define to 1 if you have the `open' function. */
-#define HAVE_OPEN 1
-
-/* Define to 1 if you have the `pread' function. */
-/* #undef HAVE_PREAD */
-
-/* Define to 1 if you have the `pwrite' function. */
-/* #undef HAVE_PWRITE */
-
-/* Define to 1 if you have the `read' function. */
-#define HAVE_READ 1
-
-/* Define to 1 if you have the `realloc' function. */
-#define HAVE_REALLOC 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Set to 1 if you have libsqlite3. */
-/* #undef HAVE_SQLITE3 */
-
-/* Define to 1 if the system has the type `ssize_t'. */
-/* #undef HAVE_SSIZE_T */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-/* #undef HAVE_STDINT_H */
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-/* #undef HAVE_SYS_WAIT_H */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-/* #undef HAVE_UNISTD_H */
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#define HAVE_VSNPRINTF 1
-
-/* Define to 1 if you have the `write' function. */
-#define HAVE_WRITE 1
-
-/* Set to 1 if compiling for MacOSX */
-#define OS_IS_MACOSX 0
-
-/* Set to 1 if compiling for Win32 */
-#define OS_IS_WIN32 1
-
-/* Name of package */
-#define PACKAGE "libsndfile"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "erikd@mega-nerd.com"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "libsndfile"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libsndfile 1.0.26pre5"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "libsndfile"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.0.26pre5"
-
-/* Set to maximum allowed value of sf_count_t type. */
-//#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFi64
-
-/* The size of a `double', as computed by sizeof. */
-#define SIZEOF_DOUBLE 8
-
-/* The size of a `float', as computed by sizeof. */
-#define SIZEOF_FLOAT 4
-
-/* The size of a `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of a `int64_t', as computed by sizeof. */
-#define SIZEOF_INT64_T 0
-
-/* The size of a `loff_t', as computed by sizeof. */
-#define SIZEOF_LOFF_T 0
-
-/* The size of a `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of a `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 0
-
-/* The size of a `off64_t', as computed by sizeof. */
-/* #undef SIZEOF_OFF64_T */
-
-/* The size of a `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 4
-
-/* Set to sizeof (long) if unknown. */
-#define SIZEOF_SF_COUNT_T 8
-
-/* The size of a `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of a `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of a `ssize_t', as computed by sizeof. */
-#define SIZEOF_SSIZE_T 4
-
-/* The size of a `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Set to long if unknown. */
-#define TYPEOF_SF_COUNT_T loff_t
-
-/* Set to 1 to use the native windows API */
-#define USE_WINDOWS_API 1
-
-/* Version number of package */
-#define VERSION "1.0.18"
-
-#define HAVE_STDINT_H 1
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define to make fseeko etc. visible, on some hosts. */
-/* #undef _LARGEFILE_SOURCE */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-#include <stddef.h>
-
-typedef __int32 int32_t;
-typedef intptr_t ssize_t;
-typedef unsigned __int16 uint16_t;
-typedef unsigned __int32 uint32_t;
-#define PRId64 "I64d"
-
-#define __func__ __FUNCTION__
-#if _MSC_VER < 1900
-#define snprintf _snprintf
-#endif
-
-#include <float_cast.h>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/libsndfile.2010.vcxproj.filters b/libs/win32/libsndfile/libsndfile.2010.vcxproj.filters
deleted file mode 100644
index a4335a1522..0000000000
--- a/libs/win32/libsndfile/libsndfile.2010.vcxproj.filters
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Source Files\GSM Sources">
-      <UniqueIdentifier>{b116d731-aba1-4ebd-928f-51113eb4c45b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\G72X Sources">
-      <UniqueIdentifier>{e24785ab-1f78-4bb6-98f3-6c4586e85648}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
-    </Filter>
-    <Filter Include="Source Files\ALLAC Sources">
-      <UniqueIdentifier>{f00f84d5-78ae-4996-bee3-00106a731232}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\libsndfile\src\aiff.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\alaw.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\au.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\audio_detect.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\avr.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\broadcast.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\caf.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\chunk.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\command.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\common.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\dither.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\double64.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\dwd.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\dwvw.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\file_io.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\flac.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\float32.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\g72x.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\gsm610.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\htk.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ima_adpcm.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ima_oki_adpcm.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ircam.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\mat4.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\mat5.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\mpc2k.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ms_adpcm.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\nist.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ogg.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\paf.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\pcm.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\pvf.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\raw.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\rf64.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\rx2.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\sd2.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\sds.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\sndfile.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\strings.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\svx.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\txw.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ulaw.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\voc.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\vox_adpcm.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\w64.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\wav.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\wav_w64.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\wve.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\xi.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\add.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\code.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\decode.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_create.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_decode.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_destroy.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_encode.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_option.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\long_term.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\lpc.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\preprocess.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\rpe.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\short_term.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\GSM610\table.c">
-      <Filter>Source Files\GSM Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\G72x\g721.c">
-      <Filter>Source Files\G72X Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_16.c">
-      <Filter>Source Files\G72X Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_24.c">
-      <Filter>Source Files\G72X Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_40.c">
-      <Filter>Source Files\G72X Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\G72x\g72x.c">
-      <Filter>Source Files\G72X Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\id3.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\chanmap.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\cart.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\alac.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_dec.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_enc.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_encoder.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ALACBitUtilities.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_dec.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_enc.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_dec.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_enc.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_decoder.c">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\libsndfile\src\ima_oki_adpcm.h">
-      <Filter>Source Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libsndfile\src\chanmap.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libsndfile\src\ALAC\ALACAudioTypes.h">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClInclude>
-    <ClInclude Include="..\..\libsndfile\src\ALAC\dplib.h">
-      <Filter>Source Files\ALLAC Sources</Filter>
-    </ClInclude>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/libsndfile.2015.vcxproj b/libs/win32/libsndfile/libsndfile.2015.vcxproj
deleted file mode 100644
index e6460ef81e..0000000000
--- a/libs/win32/libsndfile/libsndfile.2015.vcxproj
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectName>libsndfile</ProjectName>
-    <ProjectGuid>{3D0370CA-BED2-4657-A475-32375CBCB6E4}</ProjectGuid>
-    <RootNamespace>libsndfile</RootNamespace>
-    <Keyword>Win32Proj</Keyword>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>NotSet</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>NotSet</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>NotSet</CharacterSet>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <CharacterSet>NotSet</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\w32\extlib.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\w32\extlib.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\w32\extlib.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\w32\extlib.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <WarningLevel>Level1</WarningLevel>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MinimalRebuild>true</MinimalRebuild>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <WarningLevel>Level1</WarningLevel>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <WarningLevel>Level1</WarningLevel>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <TargetEnvironment>X64</TargetEnvironment>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <WarningLevel>Level1</WarningLevel>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\libsndfile\src\aiff.c" />
-    <ClCompile Include="..\..\libsndfile\src\alac.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_dec.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_enc.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ALACBitUtilities.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_decoder.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_encoder.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_dec.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_enc.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_dec.c" />
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_enc.c" />
-    <ClCompile Include="..\..\libsndfile\src\alaw.c" />
-    <ClCompile Include="..\..\libsndfile\src\au.c" />
-    <ClCompile Include="..\..\libsndfile\src\audio_detect.c" />
-    <ClCompile Include="..\..\libsndfile\src\avr.c" />
-    <ClCompile Include="..\..\libsndfile\src\broadcast.c" />
-    <ClCompile Include="..\..\libsndfile\src\caf.c" />
-    <ClCompile Include="..\..\libsndfile\src\cart.c" />
-    <ClCompile Include="..\..\libsndfile\src\chanmap.c" />
-    <ClCompile Include="..\..\libsndfile\src\chunk.c" />
-    <ClCompile Include="..\..\libsndfile\src\command.c" />
-    <ClCompile Include="..\..\libsndfile\src\common.c" />
-    <ClCompile Include="..\..\libsndfile\src\dither.c" />
-    <ClCompile Include="..\..\libsndfile\src\double64.c" />
-    <ClCompile Include="..\..\libsndfile\src\dwd.c" />
-    <ClCompile Include="..\..\libsndfile\src\dwvw.c" />
-    <ClCompile Include="..\..\libsndfile\src\file_io.c" />
-    <ClCompile Include="..\..\libsndfile\src\flac.c" />
-    <ClCompile Include="..\..\libsndfile\src\float32.c" />
-    <ClCompile Include="..\..\libsndfile\src\g72x.c">
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
-    </ClCompile>
-    <ClCompile Include="..\..\libsndfile\src\gsm610.c" />
-    <ClCompile Include="..\..\libsndfile\src\htk.c" />
-    <ClCompile Include="..\..\libsndfile\src\id3.c" />
-    <ClCompile Include="..\..\libsndfile\src\ima_adpcm.c" />
-    <ClCompile Include="..\..\libsndfile\src\ima_oki_adpcm.c" />
-    <ClCompile Include="..\..\libsndfile\src\ircam.c" />
-    <ClCompile Include="..\..\libsndfile\src\mat4.c" />
-    <ClCompile Include="..\..\libsndfile\src\mat5.c" />
-    <ClCompile Include="..\..\libsndfile\src\mpc2k.c" />
-    <ClCompile Include="..\..\libsndfile\src\ms_adpcm.c" />
-    <ClCompile Include="..\..\libsndfile\src\nist.c" />
-    <ClCompile Include="..\..\libsndfile\src\ogg.c" />
-    <ClCompile Include="..\..\libsndfile\src\paf.c" />
-    <ClCompile Include="..\..\libsndfile\src\pcm.c" />
-    <ClCompile Include="..\..\libsndfile\src\pvf.c" />
-    <ClCompile Include="..\..\libsndfile\src\raw.c" />
-    <ClCompile Include="..\..\libsndfile\src\rf64.c" />
-    <ClCompile Include="..\..\libsndfile\src\rx2.c" />
-    <ClCompile Include="..\..\libsndfile\src\sd2.c" />
-    <ClCompile Include="..\..\libsndfile\src\sds.c" />
-    <ClCompile Include="..\..\libsndfile\src\sndfile.c" />
-    <ClCompile Include="..\..\libsndfile\src\strings.c" />
-    <ClCompile Include="..\..\libsndfile\src\svx.c" />
-    <ClCompile Include="..\..\libsndfile\src\txw.c" />
-    <ClCompile Include="..\..\libsndfile\src\ulaw.c" />
-    <ClCompile Include="..\..\libsndfile\src\voc.c" />
-    <ClCompile Include="..\..\libsndfile\src\vox_adpcm.c" />
-    <ClCompile Include="..\..\libsndfile\src\w64.c" />
-    <ClCompile Include="..\..\libsndfile\src\wav.c" />
-    <ClCompile Include="..\..\libsndfile\src\wav_w64.c" />
-    <ClCompile Include="..\..\libsndfile\src\wve.c" />
-    <ClCompile Include="..\..\libsndfile\src\xi.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\add.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\code.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\decode.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_create.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_decode.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_destroy.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_encode.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_option.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\long_term.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\lpc.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\preprocess.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\rpe.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\short_term.c" />
-    <ClCompile Include="..\..\libsndfile\src\GSM610\table.c" />
-    <ClCompile Include="..\..\libsndfile\src\G72x\g721.c" />
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_16.c" />
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_24.c" />
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_40.c" />
-    <ClCompile Include="..\..\libsndfile\src\G72x\g72x.c" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\..\libsndfile\src\ALAC\ALACAudioTypes.h" />
-    <ClInclude Include="..\..\libsndfile\src\ALAC\dplib.h" />
-    <ClInclude Include="..\..\libsndfile\src\chanmap.h" />
-    <ClInclude Include="..\..\libsndfile\src\ima_oki_adpcm.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/sndfile.h b/libs/win32/libsndfile/sndfile.h
deleted file mode 100644
index fa11e700e2..0000000000
--- a/libs/win32/libsndfile/sndfile.h
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** sndfile.h -- system-wide definitions
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_H
-#define SNDFILE_H
-
-/* This is the version 1.0.X header file. */
-#define	SNDFILE_1
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif	/* __cplusplus */
-
-/* The following file types can be read and written.
-** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
-** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
-** SF_FORMAT_SUBMASK can be used to separate the major and minor file
-** types.
-*/
-
-enum
-{	/* Major formats. */
-	SF_FORMAT_WAV			= 0x010000,		/* Microsoft WAV format (little endian default). */
-	SF_FORMAT_AIFF			= 0x020000,		/* Apple/SGI AIFF format (big endian). */
-	SF_FORMAT_AU			= 0x030000,		/* Sun/NeXT AU format (big endian). */
-	SF_FORMAT_RAW			= 0x040000,		/* RAW PCM data. */
-	SF_FORMAT_PAF			= 0x050000,		/* Ensoniq PARIS file format. */
-	SF_FORMAT_SVX			= 0x060000,		/* Amiga IFF / SVX8 / SV16 format. */
-	SF_FORMAT_NIST			= 0x070000,		/* Sphere NIST format. */
-	SF_FORMAT_VOC			= 0x080000,		/* VOC files. */
-	SF_FORMAT_IRCAM			= 0x0A0000,		/* Berkeley/IRCAM/CARL */
-	SF_FORMAT_W64			= 0x0B0000,		/* Sonic Foundry's 64 bit RIFF/WAV */
-	SF_FORMAT_MAT4			= 0x0C0000,		/* Matlab (tm) V4.2 / GNU Octave 2.0 */
-	SF_FORMAT_MAT5			= 0x0D0000,		/* Matlab (tm) V5.0 / GNU Octave 2.1 */
-	SF_FORMAT_PVF			= 0x0E0000,		/* Portable Voice Format */
-	SF_FORMAT_XI			= 0x0F0000,		/* Fasttracker 2 Extended Instrument */
-	SF_FORMAT_HTK			= 0x100000,		/* HMM Tool Kit format */
-	SF_FORMAT_SDS			= 0x110000,		/* Midi Sample Dump Standard */
-	SF_FORMAT_AVR			= 0x120000,		/* Audio Visual Research */
-	SF_FORMAT_WAVEX			= 0x130000,		/* MS WAVE with WAVEFORMATEX */
-	SF_FORMAT_SD2			= 0x160000,		/* Sound Designer 2 */
-	SF_FORMAT_FLAC			= 0x170000,		/* FLAC lossless file format */
-	SF_FORMAT_CAF			= 0x180000,		/* Core Audio File format */
-	SF_FORMAT_WVE			= 0x190000,		/* Psion WVE format */
-	SF_FORMAT_OGG			= 0x200000,		/* Xiph OGG container */
-	SF_FORMAT_MPC2K			= 0x210000,		/* Akai MPC 2000 sampler */
-	SF_FORMAT_RF64			= 0x220000,		/* RF64 WAV file */
-
-	/* Subtypes from here on. */
-
-	SF_FORMAT_PCM_S8		= 0x0001,		/* Signed 8 bit data */
-	SF_FORMAT_PCM_16		= 0x0002,		/* Signed 16 bit data */
-	SF_FORMAT_PCM_24		= 0x0003,		/* Signed 24 bit data */
-	SF_FORMAT_PCM_32		= 0x0004,		/* Signed 32 bit data */
-
-	SF_FORMAT_PCM_U8		= 0x0005,		/* Unsigned 8 bit data (WAV and RAW only) */
-
-	SF_FORMAT_FLOAT			= 0x0006,		/* 32 bit float data */
-	SF_FORMAT_DOUBLE		= 0x0007,		/* 64 bit float data */
-
-	SF_FORMAT_ULAW			= 0x0010,		/* U-Law encoded. */
-	SF_FORMAT_ALAW			= 0x0011,		/* A-Law encoded. */
-	SF_FORMAT_IMA_ADPCM		= 0x0012,		/* IMA ADPCM. */
-	SF_FORMAT_MS_ADPCM		= 0x0013,		/* Microsoft ADPCM. */
-
-	SF_FORMAT_GSM610		= 0x0020,		/* GSM 6.10 encoding. */
-	SF_FORMAT_VOX_ADPCM		= 0x0021,		/* OKI / Dialogix ADPCM */
-
-	SF_FORMAT_G721_32		= 0x0030,		/* 32kbs G721 ADPCM encoding. */
-	SF_FORMAT_G723_24		= 0x0031,		/* 24kbs G723 ADPCM encoding. */
-	SF_FORMAT_G723_40		= 0x0032,		/* 40kbs G723 ADPCM encoding. */
-
-	SF_FORMAT_DWVW_12		= 0x0040, 		/* 12 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_16		= 0x0041, 		/* 16 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_24		= 0x0042, 		/* 24 bit Delta Width Variable Word encoding. */
-	SF_FORMAT_DWVW_N		= 0x0043, 		/* N bit Delta Width Variable Word encoding. */
-
-	SF_FORMAT_DPCM_8		= 0x0050,		/* 8 bit differential PCM (XI only) */
-	SF_FORMAT_DPCM_16		= 0x0051,		/* 16 bit differential PCM (XI only) */
-
-	SF_FORMAT_VORBIS		= 0x0060,		/* Xiph Vorbis encoding. */
-
-	SF_FORMAT_ALAC_16		= 0x0070,		/* Apple Lossless Audio Codec (16 bit). */
-	SF_FORMAT_ALAC_20		= 0x0071,		/* Apple Lossless Audio Codec (20 bit). */
-	SF_FORMAT_ALAC_24		= 0x0072,		/* Apple Lossless Audio Codec (24 bit). */
-	SF_FORMAT_ALAC_32		= 0x0073,		/* Apple Lossless Audio Codec (32 bit). */
-
-	/* Endian-ness options. */
-
-	SF_ENDIAN_FILE			= 0x00000000,	/* Default file endian-ness. */
-	SF_ENDIAN_LITTLE		= 0x10000000,	/* Force little endian-ness. */
-	SF_ENDIAN_BIG			= 0x20000000,	/* Force big endian-ness. */
-	SF_ENDIAN_CPU			= 0x30000000,	/* Force CPU endian-ness. */
-
-	SF_FORMAT_SUBMASK		= 0x0000FFFF,
-	SF_FORMAT_TYPEMASK		= 0x0FFF0000,
-	SF_FORMAT_ENDMASK		= 0x30000000
-} ;
-
-/*
-** The following are the valid command numbers for the sf_command()
-** interface.  The use of these commands is documented in the file
-** command.html in the doc directory of the source code distribution.
-*/
-
-enum
-{	SFC_GET_LIB_VERSION				= 0x1000,
-	SFC_GET_LOG_INFO				= 0x1001,
-	SFC_GET_CURRENT_SF_INFO			= 0x1002,
-
-
-	SFC_GET_NORM_DOUBLE				= 0x1010,
-	SFC_GET_NORM_FLOAT				= 0x1011,
-	SFC_SET_NORM_DOUBLE				= 0x1012,
-	SFC_SET_NORM_FLOAT				= 0x1013,
-	SFC_SET_SCALE_FLOAT_INT_READ	= 0x1014,
-	SFC_SET_SCALE_INT_FLOAT_WRITE	= 0x1015,
-
-	SFC_GET_SIMPLE_FORMAT_COUNT		= 0x1020,
-	SFC_GET_SIMPLE_FORMAT			= 0x1021,
-
-	SFC_GET_FORMAT_INFO				= 0x1028,
-
-	SFC_GET_FORMAT_MAJOR_COUNT		= 0x1030,
-	SFC_GET_FORMAT_MAJOR			= 0x1031,
-	SFC_GET_FORMAT_SUBTYPE_COUNT	= 0x1032,
-	SFC_GET_FORMAT_SUBTYPE			= 0x1033,
-
-	SFC_CALC_SIGNAL_MAX				= 0x1040,
-	SFC_CALC_NORM_SIGNAL_MAX		= 0x1041,
-	SFC_CALC_MAX_ALL_CHANNELS		= 0x1042,
-	SFC_CALC_NORM_MAX_ALL_CHANNELS	= 0x1043,
-	SFC_GET_SIGNAL_MAX				= 0x1044,
-	SFC_GET_MAX_ALL_CHANNELS		= 0x1045,
-
-	SFC_SET_ADD_PEAK_CHUNK			= 0x1050,
-	SFC_SET_ADD_HEADER_PAD_CHUNK	= 0x1051,
-
-	SFC_UPDATE_HEADER_NOW			= 0x1060,
-	SFC_SET_UPDATE_HEADER_AUTO		= 0x1061,
-
-	SFC_FILE_TRUNCATE				= 0x1080,
-
-	SFC_SET_RAW_START_OFFSET		= 0x1090,
-
-	SFC_SET_DITHER_ON_WRITE			= 0x10A0,
-	SFC_SET_DITHER_ON_READ			= 0x10A1,
-
-	SFC_GET_DITHER_INFO_COUNT		= 0x10A2,
-	SFC_GET_DITHER_INFO				= 0x10A3,
-
-	SFC_GET_EMBED_FILE_INFO			= 0x10B0,
-
-	SFC_SET_CLIPPING				= 0x10C0,
-	SFC_GET_CLIPPING				= 0x10C1,
-
-	SFC_GET_INSTRUMENT				= 0x10D0,
-	SFC_SET_INSTRUMENT				= 0x10D1,
-
-	SFC_GET_LOOP_INFO				= 0x10E0,
-
-	SFC_GET_BROADCAST_INFO			= 0x10F0,
-	SFC_SET_BROADCAST_INFO			= 0x10F1,
-
-	SFC_GET_CHANNEL_MAP_INFO		= 0x1100,
-	SFC_SET_CHANNEL_MAP_INFO		= 0x1101,
-
-	SFC_RAW_DATA_NEEDS_ENDSWAP		= 0x1110,
-
-	/* Support for Wavex Ambisonics Format */
-	SFC_WAVEX_SET_AMBISONIC			= 0x1200,
-	SFC_WAVEX_GET_AMBISONIC			= 0x1201,
-
-	SFC_SET_VBR_ENCODING_QUALITY	= 0x1300,
-	SFC_SET_COMPRESSION_LEVEL		= 0x1301,
-
-	/* Cart Chunk support */
-	SFC_SET_CART_INFO				= 0x1400,
-	SFC_GET_CART_INFO				= 0x1401,
-
-	/* Following commands for testing only. */
-	SFC_TEST_IEEE_FLOAT_REPLACE		= 0x6001,
-
-	/*
-	** SFC_SET_ADD_* values are deprecated and will disappear at some
-	** time in the future. They are guaranteed to be here up to and
-	** including version 1.0.8 to avoid breakage of existing software.
-	** They currently do nothing and will continue to do nothing.
-	*/
-	SFC_SET_ADD_DITHER_ON_WRITE		= 0x1070,
-	SFC_SET_ADD_DITHER_ON_READ		= 0x1071
-} ;
-
-
-/*
-** String types that can be set and read from files. Not all file types
-** support this and even the file types which support one, may not support
-** all string types.
-*/
-
-enum
-{	SF_STR_TITLE					= 0x01,
-	SF_STR_COPYRIGHT				= 0x02,
-	SF_STR_SOFTWARE					= 0x03,
-	SF_STR_ARTIST					= 0x04,
-	SF_STR_COMMENT					= 0x05,
-	SF_STR_DATE						= 0x06,
-	SF_STR_ALBUM					= 0x07,
-	SF_STR_LICENSE					= 0x08,
-	SF_STR_TRACKNUMBER				= 0x09,
-	SF_STR_GENRE					= 0x10
-} ;
-
-/*
-** Use the following as the start and end index when doing metadata
-** transcoding.
-*/
-
-#define	SF_STR_FIRST	SF_STR_TITLE
-#define	SF_STR_LAST		SF_STR_GENRE
-
-enum
-{	/* True and false */
-	SF_FALSE	= 0,
-	SF_TRUE		= 1,
-
-	/* Modes for opening files. */
-	SFM_READ	= 0x10,
-	SFM_WRITE	= 0x20,
-	SFM_RDWR	= 0x30,
-
-	SF_AMBISONIC_NONE		= 0x40,
-	SF_AMBISONIC_B_FORMAT	= 0x41
-} ;
-
-/* Public error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
-** There are also a large number of private error numbers which are internal to
-** the library which can change at any time.
-*/
-
-enum
-{	SF_ERR_NO_ERROR				= 0,
-	SF_ERR_UNRECOGNISED_FORMAT	= 1,
-	SF_ERR_SYSTEM				= 2,
-	SF_ERR_MALFORMED_FILE		= 3,
-	SF_ERR_UNSUPPORTED_ENCODING	= 4
-} ;
-
-
-/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
-*/
-
-enum
-{	SF_CHANNEL_MAP_INVALID = 0,
-	SF_CHANNEL_MAP_MONO = 1,
-	SF_CHANNEL_MAP_LEFT,					/* Apple calls this 'Left' */
-	SF_CHANNEL_MAP_RIGHT,					/* Apple calls this 'Right' */
-	SF_CHANNEL_MAP_CENTER,					/* Apple calls this 'Center' */
-	SF_CHANNEL_MAP_FRONT_LEFT,
-	SF_CHANNEL_MAP_FRONT_RIGHT,
-	SF_CHANNEL_MAP_FRONT_CENTER,
-	SF_CHANNEL_MAP_REAR_CENTER,				/* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
-	SF_CHANNEL_MAP_REAR_LEFT,				/* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
-	SF_CHANNEL_MAP_REAR_RIGHT,				/* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
-	SF_CHANNEL_MAP_LFE,						/* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency'  */
-	SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER,	/* Apple calls this 'Left Center' */
-	SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER,	/* Apple calls this 'Right Center */
-	SF_CHANNEL_MAP_SIDE_LEFT,				/* Apple calls this 'Left Surround Direct' */
-	SF_CHANNEL_MAP_SIDE_RIGHT,				/* Apple calls this 'Right Surround Direct' */
-	SF_CHANNEL_MAP_TOP_CENTER,				/* Apple calls this 'Top Center Surround' */
-	SF_CHANNEL_MAP_TOP_FRONT_LEFT,			/* Apple calls this 'Vertical Height Left' */
-	SF_CHANNEL_MAP_TOP_FRONT_RIGHT,			/* Apple calls this 'Vertical Height Right' */
-	SF_CHANNEL_MAP_TOP_FRONT_CENTER,		/* Apple calls this 'Vertical Height Center' */
-	SF_CHANNEL_MAP_TOP_REAR_LEFT,			/* Apple and MS call this 'Top Back Left' */
-	SF_CHANNEL_MAP_TOP_REAR_RIGHT,			/* Apple and MS call this 'Top Back Right' */
-	SF_CHANNEL_MAP_TOP_REAR_CENTER,			/* Apple and MS call this 'Top Back Center' */
-
-	SF_CHANNEL_MAP_AMBISONIC_B_W,
-	SF_CHANNEL_MAP_AMBISONIC_B_X,
-	SF_CHANNEL_MAP_AMBISONIC_B_Y,
-	SF_CHANNEL_MAP_AMBISONIC_B_Z,
-
-	SF_CHANNEL_MAP_MAX
-} ;
-
-
-/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-
-typedef	struct SNDFILE_tag	SNDFILE ;
-
-/* The following typedef is system specific and is defined when libsndfile is
-** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
-** 64 bit file offsets.
-** On windows, we need to allow the same header file to be compiler by both GCC
-** and the Microsoft compiler.
-*/
-
-#if (defined (_MSCVER) || defined (_MSC_VER))
-typedef __int64		sf_count_t ;
-#define SF_COUNT_MAX		0x7fffffffffffffffi64
-#else
-typedef @TYPEOF_SF_COUNT_T@	sf_count_t ;
-#define SF_COUNT_MAX		@SF_COUNT_MAX@
-#endif
-
-
-/* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
-** On write, the SF_INFO structure is filled in by the user and passed into
-** sf_open ().
-*/
-
-struct SF_INFO
-{	sf_count_t	frames ;		/* Used to be called samples.  Changed to avoid confusion. */
-	int			samplerate ;
-	int			channels ;
-	int			format ;
-	int			sections ;
-	int			seekable ;
-} ;
-
-typedef	struct SF_INFO SF_INFO ;
-
-/* The SF_FORMAT_INFO struct is used to retrieve information about the sound
-** file formats libsndfile supports using the sf_command () interface.
-**
-** Using this interface will allow applications to support new file formats
-** and encoding types when libsndfile is upgraded, without requiring
-** re-compilation of the application.
-**
-** Please consult the libsndfile documentation (particularly the information
-** on the sf_command () interface) for examples of its use.
-*/
-
-typedef struct
-{	int			format ;
-	const char	*name ;
-	const char	*extension ;
-} SF_FORMAT_INFO ;
-
-/*
-** Enums and typedefs for adding dither on read and write.
-** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
-** and SFC_SET_DITHER_ON_READ.
-*/
-
-enum
-{	SFD_DEFAULT_LEVEL	= 0,
-	SFD_CUSTOM_LEVEL	= 0x40000000,
-
-	SFD_NO_DITHER		= 500,
-	SFD_WHITE			= 501,
-	SFD_TRIANGULAR_PDF	= 502
-} ;
-
-typedef struct
-{	int			type ;
-	double		level ;
-	const char	*name ;
-} SF_DITHER_INFO ;
-
-/* Struct used to retrieve information about a file embedded within a
-** larger file. See SFC_GET_EMBED_FILE_INFO.
-*/
-
-typedef struct
-{	sf_count_t	offset ;
-	sf_count_t	length ;
-} SF_EMBED_FILE_INFO ;
-
-/*
-**	Structs used to retrieve music sample information from a file.
-*/
-
-enum
-{	/*
-	**	The loop mode field in SF_INSTRUMENT will be one of the following.
-	*/
-	SF_LOOP_NONE = 800,
-	SF_LOOP_FORWARD,
-	SF_LOOP_BACKWARD,
-	SF_LOOP_ALTERNATING
-} ;
-
-typedef struct
-{	int gain ;
-	char basenote, detune ;
-	char velocity_lo, velocity_hi ;
-	char key_lo, key_hi ;
-	int loop_count ;
-
-	struct
-	{	int mode ;
-		uint32_t start ;
-		uint32_t end ;
-		uint32_t count ;
-	} loops [16] ; /* make variable in a sensible way */
-} SF_INSTRUMENT ;
-
-
-
-/* Struct used to retrieve loop information from a file.*/
-typedef struct
-{
-	short	time_sig_num ;	/* any positive integer    > 0  */
-	short	time_sig_den ;	/* any positive power of 2 > 0  */
-	int		loop_mode ;		/* see SF_LOOP enum             */
-
-	int		num_beats ;		/* this is NOT the amount of quarter notes !!!*/
-							/* a full bar of 4/4 is 4 beats */
-							/* a full bar of 7/8 is 7 beats */
-
-	float	bpm ;			/* suggestion, as it can be calculated using other fields:*/
-							/* file's length, file's sampleRate and our time_sig_den*/
-							/* -> bpms are always the amount of _quarter notes_ per minute */
-
-	int	root_key ;			/* MIDI note, or -1 for None */
-	int future [6] ;
-} SF_LOOP_INFO ;
-
-
-/*	Struct used to retrieve broadcast (EBU) information from a file.
-**	Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
-*/
-#define	SF_BROADCAST_INFO_VAR(coding_hist_size) \
-			struct \
-			{	char		description [256] ; \
-				char		originator [32] ; \
-				char		originator_reference [32] ; \
-				char		origination_date [10] ; \
-				char		origination_time [8] ; \
-				uint32_t	time_reference_low ; \
-				uint32_t	time_reference_high ; \
-				short		version ; \
-				char		umid [64] ; \
-				char		reserved [190] ; \
-				uint32_t	coding_history_size ; \
-				char		coding_history [coding_hist_size] ; \
-			}
-
-/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
-typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
-
-struct SF_CART_TIMER
-{	char	usage[4] ;
-	int32_t	value ;
-} ;
-
-typedef struct SF_CART_TIMER SF_CART_TIMER ;
-
-#define	SF_CART_INFO_VAR(p_tag_text_size) \
-			struct \
-			{	char		version [4] ; \
-				char		title [64] ; \
-				char		artist [64] ; \
-				char		cut_id [64] ; \
-				char		client_id [64] ; \
-				char		category [64] ; \
-				char		classification [64] ; \
-				char		out_cue [64] ; \
-				char		start_date [10] ; \
-				char		start_time [8] ; \
-				char		end_date [10] ; \
-				char		end_time [8] ; \
-				char		producer_app_id [64] ; \
-				char		producer_app_version [64] ; \
-				char		user_def [64] ; \
-				int32_t		level_reference ; \
-				SF_CART_TIMER	post_timers [8] ; \
-				char		reserved [276] ; \
-				char		url [1024] ; \
-				uint32_t	tag_text_size ; \
-				char		tag_text[p_tag_text_size] ; \
-			}
-
-typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
-
-/*	Virtual I/O functionality. */
-
-typedef sf_count_t		(*sf_vio_get_filelen)	(void *user_data) ;
-typedef sf_count_t		(*sf_vio_seek)		(sf_count_t offset, int whence, void *user_data) ;
-typedef sf_count_t		(*sf_vio_read)		(void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t		(*sf_vio_write)		(const void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t		(*sf_vio_tell)		(void *user_data) ;
-
-struct SF_VIRTUAL_IO
-{	sf_vio_get_filelen	get_filelen ;
-	sf_vio_seek			seek ;
-	sf_vio_read			read ;
-	sf_vio_write		write ;
-	sf_vio_tell			tell ;
-} ;
-
-typedef	struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
-
-
-/* Open the specified file for read, write or both. On error, this will
-** return a NULL pointer. To find the error number, pass a NULL SNDFILE
-** to sf_strerror ().
-** All calls to sf_open() should be matched with a call to sf_close().
-*/
-
-SNDFILE* 	sf_open		(const char *path, int mode, SF_INFO *sfinfo) ;
-
-
-/* Use the existing file descriptor to create a SNDFILE object. If close_desc
-** is TRUE, the file descriptor will be closed when sf_close() is called. If
-** it is FALSE, the descritor will not be closed.
-** When passed a descriptor like this, the library will assume that the start
-** of file header is at the current file offset. This allows sound files within
-** larger container files to be read and/or written.
-** On error, this will return a NULL pointer. To find the error number, pass a
-** NULL SNDFILE to sf_strerror ().
-** All calls to sf_open_fd() should be matched with a call to sf_close().
-
-*/
-
-SNDFILE* 	sf_open_fd	(int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-
-SNDFILE* 	sf_open_virtual	(SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-
-
-/* sf_error () returns a error number which can be translated to a text
-** string using sf_error_number().
-*/
-
-int		sf_error		(SNDFILE *sndfile) ;
-
-
-/* sf_strerror () returns to the caller a pointer to the current error message for
-** the given SNDFILE.
-*/
-
-const char* sf_strerror (SNDFILE *sndfile) ;
-
-
-/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
-**
-*/
-
-const char*	sf_error_number	(int errnum) ;
-
-
-/* The following two error functions are deprecated but they will remain in the
-** library for the forseeable future. The function sf_strerror() should be used
-** in their place.
-*/
-
-int		sf_perror		(SNDFILE *sndfile) ;
-int		sf_error_str	(SNDFILE *sndfile, char* str, size_t len) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int		sf_command	(SNDFILE *sndfile, int command, void *data, int datasize) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int		sf_format_check	(const SF_INFO *info) ;
-
-
-/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
-** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
-** stdio.h function fseek ().
-** An offset of zero with whence set to SEEK_SET will position the
-** read / write pointer to the first data sample.
-** On success sf_seek returns the current position in (multi-channel)
-** samples from the start of the file.
-** Please see the libsndfile documentation for moving the read pointer
-** separately from the write pointer on files open in mode SFM_RDWR.
-** On error all of these functions return -1.
-*/
-
-sf_count_t	sf_seek 		(SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-
-/* Functions for retrieving and setting string data within sound files.
-** Not all file types support this features; AIFF and WAV do. For both
-** functions, the str_type parameter must be one of the SF_STR_* values
-** defined above.
-** On error, sf_set_string() returns non-zero while sf_get_string()
-** returns NULL.
-*/
-
-int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
-
-const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
-
-
-/* Return the library version string. */
-
-const char * sf_version_string (void) ;
-
-/* Return the current byterate at this point in the file. The byte rate in this
-** case is the number of bytes per second of audio data. For instance, for a
-** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
-** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
-** For some file formats the returned value will be accurate and exact, for some
-** it will be a close approximation, for some it will be the average bitrate for
-** the whole file and for some it will be a time varying value that was accurate
-** when the file was most recently read or written.
-** To get the bitrate, multiple this value by 8.
-** Returns -1 for unknown.
-*/
-int sf_current_byterate (SNDFILE *sndfile) ;
-
-/* Functions for reading/writing the waveform data of a sound file.
-*/
-
-sf_count_t	sf_read_raw		(SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t	sf_write_raw 	(SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
-
-
-/* Functions for reading and writing the data chunk in terms of frames.
-** The number of items actually read/written = frames * number of channels.
-**     sf_xxxx_raw		read/writes the raw data bytes from/to the file
-**     sf_xxxx_short	passes data in the native short format
-**     sf_xxxx_int		passes data in the native int format
-**     sf_xxxx_float	passes data in the native float format
-**     sf_xxxx_double	passes data in the native double format
-** All of these read/write function return number of frames read/written.
-*/
-
-sf_count_t	sf_readf_short	(SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_short	(SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_int	(SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_int 	(SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_float	(SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_float	(SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
-
-sf_count_t	sf_readf_double		(SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-sf_count_t	sf_writef_double	(SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
-
-
-/* Functions for reading and writing the data chunk in terms of items.
-** Otherwise similar to above.
-** All of these read/write function return number of items read/written.
-*/
-
-sf_count_t	sf_read_short	(SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t	sf_write_short	(SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_int		(SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-sf_count_t	sf_write_int 	(SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_float	(SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-sf_count_t	sf_write_float	(SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
-
-sf_count_t	sf_read_double	(SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-sf_count_t	sf_write_double	(SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
-
-
-/* Close the SNDFILE and clean up all memory allocations associated with this
-** file.
-** Returns 0 on success, or an error number.
-*/
-
-int		sf_close		(SNDFILE *sndfile) ;
-
-
-/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
-** to force the writing of data to disk. If the file is opened SFM_READ
-** no action is taken.
-*/
-
-void	sf_write_sync	(SNDFILE *sndfile) ;
-
-
-
-/* The function sf_wchar_open() is Windows Only!
-** Open a file passing in a Windows Unicode filename. Otherwise, this is
-** the same as sf_open().
-**
-** In order for this to work, you need to do the following:
-**
-**		#include <windows.h>
-**		#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-**		#including <sndfile.h>
-*/
-
-#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
-SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
-#endif
-
-
-
-
-/* Getting and setting of chunks from within a sound file.
-**
-** These functions allow the getting and setting of chunks within a sound file
-** (for those formats which allow it).
-**
-** These functions fail safely. Specifically, they will not allow you to overwrite
-** existing chunks or add extra versions of format specific reserved chunks but
-** should allow you to retrieve any and all chunks (may not be implemented for
-** all chunks or all file formats).
-*/
-
-struct SF_CHUNK_INFO
-{	char		id [64] ;	/* The chunk identifier. */
-	unsigned	id_size ;	/* The size of the chunk identifier. */
-	unsigned	datalen ;	/* The size of that data. */
-	void		*data ;		/* Pointer to the data. */
-} ;
-
-typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
-
-/* Set the specified chunk info (must be done before any audio data is written
-** to the file). This will fail for format specific reserved chunks.
-** The chunk_info->data pointer must be valid until the file is closed.
-** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
-*/
-int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/*
-** An opaque structure to an iterator over the all chunks of a given id
-*/
-typedef	struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
-
-/* Get an iterator for all chunks matching chunk_info.
-** The iterator will point to the first chunk matching chunk_info.
-** Chunks are matching, if (chunk_info->id) matches the first
-**     (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
-** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
-**     is returned.
-** The values of chunk_info->datalen and chunk_info->data are ignored.
-** If no matching chunks are found in the sndfile, NULL is returned.
-** The returned iterator will stay valid until one of the following occurs:
-**     a) The sndfile is closed.
-**     b) A new chunk is added using sf_set_chunk().
-**     c) Another chunk iterator function is called on the same SNDFILE* handle
-**        that causes the iterator to be modified.
-** The memory for the iterator belongs to the SNDFILE* handle and is freed when
-** sf_close() is called.
-*/
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/* Iterate through chunks by incrementing the iterator.
-** Increments the iterator and returns a handle to the new one.
-** After this call, iterator will no longer be valid, and you must use the
-**      newly returned handle from now on.
-** The returned handle can be used to access the next chunk matching
-**      the criteria as defined in sf_get_chunk_iterator().
-** If iterator points to the last chunk, this will free all resources
-**      associated with iterator and return NULL.
-** The returned iterator will stay valid until sf_get_chunk_iterator_next
-**      is called again, the sndfile is closed or a new chunk us added.
-*/
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
-
-
-/* Get the size of the specified chunk.
-** If the specified chunk exists, the size will be returned in the
-**      datalen field of the SF_CHUNK_INFO struct.
-**      Additionally, the id of the chunk will be copied to the id
-**      field of the SF_CHUNK_INFO struct and it's id_size field will
-**      be updated accordingly.
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-/* Get the specified chunk data.
-** If the specified chunk exists, up to chunk_info->datalen bytes of
-**      the chunk data will be copied into the chunk_info->data buffer
-**      (allocated by the caller) and the chunk_info->datalen field
-**      updated to reflect the size of the data. The id and id_size
-**      field will be updated according to the retrieved chunk
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-
-#ifdef __cplusplus
-}		/* extern "C" */
-#endif	/* __cplusplus */
-
-#endif	/* SNDFILE_H */
-
diff --git a/src/mod/formats/mod_sndfile/mod_sndfile.2015.vcxproj b/src/mod/formats/mod_sndfile/mod_sndfile.2015.vcxproj
index e182fd0a60..59415f74ab 100644
--- a/src/mod/formats/mod_sndfile/mod_sndfile.2015.vcxproj
+++ b/src/mod/formats/mod_sndfile/mod_sndfile.2015.vcxproj
@@ -46,6 +46,7 @@
     <PlatformToolset>v140</PlatformToolset>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <Import Project="..\..\..\..\w32\libsndfile.props" Condition=" '$(libsndfileImported)' == '' "/>
   <ImportGroup Label="ExtensionSettings">
   </ImportGroup>
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
@@ -70,13 +71,11 @@
   </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
     </ClCompile>
     <Link>
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
@@ -87,13 +86,11 @@
       <TargetEnvironment>X64</TargetEnvironment>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <PrecompiledHeader>
       </PrecompiledHeader>
     </ClCompile>
     <Link>
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
@@ -102,12 +99,10 @@
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <ClCompile>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PrecompiledHeader>
       </PrecompiledHeader>
     </ClCompile>
     <Link>
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
@@ -118,12 +113,10 @@
       <TargetEnvironment>X64</TargetEnvironment>
     </Midl>
     <ClCompile>
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PrecompiledHeader>
       </PrecompiledHeader>
     </ClCompile>
     <Link>
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <RandomizedBaseAddress>false</RandomizedBaseAddress>
       <DataExecutionPrevention>
       </DataExecutionPrevention>
@@ -138,10 +131,6 @@
       <Project>{f6c55d93-b927-4483-bb69-15aef3dd2dff}</Project>
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
     </ProjectReference>
-    <ProjectReference Include="..\..\..\..\libs\win32\libsndfile\libsndfile.2015.vcxproj">
-      <Project>{3d0370ca-bed2-4657-a475-32375cbcb6e4}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
     <ProjectReference Include="..\..\..\..\w32\Library\FreeSwitchCore.2015.vcxproj">
       <Project>{202d7a4e-760d-4d0e-afa1-d7459ced30ff}</Project>
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
diff --git a/w32/libsndfile-version.props b/w32/libsndfile-version.props
new file mode 100644
index 0000000000..c30e080fef
--- /dev/null
+++ b/w32/libsndfile-version.props
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets">
+    <Import Project="basedir.props" Condition=" '$(BaseDirImported)' == ''"/>
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros">
+    <libsndfileVersion>1.0.28.1.fda9c8d</libsndfileVersion>
+  </PropertyGroup>
+  <PropertyGroup>
+    <libsndfileVersionImported>true</libsndfileVersionImported>
+  </PropertyGroup>
+  <PropertyGroup />
+  <ItemDefinitionGroup />
+  <ItemGroup>
+    <BuildMacro Include="libsndfileVersion">
+      <Value>$(libsndfileVersion)</Value>
+    </BuildMacro>
+  </ItemGroup>
+</Project>
diff --git a/w32/libsndfile.props b/w32/libsndfile.props
new file mode 100644
index 0000000000..03dbd5a9bd
--- /dev/null
+++ b/w32/libsndfile.props
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <libsndfileImported>true</libsndfileImported>
+  </PropertyGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="libsndfile-version.props" Condition=" '$(libsndfileVersionImported)' == '' "/>
+    <Import Project="downloadpackage.task" Condition=" '$(downloadpackagetask_Imported)' == '' " />
+  </ImportGroup>
+
+  <PropertyGroup>
+    <LibraryConfiguration Condition="$(Configuration.ToLower().Contains('debug'))">Debug</LibraryConfiguration>
+    <LibraryConfiguration Condition="$(Configuration.ToLower().Contains('release'))">Release</LibraryConfiguration>
+  </PropertyGroup>
+
+  <PropertyGroup Label="UserMacros">
+    <libsndfileLibDir>$(BaseDir)libs\libsndfile-$(libsndfileVersion)</libsndfileLibDir>
+  </PropertyGroup>
+
+  <!--
+       Download Target.
+       Name must be unique.
+       By design, targets are executed only once per project.
+
+       Usage:
+
+       package: URI
+
+       expectfileordirectory: Skips the download and extraction if exists
+
+       outputfolder: Folder to store a downloaded file.
+                     By default "$(BaseDir)libs", if empty
+
+       outputfilename: If not empty, overrides filename from URI.
+                       .exe files don't get extracted
+
+       extractto: Folder to extract an archive to
+   -->
+
+  <Target Name="libsndfileBinariesDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+      <DownloadPackageTask
+           package="http://files.freeswitch.org/windows/packages/libsndfile/$(libsndfileVersion)/libsndfile-$(libsndfileVersion)-binaries-$(Platform.ToLower())-$(LibraryConfiguration.ToLower()).zip"
+           expectfileordirectory="$(libsndfileLibDir)\binaries\$(Platform)\$(LibraryConfiguration)\lib\libsndfile-1.lib"
+           outputfolder=""
+           outputfilename=""
+           extractto="$(BaseDir)libs\"
+      />
+  </Target>
+  <Target Name="libsndfileHeadersDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+      <DownloadPackageTask
+           package="http://files.freeswitch.org/windows/packages/libsndfile/$(libsndfileVersion)/libsndfile-$(libsndfileVersion)-headers.zip"
+           expectfileordirectory="$(libsndfileLibDir)\include\sndfile.h"
+           outputfolder=""
+           outputfilename=""
+           extractto="$(BaseDir)libs\"
+      />
+  </Target>
+
+  <Target Name="libsndfilecopyTarget" BeforeTargets="CustomBuild" DependsOnTargets="libsndfileBinariesDownloadTarget">
+      <ItemGroup>
+          <libsndfileFiles Include="$(libsndfileLibDir)\binaries\$(Platform)\$(LibraryConfiguration)\bin\libsndfile-1.dll" />
+      </ItemGroup>
+      <Copy Condition="!exists('$(BaseDir)$(Platform)\$(LibraryConfiguration)\libsndfile-1.dll')"
+          SourceFiles="@(libsndfileFiles)"
+          DestinationFiles="@(libsndfileFiles->'$(BaseDir)$(Platform)\$(LibraryConfiguration)\%(Filename)%(Extension)')"
+      />
+  </Target>
+
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(SolutionDir)libs\libsndfile-$(libsndfileVersion)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(SolutionDir)libs\libsndfile-$(libsndfileVersion)\binaries\$(Platform)\$(LibraryConfiguration)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+</Project>
\ No newline at end of file