mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-10-30 17:23:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			778 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			778 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | |
| <html>
 | |
| <head>
 | |
|   <title>SoundTouch library README</title>
 | |
|   <meta http-equiv="Content-Type"
 | |
|  content="text/html; charset=windows-1252">
 | |
|   <meta http-equiv="Content-Language" content="en-us">
 | |
|   <meta name="author" content="Olli Parviainen">
 | |
|   <meta name="description"
 | |
|  content="Readme file for SoundTouch audio processing library">
 | |
|   <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
 | |
|   <meta name="ProgId" content="FrontPage.Editor.Document">
 | |
|   <style> <!-- .normal { font-family: Arial }
 | |
| 	--></style>
 | |
| </head>
 | |
| <body class="normal">
 | |
| <hr>
 | |
| <h1>SoundTouch audio processing library v1.7.1</h1>
 | |
| <p class="normal">SoundTouch library Copyright © Olli Parviainen 2001-2012 </p>
 | |
| <hr>
 | |
| <h2>1. Introduction </h2>
 | |
| <p>SoundTouch is an open-source audio processing library that allows
 | |
| changing the sound tempo, pitch and playback rate parameters
 | |
| independently from each other, i.e.:</p>
 | |
| <ul>
 | |
|   <li> Sound tempo can be increased or decreased while maintaining the
 | |
| original pitch </li>
 | |
|   <li> Sound pitch can be increased or decreased while maintaining the
 | |
| original tempo </li>
 | |
|   <li> Change playback rate that affects both tempo and pitch at the
 | |
| same time </li>
 | |
|   <li> Choose any combination of tempo/pitch/rate</li>
 | |
| </ul>
 | |
| <h3>1.1 Contact information </h3>
 | |
| <p>Author email: oparviai 'at' iki.fi </p>
 | |
| <p>SoundTouch WWW page: <a href="http://www.surina.net/soundtouch">http://www.surina.net/soundtouch</a></p>
 | |
| <hr>
 | |
| <h2>2. Compiling SoundTouch</h2>
 | |
| <p>Before compiling, notice that you can choose the sample data format
 | |
| if it's desirable to use floating point sample data instead of 16bit
 | |
| integers. See section "sample data format" for more information.</p>
 | |
| <h3>2.1. Building in Microsoft Windows</h3>
 | |
| <p>Project files for Microsoft Visual C++ 6.0 and Visual C++ .NET are
 | |
| supplied with the source code package.<br>
 | |
| </p>
 | |
| <p> Please notice that SoundTouch library uses processor-specific
 | |
| optimizations for Pentium III and AMD processors. Visual Studio .NET
 | |
| and later versions supports the required instructions by default, but
 | |
| Visual Studio 6.0 requires a processor pack upgrade to be installed in
 | |
| order to support these optimizations. The processor pack upgrade can be
 | |
| downloaded from Microsoft site at this URL:</p>
 | |
| <p><a href="http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx">http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx</a></p>
 | |
| <p>If the above URL is unavailable or removed, go to <a
 | |
|  href="http://msdn.microsoft.com/"> http://msdn.microsoft.com</a> and
 | |
| perform a search with keywords "processor pack". </p>
 | |
| <p>To build the binaries with Visual C++ compiler, either run
 | |
| "make-win.bat" script, or open the appropriate project files in source
 | |
| code directories with Visual Studio. The final executable will appear
 | |
| under the "SoundTouch\bin" directory. If using the Visual Studio IDE
 | |
| instead of the make-win.bat script, directories bin and lib may need to
 | |
| be created manually to the SoundTouch package root for the final
 | |
| executables. The make-win.bat script creates these directories
 | |
| automatically. </p>
 | |
| <h3>2.2. Building in Gnu platforms</h3>
 | |
| <p>The SoundTouch library compiles in practically any platform
 | |
| supporting GNU compiler (GCC) tools. SoundTouch requires GCC version 4.3 or later.</p>
 | |
| <p>To build and install the binaries, run the following commands in 
 | |
| /soundtouch directory:</p>
 | |
| <table border="0" cellpadding="0" cellspacing="4">
 | |
|   <tbody>
 | |
|     <tr>
 | |
|       <td style="vertical-align: top;">
 | |
|       <pre>./bootstrap  -</pre>
 | |
|       </td>
 | |
|       <td style="vertical-align: top;">Creates "configure" file with
 | |
| local autoconf/automake toolset.<br>
 | |
|       </td>
 | |
|     </tr>
 | |
|     <tr valign="top">
 | |
|       <td>
 | |
|       <pre>./configure  -</pre>
 | |
|       </td>
 | |
|       <td>
 | |
|       <p>Configures the SoundTouch package for the local environment.
 | |
| Notice that "configure" file is not available before running the
 | |
| "./bootstrap" command as above.<br>
 | |
|       </p>
 | |
|       </td>
 | |
|     </tr>
 | |
|     <tr valign="top">
 | |
|       <td>
 | |
|       <pre>make         -</pre>
 | |
|       </td>
 | |
|       <td>
 | |
|       <p>Builds the SoundTouch library & SoundStretch utility.</p>
 | |
