shithub: libsamplerate

Download patch

ref: 260c3f640f3aacc653ad28bd28339e4e3f5fe4e7
parent: 01284e76b61cdb840206b5f825b3a3642dad46f5
author: evpobr <evpobr@gmail.com>
date: Tue Oct 20 09:06:41 EDT 2020

Update site documentation

* Use GitHub's Jekyll static site generator.
* Move all documentation to docs/ directory.
* Convert HTML to Markdown.

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -373,7 +373,7 @@
 
   # Documentation
 
-  install(DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR})
+  install(DIRECTORY docs/ DESTINATION ${CMAKE_INSTALL_DOCDIR})
 endif()
 
 # Packaging support
--- a/Makefile.am
+++ b/Makefile.am
@@ -49,12 +49,12 @@
 AUTOHEADER=echo
 
 ########
-# doc/ #
+# docs/ #
 ########
 
-dist_html_DATA = doc/SRC.png doc/SRC.css doc/index.html doc/license.html doc/history.html \
-	doc/download.html doc/lists.html doc/quality.html doc/win32.html doc/faq.html doc/api.html \
-	doc/api_simple.html doc/api_callback.html doc/api_full.html doc/api_misc.html
+dist_doc_DATA = docs/SRC.png docs/SRC.css docs/index.md docs/license.md docs/history.md \
+	docs/download.md docs/lists.md docs/quality.md docs/win32.md docs/faq.md docs/api.md \
+	docs/api_simple.md docs/api_callback.md docs/api_full.md docs/api_misc.md
 
 #############
 # examples/ #
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+Unreleased
+
+  * Documentation:
+    * Move site to new URL: http://libsndfile.github.io/libsamplerate/
+    * Convert documentation pages from HTML to Markdown
+    * Use GitHub's Jekyll static site generator to generate static HTML pages
+      for site
+
 Version 0.1.9 (2016-09-23)
   * Relicense under 2 clause BSD license.
   * Minor bug fixes and upates.
