• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.github/workflows/H03-May-2022-2821

com/breakfastquay/rubberband/H03-May-2022-13177

cross/H03-May-2022-

dotnet/H03-May-2022-1,8301,369

ladspa/H03-May-2022-744561

main/H03-May-2022-907759

otherbuilds/H03-May-2022-1,007864

rubberband/H03-May-2022-931175

single/H03-May-2022-8129

src/H03-May-2022-21,60315,087

vamp/H03-May-2022-772571

.appveyor.ymlH A D22-Oct-2021650 2317

.build.ymlH A D22-Oct-2021460 2624

CHANGELOGH A D22-Oct-20217.1 KiB194140

COPYINGH A D22-Oct-202129.6 KiB562474

DoxyfileH A D22-Oct-202155.5 KiB1,364973

README.mdH A D22-Oct-202125.8 KiB666495

meson.buildH A D22-Oct-202118.1 KiB633561

rubberband.pc.inH A D22-Oct-2021196 119

README.md

1
2# Rubber Band Library
3
4An audio time-stretching and pitch-shifting library and utility program.
5
6Written by Chris Cannam, chris.cannam@breakfastquay.com.
7Published by Particular Programs Ltd t/a Breakfast Quay.
8Copyright 2007-2021 Particular Programs Ltd.
9
10Rubber Band is a library and utility program that permits changing the
11tempo and pitch of an audio recording independently of one another.
12
13* About Rubber Band: https://breakfastquay.com/rubberband/
14* Code repository: https://hg.sr.ht/~breakfastquay/rubberband
15* Issue tracker: https://todo.sr.ht/~breakfastquay/rubberband
16* Github mirror: https://github.com/breakfastquay/rubberband
17
18CI builds:
19
20* [![Build status](https://builds.sr.ht/~breakfastquay/rubberband.svg)](https://builds.sr.ht/~breakfastquay/rubberband?) (Linux)
21* [![Build Status](https://github.com/breakfastquay/rubberband/workflows/macOS%20and%20iOS%20CI/badge.svg)](https://github.com/breakfastquay/rubberband/actions?query=workflow%3A%22macOS+and+iOS+CI%22) (macOS, iOS)
22* [![Build Status](https://ci.appveyor.com/api/projects/status/hhhhpf718jwhpyf6?svg=true)](https://ci.appveyor.com/project/breakfastquay/rubberband) (Windows)
23
24
25## Licence
26
27Rubber Band Library is distributed under the GNU General Public
28License (GPL). You can redistribute it and/or modify it under the
29terms of the GPL; either version 2 of the License, or (at your option)
30any later version. See the file COPYING for more information.
31
32If you wish to distribute code using Rubber Band Library under terms
33other than those of the GNU General Public License, you must obtain a
34commercial licence from us before doing so. In particular, you may not
35legally distribute through any Apple App Store unless you have a
36commercial licence.  See https://breakfastquay.com/rubberband/ for
37licence terms.
38
39If you have obtained a valid commercial licence, your licence
40supersedes this README and the enclosed COPYING file and you may
41redistribute and/or modify Rubber Band under the terms described in
42that licence. Please refer to your licence agreement for more details.
43
44Rubber Band includes a .NET interface generously contributed by
45Jonathan Gilbert under a BSD-like licence. The files in the
46dotnet/rubberband-dll and dotnet/rubberband-sharp directories fall
47under this licence. If you make use of this interface, please ensure
48you comply with the terms of its licence.
49
50Rubber Band may link with other libraries or be compiled with other
51source code, depending on its build configuration. It is your
52responsibility to ensure that you redistribute these only in
53accordance with their own licence terms, regardless of the conditions
54under which you are redistributing the Rubber Band code itself. The
55licences for some relevant library code are as follows, to the best of
56our knowledge. See also the end of this README for detailed terms.
57
58 * FFTW3 - GPL; proprietary licence needed for redistribution
59 * Intel IPP - Proprietary; licence needed for redistribution
60 * KissFFT - BSD-like
61 * libsamplerate - BSD-like from version 0.1.9 onwards
62 * Speex - BSD-like
63 * Pommier math functions - BSD-like
64
65
66## Contents of this README
67
681. Code components
692. Using the Rubber Band command-line tool
703. Using Rubber Band Library
714. Compiling Rubber Band:
72    a. Building on Linux
73    b. Building on macOS
74    c. Building for iOS
75    d. Building on Windows
76    e. Building for Android and Java integration
77    f. FFT and resampler selection
78    g. Other supported #defines
795. Copyright notes for bundled libraries
80
81
82## 1. Code components
83
84Rubber Band consists of:
85
86 * The Rubber Band Library code.  This is the code that will normally
87   be used by your applications.  The headers for this are in the
88   `rubberband/` directory, and the source code is in `src/`.
89   The Rubber Band Library may also depend upon external resampler
90   and FFT code; see section 3a below for details.
91
92 * The Rubber Band command-line tool.  This is in `main/main.cpp`.
93   This program uses Rubber Band Library and also requires libsndfile
94   (http://www.mega-nerd.com/libsndfile/, licensed under the GNU Lesser
95   General Public License) for audio file loading.
96
97 * A pitch-shifter LADSPA audio effects plugin.  This is in `ladspa/`.
98   It requires the LADSPA SDK header `ladspa.h` (not included).
99
100 * A Vamp audio analysis plugin which may be used to inspect the
101   dynamic stretch ratios and other decisions taken by the Rubber Band
102   Library when in use.  This is in `vamp/`.  It requires the Vamp
103   plugin SDK (https://www.vamp-plugins.org/develop.html) (not included).
104
105
106## 2. Using the Rubber Band command-line tool
107
108The Rubber Band command-line tool builds as bin/rubberband.  The basic
109incantation is
110
111```
112  $ rubberband -t <timeratio> -p <pitchratio> <infile.wav> <outfile.wav>
113```
114
115For example,
116
117```
118  $ rubberband -t 1.5 -p 2.0 test.wav output.wav
119```
120
121stretches the file test.wav to 50% longer than its original duration,
122shifts it up in pitch by one octave, and writes the output to output.wav.
123
124Several further options are available: run `rubberband -h` for help.
125In particular, different types of music may benefit from different
126"crispness" options (`-c` flag, with a numerical argument from 0 to 6).
127
128
129## 3. Using Rubber Band Library
130
131Rubber Band has a public API that consists of one C++ class, called
132`RubberBandStretcher` in the `RubberBand` namespace.  You should
133`#include <rubberband/RubberBandStretcher.h>` to use this class.
134There is extensive documentation in the class header.
135
136A header with C language bindings is also provided in
137`<rubberband/rubberband-c.h>`.  This is a wrapper around the C++
138implementation, and as the implementation is the same, it also
139requires linkage against the C++ standard libraries.  It is not yet
140documented separately from the C++ header.  You should include only
141one of the two headers, not both.
142
143A .NET interface is also included, contributed by Jonathan Gilbert;
144see the files in the `dotnet` directory for details.
145
146The source code for the command-line utility (`main/main.cpp`)
147provides a good example of how to use Rubber Band in offline mode; the
148LADSPA pitch shifter plugin (`ladspa/RubberBandPitchShifter.cpp`) may
149be used as an example of Rubber Band in real-time mode.
150
151IMPORTANT: Please ensure you have read and understood the licensing
152terms for Rubber Band before using it in your application.  This
153library is provided under the GNU General Public License, which means
154that any application that uses it must also be published under the GPL
155or a compatible licence (i.e. with its full source code also available
156for modification and redistribution) unless you have separately
157acquired a commercial licence from the author.
158
159
160## 4. Compiling Rubber Band Library
161
162The primary supported build system for Rubber Band on all platforms is
163Meson (https://mesonbuild.com). The Meson build system can be used to
164build all targets (static and dynamic library, command-line utility,
165and plugins) and to cross-compile.
166
167☞ If you only need a static library and don't wish to use Meson, some
168alternative build files (Makefiles and Visual C++ projects) are
169included in the `otherbuilds` directory. See the platform-specific
170build sections below for more details.
171
172☞ If you want to include Rubber Band in a C++ project and would prefer
173not to compile a separate library, there is a single `.cpp` file at
174`single/RubberBandSingle.cpp` which can be added to your project
175as-is.  It produces a single compilation-unit build with the built-in
176FFT and resampler implementations with no further library
177dependencies. See the comments at the top of that file for more
178information.
179
180To build with Meson, ensure Meson and Ninja are installed and run:
181
182```
183$ meson build && ninja -C build
184```
185
186This checks for necessary dependencies, reports what it finds, and if
187all is well, builds the code into a subdirectory called `build`. It
188will build everything it can find the requisite dependencies for:
189static and dynamic libraries, LADSPA and Vamp plugins, and
190command-line utility.
191
192Some configuration options are provided, described in the
193`meson_options.txt` file. To set one of these, add a `-D` option to
194Meson:
195
196```
197$ meson build -Dipp_path=/opt/intel/ipp
198```
199
200The options are documented in the library- and platform-specific
201sections below.
202
203Rubber Band Library is written entirely in C++ and requires a C++11
204compiler. It is unlikely to make any difference (performance or
205otherwise) which C++ standard you compile with, as long as it's no
206older than C++11.
207
208If you are building this software using either of the Speex or KissFFT
209library options, please be sure to review the terms for those
210libraries in `src/speex/COPYING` and `src/kissfft/COPYING` as
211applicable.
212
213
214### 4a. Building on Linux
215
216For best results, and to ensure the command-line tool and plugins are
217built, first install libsamplerate, libsndfile, and the LADSPA and
218Vamp plugin headers so they can be found using `pkg-config`. Then
219
220```
221$ meson build && ninja -C build
222```
223
224See "FFT and resampler selection" below for further build options.
225
226Alternatively, if you only need the static library and prefer a
227Makefile, try
228
229```
230$ make -f otherbuilds/Makefile.linux
231```
232
233
234### 4b. Building on macOS
235
236Ensure the Xcode command-line tools are installed, and ideally also
237install libsamplerate and libsndfile.
238
239To build for the default architecture:
240
241```
242$ meson build && ninja -C build
243```
244
245Which architecture is the default may depend on the version of Meson
246and/or the current shell. To force a particular architecture you can
247use a Meson cross-file, as follows.
248
249To build for Apple Silicon (arm64):
250
251```
252$ meson build --cross-file cross/macos-arm64.txt && ninja -C build
253```
254
255To build for Intel (x86_64):
256
257```
258$ meson build --cross-file cross/macos-x86_64.txt && ninja -C build
259```
260
261You can build a universal binary library for both architectures like
262this:
263
264```
265$ meson build --cross-file cross/macos-universal.txt && ninja -C build
266```
267
268Note that the universal cross file also sets the minimum OS version to
269the earliest supported macOS versions for both architectures. (In
270practice, compatibility will also depend on how the dependent
271libraries have been compiled.)  You can edit this in the
272`cross/macos-universal.txt` file if you want a specific target.
273
274See "FFT and resampler selection" below for further build options.
275
276Note that you cannot legally distribute applications using Rubber Band
277in the Mac App Store, unless you have first obtained a commercial
278licence for Rubber Band Library.  GPL code is not permitted in the app
279store.  See https://breakfastquay.com/technology/license.html for
280commercial terms.
281
282
283### 4c. Building for iOS
284
285Ensure the Xcode command-line tools are installed, and
286
287```
288$ meson build_ios --cross-file cross/ios.txt && ninja -C build_ios
289```
290
291The output files will be found in the `build_ios` directory.
292
293To build for the simulator,
294
295```
296$ meson build_sim --cross-file cross/ios-simulator.txt && ninja -C build_sim
297```
298
299The output files will be found in the `build_sim` directory.
300
301See "FFT and resampler selection" below for further build options.
302
303Note that you cannot legally distribute applications using Rubber Band
304in the iOS App Store, unless you have a first obtained a commercial
305licence for Rubber Band Library. GPL code is not permitted in the app
306store.  See https://breakfastquay.com/technology/license.html for
307commercial terms.
308
309
310### 4d. Building on Windows
311
312If you only need to build the static library for integration into your
313project, and you prefer a Visual Studio project file, you can find a
314simple one in `otherbuilds\rubberband-library.vcxproj`.
315
316The rest of this section describes the "full" build system, which uses
317Meson just as on the other platforms. So to build this way, start by
318ensuring Meson and Ninja are installed and available. Then, in a
319terminal window with the compiler tools available in the path (e.g. a
320Visual Studio command-line prompt for the relevant build architecture)
321run
322
323```
324> meson build
325> ninja -C build
326```
327
328The output files will be found in the `build` directory.
329
330The Rubber Band code is compatible with both the traditional Visual
331C++ compiler (`cl`) and the Clang front-end (`clang`), and the build
332system will use whichever appears (first) in your path.
333
334To build against a specific Visual C++ runtime, use the built-in Meson
335option `b_vscrt`:
336
337```
338> meson build -Db_vscrt=mt
339```
340
341See "FFT and resampler selection" below for further build options.
342
343
344### 4e. Building for Android and Java integration
345
346Currently only a very old Android NDK build file is provided, as
347`otherbuilds/Android.mk`. This includes compile definitions for a
348shared library built for ARM architectures which can be loaded from a
349Java application using the Java native interface (i.e. the Android
350NDK).
351
352The Java side of the interface can be found in
353`com/breakfastquay/rubberband/RubberBandStretcher.java`.
354
355See
356https://hg.sr.ht/~breakfastquay/rubberband-android-simple-sample
357for a very trivial example of integration with Android Java code.
358
359The supplied `.mk` file uses KissFFT and the Speex resampler.
360
361
362### 4f. FFT and resampler selection
363
364Rubber Band requires the selection of library code for FFT calculation
365and resampling.  Several libraries are supported.  The selection is
366controlled (in Meson) using `-D` options and (in the code itself)
367using preprocessor flags set by the build system. These options and
368flags are detailed in the tables below.
369
370At least one resampler implementation and one FFT implementation must
371be enabled. It is technically possible to enable more than one, but
372it's confusing and not often useful.
373
374If you are building this software using the bundled Speex or KissFFT
375library code, please be sure to review the terms for those libraries
376in `src/speex/COPYING` and `src/kissfft/COPYING` as applicable.
377
378If you are proposing to package Rubber Band for a Linux distribution,
379please select either the built-in FFT (simpler for you) or FFTW (a bit
380faster) and use libsamplerate.
381
382#### FFT libraries supported
383
384```
385Library     Build option    CPP define     Notes
386----        ------------    ----------     -----
387
388Built-in    -Dfft=builtin   -DUSE_BUILTIN_FFT
389                                           Default except on macOS/iOS.
390                                           Can be distributed with either
391                                           the Rubber Band GPL or
392                                           commercial licence.
393
394KissFFT     -Dfft=kissfft   -DHAVE_KISSFFT
395                                           Single precision.
396                                           Only indicated for use with
397                                           single-precision sample type
398                                           (see below).
399                                           Bundled, can be distributed with
400                                           either the Rubber Band GPL or
401                                           commercial licence.
402
403Accelerate  -Dfft=vdsp      -DHAVE_VDSP    Default on macOS/iOS.
404                                           Best option on these platforms.
405
406FFTW3       -Dfft=fftw      -DHAVE_FFTW3   GPL.
407
408Intel IPP   -Dfft=ipp       -DHAVE_IPP     Proprietary, can only be used with
409                                           Rubber Band commercial licence.
410```
411
412#### Resampler libraries supported
413
414```
415Library     Build option    CPP define     Notes
416----        ------------    ----------     -----
417
418libsamplerate               -DHAVE_LIBSAMPLERATE
419            -Dresampler=libsamplerate      Default when found.
420                                           Good choice in most cases.
421
422Built-in    -Dfft=builtin   -DUSE_BQRESAMPLER
423                                           Default when libsamplerate not found.
424                                           Can be distributed with either
425                                           the Rubber Band GPL or
426                                           commercial licence. Intended to
427                                           give best quality for time-varying
428                                           pitch shifts in real-time mode.
429                                           Newer than, and not as well-tested
430                                           as, libsamplerate.
431
432Speex                       -DUSE_SPEEX
433            -Dresampler=speex              Can be distributed with
434	    				   either the Rubber Band GPL or
435					   commercial licence.
436```
437
438### 4g. Other supported #defines
439
440Other known preprocessor symbols are as follows. (Usually the supplied
441build files will handle these for you.)
442
443    -DLACK_BAD_ALLOC
444    Define on systems lacking std::bad_alloc in the C++ library.
445
446    -DLACK_POSIX_MEMALIGN
447    Define on systems lacking posix_memalign.
448
449    -DUSE_OWN_ALIGNED_MALLOC
450    Define on systems lacking any aligned malloc implementation.
451
452    -DLACK_SINCOS
453    Define on systems lacking sincos().
454
455    -DNO_EXCEPTIONS
456    Build without use of C++ exceptions.
457
458    -DNO_THREADING
459    Build without any multithread support.
460
461    -DUSE_PTHREADS
462    Use the pthreads library (required unless NO_THREADING or on Windows)
463
464    -DPROCESS_SAMPLE_TYPE=float
465    Select single precision for internal calculations. The default is
466    double precision. Consider in conjunction with single-precision
467    KissFFT for mobile architectures with slower double-precision
468    support.
469
470    -DUSE_POMMIER_MATHFUN
471    Select the Julien Pommier implementations of trig functions for ARM
472    NEON or x86 SSE architectures. These are usually faster but may be
473    of lower precision than system implementations. Consider using this
474    for 32-bit mobile architectures.
475
476
477## 5. Copyright notes for bundled libraries
478
479### 5a. Speex
480
481```
482[files in src/speex]
483
484Copyright 2002-2007     Xiph.org Foundation
485Copyright 2002-2007     Jean-Marc Valin
486Copyright 2005-2007     Analog Devices Inc.
487Copyright 2005-2007     Commonwealth Scientific and Industrial Research
488                        Organisation (CSIRO)
489Copyright 1993, 2002, 2006 David Rowe
490Copyright 2003          EpicGames
491Copyright 1992-1994     Jutta Degener, Carsten Bormann
492
493Redistribution and use in source and binary forms, with or without
494modification, are permitted provided that the following conditions
495are met:
496
497- Redistributions of source code must retain the above copyright
498notice, this list of conditions and the following disclaimer.
499
500- Redistributions in binary form must reproduce the above copyright
501notice, this list of conditions and the following disclaimer in the
502documentation and/or other materials provided with the distribution.
503
504- Neither the name of the Xiph.org Foundation nor the names of its
505contributors may be used to endorse or promote products derived from
506this software without specific prior written permission.
507
508THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
509``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
510LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
511A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
512CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
513EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
514PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
515PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
516LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
517NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
518SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
519```
520
521### 5b. KissFFT
522
523```
524[files in src/kissfft]
525
526Copyright (c) 2003-2004 Mark Borgerding
527
528All rights reserved.
529
530Redistribution and use in source and binary forms, with or without
531modification, are permitted provided that the following conditions are
532met:
533
534    * Redistributions of source code must retain the above copyright
535      notice, this list of conditions and the following disclaimer.
536    * Redistributions in binary form must reproduce the above
537      copyright notice, this list of conditions and the following
538      disclaimer in the documentation and/or other materials provided
539      with the distribution.
540    * Neither the author nor the names of any contributors may be used
541      to endorse or promote products derived from this software
542      without specific prior written permission.
543
544THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
545"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
546LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
547A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
548OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
549SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
550LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
551DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
552THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
553(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
554OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
555```
556
557### 5c. Pommier math functions
558
559```
560[files in src/pommier]
561
562Copyright (C) 2011  Julien Pommier
563
564  This software is provided 'as-is', without any express or implied
565  warranty.  In no event will the authors be held liable for any damages
566  arising from the use of this software.
567
568  Permission is granted to anyone to use this software for any purpose,
569  including commercial applications, and to alter it and redistribute it
570  freely, subject to the following restrictions:
571
572  1. The origin of this software must not be misrepresented; you must not
573     claim that you wrote the original software. If you use this software
574     in a product, an acknowledgment in the product documentation would be
575     appreciated but is not required.
576  2. Altered source versions must be plainly marked as such, and must not be
577     misrepresented as being the original software.
578  3. This notice may not be removed or altered from any source distribution.
579```
580
581### 5d. float_cast
582
583```
584[files in src/float_cast]
585
586Copyright (C) 2001 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
587
588Permission to use, copy, modify, distribute, and sell this file for any
589purpose is hereby granted without fee, provided that the above copyright
590and this permission notice appear in all copies.  No representations are
591made about the suitability of this software for any purpose.  It is
592provided "as is" without express or implied warranty.
593```
594
595### 5e. getopt
596
597```
598[files in src/getopt, used by command-line tool on some platforms]
599
600Copyright (c) 2000 The NetBSD Foundation, Inc.
601All rights reserved.
602
603This code is derived from software contributed to The NetBSD Foundation
604by Dieter Baron and Thomas Klausner.
605
606Redistribution and use in source and binary forms, with or without
607modification, are permitted provided that the following conditions
608are met:
6091. Redistributions of source code must retain the above copyright
610   notice, this list of conditions and the following disclaimer.
6112. Redistributions in binary form must reproduce the above copyright
612   notice, this list of conditions and the following disclaimer in the
613   documentation and/or other materials provided with the distribution.
6143. All advertising materials mentioning features or use of this software
615   must display the following acknowledgement:
616       This product includes software developed by the NetBSD
617       Foundation, Inc. and its contributors.
6184. Neither the name of The NetBSD Foundation nor the names of its
619   contributors may be used to endorse or promote products derived
620   from this software without specific prior written permission.
621
622THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
623``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
624TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
625PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
626BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
627CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
628SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
629INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
630CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
631ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
632POSSIBILITY OF SUCH DAMAGE.
633```
634
635### 5f. rubberband-sharp
636
637```
638[files in rubberband-dll and rubberband-sharp]
639
640Copyright 2018-2019 Jonathan Gilbert
641
642Permission is hereby granted, free of charge, to any person
643obtaining a copy of this software and associated documentation
644files (the "Software"), to deal in the Software without
645restriction, including without limitation the rights to use, copy,
646modify, merge, publish, distribute, sublicense, and/or sell copies
647of the Software, and to permit persons to whom the Software is
648furnished to do so, subject to the following conditions:
649
650The above copyright notice and this permission notice shall be
651included in all copies or substantial portions of the Software.
652
653THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
654EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
655MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
656NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
657ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
658CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
659WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
660
661Except as contained in this notice, the name of Jonathan Gilbert
662shall not be used in advertising or otherwise to promote the sale,
663use or other dealings in this Software without prior written
664authorization.
665```
666