|       </td>
 | |
|     </tr>
 | |
|     <tr valign="top">
 | |
|       <td>
 | |
|       <pre>make install -</pre>
 | |
|       </td>
 | |
|       <td>
 | |
|       <p>Installs the SoundTouch & BPM libraries to <b>/usr/local/lib</b>
 | |
| and SoundStretch utility to <b>/usr/local/bin</b>. Please notice that
 | |
| 'root' privileges may be required to install the binaries to the
 | |
| destination locations.</p>
 | |
|       </td>
 | |
|     </tr>
 | |
|   </tbody>
 | |
| </table>
 | |
| <h4><b>2.2.1 Required GNU tools</b> </h4>
 | |
| <p> <span style="font-weight: bold;">Bash shell</span>, <span
 | |
|  style="font-weight: bold;">GNU C++ compiler</span>, <span
 | |
|  style="font-weight: bold;">libtool</span>, <span
 | |
|  style="font-weight: bold;">autoconf</span> and <span
 | |
|  style="font-weight: bold;">automake</span> tools
 | |
| are required for compiling the SoundTouch library. These are usually
 | |
| included with the GNU/Linux distribution, but if not, install these
 | |
| packages first. For example, Ubuntu Linux can acquire and install
 | |
| these with the following command:</p>
 | |
| <pre><b>sudo apt-get install automake autoconf libtool build-essential</b></pre>
 | |
| <h4><b>2.2.2 Problems with GCC compiler compatibility</b></h4>
 | |
| <p>At the release time the SoundTouch package has been tested to
 | |
| compile in GNU/Linux platform. However, If you have problems getting the
 | |
| SoundTouch library compiled, try disabling optimizations that are specific for 
 | |
| x86 processors by running <b>./configure</b> script with switch
 | |
| <blockquote>
 | |
| <pre>--enable-x86-optimizations=no</pre>
 | |
| </blockquote>
 | |
| 
 | |
| Alternatively, if you don't use GNU Configure system, edit file "include/STTypes.h" 
 | |
| directly and remove the following definition:<blockquote>
 | |
|   <pre>#define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS 1</pre>
 | |
| </blockquote>
 | |
| 
 | |
| <h4><b>2.2.3 Compiling Shared Library / DLL version</b></h4>
 | |
|     <p>
 | |
|         The GNU compilation does not automatically create a shared-library version of 
 | |
|         SoundTouch (.so or .dll). If such is desired, then you can create it as follows 
 | |
|         after running the usual compilation:</p>
 | |
|     <blockquote>
 | |
|   <pre>g++ -shared -static -DDLL_EXPORTS -I../../include -o SoundTouch.dll \
 | |
|      SoundTouchDLL.cpp ../SoundTouch/.libs/libSoundTouch.a
 | |
| sstrip SoundTouch.dll</pre>
 | |
| </blockquote>
 | |
| 
 | |
| <h3>2.1. Building in Android</h3>
 | |
| <p>Android compilation instructions are within the 
 | |
|     source code package, see file "<b>source/Android-lib/README-SoundTouch-Android.html</b>" 
 | |
|     in the package.</p>
 | |
| 
 | |
| <hr>
 | |
| <h2>3. About implementation & Usage tips <h3>3.1. Supported sample data formats</h3>
 | |
| <p>The sample data format can be chosen between 16bit signed integer
 | |
| and 32bit floating point values, the default is 32bit floating point. </p>
 | |
| <p> In Windows environment, the sample data format is chosen in file
 | |
| "STTypes.h" by choosing one of the following defines:</p>
 | |
| <ul>
 | |
|   <li> <span style="font-weight: bold;">#define
 | |
| SOUNDTOUCH_INTEGER_SAMPLES</span> for 16bit signed integer </li>
 | |
|   <li> <span style="font-weight: bold;">#define </span><span
 | |
|  style="font-weight: bold;">SOUNDTOUCH_</span><span
 | |
|  style="font-weight: bold;">FLOAT_SAMPLES</span> for 32bit floating
 | |
| point</li>
 | |
| </ul>
 | |
| <p> In GNU environment, the floating sample format is used by default,
 | |
| but integer sample format can be chosen by giving the following switch
 | |
| to the configure script: </p>
 | |
| <blockquote>
 | |
|   <pre>./configure --enable-integer-samples</pre>
 | |
| </blockquote>
 | |
| <p>The sample data can have either single (mono) or double (stereo)
 | |
| audio channel. Stereo data is interleaved so that every other data
 | |
| value is for left channel and every second for right channel. Notice
 | |
| that while it'd be possible in theory to process stereo sound as two
 | |
| separate mono channels, this isn't recommended because processing the
 | |
| channels separately would result in losing the phase coherency between
 | |
| the channels, which consequently would ruin the stereo effect.</p>
 | |
| <p>Sample rates between 8000-48000H are supported.</p>
 | |
| <h3>3.2. Processing latency</h3>
 | |
| <p>The processing and latency constraints of the SoundTouch library are:</p>
 | |
| <ul>
 | |