--- a/doc/SRC.css
+++ /dev/null
@@ -1,84 +1,0 @@
-body {
-	background : black ;
-	color : white ;
-	font-family : arial, helvetica, sans-serif ;
-}
-td {
-	font-family : arial, helvetica, sans-serif ;
-	background : black ;
-	color : white ;
-}
-center {
-	font-family : arial, helvetica, sans-serif ;
-}
-div {
-	line-height: 1.3;
-}
-p {
-	font-family : arial, helvetica, sans-serif ;
-	text-align : left ;
-	line-height: 1.3;
-	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 ;
-	line-height: 1.3;
-	margin-left : 3% ;
-	margin-right : 6% ;
-}
-ol {
-	font-family : arial, helvetica, sans-serif ;
-	text-align : left ;
-	line-height: 1.3;
-	margin-left : 3% ;
-	margin-right : 6% ;
-}
-dl {
-	font-family : arial, helvetica, sans-serif ;
-	text-align : left ;
-	margin-left : 3% ;
-	margin-right : 3% ;
-}
-h1 { 
-	font-size : xx-large ; 
-	background : black ;
-	color : #FB1465 ; 
-	text-align : left ;
-	margin-left : 3% ;
-	margin-right : 3% ;
-}
-h2 { 
-	font-size : x-large ; 
-	background : black ;
-	color : #FB1465 ;
-	text-align : left ;
-	margin-left : 3% ;
-	margin-right : 3% ;
-}
-h3 { 
-	font-size : large ; 
-	background : black ;
-	color : #FB1465 ;
-	text-align : left ;
-	margin-left : 3% ;
-	margin-right : 3% ;
-}
-pre {
-	font-family : courier, monospace ;
-	font-size : medium ;
-}
-
binary files a/doc/SRC.png /dev/null differ
--- a/doc/api.html
+++ /dev/null
@@ -1,127 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Applications Programming Interface</B></H1>
-<P>
-The publically callable functions of libsamplerate are all listed in the
-<B>&lt;samplerate.h&gt;</B> header file.
-In order to use any of the functionality of libsamplerate, you need to add
-</P>
-<PRE>
-	#include &lt;samplerate.h&gt;
-</PRE>
-<P>
-to the top of any function that call any of the following functions.
-You will also need to link you binary with the libsamplerate library.
-</P>
-<P>
-The API allows three methods for accessing the capabilies of the library:
-</P>
-<UL>
-	<LI>A <A HREF="api_simple.html">simple interface</A> which can sample rate convert 
-		a single block of samples (one or more channels) in one go.
-		The simple API is less capable than the full API.
-	<LI>A <A HREF="api_full.html">more fully featured interface</A> which allows time
-		varying sample rate conversion on streaming data (again one or more
-		channels).
-	<LI>A <A HREF="api_callback.html">callback interface</A> which has the same 
-		functionality as the interface above but allows the details of input and
-		output to be separated.
-		The output is generated by call a read function and the library calls a user
-		supplied callback function to obtain its input.
-		This interface is particularly well suited to applications where the output
-		sample rate is varied with time.
-</UL>
-
-<P>
-<b>NB :</b> All three access methods are able to process multi channel interleaved 
-data.
-</P>
-
-<P>
-The parts of the API which are common to all three interfaces are:
-</P>
-<UL>
-	<LI> The <A HREF="api_misc.html#ErrorReporting">error reporting</A>  mechanisim.
-	<LI> The available <A HREF="api_misc.html#Converters">converter</A> types.
-	<LI> The <A HREF="api_misc.html#SRC_DATA">SRC_DATA</A> struct.
-</UL>
-<P>
-All three versions of the API are restricted to operating on buffers of ISO C 
-Standard  <B>float</B> data. 
-However, there are two 
-	<A HREF="api_misc.html#Aux">auxillary functions</A>
-for converting arrays of float data to and from short data.
-</P>
-
-<P>
-<B>Note:</B> The <B>tests/</B> and <B>examples/</B> directories of the source code 
-distribution contain numerous example programs showing the use of the library.
-</P>
-
-<!-- pepper -->
-<!-- <A HREF="mailto:aldel0305@mega-nerd.com">For the spam bots</A> -->
-<!-- pepper -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
--- a/doc/api_callback.html
+++ /dev/null
@@ -1,176 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<BR>
-	<A HREF="api_simple.html">Simple API</A><BR>
-	<A HREF="api_full.html">Full API</A><BR>
-	<A HREF="api_callback.html">Callback API</A><BR>
-	<A HREF="api_misc.html">Miscellaneous</A><BR>
-	<A HREF="api_misc.html#ErrorReporting">Error Handling</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Callback API</B></H1>
-<P>
-The callback API consists of the following functions :
-</P>
-<PRE>
-      typedef long (*src_callback_t) (void *cb_data, float **data) ;
-
-      SRC_STATE* <A HREF="#Init">src_callback_new</A> (src_callback_t func,
-	                      int converter_type, int channels,
-	                      int *error, void* cb_data) ;
-
-      SRC_STATE* <A HREF="api_full.html#CleanUp">src_delete</A> (SRC_STATE *state) ;
-
-      long <A HREF="#Read">src_callback_read</A> (SRC_STATE *state, double src_ratio,
-	                       long frames, float *data) ;
-
-      int <A HREF="api_full.html#Reset">src_reset</A> (SRC_STATE *state) ;
-      int <A HREF="api_full.html#SetRatio">src_set_ratio</A> (SRC_STATE *state, double new_ratio) ;
-</PRE>
-<BR>
-
-<P>
-Like the
-	<A HREF="api_simple.html">simple API</a>
-and the
-	<A HREF="api_full.html">full API</a>,
-the callback based API is able to operate on interleaved multi channel data.
-</P>
-
-<P>
-An example of the use of the callback based API can be found in the
-<B>varispeed-play</B> program in the <B>examples/</B> directory of the
-source code tarball.
-</P>
-
-<!-- pepper -->
-<A NAME="Init"></A>
-<H3><BR>Initialisation</H3>
-<PRE>
-      SRC_STATE* src_callback_new (src_callback_t func,
-	                      int converter_type, int channels,
-	                      int *error, void* cb_data) ;
-</PRE>
-<P>
-The <B>src_callback_new</B> function returns an anonymous pointer to a
-sample rate converter callback object, src_state.
-This is the same type of object as that returned by <A HREF="api_full.html#init">
-src_new</A>, but with different internal state.
-Although these are the same object type, they cannot be used interchangeably.
-If an error occurs the function returns a NULL pointer and fills in the
-error value pointed to by the <B>error</B> pointer supplied by the caller.
-</P>
-<P>
-The caller then passes the SRC_STATE object to the <B>src_callback_read</B>
-function to pull data out of the converter.
-When the caller is finished with the converter they should pass it to the
-clean up function <A HREF="api_full.html#CleanUp">src_delete</A>.
-</P>
-<P>
-The <B>func</B> parameter is a user supplied function which must match the
-<B>src_callback_t</B> type signature while <B>cb_data</B> is a pointer to
-data which be passed as the first parameter to the user supplied callback
-function.
-This function is called by the converter whenever it needs input data as a
-result of being calls to <B>src_callback_read</B>.
-</P>
-<P>
-If the converter was initialised to work with more than one channel, the
-callback function must work with mutiple channels of interleaved data.
-The callback function should return the number of frames it supplying to
-the converter.
-For multi channel files, this return value should be the number of floats
-divided by the number of channels.
-</P>
-<P>
-The converter must be one of the supplied converter types documented
-<A HREF="api_misc.html#Converters">here</A>.
-</P>
-<P>
-The caller then passes the SRC_STATE pointer to the <B>src_callback_read</B>
-function to pull data out of the converter.
-</P>
-
-<!-- pepper -->
-<A NAME="Read"></A>
-<H3><BR>Callback Read</H3>
-<PRE>
-      long src_callback_read (SRC_STATE *state, double src_ratio,
-	                       long frames, float *data) ;
-</PRE>
-<P>
-The <B>src_callback_read</B> function is passed the
-	<A HREF="api_misc.html#SRC_DATA"><B>SRC_STATE</B></A>
-pointer returned by <B>src_callback_new</B>, the coversion ratio
-(output_sample_rate / input_sample_rate), the maximum number of output frames
-to generate and a pointer to a buffer in which to place the output data.
-For multi channel files, the data int the output buffer is stored in
-interleaved format.
-</P>
-<P>
-The <B>src_callback_read</B> function returns the number of frames generated
-or zero if an error occurs or it runs out of input (ie the user supplied
-callback function returns zero and there is no more data buffered internally).
-If an error has occurred, the function <A HREF="api_misc.html#ErrorReporting">
-src_error</A> will return non-zero.
-</P>
-
-<P>
-See also :
-	<A HREF="api_full.html#SetRatio"><B>src_set_ratio</B></A>
-</P>
-
-<!-- pepper -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/api_full.html
+++ /dev/null
@@ -1,218 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<BR>
-	<A HREF="api_simple.html">Simple API</A><BR>
-	<A HREF="api_full.html">Full API</A><BR>
-	<A HREF="api_callback.html">Callback API</A><BR>
-	<A HREF="api_misc.html">Miscellaneous</A><BR>
-	<A HREF="api_misc.html#ErrorReporting">Error Handling</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Full API</B></H1>
-<P>
-The full API consists of the following functions :
-</P>
-<PRE>
-      SRC_STATE* <A HREF="#Init">src_new</A> (int converter_type, int channels, int *error) ;
-      SRC_STATE* <A HREF="#CleanUp">src_delete</A> (SRC_STATE *state) ;
-
-      int <A HREF="#Process">src_process</A> (SRC_STATE *state, SRC_DATA *data) ;
-      int <A HREF="#Reset">src_reset</A> (SRC_STATE *state) ;
-      int <A HREF="#SetRatio">src_set_ratio</A> (SRC_STATE *state, double new_ratio) ;
-</PRE>
-
-<A NAME="Init"></A>
-<H3><BR>Initialisation</H3>
-<PRE>
-      SRC_STATE* src_new (int converter_type, int channels, int *error) ;
-</PRE>
-<P>
-The <B>src_new</B> function returns an anonymous pointer to a sample rate 
-converter object, src_state. 
-If an error occurs the function returns a NULL pointer and fills in the
-error value pointed to by the <B>error</B> pointer supplied by the caller.
-The converter must be one of the supplied converter types documented
-<A HREF="api_misc.html#Converters">here</A>.
-</P>
-
-<A NAME="CleanUp"></A>
-<H3><BR>Cleanup</H3>
-<PRE>
-      SRC_STATE* src_delete (SRC_STATE *state) ;
-</PRE>
-<P>
-The <B>src_delete</B> function frees up all memory allocated for the given sample
-rate converter object and returns a NULL pointer.
-The caller is responsible for freeing any memory passed to the sample rate converter
-via the pointer to the <B>SRC_DATA</B> struct.
-</P>
-
-<A NAME="Process"></A>
-<H3><BR>Process</H3>
-<PRE>
-      int src_process (SRC_STATE *state, SRC_DATA *data) ;
-</PRE>
-<P>
-The <B>src_process</B> function processes the data provided by the caller
-in an <B>SRC_DATA</B> struct using the sample rate converter object specified
-by the <B>SRC_STATE</B> pointer.
-When operating on streaming data, this function can be called over and over again,
-with each new call providing new input data and returning new output data.
-</P>
-
-<P>
-The <B>SRC_DATA</B> struct passed as the second parameter to the <B>src_process</B> 
-function has the following fields:
-</P>
-<PRE>
-      typedef struct
-      {   const float  *data_in;
-          float *data_out;
-
-          long   input_frames, output_frames ;
-          long   input_frames_used, output_frames_gen ;
-
-          int    end_of_input ;
-
-          double src_ratio ;
-      } SRC_DATA ;
-</PRE>
-<P>
-The fields of this struct which must be filled in by the caller are:
-</P>
-<PRE>
-      data_in       : A pointer to the input data samples.
-      input_frames  : The number of frames of data pointed to by data_in.
-      data_out      : A pointer to the output data samples.
-      output_frames : Maximum number of frames pointer to by data_out.
-      src_ratio     : Equal to output_sample_rate / input_sample_rate.
-      end_of_input  : Equal to 0 if more input data is available and 1 
-                      otherwise.
-</PRE>
-<P>
-Note that the data_in and data_out arrays may not overlap. If they do, the 
-library will return an error code.
-</P>
-<P>
-When the <B>src_process</B> function returns <B>output_frames_gen</B> will be 
-set to the number of output frames generated and <B>input_frames_used</B> will 
-be set to the number of input frames consumed to generate the provided number of 
-output frames.
-</P>
-
-<P>
-The <B>src_process</B> function returns non-zero if an error occurs.
-The non-zero error return value can be decoded into a text string using the function
-documented <A HREF="api_misc.html#ErrorReporting">here</A>.
-</P>
-
-<A NAME="Reset"></A>
-<H3><BR>Reset</H3>
-<PRE>
-      int src_reset (SRC_STATE *state) ;
-</PRE>
-<P>
-The <B>src_reset</B> function resets the internal state of the sample rate 
-converter object to the same state it had immediately after its creation using
-<B>src_new</B>.
-This should be called whenever a sample rate converter is to be used on two 
-separate, unrelated pieces of audio.
-</P>
-
-<A NAME="Clone"></A>
-<H3><BR>Clone</H3>
-<PRE>
-      SRC_STATE* src_clone (SRC_STATE *state, int *error) ;
-</PRE>
-<P>
-The <B>src_clone</B> function creates a copy of the internal state of the sample
-rate converter object. The output of the next call to <B>src_process</B> will be
-identical for both the original and cloned state (given the same <B>SRC_DATA</B>
-input). This could be used to later resume sample rate conversion at a specific
-location in a stream with the same state, which may be useful in real-time
-applications.
-</P>
-<P>
-If an error occurs the function returns a NULL pointer and fills in the
-error value pointed to by the <B>error</B> pointer supplied by the caller.
-</P>
-
-<A NAME="SetRatio"></A>
-<H3><BR>Set Ratio</H3>
-<PRE>
-      int src_set_ratio (SRC_STATE *state, double new_ratio) ;
-</PRE>
-
-<p>
-When using the <B>src_process</B> or <B>src_callback_process</B> APIs and 
-updating the <B>src_ratio</B> field of the <B>SRC_STATE</B> struct, the library
-will try to smoothly transition between the conversion ratio of the last call
-and the conversion ratio of the current call.
-<p/>
-
-<P>
-If the user want to bypass this smooth transition and achieve a step response in
-the conversion ratio, the <B>src_set_ratio</B> function can be used to set the
-starting conversion ratio of the next call to <B>src_process</B> or
-<B>src_callback_process</B>.
-<p/>
-
-<P>
-This function returns non-zero on error and the error return value can be
-decoded into a text string using the function documented 
-<A HREF="api_misc.html#ErrorReporting">here</A>.</P>
-
-<!-- <A HREF="mailto:aldel@mega-nerd.com">For the spam bots</A> -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/api_misc.html
+++ /dev/null
@@ -1,227 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<BR>
-	<A HREF="api_simple.html">Simple API</A><BR>
-	<A HREF="api_full.html">Full API</A><BR>
-	<A HREF="api_misc.html#ErrorReporting">Error Handling</A><BR>
-	<A HREF="api_misc.html">Miscellaneous</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Miscellaneous API Documentation</B></H1>
-<A NAME="ErrorReporting"></A>
-<H3><BR>Error Reporting</H3>
-<P>
-Most of the API functions either return an integer error (ie <B>src_simple</B> 
-and  <B>src_process</B>) or return an integer error value via an int pointer 
-parameter (<B>src_new</B>).
-These integer error values can be converted into a human readable text strings by 
-calling the function:
-</P>
-<PRE>
-      const char* src_strerror (int error) ;
-</PRE>
-<P>
-which  will return an error string for valid error numbers, the string "No Error" 
-for an error value of zero or a NULL pointer if no error message has been defined 
-for that error value.
-</P>
-
-<A NAME="Converters"></A>
-<H3><BR>Converters</H3>
-<P>
-Secret Rabbit Code has a number of different converters which can be selected
-using the <B>converter_type</B> parameter when calling <B>src_simple</B> or
-<b>src_new</B>.
-Currently, the five converters available are:
-</P>
-<PRE>
-      enum
-      {    
-          SRC_SINC_BEST_QUALITY       = 0,
-          SRC_SINC_MEDIUM_QUALITY     = 1,
-          SRC_SINC_FASTEST            = 2,
-          SRC_ZERO_ORDER_HOLD         = 3,
-          SRC_LINEAR                  = 4
-      } ;
-</PRE>
-<P>
-As new converters are added, they will given a number corresponding to the 
-next inetger.
-</P>
-
-<P>
-The details of these converters are as follows:
-</P>
-<UL>
-	<LI> <B>SRC_SINC_BEST_QUALITY</B> - This is a bandlimited interpolator derived 
-		from the mathematical <B>sinc</B> function and this is the highest
-		quality sinc based converter, providing a worst case Signal-to-Noise
-		Ratio (SNR) of 97 decibels (dB) at a bandwidth of 97&#37;.
-		All three SRC_SINC_* converters are based on the techniques of 
-		<A HREF="http://ccrma.stanford.edu/~jos/resample/">Julius O. Smith</A>
-		although this code was developed independantly.
-	<LI> <B>SRC_SINC_MEDIUM_QUALITY</B> - This is another bandlimited interpolator 
-		much like the previous one. It has an SNR of 97dB and a bandwidth of 90&#37;.
-		The speed of the conversion is much faster than the previous one.
-	<LI> <B>SRC_SINC_FASTEST</B> - This is the fastest bandlimited interpolator and
-		has an SNR of 97dB and a bandwidth of 80&#37;.
-	<LI><B>SRC_ZERO_ORDER_HOLD</B> - A Zero Order Hold converter (interpolated value
-		is equal to the last value). The quality is poor but the conversion speed is
-		blindlingly fast.
-	<li><b>SRC_LINEAR</b> - A linear converter. Again the quality is poor, but the 
-		conversion speed is blindingly fast.
-</UL>
-<P>
-There are two functions that give either a (text string) name or description
-for each converter:
-</P>
-<PRE>
-      const char *src_get_name (int converter_type) ;
-      const char *src_get_description (int converter_type) ;
-</PRE>
-<P>
-The name will typically be a short string for use in a dialog box, while the 
-description string is longer.
-</P>
-<P>
-Both of these functions return a NULL pointer if there is no converter for the 
-given <B>converter_type</B> value.
-Since the converters have consecutive <B>converter_type</B> values, the caller
-is easily able to figure out the number of converters at run time. 
-This enables a binary dynamically linked against an old version of the library 
-to know about converters from later versions of the library as they become 
-available.
-</P>
-
-<A NAME="SRC_DATA"></A>
-<H3><BR>SRC_DATA</H3>
-<P>
-Both the simple and the full featured versions of the API use the <B>SRC_DATA</B>
-struct to pass audio and control data into the sample rate converter.
-This struct is defined as:
-</P>
-<PRE>
-      typedef struct
-      {   const float  *data_in;
-          float *data_out ;
-
-          long   input_frames, output_frames ;
-          long   input_frames_used, output_frames_gen ;
-
-          int    end_of_input ;
-
-          double src_ratio ;
-      } SRC_DATA ;
-</PRE>
-<P>
-The <B>data_in</B> pointer is used to pass audio data into the converter while the
-<B>data_out</B> pointer supplies the converter with an array to hold the converter's
-output.
-For a converter which has been configured for mulitchannel operation, these pointers
-need to point to a single array of interleaved data.
-</P>
-<P>
-The <B>input_frames</B> and <B>output_frames</B> fields supply the converter with 
-the lengths of the arrays (in frames) pointed to by the <B>data_in</B> and 
-<b>data_out</B> pointers respectively.
-For monophinc data, these values would indicate the length of the arrays while
-for multi channel data these values would be equal to the the length of the array
-divided by the number of channels.
-</P>
-
-<P>
-The <B>end_of_input</B> field is only used when the sample rate converter is used
-by calling the <B>src_process</B> function.
-In this case it should be set to zero if more buffers are to be passed to the 
-converter and 1 if the current buffer is the last.
-</P>
-<P>
-Finally, the <B>src_ratio</B> field specifies the conversion ratio defined as
-the output sample rate divided by the input sample rate.
-For a connected set of buffers, this value can be varies on each call to 
-<B>src_process</B> resulting in a time varying sample rate conversion 
-process.
-For time varying sample rate conversions, the ratio will be linearly
-interpolated between the <B>src_ratio</B> value of the previous call
-to <B>src_process</B> and the value for the current call.
-</P>
-<P>
-The <B>input_frames_used</B> and <B>output_frames_gen</B> fields are set by the
-converter to inform the caller of the number of frames consumed from the
-<B>data_in</B> array and the number of frames generated in the <B>data_out</B>
-array respectively.
-These values are for the current call to <B>src_process</B> only.
-</P>
-
-<A NAME="Aux"></A>
-<H3><BR>Auxillary Functions</H3>
-<P>
-There are four auxillary functions for converting arrays of float data
-to and from short or int data.
-These functions are defined as:
-</P>
-<PRE>
-    void src_short_to_float_array (const short *in, float *out, int len) ;
-    void src_float_to_short_array (const float *in, short *out, int len) ;
-    void src_int_to_float_array (const int *in, float *out, int len) ;
-    void src_float_to_int_array (const float *in, int *out, int len) ;
-</PRE>
-<P>
-The float data is assumed to be in the range [-1.0, 1.0] and it is
-automatically scaled on the conversion to and from float.
-On the float to short/int conversion path, any data values which would overflow
-the range of short/int data are clipped.
-</P>
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/api_simple.html
+++ /dev/null
@@ -1,147 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<BR>
-	<A HREF="api_simple.html">Simple API</A><BR>
-	<A HREF="api_full.html">Full API</A><BR>
-	<A HREF="api_callback.html">Callback API</A><BR>
-	<A HREF="api_misc.html">Miscellaneous</A><BR>
-	<A HREF="api_misc.html#ErrorReporting">Error Handling</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Simple API</B></H1>
-
-<P>
-<B>Important Note:</B>
-The simple API is not designed to work on small chunks of a larger piece of
-audio. 
-If you attempt to use it this way you are doing it wrong and will not get the
-results you want.
-For processing audio data in chunks you <b>must</b> use the
-	<a href="api_full.html">full api</a>
-or the
-	<a href="api_callback.html">callback based api</a>.
-</P>
-
-<br/><br/>
-
-<P>
-The simple API consists of a single function :
-</P>
-<PRE>
-      int src_simple (SRC_DATA *data, int converter_type, int channels) ;
-</PRE>
-<P>
-The use of this function rather than the more fully featured API requires the caller
-to know the total length of the input data before hand and that all input and output 
-data can be held in the system's memory at once. 
-It also assumes that there is a single constant ratio between input and output sample
-rates.
-<!--
-If these conditions cannot be met, the full featured API should be used instead.
-In addition, this documentation is complemented by this 
-<A HREF="ex_simple.html">example code</A>. -->
-</P>
-
-<P>
-Dealing with the easy stuff first, the <B>converter_type</B> parameter should be 
-one of the values defined in <B>samplerate.h</B> and documented  
-<A HREF="api_misc.html#Converters">here</A> while the <b>channels</b> parameter 
-specifies the number of interleaved channels that the sample rate converter
-is being asked to process (number of input channels and output channels is always 
-equal). 
-There is no hard upper limit on the number of channels; it is limited purely
-by the amount of memory available.
-</P>
-
-
-<P>
-The first parameter to <B>src_simple</B> is a pointer to an <B>SRC_DATA</B> struct
-(more info <A HREF="api_misc.html#SRC_DATA">here</A>) defined as follows:
-</P>
-<PRE>
-      typedef struct
-      {   const float  *data_in;
-          float *data_out ;
-
-          long   input_frames, output_frames ;
-          long   input_frames_used, output_frames_gen ;
-
-          int    end_of_input ;
-
-          double src_ratio ;
-      } SRC_DATA ;
-</PRE>
-<P>
-The fields of this struct which must be filled in by the caller are:
-</P>
-<PRE>
-      data_in       : A pointer to the input data samples.
-      input_frames  : The number of frames of data pointed to by data_in.
-      data_out      : A pointer to the output data samples.
-      output_frames : Maximum number of frames pointer to by data_out.
-      src_ratio     : Equal to output_sample_rate / input_sample_rate.
-</PRE>
-<P>
-When the <B>src_simple</B> function returns <B>output_frames_gen</B> will be 
-set to the number of output frames generated and <B>input_frames_used</B> will 
-be set to the number of input frames used to generate the provided number of 
-output frames.
-</P>
-<P>
-The <B>src_simple</B> function returns a non-zero value when an error occurs. 
-See <A HREF="api_misc.html#ErrorReporting">here</A> for how to convert the error value into
-a text string.
-</P>
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/bugs.html
+++ /dev/null
@@ -1,116 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_bugs.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Bug Reporting</B></H1>
-<P>
-	If you are a user and have a problem using libsamplerate with another piece
-	of software, you should contact the author of that other software and get
-	them to explore their use of this library and possibly submit a bug report.
-	If you are a coder and think you have found a bug in libsamplerate then
-	read on.
-</P>
-<P>
-	Secret Rabbit Code is an extremely complex piece of code but I do think
-	that it is relatively bug free. 
-	In addition, the source code distribution includes a comprehensive test
-	suite for regression testing.
-	This means it is extremely unlikely that new bugs creep in when 
-	modifications are made to the code.
-</P>
-<P>
-	SRC is also not the most simple library to use which means that I do get
-	a number of bug reports which turn out to be bugs in the user's program
-	rather than bugs in SRC.
-	Up until now, I have investigated each bug report as thoroughly as 
-	possible.
-	Unfortunately, this chews up a lot of my time which could otherwise be
-	spent improving SRC, working on other Free Software or spending time 
-	with my family.
-</P>
-<P>
-	I have therefore decided, that I cannot investigate any bug report unless
-	the person reporting the problem can supply me with a short self contained
-	test program or a modification to one of the existing test programs in
-	the tests/ directory of the source code distribution.
-	The test program should meet the following criteria:
-</P>
-	<UL>
-	<LI>Written in C or C++.
-	<LI>Does not use any libraries or header files other than the ones which are
-		standard for the relevant languages. (Of course libsamplerate can be 
-		used :-)).
-	<LI>It is the minimal program which can adequately display the problem.
-	<LI>It clearly displays the criteria for pass or fail.
-	</UL>
-<P>
-	Supplying a good test program will maximize the speed with which your bug 
-	report gets dealt with.
-</P>
-
-<!-- pepper -->
-<!-- <A HREF="mailto:aldel0305@mega-nerd.com">For the spam bots</A> -->
-<!-- pepper -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/download.html
+++ /dev/null
@@ -1,89 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_dl.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Download</B></H1>
-<P>
-	The latest version of Secret Rabbit Code is 0.1.9.
-</P>
-<P>Download it on
-		<A HREF="https://github.com/libsndfile/libsamplerate/releases/latest">GitHub releases page</A>
-	and
-		<!-- A HREF="libsamplerate-0.1.8.tar.gz.asc">(GPG signature)</A -->
-
-</P>
-<P>
-	Compiling libsamplerate is relatively easy. The INSTALL file in the top
-	level directory gives instructions on compiling and installing
-	libsamplerate on Unix-like systems (including MacOSX). For Win32 there
-	are instructions in the doc/ directory of the tarball.
-	These instructions are mirrored
-		<A HREF="win32.html">here</A>.
-</P>
-
-<!-- pepper -->
-<!-- <A HREF="mailto:aldel0305@mega-nerd.com">For the spam bots</A> -->
-<!-- pepper -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/faq.html
+++ /dev/null
@@ -1,361 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_api.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Frequently Asked Questions</B></H1>
-<P>
-<A HREF="#Q001">Q1 : Is it normal for the output of libsamplerate to be louder
-	than its input?</A><BR><BR>
-<A HREF="#Q002">Q2 : On Unix/Linux/MacOSX, what is the best way of detecting
-	the presence and location of libsamplerate and its header file using
-	autoconf?</A><BR><BR>
-<A HREF="#Q003">Q3 : If I upsample and downsample to the original rate, for
-	example 44.1->96->44.1, do I get an identical signal as the one before the
-	up/down resampling?</A><BR><BR>
-<A HREF="#Q004">Q4 : If I ran src_simple (libsamplerate) on small chunks (160
-	frames) would that sound bad?</A><BR><BR>
-<A HREF="#Q005">Q5 : I'm using libsamplerate but the high quality settings
-	sound worse than the SRC_LINEAR converter. Why?</A><BR><BR>
-<A HREF="#Q006">Q6 : I'm use the SRC_SINC_* converters and up-sampling by a ratio of 
-	2. I reset the converter and put in 1000 samples and I expect to get 2000
-	samples out, but I'm getting less than that. Why?</A><BR><BR>
-<A HREF="#Q007">Q7 : I have input and output sample rates that are integer
-	values, but the API wants me to divide one by the other and put the result
-	in a floating point number. Won't this case problems for long running
-	conversions?</A><BR><BR>
-</P>
-<HR>
-<!-- ========================================================================= -->
-<A NAME="Q001"></A>
-<H2><BR><B>Q1 : Is it normal for the output of libsamplerate to be louder
-	than its input?</B></H2>
-<P>
-The output of libsamplerate will be roughly the same volume as the input.
-However, even if the input is strictly in the range (-1.0, 1.0), it is still
-possible for the output to contain peak values outside this range.
-</P>
-<P>
-Consider four consecutive samples of [0.5 0.999 0.999 0.5].
-If we are up sampling by a factor of two we need to insert samples between
-each of the existing samples.
-Its pretty obvious then, that the sample between the two 0.999 values should
-and will be bigger than 0.999.
-</P>
-<P>
-This means that anyone using libsamplerate should normalize its output before
-doing things like saving the audio to a 16 bit WAV file.
-</P>
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-
-<a NAME="Q002"></a>
-<h2><br><b>Q2 : On Unix/Linux/MacOSX, what is the best way of detecting
-	the presence and location of libsamplerate and its header file using
-	autoconf?</b></h2>
-
-<p>
-libsamplerate 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(SAMPLERATE, samplerate >= 0.1.3,
-            ac_cv_samplerate=1, ac_cv_samplerate=0)
-
-    AC_DEFINE_UNQUOTED([HAVE_SAMPLERATE],${ac_cv_samplerate},
-            [Set to 1 if you have libsamplerate.])
-
-    AC_SUBST(SAMPLERATE_CFLAGS)
-    AC_SUBST(SAMPLERATE_LIBS)
-</pre>
-<p>
-This will automatically set the <b>SAMPLERATE_CFLAGS</b> and <b>SAMPLERATE_LIBS</b>
-variables which can be used in Makefile.am or Makefile.in like this:
-</p>
-<pre>
-        SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@
-        SAMPLERATE_LIBS = @SAMPLERATE_LIBS@
-</pre>
-
-<p>
-If you install libsamplerate from source, you will probably need to set the
-<b>PKG_CONFIG_PATH</b> environment variable's suggested at the end of the
-libsamplerate configure process. For instance on my system I get this:
-</p>
-<pre>
-    -=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-=-
-
-      Configuration summary :
-
-        Version : ..................... 0.1.3
-        Enable debugging : ............ no
-
-      Tools :
-
-        Compiler is GCC : ............. yes
-        GCC major version : ........... 3
-
-      Extra tools required for testing and examples :
-
-        Have FFTW : ................... yes
-        Have libsndfile : ............. yes
-        Have libefence : .............. no
-
-      Installation directories :
-
-        Library directory : ........... /usr/local/lib
-        Program directory : ........... /usr/local/bin
-        Pkgconfig directory : ......... /usr/local/lib/pkgconfig
-</pre>
-
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-<A NAME="Q003"></A>
-<H2><BR><B>Q3 : If I upsample and downsample to the original rate, for
-	example 44.1->96->44.1, do I get an identical signal as the one before the
-	up/down resampling?</B></H2>
-<P>
-The short answer is that for the general case, no, you don't.
-The long answer is that for some signals, with some converters, you will
-get very, very close.
-</P>
-<P>
-In order to resample correctly (ie using the <B>SRC_SINC_*</B> converters),
-filtering needs to be applied, regardless of whether its upsampling or
-downsampling.
-This filter needs to attenuate all frequencies above 0.5 times the minimum of
-the source and destination sample rate (call this fshmin).
-Since the filter needed to achieve full attenuation at this point, it has to
-start rolling off a some frequency below this point.
-It is this rolloff of the very highest frequencies which causes some of the
-loss.
-</P>
-<P>
-The other factor is that the filter itself can introduce transient artifacts
-which causes the output to be different to the input.
-</P>
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-<A NAME="Q004"></A>
-<H2><BR><B>Q4 : If I ran src_simple on small chunks (say 160 frames) would that
-sound bad?</B></H2>
-<P>
-Well if you are after odd sound effects, it might sound OK.
-If you are after high quality sample rate conversion you will be disappointed.
-</P>
-<P>
-The src_simple() was designed to provide a simple to use interface for people
-who wanted to do sample rate conversion on say, a whole file all at once.
-</P>
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-<A NAME="Q005"></A>
-<H2><BR><B>Q5 : I'm using libsamplerate but the high quality settings
-	sound worse than the SRC_LINEAR converter. Why?</B></H2>
-<P>
-There are two possible problems.
-Firstly, if you are using the src_simple() function on successive blocks
-of a stream of samples, you will get bad results. The src_simple() function
-is designed for use on a whole sound file, all at once, not on contiguous
-segments of the same sound file.
-To fix the problem, you need to move to the src_process() API or the callback
-based API.
-</P>
-<P>
-If you are already using the src_process() API or the callback based API and
-the high quality settings sound worse than SRC_LINEAR, then you have other
-problems.
-Read on for more debugging hints.
-</P>
-<P>
-All of the higher quality converters need to keep state while doing conversions
-on segments of a large chunk of audio.
-This state information is kept inside the private data pointed to by the
-SRC_STATE pointer returned by the src_new() function.
-This means, that when you want to start doing sample rate conversion on a
-stream of data, you should call src_new() to get a new SRC_STATE pointer
-(or alternatively, call src_reset() on an existing SRC_STATE pointer).
-You should then pass this SRC_STATE pointer to the src_process() function
-with each new block of audio data.
-When you have completed the conversion, you can then call src_delete() on
-the SRC_STATE pointer.
-</P>
-<P>
-If you are doing all of the above correctly, you need to examine your usage
-of the values passed to src_process() in the
-	<A HREF="api_misc.html#SRC_DATA">SRC_DATA</A>
-struct.
-Specifically:
-</P>
-<UL>
-	<LI> Check that input_frames and output_frames fields are being set in
-			terms of frames (number of sample values times channels) instead
-			of just the number of samples.
-	<LI> Check that you are using the return values input_frames_used and
-			output_frames_gen to update your source and destination pointers
-			correctly.
-	<LI> Check that you are updating the data_in and data_out pointers
-			correctly for each successive call.
-</UL>
-<P>
-While doing the above, it is probably useful to compare what you are doing to
-what is done in the example programs in the examples/ directory of the source
-code tarball.
-</P>
-<P>
-If you have done all of the above and are still having problems then its
-probably time to email the author with the smallest chunk of code that
-adequately demonstrates your problem.
-This chunk should not need to be any more than 100 lines of code.
-</P>
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-<A NAME="Q006"></A>
-<H2><BR><B>Q6 : I'm use the SRC_SINC_* converters and up-sampling by a ratio of 
-	2. I reset the converter and put in 1000 samples and I expect to get 2000
-	samples out, but I'm getting less than that. Why?</B></H2>
-<P>
-The short answer is that there is a transport delay inside the converter itself.
-Long answer follows.
-</P>
-<P>
-By way of example, the first time you call src_process() you might only get 1900
-samples out.
-However, after that first call all subsequent calls will probably get you about
-2000 samples out for every 1000 samples you put in.
-</P>
-<P>
-The main problems people have with this transport delay is that they need to read
-out an exact number of samples and the transport delay scews this up.
-The best way to overcome this problem is to always supply more samples on the 
-input than is actually needed to create the required number of output samples.
-With reference to the example above, if you always supply 1500 samples at the
-input, you will always get 2000 samples at the output.
-You will always need to keep track of the number of input frames used on each
-call to src_process() and deal with these values appropriately.
-</P>
-
-<!-- pepper -->
-<!-- ========================================================================= -->
-<A NAME="Q007"></A>
-<H2><BR><B>Q7 : I have input and output sample rates that are integer
-	values, but the API wants me to divide one by the other and put the result
-	in a floating point number. Won't this case problems for long running
-	conversions?</B></H2>
-<P>
-The short answer is no, the precision of the ratio is many orders of magnitude
-more than is really needed.
-</P>
-<P>
-For the long answer, lets do come calculations.
-Firstly, the <tt>src_ratio</tt> field is double precision floating point number
-which has
-	<a href="http://en.wikipedia.org/wiki/Double_precision">
-	53 bits of precision</a>.
-</P>
-<P>
-That means that the maximum error in your ratio converted to a double is one
-bit in 2^53 which means the the double float value would be wrong by one sample
-after 9007199254740992 samples have passed or wrong by more than half a sample
-wrong after half that many (4503599627370496 samples) have passed.
-</P>
-<P>
-Now if for example our output sample rate is 96kHz then
-</P>
-<pre>
-    4503599627370496 samples at 96kHz is 46912496118 seconds
-    46912496118 seconds is 781874935 minutes
-    781874935 minutes is 13031248 hours
-    13031248 hours is 542968 days
-    542968 days is 1486 years
-</pre>
-<P>
-So, after 1486 years, the input will be wrong by more than half of one sampling
-period.
-</P>
-<p>
-All this assumes that the crystal oscillators uses to sample the audio stream
-is perfect.
-This is not the case.
-According to
-	<a href="http://www.ieee-uffc.org/freqcontrol/quartz/vig/vigcomp.htm">
-	this web site</a>,
-the accuracy of standard crystal oscillators (XO, TCXO, OCXO) is at best
-1 in 100 million.
-The <tt>src_ratio</tt> is therefore 45035996 times more accurate than the
-crystal clock source used to sample the original audio signal and any potential
-problem with the <tt>src_ratio</tt> being a floating point number will be
-completely swamped by sampling inaccuracies.
-</p>
-
-<!-- <A HREF="mailto:aldel@mega-nerd.com">For the spam bots</A> -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
binary files a/doc/foo_dsp_src9.png /dev/null differ
--- a/doc/history.html
+++ /dev/null
@@ -1,102 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>History</B></H1>
-<UL>
-	<LI>Version 0.0.0 (Oct 06 2002) First alpha release (friends and family only).
-	<LI>Version 0.0.2 (Oct 10 2002) Second alpha release (fools rush in ....).
-	<LI>...
-	<LI>Version 0.0.7 (Nov 17 2002) The last mono only version.
-	<LI>Version 0.0.9 (Nov 21 2002) Full multi channel support. First pass at
-		documentation. Still not ready for release.
-	<LI>Version 0.0.11 (Nov 26 2002) Incorporated some suggestions from Conrad
-		Parker.
-	<LI>Version 0.0.12 (Nov 28 2002) First public release.
-	<LI>Version 0.0.13 (Dec 03 2002) Fixes for MacOSX and Solaris.
-	<LI>Version 0.0.14 (Jan 13 2003) Now compiles on Win32. Major code speedup.
-		Minor bug fixes.
-	<LI>Version 0.0.15 (May 02 2003) Minor bug fixes.
-	<LI>Version 0.1.0 (Mar 14 2004) Add callback API, functions for short to
-		float and float to short conversion. Minor bug fixes.
-	<LI>Version 0.1.1 (Jul 17 2004) Callback API bug fix. Bugfix for aggressive
-		gcc-3.4 optimisations.
-	<LI>Version 0.1.2 (Sep 12 2004) Callback API reset bug fix.
-	<LI>Version 0.1.3 (Mar 23 2008) Huge quality improvements to two best SINC
-		based converters.
-	<LI>Version 0.1.4 (Jul 02 2008) Fix segfault when using extremely low
-		conversion ratios.
-	<LI>Version 0.1.5 (Jan 11 2009) Optimisation resulting in dramatic throughput
-		improvements
-			(<a href="http://www.mega-nerd.com/erikd/Blog/CodeHacking/SecretRabbitCode/rel_0_1_5.html">
-			See here.</a>).
-	<LI>Version 0.1.6 (Jan 27 2009) Minor bug fix in test suite (account for
-		rounding error on x86_64).
-	<LI>Version 0.1.7 (Feb 14 2009) Fix a segfault bug. Fix compilation under
-		MSVC.
-	<LI>Version 0.1.8 (Aug 15 2011) Minor bug fixes and updates.
-	<LI>Version 0.1.9 (Sep 19 2016) Fix for a segfault. Relicense under BSD license.
-</UL>
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/index.html
+++ /dev/null
@@ -1,129 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-<BR>
-
-<TABLE ALIGN="center" WIDTH="80%">
-<TR><TD>
-<P>
-	<I>
-	"Choosing a sample rate coverter wasn't easy. We ran numerous tests with
-	Secret Rabbit Code and other sample rate converters, then compared them all.
-	In the end, SRC outperformed the others, including some extremely well known
-	and popular software. We had one issue with SRC, but after emailing Erik, he
-	got back to us immediately with an answer. Choosing SRC was a no brainer."
-	</I><BR>
-	   Ryan Smith, International Marketing Manager, <BR>
-	   <A HREF="http://emersys.co.kr/">Emersys Corp.</A>, South Korea.<BR>
-	   Product : <A HREF="http://maven3d.com">Maven3D</A>
-
-</P>
-</TD></TR>
-</TABLE>
-<P>
-	<B>S</B>ecret <B>R</B>abbit <B>C</B>ode (aka libsamplerate) is a
-	<B>S</B>ample <B>R</B>ate <B>C</B>onverter for audio.
-	One example of where such a thing would be useful is converting audio
-	from the CD sample rate of 44.1kHz to the 48kHz sample rate used by
-	DAT players.
-</P>
-<!-- pepper -->
-<P>
-	<B>SRC</B> is capable of arbitrary and time varying conversions ; from
-	downsampling by a factor of 256 to upsampling by the same factor.
-	Arbitrary in this case means that the ratio of input and output
-	sample rates can be an irrational number.
-	The conversion ratio can also vary with time for speeding up and slowing
-	down effects.
-</P>
-<!-- pepper -->
-<P>
-	<B>SRC</B> provides a small set of converters to allow quality to
-	be traded off against computation cost.
-	The current best converter provides a signal-to-noise ratio of 145dB
-	with -3dB passband extending from DC to 96&#37; of the theoretical
-	best bandwidth for a given pair of input and output sample rates.
-</P>
-<!-- pepper -->
-<P>
-	Since the library has few dependencies beyond that provided by the
-	standard C library, it should compile and work on just about any
-	operating system.
-	It is known to work on Linux, MacOSX,
-		<A HREF="win32.html">Win32</A>
-	and Solaris.
-	With some relatively minor hacking it should also be relatively easy
-	to port it to embedded systems and digital signal processors.
-</P>
-<!-- pepper -->
-<P>
-	In addition, the library comes with a comprehensive test suite which
-	can validate the performance of the library on new platforms.
-</P>
-
-<!-- pepper -->
-<!-- <A HREF="mailto:aldel0305@mega-nerd.com">For the spam bots</A> -->
-<!-- pepper -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/license.html
+++ /dev/null
@@ -1,80 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-	<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_lic.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>License</B></H1>
-<!-- pepper -->
-<P>
-	From its first release in 2002, Secret Rabbit Code was under a dual
-	licensing scheme where people could chose to use it under the terms
-	of the GNU General Public License or pay for a commercial use
-	license.
-</P>
-<!-- pepper -->
-<P>
-	In 2016, thanks to a generous offer from Epic Games International,
-	Secret Rabbit Code was relicensed under the 2-clause BSD license.
-</P>
-<!-- pepper -->
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/lists.html
+++ /dev/null
@@ -1,91 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_lists.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>Mailing Lists</B></H1>
-<P>
-There are currently two mailings lists for Secret Rabbit Code:<!-- pepper -->
-</P>
-<!-- pepper -->
-<UL>
-	<LI><B>sr&#99;-ann&#111;un&#99;e@mega-nerd.&#99;&#111;m</B>&nbsp;&nbsp;<!-- pepper -->
-
-		<A HREF="m&#97;ilt&#111;:sr&#99;-announ&#99;e-request@meg&#97;-nerd.&#99;om?subject=subscribe">Subscribe</A>
-		<BR>
-		A read only announcement list.<!-- pepper -->
-		<BR><BR>
-	<LI><B>sr&#99;@mega-nerd.&#99;&#111;m</B>&nbsp;&nbsp;<!-- pepper -->
-		<A HREF="m&#97;ilt&#111;:sr&#99;-request@meg&#97;-nerd.&#99;om?subject=subscribe">Subscribe</A>
-		<BR>
-		A general list which will also carry all the email from the announce list. 
-		Posting to this list is restricted to subscribers. <!-- pepper -->
-</UL>
-<!-- pepper -->
-<P>
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-
-</BODY>
-</HTML>
-
binary files a/doc/paypal.png /dev/null differ
--- a/doc/quality.html
+++ /dev/null
@@ -1,179 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_qual.dat" 
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1><B>SRC Quality</B></H1>
-<CENTER><P>
-	<B>This document not yet complete.</B><BR>
-</P></CENTER>
-<P>
-	When measuring the performance of a Sample Rate Converter, there are three 
-	factors to consider:
-</P>
-<UL>
-	<LI><B>Signal-to-Noise Ratio</B> - a measure of how much noise the sample 
-			rate conversion process adds to the signal. 
-			This is measured in decibels (dB) and the higher this value the 
-			better.
-			For most sample rate converters, the SNR will vary depending on
-			the input signal and the ratio between input and output sample
-			rates.
-			The only valid comparison of SNR is between the worst case for
-			for each converter.
-	<LI><B>Bandwidth</B> - most sample rate converters attenuate high 
-			frequencies as part of their operation. 
-			Bandwidth can be measured by finding the frequency where the 
-			attenuation is 3dB and expressing that as a percentage of the full 
-			bandwidth at that sampling rate.
-	<LI><B>Speed</B> - the faster the better <B>:-)</B>.
-</UL>
-
-<P>
-	There are a number of sample rate converters available for downloading
-	but I will limit the comparison ot Secret Rabbit Code to the following:
-</P>
-<UL>
-	<LI><A HREF="http://libsndfile.github.io/libsamplerate/download.html">sndfile-resample</A>
-		which is a program (which uses libsamplerate) from the <B>examples/</B> 
-		directory of the Secret Rabbit Code source code distribution.
-	<LI><A HREF="https://ccrma.stanford.edu/~jos/resample/">
-			Resample</A>
-		by Julius O Smiths which seems to have been the first high quality converter 
-		available as source code.
-	<LI><A HREF="http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/ResampAudio.html">ResampAudio</A> 
-		which is part of 
-		<A HREF="http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/AFsp.html">
-			Audio File Programs and Routines</A>
-		by Peter Kabal.
-	<LI><A HREF="http://home.sprynet.com/~cbagwell/sox.html">SoX</A> which is maintained
-		by Chris Bagwell.
-		SoX is also able to perform some low quality sample rate conversions but these
-		will not be investigated.
-	<LI><A HREF="http://shibatch.sourceforge.net/">Shibatch</A> which seems to be a
-		frequency domain sample rate converter.
-		Unfortunately, this converter does not handle arbitrary conversion ratios and
-		hence could not be properly compared to the other converters.
-	<LI><A HREF="http://sr-convert.sourceforge.net/">sr-convert</A> is another
-		converter which does not handle arbitrary conversion ratios.
-</UL>
-
-<P>
-It should be noted that the first three converters above are based on the algorithm
-by <A HREF="http://www-ccrma.stanford.edu/~jos/resample/"> Julius O. Smith</A>
-which emulates the conversion of the digital signal to an analogue one and then
-sampling the analogue signal at the new sample rate.
-</P>
-
-<!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-<H3><B>Methodology</B></H3>
-<P>
-	Measuring the SNR of a converter is relatively straight forward. 
-	Generate an input signal consisting of a windowed sine wave, sample rate
-	convert it and measure the signal-to-noise ratio of the output signal.
-	A typical length for the original file is 30000 samples.
-</P>
-<P>
-	The bandwidth of a sample rate converter is a little more difficult to measure.
-	Currently this is done by generating two short files containing a windowed
-	sine wave.
-	The frequencies of the sine waves are 0.35 and 0.495 of the sample rate.
-	These file are then upsampled by a factor of 2 using the converter under test.
-	If the attenutaion of the lower frquency is less than 3dB and higher frequency is
-	more than 3dB, it is then possible to iteratively increase the lower frequency
-	and decrease the upper frequency keeping the -3dB point bracketed.
-	When the distance between the upper and lower frequency is sufficiently small,
-	it is possible to obtain a very accurate estimate of the -3dB frequency.
-</P>
-<P>
-	The speed of a sample rate converter is easy to measure; simply perform a
-	conversion on a large file or a number of smaller files and time the conversion 
-	process.
-</P>
-
-<P>
-	The above measurement techniques are built into a test program which is delivered
-	with the Secret Rabbit Code source code distibution.
-	This program is able to test the first four of the above converters.
-</P>
-<!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
-
-<H3><B>SoX</B></H3>
-<P>
-	SoX provides three methods of resampling; a linear interpolator, a polyphase
-	resampler and the Julius O. Smith simulated analogue filter method. 
-</P>
-
-<H3><B>Shibatch</B></H3>
-<P>
-	Shibach 
-</P>
-
-<P>
-	<B>More Coming Soon.</B> 
-</P>
-
-<!-- <A HREF="mailto:aldel@mega-nerd.com">For the spam bots</A> -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- a/doc/win32.html
+++ /dev/null
@@ -1,99 +1,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-	<TITLE>
-	Secret Rabbit Code (aka libsamplerate)
-	</TITLE>
-	<META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsamplerate-0.1.8">
-	<META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
-	<META NAME="Keywords"    CONTENT="libsamplerate sound resample audio dsp Linux">
-	<LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
-</HEAD>
-
-<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
-<!-- pepper -->
-<CENTER>
-	<IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
-</CENTER>
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<TABLE ALIGN="center" WIDTH="98%">
-<TR>
-<TD VALIGN="top">
-<BR>
-<DIV CLASS="nav">
-	<BR>
-	<A HREF="index.html">Home</A><BR>
-	<A HREF="license.html">License</A><BR>
-	<A HREF="history.html">History</A><BR>
-	<A HREF="download.html">Download</A><BR>
-	<A HREF="quality.html">Quality</A><BR>
-	<A HREF="api.html">API</A><BR>
-	<A HREF="bugs.html">Bug Reporting</A><BR>
-	<A HREF="win32.html">On Win32</A><BR>
-	<A HREF="faq.html">FAQ</A><BR>
-	<A HREF="lists.html">Mailing Lists</A><BR>
-	<A HREF="ChangeLog">ChangeLog</A><BR>
-<BR>
-<DIV CLASS="block">
-Author :<BR>Erik de Castro Lopo
-<!-- pepper -->
-<BR><BR>
-<!-- pepper -->
-
-</DIV>
-	<IMG SRC=
-	"/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_win32.dat"
-	HEIGHT=30 WIDTH=100 ALT="counter.gif">
-</DIV>
-
-</TD>
-<!-- pepper -->
-<!-- ######################################################################## -->
-<!-- pepper -->
-<TD VALIGN="top">
-<DIV CLASS="block">
-
-<H1>Compiling on Win32</H1>
-<P>
-	You can use <A HREF="https://cmake.org/">CMake</A> to generate Visual Studio project.
-	The configuration process is described <A HREF="https://cmake.org/runningcmake/">here</A>.
-</P>
-<P>
-	The libsamplerate library itself does not require any dependencies, but if you want to build
-	examples and tests, you will need the <A HREF="https://github.com/libsndfile/libsndfile">libsndfile</A>
-	and <A HREF="http://www.fftw.org/">FFTW</A> libraries. The easiest way to install them is to use a package
-	manager, such as <A HREF="">Vcpkg</A>. Their README.md contains detailed installation instructions for
-	supported platforms. Libsamplerate requires the <CODE>libsndfile</CODE> and <CODE>fftw3</CODE> packages.
-</P>
-<BR>
-
-<!--
-
-From here:
-
-	http://www.gimp.org/~tml/gimp/win32/downloads.html
-
-Download these files:
-
-	gettext-runtime-0.13.1.zip
-	glib-2.4.5-20040903.zip
-	libiconv-1.9.1.bin.woe32.zip
-	pkgconfig-0.15.zip
-
-and install them.
-
--->
-
-<!-- <A HREF="mailto:aldel@mega-nerd.com">For the spam bots</A> -->
-
-</DIV>
-</TD></TR>
-</TABLE>
-
-</BODY>
-</HTML>
-
--- /dev/null
+++ b/docs/SRC.css
@@ -1,0 +1,48 @@
+a:link {
+  color: #FB1465;
+}
+
+a:active, a:visited {
+  color: #FB1465;
+}
+
+body {
+  background: black;
+  color: white;
+  font-family: arial, helvetica, sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #FB1465;
+}
+
+code, kbd, samp, var {
+  font-family: courier, monospace;
+  font-size: 1em;
+}
+
+main {
+  padding-left: 3%;
+  padding-right: 3%;
+}
+
+pre {
+  font-family: courier, monospace;
+  font-size: 1em;
+}
+
+.image-logo {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+  margin-bottom: 1em;
+}
+
+.indent_block {
+  margin-left: 10%;
+  margin-right: 10%;
+}
+
+.nf {
+  font-weight: bold;
+}
binary files /dev/null b/docs/SRC.png differ
--- /dev/null
+++ b/docs/_config.yml
@@ -1,0 +1,8 @@
+---
+author: Erik de Castro Lopo, erikd@mega-nerd.com
+description: An audio Sample Rate Conversion library
+keywords: libsamplerate, sound, resample, audio, dsp, Linux
+version: 0.1.8
+
+markdown: kramdown
+---
--- /dev/null
+++ b/docs/_layouts/default.html
@@ -1,0 +1,51 @@
+<!DOCTYPE html">
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta name="description" content="{{ site.description | page.description }}">
+  <meta name="keywords" content="{{ site.keywords | page.keywords }}">
+  <title>{{ page.title }}</title>
+  <link rel="stylesheet" href="SRC.css" type="text/css" media="all">
+</HEAD>
+
+<body>
+  <footer>
+    <img src="SRC.png" class="image-logo" height=100 width=760 alt="SRC.png">
+  </footer>
+  <table align="center" width="98%">
+    <tr>
+      <td valign="top">
+        <nav>
+          <a href="index.html">Home</a><br>
+          <a href="license.html">License</a><br>
+          <a href="history.html">History</a><br>
+          <a href="download.html">Download</a><br>
+          <a href="quality.html">Quality</a><br>
+          <a href="api.html">API</a><br>
+          <a href="bugs.html">Bug Reporting</a><br>
+          <a href="win32.html">On Win32</a><br>
+          <a href="faq.html">FAQ</a><br>
+          <a href="lists.html">Mailing Lists</a><br>
+          <a href="https://github.com/libsndfile/libsamplerate/blob/master/ChangeLog">ChangeLog</a><br>
+          <nav>
+            <div class="block">
+              <p>Author:<br>&nbsp;Erik&nbsp;de&nbsp;Castro&nbsp;Lopo</p>
+            </div>
+      </td>
+      <td valign="top">
+        <main>
+          <article>
+
+            {{ content }}
+
+          </article>
+        </main>
+      </td>
+    </tr>
+  </table>
+
+</body>
+
+</html>
\ No newline at end of file
--- /dev/null
+++ b/docs/api.md
@@ -1,0 +1,46 @@
+---
+layout: default
+---
+
+# Applications Programming Interface
+
+The publically callable functions of libsamplerate are all listed in the
+**\<samplerate.h\>** header file. In order to use any of the functionality of
+libsamplerate, you need to add
+
+```c
+#include <samplerate.h>
+```
+
+to the top of any function that call any of the following functions. You will
+also need to link you binary with the libsamplerate library.
+
+The API allows three methods for accessing the capabilies of the library:
+
+- A [simple interface](api_simple.md) which can sample rate convert a single
+  block of samples (one or more channels) in one go. The simple API is less
+  capable than the full API.
+- A [more fully featured interface](api_full.md) which allows time varying
+  sample rate conversion on streaming data (again one or more channels).
+- A [callback interface](api_callback.md) which has the same functionality as
+  the interface above but allows the details of input and output to be
+  separated. The output is generated by call a read function and the library
+  calls a user supplied callback function to obtain its input. This interface is
+  particularly well suited to applications where the output sample rate is
+  varied with time.
+
+**NB :** All three access methods are able to process multi channel interleaved
+data.
+
+The parts of the API which are common to all three interfaces are:
+
+- The [error reporting](api_misc.md#error-reporting) mechanisim.
+- The available [converter](api_misc.md#converters) types.
+- The [SRC_DATA](api_misc.md#src_data) struct.
+
+All three versions of the API are restricted to operating on buffers of ISO C
+Standard **float** data. However, there are two [auxillary functions](api_misc.md#auxillary-functions)
+for converting arrays of float data to and from short data.
+
+**Note:** The **tests/** and **examples/** directories of the source code
+distribution contain numerous example programs showing the use of the library.
--- /dev/null
+++ b/docs/api_callback.md
@@ -1,0 +1,88 @@
+---
+layout: default
+---
+
+# Callback API
+
+The callback API consists of the following functions :
+
+```c
+typedef long (*src_callback_t) (void *cb_data, float **data) ;
+
+SRC_STATE* src_callback_new (src_callback_t func,
+                    int converter_type, int channels,
+                    int *error, void* cb_data) ;
+
+SRC_STATE* src_delete (SRC_STATE *state) ;
+
+long src_callback_read (SRC_STATE *state, double src_ratio,
+                    long frames, float *data) ;
+
+int src_reset (SRC_STATE *state) ;
+int src_set_ratio (SRC_STATE *state, double new_ratio) ;
+```
+
+Like the [simple API](api_simple.md) and the [full API](api_full.md), the
+callback based API is able to operate on interleaved multi channel data.
+
+An example of the use of the callback based API can be found in the
+**varispeed-play** program in the **examples/** directory of the source code
+tarball.
+
+## Initialisation
+
+```c
+SRC_STATE* src_callback_new (src_callback_t func,
+                    int converter_type, int channels,
+                    int *error, void* cb_data) ;
+```
+
+The **src_callback_new** function returns an anonymous pointer to a sample rate
+converter callback object, src_state. This is the same type of object as that
+returned by [src\_new](api_full.md#initialisation), but with different internal
+state. Although these are the same object type, they cannot be used
+interchangeably. If an error occurs the function returns a NULL pointer and
+fills in the error value pointed to by the **error** pointer supplied by the
+caller.
+
+The caller then passes the SRC_STATE object to the **src_callback_read**
+function to pull data out of the converter. When the caller is finished with the
+converter they should pass it to the clean up function [src_delete](api_full.md#cleanup).
+
+The **func** parameter is a user supplied function which must match the
+**src_callback_t** type signature while **cb_data** is a pointer to data which
+be passed as the first parameter to the user supplied callback function. This
+function is called by the converter whenever it needs input data as a result of
+being calls to **src_callback_read**.
+
+If the converter was initialised to work with more than one channel, the
+callback function must work with mutiple channels of interleaved data. The
+callback function should return the number of frames it supplying to the
+converter. For multi channel files, this return value should be the number of
+floats divided by the number of channels.
+
+The converter must be one of the supplied converter types documented [here](api_misc.md#converters).
+
+The caller then passes the SRC_STATE pointer to the **src_callback_read**
+function to pull data out of the converter.
+
+## Callback Read
+
+```c
+long src_callback_read (SRC_STATE *state, double src_ratio,
+                    long frames, float *data) ;
+```
+
+The **src_callback_read** function is passed the [**SRC_STATE**](api_misc.md#src_data)
+pointer returned by **src_callback_new**, the coversion ratio
+(output_sample_rate / input_sample_rate), the maximum number of output frames to
+generate and a pointer to a buffer in which to place the output data. For multi
+channel files, the data int the output buffer is stored in interleaved format.
+
+The **src_callback_read** function returns the number of frames generated or
+zero if an error occurs or it runs out of input (ie the user supplied callback
+function returns zero and there is no more data buffered internally). If an
+error has occurred, the function [src_error](api_misc.md#error-reporting)
+will return non-zero.
+
+See also : [**src_set_ratio**](api_full.md#set-ratio)
--- /dev/null
+++ b/docs/api_full.md
@@ -1,0 +1,146 @@
+---
+layout: default
+---
+
+# Full API
+
+The full API consists of the following functions :
+
+```c
+SRC_STATE* src_new (int converter_type, int channels, int *error) ;
+SRC_STATE* src_delete (SRC_STATE *state) ;
+
+int src_process (SRC_STATE *state, SRC_DATA *data) ;
+int src_reset (SRC_STATE *state) ;
+int src_set_ratio (SRC_STATE *state, double new_ratio) ;
+```
+
+## Initialisation
+
+```c
+SRC_STATE* src_new (int converter_type, int channels, int *error) ;
+```
+
+The **src\_new** function returns an anonymous pointer to a sample rate
+converter object, src\_state. If an error occurs the function returns a
+NULL pointer and fills in the error value pointed to by the **error**
+pointer supplied by the caller. The converter must be one of the
+supplied converter types documented [here](api_misc.md#converters).
+
+## Cleanup
+
+```c
+SRC_STATE* src_delete (SRC_STATE *state) ;
+```
+
+The **src\_delete** function frees up all memory allocated for the given
+sample rate converter object and returns a NULL pointer. The caller is
+responsible for freeing any memory passed to the sample rate converter
+via the pointer to the **SRC\_DATA** struct.
+
+## Process
+
+```c
+int src_process (SRC_STATE *state, SRC_DATA *data) ;
+```
+
+The **src\_process** function processes the data provided by the caller
+in an **SRC\_DATA** struct using the sample rate converter object
+specified by the **SRC\_STATE** pointer. When operating on streaming
+data, this function can be called over and over again, with each new
+call providing new input data and returning new output data.
+
+The **SRC\_DATA** struct passed as the second parameter to the
+**src\_process** function has the following fields:
+
+```c
+typedef struct
+{   const float  *data_in;
+    float *data_out;
+
+    long   input_frames, output_frames ;
+    long   input_frames_used, output_frames_gen ;
+
+    int    end_of_input ;
+
+    double src_ratio ;
+} SRC_DATA ;
+```
+
+The fields of this struct which must be filled in by the caller are:
+
+data_in
+: A pointer to the input data samples.
+
+input_frames
+: The number of frames of data pointed to by data_in.
+
+data_out
+: A pointer to the output data samples.
+
+output_frames
+: Maximum number of frames pointer to by data_out.
+
+src_ratio
+: Equal to output_sample_rate / input_sample_rate.
+
+end_of_input
+: Equal to 0 if more input data is available and 1 otherwise.
+
+Note that the data\_in and data\_out arrays may not overlap. If they do,
+the library will return an error code.
+
+When the **src\_process** function returns **output\_frames\_gen** will
+be set to the number of output frames generated and
+**input\_frames\_used** will be set to the number of input frames
+consumed to generate the provided number of output frames.
+
+The **src\_process** function returns non-zero if an error occurs. The
+non-zero error return value can be decoded into a text string using the
+function documented [here](api_misc.md#error-reporting).
+
+## Reset
+
+```c
+int src_reset (SRC_STATE *state) ;
+```
+
+The **src\_reset** function resets the internal state of the sample rate
+converter object to the same state it had immediately after its creation
+using **src\_new**. This should be called whenever a sample rate
+converter is to be used on two separate, unrelated pieces of audio.
+
+## Clone
+
+```c
+SRC_STATE* src_clone (SRC_STATE *state, int *error) ;
+```
+
+The **src_clone** function creates a copy of the internal state of the sample
+rate converter object. The output of the next call to **src\_process** will be
+identical for both the original and cloned state (given the same **SRC_DATA**
+input). This could be used to later resume sample rate conversion at a specific
+location in a stream with the same state, which may be useful in real-time
+applications.
+
+If an error occurs the function returns a NULL pointer and fills in the
+error value pointed to by the **error** pointer supplied by the caller.
+
+## Set Ratio
+
+```c
+int src_set_ratio (SRC_STATE *state, double new_ratio) ;
+```
+
+When using the **src_process** or **src_callback_process** APIs and updating the
+**src_ratio** field of the **SRC_STATE** struct, the library will try to
+smoothly transition between the conversion ratio of the last call and the
+conversion ratio of the current call.
+
+If the user want to bypass this smooth transition and achieve a step response in
+the conversion ratio, the **src_set_ratio** function can be used to set the
+starting conversion ratio of the next call to **src_process** or
+**src_callback_process**.
+
+This function returns non-zero on error and the error return value can be
+decoded into a text string using the function documented [here](api_misc.md#error-reporting).
--- /dev/null
+++ b/docs/api_misc.md
@@ -1,0 +1,143 @@
+---
+layout: default
+---
+
+# Miscellaneous API Documentation
+
+## Error Reporting
+
+Most of the API functions either return an integer error (ie **src_simple** and
+**src_process**) or return an integer error value via an int pointer parameter
+(**src_new**). These integer error values can be converted into a human readable
+text strings by calling the function:
+
+```c
+const char* src_strerror (int error) ;
+```
+
+which will return an error string for valid error numbers, the string
+\"No Error\" for an error value of zero or a NULL pointer if no error message
+has been defined for that error value.
+
+## Converters
+
+Secret Rabbit Code has a number of different converters which can be selected
+using the **converter_type** parameter when calling **src_simple** or
+**src_new**. Currently, the five converters available are:
+
+```c
+enum
+{
+    SRC_SINC_BEST_QUALITY       = 0,
+    SRC_SINC_MEDIUM_QUALITY     = 1,
+    SRC_SINC_FASTEST            = 2,
+    SRC_ZERO_ORDER_HOLD         = 3,
+    SRC_LINEAR                  = 4
+} ;
+```
+
+As new converters are added, they will given a number corresponding to the next
+integer.
+
+The details of these converters are as follows:
+
+- **SRC_SINC_BEST_QUALITY** - This is a bandlimited interpolator derived from
+  the mathematical **sinc** function and this is the highest quality sinc based
+  converter, providing a worst case Signal-to-Noise Ratio (SNR) of 97 decibels
+  (dB) at a bandwidth of 97%. All three SRC_SINC_* converters are based on the
+  techniques of [Julius O. Smith](http://ccrma.stanford.edu/~jos/resample/)
+  although this code was developed independantly.
+- **SRC_SINC_MEDIUM_QUALITY** - This is another bandlimited interpolator much
+  like the previous one. It has an SNR of 97dB and a bandwidth of 90%. The speed
+  of the conversion is much faster than the previous one.
+- **SRC_SINC_FASTEST** - This is the fastest bandlimited interpolator and has an
+  SNR of 97dB and a bandwidth of 80%.
+- **SRC_ZERO_ORDER_HOLD** - A Zero Order Hold converter (interpolated value is
+  equal to the last value). The quality is poor but the conversion speed is
+  blindlingly fast.
+- **SRC_LINEAR** - A linear converter. Again the quality is poor, but the
+  conversion speed is blindingly fast.
+
+There are two functions that give either a (text string) name or description for
+each converter:
+
+```c
+const char *src_get_name (int converter_type) ;
+const char *src_get_description (int converter_type) ;
+```
+
+The name will typically be a short string for use in a dialog box, while the
+description string is longer.
+
+Both of these functions return a NULL pointer if there is no converter for the
+given **converter_type** value. Since the converters have consecutive
+**converter_type** values, the caller is easily able to figure out the number of
+converters at run time. This enables a binary dynamically linked against an old
+version of the library to know about converters from later versions of the
+library as they become available.
+
+## SRC_DATA
+
+Both the simple and the full featured versions of the API use the **SRC_DATA**
+struct to pass audio and control data into the sample rate converter. This
+struct is defined as:
+
+```c
+typedef struct
+{   const float  *data_in;
+    float *data_out ;
+
+    long   input_frames, output_frames ;
+    long   input_frames_used, output_frames_gen ;
+
+    int    end_of_input ;
+
+    double src_ratio ;
+} SRC_DATA ;
+```
+
+The **data_in** pointer is used to pass audio data into the converter while the
+**data_out** pointer supplies the converter with an array to hold the
+converter's output. For a converter which has been configured for mulitchannel
+operation, these pointers need to point to a single array of interleaved data.
+
+The **input_frames** and **output_frames** fields supply the converter with the
+lengths of the arrays (in frames) pointed to by the **data_in** and **data_out**
+pointers respectively. For monophinc data, these values would indicate the
+length of the arrays while for multi channel data these values would be equal to
+the the length of the array divided by the number of channels.
+
+The **end_of_input** field is only used when the sample rate converter is used
+by calling the **src_process** function. In this case it should be set to zero
+if more buffers are to be passed to the converter and 1 if the current buffer is
+the last.
+
+Finally, the **src_ratio** field specifies the conversion ratio defined as the
+output sample rate divided by the input sample rate. For a connected set of
+buffers, this value can be varies on each call to **src_process** resulting in a
+time varying sample rate conversion process. For time varying sample rate
+conversions, the ratio will be linearly interpolated between the **src_ratio**
+value of the previous call to **src_process** and the value for the current
+call.
+
+The **input_frames_used** and **output_frames_gen** fields are set by the
+converter to inform the caller of the number of frames consumed from the
+**data_in** array and the number of frames generated in the **data_out** array
+respectively. These values are for the current call to **src_process** only.
+
+## Auxillary Functions
+
+There are four auxillary functions for converting arrays of float data to and
+from short or int data. These functions are defined as:
+
+```c
+void src_short_to_float_array (const short *in, float *out, int len) ;
+void src_float_to_short_array (const float *in, short *out, int len) ;
+void src_int_to_float_array (const int *in, float *out, int len) ;
+void src_float_to_int_array (const float *in, int *out, int len) ;
+```
+
+The float data is assumed to be in the range [-1.0, 1.0] and it is automatically
+scaled on the conversion to and from float. On the float to short/int conversion
+path, any data values which would overflow the range of short/int data are
+clipped.
--- /dev/null
+++ b/docs/api_simple.md
@@ -1,0 +1,71 @@
+---
+layout: default
+---
+
+# Simple API
+
+**Important Note:** The simple API is not designed to work on small chunks of a
+larger piece of audio. If you attempt to use it this way you are doing it wrong
+and will not get the results you want. For processing audio data in chunks you
+**must** use the [full api](api_full.md) or the [callback based api](api_callback.md).
+
+The simple API consists of a single function:
+
+```c
+int src_simple (SRC_DATA *data, int converter_type, int channels) ;
+```
+
+The use of this function rather than the more fully featured API requires the
+caller to know the total length of the input data before hand and that all input
+and output data can be held in the system's memory at once. It also assumes that
+there is a single constant ratio between input and output sample rates.
+
+Dealing with the easy stuff first, the **converter_type** parameter should be
+one of the values defined in **samplerate.h** and documented [here](api_misc.md#converters)
+while the **channels** parameter specifies the number of interleaved channels
+that the sample rate converter is being asked to process (number of input
+channels and output channels is always equal). There is no hard upper limit on
+the number of channels; it is limited purely by the amount of memory available.
+
+The first parameter to **src_simple** is a pointer to an **SRC_DATA** struct
+(more info [here](api_misc.md#src_data)) defined as follows:
+
+```c
+typedef struct
+{   const float  *data_in;
+    float *data_out ;
+
+    long   input_frames, output_frames ;
+    long   input_frames_used, output_frames_gen ;
+
+    int    end_of_input ;
+
+    double src_ratio ;
+} SRC_DATA ;
+```
+
+The fields of this struct which must be filled in by the caller are:
+
+data_in
+: A pointer to the input data samples.
+
+input_frames
+: The number of frames of data pointed to by data_in.
+
+data_out
+: A pointer to the output data samples.
+
+output_frames
+: Maximum number of frames pointer to by data_out.
+
+src_ratio
+: Equal to output_sample_rate / input_sample_rate.
+
+When the **src_simple** function returns **output_frames_gen** will be set to
+the number of output frames generated and **input_frames_used** will be set to
+the number of input frames used to generate the provided number of output
+frames.
+
+The **src_simple** function returns a non-zero value when an error occurs. See
+[here](api_misc.md#error-reporting) for how to convert the error value into a
+text string.
--- /dev/null
+++ b/docs/bugs.md
@@ -1,0 +1,37 @@
+---
+layout: default
+---
+
+# Bug Reporting
+
+If you are a user and have a problem using libsamplerate with another piece of
+software, you should contact the author of that other software and get them to
+explore their use of this library and possibly submit a bug report. If you are a
+coder and think you have found a bug in libsamplerate then read on.
+
+Secret Rabbit Code is an extremely complex piece of code but I do think that it
+is relatively bug free. In addition, the source code distribution includes a
+comprehensive test suite for regression testing. This means it is extremely
+unlikely that new bugs creep in when modifications are made to the code.
+
+SRC is also not the most simple library to use which means that I do get a
+number of bug reports which turn out to be bugs in the user's program rather
+than bugs in SRC. Up until now, I have investigated each bug report as
+thoroughly as possible. Unfortunately, this chews up a lot of my time which
+could otherwise be spent improving SRC, working on other Free Software or
+spending time with my family.
+
+I have therefore decided, that I cannot investigate any bug report unless the
+person reporting the problem can supply me with a short self contained test
+program or a modification to one of the existing test programs in the tests/
+directory of the source code distribution. The test program should meet the
+following criteria:
+
+- Written in C or C++.
+- Does not use any libraries or header files other than the ones which are
+  standard for the relevant languages. (Of course libsamplerate can be used :-)).
+- It is the minimal program which can adequately display the problem.
+- It clearly displays the criteria for pass or fail.
+
+Supplying a good test program will maximize the speed with which your bug report
+gets dealt with.
--- /dev/null
+++ b/docs/download.md
@@ -1,0 +1,15 @@
+---
+layout: default
+---
+
+# Download
+
+The latest version of Secret Rabbit Code is {{ site.version }}.
+
+Download it on [GitHub releases page](https://github.com/libsndfile/libsamplerate/releases/latest).
+
+Compiling libsamplerate is relatively easy. The INSTALL file in the top level
+directory gives instructions on compiling and installing libsamplerate on
+Unix-like systems (including MacOSX). For Win32 there are instructions in the
+docs/ directory of the tarball. These instructions are mirrored
+[here](win32.md).
--- /dev/null
+++ b/docs/faq.md
@@ -1,0 +1,193 @@
+---
+layout: default
+---
+
+# Frequently Asked Questions
+
+1. [Q1 : Is it normal for the output of libsamplerate to be louder than its input?](#Q001)
+2. [Q2 : On Unix/Linux/MacOSX, what is the best way of detecting the presence and location of libsamplerate and its header file using autoconf?](#Q002)
+3. [Q3 : If I upsample and downsample to the original rate, for example 44.1-\>96-\>44.1, do I get an identical signal as the one before the up/down resampling?](#Q003)
+4. [Q4 : If I ran src\_simple (libsamplerate) on small chunks (160 frames) would that sound bad?](#Q004)
+5. [Q5 : I\'m using libsamplerate but the high quality settings sound worse than the SRC\_LINEAR converter. Why?](#Q005)
+6. [Q6 : I\'m use the SRC\_SINC\_\* converters and up-sampling by a ratio of 2. I reset the converter and put in 1000 samples and I expect to get 2000 samples out, but I\'m getting less than that. Why?](#Q006)
+7. [Q7 : I have input and output sample rates that are integer values, but the API wants me to divide one by the other and put the result in a floating point number. Won\'t this case problems for long running conversions?](#Q007)
+
+## Q1 : Is it normal for the output of libsamplerate to be louder than its input? {#Q001}
+
+The output of libsamplerate will be roughly the same volume as the input.
+However, even if the input is strictly in the range (-1.0, 1.0), it is still
+possible for the output to contain peak values outside this range.
+
+Consider four consecutive samples of [0.5 0.999 0.999 0.5]. If we are up
+sampling by a factor of two we need to insert samples between each of the
+existing samples. Its pretty obvious then, that the sample between the two 0.999
+values should and will be bigger than 0.999.
+
+This means that anyone using libsamplerate should normalize its output before
+doing things like saving the audio to a 16 bit WAV file.
+
+## Q2 : On Unix/Linux/MacOSX, what is the best way of detecting the presence and location of libsamplerate and its header file using autoconf? {#Q002}
+
+libsamplerate 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):
+
+    PKG_CHECK_MODULES(SAMPLERATE, samplerate >= 0.1.3,
+            ac_cv_samplerate=1, ac_cv_samplerate=0)
+
+    AC_DEFINE_UNQUOTED([HAVE_SAMPLERATE],${ac_cv_samplerate},
+            [Set to 1 if you have libsamplerate.])
+
+    AC_SUBST(SAMPLERATE_CFLAGS)
+    AC_SUBST(SAMPLERATE_LIBS)
+
+This will automatically set the **SAMPLERATE_CFLAGS** and **SAMPLERATE_LIBS**
+variables which can be used in Makefile.am or Makefile.in like this:
+
+    SAMPLERATE_CFLAGS = @SAMPLERATE_CFLAGS@
+    SAMPLERATE_LIBS = @SAMPLERATE_LIBS@
+
+If you install libsamplerate from source, you will probably need to set the
+**PKG_CONFIG_PATH** environment variable's suggested at the end of the
+libsamplerate configure process. For instance on my system I get this:
+
+    -=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-=-
+
+        Configuration summary :
+
+        Version : ..................... 0.1.3
+        Enable debugging : ............ no
+
+        Tools :
+
+        Compiler is GCC : ............. yes
+        GCC major version : ........... 3
+
+        Extra tools required for testing and examples :
+
+        Have FFTW : ................... yes
+        Have libsndfile : ............. yes
+        Have libefence : .............. no
+
+        Installation directories :
+
+        Library directory : ........... /usr/local/lib
+        Program directory : ........... /usr/local/bin
+        Pkgconfig directory : ......... /usr/local/lib/pkgconfig
+
+## Q3 : If I upsample and downsample to the original rate, for example 44.1->96->44.1, do I get an identical signal as the one before the up/down resampling? {#Q003}
+
+The short answer is that for the general case, no, you don't. The long answer is
+that for some signals, with some converters, you will get very, very close.
+
+In order to resample correctly (ie using the **SRC_SINC_*** converters),
+filtering needs to be applied, regardless of whether its upsampling or
+downsampling. This filter needs to attenuate all frequencies above 0.5 times the
+minimum of the source and destination sample rate (call this fshmin). Since the
+filter needed to achieve full attenuation at this point, it has to start rolling
+off a some frequency below this point. It is this rolloff of the very highest
+frequencies which causes some of the loss.
+
+The other factor is that the filter itself can introduce transient artifacts
+which causes the output to be different to the input.
+
+## Q4 : If I ran src_simple on small chunks (say 160 frames) would that sound bad? {#Q004}
+
+Well if you are after odd sound effects, it might sound OK. If you are after
+high quality sample rate conversion you will be disappointed.
+
+The src_simple() was designed to provide a simple to use interface for people
+who wanted to do sample rate conversion on say, a whole file all at once.
+
+## Q5 : I'm using libsamplerate but the high quality settings sound worse than the SRC_LINEAR converter. Why? {#Q005}
+
+There are two possible problems. Firstly, if you are using the src_simple()
+function on successive blocks of a stream of samples, you will get bad results.
+The src_simple() function is designed for use on a whole sound file, all at
+once, not on contiguous segments of the same sound file. To fix the problem, you
+need to move to the src_process() API or the callback based API.
+
+If you are already using the src_process() API or the callback based API and the
+high quality settings sound worse than SRC_LINEAR, then you have other problems.
+Read on for more debugging hints.
+
+All of the higher quality converters need to keep state while doing conversions
+on segments of a large chunk of audio. This state information is kept inside the
+private data pointed to by the SRC_STATE pointer returned by the src_new()
+function. This means, that when you want to start doing sample rate conversion
+on a stream of data, you should call src_new() to get a new SRC_STATE pointer
+(or alternatively, call src_reset() on an existing SRC_STATE pointer). You
+should then pass this SRC_STATE pointer to the src_process() function with each
+new block of audio data. When you have completed the conversion, you can then
+call src_delete() on the SRC_STATE pointer.
+
+If you are doing all of the above correctly, you need to examine your usage of
+the values passed to src\_process() in the [SRC_DATA](api_misc.md#src_data)
+struct. Specifically:
+
+- Check that input_frames and output_frames fields are being set in terms of
+  frames (number of sample values times channels) instead of just the number of
+  samples.
+- Check that you are using the return values input_frames_used and
+  output_frames_gen to update your source and destination pointers correctly.
+- Check that you are updating the data_in and data_out pointers correctly for
+  each successive call.
+
+While doing the above, it is probably useful to compare what you are doing to
+what is done in the example programs in the examples/ directory of the source
+code tarball.
+
+If you have done all of the above and are still having problems then its
+probably time to email the author with the smallest chunk of code that
+adequately demonstrates your problem. This chunk should not need to be any more
+than 100 lines of code.
+
+## Q6 : I'm use the SRC_SINC_* converters and up-sampling by a ratio of 2. I reset the converter and put in 1000 samples and I expect to get 2000 samples out, but I'm getting less than that. Why? {#Q006}
+
+The short answer is that there is a transport delay inside the converter itself.
+Long answer follows.
+
+By way of example, the first time you call src_process() you might only get 1900
+samples out. However, after that first call all subsequent calls will probably
+get you about 2000 samples out for every 1000 samples you put in.
+
+The main problems people have with this transport delay is that they need to
+read out an exact number of samples and the transport delay scews this up. The
+best way to overcome this problem is to always supply more samples on the input
+than is actually needed to create the required number of output samples. With
+reference to the example above, if you always supply 1500 samples at the input,
+you will always get 2000 samples at the output. You will always need to keep
+track of the number of input frames used on each call to src_process() and deal
+with these values appropriately.
+
+## Q7 : I have input and output sample rates that are integer values, but the API wants me to divide one by the other and put the result in a floating point number. Won't this case problems for long running conversions? {#Q007}
+
+The short answer is no, the precision of the ratio is many orders of magnitude
+more than is really needed.
+
+For the long answer, lets do come calculations. Firstly, the `src_ratio` field
+is double precision floating point number which has [53 bits of precision](http://en.wikipedia.org/wiki/Double_precision).
+
+That means that the maximum error in your ratio converted to a double is one bit
+in 2^53 which means the the double float value would be wrong by one sample
+after 9007199254740992 samples have passed or wrong by more than half a sample
+wrong after half that many (4503599627370496 samples) have passed.
+
+Now if for example our output sample rate is 96kHz then
+
+    4503599627370496 samples at 96kHz is 46912496118 seconds
+    46912496118 seconds is 781874935 minutes
+    781874935 minutes is 13031248 hours
+    13031248 hours is 542968 days
+    542968 days is 1486 years
+
+So, after 1486 years, the input will be wrong by more than half of one sampling
+period.
+
+All this assumes that the crystal oscillators uses to sample the audio stream is
+perfect. This is not the case. According to [this web site](http://www.ieee-uffc.org/freqcontrol/quartz/vig/vigcomp.htm),
+the accuracy of standard crystal oscillators (XO, TCXO, OCXO) is at best 1 in
+100 million. The `src_ratio` is therefore 45035996 times more accurate than the
+crystal clock source used to sample the original audio signal and any potential
+problem with the `src_ratio` being a floating point number will be completely
+swamped by sampling inaccuracies.
binary files /dev/null b/docs/foo_dsp_src9.png differ
--- /dev/null
+++ b/docs/history.md
@@ -1,0 +1,34 @@
+---
+layout: default
+---
+
+# History
+
+- Version 0.0.0 (Oct 06 2002) First alpha release (friends and family only).
+- Version 0.0.2 (Oct 10 2002) Second alpha release (fools rush in ....).
+- ...
+- Version 0.0.7 (Nov 17 2002) The last mono only version.
+- Version 0.0.9 (Nov 21 2002) Full multi channel support. First pass at
+  documentation. Still not ready for release.
+- Version 0.0.11 (Nov 26 2002) Incorporated some suggestions from Conrad Parker.
+- Version 0.0.12 (Nov 28 2002) First public release.
+- Version 0.0.13 (Dec 03 2002) Fixes for MacOSX and Solaris.
+- Version 0.0.14 (Jan 13 2003) Now compiles on Win32. Major code speedup. Minor
+  bug fixes.
+- Version 0.0.15 (May 02 2003) Minor bug fixes.
+- Version 0.1.0 (Mar 14 2004) Add callback API, functions for short to float and
+  float to short conversion. Minor bug fixes.
+- Version 0.1.1 (Jul 17 2004) Callback API bug fix. Bugfix for aggressive
+  gcc-3.4 optimisations.
+- Version 0.1.2 (Sep 12 2004) Callback API reset bug fix.
+- Version 0.1.3 (Mar 23 2008) Huge quality improvements to two best SINC based
+  converters.
+- Version 0.1.4 (Jul 02 2008) Fix segfault when using extremely low conversion
+  ratios.
+- Version 0.1.5 (Jan 11 2009) Optimisation resulting in dramatic throughput
+  improvements ([See here.](http://www.mega-nerd.com/erikd/Blog/CodeHacking/SecretRabbitCode/rel_0_1_5.html)).
+- Version 0.1.6 (Jan 27 2009) Minor bug fix in test suite (account for rounding
+  error on x86_64).
+- Version 0.1.7 (Feb 14 2009) Fix a segfault bug. Fix compilation under MSVC.
+- Version 0.1.8 (Aug 15 2011) Minor bug fixes and updates.
+- Version 0.1.9 (Sep 19 2016) Fix for a segfault. Relicense under BSD license.
--- /dev/null
+++ b/docs/index.md
@@ -1,0 +1,39 @@
+---
+layout: default
+title: Libsamplerate home page
+---
+
+{: .indent_block}
+*"Choosing a sample rate coverter wasn't easy. We ran numerous tests with Secret
+Rabbit Code and other sample rate converters, then compared them all. In the
+end, SRC outperformed the others, including some extremely well known and
+popular software. We had one issue with SRC, but after emailing Erik, he got
+back to us immediately with an answer. Choosing SRC was a no brainer."*  
+Ryan Smith, International Marketing Manager,  
+[Emersys Corp.](http://emersys.co.kr/), South Korea.  
+Product : [Maven3D](http://maven3d.com)
+
+**S**ecret **R**abbit **C**ode (aka libsamplerate) is a **S**ample **R**ate
+**C**onverter for audio. One example of where such a thing would be useful is
+converting audio from the CD sample rate of 44.1kHz to the 48kHz sample rate
+used by DAT players.
+
+**SRC** is capable of arbitrary and time varying conversions; from downsampling
+by a factor of 256 to upsampling by the same factor. Arbitrary in this case
+means that the ratio of input and output sample rates can be an irrational
+number. The conversion ratio can also vary with time for speeding up and slowing
+down effects.
+
+**SRC** provides a small set of converters to allow quality to be traded off
+against computation cost. The current best converter provides a signal-to-noise
+ratio of 145dB with -3dB passband extending from DC to 96% of the theoretical
+best bandwidth for a given pair of input and output sample rates.
+
+Since the library has few dependencies beyond that provided by the standard C
+library, it should compile and work on just about any operating system. It is
+known to work on Linux, MacOSX, [Win32](win32.md) and Solaris. With some
+relatively minor hacking it should also be relatively easy to port it to
+embedded systems and digital signal processors.
+
+In addition, the library comes with a comprehensive test suite which can
+validate the performance of the library on new platforms.
--- /dev/null
+++ b/docs/license.md
@@ -1,0 +1,12 @@
+---
+layout: default
+---
+
+# License
+
+From its first release in 2002, Secret Rabbit Code was under a dual licensing
+scheme where people could chose to use it under the terms of the GNU General
+Public License or pay for a commercial use license.
+
+In 2016, thanks to a generous offer from Epic Games International, Secret Rabbit
+Code was relicensed under the 2-clause BSD license.
binary files /dev/null b/docs/lists.md differ
binary files /dev/null b/docs/paypal.png differ
--- /dev/null
+++ b/docs/quality.md
@@ -1,0 +1,84 @@
+---
+layout: default
+---
+
+# SRC Quality
+
+**This document not yet complete.**
+
+When measuring the performance of a Sample Rate Converter, there are three
+factors to consider:
+
+- **Signal-to-Noise Ratio** - a measure of how much noise the sample rate
+  conversion process adds to the signal. This is measured in decibels (dB) and
+  the higher this value the better. For most sample rate converters, the SNR
+  will vary depending on the input signal and the ratio between input and output
+  sample rates. The only valid comparison of SNR is between the worst case for
+  each converter.
+- **Bandwidth** - most sample rate converters attenuate high frequencies as part
+  of their operation. Bandwidth can be measured by finding the frequency where
+  the attenuation is 3dB and expressing that as a percentage of the full
+  bandwidth at that sampling rate.
+- **Speed** - the faster the better **:-)**.
+
+There are a number of sample rate converters available for downloading but I
+will limit the comparison ot Secret Rabbit Code to the following:
+
+- [sndfile-resample](http://libsndfile.github.io/libsamplerate/download.html)
+  which is a program (which uses libsamplerate) from the **examples/** directory
+  of the Secret Rabbit Code source code distribution.
+- [Resample](https://ccrma.stanford.edu/~jos/resample/) by Julius O Smiths which
+  seems to have been the first high quality converter available as source code.
+- [ResampAudio](http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/ResampAudio.html)
+  which is part of [Audio File Programs and Routines](http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/AFsp.html)
+  by Peter Kabal.
+- [SoX](http://home.sprynet.com/~cbagwell/sox.html) which is maintained by Chris
+  Bagwell. SoX is also able to perform some low quality sample rate conversions
+  but these will not be investigated.
+- [Shibatch](http://shibatch.sourceforge.net/) which seems to be a frequency
+  domain sample rate converter. Unfortunately, this converter does not handle
+  arbitrary conversion ratios and hence could not be properly compared to the
+  other converters.
+- [sr-convert](http://sr-convert.sourceforge.net/) is another converter which
+  does not handle arbitrary conversion ratios.
+
+It should be noted that the first three converters above are based on the
+algorithm by [Julius O. Smith](http://www-ccrma.stanford.edu/~jos/resample/)
+which emulates the conversion of the digital signal to an analogue one and then
+sampling the analogue signal at the new sample rate.
+
+## Methodology
+
+Measuring the SNR of a converter is relatively straight forward. Generate an
+input signal consisting of a windowed sine wave, sample rate convert it and
+measure the signal-to-noise ratio of the output signal. A typical length for the
+original file is 30000 samples.
+
+The bandwidth of a sample rate converter is a little more difficult to measure.
+Currently this is done by generating two short files containing a windowed sine
+wave. The frequencies of the sine waves are 0.35 and 0.495 of the sample rate.
+These file are then upsampled by a factor of 2 using the converter under test.
+If the attenutaion of the lower frquency is less than 3dB and higher frequency
+is more than 3dB, it is then possible to iteratively increase the lower
+frequency and decrease the upper frequency keeping the -3dB point bracketed.
+When the distance between the upper and lower frequency is sufficiently small,
+it is possible to obtain a very accurate estimate of the -3dB frequency.
+
+The speed of a sample rate converter is easy to measure; simply perform a
+conversion on a large file or a number of smaller files and time the conversion
+process.
+
+The above measurement techniques are built into a test program which is
+delivered with the Secret Rabbit Code source code distibution. This program is
+able to test the first four of the above converters.
+
+## SoX
+
+SoX provides three methods of resampling; a linear interpolator, a polyphase
+resampler and the Julius O. Smith simulated analogue filter method.
+
+## Shibatch
+
+Shibach
+
+**More Coming Soon.**
--- /dev/null
+++ b/docs/win32.md
@@ -1,0 +1,15 @@
+---
+layout: default
+---
+
+# Compiling on Win32
+
+You can use [CMake](https://cmake.org/) to generate Visual Studio project. The
+configuration process is described [here](https://cmake.org/runningcmake/).
+
+The libsamplerate library itself does not require any dependencies, but if you
+want to build examples and tests, you will need the [libsndfile](https://github.com/libsndfile/libsndfile)
+and [FFTW](http://www.fftw.org/) libraries. The easiest way to install them is
+to use a package manager, such as [Vcpkg](https://github.com/microsoft/vcpkg). Their README.md contains detailed
+installation instructions for supported platforms. Libsamplerate requires the
+`libsndfile` and `fftw3` packages.