Merge from branch meson

This commit is contained in:
Chris Cannam
2021-03-08 11:09:22 +00:00
47 changed files with 1263 additions and 6486 deletions

View File

@@ -1,18 +1,22 @@
image:
- Visual Studio 2019
configuration: configuration:
- Release - Release
platform: platform:
- x86
- x64 - x64
install: install:
- cinst wget - cinst wget
- c:\ProgramData\chocolatey\bin\wget.exe http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28-w32-setup.exe - cinst meson
- c:\ProgramData\chocolatey\bin\wget.exe http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28-w64-setup.exe - cinst libsndfile
- ps: .\libsndfile-1.0.28-w32-setup.exe /silent /sp- /norestart
- ps: .\libsndfile-1.0.28-w64-setup.exe /silent /sp- /norestart
build_script: 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

View File

@@ -1,4 +1,4 @@
image: ubuntu/18.04 image: ubuntu/20.04
packages: packages:
- pkg-config - pkg-config
- libsamplerate0-dev - libsamplerate0-dev
@@ -6,15 +6,18 @@ packages:
- libfftw3-dev - libfftw3-dev
- ladspa-sdk - ladspa-sdk
- vamp-plugin-sdk - vamp-plugin-sdk
- meson
- ninja-build
sources: sources:
- hg+https://hg.sr.ht/~breakfastquay/rubberband - hg+https://hg.sr.ht/~breakfastquay/rubberband
tasks: tasks:
- setup: | - setup: |
cd rubberband cd rubberband
./configure meson build
- build: | - build: |
cd rubberband cd rubberband
make ninja -C build
./otherbuilds/check.sh
triggers: triggers:
- action: email - action: email
condition: always condition: always

View File

@@ -2,9 +2,7 @@ name: macOS and iOS CI
on: on:
push: push:
branches: [ master ]
pull_request: pull_request:
branches: [ master ]
jobs: jobs:
build: build:
@@ -14,9 +12,16 @@ jobs:
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: deps - name: deps
run: brew install libsndfile vamp-plugin-sdk 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 - name: make macos
run: make -f Makefile.macos clean library program vamp run: ninja -C build_macos
- name: make ios - name: make ios
run: make -f Makefile.ios clean all run: ninja -C build_ios
- name: check otherbuilds
run: otherbuilds/check.sh

View File

@@ -18,7 +18,10 @@ doc/html
*.rej *.rej
cov-int cov-int
*~ *~
re:^x64/Debug/ x64/Debug/
re:^x64/Release/ x64/Release/
re:^Release/ Release/
re:^Debug/ Debug/
build
build_*
UpgradeLog*

View File

@@ -1,27 +0,0 @@
dist:
- trusty
language:
- cpp
sudo:
- false
os:
- osx
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.macos && make -f Makefile.ios clean && make -f Makefile.ios ; else ./configure && make ; fi

396
README.md
View File