|   <li> Input/output processing latency for the SoundTouch processor is
 | |
| around 100 ms. This is when time-stretching is used. If the rate
 | |
| transposing effect alone is used, the latency requirement is much
 | |
| shorter, see section 'About algorithms'. </li>
 | |
|   <li> Processing CD-quality sound (16bit stereo sound with 44100H
 | |
| sample rate) in real-time or faster is possible starting from
 | |
| processors equivalent to Intel Pentium 133Mh or better, if using the
 | |
| "quick" processing algorithm. If not using the "quick" mode or if
 | |
| floating point sample data are being used, several times more CPU power
 | |
| is typically required.</li>
 | |
| </ul>
 | |
| <h3>3.3. About algorithms</h3>
 | |
| <p>SoundTouch provides three seemingly independent effects: tempo,
 | |
| pitch and playback rate control. These three controls are implemented
 | |
| as combination of two primary effects, <em>sample rate transposing</em>
 | |
| and <em>time-stretching</em>.</p>
 | |
| <p><em>Sample rate transposing</em> affects both the audio stream
 | |
| duration and pitch. It's implemented simply by converting the original
 | |
| audio sample stream to the  desired duration by interpolating from
 | |
| the original audio samples. In SoundTouch, linear interpolation with
 | |
| anti-alias filtering is used. Theoretically a higher-order
 | |
| interpolation provide better result than 1st order linear
 | |
| interpolation, but in audio application linear interpolation together
 | |
| with anti-alias filtering performs subjectively about as well as
 | |
| higher-order filtering would.</p>
 | |
| <p><em>Time-stretching </em>means changing the audio stream duration
 | |
| without affecting it's pitch. SoundTouch uses WSOLA-like
 | |
| time-stretching routines that operate in the time domain. Compared to
 | |
| sample rate transposing, time-stretching is a much heavier operation
 | |
| and also requires a longer processing "window" of sound samples used by
 | |
| the processing algorithm, thus increasing the algorithm input/output
 | |
| latency. Typical i/o latency for the SoundTouch time-stretch algorithm
 | |
| is around 100 ms.</p>
 | |
| <p>Sample rate transposing and time-stretching are then used together
 | |
| to produce the tempo, pitch and rate controls:</p>
 | |
| <ul>
 | |
|   <li> <strong>'Tempo'</strong> control is implemented purely by
 | |
| time-stretching. </li>
 | |
|   <li> <strong>'Rate</strong>' control is implemented purely by sample
 | |
| rate transposing. </li>
 | |
|   <li> <strong>'Pitch</strong>' control is implemented as a
 | |
| combination of time-stretching and sample rate transposing. For
 | |
| example, to increase pitch the audio stream is first time-stretched to
 | |
| longer duration (without affecting pitch) and then transposed back to
 | |
| original duration by sample rate transposing, which simultaneously
 | |
| reduces duration and increases pitch. The result is original duration
 | |
| but increased pitch.</li>
 | |
| </ul>
 | |
| <h3>3.4 Tuning the algorithm parameters</h3>
 | |
| <p>The time-stretch algorithm has few parameters that can be tuned to
 | |
| optimize sound quality for certain application. The current default
 | |
