1 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
2 |
<html> |
3 |
<head> |
4 |
<meta http-equiv="Content-Type" |
5 |
content="text/html; charset=windows-1252"> |
6 |
<meta http-equiv="Content-Language" content="en-us"> |
7 |
<meta name="author" content="Olli Parviainen"> |
8 |
<meta name="description" |
9 |
content="Readme file for SoundTouch audio processing library"> |
10 |
<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> |
11 |
<meta name="ProgId" content="FrontPage.Editor.Document"> |
12 |
<title>SoundTouch library README</title> |
13 |
<style> |
14 |
<!-- |
15 |
.normal { font-family: Arial } |
16 |
--> |
17 |
</style> |
18 |
</head> |
19 |
<body class="normal"> |
20 |
<hr> |
21 |
<h1>SoundTouch audio processing library v1.5.0 |
22 |
</h1> |
23 |
<p class="normal">SoundTouch library Copyright (c) Olli |
24 |
Parviainen 2002-2009 </p> |
25 |
<hr> |
26 |
<h2>1. Introduction </h2> |
27 |
<p>SoundTouch is an open-source audio |
28 |
processing library that allows changing the sound tempo, pitch |
29 |
and playback rate parameters independently from each other, i.e.:</p> |
30 |
<ul> |
31 |
<li>Sound tempo can be increased or decreased while |
32 |
maintaining the original pitch</li> |
33 |
<li>Sound pitch can be increased or decreased while |
34 |
maintaining the original tempo </li> |
35 |
<li>Change playback rate that affects both tempo |
36 |
and pitch at the same time </li> |
37 |
<li>Choose any combination of tempo/pitch/rate</li> |
38 |
</ul> |
39 |
<h3>1.1 Contact information </h3> |
40 |
<p>Author email: oparviai 'at' iki.fi </p> |
41 |
<p>SoundTouch WWW page: <a href="http://www.surina.net/soundtouch">http://www.surina.net/soundtouch</a></p> |
42 |
<hr> |
43 |
<h2>2. Compiling SoundTouch</h2> |
44 |
<p>Before compiling, notice that you can choose the sample data format |
45 |
if it's desirable to use floating point sample |
46 |
data instead of 16bit integers. See section "sample data format" |
47 |
for more information.</p> |
48 |
<h3>2.1. Building in Microsoft Windows</h3> |
49 |
<p>Project files for Microsoft Visual C++ 6.0 and Visual C++ .NET are |
50 |
supplied with the source code package. </p> |
51 |
<p> Please notice that SoundTouch |
52 |
library uses processor-specific optimizations for Pentium III and AMD |
53 |
processors. Visual Studio .NET and later versions supports the required |
54 |
instructions by default, but Visual Studio 6.0 requires a processor pack upgrade |
55 |
to be installed in order to support these optimizations. The processor pack upgrade can be downloaded from |
56 |
Microsoft site at this URL:</p> |
57 |
<p><a href="http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx">http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx</a></p> |
58 |
<p>If the above URL is unavailable or removed, go |
59 |
to <a href="http://msdn.microsoft.com/">http://msdn.microsoft.com</a> |
60 |
and perform a search with keywords "processor pack". </p> |
61 |
<p>To build the binaries with Visual C++ |
62 |
compiler, either run "make-win.bat" script, or open the |
63 |
appropriate project files in source code directories with Visual |
64 |
Studio. The final executable will appear under the "SoundTouch\bin" |
65 |
directory. If using the Visual Studio IDE instead of the make-win.bat script, directories bin and |
66 |
lib may need to be created manually to the SoundTouch |
67 |
package root for the final executables. The make-win.bat script |
68 |
creates these directories automatically. |
69 |
</p> |
70 |
<h3>2.2. Building in Gnu platforms</h3> |
71 |
<p>The SoundTouch library can be compiled in |
72 |
practically any platform supporting GNU compiler (GCC) tools. |
73 |
SoundTouch have been tested with gcc version 3.3.4., but it |
74 |
shouldn't be very specific about the gcc version. Assembler-level |
75 |
performance optimizations for GNU platform are currently available in |
76 |
x86 platforms only, they are automatically disabled and replaced with |
77 |
standard C routines in other processor platforms.</p> |
78 |
<p>To build and install the binaries, run the |
79 |
following commands in the SoundTouch/ directory:</p> |
80 |
<table border="0" cellpadding="0" cellspacing="4"> |
81 |
<tbody> |
82 |
<tr valign="top"> |
83 |
<td> |
84 |
<pre>./configure -</pre> |
85 |
</td> |
86 |
<td> |
87 |
<p>Configures the SoundTouch package for the local |
88 |
environment.</p> |
89 |
</td> |
90 |
</tr> |
91 |
<tr valign="top"> |
92 |
<td> |
93 |
<pre>make -</pre> |
94 |
</td> |
95 |
<td> |
96 |
<p>Builds the SoundTouch library & |
97 |
SoundStretch utility.</p> |
98 |
</td> |
99 |
</tr> |
100 |
<tr valign="top"> |
101 |
<td> |
102 |
<pre>make install -</pre> |
103 |
</td> |
104 |
<td> |
105 |
<p>Installs the SoundTouch & BPM libraries |
106 |
to <b>/usr/local/lib</b> and SoundStretch utility to <b>/usr/local/bin</b>. |
107 |
Please notice that 'root' privileges may be required to install the |
108 |
binaries to the destination locations.</p> |
109 |
</td> |
110 |
</tr> |
111 |
</tbody> |
112 |
</table> |
113 |
<h4><b>2.2.1 Required GNU tools</b> </h4> |
114 |
<p> Bash shell, GNU C++ compiler, libtool, autoconf and automake tools are required |
115 |
for compiling |
116 |
the SoundTouch library. These are usually included with the GNU/Linux distribution, but if |
117 |
not, install these packages first. For example, in Ubuntu Linux these can be acquired and |
118 |
installed with the following command:</p> |
119 |
<pre><b>sudo apt-get install <font SIZE="2">automake autoconf libtool build-essential</font></b></pre> |
120 |
<h4><b>2.2.2 Problems with GCC compiler compatibility</b></h4> |
121 |
<p>At the release time the SoundTouch package has been tested to compile in |
122 |
GNU/Linux platform. However, in past it's happened that new gcc versions aren't |
123 |
necessarily compatible with the assembler settings used in the optimized |
124 |
routines. <b>If you have problems getting the |
125 |
SoundTouch library compiled, try the workaround of disabling the optimizations</b> |
126 |
by editing the file "include/STTypes.h" and removing the following |
127 |
definition there:</p> |
128 |
<blockquote> |
129 |
<pre>#define ALLOW_OPTIMIZATIONS 1</pre> |
130 |
</blockquote> |
131 |
<h4><b>2.2.3 Problems with configure script or build process</b> </h4> |
132 |
<p>Incompatibilities between various GNU toolchain versions may cause errors when running the "configure" script or building the source |
133 |
codes, if your GNU tool versions are not compatible with the versions used for |
134 |
preparing the SoundTouch kit. </p> |
135 |
<p>To resolve the issue, regenerate the configure scripts with your local tool |
136 |
set by running |
137 |
the "<b>./bootstrap</b>" script included in the SoundTouch source code |
138 |
kit. After that, run the <b>configure</b> script and <b>make</b> as usually.</p> |
139 |
<h4><b>2.2.4 Compiler issues with non-x86 processors</b></h4> |
140 |
<p>SoundTouch library works also on non-x86 processors.</p> |
141 |
<p>However, in case that you get compiler errors when trying to compile for non-Intel processor, edit the file |
142 |
"<b>source\SoundTouch\Makefile.am</b>" and remove the "<b>-msse2</b>" |
143 |
flag on the <b>AM_CXXFLAGS </b>line:</p> |
144 |
<pre><b>AM_CXXFLAGS=-O3 -fcheck-new -I../../include # Note: -msse2 flag removed!</b></pre> |
145 |
<p>After that, run "<b>./bootstrap</b>" script, and then run <b>configure</b> |
146 |
and <b>make</b> again.</p> |
147 |
<hr> |
148 |
<h2>3. About implementation & Usage tips</h2> |
149 |
<h3>3.1. Supported sample data formats</h3> |
150 |
<p>The sample data format can be chosen |
151 |
between 16bit signed integer and 32bit floating point values, the |
152 |
default is 32bit floating point. </p> |
153 |
|
154 |
<p> |
155 |
In Windows environment, the sample data format is chosen |
156 |
in file "STTypes.h" by choosing one of the following |
157 |
defines:</p> |
158 |
<ul> |
159 |
<li><span style="font-weight: bold;">#define INTEGER_SAMPLES</span> |
160 |
for 16bit signed |
161 |
integer</li> |
162 |
<li><span style="font-weight: bold;">#define FLOAT_SAMPLES</span> for |
163 |
32bit floating point</li> |
164 |
</ul> |
165 |
<p> |
166 |
In GNU environment, the floating sample format is used by default, but |
167 |
integer sample format can be chosen by giving the |
168 |
following switch to the configure script: |
169 |
<blockquote> |
170 |
<pre>./configure --enable-integer-samples</pre> |
171 |
</blockquote> |
172 |
|
173 |
<p>The sample data can have either single (mono) |
174 |
or double (stereo) audio channel. Stereo data is interleaved so |
175 |
that every other data value is for left channel and every second |
176 |
for right channel. Notice that while it'd be possible in theory |
177 |
to process stereo sound as two separate mono channels, this isn't |
178 |
recommended because processing the channels separately would |
179 |
result in losing the phase coherency between the channels, which |
180 |
consequently would ruin the stereo effect.</p> |
181 |
<p>Sample rates between 8000-48000H are |
182 |
supported.</p> |
183 |
<h3>3.2. Processing latency</h3> |
184 |
<p>The processing and latency constraints of |
185 |
the SoundTouch library are:</p> |
186 |
<ul> |
187 |
<li>Input/output processing latency for the |
188 |
SoundTouch processor is around 100 ms. This is when time-stretching is |
189 |
used. If the rate transposing effect alone is used, the latency |
190 |
requirement |
191 |
is much shorter, see section 'About algorithms'.</li> |
192 |
<li>Processing CD-quality sound (16bit stereo |
193 |
sound with 44100H sample rate) in real-time or faster is possible |
194 |
starting from processors equivalent to Intel Pentium 133Mh or better, |
195 |
if using the "quick" processing algorithm. If not using the "quick" |
196 |
mode or |
197 |
if floating point sample data are being used, several times more CPU |
198 |
power is typically required.</li> |
199 |
</ul> |
200 |
<h3>3.3. About algorithms</h3> |
201 |
<p>SoundTouch provides three seemingly |
202 |
independent effects: tempo, pitch and playback rate control. |
203 |
These three controls are implemented as combination of two primary |
204 |
effects, <em>sample rate transposing</em> and <em>time-stretching</em>.</p> |
205 |
<p><em>Sample rate transposing</em> affects |
206 |
both the audio stream duration and pitch. It's implemented simply |
207 |
by converting the original audio sample stream to the desired |
208 |
duration by interpolating from the original audio samples. In SoundTouch, linear interpolation with anti-alias filtering is |
209 |
used. Theoretically a higher-order interpolation provide better |
210 |
result than 1st order linear interpolation, but in audio |
211 |
application linear interpolation together with anti-alias |
212 |
filtering performs subjectively about as well as higher-order |
213 |
filtering would.</p> |
214 |
<p><em>Time-stretching </em>means changing |
215 |
the audio stream duration without affecting it's pitch. SoundTouch |
216 |
uses WSOLA-like time-stretching routines that operate in the time |
217 |
domain. Compared to sample rate transposing, time-stretching is a |
218 |
much heavier operation and also requires a longer processing |
219 |
"window" of sound samples used by the |
220 |
processing algorithm, thus increasing the algorithm input/output |
221 |
latency. Typical i/o latency for the SoundTouch |
222 |
time-stretch algorithm is around 100 ms.</p> |
223 |
<p>Sample rate transposing and time-stretching |
224 |
are then used together to produce the tempo, pitch and rate |
225 |
controls:</p> |
226 |
<ul> |
227 |
<li><strong>'Tempo'</strong> control is |
228 |
implemented purely by time-stretching.</li> |
229 |
<li><strong>'Rate</strong>' control is implemented |
230 |
purely by sample rate transposing.</li> |
231 |
<li><strong>'Pitch</strong>' control is |
232 |
implemented as a combination of time-stretching and sample rate |
233 |
transposing. For example, to increase pitch the audio stream is first |
234 |
time-stretched to longer duration (without affecting pitch) and then |
235 |
transposed back to original duration by sample rate transposing, which |
236 |
simultaneously reduces duration and increases pitch. The result is |
237 |
original duration but increased pitch.</li> |
238 |
</ul> |
239 |
<h3>3.4 Tuning the algorithm parameters</h3> |
240 |
<p>The time-stretch algorithm has few |
241 |
parameters that can be tuned to optimize sound quality for |
242 |
certain application. The current default parameters have been |
243 |
chosen by iterative if-then analysis (read: "trial and error") |
244 |
to obtain best subjective sound quality in pop/rock music |
245 |
processing, but in applications processing different kind of |
246 |
sound the default parameter set may result into a sub-optimal |
247 |
result.</p> |
248 |
<p>The time-stretch algorithm default |
249 |
parameter values are set by the following #defines in file "TDStretch.h":</p> |
250 |
<blockquote> |
251 |
<pre>#define DEFAULT_SEQUENCE_MS AUTOMATIC |
252 |
#define DEFAULT_SEEKWINDOW_MS AUTOMATIC |
253 |
#define DEFAULT_OVERLAP_MS 8</pre> |
254 |
</blockquote> |
255 |
<p>These parameters affect to the time-stretch |
256 |
algorithm as follows:</p> |
257 |
<ul> |
258 |
<li><strong>DEFAULT_SEQUENCE_MS</strong>: This is |
259 |
the default length of a single processing sequence in milliseconds |
260 |
which determines the how the original sound is chopped in |
261 |
the time-stretch algorithm. Larger values mean fewer sequences |
262 |
are used in processing. In principle a larger value sounds better when |
263 |
slowing down the tempo, but worse when increasing the tempo and vice |
264 |
versa. <br> |
265 |
<br> |
266 |
By default, this setting value is calculated automatically according to |
267 |
tempo value.<br> |
268 |
</li> |
269 |
<li><strong>DEFAULT_SEEKWINDOW_MS</strong>: The seeking window |
270 |
default length in milliseconds is for the algorithm that seeks the best |
271 |
possible overlapping location. This determines from how |
272 |
wide a sample "window" the algorithm can use to find an optimal mixing |
273 |
location when the sound sequences are to be linked back together. <br> |
274 |
<br> |
275 |
The bigger this window setting is, the higher the possibility to find a |
276 |
better mixing position becomes, but at the same time large values may |
277 |
cause a "drifting" sound artifact because neighboring sequences can be |
278 |
chosen at more uneven intervals. If there's a disturbing artifact that |
279 |
sounds as if a constant frequency was drifting around, try reducing |
280 |
this setting.<br> |
281 |
<br> |
282 |
By default, this setting value is calculated automatically according to |
283 |
tempo value.<br> |
284 |
</li> |
285 |
<li><strong>DEFAULT_OVERLAP_MS</strong>: Overlap |
286 |
length in milliseconds. When the sound sequences are mixed back |
287 |
together to form again a continuous sound stream, this parameter |
288 |
defines how much the ends of the consecutive sequences will overlap with each other.<br> |
289 |
<br> |
290 |
This shouldn't be that critical parameter. If you reduce the |
291 |
DEFAULT_SEQUENCE_MS setting by a large amount, you might wish to try a |
292 |
smaller value on this.</li> |
293 |
</ul> |
294 |
<p>Notice that these parameters can also be |
295 |
set during execution time with functions "<strong>TDStretch::setParameters()</strong>" |
296 |
and "<strong>SoundTouch::setSetting()</strong>".</p> |
297 |
<p>The table below summaries how the |
298 |
parameters can be adjusted for different applications:</p> |
299 |
<table border="1"> |
300 |
<tbody> |
301 |
<tr> |
302 |
<td valign="top"><strong>Parameter name</strong></td> |
303 |
<td valign="top"><strong>Default value |
304 |
magnitude</strong></td> |
305 |
<td valign="top"><strong>Larger value |
306 |
affects...</strong></td> |
307 |
<td valign="top"><strong>Smaller value |
308 |
affects...</strong></td> |
309 |
<td valign="top"><strong>Effect to CPU burden</strong></td> |
310 |
</tr> |
311 |
<tr> |
312 |
<td valign="top"> |
313 |
<pre>SEQUENCE_MS</pre> |
314 |
</td> |
315 |
<td valign="top">Default value is relatively |
316 |
large, chosen for slowing down music tempo</td> |
317 |
<td valign="top">Larger value is usually |
318 |
better for slowing down tempo. Growing the value decelerates the |
319 |
"echoing" artifact when slowing down the tempo.</td> |
320 |
<td valign="top">Smaller value might be better |
321 |
for speeding up tempo. Reducing the value accelerates the "echoing" |
322 |
artifact when slowing down the tempo </td> |
323 |
<td valign="top">Increasing the parameter |
324 |
value reduces computation burden</td> |
325 |
</tr> |
326 |
<tr> |
327 |
<td valign="top"> |
328 |
<pre>SEEKWINDOW_MS</pre> |
329 |
</td> |
330 |
<td valign="top">Default value is relatively |
331 |
large, chosen for slowing down music tempo</td> |
332 |
<td valign="top">Larger value eases finding a |
333 |
good mixing position, but may cause a "drifting" artifact</td> |
334 |
<td valign="top">Smaller reduce possibility to |
335 |
find a good mixing position, but reduce the "drifting" artifact.</td> |
336 |
<td valign="top">Increasing the parameter |
337 |
value increases computation burden</td> |
338 |
</tr> |
339 |
<tr> |
340 |
<td valign="top"> |
341 |
<pre>OVERLAP_MS</pre> |
342 |
</td> |
343 |
<td valign="top">Default value is relatively |
344 |
large, chosen to suit with above parameters.</td> |
345 |
<td valign="top"> </td> |
346 |
<td valign="top">If you reduce the "sequence |
347 |
ms" setting, you might wish to try a smaller value.</td> |
348 |
<td valign="top">Increasing the parameter |
349 |
value increases computation burden</td> |
350 |
</tr> |
351 |
</tbody> |
352 |
</table> |
353 |
<h3>3.5 Performance Optimizations </h3> |
354 |
<p><strong>General optimizations:</strong></p> |
355 |
<p>The time-stretch routine has a 'quick' mode |
356 |
that substantially speeds up the algorithm but may degrade the |
357 |
sound quality by a small amount. This mode is activated by |
358 |
calling SoundTouch::setSetting() function with parameter id |
359 |
of SETTING_USE_QUICKSEEK and value "1", i.e. </p> |
360 |
<blockquote> |
361 |
<p>setSetting(SETTING_USE_QUICKSEEK, 1);</p> |
362 |
</blockquote> |
363 |
<p><strong>CPU-specific optimizations:</strong></p> |
364 |
<ul> |
365 |
<li>Intel MMX optimized routines are used with |
366 |
compatible CPUs when 16bit integer sample type is used. MMX optimizations are available both in Win32 and Gnu/x86 platforms. |
367 |
Compatible processors are Intel PentiumMMX and later; AMD K6-2, Athlon |
368 |
and later. </li> |
369 |
<li>Intel SSE optimized routines are used with |
370 |
compatible CPUs when floating point sample type is used. SSE optimizations are currently implemented for Win32 platform only. |
371 |
Processors compatible with SSE extension are Intel processors starting |
372 |
from Pentium-III, and AMD processors starting from Athlon XP. </li> |
373 |
<li>AMD 3DNow! optimized routines are used with |
374 |
compatible CPUs when floating point sample type is used, but SSE |
375 |
extension isn't supported . 3DNow! optimizations are currently |
376 |
implemented for Win32 platform only. These optimizations are used in |
377 |
AMD K6-2 and Athlon (classic) CPU's; better performing SSE routines are |
378 |
used with AMD processor starting from Athlon XP. </li> |
379 |
</ul> |
380 |
<hr> |
381 |
<h2><a name="SoundStretch"></a>4. SoundStretch audio processing utility |
382 |
</h2> |
383 |
<p>SoundStretch audio processing utility<br> |
384 |
Copyright (c) Olli Parviainen 2002-2009</p> |
385 |
<p>SoundStretch is a simple command-line |
386 |
application that can change tempo, pitch and playback rates of |
387 |
WAV sound files. This program is intended primarily to |
388 |
demonstrate how the "SoundTouch" library can be used to |
389 |
process sound in your own program, but it can as well be used for |
390 |
processing sound files.</p> |
391 |
<h3>4.1. SoundStretch Usage Instructions</h3> |
392 |
<p>SoundStretch Usage syntax:</p> |
393 |
<blockquote> |
394 |
<pre>soundstretch infilename outfilename [switches]</pre> |
395 |
</blockquote> |
396 |
<p>Where: </p> |
397 |
<table border="0" cellpadding="2" width="100%"> |
398 |
<tbody> |
399 |
<tr> |
400 |
<td valign="top"> |
401 |
<pre>"infilename"</pre> |
402 |
</td> |
403 |
<td valign="top">Name of the input sound |
404 |
data file (in .WAV audio file format). Give "stdin" as filename to use |
405 |
standard input pipe. </td> |
406 |
</tr> |
407 |
<tr> |
408 |
<td valign="top"> |
409 |
<pre>"outfilename"</pre> |
410 |
</td> |
411 |
<td valign="top">Name of the output sound |
412 |
file where the resulting sound is saved (in .WAV audio file format). |
413 |
This parameter may be omitted if you don't want to save the |
414 |
output |
415 |
(e.g. when only calculating BPM rate with '-bpm' switch). Give "stdout" |
416 |
as filename to use standard output pipe.</td> |
417 |
</tr> |
418 |
<tr> |
419 |
<td valign="top"> |
420 |
<pre> [switches]</pre> |
421 |
</td> |
422 |
<td valign="top">Are one or more control |
423 |
switches.</td> |
424 |
</tr> |
425 |
</tbody> |
426 |
</table> |
427 |
<p>Available control switches are:</p> |
428 |
<table border="0" cellpadding="2" width="100%"> |
429 |
<tbody> |
430 |
<tr> |
431 |
<td valign="top"> |
432 |
<pre>-tempo=n </pre> |
433 |
</td> |
434 |
<td valign="top">Change the sound tempo by n |
435 |
percents (n = -95.0 .. +5000.0 %) </td> |
436 |
</tr> |
437 |
<tr> |
438 |
<td valign="top"> |
439 |
<pre>-pitch=n</pre> |
440 |
</td> |
441 |
<td valign="top">Change the sound pitch by n |
442 |
semitones (n = -60.0 .. + 60.0 semitones) </td> |
443 |
</tr> |
444 |
<tr> |
445 |
<td valign="top"> |
446 |
<pre>-rate=n</pre> |
447 |
</td> |
448 |
<td valign="top">Change the sound playback rate by |
449 |
n percents (n = -95.0 .. +5000.0 %) </td> |
450 |
</tr> |
451 |
<tr> |
452 |
<td valign="top"> |
453 |
<pre>-bpm=n</pre> |
454 |
</td> |
455 |
<td valign="top">Detect the Beats-Per-Minute (BPM) rate of the sound and adjust the tempo to meet 'n' |
456 |
BPMs. When this switch is |
457 |
applied, the "-tempo" switch is ignored. If "=n" is |
458 |
omitted, i.e. switch "-bpm" is used alone, then the BPM rate is |
459 |
estimated and displayed, but tempo not adjusted according to the BPM |
460 |
value. </td> |
461 |
</tr> |
462 |
<tr> |
463 |
<td valign="top"> |
464 |
<pre>-quick</pre> |
465 |
</td> |
466 |
<td valign="top">Use quicker tempo change |
467 |
algorithm. Gains speed but loses sound quality. </td> |
468 |
</tr> |
469 |
<tr> |
470 |
<td valign="top"> |
471 |
<pre>-naa</pre> |
472 |
</td> |
473 |
<td valign="top">Don't use anti-alias |
474 |
filtering in sample rate transposing. Gains speed but loses sound |
475 |
quality. </td> |
476 |
</tr> |
477 |
<tr> |
478 |
<td valign="top"> |
479 |
<pre>-license</pre> |
480 |
</td> |
481 |
<td valign="top">Displays the program license |
482 |
text (LGPL)</td> |
483 |
</tr> |
484 |
</tbody> |
485 |
</table> |
486 |
<p>Notes:</p> |
487 |
<ul> |
488 |
<li>To use standard input/output pipes for processing, give "stdin" |
489 |
and "stdout" as input/output filenames correspondingly. The |
490 |
standard input/output pipes will still carry the audio data in .wav audio |
491 |
file format.</li> |
492 |
<li>The numerical switches allow both integer (e.g. "-tempo=123") and decimal (e.g. |
493 |
"-tempo=123.45") numbers.</li> |
494 |
<li>The "-naa" and/or "-quick" switches can be |
495 |
used to reduce CPU usage while compromising some sound quality </li> |
496 |
<li>The BPM detection algorithm works by detecting |
497 |
repeating bass or drum patterns at low frequencies of <250Hz. A |
498 |
lower-than-expected BPM figure may be reported for music with uneven or |
499 |
complex bass patterns. </li> |
500 |
</ul> |
501 |
<h3>4.2. SoundStretch usage examples </h3> |
502 |
<p><strong>Example 1</strong></p> |
503 |
<p>The following command increases tempo of |
504 |
the sound file "originalfile.wav" by 12.5% and stores result to file "destinationfile.wav":</p> |
505 |
<blockquote> |
506 |
<pre>soundstretch originalfile.wav destinationfile.wav -tempo=12.5</pre> |
507 |
</blockquote> |
508 |
<p><strong>Example 2</strong></p> |
509 |
<p>The following command decreases the sound |
510 |
pitch (key) of the sound file "orig.wav" by two |
511 |
semitones and stores the result to file "dest.wav":</p> |
512 |
<blockquote> |
513 |
<pre>soundstretch orig.wav dest.wav -pitch=-2</pre> |
514 |
</blockquote> |
515 |
<p><strong>Example 3</strong></p> |
516 |
<p>The following command processes the file "orig.wav" by decreasing the sound tempo by 25.3% and |
517 |
increasing the sound pitch (key) by 1.5 semitones. Resulting .wav audio data is |
518 |
directed to standard output pipe:</p> |
519 |
<blockquote> |
520 |
<pre>soundstretch orig.wav stdout -tempo=-25.3 -pitch=1.5</pre> |
521 |
</blockquote> |
522 |
<p><strong>Example 4</strong></p> |
523 |
<p>The following command detects the BPM rate |
524 |
of the file "orig.wav" and adjusts the tempo to match |
525 |
100 beats per minute. Result is stored to file "dest.wav":</p> |
526 |
<blockquote> |
527 |
<pre>soundstretch orig.wav dest.wav -bpm=100</pre> |
528 |
</blockquote> |
529 |
<p><strong>Example 5</strong></p> |
530 |
<p>The following command reads .wav sound data from standard input pipe and |
531 |
estimates the BPM rate:</p> |
532 |
<blockquote> |
533 |
<pre>soundstretch stdin -bpm</pre> |
534 |
</blockquote> |
535 |
<hr> |
536 |
<h2>5. Change History</h2> |
537 |
<h3>5.1. SoundTouch library Change History </h3> |
538 |
|
539 |
<p><strong>1.5.0:</strong></p> |
540 |
<ul> |
541 |
<li>Added normalization to correlation calculation and improvement automatic seek/sequence parameter calculation to improve sound quality</li> |
542 |
|
543 |
<li>Bugfixes: |
544 |
<ul> |
545 |
<li>Fixed negative array indexing in quick seek algorithm</li> |
546 |
<li>FIR autoalias filter running too far in processing buffer</li> |
547 |
<li>Check against zero sample count in rate transposing</li> |
548 |
<li>Fix for x86-64 support: Removed pop/push instructions from the cpu detection algorithm. </li> |
549 |
<li>Check against empty buffers in FIFOSampleBuffer</li> |
550 |
<li>Other minor fixes & code cleanup</li> |
551 |
</ul> |
552 |
</li> |
553 |
|
554 |
<li>Fixes in compilation scripts for non-Intel platforms</li> |
555 |
<li>Added Dynamic-Link-Library (DLL) version of SoundTouch library build, |
556 |
provided with Delphi/Pascal wrapper for calling the dll routines</li> |
557 |
<li>Added #define PREVENT_CLICK_AT_RATE_CROSSOVER that prevents a click artifact |
558 |
when crossing the nominal pitch from either positive to negative side or vice |
559 |
versa</li> |
560 |
|
561 |
</ul> |
562 |
|
563 |
<p><strong>1.4.1:</strong></p> |
564 |
<ul> |
565 |
<li>Fixed a buffer overflow bug in BPM detect algorithm routines if processing |
566 |
more than 2048 samples at one call </li> |
567 |
|
568 |
</ul> |
569 |
|
570 |
<p><strong>1.4.0:</strong></p> |
571 |
<ul> |
572 |
<li>Improved sound quality by automatic calculation of time stretch algorithm |
573 |
processing parameters according to tempo setting</li> |
574 |
<li>Moved BPM detection routines from SoundStretch application into SoundTouch |
575 |
library</li> |
576 |
<li>Bugfixes: Usage of uninitialied variables, GNU build scripts, compiler errors |
577 |
due to 'const' keyword mismatch.</li> |
578 |
<li>Source code cleanup</li> |
579 |
|
580 |
</ul> |
581 |
|
582 |
<p><strong>v1.3.1: |
583 |
</strong></p> |
584 |
<ul> |
585 |
<li>Changed static class declaration to GCC 4.x compiler compatible syntax.</li> |
586 |
<li>Enabled MMX/SSE-optimized routines also for GCC compilers. Earlier |
587 |
the MMX/SSE-optimized routines were written in compiler-specific inline |
588 |
assembler, now these routines are migrated to use compiler intrinsic |
589 |
syntax which allows compiling the same MMX/SSE-optimized source code with |
590 |
both Visual C++ and GCC compilers. </li> |
591 |
<li>Set floating point as the default sample format and added switch to |
592 |
the GNU configure script for selecting the other sample format.</li> |
593 |
|
594 |
</ul> |
595 |
|
596 |
<p><strong>v1.3.0: |
597 |
</strong></p> |
598 |
<ul> |
599 |
<li>Fixed tempo routine output duration inaccuracy due to rounding |
600 |
error </li> |
601 |
<li>Implemented separate processing routines for integer and |
602 |
floating arithmetic to allow improvements to floating point routines |
603 |
(earlier used algorithms mostly optimized for integer arithmetic also |
604 |
for floating point samples) </li> |
605 |
<li>Fixed a bug that distorts sound if sample rate changes during the |
606 |
sound stream </li> |
607 |
<li>Fixed a memory leak that appeared in MMX/SSE/3DNow! optimized |
608 |
routines </li> |
609 |
<li>Reduced redundant code pieces in MMX/SSE/3DNow! optimized |
610 |
routines vs. the standard C routines.</li> |
611 |
<li>MMX routine incompatibility with new gcc compiler versions </li> |
612 |
<li>Other miscellaneous bug fixes </li> |
613 |
</ul> |
614 |
<p><strong>v1.2.1: </strong></p> |
615 |
<ul> |
616 |
<li>Added automake/autoconf scripts for GNU |
617 |
platforms (in courtesy of David Durham)</li> |
618 |
<li>Fixed SCALE overflow bug in rate transposer |
619 |
routine.</li> |
620 |
<li>Fixed 64bit address space bugs.</li> |
621 |
<li>Created a 'soundtouch' namespace for |
622 |
SAMPLETYPE definitions.</li> |
623 |
</ul> |
624 |
<p><strong>v1.2.0: </strong></p> |
625 |
<ul> |
626 |
<li>Added support for 32bit floating point sample |
627 |
data type with SSE/3DNow! optimizations for Win32 platform (SSE/3DNow! optimizations currently not supported in GCC environment)</li> |
628 |
<li>Replaced 'make-gcc' script for GNU environment |
629 |
by master Makefile</li> |
630 |
<li>Added time-stretch routine configurability to |
631 |
SoundTouch main class</li> |
632 |
<li>Bugfixes</li> |
633 |
</ul> |
634 |
<p><strong>v1.1.1: </strong></p> |
635 |
<ul> |
636 |
<li>Moved SoundTouch under lesser GPL license (LGPL). This allows using SoundTouch library in programs that aren't |
637 |
released under GPL license. </li> |
638 |
<li>Changed MMX routine organiation so that MMX optimized routines are now implemented in classes that are derived from |
639 |
the basic classes having the standard non-mmx routines. </li> |
640 |
<li>MMX routines to support gcc version 3. </li> |
641 |
<li>Replaced windows makefiles by script using the .dsw files </li> |
642 |
</ul> |
643 |
<p><strong>v1.01: </strong></p> |
644 |
<ul> |
645 |
<li>"mmx_gcc.cpp": Added "using namespace std" and |
646 |
removed "return 0" from a function with void return value to fix |
647 |
compiler errors when compiling the library in Solaris environment. </li> |
648 |
<li>Moved file "FIFOSampleBuffer.h" to "include" |
649 |
directory to allow accessing the FIFOSampleBuffer class from external |
650 |
files. </li> |
651 |
</ul> |
652 |
<p><strong>v1.0: </strong></p> |
653 |
<ul> |
654 |
<li>Initial release </li> |
655 |
</ul> |
656 |
<p> </p> |
657 |
<h3>5.2. SoundStretch application Change |
658 |
History </h3> |
659 |
|
660 |
<p><strong>1.4.0:</strong></p> |
661 |
<ul> |
662 |
<li>Moved BPM detection routines from SoundStretch application into SoundTouch |
663 |
library</li> |
664 |
<li>Allow using standard input/output pipes as audio processing input/output |
665 |
streams</li> |
666 |
|
667 |
</ul> |
668 |
|
669 |
<p><strong>v1.3.0:</strong></p> |
670 |
<ul> |
671 |
<li>Simplified accessing WAV files with floating |
672 |
point sample format. |
673 |
</li> |
674 |
</ul> |
675 |
<p><strong>v1.2.1: </strong></p> |
676 |
<ul> |
677 |
<li>Fixed 64bit address space bugs.</li> |
678 |
</ul> |
679 |
<p><strong>v1.2.0: </strong></p> |
680 |
<ul> |
681 |
<li>Added support for 32bit floating point sample |
682 |
data type</li> |
683 |
<li>Restructured the BPM routines into separate |
684 |
library</li> |
685 |
<li>Fixed big-endian conversion bugs in WAV file |
686 |
routines (hopefully :)</li> |
687 |
</ul> |
688 |
<p><strong>v1.1.1: </strong></p> |
689 |
<ul> |
690 |
<li>Fixed bugs in WAV file reading & added |
691 |
byte-order conversion for big-endian processors. </li> |
692 |
<li>Moved SoundStretch source code under 'example' |
693 |
directory to highlight difference from SoundTouch stuff. </li> |
694 |
<li>Replaced windows makefiles by script using the .dsw files </li> |
695 |
<li>Output file name isn't required if output |
696 |
isn't desired (e.g. if using the switch '-bpm' in plain format only) </li> |
697 |
</ul> |
698 |
<p><strong>v1.1:</strong></p> |
699 |
<ul> |
700 |
<li>Fixed "Release" settings in Microsoft Visual |
701 |
C++ project file (.dsp) </li> |
702 |
<li>Added beats-per-minute (BPM) detection routine |
703 |
and command-line switch "-bpm" </li> |
704 |
</ul> |
705 |
<p><strong>v1.01: </strong></p> |
706 |
<ul> |
707 |
<li>Initial release </li> |
708 |
</ul> |
709 |
<hr> |
710 |
<h2 >6. Acknowledgements </h2> |
711 |
<p >Kudos for these people who have contributed to development or submitted |
712 |
bugfixes since |
713 |
SoundTouch v1.3.1: </p> |
714 |
<ul> |
715 |
<li>Arthur A</li> |
716 |
<li>Richard Ash</li> |
717 |
<li>Stanislav Brabec</li> |
718 |
<li>Christian Budde</li> |
719 |
<li>Brian Cameron</li> |
720 |
<li>Jason Champion</li> |
721 |
<li>Patrick Colis</li> |
722 |
<li>Justin Frankel</li> |
723 |
<li>Jason Garland</li> |
724 |
<li>Takashi Iwai</li> |
725 |
<li>Paulo Pizarro</li> |
726 |
<li>RJ Ryan</li> |
727 |
<li>John Sheehy</li> |
728 |
</ul> |
729 |
<p >Moral greetings to all other contributors and users also!</p> |
730 |
<hr> |
731 |
<h2 >7. LICENSE </h2> |
732 |
<p>SoundTouch audio processing library<br> |
733 |
Copyright (c) Olli Parviainen</p> |
734 |
<p>This library is free software; you can |
735 |
redistribute it and/or modify it under the terms of the GNU |
736 |
Lesser General Public License version 2.1 as published by the Free Software |
737 |
Foundation.</p> |
738 |
<p>This library is distributed in the hope |
739 |
that it will be useful, but WITHOUT ANY WARRANTY; without even |
740 |
the implied warranty of MERCHANTABILITY or FITNESS FOR A |
741 |
PARTICULAR PURPOSE. See the GNU Lesser General Public License for |
742 |
more details.</p> |
743 |
<p>You should have received a copy of the GNU |
744 |
Lesser General Public License along with this library; if not, |
745 |
write to the Free Software Foundation, Inc., 59 Temple Place, |
746 |
Suite 330, Boston, MA 02111-1307 USA</p> |
747 |
<hr> |
748 |
<!-- |
749 |
$Id: README.html 81 2009-12-28 20:51:18Z oparviai $ |
750 |
--> |
751 |
</body> |
752 |
</html> |