diff --git a/README.html b/README.html index 95991e0..bd6b3da 100644 --- a/README.html +++ b/README.html @@ -1,808 +1,717 @@ - - SoundTouch library README - - - - - - - - - -
-

SoundTouch audio processing library v1.5.1pre -

-

SoundTouch library Copyright © Olli Parviainen - 2001-2010 -

-
-

1. Introduction -

-

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.:

- -

1.1 Contact information -

-

Author email: oparviai 'at' iki.fi -

-

SoundTouch WWW page: http://www.surina.net/soundtouch

-
-

2. Compiling SoundTouch

-

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.

-

2.1. Building in Microsoft Windows

-

Project files for Microsoft Visual C++ 6.0 and Visual C++ .NET are supplied with - the source code package. 

-

- 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:

-

http://msdn.microsoft.com/en-us/vstudio/aa718349.aspx

-

If the above URL is unavailable or removed, go to - http://msdn.microsoft.com and perform a search with keywords "processor - pack". -

-

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. -

-

2.2. Building in Gnu platforms

-

The SoundTouch library can be compiled in practically any platform supporting - GNU compiler (GCC) tools. SoundTouch have been tested with gcc version 3.3.4., - but it shouldn't be very specific about the gcc version. Assembler-level - performance optimizations for GNU platform are currently available in x86 - platforms only, they are automatically disabled and replaced with standard C - routines in other processor platforms.

-

To build and install the binaries, run the following commands in the SoundTouch/ - directory:

- - - - - - - - - - - - - - - -
-
./configure  -
-
-

Configures the SoundTouch package for the local environment.

-
-
make         -
-
-

Builds the SoundTouch library & SoundStretch utility.

-
-
make install -
-
-

Installs the SoundTouch & BPM libraries to /usr/local/lib and - SoundStretch utility to /usr/local/bin. Please notice that 'root' - privileges may be required to install the binaries to the destination - locations.

-
-

2.2.1 Required GNU tools 

-

- Bash shell, GNU C++ compiler, libtool, autoconf and automake 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, - in Ubuntu Linux these can be acquired and installed with the following command:

-
sudo apt-get install automake autoconf libtool build-essential
-

2.2.2 Problems with GCC compiler compatibility

-

At the release time the SoundTouch package has been tested to compile in - GNU/Linux platform. However, in past it's happened that new gcc versions aren't - necessarily compatible with the assembler settings used in the optimized - routines. If you have problems getting the SoundTouch library compiled, try the - workaround of disabling the optimizations by editing the file - "include/STTypes.h" and removing the following definition there:

-
-
#define ALLOW_OPTIMIZATIONS 1
-
-

2.2.3 Problems with configure script or build process 

-

Incompatibilities between various GNU toolchain versions may cause errors when - running the "configure" script or building the source codes, if your GNU tool - versions are not compatible with the versions used for preparing the SoundTouch - kit. 

-

To resolve the issue, regenerate the configure scripts with your local tool set - by running the "./bootstrap" script included in the SoundTouch source - code kit. After that, run the configure script and make as - usually.

-

2.2.4 Compiler issues with non-x86 processors

-

SoundTouch library works also on non-x86 processors.

-

However, in case that you get compiler errors when trying to compile for - non-Intel processor, edit the file "source\SoundTouch\Makefile.am" and - remove the "-msse2" flag on the AM_CXXFLAGS line:

-
AM_CXXFLAGS=-O3 -fcheck-new -I../../include    # Note: -msse2 flag removed!
-

After that, run "./bootstrap" script, and then run configure and make - again.

-
-

3. About implementation & Usage tips

-

3.1. Supported sample data formats

-

The sample data format can be chosen between 16bit signed integer and 32bit - floating point values, the default is 32bit floating point. -

-

- In Windows environment, the sample data format is chosen in file "STTypes.h" by - choosing one of the following defines:

- -

- 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:

-
./configure --enable-integer-samples
-
-

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.

-

Sample rates between 8000-48000H are supported.

-

3.2. Processing latency

-

The processing and latency constraints of the SoundTouch library are:

- -

3.3. About algorithms

-

