Lots of changes in regards to strings, as follows:
* Removed my custom String class, as well as removed the really old
Unicode ConvertUTF, the UTF Converter, and the UTF Encode/Decode
functions.
* Replaced the above with using standard C++ std::wstring_convert and
std::codecvt_utf8.
* Added headers adapted from llvm's libc++ project for allowing the
above C++ classes to exist with GCC and Clang when libc++ isn't being
used.
* Used std::string over std::wstring whenever possible.
* Added header adapted from llvm's libc++ project to create special
versions of the ifstream and ofstream classes that would utilize _wfopen
on non-MSVC Windows compilers, so those compilers could access files on
Windows that use characters outside the current codepage.
* Removed the -static-libgcc and -static-libstdc++ flags from the
Makefile for non-MSVC builds. The generated DLLs will require extra DLLs
from either Cygwin or MinGW (whichever is used to compile), I've only
tested with MinGW and for some reason they crash Winamp on exit, I have
no idea why.
Replaced the Makefile with one that handles things better.
* g++ compiled DLLs seem to not be seen by Winamp when the
-static-libgcc and -static-libstdc++ flags are used.
* clang++ compiled DLLs seem to cause Winamp to crash on exit.
[GSF] Commented out SWI 3 (STOP), based on the last revision of Caitsith2's Highly Advanced GSF plugin, as he said it's not needed for GSFs and actually causes issues with GBS2GSF conversions that are longer than 5 minutes.
* Replaced Lanczos window with Hann window for the windowed sinc function in the NCSF plugin.
* Added a ring buffer specifically designed for working with SWAVs to replace the one provided by kode54, still have to give him thanks for the original though.
* Fixed clipping issue caused by invalid clamping values.
* Minor fix to using the min()/max() functions of numeric_limits because Winamp's out.h includes windows.h without my specific wrapper to redefine things.
For in_snsf, replaced the B-spline interpolation with the 6-point, 5th-order version, and replaced the Optimal interpolation with 6-point, 5th-order 2nd-order Osculating.
* Added more interpolation methods to in_ncsf.
* Cleaned up a little of the code in the Interpolate function in in_ncsf.
* Made it so changes in the config can apply to a running song, depending on the player.
* Slight optimization of in_ncsf's interpolation so it doesn't have as much std::vector accessing.
* Stopped trying to use the slope of the points to determine points outside the sample's range, hopefully will stop some of the clipping.