| parameters have been chosen by iterative if-then analysis (read: "trial
 | |
| and error") to obtain best subjective sound quality in pop/rock music
 | |
| processing, but in applications processing different kind of sound the
 | |
| default parameter set may result into a sub-optimal result.</p>
 | |
| <p>The time-stretch algorithm default parameter values are set by the
 | |
| following #defines in file "TDStretch.h":</p>
 | |
| <blockquote>
 | |
|   <pre>#define DEFAULT_SEQUENCE_MS     AUTOMATIC<br>#define DEFAULT_SEEKWINDOW_MS   AUTOMATIC<br>#define DEFAULT_OVERLAP_MS      8</pre>
 | |
| </blockquote>
 | |
| <p>These parameters affect to the time-stretch algorithm as follows:</p>
 | |
| <ul>
 | |
|   <li> <strong>DEFAULT_SEQUENCE_MS</strong>: This is the default
 | |
| length of a single processing sequence in milliseconds which determines
 | |
| the how the original sound is chopped in the time-stretch algorithm.
 | |
| Larger values mean fewer sequences are used in processing. In principle
 | |
| a larger value sounds better when slowing down the tempo, but worse
 | |
| when increasing the tempo and vice versa. <br>
 | |
|     <br>
 | |
| By default, this setting value is calculated automatically according to
 | |
| tempo value.<br>
 | |
|   </li>
 | |
|   <li> <strong>DEFAULT_SEEKWINDOW_MS</strong>: The seeking window
 | |
| default length in milliseconds is for the algorithm that seeks the best
 | |
| possible overlapping location. This determines from how wide a sample
 | |
| "window" the algorithm can use to find an optimal mixing location when
 | |
| the sound sequences are to be linked back together. <br>
 | |
|     <br>
 | |
| The bigger this window setting is, the higher the possibility to find a
 | |
| better mixing position becomes, but at the same time large values may
 | |
| cause a "drifting" sound artifact because neighboring sequences can be
 | |
| chosen at more uneven intervals. If there's a disturbing artifact that
 | |
| sounds as if a constant frequency was drifting around, try reducing
 | |
| this setting.<br>
 | |
|     <br>
 | |
| By default, this setting value is calculated automatically according to
 | |
| tempo value.<br>
 | |
|   </li>
 | |
|   <li> <strong>DEFAULT_OVERLAP_MS</strong>: Overlap length in
 | |
| milliseconds. When the sound sequences are mixed back together to form
 | |
| again a continuous sound stream, this parameter defines how much the
 | |
| ends of the consecutive sequences will overlap with each other.<br>
 | |
|     <br>
 | |
| This shouldn't be that critical parameter. If you reduce the
 | |
| DEFAULT_SEQUENCE_MS setting by a large amount, you might wish to try a
 | |
| smaller value on this.</li>
 | |
| </ul>
 | |
| <p>Notice that these parameters can also be set during execution time
 | |
| with functions "<strong>TDStretch::setParameters()</strong>" and "<strong>SoundTouch::setSetting()</strong>".</p>
 | |
| <p>The table below summaries how the parameters can be adjusted for
 | |
| different applications:</p>
 | |
| <table border="1">
 | |
|   <tbody>
 | |
|     <tr>
 | |
|       <td valign="top"><strong>Parameter name</strong></td>
 | |
|       <td valign="top"><strong>Default value magnitude</strong></td>
 | |
|       <td valign="top"><strong>Larger value affects...</strong></td>
 | |
|       <td valign="top"><strong>Smaller value affects...</strong></td>
 | |
|       <td valign="top"><strong>Effect to CPU burden</strong></td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>SEQUENCE_MS</pre>
 | |
|       </td>
 | |
|       <td valign="top">Default value is relatively large, chosen for
 | |
| slowing down music tempo</td>
 | |
|       <td valign="top">Larger value is usually better for slowing down
 | |
| tempo. Growing the value decelerates the "echoing" artifact when
 | |
| slowing down the tempo.</td>
 | |
|       <td valign="top">Smaller value might be better for speeding up
 | |
| tempo. Reducing the value accelerates the "echoing" artifact when
 | |
| slowing down the tempo </td>
 | |
|       <td valign="top">Increasing the parameter value reduces
 | |
| computation burden</td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>SEEKWINDOW_MS</pre>
 | |
|       </td>
 | |
|       <td valign="top">Default value is relatively large, chosen for
 | |
| slowing down music tempo</td>
 | |
|       <td valign="top">Larger value eases finding a good mixing
 | |
| position, but may cause a "drifting" artifact</td>
 | |
|       <td valign="top">Smaller reduce possibility to find a good mixing
 | |
| position, but reduce the "drifting" artifact.</td>
 | |
|       <td valign="top">Increasing the parameter value increases
 | |
| computation burden</td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>OVERLAP_MS</pre>
 | |
|       </td>
 | |
|       <td valign="top">Default value is relatively large, chosen to
 | |
| suit with above parameters.</td>
 | |
|       <td valign="top"> </td>
 | |
|       <td valign="top">If you reduce the "sequence ms" setting, you
 | |
| might wish to try a smaller value.</td>
 | |
|       <td valign="top">Increasing the parameter value increases
 | |
| computation burden</td>
 | |
|     </tr>
 | |
|   </tbody>
 | |
| </table>
 | |
| <h3>3.5 Performance Optimizations </h3>
 | |
| <p><strong>General optimizations:</strong></p>
 | |
| <p>The time-stretch routine has a 'quick' mode that substantially
 | |
| speeds up the algorithm but may degrade the sound quality by a small
 | |
| amount. This mode is activated by calling SoundTouch::setSetting()
 | |
| function with parameter  id of SETTING_USE_QUICKSEEK and value
 | |
| "1", i.e. </p>
 | |
| <blockquote>
 | |
|   <p>setSetting(SETTING_USE_QUICKSEEK, 1);</p>
 | |
| </blockquote>
 | |
| <p><strong>CPU-specific optimizations:</strong></p>
 | |
| <ul>
 | |
|   <li> Intel MMX optimized routines are used with compatible CPUs when
 | |
| 16bit integer sample type is used. MMX optimizations are available both
 | |
| in Win32 and Gnu/x86 platforms. Compatible processors are Intel
 | |
| PentiumMMX and later; AMD K6-2, Athlon and later. </li>
 | |
|   <li> Intel SSE optimized routines are used with compatible CPUs when
 | |
| floating point sample type is used. SSE optimizations are currently
 | |
| implemented for Win32 platform only. Processors compatible with SSE
 | |
| extension are Intel processors starting from Pentium-III, and AMD
 | |
| processors starting from Athlon XP. </li>
 | |
|   <li> AMD 3DNow! optimized routines are used with compatible CPUs when
 | |
| floating point sample type is used, but SSE extension isn't supported .
 | |
| 3DNow! optimizations are currently implemented for Win32 platform only.
 | |
| These optimizations are used in AMD K6-2 and Athlon (classic) CPU's;
 | |
| better performing SSE routines are used with AMD processor starting
 | |
| from Athlon XP. </li>
 | |
| </ul>
 | |
| <hr>
 | |
| <h2><a name="SoundStretch"></a>4. SoundStretch audio processing utility
 | |
| </h2>
 | |
| <p>SoundStretch audio processing utility<br>
 | |
|     Copyright (c) Olli Parviainen 2002-2012</p>
 | |
| <p>SoundStretch is a simple command-line application that can change
 | |
| tempo, pitch and playback rates of WAV sound files. This program is
 | |
| intended primarily to demonstrate how the "SoundTouch" library can be
 | |
| used to process sound in your own program, but it can as well be used
 | |
| for processing sound files.</p>
 | |
| <h3>4.1. SoundStretch Usage Instructions</h3>
 | |
| <p>SoundStretch Usage syntax:</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch infilename outfilename [switches]</pre>
 | |
| </blockquote>
 | |
| <p>Where: </p>
 | |
| <table width="100%" border="0" cellpadding="2">
 | |
|   <tbody>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>"infilename"</pre>
 | |
|       </td>
 | |
|       <td valign="top">Name of the input sound data file (in .WAV audio
 | |
| file format). Give "stdin" as filename to use standard input pipe. </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>"outfilename"</pre>
 | |
|       </td>
 | |
|       <td valign="top">Name of the output sound file where the
 | |
| resulting sound is saved (in .WAV audio file format). This parameter
 | |
| may be omitted if you  don't want to save the output (e.g. when
 | |
| only calculating BPM rate with '-bpm' switch). Give "stdout" as
 | |