@@ -43,9 +43,9 @@ that licence. Please refer to your licence agreement for more details.
Rubber Band includes a .NET interface generously contributed by Rubber Band includes a .NET interface generously contributed by
Jonathan Gilbert under a BSD-like licence. The files in the Jonathan Gilbert under a BSD-like licence. The files in the
rubberband-dll and rubberband-sharp directories fall under this dotnet/rubberband-dll and dotnet/rubberband-sharp directories fall
licence. If you make use of this interface, please ensure you comply under this licence. If you make use of this interface, please ensure
with the terms of its licence. you comply with the terms of its licence.
Rubber Band may link with other libraries or be compiled with other Rubber Band may link with other libraries or be compiled with other
source code, depending on its build configuration. It is your source code, depending on its build configuration. It is your
@@ -70,13 +70,13 @@ our knowledge. See also the end of this README for detailed terms.
2. Using the Rubber Band command-line tool 2. Using the Rubber Band command-line tool
3. Using the Rubber Band Library 3. Using the Rubber Band Library
4. Compiling Rubber Band 4. Compiling Rubber Band
a. FFT and resampler selection a. Building on Linux
b. Other supported #defines b. Building on macOS
c. Building on Linux c. Building for iOS
d. Building on macOS d. Building on Windows
e. Building for iOS e. Building for Android and Java integration
f. Building on Windows with Visual C++ f. FFT and resampler selection
g. Building for Android and Java integration g. Other supported #defines
5. Copyright notes for bundled libraries 5. Copyright notes for bundled libraries
@@ -109,11 +109,15 @@ Rubber Band consists of:
The Rubber Band command-line tool builds as bin/rubberband. The basic The Rubber Band command-line tool builds as bin/rubberband. The basic
incantation is incantation is
```
$ rubberband -t <timeratio> -p <pitchratio> <infile.wav> <outfile.wav> $ rubberband -t <timeratio> -p <pitchratio> <infile.wav> <outfile.wav>
```
For example, For example,
```
$ rubberband -t 1.5 -p 2.0 test.wav output.wav $ rubberband -t 1.5 -p 2.0 test.wav output.wav
```
stretches the file test.wav to 50% longer than its original duration, 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. shifts it up in pitch by one octave, and writes the output to output.wav.
@@ -138,7 +142,7 @@ documented separately from the C++ header. You should include only
one of the two headers, not both. one of the two headers, not both.
A .NET interface is also included, contributed by Jonathan Gilbert; 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`) 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 provides a good example of how to use Rubber Band in offline mode; the
@@ -156,19 +160,199 @@ acquired a commercial licence from the author.
## 4. Compiling the Rubber Band Library ## 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 native architecture of the build machine:
```
$ meson build && ninja -C build
```
To build for Intel (x86_64) regardless of the native architecture:
```
$ meson build --cross-file cross/macos-x86_64.txt && ninja -C build
```
To build for Apple Silicon (arm64) regardless of the native
architecture:
```
$ meson build --cross-file cross/macos-arm64.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.
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 Rubber Band requires additional library code for FFT calculation and
resampling. Several libraries are supported. The selection is resampling. Several libraries are supported. The selection is
controlled using preprocessor flags at compile time, as detailed in controlled (in Meson) using `-D` options and (in the code itself)
the tables below. 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 At least one resampler implementation and one FFT implementation must
`HAVE_`; flags that select from the bundled options begin with `USE_`. be enabled. It is technically possible to enable more than one, but
it's confusing and not often useful.
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.
If you are building this software using one of the bundled library If you are building this software using one of the bundled library
options (Speex or KissFFT), please be sure to review the terms for options (Speex or KissFFT), please be sure to review the terms for
@@ -178,44 +362,42 @@ applicable.
#### FFT libraries supported #### 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 FFTW3 -Dfft=fftw -DHAVE_FFTW3 GPL.
Rubber Band commercial licence. Define
USE_IPP_STATIC as well to build with static
IPP libraries.
KissFFT -DUSE_KISSFFT Bundled, can be distributed with either the Intel IPP -Dfft=ipp -DHAVE_IPP Proprietary, can only be used with
Rubber Band GPL or commercial licence. Rubber Band commercial licence.
Single-precision. Slower than the above
options.
``` ```
#### Resampler libraries supported #### 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. libsamplerate -DHAVE_LIBSAMPLERATE
This is the preferred choice in almost -Dresampler=libsamplerate Best choice in most cases.
all cases.
libresample -DHAVE_LIBRESAMPLE LGPL. Speex -DUSE_SPEEX
-Dresampler=speex Bundled, can be distributed with
Speex -DUSE_SPEEX Bundled, can be distributed with either the either the Rubber Band GPL or
Rubber Band GPL or commercial licence. commercial licence.
``` ```
### 4b. Other supported #defines ### 4g. Other supported #defines
Other symbols you may define at compile time are as follows. (Usually Other known preprocessor symbols are as follows. (Usually the supplied
the supplied build files will handle these for you.) build files will handle these for you.)
-DLACK_BAD_ALLOC -DLACK_BAD_ALLOC
Define on systems lacking std::bad_alloc in the C++ library. Define on systems lacking std::bad_alloc in the C++ library.
@@ -250,132 +432,6 @@ the supplied build files will handle these for you.)
for mobile architectures. 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
Two Makefiles for macOS are provided, as `Makefile.macos` and
`Makefile.macos-universal`. `Makefile.macos` will build for your
native machine architecture; `Makefile.macos-universal` will build a
universal binary with both x86_64 and arm64 slices. The latter
requires macOS 11+, although the resulting binaries should work with
macOS 10.7 or newer if all the dependent libraries are also built
appropriately. You will also need the Xcode command-line tools
installed.
Adjust your selected 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.macos library` in a terminal window to
build.
(You probably don't want to use the configure script on macOS -- just
use your preferred Makefile 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 (compiling on macOS) 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 ## 5. Copyright notes for bundled libraries
### 5a. Speex ### 5a. Speex

5635
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,80 +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
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, [], [AC_MSG_ERROR([LADSPA header not found
Consider installing the LADSPA SDK or configure with --disable-ladspa])])
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_CONFIG_FILES([Makefile])
AC_OUTPUT

19
cross/ios-simulator.txt Normal file
View 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
View 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

20
cross/macos-arm64.txt Normal file
View File

@@ -0,0 +1,20 @@
[host_machine]
cpu_family = 'aarch64'
cpu = 'aarch64'
system = 'darwin'
endian = 'little'
[properties]
needs_exe_wrapper = false
[binaries]
c = 'cc'
cpp = 'c++'
strip = 'strip'
[built-in options]
c_args = ['-arch', 'arm64']
cpp_args = ['-arch', 'arm64']
cpp_link_args = ['-arch', 'arm64']

20
cross/macos-universal.txt Normal file
View File

@@ -0,0 +1,20 @@
[host_machine]
cpu_family = 'aarch64'
cpu = 'aarch64'
system = 'darwin'
endian = 'little'
[properties]
needs_exe_wrapper = false
[binaries]
c = 'cc'
cpp = 'c++'
strip = 'strip'
[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']

19
cross/macos-x86_64.txt Normal file
View File

@@ -0,0 +1,19 @@
[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'
[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
View File

@@ -0,0 +1,9 @@
[properties]
needs_exe_wrapper = false
[binaries]
c = 'cl'
cpp = 'cl'

9
cross/windows-clang.txt Normal file
View File

@@ -0,0 +1,9 @@
[properties]
needs_exe_wrapper = false
[binaries]
c = 'clang'
cpp = 'clang++'

41
dotnet/README.md Normal file
View 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.
```

View File

