forked from breakfastquay/rubberband
-
Notifications
You must be signed in to change notification settings - Fork 1
/
CHANGELOG
407 lines (302 loc) · 15.8 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
Changes in Rubber Band v4.0
This release adds a new API that is simpler than the existing one in
cases where only pitch-shifting is required.
* Add a new API, RubberBandLiveShifter, which is simpler to use
than the general RubberBandStretcher interface in cases where only
pitch-shifting is required. For more general purposes the original
interface is still the proper one.
* Fix incorrect URIs in LV2 plugins
* Fix stack overflow in seldom used R2 time-domain smoothing code
* Add support for key-frame maps (and the live shifter) to JNI interface
* Fix some compatibility issues and warnings with certain compilers
Apart from this entirely new class, the rest of the API is unchanged
and the library is binary compatible with existing code back to
version 1.7.
Changes in Rubber Band v3.3
This is a bug-fix release with no changes to audio quality.
* Fix incorrect output with unexpectedly large buffers in process
* Add getProcessSizeLimit to query the maximum buffer length for
process and highest supported value for setMaxProcessSize
* Fix formal test failure in some contexts
One new function has been added to the API. The library is otherwise
binary compatible with existing code back to version 1.7.
Changes in Rubber Band v3.2.1
This is a build-fix release with no new features.
* Fix formal test failure in build configurations using other
resamplers than the built-in one
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.2
This significant release contains a number of improvements, including
some output quality enhancements for certain processing modes.
* Fix inability of the R3 engine to produce mono-compatible output
when processing stereo. In R2 the OptionChannelsTogether option has
always done this (with some quality caveats). In R3 this option was
more nearly mono-compatible than the default, but not
entirely. With this release, OptionChannelsTogether uses a new
method that is both high quality and mono-compatible and is
recommended for situations benefiting from this.
* Correct the start delay calculation in "resample-before" modes of
both stretcher engines. This affects latency reporting in realtime
mode when using the non-recommended realtime pitch options
(i.e. those other than OptionPitchHighConsistency, which is the
recommended option for variable-rate use in realtime mode)
* Relatedly, fix failure to use OptionPitchHighConsistency in R3
LADSPA/LV2 plugins
* Fix small difference in output from R3 engine depending on whether
time and pitch ratios were provided on construction or immediately
after it
* Expand automated tests
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.1.3
This is a bug-fix release with no new features or changes to audio
quality.
* Fix failure to generate output when called with final=true and no
samples at input (a regression in v3.1, this worked correctly in
v3.0 and in the R2 engine)
* Fix occasional truncation of final block when using Speex resampler
* Fix hang in the command-line utility code at end of processing with
certain file formats
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.1.2
This minor release contains a small number of build fixes.
* Make all optional targets manually toggleable, using Meson
"features" options (see COMPILING.md for documentation)
* Further fix to JNI autodetection, following that of 3.1.1 -
hopefully solving the problem completely this time!
* Correct the source file listing in the Android makefile
* Fix build with NO_EXCEPTIONS, e.g. for Android
* Fix required #includes for mingw32 builds
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.1.1
This minor release contains no code changes, only a fix to the build
system.
* Fix failure to configure and build on some systems without a Java
compiler. Java/JNI support is entirely optional in Rubber Band, but
auto-detection of whether to build it or not was failing in certain
environments: this broke the normal build process for some users.
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.1
This significant release contains many enhancements that can improve
performance, as well as a number of bug fixes.
* Add support for "short window" mode, OptionWindowShort, to the new
R3 processing engine. This option previously only took effect with
the R2 engine. When used with R3 it disables the R3 multi-window
logic while retaining R3's signal analysis, yielding output with
some of the quality advantages of R3 (especially for non-percussive
content) but with far lower CPU usage and processing delay.
* Implement OptionPitchHighSpeed in the R3 engine. Previously it
always used OptionPitchHighConsistency internally. With this option
real-time pitch-shifting upwards becomes much faster, at the
expense of some output quality. (However OptionPitchHighConsistency
is still always necessary to avoid artifacts when performing
dynamic pitch changes.)
* Add support for the SLEEF library (libsleefdft) for FFTs. In
our tests this library approaches the performance of vDSP and IPP
and improves on the other supported options.
* Add support for external Speex library (libspeexdsp) for
resampling. This is a very fast resampler, significantly improved
over the older Speex code that has historically been bundled with
Rubber Band. It may still introduce a little more audible noise on
ratio changes than the built-in resampler.
* Update the R2 engine so that it always restores vertical phase
coherence gradually when returning to a ratio of 1.0 (as R3 also
does) rather than waiting for silence or a transient.
* Update R3 to properly support all sample rates between 8000 and
192000 Hz.
* Update command-line utility so as to use the extension of the
output filename to determine the file type to write. Previously
the output was always the same format as the input file,
regardless of extension.
* Remove support for libresample. This integration has not been
exercised in many years and other resamplers are better options.
* Fix several bugs, including a crash when run with very low sample
rates.
The API is unchanged from 3.0 and the library is binary compatible
back to version 1.7.
Changes in Rubber Band v3.0.0
* Introduce a new processing engine, the R3 (Finer) engine, which
typically produces higher-quality output than the existing R2
engine, though at significantly higher CPU cost. The R2 engine is
still the default, and R3 can be selected using the new
OptionEngineFiner option on construction. See the documentation for
more details.
* Add ability to provide a custom set of log callbacks, so that
debug and warning logs can be routed to the application's log
stream and/or handled in a realtime-safe way
* Add option to shift formant independently of pitch (R3 engine
only)
* Deprecate the rather ambiguous function getLatency(), effectively
replacing it with two new functions getPreferredStartPad() and
getStartDelay(). See their documentation for more details
The library is both binary and API compatible all the way back to the
1.x series for existing applications. Code written to use 3.0 is not
necessarily compatible with 2.x or 1.x, as several new functions and
enum values have been added, but code written to use any earlier
version can update to 3.0 without modification (and will continue to
use the same processing engine if the calling code is unchanged).
Changes in Rubber Band v2.0.2
* Fix a crash in certain configurations when using mid-side
processing (OptionChannelsTogether) with pitch shifts
* Fix failure to build on very old macOS versions (<= 10.8) when
combined with much newer compilers
The API is unchanged and the library is binary compatible back to
version 1.7.
Changes in Rubber Band v2.0.1
* Add a preliminary LV2 version of the example pitch-shifter plugin,
and update the existing LADSPA version to fix failure of the wet/dry
control to work correctly under in-place use
* Make the built-in resampler (introduced in v2.0.0) the default for
all builds, and use it in the official packaged versions of the
command-line utility. External resampler libraries are still
available as build options
* A couple of build fixes, including supporting the proper Meson
option (default_library=shared/static/both) at configuration time
to choose which type of library to build, instead of the custom
option used since v1.9.1
The API is unchanged and the library is binary compatible back to
version 1.7.
Changes in Rubber Band v2.0.0
* Introduce a built-in resampler, intended to minimise artifacts on
pitch changes and to allow Rubber Band to be compiled without any
external dependencies (when also using the built-in FFT). The
built-in resampler is newer and less well-tested than
libsamplerate, and is not yet the default except in no-dependency
builds
* Introduce single compilation unit single/RubberBandSingle.cpp which
includes the whole library, to allow adding Rubber Band Library to
a C++ project without having to build anything separately. This
version always uses the built-in FFT and resampler and does not
support any extra configuration
* Update the stretch calculation logic for real-time mode, making it
more rigorous about avoiding timing drift when the pitch ratio
changes frequently
* Update the example LADSPA pitch shift plugin, adding a wet/dry mix
control to test (and take advantage of) the better timing
management in real-time mode
* Add a pitch/frequency-map file option to the command-line utility,
allowing time-varying pitch shifts to be pre-programmed
The API is unchanged and the library is still binary compatible back
to version 1.7.
We incremented the major version number, not because of any API
change, but because of a change to the timing of audio output for some
applications of real-time mode. While the library is code-compatible
with earlier releases, it is not "output-compatible" and may change
automation-driven mixes even when used with identical options. If you
are already using an earlier release in real-time mode, please test
v2.0.0 carefully before updating.
Note that there are no pure bug-fixes in v2.0.0: if you are happy with
v1.9.2, there is no pressing reason to update.
Changes in Rubber Band v1.9.2
* Introduce a built-in FFT option to be a good default when no
requirements point to a particular external library preference
* Fix potential crash following some reconfigure options. Thanks
to Michael Tyson for reporting this
* Ensure Accelerate is listed in generated pkg-config if required
* Check for existence of sincos in configuration
* Fix host identification when cross-compiling
The API is unchanged and the library is binary compatible with
version 1.7.
Changes in Rubber Band v1.9.1
* Switch build system from Makefiles and Visual Studio project to
Meson/Ninja for all platforms. There are still Makefiles and VS
projects included in otherbuilds/ for those who wish to use them to
build the static library directly
* Make various fixes to improve sound quality when pitch-shifting
dynamically in real-time (requires libsamplerate)
* Fix floating-point exception when a very very long stretch factor
is presented
* Move the two directories that together provide the .NET interface
(rubberband-sharp and rubberband-dll) into their own subdir (dotnet)
* Ensure the library builds and runs correctly on ARM Mac (Apple
Silicon, M1), and also on Windows using the Visual C++ Clang
front-end
The API is unchanged and the library is binary compatible with
version 1.7.
Changes in Rubber Band v1.9
* Fix incorrect numbering of pitch speed/quality flags in the
auxiliary C wrapper header. The effect of this was that code using
the C wrapper that intended to select the higher-quality
pitch-shift mode was actually choosing the higher-speed mode, and
vice versa. (The third mode - high-consistency, commonly used in
real-time applications - was correct.) Thanks to Michael Bradshaw
for reporting this.
* Add a .NET interface, generously contributed by Jonathan Gilbert
under a BSD-like licence
* Improve error handling in command-line utility
* Fix failure to build with FFTW_SINGLE_ONLY defined
* Fix some compiler warnings
* Install the JNI target (with make install) only if it has actually
been built, avoiding an error otherwise
The API is unchanged except for the fix noted above, as a result of
which the minor version number has been increased. The library is
binary compatible with version 1.7.
Changes in Rubber Band v1.8.2
* Fix a number of small memory leaks
* Make stretcher more robust to being fed invalid input (with NaNs)
* Include iOS build file
* Various platform build fixes and improvements
The API is unchanged and the library is binary compatible with
version 1.7.
Changes in Rubber Band v1.8.1
* Fix a crash in formant-preserving pitch shift for some build targets
The API is unchanged and the library is binary compatible with
version 1.7.
Changes in Rubber Band v1.8
* Add build support for Win32/MSVC, Android, and various libraries
* Add Java JNI interface
The API is unchanged and the library is binary compatible with
version 1.7.
Changes in Rubber Band v1.7
* Add the centre-focus option as an alternative processing mode for
stereo (using mid-side arrangement)
* Several bug fixes
The library is binary compatible with version 1.6 for forward
compatibility (values have been added to an existing enum). Code
written to use 1.7 is not necessarily compatible with 1.6.
Changes in Rubber Band v1.6
* Add Smoothing option. This uses a window-presum FFT, introducing
time-domain aliasing which is then smoothed using a sinc window.
This can be used in combination with any of the existing processing
control options. This will soften transients but the result may
still be more pleasant for some material that is not very amenable
to being time stretched.
* Fix silent channel of output when processing with band-limited
transients option
* Include libresample support
The library is binary compatible with version 1.5 for forward
compatibility (values have been added to an existing enum). Code
written to use 1.6 is not necessarily compatible with 1.5.
Changes in Rubber Band v1.5
* Add a more reliable transient detection mode, and make the mode
selectable using OptionDetectorXXX flags -- the new method is
the default
* Band-limit transient detectors to avoid being distracted by
inaudible garbage
* Add a key-frame mapping facility for variable stretch ratio
management during offline stretches
The library is binary compatible with version 1.4 for forward
compatibility (a function has been added and an enum changed, but no
existing entry points have changed). Code written to use 1.5 is not
necessarily compatible with 1.4.
Changes in Rubber Band v1.4
* Fix a hang when faced with some very peculiar stretch factors
* Fix some incorrect threading condition usage
* Some code rearrangement
* Fix build on Solaris
The library is binary compatible with version 1.3.
Changes in Rubber Band v1.3
* Fix a bug that may cause incorrect output during the first process
block of some audio files, when processing in offline mode
* Fix a small number of build issues and more minor bugs
The library is binary compatible with version 1.2.
Changes in Rubber Band v1.2
* Add an initial "formant preservation" option when pitch shifting
* Real-time pitch shifting now uses a faster method by default, with
less variation in CPU usage
* The code is more amenable to compiler auto-vectorization (through
e.g. gcc --ftree-vectorize).