| filename to use standard output pipe.</td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre> [switches]</pre>
 | |
|       </td>
 | |
|       <td valign="top">Are one or more control switches.</td>
 | |
|     </tr>
 | |
|   </tbody>
 | |
| </table>
 | |
| <p>Available control switches are:</p>
 | |
| <table width="100%" border="0" cellpadding="2">
 | |
|   <tbody>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-tempo=n </pre>
 | |
|       </td>
 | |
|       <td valign="top">Change the sound tempo by n percents (n = -95.0
 | |
| .. +5000.0 %) </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-pitch=n</pre>
 | |
|       </td>
 | |
|       <td valign="top">Change the sound pitch by n semitones (n = -60.0
 | |
| .. + 60.0 semitones) </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-rate=n</pre>
 | |
|       </td>
 | |
|       <td valign="top">Change the sound playback rate by n percents (n
 | |
| = -95.0 .. +5000.0 %) </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-bpm=n</pre>
 | |
|       </td>
 | |
|       <td valign="top">Detect the Beats-Per-Minute (BPM) rate of the
 | |
| sound and adjust the tempo to meet 'n' BPMs. When this switch is
 | |
| applied, the "-tempo" switch is ignored. If "=n" is omitted, i.e.
 | |
| switch "-bpm" is used alone, then the BPM rate is estimated and
 | |
| displayed, but tempo not adjusted according to the BPM value. </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-quick</pre>
 | |
|       </td>
 | |
|       <td valign="top">Use quicker tempo change algorithm. Gains speed
 | |
| but loses sound quality. </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-naa</pre>
 | |
|       </td>
 | |
|       <td valign="top">Don't use anti-alias filtering in sample rate
 | |
| transposing. Gains speed but loses sound quality. </td>
 | |
|     </tr>
 | |
|     <tr>
 | |
|       <td valign="top">
 | |
|       <pre>-license</pre>
 | |
|       </td>
 | |
|       <td valign="top">Displays the program license text (LGPL)</td>
 | |
|     </tr>
 | |
|   </tbody>
 | |
| </table>
 | |
| <p>Notes:</p>
 | |
| <ul>
 | |
|   <li> To use standard input/output pipes for processing, give "stdin"
 | |
| and "stdout" as input/output filenames correspondingly. The standard
 | |
| input/output pipes will still carry the audio data in .wav audio file
 | |
| format. </li>
 | |
|   <li> The numerical switches allow both integer (e.g. "-tempo=123")
 | |
| and decimal (e.g. "-tempo=123.45") numbers. </li>
 | |
|   <li> The "-naa" and/or "-quick" switches can be used to reduce CPU
 | |
| usage while compromising some sound quality </li>
 | |
|   <li> The BPM detection algorithm works by detecting repeating bass or
 | |
| drum patterns at low frequencies of <250Hz. A lower-than-expected
 | |
| BPM figure may be reported for music with uneven or complex bass
 | |
| patterns. </li>
 | |
| </ul>
 | |
| <h3>4.2. SoundStretch usage examples </h3>
 | |
| <p><strong>Example 1</strong></p>
 | |
| <p>The following command increases tempo of the sound file
 | |
| "originalfile.wav" by 12.5% and stores result to file
 | |
| "destinationfile.wav":</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch originalfile.wav destinationfile.wav -tempo=12.5</pre>
 | |
| </blockquote>
 | |
| <p><strong>Example 2</strong></p>
 | |
| <p>The following command decreases the sound pitch (key) of the sound
 | |
