forked from juce-framework/JUCE
-
Notifications
You must be signed in to change notification settings - Fork 0
/
BREAKING-CHANGES.txt
1665 lines (1306 loc) · 52.6 KB
/
BREAKING-CHANGES.txt
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
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
JUCE breaking changes
=====================
Version 6.0.8
=============
Change
------
Calling AudioProcessorEditor::setResizeLimits() will no longer implicitly add a
ResizableCornerComponent to the editor if it has not already been set as
resizable.
Possible Issues
---------------
Code which previously relied on calling this method to set up the corner
resizer will no longer work.
Workaround
----------
Explicitly call AudioProcessorEditor::setResizable() with the second argument
set to true to enable the corner resizer.
Rationale
---------
The previous behaviour was undocumented and potentially confusing. There is now
a single method to control the behaviour of the editor's corner resizer to
avoid any ambiguity.
Change
------
The implementations of `getValue` and `setValue` in `AUInstanceParameter` now
properly take the ranges of discrete parameters into account.
Possible Issues
---------------
This issue affects JUCE Audio Unit hosts. Automation data previously saved for
a discrete parameter with a non-zero minimum value may not set the parameter to
the same values as previous JUCE versions. Note that previously, `getValue` on
a hosted discrete parameter may have returned out-of-range values, and
`setValue` may have only mapped to a portion of the parameter range. As a
result, automation recorded for affected parameters was likely already behaving
unexpectedly.
Workaround
----------
There is no workaround.
Rationale
---------
The old behaviour was incorrect, and was causing issues in plugin validators
and other hosts. Hosts expect `getValue` to return a normalised parameter
value. If this function returns an out-of-range value (including Inf and NaN)
this is likely to break assumptions made by the host, leading to crashes,
corrupted project data, or other defects.
Change
------
AudioProcessorListener::audioProcessorChanged gained a new parameter describing
the nature of any change.
Possible Issues
---------------
Code using the old function signature will not build until updated to use
the new signature.
Workaround
----------
Listeners should add the new parameter to any overrides of
audioProcessorChanged.
Rationale
---------
The new function signature means that wrappers can be smarter about the
requests that they make to hosts whenever some aspect of the processor changes.
In particular, plugin wrappers can now distinguish between changes to latency,
parameter attributes, and the current program. This means that hosts will no
longer assume parameters have changed when `setLatencySamples` is called.
Change
------
CharacterFunctions::readDoubleValue now returns values consistent with other
C++ number parsing libraries. Parsing values smaller than the minimum number
respresentable in a double will return (+/-)0.0 and parsing values larger than
the maximum number respresentable in a double will return (+/-)inf.
Possible Issues
---------------
Code reading very large or very small numbers may receive values of 0.0 and inf
rather than nan.
Workaround
----------
Where you may be using std::isnan to check the validity of the result you can
instead use std::isfinite.
Rationale
---------
The new behaviour is consistent with other string parsing libraries.
Version 6.0.6
=============
Change
------
The name of `OperatingSystemType::MacOSX_11_0` was changed to
`OperatingSystemType::MacOS_11`.
Possible Issues
---------------
Code using the old name will not build until it is updated to use the new name.
Workaround
----------
Update code using the old name to use the new name instead.
Rationale
---------
Newer versions of macOS have dropped the "X" naming. Minor version updates are
also less significant now than they were for the X-series.
Change
------
Xcode projects generated using the Projucer will now use the "New Build System"
instead of the "Legacy Build System" by default.
Possible Issues
---------------
Xcode 10.0 - 10.2 has some known issues when using the new build system such as
JUCE modules not rebuilding correctly when modified, issue and file navigation
not working, and breakpoints not being reliably set or hit.
Workaround
----------
If you are using an affected version of Xcode then you can enable the "Use
Legacy Build System" setting in the Projucer Xcode exporter to go back to the
previous behaviour.
Rationale
---------
The legacy build system has issues building arm64 binaries for Apple silicon
and will eventually be removed altogether.
Version 6.0.5
=============
Change
------
New pure virtual methods accepting `PopupMenu::Options` arguments have been
added to `PopupMenu::LookAndFeelMethods`.
Possible Issues
---------------
Classes derived from `PopupMenu::LookAndFeelMethods`, such as custom
LookAndFeel classes, will not compile unless these pure virtual methods are
implemented.
Workaround
----------
The old LookAndFeel methods still exist, so if the new Options parameter is not
useful in your application, your implementation of
`PopupMenu::LookAndFeelMethods` can simply forward to the old methods. For
example, your implementation of `drawPopupMenuBackgroundWithOptions` can
internally call your existing `drawPopupMenuBackground` implementation.
Rationale
---------
Allowing the LookAndFeelMethods to access the popup menu's options allows for
more flexible styling. For example, a theme may wish to query the menu's target
component or parent for colours to use.
Change
------
A typo in the JUCEUtils CMake script that caused the wrong manufacturer code to
be set in the compile definitions for a plugin was fixed.
Possible Issues
---------------
The manufacturer code for plugins built under CMake with this version of JUCE
will differ from the manufacturer code that was generated previously.
Workaround
----------
If you have released plugins that used the old, incorrect manufacturer code and
wish to continue using this code for backwards compatibility, add the following
to your `juce_add_plugin` call:
USE_LEGACY_COMPATIBILITY_PLUGIN_CODE TRUE
In most cases, this should not be necessary, and we recommend using the fixed
behaviour.
Rationale
---------
This change ensures that the manufacturer codes used by CMake projects match
the codes that would be generated by the Projucer, improving compatibility
when transitioning from the Projucer to CMake.
Version 6.0.2
=============
Change
------
The JUCE_WASAPI_EXCLUSIVE flag has been removed from juce_audio_devices and all
available WASAPI audio device modes (shared, shared low latency and exclusive)
are available by default when JUCE_WASAPI is enabled. The
AudioIODeviceType::createAudioIODeviceType_WASAPI() method which takes a single
boolean argument has also been deprecated in favour of a new method which takes
a WASAPIDeviceMode enum.
Possible Issues
---------------
Code that relied on the JUCE_WASAPI_EXCLUSIVE flag to disable WASAPI exclusive
mode will no longer work.
Workaround
----------
Override the AudioDeviceManager::createAudioDeviceTypes() method to omit the
WASAPI exclusive mode device if you do not want it to be available.
Rationale
---------
JUCE now supports shared low latency WASAPI audio devices via the AudioClient3
interface and instead of adding an additional compile time config flag to
enable this functionality, which adds complexity to the build process when not
using the Projucer, JUCE makes all WASAPI device modes available by default.
Change
------
The fields representing Mac OS X 10.4 to 10.6 inclusive have been removed from
the `OperatingSystemType` enum.
Possible Issues
---------------
Code that uses these fields will fail to build.
Workaround
----------
Remove references to these fields from user code.
Rationale
---------
JUCE is not supported on Mac OS X versions lower than 10.7, so it is a given
that `getOperatingSystemType` will always return an OS version greater than or
equal to 10.7. Code that changes behaviours depending on the OS version can
assume that this version is at least 10.7.
Change
------
The JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING flag in juce_graphics is no
longer used on iOS.
Possible Issues
---------------
Projects with this flag enabled may render differently on iOS.
Workaround
----------
There is no workaround.
Rationale
---------
When using a cached image to render Components with `setBufferedToImage (true)`
the result now matches the default behaviour on iOS where fonts are not
smoothed.
Change
------
Space, return and escape key events on the native macOS menu bar are no longer
passed to the currently focused JUCE Component.
Possible Issues
---------------
Code relying on receiving these keyboard events will no longer work.
Workaround
----------
There is no workaround.
Rationale
---------
It should be possible for users with a keyboard or assistive device to navigate
the menu, invoking the currently highlighted menu item with the space or return
key and dismissing the menu with the escape key. These key events should not be
passed to the application and doing so interferes with the accessibility of
JUCE apps. Only passing these events to the native macOS menu means that JUCE
apps behave as expected for users.
Version 6.0.0
=============
Change
------
The Convolution class interface was changed:
- `loadImpulseResponse` member functions now take `enum class` parameters
instead of `bool`.
- `copyAndLoadImpulseResponseFromBlock` and
`copyAndLoadImpulseResponseFromBuffer` were replaced by a new
`loadImpulseResponse` overload.
Possible Issues
---------------
Code using the old interface will no longer compile, and will need to be
updated.
Workaround
----------
Code that was previously loading impulse responses from binary data or from
files can substitute old `bool` parameters with the newer `enum class`
equivalents. Code that was previously passing buffers or blocks will need
reworking so that the Convolution instance can take ownership of the buffer
containing the impulse response.
Rationale
---------
The newer `enum class` parameters make user code much more readable, e.g.
`loadImpulseResponse (file, Stereo::yes, Trim::yes, 0, Normalise::yes)` rather
than `loadImpulseResponse (file, true, true, 0, true);`. By taking ownership of
the passed buffer, the Convolution can avoid preallocating a large internal
buffer, reducing memory usage when short impulse responses are used. Changing
the ownership semantics of the buffer also makes it easier for users to avoid
copies/allocations on the audio thread, and gives more flexibility to the
implementation to run initialisation tasks on a background thread.
Change
------
All references to ROLI Ltd. (ROLI) have been changed to Raw Material Software
Limited.
Possible Issues
---------------
Exising projects, particularly Android, may need to be resaved by the Projucer
and have the old build artifacts deleted before they will build.
Workaround
----------
In Android projects any explicit mention of paths with the from "com.roli.*"
should be changed to the form "com.rmsl.*".
Rationale
---------
This change reflects the change in ownership from ROLI to RMSL.
Change
------
The Windows DPI handling in the VST wrapper and hosting code has been
refactored to be more stable.
Possible Issues
---------------
The new code uses a top-level AffineTransform to scale the JUCE editor window
instead of native methods. Therefore any AudioProcessorEditors which have their
own AffineTransform applied will no longer work correctly.
Workaround
----------
If you are using an AffineTransform to scale the entire plug-in window then
consider putting the component you want to transform in a child of
the editor and transform that instead. Alternatively, if you don't need a
separate scale factor for each plug-in instance you can use
Desktop::setGlobalScaleFactor().
Rationale
---------
The old code had some bugs when using OpenGL and when moving between monitors
with different scale factors. The new code should fix these and DPI-aware
plug-ins will scale correctly.
Change
------
Relative Xcode subproject paths specified in the Projucer are now relative to
the build directory rather than the project directory.
Possible Issues
---------------
After being re-saved in the Projucer existing Xcode projects will fail to find
any subprojects specified using a relative path.
Workaround
----------
Update the subproject path in the Projucer.
Rationale
---------
Most other Xcode specific paths are specified reltive to the build directory.
This change brings the Xcode subproject path in line with the rest of the
configuration.
Version 5.4.6
=============
Change
------
AudioProcessorValueTreeState::getRawParameterValue now returns a
std::atomic<float>* instead of a float*.
Possible Issues
---------------
Existing code which explicitly mentions the type of the returned value, or
interacts with the dereferenced float in ways unsupported by the std::atomic
wrapper, will fail to compile. Certain evaluation-reordering compiler
optimisations may no longer be possible.
Workaround
----------
Update your code to deal with a std::atomic<float>* instead of a float*.
Rationale
---------
Returning a std::atomic<float>* allows the JUCE framework to have much stronger
guarantees about thread safety.
Change
------
Removed a workaround from the ASIOAudioIODevice::getOutputLatencyInSamples()
and ASIOAudioIODevice::getInputLatencyInSamples() methods which was adding an
arbitrary amount to the reported latencies to compensate for dodgy, old
drivers.
Possible Issues
---------------
Code which relied on these altered values may now behave differently.
Workaround
----------
Update your code to deal with the new, correct values reported from the drivers
directly.
Rationale
---------
JUCE will now return the latency values as reported by the drivers without
adding anything to them. The workaround was for old drivers and the current
drivers should report the correct values without the need for the workaround.
Change
------
The default behaviour of the AU and AUv3 plug-in wrappers is now to call
get/setStateInformation instead of get/setProgramStateInformation.
Possible Issues
---------------
AudioProcessor subclasses which have overridden the default implementations of
get/setProgramStateInformation (which simply call through to
get/setStateInformation) may be unable to load previously saved state; state
previously saved via a call to getProgramStateInformation will be presented to
setStateInformation.
Workaround
----------
Enable the JUCE_AU_WRAPPERS_SAVE_PROGRAM_STATES configuration option in the
juce_audio_plugin_client module to preserve backwards compatibility if
required.
Rationale
---------
When using overridden get/setProgramStateInformation methods the previous
behaviour of the AU and AUv3 wrappers does not correctly save and restore
state.
Version 5.4.5
=============
Change
------
The alignment of text rendered on macOS using CoreGraphics may have shifted
slightly, depending on the font you have used. The default macOS font has
shifted downwards.
Possible Issues
---------------
Meticulously aligned text components of a GUI may now be misaligned.
Workaround
----------
Use a custom LookAndFeel to change the location where text is drawn, or use a
different font that matches the previous alignment of your original font.
Rationale
---------
This was an unintentional change resulting from moving away from a deprecated
macOS text API. The new alignment is consistent with other rendering engines
(web browsers and text editors) and the software renderer.
Change
------
The JUCEApplicationBase::backButtonPressed() method now returns a bool to
indicate whether the back event was handled or not.
Possible Issues
---------------
Applications which override this method will fail to compile.
Workaround
----------
You will need to update your code to return a bool indicating whether the back
event was handled or not.
Rationale
---------
The back button behaviour on Android was previously broken as it would not do
anything. The new code will correctly call finish() on the Activity when the
back button is pressed but this method now allows the user to override this to
implement their own custom navigation behaviour by returning true to indicate
that it has been handled.
Change
------
The AudioBlock class has been refactored and some of the method names have
changed. Additionally the `const` behaviour now mirrors that of `std::span`,
with the `const`-ness of the contained data decoupled from the `const`-ness of
the container.
Possible Issues
---------------
Code using the old method names or violating `const`-correctness will fail to
compile.
Workaround
----------
You will need to update your code to use the new method names and select an
appropriate `const`-ness for the AudioBlock and the data it references.
Rationale
---------
The names of some of the methods in the AudioBlock class were ambiguous,
particularly when chaining methods involving references to other blocks. The
interaction between the `const`-ness of the AudioBlock and the `const`-ness of
the referenced data was also ambiguous and has now been standardised to the
same behaviour as other non-owning data views like `std::span`.
Version 5.4.4
=============
Change
------
The Visual Studio 2013 exporter has been removed from the Projucer and we will
no longer maintain backwards compatibility with Visual Studio 2013 in JUCE.
Possible Issues
---------------
It is no longer possible to create Visual Studio 2013 projects from the
Projucer or compile JUCE-based software using Visual Studio 2013.
Workaround
----------
If you are using Visual Studio 2013 to build your projects you will need to
update to a more modern version of Visual Studio.
Rationale
---------
Of all the platforms JUCE supports Visual Studio 2013 was holding us back the
most in terms of C++ features we would like to use more broadly across the
codebase. It is still possible to target older versions of Windows with more
modern versions of Visual Studio. Until recently the AAX SDK was distributed as
a Visual Studio 2013 project, but this is now provided as a Visual Studio 2017
project.
Change
------
JUCE is moving towards using C++11 pointer container types instead of passing
raw pointers as arguments and return values.
Possible Issues
---------------
You will need to change your code to pass std::unique_ptr into and out of
various functions across JUCE's API.
Workaround
----------
None
Rationale
---------
Indicating ownership through the transfer of smart pointer types has been part
of mainstream C++ for a long time and this change enforces memory safety by
default in most situations.
Change
------
SystemTrayIconComponent::setIconImage now takes two arguments, rather than one.
The new argument is a template image for use on macOS where all non-transparent
regions will render in a monochrome colour determined dynamically by the
operating system.
Possible Issues
---------------
You will now need to provide two images to display a SystemTrayIconComponent
and the SystemTrayIconComponent will have a different appearance on macOS.
Workaround
----------
If you are not targeting macOS then you can provide an empty image, `{}`, for
the second argument. If you are targeting macOS then you will likely need to
design a new monochrome icon.
Rationale
---------
The introduction of "Dark Mode" in macOS 10.14 means that menu bar icons must
support several different colours and highlight modes to retain the same
appearance as the native Apple icons. Doing this correctly without delegating
the behaviour to the operating system is extremely cumbersome, and the APIs we
were previously using to interact with menu bar items have been deprecated.
Change
------
The AudioBlock class now differentiates between const and non-const data.
Possible Issues
---------------
The return type of the getInputBlock() method of the ProcessContextReplacing
and ProcessContextNonReplacing classes has changed from AudioBlock<X> to
AudioBlock<const X>.
Workaround
----------
For ProcessContextReplacing you should use getOutputBlock() instead of
getInputBlock(). For ProcessContextNonReplacing attempting to modify the input
block is very likely an error.
Rationale
---------
This change makes the intent of the code much clearer and means that we can
remove some const_cast operations.
Change
------
The formatting of floating point numbers written to XML and JSON files has
changed.
Note that there is no change in precision - the XML and JSON files containing
the new format numbers will parse in exactly the same way, it is only the
string representation that has changed.
Possible Issues
---------------
If you rely upon exactly reproducing XML or JSON files then the new files may
be different.
Workaround
----------
Update any reference XML or JSON files to use the new format.
Rationale
---------
The new format retains full precision, provides a human friendly representation
of values near 1, and uses scientific notation for small and large numbers.
This prevents needless file size bloat from numbers like 0.00000000000000001.
Version 5.4.3
=============
Change
------
The global user module path setting in the Projucer can now only contain a
single path.
Possible Issues
---------------
Projects that previously relied on using multiple global user module paths
separated by a semicolon will fail to find these modules after re-saving.
Workaround
----------
Replace the multiple paths with a single global user module path.
Rationale
---------
Using multiple global user module paths did not work when saving a project
which exported to different OSes. Only allowing a single path will prevent this
from silently causing issues.
Version 5.4.2
=============
Change
------
The return type of Block::getBlockAreaWithinLayout() has been changed from
Rectangle to a simpler BlockArea struct.
Possible Issues
---------------
Classes that derive from Block and implement this pure virtual method will no
longer compile due to a change in the function signature.
Workaround
----------
Update the method to return a BlockArea struct and update code that calls
getBlockAreaWithinLayout to handle a BlockArea instead of a Rectangle.
Rationale
---------
The juce_blocks_basics is ISC licensed and therefore cannot depend on the
GPL/Commercial licensed juce_graphics module that contains Rectangle.
Change
------
Renaming and deletion of open file handles on Windows is now possible using the
FILE_SHARE_DELETE flag.
Possible Issues
---------------
Previous code that relied on open files not being able to be renamed or deleted
on Windows may fail.
Workaround
----------
No workaround.
Rationale
---------
This unifies the behaviour across OSes as POSIX systems already allow this.
Change
------
Multiple changes to low-level, non-public JNI and Android APIs.
Possible Issues
---------------
If you were using any non-public, low-level JNI macros, calling java code or
recieving JNI callbacks, then your code will probably no longer work. See the
forum for further details.
Workaround
----------
See the forum for further details.
Rationale
---------
See the forum for further details.
Change
------
The minimum Android version for a JUCE app is now Android 4.1
Possible Issues
---------------
Your app may not run on very old versions of Android (less than 0.5% of the
devices).
Workaround
----------
There is no workaround.
Rationale
---------
Less than 0.5% of all devices in the world run versions of Android older than
Android 4.1. In the interest of keeping JUCE code clean and lean, we must
depricate support for very old Android versions from time to time.
Version 5.4.0
=============
Change
------
The use of WinRT MIDI functions has been disabled by default for any version
of Windows 10 before 1809 (October 2018 Update).
Possible Issues
---------------
If you were previously using WinRT MIDI functions on older versions of Windows
then the new behaviour is to revert to the old Win32 MIDI API.
Workaround
----------
Set the preprocessor macro JUCE_FORCE_WINRT_MIDI=1 (in addition to the
previously selected JUCE_USE_WINRT_MIDI=1) to allow the use of the WinRT API on
older versions of Windows.
Rationale
---------
Until now JUCE's support for the Windows 10 WinRT MIDI API was experimental,
due to longstanding issues within the API itself. These issues have been
addressed in the Windows 10 1809 (October 2018 Update) release.
Change
------
The VST2 SDK embedded within JUCE has been removed.
Possible Issues
---------------
1. Building or hosting VST2 plug-ins requires header files from the VST2 SDK,
which is no longer part of JUCE.
2. Building a VST2-compatible VST3 plug-in (the previous default behaviour in
JUCE) requires header files from the VST2 SDK, which is no longer part of
JUCE.
Workaround
----------
1. The VST2 SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or
older) VST3 SDK or JUCE version 5.3.2. You should put the VST2 SDK in your
header search paths or use the "VST (Legacy) SDK Folder" fields in the
Projucer.
2. For new plug-in projects where you will be releasing both a VST2 and VST3
version, and you want the VST3 plug-in to replace the VST2 plug-in in
hosts that support it, then you should enable the JUCE_VST3_CAN_REPLACE_VST2
option.
3. When a new JUCE plug-in project is created the value of
JUCE_VST3_CAN_REPLACE_VST2 will be set to zero.
Rationale
---------
Distributing VST2 plug-ins requires a VST2 license from Steinberg. Following
Steinberg's removal of the VST2 SDK from their public SDKs we are also removing
the VST2 SDK from the JUCE codebase.
Change
------
The AudioProcessorValueTreeState::createAndAddParameter function has been
deprecated.
Possible Issues
---------------
Deprecation warnings will be seen when compiling code which uses this function
and eventually builds will fail when it is later removed from the API.
Workaround
----------
Previous calls to
createAndAddParameter (paramID, paramName, ...);
can be directly replaced with
using Parameter = AudioProcessorValueTreeState::Parameter;
createAndAddParameter (std::make_unique<Parameter> (paramID, paramName, ...));
but an even better approach is to use the new AudioProcessorValueTreeState
constructor where you can pass both RangedAudioParameters and
AudioProcessorParameterGroups of RangedAudioParameters to the
AudioProcessorValueTreeState and initialise the ValueTree simultaneously.
Rationale
---------
The new createAndAddParameter method is much more flexible and enables any
parameter types derived from RangedAudioParameter to be managed by the
AudioProcessorValueTreeState.
Change
------
The Projucer's per-exporter Android SDK/NDK path options have been removed.
Possible Issues
---------------
Projects that previously used these fields may no longer build.
Workaround
----------
Use the Projucer's global paths settings to point to these directories, either
by opening the "Projucer/File->Global Paths..." menu item or using the
"--set-global-search-path" command-line option.
Rationale
---------
Having multiple places where the paths could be set was confusing and could
cause unexpected mismatches.
Change
------
SystemStats::getDeviceDescription() will now return the device code on iOS e.g.
"iPhone7, 2" for an iPhone 6 instead of just "iPhone".
Possible Issues
---------------
Code that previously relied on this method returning either explicitly "iPhone"
or "iPad" may no longer work.
Workaround
----------
Modify this code to handle the new device code string e.g. by changing:
SystemStats::getDeviceDescription() == "iPhone";
to
SystemStats::getDeviceDescription().contains ("iPhone");.
Rationale
---------
The exact device model can now be deduced from this information instead of just
the device family.
Change
------
DragAndDropContainer::performExternalDragDropOfFiles() and
::performExternalDragDropOfText() are now asynchronous on Windows.
Possible Issues
---------------
Code that previously relied on these operations being synchronous and blocking
until completion will no longer work as the methods will return immediately and
run asynchronously.
Workaround
----------
Use the callback argument that has been added to these methods to register a
lambda that will be called when the operation has been completed.
Rationale
---------
The behaviour of these methods is now consistent across all platforms and the
method no longer blocks the message thread on Windows.
Change
------
AudioProcessor::getTailLengthSeconds can now return infinity for
VST/VST3/AU/AUv3.
Possible Issues
---------------
If you are using the result of getTailLengthSeconds to allocate a buffer in
your host, then your host will now likely crash when loading a plug-in with an
infinite tail time.
Workaround
----------
Rewrite your code to not use the result of getTailLengthSeconds directly to
allocate a buffer.
Rationale
---------
Before this change there was no way for a JUCE plug-in to report an infinite
tail time.
Version 5.3.2
=============
Change
------
The behaviour of an UndoManager used by an AudioProcessorValueTreeState has
been improved.
Possible Issues
---------------
If your plug-in contains an UndoManager used by an AudioProcessorValueTreeState
and relies upon the old behaviour of the UndoManager then it is possible that
the new behaviour is no longer appropriate for your use case.
Workaround
----------
Use an external UndoManager to reproduce the old behaviour manually.
Rationale
---------
This change fixes a few bugs in the behaviour of an UndoManager used by an
AudioProcessorValueTreeState.
Change
------
JUCE no longer supports OS X deployment targets earlier than 10.7.
Possible Issues
---------------
If you were previously targeting OS X 10.5 or 10.6 you will no longer be able
to build JUCE-based products compatible with those platforms.
Workaround
----------
None. With the appropriate JUCE licence you may be able to backport new JUCE
features, but there will be no official support for this.
Rationale
---------
Increasing the minimum supported OS X version allows the JUCE codebase to make
use of the more modern C++ features found in the 10.7 standard library, which