Merge from default branch
This commit is contained in:
@@ -1,18 +1,22 @@
|
||||
|
||||
image:
|
||||
- Visual Studio 2019
|
||||
|
||||
configuration:
|
||||
- Release
|
||||
|
||||
platform:
|
||||
- x86
|
||||
- x64
|
||||
|
||||
install:
|
||||
- cinst wget
|
||||
- c:\ProgramData\chocolatey\bin\wget.exe http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28-w32-setup.exe
|
||||
- c:\ProgramData\chocolatey\bin\wget.exe http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28-w64-setup.exe
|
||||
- ps: .\libsndfile-1.0.28-w32-setup.exe /silent /sp- /norestart
|
||||
- ps: .\libsndfile-1.0.28-w64-setup.exe /silent /sp- /norestart
|
||||
- cinst meson
|
||||
- cinst libsndfile
|
||||
|
||||
build_script:
|
||||
- msbuild rubberband.sln
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||
- meson build "-Dextra_include_dirs=C:\Program Files\libsndfile\include" "-Dextra_lib_dirs=C:\Program Files\libsndfile\lib"
|
||||
- ninja -C build
|
||||
# And test the .NET FFI interface build, which is completely separate
|
||||
- msbuild dotnet\rubberband.sln /t:Restore;Build
|
||||
|
||||
|
||||
25
.build.yml
Normal file
25
.build.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
image: ubuntu/20.04
|
||||
packages:
|
||||
- pkg-config
|
||||
- libsamplerate0-dev
|
||||
- libsndfile1-dev
|
||||
- libfftw3-dev
|
||||
- ladspa-sdk
|
||||
- vamp-plugin-sdk
|
||||
- meson
|
||||
- ninja-build
|
||||
sources:
|
||||
- hg+https://hg.sr.ht/~breakfastquay/rubberband
|
||||
tasks:
|
||||
- setup: |
|
||||
cd rubberband
|
||||
meson build
|
||||
- build: |
|
||||
cd rubberband
|
||||
ninja -C build
|
||||
./otherbuilds/check.sh
|
||||
triggers:
|
||||
- action: email
|
||||
condition: always
|
||||
to: chris.cannam@breakfastquay.com
|
||||
|
||||
27
.github/workflows/macos-ios.yml
vendored
Normal file
27
.github/workflows/macos-ios.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
name: macOS and iOS CI
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: macos-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: deps
|
||||
run: brew install libsndfile libsamplerate vamp-plugin-sdk meson ninja
|
||||
- name: configure macos
|
||||
run: meson build_macos
|
||||
- name: configure ios
|
||||
run: meson build_ios --cross-file cross/ios.txt
|
||||
- name: make macos
|
||||
run: ninja -C build_macos
|
||||
- name: make ios
|
||||
run: ninja -C build_ios
|
||||
- name: check otherbuilds
|
||||
run: otherbuilds/check.sh
|
||||
|
||||
|
||||
11
.hgignore
11
.hgignore
@@ -18,7 +18,10 @@ doc/html
|
||||
*.rej
|
||||
cov-int
|
||||
*~
|
||||
re:^x64/Debug/
|
||||
re:^x64/Release/
|
||||
re:^Release/
|
||||
re:^Debug/
|
||||
x64/Debug/
|
||||
x64/Release/
|
||||
Release/
|
||||
Debug/
|
||||
build
|
||||
build_*
|
||||
UpgradeLog*
|
||||
|
||||
1
.hgtags
1
.hgtags
@@ -11,3 +11,4 @@ efbc861f9b9460068c48a250232d343ffa7d5726 v1.7
|
||||
d4911a276d96f6232a68c6b8448056d3946043b9 v1.8.1
|
||||
fa6a54be7e6bf0c5adffd19ccec622481a8140a5 v1.8.2
|
||||
37b18c17c042eafc39483ffb58837de844ba3289 v1.9
|
||||
7af7a76bbb1dc75f630555e22ca8f6ae9da79529 v1.9.1
|
||||
|
||||
37
.travis.yml
37
.travis.yml
@@ -1,37 +0,0 @@
|
||||
dist:
|
||||
- trusty
|
||||
|
||||
language:
|
||||
- cpp
|
||||
|
||||
sudo:
|
||||
- false
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libsndfile-dev
|
||||
- libsamplerate-dev
|
||||
- libfftw3-dev
|
||||
- vamp-plugin-sdk
|
||||
- ladspa-sdk
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/Library/Caches/Homebrew
|
||||
- /usr/local/Homebrew
|
||||
|
||||
before_cache:
|
||||
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then brew cleanup; fi
|
||||
- if [ "${TRAVIS_OS_NAME}" = "osx" ]; then find /usr/local/Homebrew \! -regex ".+\.git.+" -delete; fi
|
||||
|
||||
before_install:
|
||||
- if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then brew update ; brew install libsndfile ; fi
|
||||
|
||||
script:
|
||||
- if [[ "$TRAVIS_OS_NAME" = "osx" ]] ; then make -f Makefile.osx && make -f Makefile.ios clean && make -f Makefile.ios ; else ./configure && make ; fi
|
||||
|
||||
20
CHANGELOG
20
CHANGELOG
@@ -1,4 +1,24 @@
|
||||
|
||||
Changes in Rubber Band v1.9.1
|
||||
|
||||
* Switch build system from Makefiles and Visual Studio project to
|
||||
Meson/Ninja for all platforms. There are still Makefiles and VS
|
||||
projects included in otherbuilds/ for those who wish to use them to
|
||||
build the static library directly
|
||||
* Make various fixes to improve sound quality when pitch-shifting
|
||||
dynamically in real-time (requires libsamplerate)
|
||||
* Fix floating-point exception when a very very long stretch factor
|
||||
is presented
|
||||
* Move the two directories that together provide the .NET interface
|
||||
(rubberband-sharp and rubberband-dll) into their own subdir (dotnet)
|
||||
* Ensure the library builds and runs correctly on ARM Mac (Apple
|
||||
Silicon, M1), and also on Windows using the Visual C++ Clang
|
||||
front-end
|
||||
|
||||
The API is unchanged and the library is binary compatible with
|
||||
version 1.7.
|
||||
|
||||
|
||||
Changes in Rubber Band v1.9
|
||||
|
||||
* Fix incorrect numbering of pitch speed/quality flags in the
|
||||
|
||||
2
Doxyfile
2
Doxyfile
@@ -31,7 +31,7 @@ PROJECT_NAME = "Rubber Band Library"
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER = 1.9.0
|
||||
PROJECT_NUMBER = 1.9.1
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||
# base path where the generated documentation will be put.
|
||||
|
||||
410
README.md
410
README.md
@@ -5,7 +5,7 @@ An audio time-stretching and pitch-shifting library and utility program.
|
||||
|
||||
Written by Chris Cannam, chris.cannam@breakfastquay.com.
|
||||
Published by Particular Programs Ltd t/a Breakfast Quay.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
Rubber Band is a library and utility program that permits changing the
|
||||
tempo and pitch of an audio recording independently of one another.
|
||||
@@ -17,14 +17,17 @@ tempo and pitch of an audio recording independently of one another.
|
||||
|
||||
CI builds:
|
||||
|
||||
* [](https://travis-ci.org/breakfastquay/rubberband) (Linux, macOS, iOS)
|
||||
* [](https://builds.sr.ht/~breakfastquay/rubberband?) (Linux)
|
||||
* [](https://github.com/breakfastquay/rubberband/actions?query=workflow%3A%22macOS+and+iOS+CI%22) (macOS, iOS)
|
||||
* [](https://ci.appveyor.com/project/breakfastquay/rubberband) (Windows)
|
||||
|
||||
|
||||
## Licence
|
||||
|
||||
Rubber Band is distributed under the GNU General Public License. See
|
||||
the file COPYING for more information.
|
||||
Rubber Band Library is distributed under the GNU General Public
|
||||
License (GPL). You can redistribute it and/or modify it under the
|
||||
terms of the GPL; either version 2 of the License, or (at your option)
|
||||
any later version. See the file COPYING for more information.
|
||||
|
||||
If you wish to distribute code using the Rubber Band Library under
|
||||
terms other than those of the GNU General Public License, you must
|
||||
@@ -40,9 +43,9 @@ that licence. Please refer to your licence agreement for more details.
|
||||
|
||||
Rubber Band includes a .NET interface generously contributed by
|
||||
Jonathan Gilbert under a BSD-like licence. The files in the
|
||||
rubberband-dll and rubberband-sharp directories fall under this
|
||||
licence. If you make use of this interface, please ensure you comply
|
||||
with the terms of its licence.
|
||||
dotnet/rubberband-dll and dotnet/rubberband-sharp directories fall
|
||||
under this licence. If you make use of this interface, please ensure
|
||||
you comply with the terms of its licence.
|
||||
|
||||
Rubber Band may link with other libraries or be compiled with other
|
||||
source code, depending on its build configuration. It is your
|
||||
@@ -67,13 +70,13 @@ our knowledge. See also the end of this README for detailed terms.
|
||||
2. Using the Rubber Band command-line tool
|
||||
3. Using the Rubber Band Library
|
||||
4. Compiling Rubber Band
|
||||
a. FFT and resampler selection
|
||||
b. Other supported #defines
|
||||
c. Building on Linux
|
||||
d. Building on macOS
|
||||
e. Building for iOS
|
||||
f. Building on Windows with Visual C++
|
||||
g. Building for Android and Java integration
|
||||
a. Building on Linux
|
||||
b. Building on macOS
|
||||
c. Building for iOS
|
||||
d. Building on Windows
|
||||
e. Building for Android and Java integration
|
||||
f. FFT and resampler selection
|
||||
g. Other supported #defines
|
||||
5. Copyright notes for bundled libraries
|
||||
|
||||
|
||||
@@ -106,11 +109,15 @@ Rubber Band consists of:
|
||||
The Rubber Band command-line tool builds as bin/rubberband. The basic
|
||||
incantation is
|
||||
|
||||
```
|
||||
$ rubberband -t <timeratio> -p <pitchratio> <infile.wav> <outfile.wav>
|
||||
```
|
||||
|
||||
For example,
|
||||
|
||||
```
|
||||
$ rubberband -t 1.5 -p 2.0 test.wav output.wav
|
||||
```
|
||||
|
||||
stretches the file test.wav to 50% longer than its original duration,
|
||||
shifts it up in pitch by one octave, and writes the output to output.wav.
|
||||
@@ -135,7 +142,7 @@ documented separately from the C++ header. You should include only
|
||||
one of the two headers, not both.
|
||||
|
||||
A .NET interface is also included, contributed by Jonathan Gilbert;
|
||||
see the files in the `rubberband-sharp/` directory for details.
|
||||
see the files in the `dotnet` directory for details.
|
||||
|
||||
The source code for the command-line utility (`main/main.cpp`)
|
||||
provides a good example of how to use Rubber Band in offline mode; the
|
||||
@@ -153,19 +160,209 @@ acquired a commercial licence from the author.
|
||||
|
||||
## 4. Compiling the Rubber Band Library
|
||||
|
||||
### 4a. FFT and resampler selection
|
||||
The primary supported build system for the Rubber Band Library on all
|
||||
platforms is Meson (https://mesonbuild.com). To build, ensure Meson
|
||||
and Ninja are installed and run:
|
||||
|
||||
```
|
||||
$ meson build && ninja -C build
|
||||
```
|
||||
|
||||
This checks for necessary dependencies, reports what it finds, and if
|
||||
all is well, builds the code into a subdirectory called `build`. It
|
||||
will build everything it can find the requisite dependencies for:
|
||||
static and dynamic libraries, LADSPA and Vamp plugins, and
|
||||
command-line utility.
|
||||
|
||||
Some configuration options are provided, described in the
|
||||
`meson_options.txt` file. To set one of these, add a `-D` option to
|
||||
Meson:
|
||||
|
||||
```
|
||||
$ meson build -Dipp_path=/opt/intel/ipp
|
||||
```
|
||||
|
||||
The options are documented in the library- and platform-specific
|
||||
sections below.
|
||||
|
||||
For those who don't wish to use Meson, some alternative build files
|
||||
(Makefiles and Visual C++ projects) are included in the `otherbuilds`
|
||||
directory. These build only the static library.
|
||||
|
||||
The Rubber Band Library is written entirely in C++ to the C++98
|
||||
standard. It is unlikely to make any difference (performance or
|
||||
otherwise) which C++ standard your compiler uses - as long as it's no
|
||||
older than C++98!
|
||||
|
||||
If you are building this software using one of the bundled library
|
||||
options (Speex or KissFFT), please be sure to review the terms for
|
||||
those libraries in `src/speex/COPYING` and `src/kissfft/COPYING` as
|
||||
applicable.
|
||||
|
||||
|
||||
### 4a. Building on Linux
|
||||
|
||||
For best results, and to ensure the command-line tool and plugins are
|
||||
built, first install libsamplerate, libsndfile, and the LADSPA and
|
||||
Vamp plugin headers so they can be found using `pkg-config`. Then
|
||||
|
||||
```
|
||||
$ meson build && ninja -C build
|
||||
```
|
||||
|
||||
See "FFT and resampler selection" below for further build options.
|
||||
|
||||
Alternatively, if you only need the static library and prefer a
|
||||
Makefile, try
|
||||
|
||||
```
|
||||
$ make -f otherbuilds/Makefile.linux
|
||||
```
|
||||
|
||||
|
||||
### 4b. Building on macOS
|
||||
|
||||
Ensure the Xcode command-line tools are installed, and ideally also
|
||||
install libsamplerate and libsndfile.
|
||||
|
||||
To build for the default architecture:
|
||||
|
||||
```
|
||||
$ meson build && ninja -C build
|
||||
```
|
||||
|
||||
Which architecture is the default may depend on the version of Meson
|
||||
and/or the current shell. To force a particular architecture you can
|
||||
use a Meson cross-file, as follows.
|
||||
|
||||
To build for Apple Silicon (arm64):
|
||||
|
||||
```
|
||||
$ meson build --cross-file cross/macos-arm64.txt && ninja -C build
|
||||
```
|
||||
|
||||
To build for Intel (x86_64):
|
||||
|
||||
```
|
||||
$ meson build --cross-file cross/macos-x86_64.txt && ninja -C build
|
||||
```
|
||||
|
||||
You can build a universal binary library for both architectures like
|
||||
this:
|
||||
|
||||
```
|
||||
$ meson build --cross-file cross/macos-universal.txt && ninja -C build
|
||||
```
|
||||
|
||||
However, the resulting binary will be marked as loadable on macOS 11+
|
||||
only, even for Intel, which is probably not what you want (ideally the
|
||||
Intel slice would support older versions of the OS). A Makefile that
|
||||
handles this explicitly is also provided:
|
||||
|
||||
```
|
||||
$ make -f otherbuilds/Makefile.macos-universal
|
||||
```
|
||||
|
||||
This produces only a static library, but it's a universal binary that
|
||||
is compatible with macOS 10.7 onwards on the Intel side.
|
||||
|
||||
See "FFT and resampler selection" below for further build options.
|
||||
|
||||
Note that you cannot legally distribute applications using Rubber Band
|
||||
in the Mac App Store, unless you have first obtained a commercial
|
||||
licence for the Rubber Band Library. GPL code is not permitted in the
|
||||
app store. See https://breakfastquay.com/technology/license.html for
|
||||
commercial terms.
|
||||
|
||||
|
||||
### 4c. Building for iOS
|
||||
|
||||
Ensure the Xcode command-line tools are installed, and
|
||||
|
||||
```
|
||||
$ meson build_ios --cross-file cross/ios.txt && ninja -C build
|
||||
```
|
||||
|
||||
The output files will be found in the `build_ios` directory.
|
||||
|
||||
To build for the simulator,
|
||||
|
||||
```
|
||||
$ meson build_sim --cross-file cross/ios-simulator.txt && ninja -C build
|
||||
```
|
||||
|
||||
The output files will be found in the `build_sim` directory.
|
||||
|
||||
See "FFT and resampler selection" below for further build options.
|
||||
|
||||
Note that you cannot legally distribute applications using Rubber Band
|
||||
in the iOS App Store, unless you have a first obtained a commercial
|
||||
licence for the Rubber Band Library. GPL code is not permitted in the
|
||||
app store. See https://breakfastquay.com/technology/license.html for
|
||||
commercial terms.
|
||||
|
||||
|
||||
### 4d. Building on Windows
|
||||
|
||||
The default build on Windows also uses Meson, so ensure Meson and
|
||||
Ninja are installed and available. Then, in a terminal window with the
|
||||
compiler tools available in the path (e.g. a Visual Studio
|
||||
command-line prompt for the relevant build architecture) run
|
||||
|
||||
```
|
||||
> meson build
|
||||
> ninja -C build
|
||||
```
|
||||
|
||||
The output files will be found in the `build` directory.
|
||||
|
||||
The Rubber Band code is compatible with both the traditional Visual
|
||||
C++ compiler (`cl`) and the Clang front-end (`clang`), and the build
|
||||
system will use whichever appears (first) in your path.
|
||||
|
||||
To build against a specific Visual C++ runtime, use the built-in Meson
|
||||
option `b_vscrt`:
|
||||
|
||||
```
|
||||
> meson build -Db_vscrt=mt
|
||||
```
|
||||
|
||||
See "FFT and resampler selection" below for further build options.
|
||||
|
||||
Alternatively, if you only need the static library and prefer a Visual
|
||||
Studio project file, there is one targeted for VC 2015 in
|
||||
`otherbuilds\rubberband-library.vcxproj`.
|
||||
|
||||
|
||||
### 4e. Building for Android and Java integration
|
||||
|
||||
Currently only a very old Android NDK build file is provided, as
|
||||
`otherbuilds/Android.mk`. This includes compile definitions for a
|
||||
shared library built for ARM architectures which can be loaded from a
|
||||
Java application using the Java native interface (i.e. the Android
|
||||
NDK).
|
||||
|
||||
The Java side of the interface can be found in
|
||||
`com/breakfastquay/rubberband/RubberBandStretcher.java`.
|
||||
|
||||
See
|
||||
https://hg.sr.ht/~breakfastquay/rubberband-android-simple-sample
|
||||
for a very trivial example of integration with Android Java code.
|
||||
|
||||
The supplied `.mk` file uses KissFFT and the Speex resampler.
|
||||
|
||||
|
||||
### 4f. FFT and resampler selection
|
||||
|
||||
Rubber Band requires additional library code for FFT calculation and
|
||||
resampling. Several libraries are supported. The selection is
|
||||
controlled using preprocessor flags at compile time, as detailed in
|
||||
the tables below.
|
||||
controlled (in Meson) using `-D` options and (in the code itself)
|
||||
using preprocessor flags set by the build system. These options and
|
||||
flags are detailed in the tables below.
|
||||
|
||||
Flags that declare that you want to use an external library begin with
|
||||
`HAVE_`; flags that select from the bundled options begin with `USE_`.
|
||||
|
||||
You must enable one resampler implementation and one FFT
|
||||
implementation. Do not enable more than one of either unless you know
|
||||
what you're doing.
|
||||
At least one resampler implementation and one FFT implementation must
|
||||
be enabled. It is technically possible to enable more than one, but
|
||||
it's confusing and not often useful.
|
||||
|
||||
If you are building this software using one of the bundled library
|
||||
options (Speex or KissFFT), please be sure to review the terms for
|
||||
@@ -175,44 +372,42 @@ applicable.
|
||||
#### FFT libraries supported
|
||||
|
||||
```
|
||||
Name Flags required Notes
|
||||
---- -------------- -----
|
||||
Library Build option CPP define Notes
|
||||
---- ------------ ---------- -----
|
||||
|
||||
FFTW3 -DHAVE_FFTW3 GPL.
|
||||
KissFFT -Dfft=kissfft -DUSE_KISSFFT Default except on macOS/iOS.
|
||||
Bundled, can be distributed with
|
||||
either the Rubber Band GPL or
|
||||
commercial licence.
|
||||
|
||||
Accelerate -DHAVE_VDSP Platform library on macOS and iOS.
|
||||
Accelerate -Dfft=vdsp -DHAVE_VDSP Default on macOS/iOS.
|
||||
Best option on these platforms.
|
||||
|
||||
Intel IPP -DHAVE_IPP Proprietary library, can only be used with
|
||||
Rubber Band commercial licence. Define
|
||||
USE_IPP_STATIC as well to build with static
|
||||
IPP libraries.
|
||||
FFTW3 -Dfft=fftw -DHAVE_FFTW3 GPL.
|
||||
|
||||
KissFFT -DUSE_KISSFFT Bundled, can be distributed with either the
|
||||
Rubber Band GPL or commercial licence.
|
||||
Single-precision. Slower than the above
|
||||
options.
|
||||
Intel IPP -Dfft=ipp -DHAVE_IPP Proprietary, can only be used with
|
||||
Rubber Band commercial licence.
|
||||
```
|
||||
|
||||
#### Resampler libraries supported
|
||||
|
||||
```
|
||||
Name Flags required Notes
|
||||
---- -------------- -----
|
||||
Library Build option CPP define Notes
|
||||
---- ------------ ---------- -----
|
||||
|
||||
libsamplerate -DHAVE_LIBSAMPLERATE GPL until v0.1.8, BSD for v0.1.9 and later.
|
||||
This is the preferred choice in almost
|
||||
all cases.
|
||||
libsamplerate -DHAVE_LIBSAMPLERATE
|
||||
-Dresampler=libsamplerate Best choice in most cases.
|
||||
|
||||
libresample -DHAVE_LIBRESAMPLE LGPL.
|
||||
|
||||
Speex -DUSE_SPEEX Bundled, can be distributed with either the
|
||||
Rubber Band GPL or commercial licence.
|
||||
Speex -DUSE_SPEEX
|
||||
-Dresampler=speex Bundled, can be distributed with
|
||||
either the Rubber Band GPL or
|
||||
commercial licence.
|
||||
```
|
||||
|
||||
### 4b. Other supported #defines
|
||||
### 4g. Other supported #defines
|
||||
|
||||
Other symbols you may define at compile time are as follows. (Usually
|
||||
the supplied build files will handle these for you.)
|
||||
Other known preprocessor symbols are as follows. (Usually the supplied
|
||||
build files will handle these for you.)
|
||||
|
||||
-DLACK_BAD_ALLOC
|
||||
Define on systems lacking std::bad_alloc in the C++ library.
|
||||
@@ -247,125 +442,6 @@ the supplied build files will handle these for you.)
|
||||
for mobile architectures.
|
||||
|
||||
|
||||
### 4c. Building on Linux
|
||||
|
||||
A GNU-style configure script is included for use on Linux and similar
|
||||
systems.
|
||||
|
||||
Run `./configure`, then adjust the generated Makefile according to
|
||||
your preference for FFT and resampler implementations. The default is
|
||||
to use FFTW3 and libsamplerate.
|
||||
|
||||
The following Makefile targets are available:
|
||||
|
||||
static -- build static libraries only
|
||||
dynamic -- build dynamic libraries only
|
||||
library -- build static and dynamic libraries only
|
||||
program -- build the command-line tool
|
||||
vamp -- build Vamp plugin
|
||||
ladspa -- build LADSPA plugin
|
||||
all -- build everything.
|
||||
|
||||
The default target is "all".
|
||||
|
||||
|
||||
### 4d. Building on macOS
|
||||
|
||||
A Makefile for macOS is provided as `Makefile.osx`.
|
||||
|
||||
Adjust the Makefile according to your preference for compiler and
|
||||
platform SDK, FFT and resampler implementations. The default is to
|
||||
use the Accelerate framework and the Speex resampler. Then run
|
||||
e.g. `make -f Makefile.osx library` in a terminal window to build.
|
||||
You will need the Xcode command-line tools installed.
|
||||
|
||||
(You probably don't want to use the configure script on macOS -- just
|
||||
use `Makefile.osx` directly.)
|
||||
|
||||
The following Makefile targets are available:
|
||||
|
||||
static -- build static libraries only
|
||||
dynamic -- build dynamic libraries only
|
||||
library -- build static and dynamic libraries only
|
||||
program -- build the command-line tool
|
||||
vamp -- build Vamp plugin
|
||||
ladspa -- build LADSPA plugin
|
||||
all -- build everything.
|
||||
|
||||
The default target is to build the static and dynamic libraries and
|
||||
the command line tool. The sndfile library is required for the
|
||||
command line tool.
|
||||
|
||||
If you prefer to add the Rubber Band Library files to an existing
|
||||
build project instead of using the Makefile, the files in `src/`
|
||||
(except for `RubberBandStretcherJNI.cpp`) and the API headers in
|
||||
`rubberband/` should be all you need.
|
||||
|
||||
Note that you cannot legally distribute applications using Rubber Band
|
||||
in the Mac App Store, unless you have first obtained a commercial
|
||||
licence for the Rubber Band Library. GPL code is not permitted in the
|
||||
app store. See https://breakfastquay.com/technology/license.html for
|
||||
commercial terms.
|
||||
|
||||
|
||||
### 4e. Building for iOS
|
||||
|
||||
A Makefile for iOS is provided as `Makefile.ios`. It produces a
|
||||
single static library containing both simulator and device binaries,
|
||||
in both 32- and 64-bit architectures.
|
||||
|
||||
Run e.g. `make -f Makefile.ios` in a terminal window to build. You
|
||||
will need the Xcode command-line tools installed.
|
||||
|
||||
If you prefer to add the Rubber Band Library files to an existing
|
||||
build project instead of using the Makefile, the files in `src/`
|
||||
(except for `RubberBandStretcherJNI.cpp`) and the API headers in
|
||||
`rubberband/` should be all you need.
|
||||
|
||||
Note that you cannot legally distribute applications using Rubber Band
|
||||
in the iOS App Store, unless you have a first obtained a commercial
|
||||
licence for the Rubber Band Library. GPL code is not permitted in the
|
||||
app store. See https://breakfastquay.com/technology/license.html for
|
||||
commercial terms.
|
||||
|
||||
|
||||
### 4f. Building on Windows with Visual C++
|
||||
|
||||
A Visual Studio solution, targeted to VC 2015, with two projects is
|
||||
supplied. The `rubberband-library` project builds the Rubber Band
|
||||
static libraries only. The `rubberband-program` project builds the
|
||||
Rubber Band command-line tool (which requires the Rubber Band Library
|
||||
and libsndfile).
|
||||
|
||||
You will need to adjust the project settings so as to set the compile
|
||||
flags according to your preference for FFT and resampler
|
||||
implementation, and set the include path and library path
|
||||
appropriately. The default is to use the bundled KissFFT and the
|
||||
Speex resampler.
|
||||
|
||||
If you prefer to add the Rubber Band Library files to an existing
|
||||
build project instead of using the supplied one, the files in `src/`
|
||||
(except for `RubberBandStretcherJNI.cpp`) and the API headers in
|
||||
`rubberband/` should be all you need.
|
||||
|
||||
|
||||
### 4g. Building for Android and Java integration
|
||||
|
||||
An Android NDK build file is provided as `Android.mk`. This includes
|
||||
compile definitions for a shared library built for ARM architectures
|
||||
which can be loaded from a Java application using the Java native
|
||||
interface (i.e. the Android NDK).
|
||||
|
||||
The Java side of the interface can be found in
|
||||
`com/breakfastquay/rubberband/RubberBandStretcher.java`.
|
||||
|
||||
See
|
||||
https://hg.sr.ht/~breakfastquay/rubberband-android-simple-sample
|
||||
for a very trivial example of integration with Android Java code.
|
||||
|
||||
The supplied `.mk` file uses KissFFT and the Speex resampler.
|
||||
|
||||
|
||||
## 5. Copyright notes for bundled libraries
|
||||
|
||||
### 5a. Speex
|
||||
|
||||
79
configure.ac
79
configure.ac
@@ -1,79 +0,0 @@
|
||||
|
||||
AC_INIT(RubberBand, 1.9.0, chris.cannam@breakfastquay.com)
|
||||
|
||||
AC_ARG_ENABLE(programs,
|
||||
[ --disable-programs disable compilation of programs],
|
||||
[case "${enableval}" in
|
||||
yes | no ) WITH_PROGRAMS="${enableval}" ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --disable-programs) ;;
|
||||
esac],
|
||||
[WITH_PROGRAMS="yes"]
|
||||
)
|
||||
AC_SUBST(WITH_PROGRAMS)
|
||||
|
||||
AC_ARG_ENABLE(vamp,
|
||||
[ --disable-vamp disable compilation of Vamp plugin],
|
||||
[case "${enableval}" in
|
||||
yes | no ) WITH_VAMP="${enableval}" ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --disable-vamp) ;;
|
||||
esac],
|
||||
[WITH_VAMP="yes"]
|
||||
)
|
||||
AC_SUBST(WITH_VAMP)
|
||||
|
||||
AC_ARG_ENABLE(ladspa,
|
||||
[ --disable-ladspa disable compilation of LADSPA plugin],
|
||||
[case "${enableval}" in
|
||||
yes | no ) WITH_LADSPA="${enableval}" ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --disable-ladspa) ;;
|
||||
esac],
|
||||
[WITH_LADSPA="yes"]
|
||||
)
|
||||
AC_SUBST(WITH_LADSPA)
|
||||
|
||||
AC_CONFIG_SRCDIR(src/StretcherImpl.h)
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CC
|
||||
AC_HEADER_STDC
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
PKG_CHECK_MODULES([SRC],[samplerate])
|
||||
AC_SUBST(SRC_CFLAGS)
|
||||
AC_SUBST(SRC_LIBS)
|
||||
|
||||
if test "x$WITH_PROGRAMS" = "xyes"; then
|
||||
PKG_CHECK_MODULES([SNDFILE],[sndfile])
|
||||
fi
|
||||
AC_SUBST(SNDFILE_CFLAGS)
|
||||
AC_SUBST(SNDFILE_LIBS)
|
||||
|
||||
PKG_CHECK_MODULES([FFTW],[fftw3])
|
||||
AC_SUBST(FFTW_CFLAGS)
|
||||
AC_SUBST(FFTW_LIBS)
|
||||
|
||||
if test "x$WITH_LADSPA" = "xyes"; then
|
||||
AC_CHECK_HEADERS(ladspa.h)
|
||||
fi
|
||||
AC_CHECK_HEADERS(pthread.h)
|
||||
|
||||
if test "x$WITH_VAMP" = "xyes"; then
|
||||
PKG_CHECK_MODULES([Vamp],[vamp-sdk])
|
||||
fi
|
||||
AC_SUBST(Vamp_CFLAGS)
|
||||
AC_SUBST(Vamp_LIBS)
|
||||
|
||||
changequote(,)dnl
|
||||
if test "x$GCC" = "xyes"; then
|
||||
case " $CFLAGS " in
|
||||
*[\ \ ]-fPIC\ -Wall[\ \ ]*) ;;
|
||||
*) CFLAGS="$CFLAGS -fPIC -Wall" ;;
|
||||
esac
|
||||
case " $CXXFLAGS " in
|
||||
*[\ \ ]-fPIC\ -Wall[\ \ ]*) ;;
|
||||
*) CXXFLAGS="$CXXFLAGS -fPIC -Wall" ;;
|
||||
esac
|
||||
fi
|
||||
changequote([,])dnl
|
||||
|
||||
AC_OUTPUT([Makefile])
|
||||
|
||||
19
cross/ios-simulator.txt
Normal file
19
cross/ios-simulator.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
[constants]
|
||||
sysroot = '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk'
|
||||
common_args = [ '-isysroot', sysroot, '-arch', 'x86_64', '-mios-version-min=8' ]
|
||||
|
||||
[host_machine]
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
system = 'darwin'
|
||||
endian = 'little'
|
||||
|
||||
[binaries]
|
||||
c = 'cc'
|
||||
cpp = 'c++'
|
||||
strip = 'strip'
|
||||
|
||||
[built-in options]
|
||||
c_args = common_args
|
||||
cpp_args = common_args + [ '-stdlib=libc++' ]
|
||||
cpp_link_args = cpp_args
|
||||
20
cross/ios.txt
Normal file
20
cross/ios.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
[constants]
|
||||
sysroot = '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk'
|
||||
common_args = [ '-isysroot', sysroot, '-arch', 'arm64', '-arch', 'armv7', '-mios-version-min=8' ]
|
||||
|
||||
[host_machine]
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'aarch64'
|
||||
system = 'darwin'
|
||||
endian = 'little'
|
||||
|
||||
[binaries]
|
||||
c = 'cc'
|
||||
cpp = 'c++'
|
||||
strip = 'strip'
|
||||
|
||||
[built-in options]
|
||||
b_bitcode = true
|
||||
c_args = common_args
|
||||
cpp_args = common_args + [ '-stdlib=libc++' ]
|
||||
cpp_link_args = cpp_args
|
||||
21
cross/macos-arm64.txt
Normal file
21
cross/macos-arm64.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
[host_machine]
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'aarch64'
|
||||
system = 'darwin'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = false
|
||||
|
||||
[binaries]
|
||||
c = 'cc'
|
||||
cpp = 'c++'
|
||||
strip = 'strip'
|
||||
pkgconfig = 'pkg-config'
|
||||
|
||||
[built-in options]
|
||||
c_args = ['-arch', 'arm64']
|
||||
cpp_args = ['-arch', 'arm64']
|
||||
cpp_link_args = ['-arch', 'arm64']
|
||||
|
||||
|
||||
21
cross/macos-universal.txt
Normal file
21
cross/macos-universal.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
[host_machine]
|
||||
cpu_family = 'aarch64'
|
||||
cpu = 'aarch64'
|
||||
system = 'darwin'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = false
|
||||
|
||||
[binaries]
|
||||
c = 'cc'
|
||||
cpp = 'c++'
|
||||
strip = 'strip'
|
||||
pkgconfig = 'pkg-config'
|
||||
|
||||
[built-in options]
|
||||
c_args = ['-arch', 'arm64', '-arch', 'x86_64']
|
||||
cpp_args = ['-arch', 'arm64', '-arch', 'x86_64']
|
||||
cpp_link_args = ['-arch', 'arm64', '-arch', 'x86_64']
|
||||
|
||||
|
||||
20
cross/macos-x86_64.txt
Normal file
20
cross/macos-x86_64.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
[host_machine]
|
||||
cpu_family = 'x86_64'
|
||||
cpu = 'x86_64'
|
||||
system = 'darwin'
|
||||
endian = 'little'
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = false
|
||||
|
||||
[binaries]
|
||||
c = 'cc'
|
||||
cpp = 'c++'
|
||||
strip = 'strip'
|
||||
pkgconfig = 'pkg-config'
|
||||
|
||||
[built-in options]
|
||||
c_args = ['-arch', 'x86_64']
|
||||
cpp_args = ['-arch', 'x86_64']
|
||||
cpp_link_args = ['-arch', 'x86_64']
|
||||
|
||||
9
cross/windows-cl.txt
Normal file
9
cross/windows-cl.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = false
|
||||
|
||||
[binaries]
|
||||
c = 'cl'
|
||||
cpp = 'cl'
|
||||
|
||||
|
||||
9
cross/windows-clang.txt
Normal file
9
cross/windows-clang.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
[properties]
|
||||
needs_exe_wrapper = false
|
||||
|
||||
[binaries]
|
||||
c = 'clang'
|
||||
cpp = 'clang++'
|
||||
|
||||
|
||||
41
dotnet/README.md
Normal file
41
dotnet/README.md
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
This directory contains a .NET interface for Rubber Band Library,
|
||||
generously contributed by Jonathan Gilbert under a BSD-like
|
||||
licence. The directory `rubberband-sharp` contains a managed-code
|
||||
interface to Rubber Band in C#. It loads and uses the DLL defined in
|
||||
`rubberband-dll`, that wraps the Rubber Band Library with an API
|
||||
understood by the `rubberband-sharp` code.
|
||||
|
||||
If you make use of this interface, please ensure you comply with the
|
||||
terms of its licence, in addition to the GPL licence accompanying
|
||||
Rubber Band Library itself:
|
||||
|
||||
```
|
||||
[files in rubberband-dll and rubberband-sharp]
|
||||
|
||||
Copyright 2018-2019 Jonathan Gilbert
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use, copy,
|
||||
modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
|
||||
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of Jonathan Gilbert
|
||||
shall not be used in advertising or otherwise to promote the sale,
|
||||
use or other dealings in this Software without prior written
|
||||
authorization.
|
||||
```
|
||||
@@ -22,32 +22,33 @@
|
||||
<ProjectGuid>{32C11C5C-3D27-4E57-B72C-161A48AAA95E}</ProjectGuid>
|
||||
<RootNamespace>rubberbanddll</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
@@ -91,7 +92,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@@ -109,7 +110,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@@ -129,7 +130,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@@ -151,7 +152,7 @@
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@@ -180,4 +181,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -22,23 +22,24 @@
|
||||
<ProjectGuid>{020CEB11-EF4E-400E-971D-A35DB69D7CF9}</ProjectGuid>
|
||||
<RootNamespace>rubberband-library</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
@@ -63,6 +64,7 @@
|
||||
<OutDir>Debug\</OutDir>
|
||||
<IntDir>Debug\</IntDir>
|
||||
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
|
||||
<SourcePath>$(SourcePath)</SourcePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
|
||||
@@ -74,7 +76,7 @@
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>.;.\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
@@ -88,7 +90,7 @@
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>.;.\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
@@ -106,7 +108,7 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>.;.\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
@@ -124,7 +126,7 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>.;.\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
@@ -137,59 +139,59 @@
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="rubberband\rubberband-c.h" />
|
||||
<ClInclude Include="rubberband\RubberBandStretcher.h" />
|
||||
<ClInclude Include="src\audiocurves\CompoundAudioCurve.h" />
|
||||
<ClInclude Include="src\audiocurves\ConstantAudioCurve.h" />
|
||||
<ClInclude Include="src\audiocurves\HighFrequencyAudioCurve.h" />
|
||||
<ClInclude Include="src\audiocurves\PercussiveAudioCurve.h" />
|
||||
<ClInclude Include="src\audiocurves\SilentAudioCurve.h" />
|
||||
<ClInclude Include="src\audiocurves\SpectralDifferenceAudioCurve.h" />
|
||||
<ClInclude Include="src\base\Profiler.h" />
|
||||
<ClInclude Include="src\base\RingBuffer.h" />
|
||||
<ClInclude Include="src\base\Scavenger.h" />
|
||||
<ClInclude Include="src\dsp\AudioCurveCalculator.h" />
|
||||
<ClInclude Include="src\dsp\FFT.h" />
|
||||
<ClInclude Include="src\dsp\MovingMedian.h" />
|
||||
<ClInclude Include="src\dsp\Resampler.h" />
|
||||
<ClInclude Include="src\dsp\SampleFilter.h" />
|
||||
<ClInclude Include="src\dsp\SincWindow.h" />
|
||||
<ClInclude Include="src\dsp\Window.h" />
|
||||
<ClInclude Include="src\float_cast\float_cast.h" />
|
||||
<ClInclude Include="src\speex\speex_resampler.h" />
|
||||
<ClInclude Include="src\StretchCalculator.h" />
|
||||
<ClInclude Include="src\StretcherChannelData.h" />
|
||||
<ClInclude Include="src\StretcherImpl.h" />
|
||||
<ClInclude Include="src\system\Allocators.h" />
|
||||
<ClInclude Include="src\system\sysutils.h" />
|
||||
<ClInclude Include="src\system\Thread.h" />
|
||||
<ClInclude Include="src\system\VectorOps.h" />
|
||||
<ClInclude Include="..\rubberband\rubberband-c.h" />
|
||||
<ClInclude Include="..\rubberband\RubberBandStretcher.h" />
|
||||
<ClInclude Include="..\src\audiocurves\CompoundAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\ConstantAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\HighFrequencyAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\PercussiveAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\SilentAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\SpectralDifferenceAudioCurve.h" />
|
||||
<ClInclude Include="..\src\base\Profiler.h" />
|
||||
<ClInclude Include="..\src\base\RingBuffer.h" />
|
||||
<ClInclude Include="..\src\base\Scavenger.h" />
|
||||
<ClInclude Include="..\src\dsp\AudioCurveCalculator.h" />
|
||||
<ClInclude Include="..\src\dsp\FFT.h" />
|
||||
<ClInclude Include="..\src\dsp\MovingMedian.h" />
|
||||
<ClInclude Include="..\src\dsp\Resampler.h" />
|
||||
<ClInclude Include="..\src\dsp\SampleFilter.h" />
|
||||
<ClInclude Include="..\src\dsp\SincWindow.h" />
|
||||
<ClInclude Include="..\src\dsp\Window.h" />
|
||||
<ClInclude Include="..\src\float_cast\float_cast.h" />
|
||||
<ClInclude Include="..\src\speex\speex_resampler.h" />
|
||||
<ClInclude Include="..\src\StretchCalculator.h" />
|
||||
<ClInclude Include="..\src\StretcherChannelData.h" />
|
||||
<ClInclude Include="..\src\StretcherImpl.h" />
|
||||
<ClInclude Include="..\src\system\Allocators.h" />
|
||||
<ClInclude Include="..\src\system\sysutils.h" />
|
||||
<ClInclude Include="..\src\system\Thread.h" />
|
||||
<ClInclude Include="..\src\system\VectorOps.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\audiocurves\CompoundAudioCurve.cpp" />
|
||||
<ClCompile Include="src\audiocurves\ConstantAudioCurve.cpp" />
|
||||
<ClCompile Include="src\audiocurves\HighFrequencyAudioCurve.cpp" />
|
||||
<ClCompile Include="src\audiocurves\PercussiveAudioCurve.cpp" />
|
||||
<ClCompile Include="src\audiocurves\SilentAudioCurve.cpp" />
|
||||
<ClCompile Include="src\audiocurves\SpectralDifferenceAudioCurve.cpp" />
|
||||
<ClCompile Include="src\base\Profiler.cpp" />
|
||||
<ClCompile Include="src\dsp\AudioCurveCalculator.cpp" />
|
||||
<ClCompile Include="src\dsp\FFT.cpp" />
|
||||
<ClCompile Include="src\dsp\Resampler.cpp" />
|
||||
<ClCompile Include="src\kissfft\kiss_fft.c" />
|
||||
<ClCompile Include="src\kissfft\kiss_fftr.c" />
|
||||
<ClCompile Include="src\rubberband-c.cpp" />
|
||||
<ClCompile Include="src\RubberBandStretcher.cpp" />
|
||||
<ClCompile Include="src\speex\resample.c" />
|
||||
<ClCompile Include="src\StretchCalculator.cpp" />
|
||||
<ClCompile Include="src\StretcherChannelData.cpp" />
|
||||
<ClCompile Include="src\StretcherImpl.cpp" />
|
||||
<ClCompile Include="src\StretcherProcess.cpp" />
|
||||
<ClCompile Include="src\system\Allocators.cpp" />
|
||||
<ClCompile Include="src\system\sysutils.cpp" />
|
||||
<ClCompile Include="src\system\Thread.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\CompoundAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\ConstantAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\HighFrequencyAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\PercussiveAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\SilentAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\SpectralDifferenceAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\base\Profiler.cpp" />
|
||||
<ClCompile Include="..\src\dsp\AudioCurveCalculator.cpp" />
|
||||
<ClCompile Include="..\src\dsp\FFT.cpp" />
|
||||
<ClCompile Include="..\src\dsp\Resampler.cpp" />
|
||||
<ClCompile Include="..\src\kissfft\kiss_fft.c" />
|
||||
<ClCompile Include="..\src\kissfft\kiss_fftr.c" />
|
||||
<ClCompile Include="..\src\rubberband-c.cpp" />
|
||||
<ClCompile Include="..\src\RubberBandStretcher.cpp" />
|
||||
<ClCompile Include="..\src\speex\resample.c" />
|
||||
<ClCompile Include="..\src\StretchCalculator.cpp" />
|
||||
<ClCompile Include="..\src\StretcherChannelData.cpp" />
|
||||
<ClCompile Include="..\src\StretcherImpl.cpp" />
|
||||
<ClCompile Include="..\src\StretcherProcess.cpp" />
|
||||
<ClCompile Include="..\src\system\Allocators.cpp" />
|
||||
<ClCompile Include="..\src\system\sysutils.cpp" />
|
||||
<ClCompile Include="..\src\system\Thread.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -1,15 +1,10 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.25420.1
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31005.135
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-library", "rubberband-library.vcxproj", "{020CEB11-EF4E-400E-971D-A35DB69D7CF9}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-program", "rubberband-program.vcxproj", "{06838307-FEAA-4DB0-8E08-AF19698E9C40}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9} = {020CEB11-EF4E-400E-971D-A35DB69D7CF9}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-dll", "rubberband-dll.vcxproj", "{32C11C5C-3D27-4E57-B72C-161A48AAA95E}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9} = {020CEB11-EF4E-400E-971D-A35DB69D7CF9}
|
||||
@@ -30,32 +25,26 @@ Global
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x64.Build.0 = Debug|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x86.Build.0 = Debug|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|Any CPU.Build.0 = Release|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x64.ActiveCfg = Release|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x64.Build.0 = Release|x64
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x86.ActiveCfg = Release|Win32
|
||||
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x86.Build.0 = Release|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|x64.Build.0 = Debug|x64
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|x86.Build.0 = Debug|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Release|x64.ActiveCfg = Release|x64
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Release|x64.Build.0 = Release|x64
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Release|x86.ActiveCfg = Release|Win32
|
||||
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Release|x86.Build.0 = Release|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|Any CPU.ActiveCfg = Debug|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|Any CPU.Build.0 = Debug|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|x64.Build.0 = Debug|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|x86.Build.0 = Debug|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|Any CPU.ActiveCfg = Release|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|Any CPU.Build.0 = Release|Win32
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x64.ActiveCfg = Release|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x64.Build.0 = Release|x64
|
||||
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x86.ActiveCfg = Release|Win32
|
||||
@@ -76,4 +65,7 @@ Global
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {3CFE825B-BD44-4909-B002-AFE8DA45D614}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_PITCH_SHIFTER_H_
|
||||
#define _RUBBERBAND_PITCH_SHIFTER_H_
|
||||
#ifndef RUBBERBAND_PITCH_SHIFTER_H
|
||||
#define RUBBERBAND_PITCH_SHIFTER_H
|
||||
|
||||
#include <ladspa.h>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
543
main/main.cpp
543
main/main.cpp
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
#include "system/sysutils.h"
|
||||
|
||||
#ifdef __MSVC__
|
||||
#ifdef _MSC_VER
|
||||
#include "getopt/getopt.h"
|
||||
#else
|
||||
#include <getopt.h>
|
||||
@@ -52,8 +52,9 @@ using namespace RubberBand;
|
||||
using RubberBand::gettimeofday;
|
||||
#endif
|
||||
|
||||
#ifdef __MSVC__
|
||||
#ifdef _MSC_VER
|
||||
using RubberBand::usleep;
|
||||
#define strdup _strdup
|
||||
#endif
|
||||
|
||||
double tempo_convert(const char *str)
|
||||
@@ -104,10 +105,7 @@ int main(int argc, char **argv)
|
||||
|
||||
bool haveRatio = false;
|
||||
|
||||
std::string timeMapFile;
|
||||
std::string freqMapFile;
|
||||
std::string pitchMapFile;
|
||||
bool freqOrPitchMapSpecified = false;
|
||||
std::string mapfile;
|
||||
|
||||
enum {
|
||||
NoTransients,
|
||||
@@ -121,8 +119,6 @@ int main(int argc, char **argv)
|
||||
SoftDetector
|
||||
} detector = CompoundDetector;
|
||||
|
||||
bool ignoreClipping = false;
|
||||
|
||||
while (1) {
|
||||
int optionIndex = 0;
|
||||
|
||||
@@ -155,9 +151,6 @@ int main(int argc, char **argv)
|
||||
{ "threads", 0, 0, '@' },
|
||||
{ "quiet", 0, 0, 'q' },
|
||||
{ "timemap", 1, 0, 'M' },
|
||||
{ "freqmap", 1, 0, 'Q' },
|
||||
{ "pitchmap", 1, 0, 'C' },
|
||||
{ "ignore-clipping", 0, 0, 'i' },
|
||||
{ 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
@@ -178,7 +171,7 @@ int main(int argc, char **argv)
|
||||
case 'R': realtime = true; break;
|
||||
case 'L': precise = false; break;
|
||||
case 'P': precise = true; break;
|
||||
case 'F': formant = true; break;
|
||||
case 'F': formant = true; break;
|
||||
case '0': threading = 1; break;
|
||||
case '@': threading = 2; break;
|
||||
case '1': transients = NoTransients; crispchanged = true; break;
|
||||
@@ -193,10 +186,7 @@ int main(int argc, char **argv)
|
||||
case '%': hqpitch = true; break;
|
||||
case 'c': crispness = atoi(optarg); break;
|
||||
case 'q': quiet = true; break;
|
||||
case 'M': timeMapFile = optarg; break;
|
||||
case 'Q': freqMapFile = optarg; freqOrPitchMapSpecified = true; break;
|
||||
case 'C': pitchMapFile = optarg; freqOrPitchMapSpecified = true; break;
|
||||
case 'i': ignoreClipping = true; break;
|
||||
case 'M': mapfile = optarg; break;
|
||||
default: help = true; break;
|
||||
}
|
||||
}
|
||||
@@ -206,22 +196,13 @@ int main(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (freqOrPitchMapSpecified) {
|
||||
if (freqMapFile != "" && pitchMapFile != "") {
|
||||
cerr << "ERROR: Please specify either pitch map or frequency map, not both" << endl;
|
||||
return 1;
|
||||
}
|
||||
haveRatio = true;
|
||||
realtime = true;
|
||||
}
|
||||
|
||||
if (help || !haveRatio || optind + 2 != argc) {
|
||||
cerr << endl;
|
||||
cerr << "Rubber Band" << endl;
|
||||
cerr << "Rubber Band" << endl;
|
||||
cerr << "An audio time-stretching and pitch-shifting library and utility program." << endl;
|
||||
cerr << "Copyright 2007-2020 Particular Programs Ltd." << endl;
|
||||
cerr << "Copyright 2007-2021 Particular Programs Ltd." << endl;
|
||||
cerr << endl;
|
||||
cerr << " Usage: " << argv[0] << " [options] <infile.wav> <outfile.wav>" << endl;
|
||||
cerr << " Usage: " << argv[0] << " [options] <infile.wav> <outfile.wav>" << endl;
|
||||
cerr << endl;
|
||||
cerr << "You must specify at least one of the following time and pitch ratio options." << endl;
|
||||
cerr << endl;
|
||||
@@ -233,45 +214,23 @@ int main(int argc, char **argv)
|
||||
cerr << " -p<X>, --pitch <X> Raise pitch by X semitones, or" << endl;
|
||||
cerr << " -f<X>, --frequency <X> Change frequency by multiple X" << endl;
|
||||
cerr << endl;
|
||||
cerr << "The following options provide ways of making the time and frequency ratios" << endl;
|
||||
cerr << "change during the audio." << endl;
|
||||
cerr << " -M<F>, --timemap <F> Use file F as the source for key frame map" << endl;
|
||||
cerr << endl;
|
||||
cerr << " -M<F>, --timemap <F> Use file F as the source for time map" << endl;
|
||||
cerr << "A map file consists of a series of lines each having two numbers separated" << endl;
|
||||
cerr << "by a single space. These are source and target sample frame numbers for fixed" << endl;
|
||||
cerr << "time points within the audio data, defining a varying stretch factor through" << endl;
|
||||
cerr << "the audio. You must specify an overall stretch factor using e.g. -t as well." << endl;
|
||||
cerr << endl;
|
||||
cerr << " A time map (or key-frame map) file contains a series of lines, each with two" << endl;
|
||||
cerr << " sample frame numbers separated by a single space. These are source and" << endl;
|
||||
cerr << " target frames for fixed time points within the audio data, defining a varying" << endl;
|
||||
cerr << " stretch factor through the audio. When supplying a time map you must specify" << endl;
|
||||
cerr << " an overall stretch factor using -t, -T, or -D as well, to determine the" << endl;
|
||||
cerr << " total output duration." << endl;
|
||||
cerr << endl;
|
||||
cerr << " --pitchmap <F> Use file F as the source for pitch map" << endl;
|
||||
cerr << endl;
|
||||
cerr << " A pitch map file contains a series of lines, each with two values: the input" << endl;
|
||||
cerr << " sample frame number and a pitch offset in semitones, separated by a single" << endl;
|
||||
cerr << " space. These specify a varying pitch factor through the audio. The offsets" << endl;
|
||||
cerr << " are all relative to an initial offset specified by the pitch or frequency" << endl;
|
||||
cerr << " option, or relative to no shift if neither was specified. Offsets are" << endl;
|
||||
cerr << " not cumulative. This option implies realtime mode (-R) and also enables a" << endl;
|
||||
cerr << " high-consistency pitch shifting mode, appropriate for dynamic pitch changes." << endl;
|
||||
cerr << " Because of the use of realtime mode, the overall duration will not be exact." << endl;
|
||||
cerr << endl;
|
||||
cerr << " --freqmap <F> Use file F as the source for frequency map" << endl;
|
||||
cerr << endl;
|
||||
cerr << " As --pitchmap, except that the second column in the file contains frequency" << endl;
|
||||
cerr << " multipliers rather than pitch offsets (the same as the difference between" << endl;
|
||||
cerr << " pitch and frequency options above)." << endl;
|
||||
cerr << endl;
|
||||
cerr << "The following options provide a simple way to adjust the sound. See below" << endl;
|
||||
cerr << "The following options provide a simple way to adjust the sound. See below" << endl;
|
||||
cerr << "for more details." << endl;
|
||||
cerr << endl;
|
||||
cerr << " -c<N>, --crisp <N> Crispness (N = 0,1,2,3,4,5,6); default 5 (see below)" << endl;
|
||||
cerr << " -F, --formant Enable formant preservation when pitch shifting" << endl;
|
||||
cerr << " -F, --formant Enable formant preservation when pitch shifting" << endl;
|
||||
cerr << endl;
|
||||
cerr << "The remaining options fine-tune the processing mode and stretch algorithm." << endl;
|
||||
cerr << "These are mostly included for test purposes; the default settings and standard" << endl;
|
||||
cerr << "crispness parameter are intended to provide the best sounding set of options" << endl;
|
||||
cerr << "for most situations. The default is to use none of these options." << endl;
|
||||
cerr << "for most situations. The default is to use none of these options." << endl;
|
||||
cerr << endl;
|
||||
cerr << " -L, --loose Relax timing in hope of better transient preservation" << endl;
|
||||
cerr << " -P, --precise Ignored: The opposite of -L, this is default from 1.6" << endl;
|
||||
@@ -289,8 +248,6 @@ int main(int argc, char **argv)
|
||||
cerr << " --pitch-hq In RT mode, use a slower, higher quality pitch shift" << endl;
|
||||
cerr << " --centre-focus Preserve focus of centre material in stereo" << endl;
|
||||
cerr << " (at a cost in width and individual channel quality)" << endl;
|
||||
cerr << " --ignore-clipping Ignore clipping at output; the default is to restart" << endl;
|
||||
cerr << " with reduced gain if clipping occurs" << endl;
|
||||
cerr << endl;
|
||||
cerr << " -d<N>, --debug <N> Select debug level (N = 0,1,2,3); default 0, full 3" << endl;
|
||||
cerr << " (N.B. debug level 3 includes audible ticks in output)" << endl;
|
||||
@@ -308,7 +265,7 @@ int main(int argc, char **argv)
|
||||
cerr << " -c 5 default processing options" << endl;
|
||||
cerr << " -c 6 equivalent to --no-lamination --window-short (may be good for drums)" << endl;
|
||||
cerr << endl;
|
||||
return 2;
|
||||
return 2;
|
||||
}
|
||||
|
||||
if (ratio <= 0.0) {
|
||||
@@ -321,12 +278,6 @@ int main(int argc, char **argv)
|
||||
cerr << " provided -- crispness will override these other options" << endl;
|
||||
}
|
||||
|
||||
if (hqpitch && freqOrPitchMapSpecified) {
|
||||
cerr << "WARNING: High-quality pitch mode selected, but frequency or pitch map file is" << endl;
|
||||
cerr << " provided -- pitch mode will be overridden by high-consistency mode" << endl;
|
||||
hqpitch = false;
|
||||
}
|
||||
|
||||
switch (crispness) {
|
||||
case -1: crispness = 5; break;
|
||||
case 0: detector = CompoundDetector; transients = NoTransients; lamination = false; longwin = true; shortwin = false; break;
|
||||
@@ -352,35 +303,34 @@ int main(int argc, char **argv)
|
||||
cerr << ")" << endl;
|
||||
}
|
||||
|
||||
std::map<size_t, size_t> timeMap;
|
||||
if (timeMapFile != "") {
|
||||
std::ifstream ifile(timeMapFile.c_str());
|
||||
std::map<size_t, size_t> mapping;
|
||||
|
||||
if (mapfile != "") {
|
||||
std::ifstream ifile(mapfile.c_str());
|
||||
if (!ifile.is_open()) {
|
||||
cerr << "ERROR: Failed to open time map file \""
|
||||
<< timeMapFile << "\"" << endl;
|
||||
cerr << "ERROR: Failed to open time map file \"" << mapfile << "\""
|
||||
<< endl;
|
||||
return 1;
|
||||
}
|
||||
std::string line;
|
||||
int lineno = 0;
|
||||
while (!ifile.eof()) {
|
||||
std::getline(ifile, line);
|
||||
while (line.length() > 0 && line[0] == ' ') {
|
||||
line = line.substr(1);
|
||||
}
|
||||
while (line.length() > 0 && line[0] == ' ') line = line.substr(1);
|
||||
if (line == "") {
|
||||
++lineno;
|
||||
continue;
|
||||
}
|
||||
std::string::size_type i = line.find_first_of(" ");
|
||||
if (i == std::string::npos) {
|
||||
cerr << "ERROR: Time map file \"" << timeMapFile
|
||||
cerr << "ERROR: Time map file \"" << mapfile
|
||||
<< "\" is malformed at line " << lineno << endl;
|
||||
return 1;
|
||||
}
|
||||
size_t source = atoi(line.substr(0, i).c_str());
|
||||
while (i < line.length() && line[i] == ' ') ++i;
|
||||
size_t target = atoi(line.substr(i).c_str());
|
||||
timeMap[source] = target;
|
||||
mapping[source] = target;
|
||||
if (debug > 0) {
|
||||
cerr << "adding mapping from " << source << " to " << target << endl;
|
||||
}
|
||||
@@ -389,57 +339,7 @@ int main(int argc, char **argv)
|
||||
ifile.close();
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "Read " << timeMap.size() << " line(s) from time map file" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
std::map<size_t, double> freqMap;
|
||||
|
||||
if (freqOrPitchMapSpecified) {
|
||||
std::string file = freqMapFile;
|
||||
bool convertFromPitch = false;
|
||||
if (pitchMapFile != "") {
|
||||
file = pitchMapFile;
|
||||
convertFromPitch = true;
|
||||
}
|
||||
std::ifstream ifile(file.c_str());
|
||||
if (!ifile.is_open()) {
|
||||
cerr << "ERROR: Failed to open map file \"" << file << "\"" << endl;
|
||||
return 1;
|
||||
}
|
||||
std::string line;
|
||||
int lineno = 0;
|
||||
while (!ifile.eof()) {
|
||||
std::getline(ifile, line);
|
||||
while (line.length() > 0 && line[0] == ' ') {
|
||||
line = line.substr(1);
|
||||
}
|
||||
if (line == "") {
|
||||
++lineno;
|
||||
continue;
|
||||
}
|
||||
std::string::size_type i = line.find_first_of(" ");
|
||||
if (i == std::string::npos) {
|
||||
cerr << "ERROR: Map file \"" << file
|
||||
<< "\" is malformed at line " << lineno << endl;
|
||||
return 1;
|
||||
}
|
||||
size_t source = atoi(line.substr(0, i).c_str());
|
||||
while (i < line.length() && line[i] == ' ') ++i;
|
||||
double freq = atof(line.substr(i).c_str());
|
||||
if (convertFromPitch) {
|
||||
freq = pow(2.0, freq / 12.0);
|
||||
}
|
||||
freqMap[source] = freq;
|
||||
if (debug > 0) {
|
||||
cerr << "adding mapping for source frame " << source << " of frequency multiplier " << freq << endl;
|
||||
}
|
||||
++lineno;
|
||||
}
|
||||
ifile.close();
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "Read " << freqMap.size() << " line(s) from frequency map file" << endl;
|
||||
cerr << "Read " << mapping.size() << " line(s) from map file" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -455,9 +355,9 @@ int main(int argc, char **argv)
|
||||
|
||||
sndfile = sf_open(fileName, SFM_READ, &sfinfo);
|
||||
if (!sndfile) {
|
||||
cerr << "ERROR: Failed to open input file \"" << fileName << "\": "
|
||||
<< sf_strerror(sndfile) << endl;
|
||||
return 1;
|
||||
cerr << "ERROR: Failed to open input file \"" << fileName << "\": "
|
||||
<< sf_strerror(sndfile) << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (sfinfo.samplerate == 0) {
|
||||
@@ -483,9 +383,9 @@ int main(int argc, char **argv)
|
||||
|
||||
sndfileOut = sf_open(fileNameOut, SFM_WRITE, &sfinfoOut) ;
|
||||
if (!sndfileOut) {
|
||||
cerr << "ERROR: Failed to open output file \"" << fileNameOut << "\" for writing: "
|
||||
<< sf_strerror(sndfileOut) << endl;
|
||||
return 1;
|
||||
cerr << "ERROR: Failed to open output file \"" << fileNameOut << "\" for writing: "
|
||||
<< sf_strerror(sndfileOut) << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ibs = 1024;
|
||||
@@ -502,10 +402,6 @@ int main(int argc, char **argv)
|
||||
if (hqpitch) options |= RubberBandStretcher::OptionPitchHighQuality;
|
||||
if (together) options |= RubberBandStretcher::OptionChannelsTogether;
|
||||
|
||||
if (freqOrPitchMapSpecified) {
|
||||
options |= RubberBandStretcher::OptionPitchHighConsistency;
|
||||
}
|
||||
|
||||
switch (threading) {
|
||||
case 0:
|
||||
options |= RubberBandStretcher::OptionThreadingAuto;
|
||||
@@ -543,134 +439,46 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (pitchshift != 0.0) {
|
||||
frequencyshift *= pow(2.0, pitchshift / 12.0);
|
||||
frequencyshift *= pow(2.0, pitchshift / 12);
|
||||
}
|
||||
|
||||
cerr << "Using time ratio " << ratio;
|
||||
cerr << " and frequency ratio " << frequencyshift << endl;
|
||||
|
||||
if (!freqOrPitchMapSpecified) {
|
||||
cerr << " and frequency ratio " << frequencyshift << endl;
|
||||
} else {
|
||||
cerr << " and initial frequency ratio " << frequencyshift << endl;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
RubberBand::
|
||||
#endif
|
||||
timeval tv;
|
||||
(void)gettimeofday(&tv, 0);
|
||||
|
||||
|
||||
RubberBandStretcher::setDefaultDebugLevel(debug);
|
||||
|
||||
size_t countIn = 0, countOut = 0;
|
||||
RubberBandStretcher ts(sfinfo.samplerate, channels, options,
|
||||
ratio, frequencyshift);
|
||||
|
||||
float gain = 1.f;
|
||||
bool successful = false;
|
||||
ts.setExpectedInputDuration(sfinfo.frames);
|
||||
|
||||
while (!successful) { // we may have to repeat with a modified
|
||||
// gain, if clipping occurs
|
||||
successful = true;
|
||||
float *fbuf = new float[channels * ibs];
|
||||
float **ibuf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) ibuf[i] = new float[ibs];
|
||||
|
||||
RubberBandStretcher ts(sfinfo.samplerate, channels, options,
|
||||
ratio, frequencyshift);
|
||||
ts.setExpectedInputDuration(sfinfo.frames);
|
||||
int frame = 0;
|
||||
int percent = 0;
|
||||
|
||||
float *fbuf = new float[channels * ibs];
|
||||
float **ibuf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
ibuf[i] = new float[ibs];
|
||||
sf_seek(sndfile, 0, SEEK_SET);
|
||||
|
||||
if (!realtime) {
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "Pass 1: Studying..." << endl;
|
||||
}
|
||||
|
||||
int frame = 0;
|
||||
int percent = 0;
|
||||
|
||||
sf_seek(sndfile, 0, SEEK_SET);
|
||||
|
||||
if (!realtime) {
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "Pass 1: Studying..." << endl;
|
||||
}
|
||||
|
||||
while (frame < sfinfo.frames) {
|
||||
|
||||
int count = -1;
|
||||
|
||||
if ((count = sf_readf_float(sndfile, fbuf, ibs)) <= 0) break;
|
||||
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < count; ++i) {
|
||||
float value = fbuf[i * channels + c];
|
||||
ibuf[c][i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
bool final = (frame + ibs >= sfinfo.frames);
|
||||
|
||||
ts.study(ibuf, count, final);
|
||||
|
||||
int p = int((double(frame) * 100.0) / sfinfo.frames);
|
||||
if (p > percent || frame == 0) {
|
||||
percent = p;
|
||||
if (!quiet) {
|
||||
cerr << "\r" << percent << "% ";
|
||||
}
|
||||
}
|
||||
|
||||
frame += ibs;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "\rCalculating profile..." << endl;
|
||||
}
|
||||
|
||||
sf_seek(sndfile, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
frame = 0;
|
||||
percent = 0;
|
||||
|
||||
if (!timeMap.empty()) {
|
||||
ts.setKeyFrameMap(timeMap);
|
||||
}
|
||||
|
||||
std::map<size_t, double>::const_iterator freqMapItr = freqMap.begin();
|
||||
|
||||
countIn = 0;
|
||||
countOut = 0;
|
||||
bool clipping = false;
|
||||
|
||||
while (frame < sfinfo.frames) {
|
||||
|
||||
int count = -1;
|
||||
int thisBlockSize = ibs;
|
||||
|
||||
while (freqMapItr != freqMap.end()) {
|
||||
size_t nextFreqFrame = freqMapItr->first + ts.getLatency();
|
||||
if (nextFreqFrame <= countIn) {
|
||||
double s = frequencyshift * freqMapItr->second;
|
||||
if (debug > 0) {
|
||||
cerr << "at frame " << countIn
|
||||
<< " (requested at " << freqMapItr->first
|
||||
<< " plus latency " << ts.getLatency()
|
||||
<< ") updating frequency ratio to " << s << endl;
|
||||
}
|
||||
ts.setPitchScale(s);
|
||||
++freqMapItr;
|
||||
} else {
|
||||
if (nextFreqFrame < countIn + thisBlockSize) {
|
||||
thisBlockSize = nextFreqFrame - countIn;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((count = sf_readf_float(sndfile, fbuf, ibs)) <= 0) break;
|
||||
|
||||
if ((count = sf_readf_float(sndfile, fbuf, thisBlockSize)) < 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
countIn += count;
|
||||
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < count; ++i) {
|
||||
float value = fbuf[i * channels + c];
|
||||
@@ -678,70 +486,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
bool final = (frame + thisBlockSize >= sfinfo.frames);
|
||||
bool final = (frame + ibs >= sfinfo.frames);
|
||||
|
||||
if (debug > 2) {
|
||||
cerr << "count = " << count << ", ibs = " << thisBlockSize << ", frame = " << frame << ", frames = " << sfinfo.frames << ", final = " << final << endl;
|
||||
}
|
||||
|
||||
ts.process(ibuf, count, final);
|
||||
|
||||
int avail = ts.available();
|
||||
if (debug > 1) cerr << "available = " << avail << endl;
|
||||
|
||||
if (avail > 0) {
|
||||
float **obf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
obf[i] = new float[avail];
|
||||
}
|
||||
ts.retrieve(obf, avail);
|
||||
countOut += avail;
|
||||
float *fobf = new float[channels * avail];
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < avail; ++i) {
|
||||
float value = gain * obf[c][i];
|
||||
if (ignoreClipping) { // i.e. just clamp, don't bail out
|
||||
if (value > 1.f) value = 1.f;
|
||||
if (value < -1.f) value = -1.f;
|
||||
} else {
|
||||
if (value >= 1.f || value < -1.f) {
|
||||
clipping = true;
|
||||
gain = (0.999f / fabsf(obf[c][i]));
|
||||
}
|
||||
}
|
||||
fobf[i * channels + c] = value;
|
||||
}
|
||||
}
|
||||
sf_writef_float(sndfileOut, fobf, avail);
|
||||
delete[] fobf;
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
delete[] obf[i];
|
||||
}
|
||||
delete[] obf;
|
||||
}
|
||||
|
||||
if (clipping) {
|
||||
if (!quiet) {
|
||||
cerr << "NOTE: Clipping detected at output sample "
|
||||
<< countOut << ", restarting with "
|
||||
<< "reduced gain of " << gain
|
||||
<< " (supply --ignore-clipping to avoid this)" << endl;
|
||||
}
|
||||
const float mingain = 0.75f;
|
||||
if (gain < mingain) {
|
||||
cerr << "WARNING: Clipped values were implausibly high: "
|
||||
<< "something wrong with input or process - "
|
||||
<< "not reducing gain below " << mingain << endl;
|
||||
gain = mingain;
|
||||
ignoreClipping = true;
|
||||
}
|
||||
successful = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (frame == 0 && !realtime && !quiet) {
|
||||
cerr << "Pass 2: Processing..." << endl;
|
||||
}
|
||||
ts.study(ibuf, count, final);
|
||||
|
||||
int p = int((double(frame) * 100.0) / sfinfo.frames);
|
||||
if (p > percent || frame == 0) {
|
||||
@@ -751,58 +498,147 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
frame += thisBlockSize;
|
||||
frame += ibs;
|
||||
}
|
||||
|
||||
if (!successful) {
|
||||
sf_seek(sndfile, 0, SEEK_SET);
|
||||
sf_seek(sndfileOut, 0, SEEK_SET);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "\r " << endl;
|
||||
cerr << "\rCalculating profile..." << endl;
|
||||
}
|
||||
int avail;
|
||||
|
||||
while ((avail = ts.available()) >= 0) {
|
||||
sf_seek(sndfile, 0, SEEK_SET);
|
||||
}
|
||||
|
||||
if (debug > 1) {
|
||||
cerr << "(completing) available = " << avail << endl;
|
||||
}
|
||||
|
||||
if (avail > 0) {
|
||||
float **obf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
obf[i] = new float[avail];
|
||||
}
|
||||
ts.retrieve(obf, avail);
|
||||
countOut += avail;
|
||||
float *fobf = new float[channels * avail];
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < avail; ++i) {
|
||||
float value = gain * obf[c][i];
|
||||
if (value > 1.f) value = 1.f;
|
||||
if (value < -1.f) value = -1.f;
|
||||
fobf[i * channels + c] = value;
|
||||
}
|
||||
}
|
||||
|
||||
sf_writef_float(sndfileOut, fobf, avail);
|
||||
delete[] fobf;
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
delete[] obf[i];
|
||||
}
|
||||
delete[] obf;
|
||||
} else {
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
frame = 0;
|
||||
percent = 0;
|
||||
|
||||
if (!mapping.empty()) {
|
||||
ts.setKeyFrameMap(mapping);
|
||||
}
|
||||
|
||||
size_t countIn = 0, countOut = 0;
|
||||
|
||||
while (frame < sfinfo.frames) {
|
||||
|
||||
int count = -1;
|
||||
|
||||
if ((count = sf_readf_float(sndfile, fbuf, ibs)) < 0) break;
|
||||
|
||||
countIn += count;
|
||||
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < count; ++i) {
|
||||
float value = fbuf[i * channels + c];
|
||||
ibuf[c][i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
bool final = (frame + ibs >= sfinfo.frames);
|
||||
|
||||
if (debug > 2) {
|
||||
cerr << "count = " << count << ", ibs = " << ibs << ", frame = " << frame << ", frames = " << sfinfo.frames << ", final = " << final << endl;
|
||||
}
|
||||
|
||||
ts.process(ibuf, count, final);
|
||||
|
||||
int avail = ts.available();
|
||||
if (debug > 1) cerr << "available = " << avail << endl;
|
||||
|
||||
if (avail > 0) {
|
||||
float **obf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
obf[i] = new float[avail];
|
||||
}
|
||||
ts.retrieve(obf, avail);
|
||||
countOut += avail;
|
||||
float *fobf = new float[channels * avail];
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < avail; ++i) {
|
||||
float value = obf[c][i];
|
||||
if (value > 1.f) value = 1.f;
|
||||
if (value < -1.f) value = -1.f;
|
||||
fobf[i * channels + c] = value;
|
||||
}
|
||||
}
|
||||
// cout << "fobf mean: ";
|
||||
// double d = 0;
|
||||
// for (int i = 0; i < avail; ++i) {
|
||||
// d += fobf[i];
|
||||
// }
|
||||
// d /= avail;
|
||||
// cout << d << endl;
|
||||
sf_writef_float(sndfileOut, fobf, avail);
|
||||
delete[] fobf;
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
delete[] obf[i];
|
||||
}
|
||||
delete[] obf;
|
||||
}
|
||||
|
||||
if (frame == 0 && !realtime && !quiet) {
|
||||
cerr << "Pass 2: Processing..." << endl;
|
||||
}
|
||||
|
||||
int p = int((double(frame) * 100.0) / sfinfo.frames);
|
||||
if (p > percent || frame == 0) {
|
||||
percent = p;
|
||||
if (!quiet) {
|
||||
cerr << "\r" << percent << "% ";
|
||||
}
|
||||
}
|
||||
|
||||
frame += ibs;
|
||||
}
|
||||
|
||||
if (!quiet) {
|
||||
cerr << "\r " << endl;
|
||||
}
|
||||
int avail;
|
||||
|
||||
while ((avail = ts.available()) >= 0) {
|
||||
|
||||
if (debug > 1) {
|
||||
cerr << "(completing) available = " << avail << endl;
|
||||
}
|
||||
|
||||
if (avail > 0) {
|
||||
float **obf = new float *[channels];
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
obf[i] = new float[avail];
|
||||
}
|
||||
ts.retrieve(obf, avail);
|
||||
countOut += avail;
|
||||
float *fobf = new float[channels * avail];
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
for (int i = 0; i < avail; ++i) {
|
||||
float value = obf[c][i];
|
||||
if (value > 1.f) value = 1.f;
|
||||
if (value < -1.f) value = -1.f;
|
||||
fobf[i * channels + c] = value;
|
||||
}
|
||||
}
|
||||
|
||||
sf_writef_float(sndfileOut, fobf, avail);
|
||||
delete[] fobf;
|
||||
for (size_t i = 0; i < channels; ++i) {
|
||||
delete[] obf[i];
|
||||
}
|
||||
delete[] obf;
|
||||
} else {
|
||||
usleep(10000);
|
||||
}
|
||||
}
|
||||
|
||||
delete[] fbuf;
|
||||
|
||||
for (size_t i = 0; i < channels; ++i) delete[] ibuf[i];
|
||||
delete[] ibuf;
|
||||
|
||||
sf_close(sndfile);
|
||||
sf_close(sndfileOut);
|
||||
|
||||
free(fileName);
|
||||
free(fileNameOut);
|
||||
|
||||
if (!quiet) {
|
||||
|
||||
cerr << "in: " << countIn << ", out: " << countOut << ", ratio: " << float(countOut)/float(countIn) << ", ideal output: " << lrint(countIn * ratio) << ", error: " << abs(lrint(countIn * ratio) - int(countOut)) << endl;
|
||||
@@ -810,7 +646,7 @@ int main(int argc, char **argv)
|
||||
#ifdef _WIN32
|
||||
RubberBand::
|
||||
#endif
|
||||
timeval etv;
|
||||
timeval etv;
|
||||
(void)gettimeofday(&etv, 0);
|
||||
|
||||
etv.tv_sec -= tv.tv_sec;
|
||||
@@ -821,11 +657,14 @@ int main(int argc, char **argv)
|
||||
etv.tv_usec -= tv.tv_usec;
|
||||
|
||||
double sec = double(etv.tv_sec) + (double(etv.tv_usec) / 1000000.0);
|
||||
cerr << "elapsed time: " << sec << " sec, in frames/sec: " << countIn/sec << ", out frames/sec: " << countOut/sec << endl;
|
||||
cerr << "elapsed time: " << sec
|
||||
<< " sec, in frames/sec: " << int64_t(round(countIn/sec))
|
||||
<< ", out frames/sec: " << int64_t(round(countOut/sec))
|
||||
<< endl;
|
||||
}
|
||||
|
||||
RubberBand::Profiler::dump();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
596
meson.build
Normal file
596
meson.build
Normal file
@@ -0,0 +1,596 @@
|
||||
|
||||
project(
|
||||
'Rubber Band Library',
|
||||
'c', 'cpp',
|
||||
version: '1.9.1',
|
||||
license: 'GPL-2.0-or-later',
|
||||
default_options: [
|
||||
# All Rubber Band code is actually C++98, but some compilers no
|
||||
# longer support that
|
||||
'cpp_std=c++14',
|
||||
'buildtype=release',
|
||||
'b_ndebug=if-release',
|
||||
'b_lundef=true',
|
||||
],
|
||||
meson_version: '>= 0.53.0'
|
||||
)
|
||||
|
||||
rubberband_dynamic_library_version = '2.1.3'
|
||||
|
||||
system = host_machine.system()
|
||||
architecture = host_machine.cpu_family()
|
||||
cpp = meson.get_compiler('cpp')
|
||||
|
||||
pkg = import('pkgconfig')
|
||||
|
||||
|
||||
# Define the project source sets
|
||||
|
||||
public_headers = [
|
||||
'rubberband/rubberband-c.h',
|
||||
'rubberband/RubberBandStretcher.h',
|
||||
]
|
||||
|
||||
library_sources = [
|
||||
'src/rubberband-c.cpp',
|
||||
'src/RubberBandStretcher.cpp',
|
||||
'src/StretcherProcess.cpp',
|
||||
'src/StretchCalculator.cpp',
|
||||
'src/base/Profiler.cpp',
|
||||
'src/dsp/AudioCurveCalculator.cpp',
|
||||
'src/audiocurves/CompoundAudioCurve.cpp',
|
||||
'src/audiocurves/SpectralDifferenceAudioCurve.cpp',
|
||||
'src/audiocurves/HighFrequencyAudioCurve.cpp',
|
||||
'src/audiocurves/SilentAudioCurve.cpp',
|
||||
'src/audiocurves/ConstantAudioCurve.cpp',
|
||||
'src/audiocurves/PercussiveAudioCurve.cpp',
|
||||
'src/dsp/Resampler.cpp',
|
||||
'src/dsp/FFT.cpp',
|
||||
'src/system/Allocators.cpp',
|
||||
'src/system/sysutils.cpp',
|
||||
'src/system/Thread.cpp',
|
||||
'src/StretcherChannelData.cpp',
|
||||
'src/StretcherImpl.cpp',
|
||||
]
|
||||
|
||||
jni_sources = [
|
||||
'src/jni/RubberBandStretcherJNI.cpp',
|
||||
]
|
||||
|
||||
java_sources = [
|
||||
'com/breakfastquay/rubberband/RubberBandStretcher.java',
|
||||
]
|
||||
|
||||
program_sources = [
|
||||
'main/main.cpp',
|
||||
]
|
||||
|
||||
if system == 'windows'
|
||||
program_sources += [
|
||||
'src/getopt/getopt.c',
|
||||
'src/getopt/getopt_long.c'
|
||||
]
|
||||
endif
|
||||
|
||||
vamp_sources = [
|
||||
'vamp/RubberBandVampPlugin.cpp',
|
||||
'vamp/libmain.cpp',
|
||||
]
|
||||
|
||||
ladspa_sources = [
|
||||
'ladspa/RubberBandPitchShifter.cpp',
|
||||
'ladspa/libmain.cpp',
|
||||
]
|
||||
|
||||
general_include_dirs = [
|
||||
'rubberband',
|
||||
'src',
|
||||
]
|
||||
|
||||
|
||||
# Scan for any dependencies we may use later; all are optional
|
||||
|
||||
extra_include_args = []
|
||||
foreach d: get_option('extra_include_dirs')
|
||||
extra_include_args += [ '-I' + d ]
|
||||
endforeach
|
||||
|
||||
fftw3_dep = dependency('fftw3', version: '>= 3.0.0', required: false)
|
||||
samplerate_dep = dependency('samplerate', version: '>= 0.1.8', required: false)
|
||||
sndfile_dep = dependency('sndfile', version: '>= 1.0.16', required: false)
|
||||
vamp_dep = dependency('vamp-sdk', version: '>= 2.9', required: false)
|
||||
thread_dep = dependency('threads')
|
||||
have_ladspa = cpp.has_header('ladspa.h', args: extra_include_args)
|
||||
have_jni = cpp.has_header('jni.h', args: extra_include_args)
|
||||
|
||||
javac = find_program('javac', required: false)
|
||||
jar = find_program('jar', required: false)
|
||||
|
||||
|
||||
# Check FFT and resampler options and set up dependencies and paths
|
||||
|
||||
feature_dependencies = []
|
||||
feature_defines = []
|
||||
feature_libraries = []
|
||||
feature_sources = []
|
||||
pkgconfig_requirements = []
|
||||
arch_flags = []
|
||||
|
||||
config_summary = {}
|
||||
target_summary = {}
|
||||
|
||||
resampler = get_option('resampler')
|
||||
fft = get_option('fft')
|
||||
ipp_path = get_option('ipp_path')
|
||||
ipp_needed = false
|
||||
|
||||
if fft == 'auto'
|
||||
if system == 'darwin'
|
||||
fft = 'vdsp'
|
||||
else
|
||||
fft = 'kissfft'
|
||||
endif
|
||||
endif
|
||||
|
||||
if resampler == 'auto'
|
||||
if samplerate_dep.found()
|
||||
resampler = 'libsamplerate'
|
||||
else
|
||||
resampler = 'speex'
|
||||
endif
|
||||
endif
|
||||
|
||||
if fft == 'kissfft'
|
||||
config_summary += { 'FFT': 'KissFFT' }
|
||||
message('For FFT: using KissFFT')
|
||||
if fftw3_dep.found()
|
||||
message('(to use FFTW instead, reconfigure with -Dfft=fftw)')
|
||||
endif
|
||||
feature_sources += ['src/kissfft/kiss_fft.c', 'src/kissfft/kiss_fftr.c']
|
||||
feature_defines += ['-DUSE_KISSFFT']
|
||||
|
||||
elif fft == 'fftw'
|
||||
if fftw3_dep.found()
|
||||
config_summary += { 'FFT': 'FFTW' }
|
||||
message('For FFT: using FFTW')
|
||||
pkgconfig_requirements += fftw3_dep
|
||||
else
|
||||
fftw_dep = cpp.find_library('fftw3',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['fftw3.h'],
|
||||
header_args: extra_include_args,
|
||||
required: true)
|
||||
endif
|
||||
feature_dependencies += fftw3_dep
|
||||
feature_defines += ['-DHAVE_FFTW3', '-DFFTW_DOUBLE_ONLY']
|
||||
|
||||
elif fft == 'vdsp'
|
||||
config_summary += { 'FFT': 'vDSP' }
|
||||
message('For FFT: using vDSP')
|
||||
feature_defines += ['-DHAVE_VDSP']
|
||||
feature_libraries += ['-framework', 'Accelerate']
|
||||
|
||||
elif fft == 'ipp'
|
||||
if ipp_path != ''
|
||||
config_summary += { 'FFT': 'Intel IPP' }
|
||||
message('For FFT: using IPP')
|
||||
message('IPP path defined as ' + ipp_path)
|
||||
else
|
||||
error('For FFT: IPP selected, but ipp_path not specified')
|
||||
endif
|
||||
ipp_needed = true
|
||||
|
||||
else
|
||||
error('Unknown or unsupported FFT option: ' + fft)
|
||||
|
||||
endif # fft
|
||||
|
||||
if resampler == 'libsamplerate'
|
||||
if samplerate_dep.found()
|
||||
config_summary += { 'Resampler': 'libsamplerate' }
|
||||
message('For resampler: using libsamplerate')
|
||||
pkgconfig_requirements += samplerate_dep
|
||||
else
|
||||
samplerate_dep = cpp.find_library('samplerate',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['samplerate.h'],
|
||||
header_args: extra_include_args,
|
||||
required: true)
|
||||
endif
|
||||
feature_dependencies += samplerate_dep
|
||||
feature_defines += ['-DHAVE_LIBSAMPLERATE']
|
||||
|
||||
elif resampler == 'speex'
|
||||
config_summary += { 'Resampler': 'Speex' }
|
||||
message('For resampler: using Speex')
|
||||
message('(consider libsamplerate if time-varying pitch shift is required)')
|
||||
feature_sources += ['src/speex/resample.c']
|
||||
feature_defines += ['-DUSE_SPEEX']
|
||||
|
||||
elif resampler == 'ipp'
|
||||
if ipp_path != ''
|
||||
config_summary += { 'Resampler': 'Intel IPP' }
|
||||
message('For resampler: using IPP')
|
||||
message('(consider libsamplerate if time-varying pitch shift is required)')
|
||||
message('IPP path defined as ' + ipp_path)
|
||||
else
|
||||
error('For resampler: IPP selected, but ipp_path not specified')
|
||||
endif
|
||||
ipp_needed = true
|
||||
|
||||
else
|
||||
error('Unknown or unsupported resampler option: ' + resampler)
|
||||
|
||||
endif # resampler
|
||||
|
||||
if ipp_needed
|
||||
feature_defines += [
|
||||
'-DHAVE_IPP',
|
||||
'-DUSE_IPP_STATIC',
|
||||
'-I' + ipp_path / 'include'
|
||||
]
|
||||
if architecture == 'x86'
|
||||
feature_libraries += [
|
||||
'-L' + ipp_path / 'lib/ia32',
|
||||
]
|
||||
elif architecture == 'x86_64'
|
||||
feature_libraries += [
|
||||
'-L' + ipp_path / 'lib/intel64',
|
||||
]
|
||||
else
|
||||
error('IPP is not supported for this architecture')
|
||||
endif
|
||||
if system == 'windows'
|
||||
feature_libraries += [
|
||||
'-lippsmt', '-lippvmmt', '-lippcoremt',
|
||||
]
|
||||
elif system == 'linux'
|
||||
feature_libraries += [
|
||||
'-Wl,-Bstatic', '-lipps', '-lippvm', '-lippcore', '-Wl,-Bdynamic',
|
||||
]
|
||||
else
|
||||
feature_libraries += [
|
||||
'-lipps', '-lippvm', '-lippcore',
|
||||
]
|
||||
endif
|
||||
endif # ipp_needed
|
||||
|
||||
if not vamp_dep.found()
|
||||
vamp_dep = cpp.find_library('VampPluginSDK',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['vamp-sdk.h'],
|
||||
header_args: extra_include_args,
|
||||
required: false)
|
||||
if not vamp_dep.found()
|
||||
vamp_dep = cpp.find_library('vamp-sdk',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['vamp-sdk.h'],
|
||||
header_args: extra_include_args,
|
||||
required: false)
|
||||
endif
|
||||
endif
|
||||
have_vamp = vamp_dep.found()
|
||||
|
||||
if not sndfile_dep.found()
|
||||
sndfile_dep = cpp.find_library('sndfile',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['sndfile.h'],
|
||||
header_args: extra_include_args,
|
||||
required: false)
|
||||
if not sndfile_dep.found()
|
||||
sndfile_dep = cpp.find_library('sndfile-1',
|
||||
dirs: get_option('extra_lib_dirs'),
|
||||
has_headers: ['sndfile.h'],
|
||||
header_args: extra_include_args,
|
||||
required: false)
|
||||
endif
|
||||
endif
|
||||
have_sndfile = sndfile_dep.found()
|
||||
|
||||
|
||||
# General platform and compiler expectations
|
||||
|
||||
ladspa_symbol_args = []
|
||||
vamp_symbol_args = []
|
||||
|
||||
if get_option('buildtype').startswith('release')
|
||||
config_summary += { 'Build type': 'Release' }
|
||||
feature_defines += ['-DNO_THREAD_CHECKS', '-DNO_TIMING', '-DNDEBUG']
|
||||
else
|
||||
config_summary += { 'Build type': 'Debug' }
|
||||
endif
|
||||
|
||||
if system == 'darwin'
|
||||
feature_defines += ['-DUSE_PTHREADS', '-DMALLOC_IS_ALIGNED']
|
||||
ladspa_symbol_args += [
|
||||
'-exported_symbols_list', meson.source_root() / 'ladspa/ladspa-plugin.list'
|
||||
]
|
||||
vamp_symbol_args += [
|
||||
'-exported_symbols_list', meson.source_root() / 'vamp/vamp-plugin.list'
|
||||
]
|
||||
|
||||
have_version_min = false
|
||||
foreach arg: get_option('cpp_args')
|
||||
if arg.contains('version-min')
|
||||
have_version_min = true
|
||||
endif
|
||||
endforeach
|
||||
|
||||
if architecture == 'aarch64'
|
||||
mac_platform_arguments = [
|
||||
'-arch', 'arm64',
|
||||
]
|
||||
if not have_version_min
|
||||
mac_platform_arguments += [ '-mmacosx-version-min=11' ]
|
||||
endif
|
||||
elif architecture == 'x86_64'
|
||||
mac_platform_arguments = [
|
||||
'-arch', 'x86_64',
|
||||
]
|
||||
if not have_version_min
|
||||
mac_platform_arguments += [ '-mmacosx-version-min=10.13' ]
|
||||
endif
|
||||
else # begin architecture != 'aarch64' or 'x86_64'
|
||||
error('Build for architecture ' + architecture + ' is not supported on this platform')
|
||||
endif # end architecture
|
||||
|
||||
elif system == 'windows'
|
||||
feature_defines += ['-D_WIN32', '-DNOMINMAX', '-D_USE_MATH_DEFINES', '-DGETOPT_API=']
|
||||
if cpp.get_id() == 'msvc'
|
||||
ladspa_symbol_args += ['-EXPORT:ladspa_descriptor']
|
||||
vamp_symbol_args += ['-EXPORT:vampGetPluginDescriptor']
|
||||
endif
|
||||
|
||||
else # system not darwin or windows
|
||||
feature_defines += ['-DUSE_PTHREADS', '-DHAVE_POSIX_MEMALIGN']
|
||||
ladspa_symbol_args += [
|
||||
'-Wl,--version-script=' + meson.source_root() / 'ladspa/ladspa-plugin.map'
|
||||
]
|
||||
vamp_symbol_args += [
|
||||
'-Wl,--version-script=' + meson.source_root() / 'vamp/vamp-plugin.map'
|
||||
]
|
||||
endif # system
|
||||
|
||||
|
||||
general_include_dirs += get_option('extra_include_dirs')
|
||||
general_compile_args = [ arch_flags, feature_defines ]
|
||||
general_dependencies = [ feature_dependencies, thread_dep ]
|
||||
|
||||
if system == 'windows'
|
||||
if get_option('no_shared')
|
||||
rubberband_static_name = 'rubberband'
|
||||
else
|
||||
rubberband_static_name = 'rubberband-static'
|
||||
endif
|
||||
rubberband_dynamic_name = 'rubberband'
|
||||
rubberband_program_name = 'rubberband-program'
|
||||
rubberband_ladspa_name = 'ladspa-rubberband'
|
||||
rubberband_vamp_name = 'vamp-rubberband'
|
||||
rubberband_jni_name = 'rubberband-jni'
|
||||
# Meson likes libxxx.a even on Windows, and so might we for a
|
||||
# new library, but not here
|
||||
platform_static_name_prefix = ''
|
||||
platform_static_name_suffix = 'lib'
|
||||
else
|
||||
rubberband_static_name = 'rubberband'
|
||||
rubberband_dynamic_name = 'rubberband'
|
||||
rubberband_program_name = 'rubberband'
|
||||
rubberband_ladspa_name = 'ladspa-rubberband'
|
||||
rubberband_vamp_name = 'vamp-rubberband'
|
||||
rubberband_jni_name = 'rubberband-jni'
|
||||
platform_static_name_prefix = 'lib'
|
||||
platform_static_name_suffix = 'a'
|
||||
endif
|
||||
|
||||
|
||||
# And the build targets: Static and dynamic libraries, command-line
|
||||
# utility, LADSPA plugin, Vamp plugin, JNI library
|
||||
|
||||
message('Will build Rubber Band Library static library')
|
||||
target_summary += { 'Static library': [ true, 'Name: ' + rubberband_static_name ] }
|
||||
rubberband_static = static_library(
|
||||
rubberband_static_name,
|
||||
library_sources,
|
||||
feature_sources,
|
||||
include_directories: general_include_dirs,
|
||||
cpp_args: general_compile_args,
|
||||
c_args: general_compile_args,
|
||||
dependencies: general_dependencies,
|
||||
name_prefix: platform_static_name_prefix,
|
||||
name_suffix: platform_static_name_suffix,
|
||||
pic: true,
|
||||
install: true,
|
||||
)
|
||||
|
||||
rubberband_static_dep = declare_dependency(
|
||||
link_with: rubberband_static,
|
||||
)
|
||||
|
||||
if not get_option('no_shared')
|
||||
target_summary += { 'Shared library': [ true, 'Name: ' + rubberband_dynamic_name ] }
|
||||
message('Will build Rubber Band Library shared library')
|
||||
rubberband_dynamic = shared_library(
|
||||
rubberband_dynamic_name,
|
||||
objects: rubberband_static.extract_all_objects(),
|
||||
link_args: [
|
||||
arch_flags,
|
||||
feature_libraries,
|
||||
],
|
||||
dependencies: general_dependencies,
|
||||
version: rubberband_dynamic_library_version,
|
||||
install: true,
|
||||
)
|
||||
else
|
||||
target_summary += { 'Shared library': false }
|
||||
message('Not building Rubber Band Library dynamic library: no_shared option set')
|
||||
endif
|
||||
|
||||
if have_jni and javac.found() and jar.found()
|
||||
target_summary += { 'JNI library': [ true, 'Name: ' + rubberband_jni_name ] }
|
||||
message('Will build Java Native Interface')
|
||||
rubberband_jni = shared_library(
|
||||
rubberband_jni_name,
|
||||
jni_sources,
|
||||
include_directories: general_include_dirs,
|
||||
cpp_args: general_compile_args,
|
||||
c_args: general_compile_args,
|
||||
link_args: [
|
||||
arch_flags,
|
||||
feature_libraries,
|
||||
],
|
||||
dependencies: [
|
||||
rubberband_static_dep,
|
||||
general_dependencies,
|
||||
],
|
||||
# NB the JNI library is not versioned
|
||||
install: true,
|
||||
)
|
||||
rubberband_class = custom_target(
|
||||
'rubberband_class',
|
||||
input: 'com/breakfastquay/rubberband/RubberBandStretcher.java',
|
||||
output: 'RubberBandStretcher.class',
|
||||
command: [ javac, '@INPUT@', '-d', '@OUTDIR@' ],
|
||||
)
|
||||
rubberband_jar = custom_target(
|
||||
'rubberband_jar',
|
||||
input: rubberband_class,
|
||||
output: 'rubberband.jar',
|
||||
command: [ jar, 'cvf', '@OUTPUT@', 'com/breakfastquay/rubberband/@INPUT@' ],
|
||||
build_by_default: true,
|
||||
)
|
||||
else
|
||||
target_summary += { 'JNI library': false }
|
||||
if not have_jni
|
||||
message('Not building Java Native Interface: jni.h header not found')
|
||||
else
|
||||
message('Not building Java Native Interface: Java compiler not found')
|
||||
endif
|
||||
endif
|
||||
|
||||
install_headers(
|
||||
[ 'rubberband/RubberBandStretcher.h',
|
||||
'rubberband/rubberband-c.h'
|
||||
],
|
||||
subdir: 'rubberband'
|
||||
)
|
||||
|
||||
if have_ladspa
|
||||
target_summary += { 'LADSPA plugin': [ true, 'Name: ' + rubberband_ladspa_name ] }
|
||||
message('Will build LADSPA plugin')
|
||||
rubberband_ladspa = shared_library(
|
||||
rubberband_ladspa_name,
|
||||
ladspa_sources,
|
||||
include_directories: general_include_dirs,
|
||||
cpp_args: general_compile_args,
|
||||
c_args: general_compile_args,
|
||||
link_args: [
|
||||
arch_flags,
|
||||
feature_libraries,
|
||||
ladspa_symbol_args,
|
||||
],
|
||||
dependencies: [
|
||||
rubberband_static_dep,
|
||||
general_dependencies,
|
||||
],
|
||||
name_prefix: '',
|
||||
install: true,
|
||||
install_dir: get_option('libdir') / 'ladspa',
|
||||
)
|
||||
install_data(
|
||||
'ladspa/ladspa-rubberband.cat',
|
||||
install_dir: get_option('libdir') / 'ladspa',
|
||||
)
|
||||
install_data(
|
||||
'ladspa/ladspa-rubberband.rdf',
|
||||
install_dir: get_option('datadir') / 'ladspa/rdf',
|
||||
)
|
||||
else
|
||||
target_summary += { 'LADSPA plugin': false }
|
||||
message('Not building LADSPA plugin: ladspa.h header not found')
|
||||
endif
|
||||
|
||||
if have_vamp
|
||||
target_summary += { 'Vamp plugin': [ true, 'Name: ' + rubberband_vamp_name ] }
|
||||
message('Will build Vamp plugin')
|
||||
rubberband_vamp = shared_library(
|
||||
rubberband_vamp_name,
|
||||
vamp_sources,
|
||||
include_directories: general_include_dirs,
|
||||
cpp_args: general_compile_args,
|
||||
c_args: general_compile_args,
|
||||
link_args: [
|
||||
arch_flags,
|
||||
feature_libraries,
|
||||
vamp_symbol_args,
|
||||
],
|
||||
dependencies: [
|
||||
rubberband_static_dep,
|
||||
general_dependencies,
|
||||
vamp_dep,
|
||||
],
|
||||
name_prefix: '',
|
||||
install: true,
|
||||
install_dir: get_option('libdir') / 'vamp',
|
||||
)
|
||||
install_data(
|
||||
'vamp/vamp-rubberband.cat',
|
||||
install_dir: get_option('libdir') / 'vamp',
|
||||
)
|
||||
else
|
||||
target_summary += { 'Vamp plugin': false }
|
||||
message('Not building Vamp plugin: Vamp dependency not found')
|
||||
endif
|
||||
|
||||
if have_sndfile
|
||||
target_summary += { 'Command-line utility': [ true, 'Name: ' + rubberband_program_name ] }
|
||||
message('Will build command-line utility')
|
||||
rubberband_program = executable(
|
||||
rubberband_program_name,
|
||||
program_sources,
|
||||
include_directories: general_include_dirs,
|
||||
cpp_args: general_compile_args,
|
||||
c_args: general_compile_args,
|
||||
link_args: [
|
||||
arch_flags,
|
||||
feature_libraries,
|
||||
],
|
||||
dependencies: [
|
||||
rubberband_static_dep,
|
||||
general_dependencies,
|
||||
sndfile_dep,
|
||||
],
|
||||
install: true,
|
||||
)
|
||||
else
|
||||
target_summary += { 'Command-line utility': false }
|
||||
message('Not building command-line utility: libsndfile dependency not found')
|
||||
endif
|
||||
|
||||
pkg.generate(
|
||||
name: 'rubberband',
|
||||
description: 'Audio time-stretching and pitch-shifting library',
|
||||
url: 'https://breakfastquay.com/rubberband/',
|
||||
version: meson.project_version(),
|
||||
requires: pkgconfig_requirements,
|
||||
libraries: '-L${libdir} -lrubberband',
|
||||
extra_cflags: '-I${includedir}',
|
||||
)
|
||||
|
||||
summary({'prefix': get_option('prefix'),
|
||||
'bindir': get_option('bindir'),
|
||||
'libdir': get_option('libdir'),
|
||||
'datadir': get_option('datadir'),
|
||||
}, section: 'Directories')
|
||||
|
||||
summary(config_summary + { 'Architecture': architecture },
|
||||
section: 'Configuration', bool_yn: true)
|
||||
summary(target_summary, section: 'Build targets', bool_yn: true)
|
||||
|
||||
if system == 'darwin'
|
||||
foreach arg: get_option('cpp_args')
|
||||
if arg.contains('iPhone')
|
||||
summary({'Please note': 'You cannot legally distribute the Rubber Band Library\n in an iOS app on the App Store, unless you have first obtained a\n commercial licence.'}, section: '***')
|
||||
break
|
||||
endif
|
||||
endforeach
|
||||
endif
|
||||
33
meson_options.txt
Normal file
33
meson_options.txt
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
option('fft',
|
||||
type: 'combo',
|
||||
choices: ['auto', 'kissfft', 'fftw', 'vdsp', 'ipp'],
|
||||
value: 'auto',
|
||||
description: 'FFT library to use. The default (auto) will use vDSP if available, KissFFT otherwise.')
|
||||
|
||||
option('resampler',
|
||||
type: 'combo',
|
||||
choices: ['auto', 'libsamplerate', 'speex', 'ipp'],
|
||||
value: 'auto',
|
||||
description: 'Resampler library to use. Recommended is libsamplerate. The default (auto) will use libsamplerate if available, speex otherwise.')
|
||||
|
||||
option('ipp_path',
|
||||
type: 'string',
|
||||
value: '',
|
||||
description: 'Path to Intel IPP libraries, if selected for any of the other options.')
|
||||
|
||||
option('extra_include_dirs',
|
||||
type: 'array',
|
||||
value: [],
|
||||
description: 'Additional local header directories to search for dependencies.')
|
||||
|
||||
option('extra_lib_dirs',
|
||||
type: 'array',
|
||||
value: [],
|
||||
description: 'Additional local library directories to search for dependencies.')
|
||||
|
||||
option('no_shared',
|
||||
type: 'boolean',
|
||||
value: 'false',
|
||||
description: 'Do not build shared libraries. On Windows this will also ensure that the static library is called simply rubberband.lib, not rubberband-static.lib as it is in the default build.')
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
|
||||
CXX := clang++
|
||||
CC := clang
|
||||
OPTFLAGS := -ffast-math -freciprocal-math -O3 -ftree-vectorize
|
||||
|
||||
OPTFLAGS := -DNDEBUG -ffast-math -freciprocal-math -O3 -ftree-vectorize
|
||||
|
||||
# For the device
|
||||
ARCHFLAGS_DEV := -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk -miphoneos-version-min=6 -stdlib=libc++ -arch armv7 -arch arm64 -fembed-bitcode
|
||||
@@ -19,7 +20,7 @@ CFLAGS_SIM := $(ARCHFLAGS_SIM) $(OPTFLAGS)
|
||||
|
||||
AR := ar
|
||||
LIPO := lipo
|
||||
MKDIR := mkdir
|
||||
MKDIR := mkdir -p
|
||||
|
||||
LIBNAME := librubberband
|
||||
|
||||
@@ -28,10 +29,8 @@ STATIC_TARGET_DEV := lib/$(LIBNAME).dev.a
|
||||
STATIC_TARGET_SIM := lib/$(LIBNAME).sim.a
|
||||
|
||||
default: lib $(STATIC_TARGET)
|
||||
|
||||
all: lib $(STATIC_TARGET)
|
||||
|
||||
static: $(STATIC_TARGET)
|
||||
static: lib $(STATIC_TARGET)
|
||||
|
||||
PUBLIC_INCLUDES := \
|
||||
rubberband/rubberband-c.h \
|
||||
@@ -137,9 +136,9 @@ distclean: clean
|
||||
rm -f $(STATIC_TARGET_DEV) $(STATIC_TARGET_SIM)
|
||||
|
||||
depend:
|
||||
touch Makefile.dev_depends Makefile.sim_depends
|
||||
makedepend -f Makefile.dev_depends -o.dev.o -Y $(LIBRARY_SOURCES)
|
||||
makedepend -f Makefile.sim_depends -o.sim.o -Y $(LIBRARY_SOURCES)
|
||||
touch otherbuilds/Makefile.dev_depends otherbuilds/Makefile.sim_depends
|
||||
makedepend -f otherbuilds/Makefile.dev_depends -o.dev.o -Y $(LIBRARY_SOURCES)
|
||||
makedepend -f otherbuilds/Makefile.sim_depends -o.sim.o -Y $(LIBRARY_SOURCES)
|
||||
|
||||
-include Makefile.dev_depends
|
||||
-include Makefile.sim_depends
|
||||
-include otherbuilds/Makefile.dev_depends
|
||||
-include otherbuilds/Makefile.sim_depends
|
||||
@@ -1,75 +1,25 @@
|
||||
|
||||
PREFIX := @prefix@
|
||||
CXX := @CXX@
|
||||
CC := @CC@
|
||||
CXXFLAGS := -DHAVE_LIBSAMPLERATE -DHAVE_FFTW3 -DFFTW_DOUBLE_ONLY -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DNDEBUG -I. -Isrc -Irubberband @CXXFLAGS@ @SRC_CFLAGS@ @SNDFILE_CFLAGS@ @FFTW_CFLAGS@ @Vamp_CFLAGS@ $(OPTFLAGS)
|
||||
CFLAGS := @CFLAGS@ $(OPTFLAGS)
|
||||
LDFLAGS := @LDFLAGS@ -lpthread $(LDFLAGS)
|
||||
WITH_PROGRAMS := @WITH_PROGRAMS@
|
||||
WITH_VAMP := @WITH_VAMP@
|
||||
WITH_LADSPA := @WITH_LADSPA@
|
||||
CXX := g++
|
||||
CC := gcc
|
||||
|
||||
JNI_CXXFLAGS := -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
|
||||
JAVAC := $(JAVA_HOME)/bin/javac
|
||||
JAR := $(JAVA_HOME)/bin/jar
|
||||
OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize
|
||||
|
||||
LIBRARY_LIBS := @SRC_LIBS@ @FFTW_LIBS@
|
||||
PROGRAM_LIBS := @SNDFILE_LIBS@ $(LIBRARY_LIBS)
|
||||
VAMP_PLUGIN_LIBS := @Vamp_LIBS@ $(LIBRARY_LIBS)
|
||||
LADSPA_PLUGIN_LIBS := $(LIBRARY_LIBS)
|
||||
ARCHFLAGS :=
|
||||
|
||||
MKDIR := mkdir
|
||||
AR := ar
|
||||
CXXFLAGS := -std=c++98 $(ARCHFLAGS) $(OPTFLAGS) -I. -Isrc -Irubberband -DHAVE_LIBSAMPLERATE -DUSE_KISSFFT -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DHAVE_POSIX_MEMALIGN -DNDEBUG
|
||||
|
||||
INSTALL_BINDIR := $(PREFIX)/bin
|
||||
INSTALL_INCDIR := $(PREFIX)/include/rubberband
|
||||
INSTALL_LIBDIR := $(PREFIX)/lib
|
||||
INSTALL_VAMPDIR := $(PREFIX)/lib/vamp
|
||||
INSTALL_LADSPADIR := $(PREFIX)/lib/ladspa
|
||||
INSTALL_LRDFDIR := $(PREFIX)/share/ladspa/rdf
|
||||
INSTALL_PKGDIR := $(PREFIX)/lib/pkgconfig
|
||||
CFLAGS := $(ARCHFLAGS) $(OPTFLAGS)
|
||||
|
||||
LIBNAME := librubberband
|
||||
JNINAME := librubberband-jni
|
||||
JARNAME := rubberband.jar
|
||||
AR := ar
|
||||
MKDIR := mkdir -p
|
||||
|
||||
DYNAMIC_EXTENSION := .so
|
||||
DYNAMIC_FULL_VERSION := 2.1.2
|
||||
DYNAMIC_ABI_VERSION := 2
|
||||
DYNAMIC_LDFLAGS := -shared -Wl,-Bsymbolic -Wl,-soname=$(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_ABI_VERSION)
|
||||
VAMP_LDFLAGS := -shared -Wl,-Bsymbolic -Wl,--version-script=vamp/vamp-plugin.map
|
||||
LADSPA_LDFLAGS := -shared -Wl,-Bsymbolic -Wl,--version-script=ladspa/ladspa-plugin.map
|
||||
LIBNAME := librubberband
|
||||
|
||||
PROGRAM_TARGET := bin/rubberband
|
||||
STATIC_TARGET := lib/$(LIBNAME).a
|
||||
DYNAMIC_TARGET := lib/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
JNI_TARGET := lib/$(JNINAME)$(DYNAMIC_EXTENSION)
|
||||
JAR_TARGET := lib/$(JARNAME)
|
||||
VAMP_TARGET := lib/vamp-rubberband$(DYNAMIC_EXTENSION)
|
||||
LADSPA_TARGET := lib/ladspa-rubberband$(DYNAMIC_EXTENSION)
|
||||
STATIC_TARGET := lib/$(LIBNAME).a
|
||||
|
||||
ALL_TARGETS := lib $(STATIC_TARGET) $(DYNAMIC_TARGET)
|
||||
|
||||
ifeq ($(WITH_PROGRAMS), yes)
|
||||
ALL_TARGETS += bin $(PROGRAM_TARGET)
|
||||
endif
|
||||
|
||||
ifeq ($(WITH_VAMP), yes)
|
||||
ALL_TARGETS += $(VAMP_TARGET)
|
||||
endif
|
||||
|
||||
ifeq ($(WITH_LADSPA), yes)
|
||||
ALL_TARGETS += $(LADSPA_TARGET)
|
||||
endif
|
||||
|
||||
all: $(ALL_TARGETS)
|
||||
static: $(STATIC_TARGET)
|
||||
dynamic: $(DYNAMIC_TARGET)
|
||||
library: $(STATIC_TARGET) $(DYNAMIC_TARGET)
|
||||
jni: $(JNI_TARGET) $(JAR_TARGET)
|
||||
program: $(PROGRAM_TARGET)
|
||||
vamp: $(VAMP_TARGET)
|
||||
ladspa: $(LADSPA_TARGET)
|
||||
default: lib $(STATIC_TARGET)
|
||||
all: lib $(STATIC_TARGET)
|
||||
static: lib $(STATIC_TARGET)
|
||||
|
||||
PUBLIC_INCLUDES := \
|
||||
rubberband/rubberband-c.h \
|
||||
@@ -119,109 +69,27 @@ LIBRARY_SOURCES := \
|
||||
src/system/sysutils.cpp \
|
||||
src/system/Thread.cpp \
|
||||
src/StretcherChannelData.cpp \
|
||||
src/StretcherImpl.cpp
|
||||
|
||||
JNI_SOURCE := \
|
||||
src/jni/RubberBandStretcherJNI.cpp
|
||||
|
||||
JAVA_SOURCE := \
|
||||
com/breakfastquay/rubberband/RubberBandStretcher.java
|
||||
|
||||
PROGRAM_SOURCES := \
|
||||
main/main.cpp
|
||||
|
||||
VAMP_HEADERS := \
|
||||
vamp/RubberBandVampPlugin.h
|
||||
|
||||
VAMP_SOURCES := \
|
||||
vamp/RubberBandVampPlugin.cpp \
|
||||
vamp/libmain.cpp
|
||||
|
||||
LADSPA_HEADERS := \
|
||||
ladspa/RubberBandPitchShifter.h
|
||||
|
||||
LADSPA_SOURCES := \
|
||||
ladspa/RubberBandPitchShifter.cpp \
|
||||
ladspa/libmain.cpp
|
||||
src/StretcherImpl.cpp \
|
||||
src/kissfft/kiss_fft.c \
|
||||
src/kissfft/kiss_fftr.c
|
||||
|
||||
LIBRARY_OBJECTS := $(LIBRARY_SOURCES:.cpp=.o)
|
||||
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.o)
|
||||
JNI_OBJECT := $(JNI_SOURCE:.cpp=.o)
|
||||
JAVA_OBJECT := $(JAVA_SOURCE:.java=.class)
|
||||
PROGRAM_OBJECTS := $(PROGRAM_SOURCES:.cpp=.o)
|
||||
VAMP_OBJECTS := $(VAMP_SOURCES:.cpp=.o)
|
||||
LADSPA_OBJECTS := $(LADSPA_SOURCES:.cpp=.o)
|
||||
|
||||
$(PROGRAM_TARGET): $(LIBRARY_OBJECTS) $(PROGRAM_OBJECTS)
|
||||
$(CXX) -o $@ $^ $(PROGRAM_LIBS) $(LDFLAGS)
|
||||
|
||||
$(STATIC_TARGET): $(LIBRARY_OBJECTS)
|
||||
$(AR) rsc $@ $^
|
||||
|
||||
$(DYNAMIC_TARGET): $(LIBRARY_OBJECTS)
|
||||
$(CXX) $(DYNAMIC_LDFLAGS) $^ -o $@ $(LIBRARY_LIBS) $(LDFLAGS)
|
||||
|
||||
$(JNI_OBJECT): $(JNI_SOURCE)
|
||||
$(CXX) -c $(JNI_CXXFLAGS) $(CXXFLAGS) $^ -o $@
|
||||
|
||||
$(JNI_TARGET): $(LIBRARY_OBJECTS) $(JNI_OBJECT)
|
||||
$(CXX) $(DYNAMIC_LDFLAGS) $^ -o $@ $(LIBRARY_LIBS) $(LDFLAGS)
|
||||
|
||||
$(JAR_TARGET): $(JAVA_SOURCE)
|
||||
$(JAVAC) $^
|
||||
$(JAR) cvf $@ $(JAVA_OBJECT)
|
||||
|
||||
$(VAMP_TARGET): $(LIBRARY_OBJECTS) $(VAMP_OBJECTS)
|
||||
$(CXX) $(VAMP_LDFLAGS) -o $@ $^ $(VAMP_PLUGIN_LIBS) $(LDFLAGS)
|
||||
|
||||
$(LADSPA_TARGET): $(LIBRARY_OBJECTS) $(LADSPA_OBJECTS)
|
||||
$(CXX) $(LADSPA_LDFLAGS) -o $@ $^ $(LADSPA_PLUGIN_LIBS) $(LDFLAGS)
|
||||
|
||||
bin:
|
||||
$(MKDIR) $@
|
||||
lib:
|
||||
$(MKDIR) $@
|
||||
|
||||
install: all
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_INCDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LIBDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_PKGDIR)
|
||||
cp $(PUBLIC_INCLUDES) $(DESTDIR)$(INSTALL_INCDIR)
|
||||
cp $(STATIC_TARGET) $(DESTDIR)$(INSTALL_LIBDIR)
|
||||
rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_ABI_VERSION)
|
||||
rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(JNINAME)$(DYNAMIC_EXTENSION)
|
||||
cp $(DYNAMIC_TARGET) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_FULL_VERSION)
|
||||
ln -s $(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_FULL_VERSION) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_ABI_VERSION)
|
||||
ln -s $(LIBNAME)$(DYNAMIC_EXTENSION).$(DYNAMIC_FULL_VERSION) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
test -f $(JNI_TARGET) && cp -f $(JNI_TARGET) $(DESTDIR)$(INSTALL_LIBDIR)/$(JNINAME)$(DYNAMIC_EXTENSION) || true
|
||||
sed "s,%PREFIX%,$(PREFIX)," rubberband.pc.in \
|
||||
> $(DESTDIR)$(INSTALL_PKGDIR)/rubberband.pc
|
||||
ifeq ($(WITH_PROGRAMS), yes)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_BINDIR)
|
||||
cp $(PROGRAM_TARGET) $(DESTDIR)$(INSTALL_BINDIR)
|
||||
endif
|
||||
ifeq ($(WITH_VAMP), yes)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
cp $(VAMP_TARGET) $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
cp vamp/vamp-rubberband.cat $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
endif
|
||||
ifeq ($(WITH_LADSPA), yes)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LRDFDIR)
|
||||
cp $(LADSPA_TARGET) $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
cp ladspa/ladspa-rubberband.cat $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
cp ladspa/ladspa-rubberband.rdf $(DESTDIR)$(INSTALL_LRDFDIR)
|
||||
endif
|
||||
|
||||
clean:
|
||||
rm -f $(LIBRARY_OBJECTS) $(JNI_OBJECT) $(JAVA_OBJECT) $(PROGRAM_OBJECTS) $(LADSPA_OBJECTS) $(VAMP_OBJECTS)
|
||||
rm -f $(LIBRARY_OBJECTS)
|
||||
|
||||
distclean: clean
|
||||
rm -f $(PROGRAM_TARGET) $(STATIC_TARGET) $(DYNAMIC_TARGET) $(JNI_TARGET) $(JAR_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET)
|
||||
rm -f $(STATIC_TARGET)
|
||||
|
||||
depend:
|
||||
makedepend -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
|
||||
makedepend -f otherbuilds/Makefile.linux -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
|
||||
|
||||
|
||||
# DO NOT DELETE
|
||||
173
otherbuilds/Makefile.macos
Normal file
173
otherbuilds/Makefile.macos
Normal file
@@ -0,0 +1,173 @@
|
||||
|
||||
CXX := clang++ -stdlib=libc++
|
||||
CC := clang
|
||||
|
||||
OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize
|
||||
|
||||
ARCHFLAGS := -mmacosx-version-min=10.7
|
||||
|
||||
CXXFLAGS := $(ARCHFLAGS) $(OPTFLAGS) -I. -Isrc -Irubberband -I/usr/local/include -DUSE_PTHREADS -DMALLOC_IS_ALIGNED -DHAVE_VDSP -DUSE_SPEEX -DNO_THREAD_CHECKS -DNO_TIMING
|
||||
|
||||
CFLAGS := $(ARCHFLAGS) $(OPTFLAGS)
|
||||
|
||||
AR := ar
|
||||
MKDIR := mkdir -p
|
||||
|
||||
LIBNAME := librubberband
|
||||
|
||||
STATIC_TARGET := lib/$(LIBNAME).a
|
||||
|
||||
default: lib $(STATIC_TARGET)
|
||||
all: lib $(STATIC_TARGET)
|
||||
static: lib $(STATIC_TARGET)
|
||||
|
||||
PUBLIC_INCLUDES := \
|
||||
rubberband/rubberband-c.h \
|
||||
rubberband/RubberBandStretcher.h
|
||||
|
||||
LIBRARY_INCLUDES := \
|
||||
src/StretcherChannelData.h \
|
||||
src/float_cast/float_cast.h \
|
||||
src/StretcherImpl.h \
|
||||
src/StretchCalculator.h \
|
||||
src/base/Profiler.h \
|
||||
src/base/RingBuffer.h \
|
||||
src/base/Scavenger.h \
|
||||
src/dsp/AudioCurveCalculator.h \
|
||||
src/audiocurves/CompoundAudioCurve.h \
|
||||
src/audiocurves/ConstantAudioCurve.h \
|
||||
src/audiocurves/HighFrequencyAudioCurve.h \
|
||||
src/audiocurves/PercussiveAudioCurve.h \
|
||||
src/audiocurves/SilentAudioCurve.h \
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.h \
|
||||
src/dsp/Resampler.h \
|
||||
src/dsp/FFT.h \
|
||||
src/dsp/MovingMedian.h \
|
||||
src/dsp/SincWindow.h \
|
||||
src/dsp/Window.h \
|
||||
src/system/Allocators.h \
|
||||
src/system/Thread.h \
|
||||
src/system/VectorOps.h \
|
||||
src/system/VectorOpsComplex.h \
|
||||
src/system/sysutils.h
|
||||
|
||||
LIBRARY_SOURCES := \
|
||||
src/rubberband-c.cpp \
|
||||
src/RubberBandStretcher.cpp \
|
||||
src/StretcherProcess.cpp \
|
||||
src/StretchCalculator.cpp \
|
||||
src/base/Profiler.cpp \
|
||||
src/dsp/AudioCurveCalculator.cpp \
|
||||
src/audiocurves/CompoundAudioCurve.cpp \
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.cpp \
|
||||
src/audiocurves/HighFrequencyAudioCurve.cpp \
|
||||
src/audiocurves/SilentAudioCurve.cpp \
|
||||
src/audiocurves/ConstantAudioCurve.cpp \
|
||||
src/audiocurves/PercussiveAudioCurve.cpp \
|
||||
src/dsp/Resampler.cpp \
|
||||
src/dsp/FFT.cpp \
|
||||
src/system/Allocators.cpp \
|
||||
src/system/sysutils.cpp \
|
||||
src/system/Thread.cpp \
|
||||
src/system/VectorOpsComplex.cpp \
|
||||
src/StretcherChannelData.cpp \
|
||||
src/StretcherImpl.cpp
|
||||
|
||||
# For Speex resampler -- comment these lines out if not specifying USE_SPEEX
|
||||
LIBRARY_INCLUDES := $(LIBRARY_INCLUDES) \
|
||||
src/speex/speex_resampler.h
|
||||
LIBRARY_SOURCES := $(LIBRARY_SOURCES) \
|
||||
src/speex/resample.c
|
||||
|
||||
LIBRARY_OBJECTS := $(LIBRARY_SOURCES:.cpp=.o)
|
||||
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.o)
|
||||
|
||||
$(STATIC_TARGET): $(LIBRARY_OBJECTS)
|
||||
rm -f $@
|
||||
$(AR) rsc $@ $^
|
||||
|
||||
lib:
|
||||
$(MKDIR) $@
|
||||
|
||||
clean:
|
||||
rm -f $(LIBRARY_OBJECTS)
|
||||
|
||||
distclean: clean
|
||||
rm -f $(STATIC_TARGET)
|
||||
|
||||
depend:
|
||||
makedepend -f otherbuilds/Makefile.macos -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
|
||||
|
||||
|
||||
# DO NOT DELETE
|
||||
|
||||
src/rubberband-c.o: rubberband/rubberband-c.h
|
||||
src/rubberband-c.o: rubberband/RubberBandStretcher.h
|
||||
src/RubberBandStretcher.o: src/StretcherImpl.h
|
||||
src/RubberBandStretcher.o: rubberband/RubberBandStretcher.h src/dsp/Window.h
|
||||
src/RubberBandStretcher.o: src/dsp/FFT.h src/base/RingBuffer.h
|
||||
src/RubberBandStretcher.o: src/base/Scavenger.h src/system/Thread.h
|
||||
src/RubberBandStretcher.o: src/system/Thread.h src/system/sysutils.h
|
||||
src/StretcherProcess.o: src/StretcherImpl.h rubberband/RubberBandStretcher.h
|
||||
src/StretcherProcess.o: src/dsp/Window.h src/dsp/FFT.h src/base/RingBuffer.h
|
||||
src/StretcherProcess.o: src/base/Scavenger.h src/system/Thread.h
|
||||
src/StretcherProcess.o: src/system/Thread.h src/system/sysutils.h
|
||||
src/StretcherProcess.o: src/audiocurves/PercussiveAudioCurve.h
|
||||
src/StretcherProcess.o: src/dsp/AudioCurveCalculator.h
|
||||
src/StretcherProcess.o: src/audiocurves/HighFrequencyAudioCurve.h
|
||||
src/StretcherProcess.o: src/audiocurves/ConstantAudioCurve.h src/StretchCalculator.h
|
||||
src/StretcherProcess.o: src/StretcherChannelData.h src/dsp/Resampler.h
|
||||
src/StretcherProcess.o: src/base/Profiler.h src/system/VectorOps.h
|
||||
src/StretcherProcess.o: src/system/sysutils.h
|
||||
src/StretchCalculator.o: src/StretchCalculator.h src/system/sysutils.h
|
||||
src/system/Thread.o: src/system/Thread.h
|
||||
src/base/Profiler.o: src/base/Profiler.h src/system/sysutils.h
|
||||
src/dsp/AudioCurveCalculator.o: src/dsp/AudioCurveCalculator.h
|
||||
src/dsp/AudioCurveCalculator.o: src/system/sysutils.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/audiocurves/SpectralDifferenceAudioCurve.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/dsp/AudioCurveCalculator.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/system/sysutils.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/dsp/Window.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/system/VectorOps.h
|
||||
src/audiocurves/SpectralDifferenceAudioCurve.o: src/system/sysutils.h
|
||||
src/audiocurves/HighFrequencyAudioCurve.o: src/audiocurves/HighFrequencyAudioCurve.h
|
||||
src/audiocurves/HighFrequencyAudioCurve.o: src/dsp/AudioCurveCalculator.h
|
||||
src/audiocurves/HighFrequencyAudioCurve.o: src/system/sysutils.h
|
||||
src/audiocurves/SilentAudioCurve.o: src/audiocurves/SilentAudioCurve.h
|
||||
src/audiocurves/SilentAudioCurve.o: src/dsp/AudioCurveCalculator.h
|
||||
src/audiocurves/SilentAudioCurve.o: src/system/sysutils.h
|
||||
src/audiocurves/ConstantAudioCurve.o: src/audiocurves/ConstantAudioCurve.h
|
||||
src/audiocurves/ConstantAudioCurve.o: src/dsp/AudioCurveCalculator.h
|
||||
src/audiocurves/ConstantAudioCurve.o: src/system/sysutils.h
|
||||
src/audiocurves/PercussiveAudioCurve.o: src/audiocurves/PercussiveAudioCurve.h
|
||||
src/audiocurves/PercussiveAudioCurve.o: src/dsp/AudioCurveCalculator.h
|
||||
src/audiocurves/PercussiveAudioCurve.o: src/system/sysutils.h src/system/VectorOps.h
|
||||
src/audiocurves/PercussiveAudioCurve.o: src/system/sysutils.h
|
||||
src/dsp/Resampler.o: src/dsp/Resampler.h src/system/sysutils.h
|
||||
src/dsp/Resampler.o: src/base/Profiler.h
|
||||
src/dsp/FFT.o: src/dsp/FFT.h src/system/sysutils.h src/system/Thread.h
|
||||
src/dsp/FFT.o: src/base/Profiler.h src/system/VectorOps.h
|
||||
src/dsp/FFT.o: src/system/sysutils.h
|
||||
src/system/Allocators.o: src/system/Allocators.h src/system/VectorOps.h
|
||||
src/system/Allocators.o: src/system/sysutils.h
|
||||
src/system/sysutils.o: src/system/sysutils.h
|
||||
src/StretcherChannelData.o: src/StretcherChannelData.h src/StretcherImpl.h
|
||||
src/StretcherChannelData.o: rubberband/RubberBandStretcher.h src/dsp/Window.h
|
||||
src/StretcherChannelData.o: src/dsp/FFT.h src/base/RingBuffer.h
|
||||
src/StretcherChannelData.o: src/base/Scavenger.h src/system/Thread.h
|
||||
src/StretcherChannelData.o: src/system/Thread.h src/system/sysutils.h
|
||||
src/StretcherChannelData.o: src/dsp/Resampler.h src/system/Allocators.h
|
||||
src/StretcherChannelData.o: src/system/VectorOps.h src/system/sysutils.h
|
||||
src/StretcherImpl.o: src/StretcherImpl.h rubberband/RubberBandStretcher.h
|
||||
src/StretcherImpl.o: src/dsp/Window.h src/dsp/FFT.h src/base/RingBuffer.h
|
||||
src/StretcherImpl.o: src/base/Scavenger.h src/system/Thread.h src/system/Thread.h
|
||||
src/StretcherImpl.o: src/system/sysutils.h src/audiocurves/PercussiveAudioCurve.h
|
||||
src/StretcherImpl.o: src/dsp/AudioCurveCalculator.h
|
||||
src/StretcherImpl.o: src/audiocurves/HighFrequencyAudioCurve.h
|
||||
src/StretcherImpl.o: src/audiocurves/SpectralDifferenceAudioCurve.h src/dsp/Window.h
|
||||
src/StretcherImpl.o: src/system/VectorOps.h src/system/sysutils.h
|
||||
src/StretcherImpl.o: src/audiocurves/SilentAudioCurve.h src/audiocurves/ConstantAudioCurve.h
|
||||
src/StretcherImpl.o: src/dsp/Resampler.h src/StretchCalculator.h
|
||||
src/StretcherImpl.o: src/StretcherChannelData.h src/base/Profiler.h
|
||||
main/main.o: rubberband/RubberBandStretcher.h src/system/sysutils.h
|
||||
main/main.o: src/base/Profiler.h
|
||||
@@ -1,56 +1,27 @@
|
||||
|
||||
PREFIX := /usr/local
|
||||
CXX := clang++ -stdlib=libc++
|
||||
CC := clang
|
||||
ARCHFLAGS := -arch x86_64 -mmacosx-version-min=10.7
|
||||
OPTFLAGS := -DNDEBUG -ffast-math -mfpmath=sse -msse -msse2 -O3 -ftree-vectorize
|
||||
|
||||
OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize
|
||||
|
||||
ARCHFLAGS := -arch arm64 -arch x86_64 -mmacosx-version-min=10.7
|
||||
|
||||
CXXFLAGS := $(ARCHFLAGS) $(OPTFLAGS) -I. -Isrc -Irubberband -I/usr/local/include -DUSE_PTHREADS -DMALLOC_IS_ALIGNED -DHAVE_VDSP -DUSE_SPEEX -DNO_THREAD_CHECKS -DNO_TIMING
|
||||
|
||||
CFLAGS := $(ARCHFLAGS) $(OPTFLAGS)
|
||||
LDFLAGS := $(ARCHFLAGS) -lpthread $(LDFLAGS)
|
||||
|
||||
LIBRARY_LIBS := -framework Accelerate
|
||||
PROGRAM_LIBS := -L$(PREFIX)/lib -lsndfile $(LIBRARY_LIBS)
|
||||
VAMP_PLUGIN_LIBS := -L$(PREFIX)/lib -lvamp-sdk $(LIBRARY_LIBS)
|
||||
LADSPA_PLUGIN_LIBS := $(LIBRARY_LIBS)
|
||||
|
||||
MKDIR := mkdir
|
||||
AR := ar
|
||||
|
||||
INSTALL_BINDIR := $(PREFIX)/bin
|
||||
INSTALL_INCDIR := $(PREFIX)/include/rubberband
|
||||
INSTALL_LIBDIR := $(PREFIX)/lib
|
||||
INSTALL_VAMPDIR := $(PREFIX)/lib/vamp
|
||||
INSTALL_LADSPADIR := $(PREFIX)/lib/ladspa
|
||||
INSTALL_LRDFDIR := $(PREFIX)/share/ladspa/rdf
|
||||
INSTALL_PKGDIR := $(PREFIX)/lib/pkgconfig
|
||||
MKDIR := mkdir
|
||||
|
||||
LIBNAME := librubberband
|
||||
|
||||
DYNAMIC_EXTENSION := .dylib
|
||||
DYNAMIC_FULL_VERSION := 2.1.2
|
||||
DYNAMIC_ABI_VERSION := 2
|
||||
DYNAMIC_LDFLAGS := -dynamiclib -install_name $(INSTALL_LIBDIR)/$(LIBNAME).$(DYNAMIC_ABI_VERSION)$(DYNAMIC_EXTENSION) -current_version $(DYNAMIC_FULL_VERSION) -compatibility_version $(DYNAMIC_ABI_VERSION)
|
||||
VAMP_LDFLAGS := -dynamiclib -install_name vamp-rubberband.dylib -exported_symbols_list vamp/vamp-plugin.list
|
||||
LADSPA_LDFLAGS := -dynamiclib -install_name ladspa-rubberband.dylib -exported_symbols_list ladspa/ladspa-plugin.list
|
||||
|
||||
PROGRAM_TARGET := bin/rubberband
|
||||
STATIC_TARGET := lib/$(LIBNAME).a
|
||||
DYNAMIC_TARGET := lib/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
VAMP_TARGET := lib/vamp-rubberband$(DYNAMIC_EXTENSION)
|
||||
LADSPA_TARGET := lib/ladspa-rubberband$(DYNAMIC_EXTENSION)
|
||||
|
||||
default: bin lib $(STATIC_TARGET) $(DYNAMIC_TARGET) $(PROGRAM_TARGET)
|
||||
default: $(STATIC_TARGET)
|
||||
|
||||
all: bin lib $(STATIC_TARGET) $(DYNAMIC_TARGET) $(PROGRAM_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET)
|
||||
all: $(STATIC_TARGET)
|
||||
|
||||
static: $(STATIC_TARGET)
|
||||
dynamic: $(DYNAMIC_TARGET)
|
||||
library: $(STATIC_TARGET) $(DYNAMIC_TARGET)
|
||||
program: $(PROGRAM_TARGET)
|
||||
vamp: $(VAMP_TARGET)
|
||||
ladspa: $(LADSPA_TARGET)
|
||||
|
||||
PUBLIC_INCLUDES := \
|
||||
rubberband/rubberband-c.h \
|
||||
@@ -110,83 +81,24 @@ LIBRARY_INCLUDES := $(LIBRARY_INCLUDES) \
|
||||
LIBRARY_SOURCES := $(LIBRARY_SOURCES) \
|
||||
src/speex/resample.c
|
||||
|
||||
PROGRAM_SOURCES := \
|
||||
main/main.cpp
|
||||
|
||||
VAMP_HEADERS := \
|
||||
vamp/RubberBandVampPlugin.h
|
||||
|
||||
VAMP_SOURCES := \
|
||||
vamp/RubberBandVampPlugin.cpp \
|
||||
vamp/libmain.cpp
|
||||
|
||||
LADSPA_HEADERS := \
|
||||
ladspa/RubberBandPitchShifter.h
|
||||
|
||||
LADSPA_SOURCES := \
|
||||
ladspa/RubberBandPitchShifter.cpp \
|
||||
ladspa/libmain.cpp
|
||||
|
||||
LIBRARY_OBJECTS := $(LIBRARY_SOURCES:.cpp=.o)
|
||||
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.o)
|
||||
|
||||
PROGRAM_OBJECTS := $(PROGRAM_SOURCES:.cpp=.o)
|
||||
VAMP_OBJECTS := $(VAMP_SOURCES:.cpp=.o)
|
||||
LADSPA_OBJECTS := $(LADSPA_SOURCES:.cpp=.o)
|
||||
|
||||
$(PROGRAM_TARGET): $(LIBRARY_OBJECTS) $(PROGRAM_OBJECTS)
|
||||
$(CXX) -o $@ $^ $(PROGRAM_LIBS) $(LDFLAGS)
|
||||
|
||||
$(STATIC_TARGET): $(LIBRARY_OBJECTS)
|
||||
rm -f $@
|
||||
$(AR) rsc $@ $^
|
||||
|
||||
$(DYNAMIC_TARGET): $(LIBRARY_OBJECTS)
|
||||
$(CXX) $(DYNAMIC_LDFLAGS) $^ -o $@ $(LIBRARY_LIBS) $(LDFLAGS)
|
||||
|
||||
$(VAMP_TARGET): $(LIBRARY_OBJECTS) $(VAMP_OBJECTS)
|
||||
$(CXX) $(VAMP_LDFLAGS) -o $@ $^ $(VAMP_PLUGIN_LIBS) $(LDFLAGS)
|
||||
|
||||
$(LADSPA_TARGET): $(LIBRARY_OBJECTS) $(LADSPA_OBJECTS)
|
||||
$(CXX) $(LADSPA_LDFLAGS) -o $@ $^ $(LADSPA_PLUGIN_LIBS) $(LDFLAGS)
|
||||
|
||||
bin:
|
||||
$(MKDIR) $@
|
||||
lib:
|
||||
$(MKDIR) $@
|
||||
|
||||
install: default
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_BINDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_INCDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LIBDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_LRDFDIR)
|
||||
$(MKDIR) -p $(DESTDIR)$(INSTALL_PKGDIR)
|
||||
cp $(PROGRAM_TARGET) $(DESTDIR)$(INSTALL_BINDIR)
|
||||
cp $(PUBLIC_INCLUDES) $(DESTDIR)$(INSTALL_INCDIR)
|
||||
cp $(STATIC_TARGET) $(DESTDIR)$(INSTALL_LIBDIR)
|
||||
rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME).$(DYNAMIC_ABI_VERSION)$(DYNAMIC_EXTENSION)
|
||||
rm -f $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
cp $(DYNAMIC_TARGET) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME).$(DYNAMIC_FULL_VERSION)$(DYNAMIC_EXTENSION)
|
||||
ln -s $(LIBNAME).$(DYNAMIC_FULL_VERSION)$(DYNAMIC_EXTENSION) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME).$(DYNAMIC_ABI_VERSION)$(DYNAMIC_EXTENSION)
|
||||
ln -s $(LIBNAME).$(DYNAMIC_FULL_VERSION)$(DYNAMIC_EXTENSION) $(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)$(DYNAMIC_EXTENSION)
|
||||
cp $(VAMP_TARGET) $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
cp vamp/vamp-rubberband.cat $(DESTDIR)$(INSTALL_VAMPDIR)
|
||||
cp $(LADSPA_TARGET) $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
cp ladspa/ladspa-rubberband.cat $(DESTDIR)$(INSTALL_LADSPADIR)
|
||||
cp ladspa/ladspa-rubberband.rdf $(DESTDIR)$(INSTALL_LRDFDIR)
|
||||
sed "s,%PREFIX%,$(PREFIX)," rubberband.pc.in \
|
||||
> $(DESTDIR)$(INSTALL_PKGDIR)/rubberband.pc
|
||||
|
||||
clean:
|
||||
rm -f $(LIBRARY_OBJECTS) $(PROGRAM_OBJECTS) $(LADSPA_OBJECTS) $(VAMP_OBJECTS)
|
||||
rm -f $(LIBRARY_OBJECTS)
|
||||
|
||||
distclean: clean
|
||||
rm -f $(PROGRAM_TARGET) $(STATIC_TARGET) $(DYNAMIC_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET)
|
||||
rm -f $(STATIC_TARGET)
|
||||
|
||||
depend:
|
||||
makedepend -f Makefile.osx -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
|
||||
makedepend -f otherbuilds/Makefile.macos-universal -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
|
||||
|
||||
|
||||
# DO NOT DELETE
|
||||
13
otherbuilds/check.sh
Executable file
13
otherbuilds/check.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
set -eu
|
||||
if [ ! -d /Applications ]; then
|
||||
make -f otherbuilds/Makefile.linux
|
||||
g++ main/main.cpp lib/librubberband.a -I. -Isrc -o test -lsndfile -lsamplerate -lpthread
|
||||
./test -V
|
||||
else
|
||||
make -f otherbuilds/Makefile.macos
|
||||
c++ main/main.cpp lib/librubberband.a -I. -Isrc -o test -lsndfile -lsamplerate -framework Accelerate
|
||||
./test -V
|
||||
make -f otherbuilds/Makefile.macos clean
|
||||
make -f otherbuilds/Makefile.ios
|
||||
fi
|
||||
33
otherbuilds/deploy/macos.sh
Executable file
33
otherbuilds/deploy/macos.sh
Executable file
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
set -eu
|
||||
if [ ! -f ../rba/deploy/macos/notarize.sh ]; then
|
||||
echo "need notarize script in ../rba/deploy/macos"
|
||||
fi
|
||||
version=$(grep '^ *version:' meson.build | head -1 | sed "s/^.*'\([0-9][0-9.]*\)'.*$/\1/")
|
||||
echo
|
||||
echo "Packaging command-line utility for Mac for Rubber Band v$version..."
|
||||
echo
|
||||
rm -rf build
|
||||
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ meson build --cross-file ./cross/macos-universal.txt
|
||||
ninja -C build
|
||||
./build/rubberband -V
|
||||
key="Developer ID Application: Particular Programs Ltd (73F996B92S)"
|
||||
mkdir -p packages
|
||||
( cd build
|
||||
codesign -s "$key" -fv --options runtime rubberband
|
||||
zipfile="rubberband-$version-gpl-executable-macos.zip"
|
||||
rm -f "$zipfile"
|
||||
ditto -c -k rubberband "$zipfile"
|
||||
../../rba/deploy/macos/notarize.sh "$zipfile" com.breakfastquay.rubberband
|
||||
)
|
||||
package_dir="rubberband-$version-gpl-executable-macos"
|
||||
rm -rf "$package_dir"
|
||||
mkdir "$package_dir"
|
||||
cp build/rubberband "$package_dir"
|
||||
cp CHANGELOG README.md COPYING "$package_dir"
|
||||
tar cvjf "$package_dir.tar.bz2" "$package_dir"
|
||||
mv "$package_dir.tar.bz2" packages/
|
||||
rm -rf "$package_dir"
|
||||
echo
|
||||
echo "Done, package is in packages/$package_dir.tar.bz2"
|
||||
|
||||
59
otherbuilds/deploy/source.sh
Executable file
59
otherbuilds/deploy/source.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
set -eu
|
||||
version=$(grep '^ *version:' meson.build | head -1 | sed "s/^.*'\([0-9][0-9.]*\)'.*$/\1/")
|
||||
check() {
|
||||
text="$1"
|
||||
echo -n "$text [yN] "
|
||||
read yn
|
||||
case "$yn" in [Yy]) ;; *) echo "Exiting"; exit 3 ;; esac
|
||||
}
|
||||
echo
|
||||
echo "Preparing to make source package for Rubber Band v$version..."
|
||||
echo
|
||||
grep '^ *version:' meson.build | head -1
|
||||
check "Is the above version number (in meson.build) correct?"
|
||||
echo
|
||||
echo "The dynamic library version should have a point increment for each"
|
||||
echo "release, a minor increment for backward-compatible ABI changes, and"
|
||||
echo "a major increment for incompatible ABI changes."
|
||||
echo
|
||||
grep 'rubberband_dynamic_library_version' meson.build | head -1
|
||||
check "Is the above library version (from meson.build) correct?"
|
||||
echo
|
||||
echo "The API major version should increment for incompatible API changes,"
|
||||
echo "and the minor version should increment for backward-compatible API"
|
||||
echo "changes."
|
||||
echo
|
||||
grep 'RUBBERBAND.*VERSION' rubberband/RubberBandStretcher.h
|
||||
check "Are the above version and API versions (from the C++ header) correct?"
|
||||
echo
|
||||
echo "The C header should contain the same versions as the C++ header."
|
||||
echo
|
||||
grep 'RUBBERBAND.*VERSION' rubberband/rubberband-c.h
|
||||
check "Are the above version and API versions (from the C header) correct?"
|
||||
echo
|
||||
grep '^PROJECT_NUMBER' Doxyfile
|
||||
check "Is the above version (from Doxyfile) correct?"
|
||||
|
||||
echo
|
||||
echo "Going ahead..."
|
||||
mkdir -p packages
|
||||
output="packages/rubberband-$version.tar.bz2"
|
||||
hg archive --exclude otherbuilds/deploy "$output"
|
||||
|
||||
echo "Checking that the package compiles..."
|
||||
tmpdir=$(mktemp -d)
|
||||
cleanup() {
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
trap cleanup 0
|
||||
prevdir=$(pwd)
|
||||
( cd "$tmpdir"
|
||||
tar xvf "$prevdir/$output"
|
||||
cd "rubberband-$version"
|
||||
meson build
|
||||
ninja -C build
|
||||
)
|
||||
|
||||
echo
|
||||
echo "Checked, package is in $output"
|
||||
54
otherbuilds/deploy/win.bat
Normal file
54
otherbuilds/deploy/win.bat
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
echo on
|
||||
|
||||
set STARTPWD=%CD%
|
||||
set ORIGINALPATH=%PATH%
|
||||
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\x64;%PATH%
|
||||
|
||||
set vcvarsall="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat"
|
||||
|
||||
if not exist %vcvarsall% (
|
||||
@ echo "Could not find MSVC vars batch file"
|
||||
@ exit /b 2
|
||||
)
|
||||
|
||||
set VERSION=%1
|
||||
shift
|
||||
if "%VERSION%" == "" (
|
||||
@echo "Usage: win.bat <version>"
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
@echo Building version %VERSION%
|
||||
|
||||
call %vcvarsall% amd64
|
||||
if errorlevel 1 exit /b %errorlevel%
|
||||
|
||||
del /q /s build
|
||||
|
||||
meson build --buildtype release "-Dextra_include_dirs=C:\Program Files\libsndfile\include" "-Dextra_lib_dirs=C:\Program Files\libsndfile\lib" "-Db_vscrt=mt"
|
||||
if errorlevel 1 exit /b %errorlevel%
|
||||
|
||||
ninja -C build
|
||||
if errorlevel 1 exit /b %errorlevel%
|
||||
|
||||
cd build
|
||||
ren rubberband-program.exe rubberband.exe
|
||||
set NAME=Christopher Cannam
|
||||
signtool sign /v /n "%NAME%" /t http://time.certum.pl /fd sha1 /a rubberband.exe
|
||||
if errorlevel 1 exit /b %errorlevel%
|
||||
|
||||
cd ..
|
||||
set DIR=rubberband-%VERSION%-gpl-executable-windows
|
||||
del /q /s %DIR%
|
||||
mkdir %DIR%
|
||||
copy build\rubberband.exe %DIR%
|
||||
copy "c:\Program Files\libsndfile\bin\sndfile.dll" %DIR%
|
||||
copy COPYING %DIR%
|
||||
copy README.md %DIR%
|
||||
copy CHANGELOG %DIR%
|
||||
|
||||
set PATH=%ORIGINALPATH%
|
||||
cd %STARTPWD%
|
||||
@echo Done, now test and zip the directory %DIR%
|
||||
|
||||
@@ -19,26 +19,27 @@
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{06838307-FEAA-4DB0-8E08-AF19698E9C40}</ProjectGuid>
|
||||
<RootNamespace>rubberband-program</RootNamespace>
|
||||
<ProjectGuid>{020CEB11-EF4E-400E-971D-A35DB69D7CF9}</ProjectGuid>
|
||||
<RootNamespace>rubberband-library</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
@@ -62,67 +63,43 @@
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>Debug\</OutDir>
|
||||
<IntDir>Debug\</IntDir>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
|
||||
<SourcePath>$(SourcePath)</SourcePath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>Release\</OutDir>
|
||||
<IntDir>Release\</IntDir>
|
||||
<LinkIncremental />
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental />
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files (x86)\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>true</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader />
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level2</WarningLevel>
|
||||
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>.\Debug\rubberband-library.lib;C:\Program Files (x86)\Mega-Nerd\libsndfile\lib\libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<WarningLevel>Level2</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<ShowIncludes>false</ShowIncludes>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>.\x64\Debug\rubberband-library.lib;C:\Program Files\Mega-Nerd\libsndfile\lib\libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
@@ -131,23 +108,16 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files (x86)\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_CONSOLE;WANT_TIMING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<PrecompiledHeader />
|
||||
<WarningLevel>Level2</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>.\Release\rubberband-library.lib;C:\Program Files (x86)\Mega-Nerd\libsndfile\lib\libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
@@ -156,9 +126,10 @@
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_CONSOLE;WANT_TIMING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>false</BufferSecurityCheck>
|
||||
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
|
||||
<FloatingPointModel>Fast</FloatingPointModel>
|
||||
<PrecompiledHeader>
|
||||
@@ -166,30 +137,61 @@
|
||||
<WarningLevel>Level2</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>.\x64\Release\rubberband-library.lib;C:\Program Files\Mega-Nerd\libsndfile\lib\libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="rubberband\RubberBandStretcher.h" />
|
||||
<ClInclude Include="src\float_cast\float_cast.h" />
|
||||
<ClInclude Include="src\getopt\getopt.h" />
|
||||
<ClInclude Include="src\getopt\unistd.h" />
|
||||
<ClInclude Include="..\rubberband\rubberband-c.h" />
|
||||
<ClInclude Include="..\rubberband\RubberBandStretcher.h" />
|
||||
<ClInclude Include="..\src\audiocurves\CompoundAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\ConstantAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\HighFrequencyAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\PercussiveAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\SilentAudioCurve.h" />
|
||||
<ClInclude Include="..\src\audiocurves\SpectralDifferenceAudioCurve.h" />
|
||||
<ClInclude Include="..\src\base\Profiler.h" />
|
||||
<ClInclude Include="..\src\base\RingBuffer.h" />
|
||||
<ClInclude Include="..\src\base\Scavenger.h" />
|
||||
<ClInclude Include="..\src\dsp\AudioCurveCalculator.h" />
|
||||
<ClInclude Include="..\src\dsp\FFT.h" />
|
||||
<ClInclude Include="..\src\dsp\MovingMedian.h" />
|
||||
<ClInclude Include="..\src\dsp\Resampler.h" />
|
||||
<ClInclude Include="..\src\dsp\SampleFilter.h" />
|
||||
<ClInclude Include="..\src\dsp\SincWindow.h" />
|
||||
<ClInclude Include="..\src\dsp\Window.h" />
|
||||
<ClInclude Include="..\src\float_cast\float_cast.h" />
|
||||
<ClInclude Include="..\src\speex\speex_resampler.h" />
|
||||
<ClInclude Include="..\src\StretchCalculator.h" />
|
||||
<ClInclude Include="..\src\StretcherChannelData.h" />
|
||||
<ClInclude Include="..\src\StretcherImpl.h" />
|
||||
<ClInclude Include="..\src\system\Allocators.h" />
|
||||
<ClInclude Include="..\src\system\sysutils.h" />
|
||||
<ClInclude Include="..\src\system\Thread.h" />
|
||||
<ClInclude Include="..\src\system\VectorOps.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main\main.cpp" />
|
||||
<ClCompile Include="src\getopt\getopt.c" />
|
||||
<ClCompile Include="src\getopt\getopt_long.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="debug\BuildLog.htm" />
|
||||
<None Include="wub\index.html" />
|
||||
<ClCompile Include="..\src\audiocurves\CompoundAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\ConstantAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\HighFrequencyAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\PercussiveAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\SilentAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\audiocurves\SpectralDifferenceAudioCurve.cpp" />
|
||||
<ClCompile Include="..\src\base\Profiler.cpp" />
|
||||
<ClCompile Include="..\src\dsp\AudioCurveCalculator.cpp" />
|
||||
<ClCompile Include="..\src\dsp\FFT.cpp" />
|
||||
<ClCompile Include="..\src\dsp\Resampler.cpp" />
|
||||
<ClCompile Include="..\src\kissfft\kiss_fft.c" />
|
||||
<ClCompile Include="..\src\kissfft\kiss_fftr.c" />
|
||||
<ClCompile Include="..\src\rubberband-c.cpp" />
|
||||
<ClCompile Include="..\src\RubberBandStretcher.cpp" />
|
||||
<ClCompile Include="..\src\speex\resample.c" />
|
||||
<ClCompile Include="..\src\StretchCalculator.cpp" />
|
||||
<ClCompile Include="..\src\StretcherChannelData.cpp" />
|
||||
<ClCompile Include="..\src\StretcherImpl.cpp" />
|
||||
<ClCompile Include="..\src\StretcherProcess.cpp" />
|
||||
<ClCompile Include="..\src\system\Allocators.cpp" />
|
||||
<ClCompile Include="..\src\system\sysutils.cpp" />
|
||||
<ClCompile Include="..\src\system\Thread.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,13 +21,20 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBANDSTRETCHER_H_
|
||||
#define _RUBBERBANDSTRETCHER_H_
|
||||
#ifndef RUBBERBAND_STRETCHER_H
|
||||
#define RUBBERBAND_STRETCHER_H
|
||||
|
||||
#define RUBBERBAND_VERSION "1.9.0"
|
||||
#define RUBBERBAND_VERSION "1.9.1"
|
||||
#define RUBBERBAND_API_MAJOR_VERSION 2
|
||||
#define RUBBERBAND_API_MINOR_VERSION 6
|
||||
|
||||
#undef RUBBERBAND_DLLEXPORT
|
||||
#ifdef _MSC_VER
|
||||
#define RUBBERBAND_DLLEXPORT __declspec(dllexport)
|
||||
#else
|
||||
#define RUBBERBAND_DLLEXPORT
|
||||
#endif
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <cstddef>
|
||||
@@ -60,7 +67,8 @@
|
||||
namespace RubberBand
|
||||
{
|
||||
|
||||
class RubberBandStretcher
|
||||
class RUBBERBAND_DLLEXPORT
|
||||
RubberBandStretcher
|
||||
{
|
||||
public:
|
||||
/**
|
||||
@@ -178,7 +186,7 @@ public:
|
||||
* one processing thread per audio channel in offline mode if
|
||||
* the stretcher is able to determine that more than one CPU is
|
||||
* available, and one thread only in realtime mode. This is the
|
||||
* defafult.
|
||||
* default.
|
||||
*
|
||||
* \li \c OptionThreadingNever - Never use more than one thread.
|
||||
*
|
||||
@@ -310,7 +318,7 @@ public:
|
||||
OptionPitchHighConsistency = 0x04000000,
|
||||
|
||||
OptionChannelsApart = 0x00000000,
|
||||
OptionChannelsTogether = 0x10000000,
|
||||
OptionChannelsTogether = 0x10000000
|
||||
|
||||
// n.b. Options is int, so we must stop before 0x80000000
|
||||
};
|
||||
@@ -456,7 +464,7 @@ public:
|
||||
/**
|
||||
* Change an OptionPitch configuration setting. This may be
|
||||
* called at any time in RealTime mode. It may not be called in
|
||||
* Offline mode (for which the transients option is fixed on
|
||||
* Offline mode (for which the pitch option is fixed on
|
||||
* construction).
|
||||
*/
|
||||
void setPitchOption(Options options);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,17 +21,24 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_C_API_H_
|
||||
#define _RUBBERBAND_C_API_H_
|
||||
#ifndef RUBBERBAND_C_API_H
|
||||
#define RUBBERBAND_C_API_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RUBBERBAND_VERSION "1.9.0"
|
||||
#define RUBBERBAND_VERSION "1.9.1"
|
||||
#define RUBBERBAND_API_MAJOR_VERSION 2
|
||||
#define RUBBERBAND_API_MINOR_VERSION 6
|
||||
|
||||
#undef RB_EXTERN
|
||||
#ifdef _MSC_VER
|
||||
#define RB_EXTERN extern __declspec(dllexport)
|
||||
#else
|
||||
#define RB_EXTERN extern
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This is a C-linkage interface to the Rubber Band time stretcher.
|
||||
*
|
||||
@@ -83,7 +90,7 @@ enum RubberBandOption {
|
||||
RubberBandOptionPitchHighConsistency = 0x04000000,
|
||||
|
||||
RubberBandOptionChannelsApart = 0x00000000,
|
||||
RubberBandOptionChannelsTogether = 0x10000000,
|
||||
RubberBandOptionChannelsTogether = 0x10000000
|
||||
};
|
||||
|
||||
typedef int RubberBandOptions;
|
||||
@@ -91,52 +98,54 @@ typedef int RubberBandOptions;
|
||||
struct RubberBandState_;
|
||||
typedef struct RubberBandState_ *RubberBandState;
|
||||
|
||||
extern RubberBandState rubberband_new(unsigned int sampleRate,
|
||||
RB_EXTERN RubberBandState rubberband_new(unsigned int sampleRate,
|
||||
unsigned int channels,
|
||||
RubberBandOptions options,
|
||||
double initialTimeRatio,
|
||||
double initialPitchScale);
|
||||
|
||||
extern void rubberband_delete(RubberBandState);
|
||||
RB_EXTERN void rubberband_delete(RubberBandState);
|
||||
|
||||
extern void rubberband_reset(RubberBandState);
|
||||
RB_EXTERN void rubberband_reset(RubberBandState);
|
||||
|
||||
extern void rubberband_set_time_ratio(RubberBandState, double ratio);
|
||||
extern void rubberband_set_pitch_scale(RubberBandState, double scale);
|
||||
RB_EXTERN void rubberband_set_time_ratio(RubberBandState, double ratio);
|
||||
RB_EXTERN void rubberband_set_pitch_scale(RubberBandState, double scale);
|
||||
|
||||
extern double rubberband_get_time_ratio(const RubberBandState);
|
||||
extern double rubberband_get_pitch_scale(const RubberBandState);
|
||||
RB_EXTERN double rubberband_get_time_ratio(const RubberBandState);
|
||||
RB_EXTERN double rubberband_get_pitch_scale(const RubberBandState);
|
||||
|
||||
extern unsigned int rubberband_get_latency(const RubberBandState);
|
||||
RB_EXTERN unsigned int rubberband_get_latency(const RubberBandState);
|
||||
|
||||
extern void rubberband_set_transients_option(RubberBandState, RubberBandOptions options);
|
||||
extern void rubberband_set_detector_option(RubberBandState, RubberBandOptions options);
|
||||
extern void rubberband_set_phase_option(RubberBandState, RubberBandOptions options);
|
||||
extern void rubberband_set_formant_option(RubberBandState, RubberBandOptions options);
|
||||
extern void rubberband_set_pitch_option(RubberBandState, RubberBandOptions options);
|
||||
RB_EXTERN void rubberband_set_transients_option(RubberBandState, RubberBandOptions options);
|
||||
RB_EXTERN void rubberband_set_detector_option(RubberBandState, RubberBandOptions options);
|
||||
RB_EXTERN void rubberband_set_phase_option(RubberBandState, RubberBandOptions options);
|
||||
RB_EXTERN void rubberband_set_formant_option(RubberBandState, RubberBandOptions options);
|
||||
RB_EXTERN void rubberband_set_pitch_option(RubberBandState, RubberBandOptions options);
|
||||
|
||||
extern void rubberband_set_expected_input_duration(RubberBandState, unsigned int samples);
|
||||
RB_EXTERN void rubberband_set_expected_input_duration(RubberBandState, unsigned int samples);
|
||||
|
||||
extern unsigned int rubberband_get_samples_required(const RubberBandState);
|
||||
RB_EXTERN unsigned int rubberband_get_samples_required(const RubberBandState);
|
||||
|
||||
extern void rubberband_set_max_process_size(RubberBandState, unsigned int samples);
|
||||
extern void rubberband_set_key_frame_map(RubberBandState, unsigned int keyframecount, unsigned int *from, unsigned int *to);
|
||||
RB_EXTERN void rubberband_set_max_process_size(RubberBandState, unsigned int samples);
|
||||
RB_EXTERN void rubberband_set_key_frame_map(RubberBandState, unsigned int keyframecount, unsigned int *from, unsigned int *to);
|
||||
|
||||
extern void rubberband_study(RubberBandState, const float *const *input, unsigned int samples, int final);
|
||||
extern void rubberband_process(RubberBandState, const float *const *input, unsigned int samples, int final);
|
||||
RB_EXTERN void rubberband_study(RubberBandState, const float *const *input, unsigned int samples, int final);
|
||||
RB_EXTERN void rubberband_process(RubberBandState, const float *const *input, unsigned int samples, int final);
|
||||
|
||||
extern int rubberband_available(const RubberBandState);
|
||||
extern unsigned int rubberband_retrieve(const RubberBandState, float *const *output, unsigned int samples);
|
||||
RB_EXTERN int rubberband_available(const RubberBandState);
|
||||
RB_EXTERN unsigned int rubberband_retrieve(const RubberBandState, float *const *output, unsigned int samples);
|
||||
|
||||
extern unsigned int rubberband_get_channel_count(const RubberBandState);
|
||||
RB_EXTERN unsigned int rubberband_get_channel_count(const RubberBandState);
|
||||
|
||||
extern void rubberband_calculate_stretch(RubberBandState);
|
||||
RB_EXTERN void rubberband_calculate_stretch(RubberBandState);
|
||||
|
||||
extern void rubberband_set_debug_level(RubberBandState, int level);
|
||||
extern void rubberband_set_default_debug_level(int level);
|
||||
RB_EXTERN void rubberband_set_debug_level(RubberBandState, int level);
|
||||
RB_EXTERN void rubberband_set_default_debug_level(int level);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef RB_EXTERN
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_STRETCH_CALCULATOR_H_
|
||||
#define _RUBBERBAND_STRETCH_CALCULATOR_H_
|
||||
#ifndef RUBBERBAND_STRETCH_CALCULATOR_H
|
||||
#define RUBBERBAND_STRETCH_CALCULATOR_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_STRETCHERCHANNELDATA_H_
|
||||
#define _RUBBERBAND_STRETCHERCHANNELDATA_H_
|
||||
#ifndef RUBBERBAND_STRETCHERCHANNELDATA_H
|
||||
#define RUBBERBAND_STRETCHERCHANNELDATA_H
|
||||
|
||||
#include "StretcherImpl.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_STRETCHERIMPL_H_
|
||||
#define _RUBBERBAND_STRETCHERIMPL_H_
|
||||
#ifndef RUBBERBAND_STRETCHERIMPL_H
|
||||
#define RUBBERBAND_STRETCHERIMPL_H
|
||||
|
||||
#include "rubberband/RubberBandStretcher.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _COMPOUND_AUDIO_CURVE_H_
|
||||
#define _COMPOUND_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_COMPOUND_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_COMPOUND_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
#include "PercussiveAudioCurve.h"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _CONSTANT_AUDIO_CURVE_H_
|
||||
#define _CONSTANT_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_CONSTANT_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_CONSTANT_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -58,14 +58,14 @@ HighFrequencyAudioCurve::processFloat(const float *R__ mag, int)
|
||||
double
|
||||
HighFrequencyAudioCurve::processDouble(const double *R__ mag, int)
|
||||
{
|
||||
float result = 0.0;
|
||||
double result = 0.0;
|
||||
|
||||
const int sz = m_lastPerceivedBin;
|
||||
|
||||
for (int n = 0; n <= sz; ++n) {
|
||||
result = result + mag[n] * n;
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _HIGHFREQUENCY_AUDIO_CURVE_H_
|
||||
#define _HIGHFREQUENCY_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_HIGHFREQUENCY_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_HIGHFREQUENCY_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _PERCUSSIVE_AUDIO_CURVE_H_
|
||||
#define _PERCUSSIVE_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_PERCUSSIVE_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_PERCUSSIVE_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _SILENT_AUDIO_CURVE_H_
|
||||
#define _SILENT_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_SILENT_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_SILENT_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _SPECTRALDIFFERENCE_AUDIO_CURVE_H_
|
||||
#define _SPECTRALDIFFERENCE_AUDIO_CURVE_H_
|
||||
#ifndef RUBBERBAND_SPECTRALDIFFERENCE_AUDIO_CURVE_H
|
||||
#define RUBBERBAND_SPECTRALDIFFERENCE_AUDIO_CURVE_H
|
||||
|
||||
#include "dsp/AudioCurveCalculator.h"
|
||||
#include "dsp/Window.h"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -23,6 +23,8 @@
|
||||
|
||||
#include "Profiler.h"
|
||||
|
||||
#include "system/Thread.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <set>
|
||||
#include <string>
|
||||
@@ -30,7 +32,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __MSVC__
|
||||
#ifdef _MSC_VER
|
||||
// Ugh --cc
|
||||
#define snprintf sprintf_s
|
||||
#endif
|
||||
@@ -45,9 +47,13 @@ Profiler::m_profiles;
|
||||
Profiler::WorstCallMap
|
||||
Profiler::m_worstCalls;
|
||||
|
||||
static Mutex profileMutex;
|
||||
|
||||
void
|
||||
Profiler::add(const char *id, float ms)
|
||||
{
|
||||
profileMutex.lock();
|
||||
|
||||
ProfileMap::iterator pmi = m_profiles.find(id);
|
||||
if (pmi != m_profiles.end()) {
|
||||
++pmi->second.first;
|
||||
@@ -62,6 +68,8 @@ Profiler::add(const char *id, float ms)
|
||||
} else {
|
||||
m_worstCalls[id] = ms;
|
||||
}
|
||||
|
||||
profileMutex.unlock();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -74,6 +82,8 @@ Profiler::dump()
|
||||
std::string
|
||||
Profiler::getReport()
|
||||
{
|
||||
profileMutex.lock();
|
||||
|
||||
static const int buflen = 256;
|
||||
char buffer[buflen];
|
||||
std::string report;
|
||||
@@ -167,6 +177,8 @@ Profiler::getReport()
|
||||
report += buffer;
|
||||
}
|
||||
|
||||
profileMutex.unlock();
|
||||
|
||||
return report;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _PROFILER_H_
|
||||
#define _PROFILER_H_
|
||||
#ifndef RUBBERBAND_PROFILER_H
|
||||
#define RUBBERBAND_PROFILER_H
|
||||
|
||||
//#define NO_TIMING 1
|
||||
//#define WANT_TIMING 1
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_RINGBUFFER_H_
|
||||
#define _RUBBERBAND_RINGBUFFER_H_
|
||||
#ifndef RUBBERBAND_RINGBUFFER_H
|
||||
#define RUBBERBAND_RINGBUFFER_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
@@ -524,4 +524,4 @@ RingBuffer<T>::zero(int n)
|
||||
|
||||
}
|
||||
|
||||
#endif // _RINGBUFFER_H_
|
||||
#endif // _RINGBUFFER_H
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,15 +21,15 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_SCAVENGER_H_
|
||||
#define _RUBBERBAND_SCAVENGER_H_
|
||||
#ifndef RUBBERBAND_SCAVENGER_H
|
||||
#define RUBBERBAND_SCAVENGER_H
|
||||
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <utility>
|
||||
#include <iostream>
|
||||
|
||||
#ifndef WIN32
|
||||
#ifndef _MSC_VER
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _AUDIO_CURVE_CALCULATOR_H_
|
||||
#define _AUDIO_CURVE_CALCULATOR_H_
|
||||
#ifndef RUBBERBAND_AUDIO_CURVE_CALCULATOR_H
|
||||
#define RUBBERBAND_AUDIO_CURVE_CALCULATOR_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -1851,7 +1851,7 @@ public:
|
||||
dbuf[i] = realIn[i];
|
||||
}
|
||||
fftw_execute(m_dplanf);
|
||||
v_convert(complexOut, (fft_double_type *)m_dpacked, sz + 2);
|
||||
v_convert(complexOut, (const fft_double_type *)m_dpacked, sz + 2);
|
||||
}
|
||||
|
||||
void forwardPolar(const double *R__ realIn, double *R__ magOut, double *R__ phaseOut) {
|
||||
@@ -1865,8 +1865,8 @@ public:
|
||||
dbuf[i] = realIn[i];
|
||||
}
|
||||
fftw_execute(m_dplanf);
|
||||
v_cartesian_interleaved_to_polar(magOut, phaseOut,
|
||||
(double *)m_dpacked, m_size/2+1);
|
||||
v_cartesian_interleaved_to_polar
|
||||
(magOut, phaseOut, (const fft_double_type *)m_dpacked, m_size/2+1);
|
||||
}
|
||||
|
||||
void forwardMagnitude(const double *R__ realIn, double *R__ magOut) {
|
||||
@@ -1880,11 +1880,8 @@ public:
|
||||
dbuf[i] = realIn[i];
|
||||
}
|
||||
fftw_execute(m_dplanf);
|
||||
const int hs = m_size/2;
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
magOut[i] = sqrt(m_dpacked[i][0] * m_dpacked[i][0] +
|
||||
m_dpacked[i][1] * m_dpacked[i][1]);
|
||||
}
|
||||
v_cartesian_interleaved_to_magnitudes
|
||||
(magOut, (const fft_double_type *)m_dpacked, m_size/2+1);
|
||||
}
|
||||
|
||||
void forward(const float *R__ realIn, float *R__ realOut, float *R__ imagOut) {
|
||||
@@ -1912,7 +1909,7 @@ public:
|
||||
fbuf[i] = realIn[i];
|
||||
}
|
||||
fftwf_execute(m_fplanf);
|
||||
v_convert(complexOut, (fft_float_type *)m_fpacked, sz + 2);
|
||||
v_convert(complexOut, (const fft_float_type *)m_fpacked, sz + 2);
|
||||
}
|
||||
|
||||
void forwardPolar(const float *R__ realIn, float *R__ magOut, float *R__ phaseOut) {
|
||||
@@ -1926,8 +1923,8 @@ public:
|
||||
fbuf[i] = realIn[i];
|
||||
}
|
||||
fftwf_execute(m_fplanf);
|
||||
v_cartesian_interleaved_to_polar(magOut, phaseOut,
|
||||
(float *)m_fpacked, m_size/2+1);
|
||||
v_cartesian_interleaved_to_polar
|
||||
(magOut, phaseOut, (fft_float_type *)m_fpacked, m_size/2+1);
|
||||
}
|
||||
|
||||
void forwardMagnitude(const float *R__ realIn, float *R__ magOut) {
|
||||
@@ -1941,11 +1938,8 @@ public:
|
||||
fbuf[i] = realIn[i];
|
||||
}
|
||||
fftwf_execute(m_fplanf);
|
||||
const int hs = m_size/2;
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
magOut[i] = sqrtf(m_fpacked[i][0] * m_fpacked[i][0] +
|
||||
m_fpacked[i][1] * m_fpacked[i][1]);
|
||||
}
|
||||
v_cartesian_interleaved_to_magnitudes
|
||||
(magOut, (const fft_float_type *)m_fpacked, m_size/2+1);
|
||||
}
|
||||
|
||||
void inverse(const double *R__ realIn, const double *R__ imagIn, double *R__ realOut) {
|
||||
@@ -1964,7 +1958,7 @@ public:
|
||||
|
||||
void inverseInterleaved(const double *R__ complexIn, double *R__ realOut) {
|
||||
if (!m_dplanf) initDouble();
|
||||
v_convert((double *)m_dpacked, complexIn, m_size + 2);
|
||||
v_convert((fft_double_type *)m_dpacked, complexIn, m_size + 2);
|
||||
fftw_execute(m_dplani);
|
||||
const int sz = m_size;
|
||||
fft_double_type *const R__ dbuf = m_dbuf;
|
||||
@@ -1978,14 +1972,8 @@ public:
|
||||
|
||||
void inversePolar(const double *R__ magIn, const double *R__ phaseIn, double *R__ realOut) {
|
||||
if (!m_dplanf) initDouble();
|
||||
const int hs = m_size/2;
|
||||
fftw_complex *const R__ dpacked = m_dpacked;
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
dpacked[i][0] = magIn[i] * cos(phaseIn[i]);
|
||||
}
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
dpacked[i][1] = magIn[i] * sin(phaseIn[i]);
|
||||
}
|
||||
v_polar_to_cartesian_interleaved
|
||||
((fft_double_type *)m_dpacked, magIn, phaseIn, m_size/2+1);
|
||||
fftw_execute(m_dplani);
|
||||
const int sz = m_size;
|
||||
fft_double_type *const R__ dbuf = m_dbuf;
|
||||
@@ -2034,7 +2022,7 @@ public:
|
||||
|
||||
void inverseInterleaved(const float *R__ complexIn, float *R__ realOut) {
|
||||
if (!m_fplanf) initFloat();
|
||||
v_copy((float *)m_fpacked, complexIn, m_size + 2);
|
||||
v_convert((fft_float_type *)m_fpacked, complexIn, m_size + 2);
|
||||
fftwf_execute(m_fplani);
|
||||
const int sz = m_size;
|
||||
fft_float_type *const R__ fbuf = m_fbuf;
|
||||
@@ -2048,14 +2036,8 @@ public:
|
||||
|
||||
void inversePolar(const float *R__ magIn, const float *R__ phaseIn, float *R__ realOut) {
|
||||
if (!m_fplanf) initFloat();
|
||||
const int hs = m_size/2;
|
||||
fftwf_complex *const R__ fpacked = m_fpacked;
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
fpacked[i][0] = magIn[i] * cosf(phaseIn[i]);
|
||||
}
|
||||
for (int i = 0; i <= hs; ++i) {
|
||||
fpacked[i][1] = magIn[i] * sinf(phaseIn[i]);
|
||||
}
|
||||
v_polar_to_cartesian_interleaved
|
||||
((fft_float_type *)m_fpacked, magIn, phaseIn, m_size/2+1);
|
||||
fftwf_execute(m_fplani);
|
||||
const int sz = m_size;
|
||||
fft_float_type *const R__ fbuf = m_fbuf;
|
||||
@@ -3258,6 +3240,7 @@ FFT::~FFT()
|
||||
void
|
||||
FFT::forward(const double *R__ realIn, double *R__ realOut, double *R__ imagOut)
|
||||
{
|
||||
Profiler profiler("FFT::forward");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
CHECK_NOT_NULL(imagOut);
|
||||
@@ -3267,6 +3250,7 @@ FFT::forward(const double *R__ realIn, double *R__ realOut, double *R__ imagOut)
|
||||
void
|
||||
FFT::forwardInterleaved(const double *R__ realIn, double *R__ complexOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardInterleaved");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(complexOut);
|
||||
d->forwardInterleaved(realIn, complexOut);
|
||||
@@ -3275,6 +3259,7 @@ FFT::forwardInterleaved(const double *R__ realIn, double *R__ complexOut)
|
||||
void
|
||||
FFT::forwardPolar(const double *R__ realIn, double *R__ magOut, double *R__ phaseOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardPolar");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(magOut);
|
||||
CHECK_NOT_NULL(phaseOut);
|
||||
@@ -3284,6 +3269,7 @@ FFT::forwardPolar(const double *R__ realIn, double *R__ magOut, double *R__ phas
|
||||
void
|
||||
FFT::forwardMagnitude(const double *R__ realIn, double *R__ magOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardMagnitude");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(magOut);
|
||||
d->forwardMagnitude(realIn, magOut);
|
||||
@@ -3292,6 +3278,7 @@ FFT::forwardMagnitude(const double *R__ realIn, double *R__ magOut)
|
||||
void
|
||||
FFT::forward(const float *R__ realIn, float *R__ realOut, float *R__ imagOut)
|
||||
{
|
||||
Profiler profiler("FFT::forward[float]");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
CHECK_NOT_NULL(imagOut);
|
||||
@@ -3301,6 +3288,7 @@ FFT::forward(const float *R__ realIn, float *R__ realOut, float *R__ imagOut)
|
||||
void
|
||||
FFT::forwardInterleaved(const float *R__ realIn, float *R__ complexOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardInterleaved[float]");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(complexOut);
|
||||
d->forwardInterleaved(realIn, complexOut);
|
||||
@@ -3309,6 +3297,7 @@ FFT::forwardInterleaved(const float *R__ realIn, float *R__ complexOut)
|
||||
void
|
||||
FFT::forwardPolar(const float *R__ realIn, float *R__ magOut, float *R__ phaseOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardPolar[float]");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(magOut);
|
||||
CHECK_NOT_NULL(phaseOut);
|
||||
@@ -3318,6 +3307,7 @@ FFT::forwardPolar(const float *R__ realIn, float *R__ magOut, float *R__ phaseOu
|
||||
void
|
||||
FFT::forwardMagnitude(const float *R__ realIn, float *R__ magOut)
|
||||
{
|
||||
Profiler profiler("FFT::forwardMagnitude[float]");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(magOut);
|
||||
d->forwardMagnitude(realIn, magOut);
|
||||
@@ -3326,6 +3316,7 @@ FFT::forwardMagnitude(const float *R__ realIn, float *R__ magOut)
|
||||
void
|
||||
FFT::inverse(const double *R__ realIn, const double *R__ imagIn, double *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverse");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(imagIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
@@ -3335,6 +3326,7 @@ FFT::inverse(const double *R__ realIn, const double *R__ imagIn, double *R__ rea
|
||||
void
|
||||
FFT::inverseInterleaved(const double *R__ complexIn, double *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverseInterleaved");
|
||||
CHECK_NOT_NULL(complexIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
d->inverseInterleaved(complexIn, realOut);
|
||||
@@ -3343,6 +3335,7 @@ FFT::inverseInterleaved(const double *R__ complexIn, double *R__ realOut)
|
||||
void
|
||||
FFT::inversePolar(const double *R__ magIn, const double *R__ phaseIn, double *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inversePolar");
|
||||
CHECK_NOT_NULL(magIn);
|
||||
CHECK_NOT_NULL(phaseIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
@@ -3352,6 +3345,7 @@ FFT::inversePolar(const double *R__ magIn, const double *R__ phaseIn, double *R_
|
||||
void
|
||||
FFT::inverseCepstral(const double *R__ magIn, double *R__ cepOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverseCepstral");
|
||||
CHECK_NOT_NULL(magIn);
|
||||
CHECK_NOT_NULL(cepOut);
|
||||
d->inverseCepstral(magIn, cepOut);
|
||||
@@ -3360,6 +3354,7 @@ FFT::inverseCepstral(const double *R__ magIn, double *R__ cepOut)
|
||||
void
|
||||
FFT::inverse(const float *R__ realIn, const float *R__ imagIn, float *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverse[float]");
|
||||
CHECK_NOT_NULL(realIn);
|
||||
CHECK_NOT_NULL(imagIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
@@ -3369,6 +3364,7 @@ FFT::inverse(const float *R__ realIn, const float *R__ imagIn, float *R__ realOu
|
||||
void
|
||||
FFT::inverseInterleaved(const float *R__ complexIn, float *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverseInterleaved[float]");
|
||||
CHECK_NOT_NULL(complexIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
d->inverseInterleaved(complexIn, realOut);
|
||||
@@ -3377,6 +3373,7 @@ FFT::inverseInterleaved(const float *R__ complexIn, float *R__ realOut)
|
||||
void
|
||||
FFT::inversePolar(const float *R__ magIn, const float *R__ phaseIn, float *R__ realOut)
|
||||
{
|
||||
Profiler profiler("FFT::inversePolar[float]");
|
||||
CHECK_NOT_NULL(magIn);
|
||||
CHECK_NOT_NULL(phaseIn);
|
||||
CHECK_NOT_NULL(realOut);
|
||||
@@ -3386,6 +3383,7 @@ FFT::inversePolar(const float *R__ magIn, const float *R__ phaseIn, float *R__ r
|
||||
void
|
||||
FFT::inverseCepstral(const float *R__ magIn, float *R__ cepOut)
|
||||
{
|
||||
Profiler profiler("FFT::inverseCepstral[float]");
|
||||
CHECK_NOT_NULL(magIn);
|
||||
CHECK_NOT_NULL(cepOut);
|
||||
d->inverseCepstral(magIn, cepOut);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_FFT_H_
|
||||
#define _RUBBERBAND_FFT_H_
|
||||
#ifndef RUBBERBAND_FFT_H
|
||||
#define RUBBERBAND_FFT_H
|
||||
|
||||
#include "system/sysutils.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _MOVING_MEDIAN_H_
|
||||
#define _MOVING_MEDIAN_H_
|
||||
#ifndef RUBBERBAND_MOVING_MEDIAN_H
|
||||
#define RUBBERBAND_MOVING_MEDIAN_H
|
||||
|
||||
#include "SampleFilter.h"
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -578,6 +578,7 @@ protected:
|
||||
int m_iinsize;
|
||||
int m_ioutsize;
|
||||
double m_prevRatio;
|
||||
bool m_ratioUnset;
|
||||
int m_debugLevel;
|
||||
};
|
||||
|
||||
@@ -590,6 +591,7 @@ D_SRC::D_SRC(Resampler::Quality quality, int channels, double,
|
||||
m_iinsize(0),
|
||||
m_ioutsize(0),
|
||||
m_prevRatio(1.0),
|
||||
m_ratioUnset(true),
|
||||
m_debugLevel(debugLevel)
|
||||
{
|
||||
if (m_debugLevel > 0) {
|
||||
@@ -680,7 +682,14 @@ D_SRC::resampleInterleaved(float *const R__ out,
|
||||
outcount = int(ceil(incount * ratio) + 5);
|
||||
}
|
||||
|
||||
if (ratio != m_prevRatio) {
|
||||
if (m_ratioUnset) {
|
||||
|
||||
// The first time we set a ratio, we want to do it directly
|
||||
src_set_ratio(m_src, ratio);
|
||||
m_ratioUnset = false;
|
||||
m_prevRatio = ratio;
|
||||
|
||||
} else if (ratio != m_prevRatio) {
|
||||
|
||||
// If we are processing a block of appreciable length, turn it
|
||||
// into two recursive calls, one for the short smoothing block
|
||||
@@ -736,6 +745,7 @@ void
|
||||
D_SRC::reset()
|
||||
{
|
||||
src_reset(m_src);
|
||||
m_ratioUnset = true;
|
||||
}
|
||||
|
||||
#endif /* HAVE_LIBSAMPLERATE */
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _SAMPLE_FILTER_H_
|
||||
#define _SAMPLE_FILTER_H_
|
||||
#ifndef RUBBERBAND_SAMPLE_FILTER_H
|
||||
#define RUBBERBAND_SAMPLE_FILTER_H
|
||||
|
||||
#include <cassert>
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_SINC_WINDOW_H_
|
||||
#define _RUBBERBAND_SINC_WINDOW_H_
|
||||
#ifndef RUBBERBAND_SINC_WINDOW_H
|
||||
#define RUBBERBAND_SINC_WINDOW_H
|
||||
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -21,8 +21,8 @@
|
||||
you must obtain a valid commercial licence before doing so.
|
||||
*/
|
||||
|
||||
#ifndef _RUBBERBAND_WINDOW_H_
|
||||
#define _RUBBERBAND_WINDOW_H_
|
||||
#ifndef RUBBERBAND_WINDOW_H
|
||||
#define RUBBERBAND_WINDOW_H
|
||||
|
||||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
@@ -329,7 +329,6 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_study(JNIEnv *env, jobject
|
||||
int channels = env->GetArrayLength(data);
|
||||
float **arr = allocate<float *>(channels);
|
||||
float **input = allocate<float *>(channels);
|
||||
int samples = 0;
|
||||
for (int c = 0; c < channels; ++c) {
|
||||
jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c);
|
||||
arr[c] = env->GetFloatArrayElements(cdata, 0);
|
||||
@@ -350,7 +349,6 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_process(JNIEnv *env, jobje
|
||||
int channels = env->GetArrayLength(data);
|
||||
float **arr = allocate<float *>(channels);
|
||||
float **input = allocate<float *>(channels);
|
||||
int samples = 0;
|
||||
for (int c = 0; c < channels; ++c) {
|
||||
jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(data, c);
|
||||
arr[c] = env->GetFloatArrayElements(cdata, 0);
|
||||
@@ -383,7 +381,7 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_retrieve(JNIEnv *env, jobj
|
||||
float **outbuf = allocate_channels<float>(channels, n);
|
||||
size_t retrieved = stretcher->retrieve(outbuf, n);
|
||||
|
||||
for (int c = 0; c < channels; ++c) {
|
||||
for (size_t c = 0; c < channels; ++c) {
|
||||
jfloatArray cdata = (jfloatArray)env->GetObjectArrayElement(output, c);
|
||||
env->SetFloatArrayRegion(cdata, offset, retrieved, outbuf[c]);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
Copyright (c) 2003-2004 Mark Borgerding
|
||||
Copyright (c) 2003-2010 Mark Borgerding . All rights reserved.
|
||||
|
||||
All rights reserved.
|
||||
KISS FFT is provided under:
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
Being under the terms of the BSD 3-clause "New" or "Revised" License,
|
||||
according with:
|
||||
|
||||
LICENSES/BSD-3-Clause
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
@@ -1,29 +1,25 @@
|
||||
/*
|
||||
Copyright (c) 2003-2004, Mark Borgerding
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef KISS_FFT_GUTS_H
|
||||
#define KISS_FFT_GUTS_H
|
||||
* Copyright (c) 2003-2010, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
/* kiss_fft.h
|
||||
defines kiss_fft_scalar as either short or a float type
|
||||
and defines
|
||||
typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */
|
||||
|
||||
#ifndef _kiss_fft_guts_h
|
||||
#define _kiss_fft_guts_h
|
||||
|
||||
#include "kiss_fft.h"
|
||||
#include "kiss_fft_log.h"
|
||||
#include <limits.h>
|
||||
|
||||
#define MAXFACTORS 32
|
||||
/* e.g. an fft of length 128 has 4 factors
|
||||
/* e.g. an fft of length 128 has 4 factors
|
||||
as far as kissfft is concerned
|
||||
4*4*4*2
|
||||
*/
|
||||
@@ -45,22 +41,23 @@ struct kiss_fft_state{
|
||||
C_ADDTO( res , a) : res += a
|
||||
* */
|
||||
#ifdef FIXED_POINT
|
||||
#include <stdint.h>
|
||||
#if (FIXED_POINT==32)
|
||||
# define FRACBITS 31
|
||||
# define SAMPPROD int64_t
|
||||
#define SAMP_MAX 2147483647
|
||||
#define SAMP_MAX INT32_MAX
|
||||
#define SAMP_MIN INT32_MIN
|
||||
#else
|
||||
# define FRACBITS 15
|
||||
# define SAMPPROD int32_t
|
||||
#define SAMP_MAX 32767
|
||||
# define SAMPPROD int32_t
|
||||
#define SAMP_MAX INT16_MAX
|
||||
#define SAMP_MIN INT16_MIN
|
||||
#endif
|
||||
|
||||
#define SAMP_MIN -SAMP_MAX
|
||||
|
||||
#if defined(CHECK_OVERFLOW)
|
||||
# define CHECK_OVERFLOW_OP(a,op,b) \
|
||||
if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
|
||||
fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); }
|
||||
if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \
|
||||
KISS_FFT_WARNING("overflow (%d " #op" %d) = %ld", (a),(b),(SAMPPROD)(a) op (SAMPPROD)(b)); }
|
||||
#endif
|
||||
|
||||
|
||||
@@ -74,11 +71,11 @@ struct kiss_fft_state{
|
||||
(m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0)
|
||||
|
||||
# define DIVSCALAR(x,k) \
|
||||
(x) = sround( smul( x, SAMP_MAX/k ) )
|
||||
(x) = sround( smul( x, SAMP_MAX/k ) )
|
||||
|
||||
# define C_FIXDIV(c,div) \
|
||||
do { DIVSCALAR( (c).r , div); \
|
||||
DIVSCALAR( (c).i , div); }while (0)
|
||||
do { DIVSCALAR( (c).r , div); \
|
||||
DIVSCALAR( (c).i , div); }while (0)
|
||||
|
||||
# define C_MULBYSCALAR( c, s ) \
|
||||
do{ (c).r = sround( smul( (c).r , s ) ) ;\
|
||||
@@ -102,28 +99,28 @@ struct kiss_fft_state{
|
||||
|
||||
#define C_ADD( res, a,b)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((a).r,+,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,+,(b).i)\
|
||||
(res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \
|
||||
CHECK_OVERFLOW_OP((a).r,+,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,+,(b).i)\
|
||||
(res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \
|
||||
}while(0)
|
||||
#define C_SUB( res, a,b)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((a).r,-,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,-,(b).i)\
|
||||
(res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \
|
||||
CHECK_OVERFLOW_OP((a).r,-,(b).r)\
|
||||
CHECK_OVERFLOW_OP((a).i,-,(b).i)\
|
||||
(res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \
|
||||
}while(0)
|
||||
#define C_ADDTO( res , a)\
|
||||
do { \
|
||||
CHECK_OVERFLOW_OP((res).r,+,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,+,(a).i)\
|
||||
(res).r += (a).r; (res).i += (a).i;\
|
||||
CHECK_OVERFLOW_OP((res).r,+,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,+,(a).i)\
|
||||
(res).r += (a).r; (res).i += (a).i;\
|
||||
}while(0)
|
||||
|
||||
#define C_SUBFROM( res , a)\
|
||||
do {\
|
||||
CHECK_OVERFLOW_OP((res).r,-,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,-,(a).i)\
|
||||
(res).r -= (a).r; (res).i -= (a).i; \
|
||||
CHECK_OVERFLOW_OP((res).r,-,(a).r)\
|
||||
CHECK_OVERFLOW_OP((res).i,-,(a).i)\
|
||||
(res).r -= (a).r; (res).i -= (a).i; \
|
||||
}while(0)
|
||||
|
||||
|
||||
@@ -138,18 +135,33 @@ struct kiss_fft_state{
|
||||
#else
|
||||
# define KISS_FFT_COS(phase) (kiss_fft_scalar) cos(phase)
|
||||
# define KISS_FFT_SIN(phase) (kiss_fft_scalar) sin(phase)
|
||||
# define HALF_OF(x) ((x)*.5)
|
||||
# define HALF_OF(x) ((x)*((kiss_fft_scalar).5))
|
||||
#endif
|
||||
|
||||
#define kf_cexp(x,phase) \
|
||||
do{ \
|
||||
(x)->r = KISS_FFT_COS(phase);\
|
||||
(x)->i = KISS_FFT_SIN(phase);\
|
||||
}while(0)
|
||||
do{ \
|
||||
(x)->r = KISS_FFT_COS(phase);\
|
||||
(x)->i = KISS_FFT_SIN(phase);\
|
||||
}while(0)
|
||||
|
||||
|
||||
/* a debugging function */
|
||||
#define pcpx(c)\
|
||||
fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) )
|
||||
KISS_FFT_DEBUG("%g + %gi\n",(double)((c)->r),(double)((c)->i))
|
||||
|
||||
|
||||
#ifdef KISS_FFT_USE_ALLOCA
|
||||
// define this to allow use of alloca instead of malloc for temporary buffers
|
||||
// Temporary buffers are used in two case:
|
||||
// 1. FFT sizes that have "bad" factors. i.e. not 2,3 and 5
|
||||
// 2. "in-place" FFTs. Notice the quotes, since kissfft does not really do an in-place transform.
|
||||
#include <alloca.h>
|
||||
#define KISS_FFT_TMP_ALLOC(nbytes) alloca(nbytes)
|
||||
#define KISS_FFT_TMP_FREE(ptr)
|
||||
#else
|
||||
#define KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes)
|
||||
#define KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr)
|
||||
#endif
|
||||
|
||||
#endif /* _kiss_fft_guts_h */
|
||||
|
||||
|
||||
@@ -1,16 +1,10 @@
|
||||
/*
|
||||
Copyright (c) 2003-2004, Mark Borgerding
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
* Copyright (c) 2003-2010, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
|
||||
#include "_kiss_fft_guts.h"
|
||||
@@ -18,21 +12,6 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
fixed or floating point complex numbers. It also delares the kf_ internal functions.
|
||||
*/
|
||||
|
||||
static kiss_fft_cpx *scratchbuf=NULL;
|
||||
static size_t nscratchbuf=0;
|
||||
static kiss_fft_cpx *tmpbuf=NULL;
|
||||
static size_t ntmpbuf=0;
|
||||
|
||||
#define CHECKBUF(buf,nbuf,n) \
|
||||
do { \
|
||||
if ( nbuf < (size_t)(n) ) {\
|
||||
free(buf); \
|
||||
buf = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx)*(n)); \
|
||||
nbuf = (size_t)(n); \
|
||||
} \
|
||||
}while(0)
|
||||
|
||||
|
||||
static void kf_bfly2(
|
||||
kiss_fft_cpx * Fout,
|
||||
const size_t fstride,
|
||||
@@ -69,6 +48,7 @@ static void kf_bfly4(
|
||||
const size_t m2=2*m;
|
||||
const size_t m3=3*m;
|
||||
|
||||
|
||||
tw3 = tw2 = tw1 = st->twiddles;
|
||||
|
||||
do {
|
||||
@@ -222,29 +202,34 @@ static void kf_bfly_generic(
|
||||
kiss_fft_cpx t;
|
||||
int Norig = st->nfft;
|
||||
|
||||
CHECKBUF(scratchbuf,nscratchbuf,p);
|
||||
kiss_fft_cpx * scratch = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC(sizeof(kiss_fft_cpx)*p);
|
||||
if (scratch == NULL){
|
||||
KISS_FFT_ERROR("Memory allocation failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
for ( u=0; u<m; ++u ) {
|
||||
k=u;
|
||||
for ( q1=0 ; q1<p ; ++q1 ) {
|
||||
scratchbuf[q1] = Fout[ k ];
|
||||
C_FIXDIV(scratchbuf[q1],p);
|
||||
scratch[q1] = Fout[ k ];
|
||||
C_FIXDIV(scratch[q1],p);
|
||||
k += m;
|
||||
}
|
||||
|
||||
k=u;
|
||||
for ( q1=0 ; q1<p ; ++q1 ) {
|
||||
int twidx=0;
|
||||
Fout[ k ] = scratchbuf[0];
|
||||
Fout[ k ] = scratch[0];
|
||||
for (q=1;q<p;++q ) {
|
||||
twidx += fstride * k;
|
||||
if (twidx>=Norig) twidx-=Norig;
|
||||
C_MUL(t,scratchbuf[q] , twiddles[twidx] );
|
||||
C_MUL(t,scratch[q] , twiddles[twidx] );
|
||||
C_ADDTO( Fout[ k ] ,t);
|
||||
}
|
||||
k += m;
|
||||
}
|
||||
}
|
||||
KISS_FFT_TMP_FREE(scratch);
|
||||
}
|
||||
|
||||
static
|
||||
@@ -262,6 +247,30 @@ void kf_work(
|
||||
const int m=*factors++; /* stage's fft length/p */
|
||||
const kiss_fft_cpx * Fout_end = Fout + p*m;
|
||||
|
||||
#ifdef _OPENMP
|
||||
// use openmp extensions at the
|
||||
// top-level (not recursive)
|
||||
if (fstride==1 && p<=5 && m!=1)
|
||||
{
|
||||
int k;
|
||||
|
||||
// execute the p different work units in different threads
|
||||
# pragma omp parallel for
|
||||
for (k=0;k<p;++k)
|
||||
kf_work( Fout +k*m, f+ fstride*in_stride*k,fstride*p,in_stride,factors,st);
|
||||
// all threads have joined by this point
|
||||
|
||||
switch (p) {
|
||||
case 2: kf_bfly2(Fout,fstride,st,m); break;
|
||||
case 3: kf_bfly3(Fout,fstride,st,m); break;
|
||||
case 4: kf_bfly4(Fout,fstride,st,m); break;
|
||||
case 5: kf_bfly5(Fout,fstride,st,m); break;
|
||||
default: kf_bfly_generic(Fout,fstride,st,m,p); break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (m==1) {
|
||||
do{
|
||||
*Fout = *f;
|
||||
@@ -269,6 +278,10 @@ void kf_work(
|
||||
}while(++Fout != Fout_end );
|
||||
}else{
|
||||
do{
|
||||
// recursive call:
|
||||
// DFT of size m*p performed by doing
|
||||
// p instances of smaller DFTs of size m,
|
||||
// each one takes a decimated version of the input
|
||||
kf_work( Fout , f, fstride*p, in_stride, factors,st);
|
||||
f += fstride*in_stride;
|
||||
}while( (Fout += m) != Fout_end );
|
||||
@@ -276,20 +289,21 @@ void kf_work(
|
||||
|
||||
Fout=Fout_beg;
|
||||
|
||||
// recombine the p smaller DFTs
|
||||
switch (p) {
|
||||
case 2: kf_bfly2(Fout,fstride,st,m); break;
|
||||
case 3: kf_bfly3(Fout,fstride,st,m); break;
|
||||
case 3: kf_bfly3(Fout,fstride,st,m); break;
|
||||
case 4: kf_bfly4(Fout,fstride,st,m); break;
|
||||
case 5: kf_bfly5(Fout,fstride,st,m); break;
|
||||
case 5: kf_bfly5(Fout,fstride,st,m); break;
|
||||
default: kf_bfly_generic(Fout,fstride,st,m,p); break;
|
||||
}
|
||||
}
|
||||
|
||||
/* facbuf is populated by p1,m1,p2,m2, ...
|
||||
where
|
||||
where
|
||||
p[i] * m[i] = m[i-1]
|
||||
m0 = n */
|
||||
static
|
||||
static
|
||||
void kf_factor(int n,int * facbuf)
|
||||
{
|
||||
int p=4;
|
||||
@@ -322,9 +336,11 @@ void kf_factor(int n,int * facbuf)
|
||||
* */
|
||||
kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem )
|
||||
{
|
||||
KISS_FFT_ALIGN_CHECK(mem)
|
||||
|
||||
kiss_fft_cfg st=NULL;
|
||||
size_t memneeded = sizeof(struct kiss_fft_state)
|
||||
+ sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/
|
||||
size_t memneeded = KISS_FFT_ALIGN_SIZE_UP(sizeof(struct kiss_fft_state)
|
||||
+ sizeof(kiss_fft_cpx)*(nfft-1)); /* twiddle factors*/
|
||||
|
||||
if ( lenmem==NULL ) {
|
||||
st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded );
|
||||
@@ -352,14 +368,27 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride)
|
||||
{
|
||||
if (fin == fout) {
|
||||
CHECKBUF(tmpbuf,ntmpbuf,st->nfft);
|
||||
//NOTE: this is not really an in-place FFT algorithm.
|
||||
//It just performs an out-of-place FFT into a temp buffer
|
||||
if (fout == NULL){
|
||||
KISS_FFT_ERROR("fout buffer NULL.");
|
||||
return;
|
||||
}
|
||||
|
||||
kiss_fft_cpx * tmpbuf = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC( sizeof(kiss_fft_cpx)*st->nfft);
|
||||
if (tmpbuf == NULL){
|
||||
KISS_FFT_ERROR("Memory allocation error.");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
kf_work(tmpbuf,fin,1,in_stride, st->factors,st);
|
||||
memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft);
|
||||
KISS_FFT_TMP_FREE(tmpbuf);
|
||||
}else{
|
||||
kf_work( fout, fin, 1,in_stride, st->factors,st );
|
||||
}
|
||||
@@ -371,17 +400,9 @@ void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
|
||||
}
|
||||
|
||||
|
||||
/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the
|
||||
buffers from CHECKBUF
|
||||
*/
|
||||
void kiss_fft_cleanup(void)
|
||||
{
|
||||
free(scratchbuf);
|
||||
scratchbuf = NULL;
|
||||
nscratchbuf=0;
|
||||
free(tmpbuf);
|
||||
tmpbuf=NULL;
|
||||
ntmpbuf=0;
|
||||
// nothing needed any more
|
||||
}
|
||||
|
||||
int kiss_fft_next_fast_size(int n)
|
||||
|
||||
@@ -1,12 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2010, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
#ifndef KISS_FFT_H
|
||||
#define KISS_FFT_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <memory.h>
|
||||
#ifndef __APPLE__
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
|
||||
// Define KISS_FFT_SHARED macro to properly export symbols
|
||||
#ifdef KISS_FFT_SHARED
|
||||
# ifdef _WIN32
|
||||
# ifdef KISS_FFT_BUILD
|
||||
# define KISS_FFT_API __declspec(dllexport)
|
||||
# else
|
||||
# define KISS_FFT_API __declspec(dllimport)
|
||||
# endif
|
||||
# else
|
||||
# define KISS_FFT_API __attribute__ ((visibility ("default")))
|
||||
# endif
|
||||
#else
|
||||
# define KISS_FFT_API
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -26,17 +46,32 @@ extern "C" {
|
||||
in the tools/ directory.
|
||||
*/
|
||||
|
||||
/* User may override KISS_FFT_MALLOC and/or KISS_FFT_FREE. */
|
||||
#ifdef USE_SIMD
|
||||
# include <xmmintrin.h>
|
||||
# define kiss_fft_scalar __m128
|
||||
#define KISS_FFT_MALLOC(nbytes) memalign(16,nbytes)
|
||||
#else
|
||||
#define KISS_FFT_MALLOC malloc
|
||||
#endif
|
||||
# ifndef KISS_FFT_MALLOC
|
||||
# define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16)
|
||||
# define KISS_FFT_ALIGN_CHECK(ptr)
|
||||
# define KISS_FFT_ALIGN_SIZE_UP(size) ((size + 15UL) & ~0xFUL)
|
||||
# endif
|
||||
# ifndef KISS_FFT_FREE
|
||||
# define KISS_FFT_FREE _mm_free
|
||||
# endif
|
||||
#else
|
||||
# define KISS_FFT_ALIGN_CHECK(ptr)
|
||||
# define KISS_FFT_ALIGN_SIZE_UP(size) (size)
|
||||
# ifndef KISS_FFT_MALLOC
|
||||
# define KISS_FFT_MALLOC malloc
|
||||
# endif
|
||||
# ifndef KISS_FFT_FREE
|
||||
# define KISS_FFT_FREE free
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef FIXED_POINT
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h>
|
||||
# if (FIXED_POINT == 32)
|
||||
# define kiss_fft_scalar int32_t
|
||||
# else
|
||||
@@ -79,7 +114,7 @@ typedef struct kiss_fft_state* kiss_fft_cfg;
|
||||
* buffer size in *lenmem.
|
||||
* */
|
||||
|
||||
kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem);
|
||||
kiss_fft_cfg KISS_FFT_API kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem);
|
||||
|
||||
/*
|
||||
* kiss_fft(cfg,in_out_buf)
|
||||
@@ -91,28 +126,32 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem)
|
||||
* Note that each element is complex and can be accessed like
|
||||
f[k].r and f[k].i
|
||||
* */
|
||||
void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
|
||||
void KISS_FFT_API kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
|
||||
|
||||
/*
|
||||
A more generic version of the above function. It reads its input from every Nth sample.
|
||||
* */
|
||||
void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
|
||||
void KISS_FFT_API kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
|
||||
|
||||
/* If kiss_fft_alloc allocated a buffer, it is one contiguous
|
||||
buffer and can be simply free()d when no longer needed*/
|
||||
#define kiss_fft_free free
|
||||
#define kiss_fft_free KISS_FFT_FREE
|
||||
|
||||
/*
|
||||
Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up
|
||||
your compiler output to call this before you exit.
|
||||
*/
|
||||
void kiss_fft_cleanup(void);
|
||||
void KISS_FFT_API kiss_fft_cleanup(void);
|
||||
|
||||
|
||||
/*
|
||||
* Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
|
||||
*/
|
||||
int kiss_fft_next_fast_size(int n);
|
||||
int KISS_FFT_API kiss_fft_next_fast_size(int n);
|
||||
|
||||
/* for real ffts, we need an even size */
|
||||
#define kiss_fftr_next_fast_size_real(n) \
|
||||
(kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
36
src/kissfft/kiss_fft_log.h
Normal file
36
src/kissfft/kiss_fft_log.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2010, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
#ifndef kiss_fft_log_h
|
||||
#define kiss_fft_log_h
|
||||
|
||||
#define ERROR 1
|
||||
#define WARNING 2
|
||||
#define INFO 3
|
||||
#define DEBUG 4
|
||||
|
||||
#define STRINGIFY(x) #x
|
||||
#define TOSTRING(x) STRINGIFY(x)
|
||||
|
||||
#if defined(NDEBUG)
|
||||
# define KISS_FFT_LOG_MSG(severity, ...) ((void)0)
|
||||
#else
|
||||
# define KISS_FFT_LOG_MSG(severity, ...) \
|
||||
fprintf(stderr, "[" #severity "] " __FILE__ ":" TOSTRING(__LINE__) " "); \
|
||||
fprintf(stderr, __VA_ARGS__); \
|
||||
fprintf(stderr, "\n")
|
||||
#endif
|
||||
|
||||
#define KISS_FFT_ERROR(...) KISS_FFT_LOG_MSG(ERROR, __VA_ARGS__)
|
||||
#define KISS_FFT_WARNING(...) KISS_FFT_LOG_MSG(WARNING, __VA_ARGS__)
|
||||
#define KISS_FFT_INFO(...) KISS_FFT_LOG_MSG(INFO, __VA_ARGS__)
|
||||
#define KISS_FFT_DEBUG(...) KISS_FFT_LOG_MSG(DEBUG, __VA_ARGS__)
|
||||
|
||||
|
||||
|
||||
#endif /* kiss_fft_log_h */
|
||||
@@ -1,16 +1,10 @@
|
||||
/*
|
||||
Copyright (c) 2003-2004, Mark Borgerding
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
* Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
* Copyright (c) 2003-2004, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
#include "kiss_fftr.h"
|
||||
#include "_kiss_fft_guts.h"
|
||||
@@ -19,25 +13,27 @@ struct kiss_fftr_state{
|
||||
kiss_fft_cfg substate;
|
||||
kiss_fft_cpx * tmpbuf;
|
||||
kiss_fft_cpx * super_twiddles;
|
||||
#ifdef USE_SIMD
|
||||
long pad;
|
||||
#endif
|
||||
#ifdef USE_SIMD
|
||||
void * pad;
|
||||
#endif
|
||||
};
|
||||
|
||||
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem)
|
||||
{
|
||||
KISS_FFT_ALIGN_CHECK(mem)
|
||||
|
||||
int i;
|
||||
kiss_fftr_cfg st = NULL;
|
||||
size_t subsize, memneeded;
|
||||
size_t subsize = 0, memneeded;
|
||||
|
||||
if (nfft & 1) {
|
||||
fprintf(stderr,"Real FFT optimization must be even.\n");
|
||||
KISS_FFT_ERROR("Real FFT optimization must be even.");
|
||||
return NULL;
|
||||
}
|
||||
nfft >>= 1;
|
||||
|
||||
kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize);
|
||||
memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 2);
|
||||
memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 3 / 2);
|
||||
|
||||
if (lenmem == NULL) {
|
||||
st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded);
|
||||
@@ -54,9 +50,9 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenme
|
||||
st->super_twiddles = st->tmpbuf + nfft;
|
||||
kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize);
|
||||
|
||||
for (i = 0; i < nfft; ++i) {
|
||||
for (i = 0; i < nfft/2; ++i) {
|
||||
double phase =
|
||||
-3.14159265358979323846264338327 * ((double) i / nfft + .5);
|
||||
-3.14159265358979323846264338327 * ((double) (i+1) / nfft + .5);
|
||||
if (inverse_fft)
|
||||
phase *= -1;
|
||||
kf_cexp (st->super_twiddles+i,phase);
|
||||
@@ -71,8 +67,8 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *fr
|
||||
kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc;
|
||||
|
||||
if ( st->substate->inverse) {
|
||||
fprintf(stderr,"kiss fft usage error: improper alloc\n");
|
||||
exit(1);
|
||||
KISS_FFT_ERROR("kiss fft usage error: improper alloc");
|
||||
return;/* The caller did not call the correct function */
|
||||
}
|
||||
|
||||
ncfft = st->substate->nfft;
|
||||
@@ -83,12 +79,12 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *fr
|
||||
* contains the sum of the even-numbered elements of the input time sequence
|
||||
* The imag part is the sum of the odd-numbered elements
|
||||
*
|
||||
* The sum of tdc.r and tdc.i is the sum of the input time sequence.
|
||||
* The sum of tdc.r and tdc.i is the sum of the input time sequence.
|
||||
* yielding DC of input time sequence
|
||||
* The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1...
|
||||
* The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1...
|
||||
* yielding Nyquist bin of input time sequence
|
||||
*/
|
||||
|
||||
|
||||
tdc.r = st->tmpbuf[0].r;
|
||||
tdc.i = st->tmpbuf[0].i;
|
||||
C_FIXDIV(tdc,2);
|
||||
@@ -96,14 +92,14 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *fr
|
||||
CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i);
|
||||
freqdata[0].r = tdc.r + tdc.i;
|
||||
freqdata[ncfft].r = tdc.r - tdc.i;
|
||||
#ifdef USE_SIMD
|
||||
#ifdef USE_SIMD
|
||||
freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0);
|
||||
#else
|
||||
freqdata[ncfft].i = freqdata[0].i = 0;
|
||||
#endif
|
||||
|
||||
for ( k=1;k <= ncfft/2 ; ++k ) {
|
||||
fpk = st->tmpbuf[k];
|
||||
fpk = st->tmpbuf[k];
|
||||
fpnk.r = st->tmpbuf[ncfft-k].r;
|
||||
fpnk.i = - st->tmpbuf[ncfft-k].i;
|
||||
C_FIXDIV(fpk,2);
|
||||
@@ -111,7 +107,7 @@ void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *fr
|
||||
|
||||
C_ADD( f1k, fpk , fpnk );
|
||||
C_SUB( f2k, fpk , fpnk );
|
||||
C_MUL( tw , f2k , st->super_twiddles[k]);
|
||||
C_MUL( tw , f2k , st->super_twiddles[k-1]);
|
||||
|
||||
freqdata[k].r = HALF_OF(f1k.r + tw.r);
|
||||
freqdata[k].i = HALF_OF(f1k.i + tw.i);
|
||||
@@ -126,8 +122,8 @@ void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *t
|
||||
int k, ncfft;
|
||||
|
||||
if (st->substate->inverse == 0) {
|
||||
fprintf (stderr, "kiss fft usage error: improper alloc\n");
|
||||
exit (1);
|
||||
KISS_FFT_ERROR("kiss fft usage error: improper alloc");
|
||||
return;/* The caller did not call the correct function */
|
||||
}
|
||||
|
||||
ncfft = st->substate->nfft;
|
||||
@@ -146,10 +142,10 @@ void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *t
|
||||
|
||||
C_ADD (fek, fk, fnkc);
|
||||
C_SUB (tmp, fk, fnkc);
|
||||
C_MUL (fok, tmp, st->super_twiddles[k]);
|
||||
C_MUL (fok, tmp, st->super_twiddles[k-1]);
|
||||
C_ADD (st->tmpbuf[k], fek, fok);
|
||||
C_SUB (st->tmpbuf[ncfft - k], fek, fok);
|
||||
#ifdef USE_SIMD
|
||||
#ifdef USE_SIMD
|
||||
st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0);
|
||||
#else
|
||||
st->tmpbuf[ncfft - k].i *= -1;
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2004, Mark Borgerding. All rights reserved.
|
||||
* This file is part of KISS FFT - https://github.com/mborgerding/kissfft
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
* See COPYING file for more information.
|
||||
*/
|
||||
|
||||
#ifndef KISS_FTR_H
|
||||
#define KISS_FTR_H
|
||||
|
||||
@@ -18,7 +26,7 @@ extern "C" {
|
||||
typedef struct kiss_fftr_state *kiss_fftr_cfg;
|
||||
|
||||
|
||||
kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
|
||||
kiss_fftr_cfg KISS_FFT_API kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem);
|
||||
/*
|
||||
nfft must be even
|
||||
|
||||
@@ -26,19 +34,19 @@ kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenm
|
||||
*/
|
||||
|
||||
|
||||
void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
|
||||
void KISS_FFT_API kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata);
|
||||
/*
|
||||
input timedata has nfft scalar points
|
||||
output freqdata has nfft/2+1 complex points
|
||||
*/
|
||||
|
||||
void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);
|
||||
void KISS_FFT_API kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata);
|
||||
/*
|
||||
input freqdata has nfft/2+1 complex points
|
||||
output timedata has nfft scalar points
|
||||
*/
|
||||
|
||||
#define kiss_fftr_free free
|
||||
#define kiss_fftr_free KISS_FFT_FREE
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
#ifndef _POMMIER_SSE_MATHFUN_H_
|
||||
#define _POMMIER_SSE_MATHFUN_H_
|
||||
#ifndef POMMIER_SSE_MATHFUN_H
|
||||
#define POMMIER_SSE_MATHFUN_H
|
||||
|
||||
/* SIMD (SSE1+MMX or SSE2) implementation of sin, cos, exp and log
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
@@ -90,10 +90,7 @@ static void *speex_alloc (int count, int size)
|
||||
#ifdef HAVE_IPP
|
||||
void *rv;
|
||||
#endif
|
||||
|
||||
// fprintf(stderr, "speex_alloc(%d,%d)\n", count, size);
|
||||
if (count * size < ALLOC_MINIMUM) {
|
||||
// fprintf(stderr, "upgrading count from %d to %d\n", count, ALLOC_MINIMUM / size);
|
||||
if (count * size < ALLOC_MINIMUM) {
|
||||
count = ALLOC_MINIMUM / size;
|
||||
}
|
||||
|
||||
@@ -105,9 +102,7 @@ static void *speex_alloc (int count, int size)
|
||||
} else {
|
||||
rv = ippsMalloc_8u(count * size);
|
||||
}
|
||||
// fprintf(stderr, "allocated at %p; now setting %d bytes to zero\n", rv, count*size);
|
||||
memset(rv, count * size, 0);
|
||||
// fprintf(stderr, "returning %p\n",rv);
|
||||
memset(rv, 0, count * size);
|
||||
return rv;
|
||||
#else
|
||||
return calloc(count, size);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/*
|
||||
Rubber Band Library
|
||||
An audio time-stretching and pitch-shifting library.
|
||||
Copyright 2007-2020 Particular Programs Ltd.
|
||||
Copyright 2007-2021 Particular Programs Ltd.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License as
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user