| file "orig.wav" by two semitones and stores the result to file
 | |
| "dest.wav":</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch orig.wav dest.wav -pitch=-2</pre>
 | |
| </blockquote>
 | |
| <p><strong>Example 3</strong></p>
 | |
| <p>The following command processes the file "orig.wav" by decreasing
 | |
| the sound tempo by 25.3% and increasing the sound pitch (key) by 1.5
 | |
| semitones. Resulting .wav audio data is directed to standard output
 | |
| pipe:</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch orig.wav stdout -tempo=-25.3 -pitch=1.5</pre>
 | |
| </blockquote>
 | |
| <p><strong>Example 4</strong></p>
 | |
| <p>The following command detects the BPM rate of the file "orig.wav"
 | |
| and adjusts the tempo to match 100 beats per minute. Result is stored
 | |
| to file "dest.wav":</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch orig.wav dest.wav -bpm=100</pre>
 | |
| </blockquote>
 | |
| <p><strong>Example 5</strong></p>
 | |
| <p>The following command reads .wav sound data from standard input pipe
 | |
| and estimates the BPM rate:</p>
 | |
| <blockquote>
 | |
|   <pre>soundstretch stdin -bpm</pre>
 | |
| </blockquote>
 | |
| <hr>
 | |
| <h2>5. Change History</h2>
 | |
| <h3>5.1. SoundTouch library Change History </h3>
 | |
| <p><b>1.7.1:</b></p>
 | |
| <ul>
 | |
|     <li>Added files for Android compilation
 | |
| </ul>
 | |
| <p><b>1.7.0:</b></p>
 | |
| <ul>
 | |
|     <li>Sound quality improvements/li>
 | |
|     <li>Improved flush() to adjust output sound stream duration to match better with 
 | |
|         ideal duration</li>
 | |
|     <li>Rewrote x86 cpu feature check to resolve compatibility problems</li>
 | |
|     <li>Configure script automatically checks if CPU supports mmx & sse compatibility for GNU platform, and
 | |
|     the script support now "--enable-x86-optimizations" switch to allow disabling x86-specific optimizations.</li>
 | |
|     <li>Revised #define conditions for 32bit/64bit compatibility</li>
 | |
|     <li>gnu autoconf/automake script compatibility fixes</li>
 | |
|     <li>Tuned beat-per-minute detection algorithm</li>
 | |
| </ul>
 | |
| <p><b>1.6.0:</b></p>
 | |
| <ul>
 | |
|   <li> Added automatic cutoff threshold adaptation to beat detection
 | |
| routine to better adapt BPM calculation to different types of music </li>
 | |
|   <li> Retired 3DNow! optimization support as 3DNow! is nowadays
 | |
| obsoleted and assembler code is nuisance to maintain</li>
 | |
|   <li>Retired "configure" file from source code package due to
 | |
| autoconf/automake versio conflicts, so that it is from now on to be
 | |
| generated by invoking "boostrap" script that uses locally available
 | |
| toolchain version for generating the "configure" file</li>
 | |
|   <li>Resolved namespace/label naming conflicts with other libraries by
 | |
| replacing global labels such as INTEGER_SAMPLES with more specific
 | |
| SOUNDTOUCH_INTEGER_SAMPLES etc.<br>
 | |
|   </li>
 | |
|   <li>Updated windows build scripts & project files for Visual
 | |
| Studio 2008 support</li>
 | |
|   <li> Updated SoundTouch.dll API for .NET compatibility</li>
 | |
|   <li> Added API for querying nominal processing input & output
 | |
| sample batch sizes</li>
 | |
| </ul>
 | |
| <p><strong>1.5.0:</strong></p>
 | |
| <ul>
 | |
|   <li> Added normalization to correlation calculation and improvement
 | |
| automatic seek/sequence parameter calculation to improve sound quality </li>
 | |
|   <li> Bugfixes: 
 | |
|     <ul>
 | |
|       <li> Fixed negative array indexing in quick seek algorithm </li>
 | |
|       <li> FIR autoalias filter running too far in processing buffer </li>
 | |
|       <li> Check against zero sample count in rate transposing </li>
 | |
|       <li> Fix for x86-64 support: Removed pop/push instructions from
 | |
| the cpu detection algorithm.  </li>
 | |
|       <li> Check against empty buffers in FIFOSampleBuffer </li>
 | |
|       <li> Other minor fixes & code cleanup</li>
 | |
|     </ul>
 | |
|   </li>
 | |
|   <li> Fixes in compilation scripts for non-Intel platforms </li>
 | |
|   <li> Added Dynamic-Link-Library (DLL) version of SoundTouch library
 | |
| build, provided with Delphi/Pascal wrapper for calling the dll routines
 | |
|   </li>
 | |
|   <li> Added #define PREVENT_CLICK_AT_RATE_CROSSOVER that prevents a
 | |
| click artifact when crossing the nominal pitch from either positive to
 | |
| negative side or vice versa</li>
 | |
| </ul>
 | |
| <p><strong>1.4.1:</strong></p>
 | |
| <ul>
 | |