@@ -22,32 +22,33 @@
<ProjectGuid>{32C11C5C-3D27-4E57-B72C-161A48AAA95E}</ProjectGuid> <ProjectGuid>{32C11C5C-3D27-4E57-B72C-161A48AAA95E}</ProjectGuid>
<RootNamespace>rubberbanddll</RootNamespace> <RootNamespace>rubberbanddll</RootNamespace>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType> <ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
@@ -91,7 +92,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@@ -109,7 +110,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;_DEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@@ -129,7 +130,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>WIN32;NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@@ -151,7 +152,7 @@
<SDLCheck>true</SDLCheck> <SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>NDEBUG;RUBBERBANDDLL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>$(SolutionDir)\..\rubberband;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@@ -180,4 +181,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@@ -22,23 +22,24 @@
<ProjectGuid>{020CEB11-EF4E-400E-971D-A35DB69D7CF9}</ProjectGuid> <ProjectGuid>{020CEB11-EF4E-400E-971D-A35DB69D7CF9}</ProjectGuid>
<RootNamespace>rubberband-library</RootNamespace> <RootNamespace>rubberband-library</RootNamespace>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
@@ -63,6 +64,7 @@
<OutDir>Debug\</OutDir> <OutDir>Debug\</OutDir>
<IntDir>Debug\</IntDir> <IntDir>Debug\</IntDir>
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild> <EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
<SourcePath>$(SourcePath)</SourcePath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild> <EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
@@ -74,7 +76,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <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> <PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild> <MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -88,7 +90,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <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> <PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@@ -106,7 +108,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers> <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> <PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -124,7 +126,7 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers> <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> <PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck> <BufferSecurityCheck>false</BufferSecurityCheck>
@@ -137,59 +139,59 @@
</ClCompile> </ClCompile>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="rubberband\rubberband-c.h" /> <ClInclude Include="..\rubberband\rubberband-c.h" />
<ClInclude Include="rubberband\RubberBandStretcher.h" /> <ClInclude Include="..\rubberband\RubberBandStretcher.h" />
<ClInclude Include="src\audiocurves\CompoundAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\CompoundAudioCurve.h" />
<ClInclude Include="src\audiocurves\ConstantAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\ConstantAudioCurve.h" />
<ClInclude Include="src\audiocurves\HighFrequencyAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\HighFrequencyAudioCurve.h" />
<ClInclude Include="src\audiocurves\PercussiveAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\PercussiveAudioCurve.h" />
<ClInclude Include="src\audiocurves\SilentAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\SilentAudioCurve.h" />
<ClInclude Include="src\audiocurves\SpectralDifferenceAudioCurve.h" /> <ClInclude Include="..\src\audiocurves\SpectralDifferenceAudioCurve.h" />
<ClInclude Include="src\base\Profiler.h" /> <ClInclude Include="..\src\base\Profiler.h" />
<ClInclude Include="src\base\RingBuffer.h" /> <ClInclude Include="..\src\base\RingBuffer.h" />
<ClInclude Include="src\base\Scavenger.h" /> <ClInclude Include="..\src\base\Scavenger.h" />
<ClInclude Include="src\dsp\AudioCurveCalculator.h" /> <ClInclude Include="..\src\dsp\AudioCurveCalculator.h" />
<ClInclude Include="src\dsp\FFT.h" /> <ClInclude Include="..\src\dsp\FFT.h" />
<ClInclude Include="src\dsp\MovingMedian.h" /> <ClInclude Include="..\src\dsp\MovingMedian.h" />
<ClInclude Include="src\dsp\Resampler.h" /> <ClInclude Include="..\src\dsp\Resampler.h" />
<ClInclude Include="src\dsp\SampleFilter.h" /> <ClInclude Include="..\src\dsp\SampleFilter.h" />
<ClInclude Include="src\dsp\SincWindow.h" /> <ClInclude Include="..\src\dsp\SincWindow.h" />
<ClInclude Include="src\dsp\Window.h" /> <ClInclude Include="..\src\dsp\Window.h" />
<ClInclude Include="src\float_cast\float_cast.h" /> <ClInclude Include="..\src\float_cast\float_cast.h" />
<ClInclude Include="src\speex\speex_resampler.h" /> <ClInclude Include="..\src\speex\speex_resampler.h" />
<ClInclude Include="src\StretchCalculator.h" /> <ClInclude Include="..\src\StretchCalculator.h" />
<ClInclude Include="src\StretcherChannelData.h" /> <ClInclude Include="..\src\StretcherChannelData.h" />
<ClInclude Include="src\StretcherImpl.h" /> <ClInclude Include="..\src\StretcherImpl.h" />
<ClInclude Include="src\system\Allocators.h" /> <ClInclude Include="..\src\system\Allocators.h" />
<ClInclude Include="src\system\sysutils.h" /> <ClInclude Include="..\src\system\sysutils.h" />
<ClInclude Include="src\system\Thread.h" /> <ClInclude Include="..\src\system\Thread.h" />
<ClInclude Include="src\system\VectorOps.h" /> <ClInclude Include="..\src\system\VectorOps.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="src\audiocurves\CompoundAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\CompoundAudioCurve.cpp" />
<ClCompile Include="src\audiocurves\ConstantAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\ConstantAudioCurve.cpp" />
<ClCompile Include="src\audiocurves\HighFrequencyAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\HighFrequencyAudioCurve.cpp" />
<ClCompile Include="src\audiocurves\PercussiveAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\PercussiveAudioCurve.cpp" />
<ClCompile Include="src\audiocurves\SilentAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\SilentAudioCurve.cpp" />
<ClCompile Include="src\audiocurves\SpectralDifferenceAudioCurve.cpp" /> <ClCompile Include="..\src\audiocurves\SpectralDifferenceAudioCurve.cpp" />
<ClCompile Include="src\base\Profiler.cpp" /> <ClCompile Include="..\src\base\Profiler.cpp" />
<ClCompile Include="src\dsp\AudioCurveCalculator.cpp" /> <ClCompile Include="..\src\dsp\AudioCurveCalculator.cpp" />
<ClCompile Include="src\dsp\FFT.cpp" /> <ClCompile Include="..\src\dsp\FFT.cpp" />
<ClCompile Include="src\dsp\Resampler.cpp" /> <ClCompile Include="..\src\dsp\Resampler.cpp" />
<ClCompile Include="src\kissfft\kiss_fft.c" /> <ClCompile Include="..\src\kissfft\kiss_fft.c" />
<ClCompile Include="src\kissfft\kiss_fftr.c" /> <ClCompile Include="..\src\kissfft\kiss_fftr.c" />
<ClCompile Include="src\rubberband-c.cpp" /> <ClCompile Include="..\src\rubberband-c.cpp" />
<ClCompile Include="src\RubberBandStretcher.cpp" /> <ClCompile Include="..\src\RubberBandStretcher.cpp" />
<ClCompile Include="src\speex\resample.c" /> <ClCompile Include="..\src\speex\resample.c" />
<ClCompile Include="src\StretchCalculator.cpp" /> <ClCompile Include="..\src\StretchCalculator.cpp" />
<ClCompile Include="src\StretcherChannelData.cpp" /> <ClCompile Include="..\src\StretcherChannelData.cpp" />
<ClCompile Include="src\StretcherImpl.cpp" /> <ClCompile Include="..\src\StretcherImpl.cpp" />
<ClCompile Include="src\StretcherProcess.cpp" /> <ClCompile Include="..\src\StretcherProcess.cpp" />
<ClCompile Include="src\system\Allocators.cpp" /> <ClCompile Include="..\src\system\Allocators.cpp" />
<ClCompile Include="src\system\sysutils.cpp" /> <ClCompile Include="..\src\system\sysutils.cpp" />
<ClCompile Include="src\system\Thread.cpp" /> <ClCompile Include="..\src\system\Thread.cpp" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@@ -1,15 +1,10 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14 # Visual Studio Version 16
VisualStudioVersion = 14.0.25420.1 VisualStudioVersion = 16.0.31005.135
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-library", "rubberband-library.vcxproj", "{020CEB11-EF4E-400E-971D-A35DB69D7CF9}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-library", "rubberband-library.vcxproj", "{020CEB11-EF4E-400E-971D-A35DB69D7CF9}"
EndProject 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}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rubberband-dll", "rubberband-dll.vcxproj", "{32C11C5C-3D27-4E57-B72C-161A48AAA95E}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{020CEB11-EF4E-400E-971D-A35DB69D7CF9} = {020CEB11-EF4E-400E-971D-A35DB69D7CF9} {020CEB11-EF4E-400E-971D-A35DB69D7CF9} = {020CEB11-EF4E-400E-971D-A35DB69D7CF9}
@@ -30,32 +25,26 @@ Global
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution 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.ActiveCfg = Debug|x64
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x64.Build.0 = 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.ActiveCfg = Debug|Win32
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Debug|x86.Build.0 = 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.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.ActiveCfg = Release|x64
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x64.Build.0 = 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.ActiveCfg = Release|Win32
{020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x86.Build.0 = Release|Win32 {020CEB11-EF4E-400E-971D-A35DB69D7CF9}.Release|x86.Build.0 = Release|Win32
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|Any CPU.ActiveCfg = Debug|Win32 {32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|Any CPU.ActiveCfg = Debug|x64
{06838307-FEAA-4DB0-8E08-AF19698E9C40}.Debug|x64.ActiveCfg = Debug|x64 {32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|Any CPU.Build.0 = 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|x64.ActiveCfg = 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|x64.Build.0 = Debug|x64
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Debug|x86.ActiveCfg = Debug|Win32 {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}.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.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.ActiveCfg = Release|x64
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x64.Build.0 = Release|x64 {32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x64.Build.0 = Release|x64
{32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x86.ActiveCfg = Release|Win32 {32C11C5C-3D27-4E57-B72C-161A48AAA95E}.Release|x86.ActiveCfg = Release|Win32
@@ -76,4 +65,7 @@ Global
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3CFE825B-BD44-4909-B002-AFE8DA45D614}
EndGlobalSection
EndGlobal EndGlobal

View File

@@ -54,6 +54,7 @@ using RubberBand::gettimeofday;
#ifdef _MSC_VER #ifdef _MSC_VER
using RubberBand::usleep; using RubberBand::usleep;
#define strdup _strdup
#endif #endif
double tempo_convert(const char *str) double tempo_convert(const char *str)

541
meson.build Normal file
View File

@@ -0,0 +1,541 @@
project(
'Rubber Band Library',
'c', 'cpp',
version: '1.9.0',
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.2'
system = build_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
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')
# 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
extra_include_args = []
foreach d: get_option('extra_include_dirs')
extra_include_args += [ '-I' + d ]
endforeach
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'
# 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'
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
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_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
View 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.')

View File

@@ -1,7 +1,8 @@
CXX := clang++ CXX := clang++
CC := clang CC := clang
OPTFLAGS := -ffast-math -freciprocal-math -O3 -ftree-vectorize
OPTFLAGS := -DNDEBUG -ffast-math -freciprocal-math -O3 -ftree-vectorize
# For the device # 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 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 AR := ar
LIPO := lipo LIPO := lipo
MKDIR := mkdir MKDIR := mkdir -p
LIBNAME := librubberband LIBNAME := librubberband
@@ -28,9 +29,7 @@ STATIC_TARGET_DEV := lib/$(LIBNAME).dev.a
STATIC_TARGET_SIM := lib/$(LIBNAME).sim.a STATIC_TARGET_SIM := lib/$(LIBNAME).sim.a
default: lib $(STATIC_TARGET) default: lib $(STATIC_TARGET)
all: lib $(STATIC_TARGET) all: lib $(STATIC_TARGET)
static: lib $(STATIC_TARGET) static: lib $(STATIC_TARGET)
PUBLIC_INCLUDES := \ PUBLIC_INCLUDES := \
@@ -137,9 +136,9 @@ distclean: clean
rm -f $(STATIC_TARGET_DEV) $(STATIC_TARGET_SIM) rm -f $(STATIC_TARGET_DEV) $(STATIC_TARGET_SIM)
depend: depend:
touch Makefile.dev_depends Makefile.sim_depends touch otherbuilds/Makefile.dev_depends otherbuilds/Makefile.sim_depends
makedepend -f Makefile.dev_depends -o.dev.o -Y $(LIBRARY_SOURCES) makedepend -f otherbuilds/Makefile.dev_depends -o.dev.o -Y $(LIBRARY_SOURCES)
makedepend -f Makefile.sim_depends -o.sim.o -Y $(LIBRARY_SOURCES) makedepend -f otherbuilds/Makefile.sim_depends -o.sim.o -Y $(LIBRARY_SOURCES)
-include Makefile.dev_depends -include otherbuilds/Makefile.dev_depends
-include Makefile.sim_depends -include otherbuilds/Makefile.sim_depends

View File

@@ -1,75 +1,25 @@
PREFIX := @prefix@ CXX := g++
CXX := @CXX@ CC := gcc
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@
JNI_CXXFLAGS := -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize
JAVAC := $(JAVA_HOME)/bin/javac
JAR := $(JAVA_HOME)/bin/jar
LIBRARY_LIBS := @SRC_LIBS@ @FFTW_LIBS@ ARCHFLAGS :=
PROGRAM_LIBS := @SNDFILE_LIBS@ $(LIBRARY_LIBS)
VAMP_PLUGIN_LIBS := @Vamp_LIBS@ $(LIBRARY_LIBS)
LADSPA_PLUGIN_LIBS := $(LIBRARY_LIBS)
MKDIR := mkdir CXXFLAGS := -std=c++98 $(ARCHFLAGS) $(OPTFLAGS) -I. -Isrc -Irubberband -DHAVE_LIBSAMPLERATE -DUSE_KISSFFT -DNO_THREAD_CHECKS -DUSE_PTHREADS -DNO_TIMING -DHAVE_POSIX_MEMALIGN -DNDEBUG
AR := ar
INSTALL_BINDIR := $(PREFIX)/bin CFLAGS := $(ARCHFLAGS) $(OPTFLAGS)
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
LIBNAME := librubberband AR := ar
JNINAME := librubberband-jni MKDIR := mkdir -p
JARNAME := rubberband.jar
DYNAMIC_EXTENSION := .so LIBNAME := librubberband
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
PROGRAM_TARGET := bin/rubberband STATIC_TARGET := lib/$(LIBNAME).a
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)
ALL_TARGETS := lib $(STATIC_TARGET) $(DYNAMIC_TARGET) default: lib $(STATIC_TARGET)
all: lib $(STATIC_TARGET)
ifeq ($(WITH_PROGRAMS), yes) static: lib $(STATIC_TARGET)
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)
PUBLIC_INCLUDES := \ PUBLIC_INCLUDES := \
rubberband/rubberband-c.h \ rubberband/rubberband-c.h \
@@ -119,109 +69,27 @@ LIBRARY_SOURCES := \
src/system/sysutils.cpp \ src/system/sysutils.cpp \
src/system/Thread.cpp \ src/system/Thread.cpp \
src/StretcherChannelData.cpp \ src/StretcherChannelData.cpp \
src/StretcherImpl.cpp src/StretcherImpl.cpp \
src/kissfft/kiss_fft.c \
JNI_SOURCE := \ src/kissfft/kiss_fftr.c
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
LIBRARY_OBJECTS := $(LIBRARY_SOURCES:.cpp=.o) LIBRARY_OBJECTS := $(LIBRARY_SOURCES:.cpp=.o)
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.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) $(STATIC_TARGET): $(LIBRARY_OBJECTS)
$(AR) rsc $@ $^ $(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: lib:
$(MKDIR) $@ $(MKDIR) $@
install: all
$(MKDIR) -p $(DESTDIR)$(INSTALL_INCDIR)
$(MKDIR) -p $(DESTDIR)$(INSTALL_LIBDIR)
$(MKDIR) -p $(DESTDIR)$(INSTALL_PKGDIR)
cp -p $(PUBLIC_INCLUDES) $(DESTDIR)$(INSTALL_INCDIR)
cp -p $(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 -p $(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 -fp $(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 -p $(PROGRAM_TARGET) $(DESTDIR)$(INSTALL_BINDIR)
endif
ifeq ($(WITH_VAMP), yes)
$(MKDIR) -p $(DESTDIR)$(INSTALL_VAMPDIR)
cp -p $(VAMP_TARGET) $(DESTDIR)$(INSTALL_VAMPDIR)
cp -p vamp/vamp-rubberband.cat $(DESTDIR)$(INSTALL_VAMPDIR)
endif
ifeq ($(WITH_LADSPA), yes)
$(MKDIR) -p $(DESTDIR)$(INSTALL_LADSPADIR)
$(MKDIR) -p $(DESTDIR)$(INSTALL_LRDFDIR)
cp -p $(LADSPA_TARGET) $(DESTDIR)$(INSTALL_LADSPADIR)
cp -p ladspa/ladspa-rubberband.cat $(DESTDIR)$(INSTALL_LADSPADIR)
cp -p ladspa/ladspa-rubberband.rdf $(DESTDIR)$(INSTALL_LRDFDIR)
endif
clean: clean:
rm -f $(LIBRARY_OBJECTS) $(JNI_OBJECT) $(JAVA_OBJECT) $(PROGRAM_OBJECTS) $(LADSPA_OBJECTS) $(VAMP_OBJECTS) rm -f $(LIBRARY_OBJECTS)
distclean: clean distclean: clean
rm -f $(PROGRAM_TARGET) $(STATIC_TARGET) $(DYNAMIC_TARGET) $(JNI_TARGET) $(JAR_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET) rm -f $(STATIC_TARGET)
depend: depend:
makedepend -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES) makedepend -f otherbuilds/Makefile.linux -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
# DO NOT DELETE # DO NOT DELETE

View File

@@ -1,57 +1,25 @@
PREFIX := /usr/local
CXX := clang++ -stdlib=libc++ CXX := clang++ -stdlib=libc++
CC := clang CC := clang
ARCHFLAGS := -mmacosx-version-min=10.7
OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize 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 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) CFLAGS := $(ARCHFLAGS) $(OPTFLAGS)
LDFLAGS := $(ARCHFLAGS) -lpthread $(LDFLAGS)
LIBRARY_LIBS := -framework Accelerate AR := ar
PROGRAM_LIBS := -L$(PREFIX)/lib -lsndfile $(LIBRARY_LIBS) MKDIR := mkdir -p
VAMP_PLUGIN_LIBS := -L$(PREFIX)/lib -lvamp-sdk $(LIBRARY_LIBS)
LADSPA_PLUGIN_LIBS := $(LIBRARY_LIBS)
MKDIR := mkdir LIBNAME := librubberband
AR := ar
INSTALL_BINDIR := $(PREFIX)/bin STATIC_TARGET := lib/$(LIBNAME).a
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
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)
all: bin lib $(STATIC_TARGET) $(DYNAMIC_TARGET) $(PROGRAM_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET)
default: lib $(STATIC_TARGET)
all: lib $(STATIC_TARGET)
static: lib $(STATIC_TARGET) static: lib $(STATIC_TARGET)
dynamic: lib $(DYNAMIC_TARGET)
library: static dynamic
program: bin $(PROGRAM_TARGET)
vamp: lib $(VAMP_TARGET)
ladspa: lib $(LADSPA_TARGET)
PUBLIC_INCLUDES := \ PUBLIC_INCLUDES := \
rubberband/rubberband-c.h \ rubberband/rubberband-c.h \
@@ -111,83 +79,24 @@ LIBRARY_INCLUDES := $(LIBRARY_INCLUDES) \
LIBRARY_SOURCES := $(LIBRARY_SOURCES) \ LIBRARY_SOURCES := $(LIBRARY_SOURCES) \
src/speex/resample.c 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_SOURCES:.cpp=.o)
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.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) $(STATIC_TARGET): $(LIBRARY_OBJECTS)
rm -f $@ rm -f $@
$(AR) rsc $@ $^ $(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: lib:
$(MKDIR) $@ $(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: clean:
rm -f $(LIBRARY_OBJECTS) $(PROGRAM_OBJECTS) $(LADSPA_OBJECTS) $(VAMP_OBJECTS) rm -f $(LIBRARY_OBJECTS)
distclean: clean distclean: clean
rm -f $(PROGRAM_TARGET) $(STATIC_TARGET) $(DYNAMIC_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET) rm -f $(STATIC_TARGET)
depend: depend:
makedepend -f Makefile.osx -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES) makedepend -f otherbuilds/Makefile.macos -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
# DO NOT DELETE # DO NOT DELETE

View File

@@ -1,57 +1,27 @@
PREFIX := /usr/local
CXX := clang++ -stdlib=libc++ CXX := clang++ -stdlib=libc++
CC := clang CC := clang
OPTFLAGS := -DNDEBUG -ffast-math -O3 -ftree-vectorize
ARCHFLAGS := -arch arm64 -arch x86_64 -mmacosx-version-min=10.7 ARCHFLAGS := -arch arm64 -arch x86_64 -mmacosx-version-min=10.7
OPTFLAGS := -DNDEBUG -ffast-math -O3
CXXFLAGS := $(ARCHFLAGS) $(OPTFLAGS) -I. -Isrc -Irubberband -I/usr/local/include -DUSE_PTHREADS -DMALLOC_IS_ALIGNED -DHAVE_VDSP -DUSE_SPEEX -DNO_THREAD_CHECKS -DNO_TIMING 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) 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 AR := ar
MKDIR := mkdir
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
LIBNAME := librubberband 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 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: lib $(STATIC_TARGET) static: $(STATIC_TARGET)
dynamic: lib $(DYNAMIC_TARGET)
library: static dynamic
program: bin $(PROGRAM_TARGET)
vamp: lib $(VAMP_TARGET)
ladspa: lib $(LADSPA_TARGET)
PUBLIC_INCLUDES := \ PUBLIC_INCLUDES := \
rubberband/rubberband-c.h \ rubberband/rubberband-c.h \
@@ -111,83 +81,24 @@ LIBRARY_INCLUDES := $(LIBRARY_INCLUDES) \
LIBRARY_SOURCES := $(LIBRARY_SOURCES) \ LIBRARY_SOURCES := $(LIBRARY_SOURCES) \
src/speex/resample.c 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_SOURCES:.cpp=.o)
LIBRARY_OBJECTS := $(LIBRARY_OBJECTS:.c=.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) $(STATIC_TARGET): $(LIBRARY_OBJECTS)
rm -f $@ rm -f $@
$(AR) rsc $@ $^ $(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: lib:
$(MKDIR) $@ $(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: clean:
rm -f $(LIBRARY_OBJECTS) $(PROGRAM_OBJECTS) $(LADSPA_OBJECTS) $(VAMP_OBJECTS) rm -f $(LIBRARY_OBJECTS)
distclean: clean distclean: clean
rm -f $(PROGRAM_TARGET) $(STATIC_TARGET) $(DYNAMIC_TARGET) $(VAMP_TARGET) $(LADSPA_TARGET) rm -f $(STATIC_TARGET)
depend: depend:
makedepend -f Makefile.osx -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES) makedepend -f otherbuilds/Makefile.macos-universal -Y $(LIBRARY_SOURCES) $(PROGRAM_SOURCES)
# DO NOT DELETE # DO NOT DELETE

13
otherbuilds/check.sh Executable file
View 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

View File

@@ -19,26 +19,27 @@
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<ProjectGuid>{06838307-FEAA-4DB0-8E08-AF19698E9C40}</ProjectGuid> <ProjectGuid>{020CEB11-EF4E-400E-971D-A35DB69D7CF9}</ProjectGuid>
<RootNamespace>rubberband-program</RootNamespace> <RootNamespace>rubberband-library</RootNamespace>
<Keyword>Win32Proj</Keyword> <Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>StaticLibrary</ConfigurationType>
<PlatformToolset>v140</PlatformToolset> <PlatformToolset>v142</PlatformToolset>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"> <ImportGroup Label="ExtensionSettings">
@@ -62,67 +63,43 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>Debug\</OutDir> <OutDir>Debug\</OutDir>
<IntDir>Debug\</IntDir> <IntDir>Debug\</IntDir>
<LinkIncremental>true</LinkIncremental> <EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> <SourcePath>$(SourcePath)</SourcePath>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <EnableManagedIncrementalBuild>true</EnableManagedIncrementalBuild>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>Release\</OutDir> <OutDir>Release\</OutDir>
<IntDir>Release\</IntDir> <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> </PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files (x86)\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild> <MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader /> <PrecompiledHeader />
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level2</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat> <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<ShowIncludes>false</ShowIncludes>
</ClCompile> </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>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__MSVC__;WIN32;_DEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;USE_SPEEX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader> <PrecompiledHeader>
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level2</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<ShowIncludes>false</ShowIncludes>
</ClCompile> </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>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile> <ClCompile>
@@ -131,23 +108,16 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers> <OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files (x86)\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_CONSOLE;WANT_TIMING;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet> <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Fast</FloatingPointModel> <FloatingPointModel>Fast</FloatingPointModel>
<PrecompiledHeader /> <PrecompiledHeader />
<WarningLevel>Level2</WarningLevel> <WarningLevel>Level2</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile> </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>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile> <ClCompile>
@@ -156,9 +126,10 @@
<IntrinsicFunctions>true</IntrinsicFunctions> <IntrinsicFunctions>true</IntrinsicFunctions>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers> <OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>.;.\rubberband;.\src;C:\Program Files\Mega-Nerd\libsndfile\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> <AdditionalIncludeDirectories>..;..\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_CONSOLE;WANT_TIMING;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>__MSVC__;WIN32;NDEBUG;_LIB;NOMINMAX;_USE_MATH_DEFINES;USE_KISSFFT;NO_TIMING;USE_SPEEX;NO_THREAD_CHECKS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<BufferSecurityCheck>false</BufferSecurityCheck>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet> <EnableEnhancedInstructionSet>StreamingSIMDExtensions</EnableEnhancedInstructionSet>
<FloatingPointModel>Fast</FloatingPointModel> <FloatingPointModel>Fast</FloatingPointModel>
<PrecompiledHeader> <PrecompiledHeader>
@@ -166,30 +137,61 @@
<WarningLevel>Level2</WarningLevel> <WarningLevel>Level2</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile> </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> </ItemDefinitionGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="rubberband\RubberBandStretcher.h" /> <ClInclude Include="..\rubberband\rubberband-c.h" />
<ClInclude Include="src\float_cast\float_cast.h" /> <ClInclude Include="..\rubberband\RubberBandStretcher.h" />
<ClInclude Include="src\getopt\getopt.h" /> <ClInclude Include="..\src\audiocurves\CompoundAudioCurve.h" />
<ClInclude Include="src\getopt\unistd.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>
<ItemGroup> <ItemGroup>
<ClCompile Include="main\main.cpp" /> <ClCompile Include="..\src\audiocurves\CompoundAudioCurve.cpp" />
<ClCompile Include="src\getopt\getopt.c" /> <ClCompile Include="..\src\audiocurves\ConstantAudioCurve.cpp" />
<ClCompile Include="src\getopt\getopt_long.c" /> <ClCompile Include="..\src\audiocurves\HighFrequencyAudioCurve.cpp" />
</ItemGroup> <ClCompile Include="..\src\audiocurves\PercussiveAudioCurve.cpp" />
<ItemGroup> <ClCompile Include="..\src\audiocurves\SilentAudioCurve.cpp" />
<None Include="debug\BuildLog.htm" /> <ClCompile Include="..\src\audiocurves\SpectralDifferenceAudioCurve.cpp" />
<None Include="wub\index.html" /> <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> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@@ -28,6 +28,13 @@
#define RUBBERBAND_API_MAJOR_VERSION 2 #define RUBBERBAND_API_MAJOR_VERSION 2
#define RUBBERBAND_API_MINOR_VERSION 6 #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 <vector>
#include <map> #include <map>
#include <cstddef> #include <cstddef>
@@ -60,7 +67,8 @@
namespace RubberBand namespace RubberBand
{ {
class RubberBandStretcher class RUBBERBAND_DLLEXPORT
RubberBandStretcher
{ {
public: public:
/** /**

View File

@@ -32,6 +32,13 @@ extern "C" {
#define RUBBERBAND_API_MAJOR_VERSION 2 #define RUBBERBAND_API_MAJOR_VERSION 2
#define RUBBERBAND_API_MINOR_VERSION 6 #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. * This is a C-linkage interface to the Rubber Band time stretcher.
* *
@@ -91,52 +98,54 @@ typedef int RubberBandOptions;
struct RubberBandState_; struct RubberBandState_;
typedef struct RubberBandState_ *RubberBandState; typedef struct RubberBandState_ *RubberBandState;
extern RubberBandState rubberband_new(unsigned int sampleRate, RB_EXTERN RubberBandState rubberband_new(unsigned int sampleRate,
unsigned int channels, unsigned int channels,
RubberBandOptions options, RubberBandOptions options,
double initialTimeRatio, double initialTimeRatio,
double initialPitchScale); 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); RB_EXTERN void rubberband_set_time_ratio(RubberBandState, double ratio);
extern void rubberband_set_pitch_scale(RubberBandState, double scale); RB_EXTERN void rubberband_set_pitch_scale(RubberBandState, double scale);
extern double rubberband_get_time_ratio(const RubberBandState); RB_EXTERN double rubberband_get_time_ratio(const RubberBandState);
extern double rubberband_get_pitch_scale(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); RB_EXTERN void rubberband_set_transients_option(RubberBandState, RubberBandOptions options);
extern void rubberband_set_detector_option(RubberBandState, RubberBandOptions options); RB_EXTERN void rubberband_set_detector_option(RubberBandState, RubberBandOptions options);
extern void rubberband_set_phase_option(RubberBandState, RubberBandOptions options); RB_EXTERN void rubberband_set_phase_option(RubberBandState, RubberBandOptions options);
extern void rubberband_set_formant_option(RubberBandState, RubberBandOptions options); RB_EXTERN void rubberband_set_formant_option(RubberBandState, RubberBandOptions options);
extern void rubberband_set_pitch_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); RB_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_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); RB_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_process(RubberBandState, const float *const *input, unsigned int samples, int final);
extern int rubberband_available(const RubberBandState); RB_EXTERN int rubberband_available(const RubberBandState);
extern unsigned int rubberband_retrieve(const RubberBandState, float *const *output, unsigned int samples); 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); RB_EXTERN void rubberband_set_debug_level(RubberBandState, int level);
extern void rubberband_set_default_debug_level(int level); RB_EXTERN void rubberband_set_default_debug_level(int level);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#undef RB_EXTERN
#endif #endif

View File

@@ -29,7 +29,7 @@
#include <utility> #include <utility>
#include <iostream> #include <iostream>
#ifndef WIN32 #ifndef _MSC_VER
#include <sys/time.h> #include <sys/time.h>
#endif #endif

View File

@@ -24,13 +24,6 @@
#ifndef RUBBERBAND_SYSUTILS_H #ifndef RUBBERBAND_SYSUTILS_H
#define RUBBERBAND_SYSUTILS_H #define RUBBERBAND_SYSUTILS_H
#ifdef _MSC_VER
# if _MSC_VER < 1800
# include "float_cast/float_cast.h"
# endif
# define R__ __restrict
#endif
#ifdef __clang__ #ifdef __clang__
# define R__ __restrict__ # define R__ __restrict__
#else #else
@@ -39,6 +32,15 @@
# endif # endif
#endif #endif
#ifdef _MSC_VER
# if _MSC_VER < 1800
# include "float_cast/float_cast.h"
# endif
# ifndef R__
# define R__ __restrict
# endif
#endif
#ifndef R__ #ifndef R__
# define R__ # define R__
#endif #endif