SoundTouch provides three seemingly independent effects: tempo, pitch and - playback rate control. These three controls are implemented as combination of - two primary effects, sample rate transposing and time-stretching.

-

Sample rate transposing 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.

-

Time-stretching 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.

-

Sample rate transposing and time-stretching are then used together to produce - the tempo, pitch and rate controls:

- -

3.4 Tuning the algorithm parameters

-

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.

-

The time-stretch algorithm default parameter values are set by the following - #defines in file "TDStretch.h":

-
-
#define DEFAULT_SEQUENCE_MS     AUTOMATIC
-#define DEFAULT_SEEKWINDOW_MS   AUTOMATIC
-#define DEFAULT_OVERLAP_MS      8
-
-

These parameters affect to the time-stretch algorithm as follows:

- -

Notice that these parameters can also be set during execution time with - functions "TDStretch::setParameters()" and "SoundTouch::setSetting()".

-

The table below summaries how the parameters can be adjusted for different - applications:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parameter nameDefault value magnitudeLarger value affects...Smaller value affects...Effect to CPU burden
-
SEQUENCE_MS
-
Default value is relatively large, chosen for slowing down music - tempoLarger value is usually better for slowing down tempo. Growing the - value decelerates the "echoing" artifact when slowing down the tempo.Smaller value might be better for speeding up tempo. Reducing the - value accelerates the "echoing" artifact when slowing down the tempo - Increasing the parameter value reduces computation burden
-
SEEKWINDOW_MS
-
Default value is relatively large, chosen for slowing down music - tempoLarger value eases finding a good mixing position, but may cause a - "drifting" artifactSmaller reduce possibility to find a good mixing position, but - reduce the "drifting" artifact.Increasing the parameter value increases computation burden
-
OVERLAP_MS
-
Default value is relatively large, chosen to suit with above - parameters. If you reduce the "sequence ms" setting, you might wish to try a - smaller value.Increasing the parameter value increases computation burden
-

3.5 Performance Optimizations -

-

General optimizations:

-

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. -

-
-

setSetting(SETTING_USE_QUICKSEEK, 1);

-
-

CPU-specific optimizations:

- -
-

4. SoundStretch audio processing utility -

-

SoundStretch audio processing utility
- Copyright (c) Olli Parviainen 2002-2010

-

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.

-

4.1. SoundStretch Usage Instructions

-

SoundStretch Usage syntax:

-
-
soundstretch infilename outfilename [switches]
-
-

Where: -

- - - - - - - - - - - - - - - -
-
"infilename"
-
Name of the input sound data file (in .WAV audio file format). - Give "stdin" as filename to use standard input pipe. -
-
"outfilename"
-
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.
-
 [switches]
-
Are one or more control switches.
-

Available control switches are:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-tempo=n 
-
Change the sound tempo by n percents (n = -95.0 .. +5000.0 %) -
-
-pitch=n
-
Change the sound pitch by n semitones (n = -60.0 .. + 60.0 - semitones) -
-
-rate=n
-
Change the sound playback rate by n percents (n = -95.0 .. +5000.0 - %) -
-
-bpm=n
-
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. -
-
-quick
-
Use quicker tempo change algorithm. Gains speed but loses sound - quality. -
-
-naa
-
Don't use anti-alias filtering in sample rate transposing. Gains - speed but loses sound quality. -
-
-license
-
Displays the program license text (LGPL)
-

Notes:

- -

4.2. SoundStretch usage examples -

-

Example 1

-

The following command increases tempo of the sound file "originalfile.wav" by - 12.5% and stores result to file "destinationfile.wav":

-
-
soundstretch originalfile.wav destinationfile.wav -tempo=12.5
-
-

Example 2

-

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":

-
-
soundstretch orig.wav dest.wav -pitch=-2
-
-

Example 3

-

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:

-
-
soundstretch orig.wav stdout -tempo=-25.3 -pitch=1.5
-
-

Example 4

-

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":

-
-
soundstretch orig.wav dest.wav -bpm=100
-
-

Example 5

-

The following command reads .wav sound data from standard input pipe and - estimates the BPM rate:

-
-
soundstretch stdin -bpm
-
-
-

5. Change History

-

5.1. SoundTouch library Change History -

-

1.5.1pre:

- -

1.5.0:

- -

1.4.1:

- -

1.4.0:

- -

v1.3.1: -

- -

v1.3.0: -

- -

v1.2.1: -

- -

v1.2.0: -

- -

v1.1.1: -

- -

v1.01: -

- -

v1.0: -

- -

 

-

5.2. SoundStretch application Change History -

-

v1.5.0:

- -

v1.4.0:

- -

v1.3.0:

- -

v1.2.1: -

- -

v1.2.0: -

- -

v1.1.1: -

- -

v1.1:

- -

v1.01: -

- -
-

6. Acknowledgements -

-

Kudos for these people who have contributed to development or submitted bugfixes - since SoundTouch v1.3.1: -

- -

Moral greetings to all other contributors and users also!

-
-

7. LICENSE -

-

SoundTouch audio processing library
- Copyright (c) Olli Parviainen

-

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.

-

This library is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A - PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

-

You should have received a copy of the GNU Lesser General Public License along - with this library; if not, write to the Free Software Foundation, Inc., 59 - Temple Place, Suite 330, Boston, MA 02111-1307 USA

-
- - + diff --git a/configure.ac b/configure.ac index 64b253f..322acd3 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,7 @@ dnl this program; if not, write to the Free Software Foundation, Inc., 59 Temple dnl Place - Suite 330, Boston, MA 02111-1307, USA # Process this file with autoconf to produce a configure script. -AC_INIT(SoundTouch, 1.5.0, [http://www.surina.net/soundtouch]) +AC_INIT(SoundTouch, 1.6.0, [http://www.surina.net/soundtouch]) AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER([include/soundtouch_config.h]) AM_INIT_AUTOMAKE @@ -80,10 +80,10 @@ AC_ARG_ENABLE(integer-samples, if test "x$enable_integer_samples" = "xyes"; then echo "****** Integer sample type enabled ******" - AC_DEFINE(INTEGER_SAMPLES,1,[Use Integer as Sample type]) + AC_DEFINE(SOUNDTOUCH_INTEGER_SAMPLES,1,[Use Integer as Sample type]) else echo "****** Float sample type enabled ******" - AC_DEFINE(FLOAT_SAMPLES,1,[Use Float as Sample type]) + AC_DEFINE(SOUNDTOUCH_FLOAT_SAMPLES,1,[Use Float as Sample type]) fi diff --git a/include/STTypes.h b/include/STTypes.h index 8aa5b19..07fdca2 100644 --- a/include/STTypes.h +++ b/include/STTypes.h @@ -63,10 +63,10 @@ namespace soundtouch /// Activate these undef's to overrule the possible sampletype /// setting inherited from some other header file: -//#undef INTEGER_SAMPLES -//#undef FLOAT_SAMPLES +//#undef SOUNDTOUCH_INTEGER_SAMPLES +//#undef SOUNDTOUCH_FLOAT_SAMPLES -#if !(INTEGER_SAMPLES || FLOAT_SAMPLES) +#if !(SOUNDTOUCH_INTEGER_SAMPLES || SOUNDTOUCH_FLOAT_SAMPLES) /// Choose either 32bit floating point or 16bit integer sampletype /// by choosing one of the following defines, unless this selection @@ -82,8 +82,8 @@ namespace soundtouch /// However, if you still prefer to select the sample format here /// also in GNU environment, then please #undef the INTEGER_SAMPLE /// and FLOAT_SAMPLE defines first as in comments above. - //#define INTEGER_SAMPLES 1 //< 16bit integer samples - #define FLOAT_SAMPLES 1 //< 32bit float samples + //#define SOUNDTOUCH_INTEGER_SAMPLES 1 //< 16bit integer samples + #define SOUNDTOUCH_FLOAT_SAMPLES 1 //< 32bit float samples #endif @@ -94,30 +94,30 @@ namespace soundtouch /// routines compiled for whatever reason, you may disable these optimizations /// to make the library compile. - #define ALLOW_X86_OPTIMIZATIONS 1 + #define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS 1 #endif // If defined, allows the SIMD-optimized routines to take minor shortcuts // for improved performance. Undefine to require faithfully similar SIMD // calculations as in normal C implementation. - #define ALLOW_NONEXACT_SIMD_OPTIMIZATION 1 + #define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION 1 - #ifdef INTEGER_SAMPLES + #ifdef SOUNDTOUCH_INTEGER_SAMPLES // 16bit integer sample type typedef short SAMPLETYPE; // data type for sample accumulation: Use 32bit integer to prevent overflows typedef long LONG_SAMPLETYPE; - #ifdef FLOAT_SAMPLES + #ifdef SOUNDTOUCH_FLOAT_SAMPLES // check that only one sample type is defined #error "conflicting sample types defined" - #endif // FLOAT_SAMPLES + #endif // SOUNDTOUCH_FLOAT_SAMPLES - #ifdef ALLOW_X86_OPTIMIZATIONS + #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS // Allow MMX optimizations - #define ALLOW_MMX 1 + #define SOUNDTOUCH_ALLOW_MMX 1 #endif #else @@ -127,12 +127,12 @@ namespace soundtouch // data type for sample accumulation: Use double to utilize full precision. typedef double LONG_SAMPLETYPE; - #ifdef ALLOW_X86_OPTIMIZATIONS + #ifdef SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS // Allow SSE optimizations - #define ALLOW_SSE 1 + #define SOUNDTOUCH_ALLOW_SSE 1 #endif - #endif // INTEGER_SAMPLES + #endif // SOUNDTOUCH_INTEGER_SAMPLES }; @@ -140,6 +140,6 @@ namespace soundtouch // parameter setting crosses from value <1 to >=1 or vice versa during processing. // Default is off as such crossover is untypical case and involves a slight sound // quality compromise. -//#define PREVENT_CLICK_AT_RATE_CROSSOVER 1 +//#define SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER 1 #endif diff --git a/source/SoundStretch/main.cpp b/source/SoundStretch/main.cpp index 3c036bf..db7fd24 100644 --- a/source/SoundStretch/main.cpp +++ b/source/SoundStretch/main.cpp @@ -146,10 +146,10 @@ static void setup(SoundTouch *pSoundTouch, const WavInFile *inFile, const RunPar // print processing information if (params->outFileName) { -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES fprintf(stderr, "Uses 16bit integer sample type in processing.\n\n"); #else - #ifndef FLOAT_SAMPLES + #ifndef SOUNDTOUCH_FLOAT_SAMPLES #error "Sampletype not defined" #endif fprintf(stderr, "Uses 32bit floating point sample type in processing.\n\n"); diff --git a/source/SoundTouch/BPMDetect.cpp b/source/SoundTouch/BPMDetect.cpp index 6baaecd..4faa294 100644 --- a/source/SoundTouch/BPMDetect.cpp +++ b/source/SoundTouch/BPMDetect.cpp @@ -88,7 +88,7 @@ BPMDetect::BPMDetect(int numChannels, int aSampleRate) // Initialize RMS volume accumulator to RMS level of 3000 (out of 32768) that's // a typical RMS signal level value for song data. This value is then adapted // to the actual level during processing. -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES // integer samples RMSVolumeAccu = (3000 * 3000) / avgnorm; #else @@ -169,7 +169,7 @@ int BPMDetect::decimate(SAMPLETYPE *dest, const SAMPLETYPE *src, int numsamples) out = (LONG_SAMPLETYPE)(decimateSum / (decimateBy * channels)); decimateSum = 0; decimateCount = 0; -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES // check ranges for sure (shouldn't actually be necessary) if (out > 32767) { @@ -179,7 +179,7 @@ int BPMDetect::decimate(SAMPLETYPE *dest, const SAMPLETYPE *src, int numsamples) { out = -32768; } -#endif // INTEGER_SAMPLES +#endif // SOUNDTOUCH_INTEGER_SAMPLES dest[outcount] = (SAMPLETYPE)out; outcount ++; } @@ -268,10 +268,10 @@ void BPMDetect::calcEnvelope(SAMPLETYPE *samples, int numsamples) envelopeAccu += val; out = (LONG_SAMPLETYPE)(envelopeAccu * norm); -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES // cut peaks (shouldn't be necessary though) if (out > 32767) out = 32767; -#endif // INTEGER_SAMPLES +#endif // SOUNDTOUCH_INTEGER_SAMPLES samples[i] = (SAMPLETYPE)out; } diff --git a/source/SoundTouch/FIRFilter.cpp b/source/SoundTouch/FIRFilter.cpp index 001f70f..a274562 100644 --- a/source/SoundTouch/FIRFilter.cpp +++ b/source/SoundTouch/FIRFilter.cpp @@ -75,7 +75,7 @@ uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, ui { uint i, j, end; LONG_SAMPLETYPE suml, sumr; -#ifdef FLOAT_SAMPLES +#ifdef SOUNDTOUCH_FLOAT_SAMPLES // when using floating point samples, use a scaler instead of a divider // because division is much slower operation than multiplying. double dScaler = 1.0 / (double)resultDivider; @@ -108,7 +108,7 @@ uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, ui ptr[2 * i + 7] * filterCoeffs[i + 3]; } -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES suml >>= resultDivFactor; sumr >>= resultDivFactor; // saturate to 16 bit integer limits @@ -118,7 +118,7 @@ uint FIRFilter::evaluateFilterStereo(SAMPLETYPE *dest, const SAMPLETYPE *src, ui #else suml *= dScaler; sumr *= dScaler; -#endif // INTEGER_SAMPLES +#endif // SOUNDTOUCH_INTEGER_SAMPLES dest[j] = (SAMPLETYPE)suml; dest[j + 1] = (SAMPLETYPE)sumr; } @@ -133,7 +133,7 @@ uint FIRFilter::evaluateFilterMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint { uint i, j, end; LONG_SAMPLETYPE sum; -#ifdef FLOAT_SAMPLES +#ifdef SOUNDTOUCH_FLOAT_SAMPLES // when using floating point samples, use a scaler instead of a divider // because division is much slower operation than multiplying. double dScaler = 1.0 / (double)resultDivider; @@ -154,13 +154,13 @@ uint FIRFilter::evaluateFilterMono(SAMPLETYPE *dest, const SAMPLETYPE *src, uint src[i + 2] * filterCoeffs[i + 2] + src[i + 3] * filterCoeffs[i + 3]; } -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES sum >>= resultDivFactor; // saturate to 16 bit integer limits sum = (sum < -32768) ? -32768 : (sum > 32767) ? 32767 : sum; #else sum *= dScaler; -#endif // INTEGER_SAMPLES +#endif // SOUNDTOUCH_INTEGER_SAMPLES dest[j] = (SAMPLETYPE)sum; src ++; } @@ -235,23 +235,23 @@ FIRFilter * FIRFilter::newInstance() // Check if MMX/SSE instruction set extensions supported by CPU -#ifdef ALLOW_MMX +#ifdef SOUNDTOUCH_ALLOW_MMX // MMX routines available only with integer sample types if (uExtensions & SUPPORT_MMX) { return ::new FIRFilterMMX; } else -#endif // ALLOW_MMX +#endif // SOUNDTOUCH_ALLOW_MMX -#ifdef ALLOW_SSE +#ifdef SOUNDTOUCH_ALLOW_SSE if (uExtensions & SUPPORT_SSE) { // SSE support return ::new FIRFilterSSE; } else -#endif // ALLOW_SSE +#endif // SOUNDTOUCH_ALLOW_SSE { // ISA optimizations not supported, use plain C version diff --git a/source/SoundTouch/FIRFilter.h b/source/SoundTouch/FIRFilter.h index 5de98df..fcee72a 100644 --- a/source/SoundTouch/FIRFilter.h +++ b/source/SoundTouch/FIRFilter.h @@ -102,7 +102,7 @@ public: // Optional subclasses that implement CPU-specific optimizations: -#ifdef ALLOW_MMX +#ifdef SOUNDTOUCH_ALLOW_MMX /// Class that implements MMX optimized functions exclusive for 16bit integer samples type. class FIRFilterMMX : public FIRFilter @@ -119,10 +119,10 @@ public: virtual void setCoefficients(const short *coeffs, uint newLength, uint uResultDivFactor); }; -#endif // ALLOW_MMX +#endif // SOUNDTOUCH_ALLOW_MMX -#ifdef ALLOW_SSE +#ifdef SOUNDTOUCH_ALLOW_SSE /// Class that implements SSE optimized functions exclusive for floating point samples type. class FIRFilterSSE : public FIRFilter { @@ -138,7 +138,7 @@ public: virtual void setCoefficients(const float *coeffs, uint newLength, uint uResultDivFactor); }; -#endif // ALLOW_SSE +#endif // SOUNDTOUCH_ALLOW_SSE } diff --git a/source/SoundTouch/RateTransposer.cpp b/source/SoundTouch/RateTransposer.cpp index bb2b4c7..2afc187 100644 --- a/source/SoundTouch/RateTransposer.cpp +++ b/source/SoundTouch/RateTransposer.cpp @@ -115,7 +115,7 @@ void * RateTransposer::operator new(size_t s) RateTransposer *RateTransposer::newInstance() { -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES return ::new RateTransposerInteger; #else return ::new RateTransposerFloat; diff --git a/source/SoundTouch/SoundTouch.cpp b/source/SoundTouch/SoundTouch.cpp index 2ea23c0..6f7b9a8 100644 --- a/source/SoundTouch/SoundTouch.cpp +++ b/source/SoundTouch/SoundTouch.cpp @@ -243,7 +243,7 @@ void SoundTouch::calcEffectiveRateAndTempo() if (!TEST_FLOAT_EQUAL(rate,oldRate)) pRateTransposer->setRate(rate); if (!TEST_FLOAT_EQUAL(tempo, oldTempo)) pTDStretch->setTempo(tempo); -#ifndef PREVENT_CLICK_AT_RATE_CROSSOVER +#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER if (rate <= 1.0f) { if (output != pTDStretch) @@ -317,7 +317,7 @@ void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples) pTDStretch->putSamples(samples, nSamples); } */ -#ifndef PREVENT_CLICK_AT_RATE_CROSSOVER +#ifndef SOUNDTOUCH_PREVENT_CLICK_AT_RATE_CROSSOVER else if (rate <= 1.0f) { // transpose the rate down, output the transposed sound to tempo changer buffer diff --git a/source/SoundTouch/TDStretch.cpp b/source/SoundTouch/TDStretch.cpp index e43667e..3ef7798 100644 --- a/source/SoundTouch/TDStretch.cpp +++ b/source/SoundTouch/TDStretch.cpp @@ -744,24 +744,24 @@ TDStretch * TDStretch::newInstance() // Check if MMX/SSE instruction set extensions supported by CPU -#ifdef ALLOW_MMX +#ifdef SOUNDTOUCH_ALLOW_MMX // MMX routines available only with integer sample types if (uExtensions & SUPPORT_MMX) { return ::new TDStretchMMX; } else -#endif // ALLOW_MMX +#endif // SOUNDTOUCH_ALLOW_MMX -#ifdef ALLOW_SSE +#ifdef SOUNDTOUCH_ALLOW_SSE if (uExtensions & SUPPORT_SSE) { // SSE support return ::new TDStretchSSE; } else -#endif // ALLOW_SSE +#endif // SOUNDTOUCH_ALLOW_SSE { // ISA optimizations not supported, use plain C version @@ -776,7 +776,7 @@ TDStretch * TDStretch::newInstance() // ////////////////////////////////////////////////////////////////////////////// -#ifdef INTEGER_SAMPLES +#ifdef SOUNDTOUCH_INTEGER_SAMPLES // Slopes the amplitude of the 'midBuffer' samples so that cross correlation // is faster to calculate @@ -905,14 +905,14 @@ long TDStretch::calcCrossCorrStereo(const short *mixingPos, const short *compare return (long)((double)corr * SHRT_MAX / sqrt((double)norm)); } -#endif // INTEGER_SAMPLES +#endif // SOUNDTOUCH_INTEGER_SAMPLES ////////////////////////////////////////////////////////////////////////////// // // Floating point arithmetics specific algorithm implementations. // -#ifdef FLOAT_SAMPLES +#ifdef SOUNDTOUCH_FLOAT_SAMPLES // Slopes the amplitude of the 'midBuffer' samples so that cross correlation @@ -1023,4 +1023,4 @@ double TDStretch::calcCrossCorrStereo(const float *mixingPos, const float *compa return corr / sqrt(norm); } -#endif // FLOAT_SAMPLES +#endif // SOUNDTOUCH_FLOAT_SAMPLES diff --git a/source/SoundTouch/TDStretch.h b/source/SoundTouch/TDStretch.h index 3767f2b..c236aa4 100644 --- a/source/SoundTouch/TDStretch.h +++ b/source/SoundTouch/TDStretch.h @@ -251,7 +251,7 @@ public: // Implementation-specific class declarations: -#ifdef ALLOW_MMX +#ifdef SOUNDTOUCH_ALLOW_MMX /// Class that implements MMX optimized routines for 16bit integer samples type. class TDStretchMMX : public TDStretch { @@ -260,10 +260,10 @@ public: virtual void overlapStereo(short *output, const short *input) const; virtual void clearCrossCorrState(); }; -#endif /// ALLOW_MMX +#endif /// SOUNDTOUCH_ALLOW_MMX -#ifdef ALLOW_SSE +#ifdef SOUNDTOUCH_ALLOW_SSE /// Class that implements SSE optimized routines for floating point samples type. class TDStretchSSE : public TDStretch { @@ -271,7 +271,7 @@ public: double calcCrossCorrStereo(const float *mixingPos, const float *compare) const; }; -#endif /// ALLOW_SSE +#endif /// SOUNDTOUCH_ALLOW_SSE } #endif /// TDStretch_H diff --git a/source/SoundTouch/mmx_optimized.cpp b/source/SoundTouch/mmx_optimized.cpp index c70d2e4..495599c 100644 --- a/source/SoundTouch/mmx_optimized.cpp +++ b/source/SoundTouch/mmx_optimized.cpp @@ -50,7 +50,7 @@ #include "STTypes.h" -#ifdef ALLOW_MMX +#ifdef SOUNDTOUCH_ALLOW_MMX // MMX routines available only with integer sample type #if !(WIN32 || __i386__ || __x86_64__) @@ -317,4 +317,4 @@ uint FIRFilterMMX::evaluateFilterStereo(short *dest, const short *src, uint numS return (numSamples & 0xfffffffe) - length; } -#endif // ALLOW_MMX +#endif // SOUNDTOUCH_ALLOW_MMX diff --git a/source/SoundTouch/sse_optimized.cpp b/source/SoundTouch/sse_optimized.cpp index 2da8e7b..a1f318b 100644 --- a/source/SoundTouch/sse_optimized.cpp +++ b/source/SoundTouch/sse_optimized.cpp @@ -56,7 +56,7 @@ using namespace soundtouch; -#ifdef ALLOW_SSE +#ifdef SOUNDTOUCH_ALLOW_SSE // SSE routines available only with float sample type @@ -84,10 +84,10 @@ double TDStretchSSE::calcCrossCorrStereo(const float *pV1, const float *pV2) con // This can mean up to ~ 10-fold difference (incl. part of which is // due to skipping every second round for stereo sound though). // - // Compile-time define ALLOW_NONEXACT_SIMD_OPTIMIZATION is provided + // Compile-time define SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION is provided // for choosing if this little cheating is allowed. -#ifdef ALLOW_NONEXACT_SIMD_OPTIMIZATION +#ifdef SOUNDTOUCH_ALLOW_NONEXACT_SIMD_OPTIMIZATION // Little cheating allowed, return valid correlation only for // aligned locations, meaning every second round for stereo sound. @@ -507,4 +507,4 @@ uint FIRFilterSSE::evaluateFilterStereo(float *dest, const float *source, uint n */ } -#endif // ALLOW_SSE +#endif // SOUNDTOUCH_ALLOW_SSE