|   <li> Fixed a buffer overflow bug in BPM detect algorithm routines if
 | |
| processing more than 2048 samples at one call </li>
 | |
| </ul>
 | |
| <p><strong>1.4.0:</strong></p>
 | |
| <ul>
 | |
|   <li> Improved sound quality by automatic calculation of time stretch
 | |
| algorithm processing parameters according to tempo setting </li>
 | |
|   <li> Moved BPM detection routines from SoundStretch application into
 | |
| SoundTouch library </li>
 | |
|   <li> Bugfixes: Usage of uninitialied variables, GNU build scripts,
 | |
| compiler errors due to 'const' keyword mismatch. </li>
 | |
|   <li> Source code cleanup</li>
 | |
| </ul>
 | |
| <p><strong>1.3.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> Changed static class declaration to GCC 4.x compiler compatible
 | |
| syntax. </li>
 | |
|   <li> Enabled MMX/SSE-optimized routines also for GCC compilers.
 | |
| Earlier the MMX/SSE-optimized routines were written in
 | |
| compiler-specific inline assembler, now these routines are migrated to
 | |
| use compiler intrinsic syntax which allows compiling the same
 | |
| MMX/SSE-optimized source code with both Visual C++ and GCC compilers. </li>
 | |
|   <li> Set floating point as the default sample format and added switch
 | |
| to the GNU configure script for selecting the other sample format.</li>
 | |
| </ul>
 | |
| <p><strong>1.3.0: </strong> </p>
 | |
| <ul>
 | |
|   <li> Fixed tempo routine output duration inaccuracy due to rounding
 | |
| error </li>
 | |
|   <li> Implemented separate processing routines for integer and
 | |
| floating arithmetic to allow improvements to floating point routines
 | |
| (earlier used algorithms mostly optimized for integer arithmetic also
 | |
| for floating point samples) </li>
 | |
|   <li> Fixed a bug that distorts sound if sample rate changes during
 | |
| the sound stream </li>
 | |
|   <li> Fixed a memory leak that appeared in MMX/SSE/3DNow! optimized
 | |
| routines </li>
 | |
|   <li> Reduced redundant code pieces in MMX/SSE/3DNow! optimized
 | |
| routines vs. the standard C routines. </li>
 | |
|   <li> MMX routine incompatibility with new gcc compiler versions </li>
 | |
|   <li> Other miscellaneous bug fixes </li>
 | |
| </ul>
 | |
| <p><strong>1.2.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> Added automake/autoconf scripts for GNU platforms (in courtesy
 | |
| of David Durham) </li>
 | |
|   <li> Fixed SCALE overflow bug in rate transposer routine. </li>
 | |
|   <li> Fixed 64bit address space bugs. </li>
 | |
|   <li> Created a 'soundtouch' namespace for SAMPLETYPE definitions.</li>
 | |
| </ul>
 | |
| <p><strong>1.2.0: </strong> </p>
 | |
| <ul>
 | |
|   <li> Added support for 32bit floating point sample data type with
 | |
| SSE/3DNow! optimizations for Win32 platform (SSE/3DNow! optimizations
 | |
| currently not supported in GCC environment) </li>
 | |
|   <li> Replaced 'make-gcc' script for GNU environment by master
 | |
| Makefile </li>
 | |
|   <li> Added time-stretch routine configurability to SoundTouch main
 | |
| class </li>
 | |
|   <li> Bugfixes</li>
 | |
| </ul>
 | |
| <p><strong>1.1.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> Moved SoundTouch under lesser GPL license (LGPL). This allows
 | |
| using SoundTouch library in programs that aren't released under GPL
 | |
| license. </li>
 | |
|   <li> Changed MMX routine organiation so that MMX optimized routines
 | |
| are now implemented in classes that are derived from the basic classes
 | |
| having the standard non-mmx routines. </li>
 | |
|   <li> MMX routines to support gcc version 3. </li>
 | |
|   <li> Replaced windows makefiles by script using the .dsw files </li>
 | |
| </ul>
 | |
| <p><strong>1.0.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> "mmx_gcc.cpp": Added "using namespace std" and removed "return
 | |
| 0" from a function with void return value to fix compiler errors when
 | |
| compiling the library in Solaris environment. </li>
 | |
|   <li> Moved file "FIFOSampleBuffer.h" to "include" directory to allow
 | |
| accessing the FIFOSampleBuffer class from external files. </li>
 | |
| </ul>
 | |
| <p><strong>1.0: </strong> </p>
 | |
| <ul>
 | |
|   <li> Initial release </li>
 | |
| </ul>
 | |
| <p> </p>
 | |
| <h3>5.2. SoundStretch application Change History </h3>
 | |
| <p><b>1.7.0:</b></p>
 | |
| <ul>
 | |
|     <li>Bugfixes in Wavfile: exception string formatting, avoid getLengthMs() integer 
 | |
|         precision overflow, support WAV files using 24/32bit sample format.</li>
 | |
| </ul>
 | |
|     <p><b>1.5.0:</b></p>
 | |
| <ul>
 | |
|   <li> Added "-speech" switch to activate algorithm parameters more
 | |
| suitable for speech processing than the default parameters tuned for
 | |
| music processing.</li>
 | |
| </ul>
 | |
| <p><strong>1.4.0:</strong></p>
 | |
| <ul>
 | |
|   <li> Moved BPM detection routines from SoundStretch application into
 | |
| SoundTouch library </li>
 | |
|   <li> Allow using standard input/output pipes as audio processing
 | |
| input/output streams</li>
 | |
| </ul>
 | |
| <p><strong>1.3.0:</strong></p>
 | |
| <ul>
 | |
|   <li> Simplified accessing WAV files with floating point sample
 | |
| format. </li>
 | |
| </ul>
 | |
| <p><strong>1.2.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> Fixed 64bit address space bugs.</li>
 | |
| </ul>
 | |
| <p><strong>1.2.0: </strong> </p>
 | |
| <ul>
 | |
|   <li> Added support for 32bit floating point sample data type </li>
 | |
|   <li> Restructured the BPM routines into separate library </li>
 | |
|   <li> Fixed big-endian conversion bugs in WAV file routines (hopefully
 | |
| :)</li>
 | |
| </ul>
 | |
| <p><strong>1.1.1: </strong> </p>
 | |
| <ul>
 | |
|   <li> Fixed bugs in WAV file reading & added byte-order conversion
 | |
| for big-endian processors. </li>
 | |
|   <li> Moved SoundStretch source code under 'example' directory to
 | |
| highlight difference from SoundTouch stuff. </li>
 | |
|   <li> Replaced windows makefiles by script using the .dsw files </li>
 | |
|   <li> Output file name isn't required if output isn't desired (e.g. if
 | |
| using the switch '-bpm' in plain format only) </li>
 | |
| </ul>
 | |
| <p><strong>1.1:</strong></p>
 | |
| <ul>
 | |
|   <li> Fixed "Release" settings in Microsoft Visual C++ project file
 | |
| (.dsp) </li>
 | |
|   <li> Added beats-per-minute (BPM) detection routine and command-line
 | |
| switch "-bpm" </li>
 | |
| </ul>
 | |
| <p><strong>1.01: </strong> </p>
 | |
| <ul>
 | |
|   <li> Initial release </li>
 | |
| </ul>
 | |
| <hr>
 | |
| <h2>6. Acknowledgements </h2>
 | |
| <p>Kudos for these people who have contributed to development or
 | |
| submitted bugfixes since SoundTouch v1.3.1: </p>
 | |
| <ul>
 | |
|   <li> Arthur A</li>
 | |
|   <li> Richard Ash</li>
 | |
|   <li> Stanislav Brabec</li>
 | |
|   <li> Christian Budde</li>
 | |
|   <li> Jacek Caban</li>
 | |
|   <li> Brian Cameron</li>
 | |
|   <li> Jason Champion</li>
 | |
|   <li> David Clark</li>
 | |
|   <li> Patrick Colis</li>
 | |
|   <li> Miquel Colon</li>
 | |
|   <li> Justin Frankel</li>
 | |
|   <li> Jason Garland</li>
 | |
|   <li> Takashi Iwai</li>
 | |
|   <li> Yuval Naveh</li>
 | |
|   <li> Paulo Pizarro</li>
 | |
|   <li> Blaise Potard</li>
 | |
|   <li> RJ Ryan</li>
 | |
|   <li> Patrick Colis </li>
 | |
|   <li> Miquel Colon </li>
 | |
|   <li> Sandro Cumerlato</li>
 | |
|   <li> Justin Frankel </li>
 | |
|   <li> Jason Garland </li>
 | |
|   <li> Takashi Iwai </li>
 | |
|   <li> Mathias Möhl</li>
 | |
|   <li> Yuval Naveh </li>
 | |
|   <li> Paulo Pizarro </li>
 | |
|   <li> Blaise Potard</li>
 | |
|   <li> RJ Ryan </li>
 | |
|   <li> John Sheehy</li>
 | |
|   <li> Tim Shuttleworth</li>
 | |
|   <li> John Stumpo</li>
 | |
|   <li> Tim Shuttleworth</li>
 | |
|   <li> Katja Vetter</li>
 | |
| </ul>
 | |
| <p>Moral greetings to all other contributors and users also!</p>
 | |
| <hr>
 | |
| <h2>7. LICENSE </h2>
 | |
| <p>SoundTouch audio processing library<br>
 | |
| Copyright (c) Olli Parviainen</p>
 | |
| <p>This library is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU Lesser General Public License version 2.1
 | |
| as published by the Free Software Foundation.</p>
 | |
| <p>This library is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 | |
| General Public License for more details.</p>
 | |
| <p>You should have received a copy of the GNU Lesser General Public
 | |
| License along with this library; if not, write to the Free Software
 | |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</p>
 | |
| <hr><!--
 | |
| $Id: README.html 168 2012-12-28 20:55:19Z oparviai $-->
 | |
|     <p>
 | |
|         <i>RREADME.html file updated on 28-Dec-2012</i></p>
 | |
| </body>
 | |
| </html>
 |