From 9d9045ddba83cf02d121331d507c3fb91be315c9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 8 Aug 2016 15:27:14 +0200 Subject: [PATCH] New upstream version 4.2.3~repack --- ChangeList.txt | 8 +- examples/AUv3Synth/AUv3Synth.jucer | 2 +- .../AUv3Synth.xcodeproj/project.pbxproj | 106 +++--- .../iOS/AUv3Synth.xcodeproj/project.pbxproj | 240 ++++++++---- .../Builds/iOS/Info-VST.plist} | 26 +- .../AUv3Synth/JuceLibraryCode/AppConfig.h | 11 +- .../AnimationAppExample.jucer | 2 +- .../AudioAppExample/AudioAppExample.jucer | 2 +- .../BouncingBallWavetableDemo.jucer | 2 +- .../Builds/Linux/Makefile | 4 +- .../ComponentTutorialExample.jucer | 2 +- examples/Demo/Builds/Android/jni/Android.mk | 8 +- examples/Demo/Builds/Linux/Makefile | 4 +- examples/Demo/Builds/MacOSX/Info-App.plist | 5 + examples/Demo/Builds/iOS/Info-App.plist | 5 + examples/Demo/JuceDemo.jucer | 8 +- .../Demo/Source/Demos/CryptographyDemo.cpp | 2 +- examples/Demo/Source/MainWindow.cpp | 16 +- examples/Demo/Source/MainWindow.h | 3 + examples/HelloWorld/Builds/Linux/Makefile | 4 +- examples/HelloWorld/HelloWorld.jucer | 2 +- .../MPETest/Builds/LinuxMakefile/Makefile | 4 +- examples/MPETest/MPETest.jucer | 2 +- .../MidiTest/Builds/LinuxMakefile/Makefile | 4 +- examples/MidiTest/MidiTest.jucer | 2 +- .../Builds/LinuxMakefile/Makefile | 4 +- .../NetworkGraphicsDemo.jucer | 2 +- .../OSCMonitor/Builds/LinuxMakefile/Makefile | 4 +- examples/OSCMonitor/OSCMonitor.jucer | 2 +- .../OSCReceiver/Builds/LinuxMakefile/Makefile | 4 +- examples/OSCReceiver/OSCReceiver.jucer | 2 +- .../OSCSender/Builds/LinuxMakefile/Makefile | 4 +- examples/OSCSender/OSCSender.jucer | 2 +- .../OpenGLAppExample/OpenGLAppExample.jucer | 2 +- .../PluckedStringsDemo.jucer | 2 +- .../Arpeggiator/Arpeggiator.jucer | 2 +- .../Arpeggiator.xcodeproj/project.pbxproj | 64 ++-- .../VisualStudio2015/Arpeggiator.vcxproj | 4 +- .../Arpeggiator.vcxproj.filters | 10 +- .../Arpeggiator/JuceLibraryCode/AppConfig.h | 13 +- .../GainPlugIn.xcodeproj/project.pbxproj | 68 ++-- .../VisualStudio2015/GainPlugIn.vcxproj | 4 +- .../GainPlugIn.vcxproj.filters | 10 +- .../PlugInSamples/GainPlugIn/GainPlugIn.jucer | 2 +- .../GainPlugIn/JuceLibraryCode/AppConfig.h | 11 +- .../MultiOutSynth.xcodeproj/project.pbxproj | 64 ++-- .../VisualStudio2015/MultiOutSynth.vcxproj | 4 +- .../MultiOutSynth.vcxproj.filters | 10 +- .../MultiOutSynth/JuceLibraryCode/AppConfig.h | 11 +- .../MultiOutSynth/MultiOutSynth.jucer | 2 +- .../NoiseGate.xcodeproj/project.pbxproj | 64 ++-- .../Builds/VisualStudio2015/NoiseGate.vcxproj | 4 +- .../NoiseGate.vcxproj.filters | 10 +- .../NoiseGate/JuceLibraryCode/AppConfig.h | 11 +- .../PlugInSamples/NoiseGate/NoiseGate.jucer | 2 +- .../Surround/Builds/LinuxMakefile/Makefile | 4 +- .../MacOSX/Surround.xcodeproj/project.pbxproj | 56 ++- .../Builds/VisualStudio2015/Surround.vcxproj | 4 +- .../VisualStudio2015/Surround.vcxproj.filters | 10 +- .../Surround/JuceLibraryCode/AppConfig.h | 11 +- .../PlugInSamples/Surround/Surround.jucer | 2 +- .../SimpleFFTExample/SimpleFFTExample.jucer | 2 +- .../Source/SpectrogramComponent.h | 2 +- .../audio plugin demo/Builds/Linux/Makefile | 4 +- .../Builds/MacOSX/Info-AU.plist | 2 +- .../JuceDemoPlugin.xcodeproj/project.pbxproj | 49 ++- .../VisualStudio2015/JuceDemoPlugin.vcxproj | 4 +- .../JuceDemoPlugin.vcxproj.filters | 10 +- .../audio plugin demo/JuceDemoPlugin.jucer | 4 +- .../JuceLibraryCode/AppConfig.h | 11 +- .../audio plugin demo/Source/PluginEditor.cpp | 56 ++- .../audio plugin demo/Source/PluginEditor.h | 4 - .../Source/PluginProcessor.cpp | 4 +- .../audio plugin host/Builds/Linux/Makefile | 4 +- examples/audio plugin host/Plugin Host.jucer | 2 +- .../AudioPerformanceTest.jucer | 2 +- .../Builds/LinuxMakefile/Makefile | 4 +- extras/Projucer/Builds/LinuxMakefile/Makefile | 4 +- extras/Projucer/Builds/MacOSX/Info-App.plist | 4 +- .../MacOSX/Projucer.xcodeproj/project.pbxproj | 8 +- .../Builds/VisualStudio2013/Projucer.vcxproj | 4 +- .../Builds/VisualStudio2013/resources.rc | 6 +- .../Builds/VisualStudio2015/Projucer.vcxproj | 4 +- .../Builds/VisualStudio2015/resources.rc | 6 +- extras/Projucer/JuceLibraryCode/JuceHeader.h | 4 +- extras/Projucer/Projucer.jucer | 2 +- .../components/jucer_TextButtonHandler.h | 23 +- .../Project Saving/jucer_ProjectExport_MSVC.h | 15 + .../jucer_ProjectExport_XCode.h | 64 ++-- .../Project Saving/jucer_ProjectSaver.cpp | 11 +- .../Project/jucer_ConfigTree_Exporter.h | 5 +- .../Projucer/Source/Project/jucer_Module.cpp | 6 - .../Projucer/Source/Project/jucer_Project.cpp | 9 +- .../Project/jucer_ProjectContentComponent.cpp | 8 +- .../Source/Utility/jucer_MiscUtilities.cpp | 5 +- .../Projucer/Source/Utility/jucer_PresetIDs.h | 1 + .../Builds/LinuxMakefile/Makefile | 4 +- extras/UnitTestRunner/UnitTestRunner.jucer | 2 +- extras/binarybuilder/BinaryBuilder.jucer | 2 +- extras/binarybuilder/Builds/Linux/Makefile | 4 +- extras/windows dll/jucedll.jucer | 2 +- .../buffers/juce_FloatVectorOperations.cpp | 17 +- modules/juce_audio_basics/juce_audio_basics.h | 2 +- .../midi/juce_MidiMessage.cpp | 139 +++---- .../juce_audio_basics/midi/juce_MidiMessage.h | 34 +- .../midi/juce_MidiMessageSequence.h | 12 + modules/juce_audio_basics/mpe/juce_MPEZone.h | 20 +- .../audio_io/juce_AudioDeviceManager.cpp | 4 +- .../juce_audio_devices/juce_audio_devices.h | 2 +- .../native/juce_MidiDataConcatenator.h | 13 +- .../native/juce_ios_Audio.cpp | 23 +- .../native/juce_linux_JackAudio.cpp | 2 + .../native/juce_mac_AudioCDReader.mm | 3 +- .../native/juce_win32_ASIO.cpp | 5 +- .../codecs/juce_FlacAudioFormat.cpp | 62 +++- .../codecs/juce_WavAudioFormat.cpp | 5 +- .../juce_audio_formats/juce_audio_formats.h | 2 +- .../AAX/juce_AAX_Modifier_Injector.h | 41 +++ .../AAX/juce_AAX_Wrapper.cpp | 256 +++++++++---- .../RTAS/juce_RTAS_Wrapper.cpp | 26 +- .../Standalone/juce_StandaloneFilterApp.cpp | 8 +- .../Standalone/juce_StandaloneFilterWindow.h | 4 +- .../VST/juce_VST_Wrapper.cpp | 67 ++-- .../VST/juce_VST_Wrapper.mm | 4 + .../VST3/juce_VST3_Wrapper.cpp | 343 +++++++++++++++--- .../juce_audio_plugin_client.h | 13 +- .../juce_audio_plugin_client_AU.r | 69 ++++ .../juce_audio_plugin_client_RTAS.r | 6 + .../juce_audio_plugin_client_Standalone.cpp | 4 + .../utility/juce_PluginBusUtilities.h | 2 +- .../utility/juce_PluginHostType.h | 26 +- .../utility/juce_PluginUtilities.cpp | 2 +- .../format/juce_AudioPluginFormatManager.cpp | 8 +- .../juce_AudioUnitPluginFormat.mm | 45 ++- .../format_types/juce_VST3Common.h | 4 +- .../format_types/juce_VST3Headers.h | 5 + .../format_types/juce_VST3PluginFormat.cpp | 162 +++++++-- .../format_types/juce_VST3PluginFormat.h | 2 +- .../format_types/juce_VSTPluginFormat.cpp | 124 +++++-- .../format_types/juce_VSTPluginFormat.h | 9 +- .../juce_audio_processors.h | 2 +- .../processors/juce_AudioChannelSet.cpp | 7 + .../processors/juce_AudioChannelSet.h | 8 +- .../processors/juce_AudioProcessor.cpp | 21 +- .../processors/juce_AudioProcessor.h | 16 +- .../processors/juce_AudioProcessorEditor.cpp | 131 ++++++- .../processors/juce_AudioProcessorEditor.h | 78 +++- .../juce_GenericAudioProcessorEditor.cpp | 10 + .../scanning/juce_KnownPluginList.cpp | 60 ++- .../scanning/juce_KnownPluginList.h | 2 +- .../scanning/juce_PluginListComponent.cpp | 2 + .../juce_AudioProcessorValueTreeState.cpp | 8 +- modules/juce_audio_utils/juce_audio_utils.h | 2 +- .../box2d/Dynamics/Contacts/b2Contact.h | 2 +- modules/juce_box2d/juce_box2d.h | 2 +- modules/juce_core/containers/juce_Array.h | 10 +- .../juce_core/containers/juce_OwnedArray.h | 11 +- .../containers/juce_ReferenceCountedArray.h | 11 +- modules/juce_core/containers/juce_Variant.cpp | 1 + modules/juce_core/containers/juce_Variant.h | 1 + modules/juce_core/files/juce_File.cpp | 49 ++- .../juce_core/files/juce_FileSearchPath.cpp | 5 +- modules/juce_core/files/juce_FileSearchPath.h | 7 +- modules/juce_core/javascript/juce_JSON.cpp | 15 +- .../juce_core/javascript/juce_Javascript.cpp | 62 +++- modules/juce_core/juce_core.cpp | 1 + modules/juce_core/juce_core.h | 2 +- modules/juce_core/maths/juce_BigInteger.cpp | 177 +++++++-- modules/juce_core/maths/juce_BigInteger.h | 42 ++- .../memory/juce_ReferenceCountedObject.h | 24 +- modules/juce_core/memory/juce_ScopedPointer.h | 7 + .../juce_core/native/juce_linux_Network.cpp | 15 +- modules/juce_core/native/juce_mac_Network.mm | 280 +++++++++++++- .../juce_core/native/juce_posix_SharedCode.h | 29 +- .../juce_core/native/juce_win32_Network.cpp | 2 +- .../native/juce_win32_SystemStats.cpp | 11 - modules/juce_core/network/juce_URL.cpp | 2 +- .../juce_core/system/juce_CompilerSupport.h | 2 +- .../juce_core/system/juce_StandardHeader.h | 2 +- modules/juce_core/text/juce_StringArray.cpp | 9 +- modules/juce_core/text/juce_StringArray.h | 4 +- modules/juce_core/unit_tests/juce_UnitTest.h | 93 ++++- modules/juce_core/xml/juce_XmlDocument.cpp | 13 +- modules/juce_cryptography/juce_cryptography.h | 2 +- .../juce_data_structures.h | 2 +- .../juce_InterprocessConnectionServer.cpp | 4 +- .../juce_InterprocessConnectionServer.h | 9 +- modules/juce_events/juce_events.h | 2 +- .../messages/juce_ApplicationBase.cpp | 10 + .../contexts/juce_GraphicsContext.cpp | 78 ++-- .../contexts/juce_GraphicsContext.h | 46 ++- .../geometry/juce_PathStrokeType.cpp | 4 +- modules/juce_graphics/images/juce_Image.cpp | 19 +- modules/juce_graphics/images/juce_Image.h | 6 +- modules/juce_graphics/juce_graphics.h | 2 +- .../native/juce_mac_CoreGraphicsContext.mm | 2 +- .../buttons/juce_DrawableButton.h | 14 +- .../components/juce_Component.cpp | 18 +- .../components/juce_Component.h | 8 +- .../components/juce_ModalComponentManager.cpp | 21 +- .../components/juce_ModalComponentManager.h | 39 +- .../drawables/juce_SVGParser.cpp | 97 ++--- .../filebrowser/juce_FileChooser.cpp | 10 +- modules/juce_gui_basics/juce_gui_basics.h | 2 +- .../keyboard/juce_KeyPress.cpp | 2 +- .../lookandfeel/juce_LookAndFeel_V2.cpp | 5 + .../lookandfeel/juce_LookAndFeel_V2.h | 2 + .../lookandfeel/juce_LookAndFeel_V3.cpp | 2 +- .../juce_gui_basics/menus/juce_PopupMenu.cpp | 131 ++++--- .../juce_gui_basics/menus/juce_PopupMenu.h | 15 + .../native/juce_android_Windowing.cpp | 5 +- .../native/juce_ios_Windowing.mm | 1 + .../native/juce_linux_FileChooser.cpp | 2 - .../native/juce_linux_Windowing.cpp | 12 +- .../native/juce_mac_NSViewComponentPeer.mm | 2 +- .../native/juce_win32_Windowing.cpp | 45 ++- .../widgets/juce_ImageComponent.cpp | 2 +- .../juce_gui_basics/widgets/juce_Toolbar.cpp | 1 + .../widgets/juce_ToolbarItemComponent.h | 2 +- .../windows/juce_TooltipWindow.cpp | 3 +- modules/juce_gui_extra/juce_gui_extra.h | 2 +- .../native/juce_linux_SystemTrayIcon.cpp | 4 +- modules/juce_opengl/juce_opengl.h | 2 +- .../juce_opengl/opengl/juce_OpenGLImage.cpp | 16 +- modules/juce_osc/juce_osc.h | 2 +- .../juce_tracktion_marketplace.h | 2 +- modules/juce_video/juce_video.h | 2 +- 227 files changed, 3435 insertions(+), 1361 deletions(-) rename examples/{PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist => AUv3Synth/Builds/iOS/Info-VST.plist} (53%) create mode 100644 modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h create mode 100644 modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r create mode 100644 modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r diff --git a/ChangeList.txt b/ChangeList.txt index ee5411ae..71efd0e4 100644 --- a/ChangeList.txt +++ b/ChangeList.txt @@ -2,7 +2,13 @@ == Major JUCE features and updates == This file just lists the more notable headline features. For more detailed info -about minor changes and bugfixes, please see the git log! +about minor changes and bugfixes, please see the git log! + +Version 4.2.3 + - Various VST3 improvements: resizing VST3 windows, plug-in compatibility issues + - Use NSURLSession on newer OS X versions + - Add compatibility for VST 3 SDK update 3.6.6 + - Miscellaneous fixes and improvements Version 4.2.1 - New class CachedValue, for providing easy and efficient access to ValueTree properties diff --git a/examples/AUv3Synth/AUv3Synth.jucer b/examples/AUv3Synth/AUv3Synth.jucer index 56189d2d..c1aa7d0c 100644 --- a/examples/AUv3Synth/AUv3Synth.jucer +++ b/examples/AUv3Synth/AUv3Synth.jucer @@ -9,7 +9,7 @@ pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="AUv3SynthAU" pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth" - pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1" + pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3" buildStandalone="1"> diff --git a/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj b/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj index 38e73c68..8dec284a 100644 --- a/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj +++ b/examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ F452B8399A32BE4F1074F596 = {isa = PBXBuildFile; fileRef = 29982493607128FD6DB6A284; }; 69856794EB88963828DDECC6 = {isa = PBXBuildFile; fileRef = 5DAB08505A14E46FF7BF3B1D; }; F56A47BDEEC76681EE80A15E = {isa = PBXBuildFile; fileRef = F003DFE998431203650E2E3F; }; - 26AB69B22ED0C3D7288D1175 = {isa = PBXBuildFile; fileRef = FF08B80860BB393314DC49EA; }; 78704983DFEA5408FC5767D8 = {isa = PBXBuildFile; fileRef = D06C2B85E02F13F9B57DB1A9; }; DE7F04372E0068FDBB51B63D = {isa = PBXBuildFile; fileRef = 9C7C3A15A9D747596DDE40AA; }; EB5DBEF68B987F85D1977CE6 = {isa = PBXBuildFile; fileRef = 5063E96C5D8860003810C70E; }; @@ -659,6 +658,7 @@ 7FE887D76DBB520BBC48CDAF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 802CA561D36E5556CF267271 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomic.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomic.h"; sourceTree = "SOURCE_ROOT"; }; 804448A2E110E3D84021289F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 805675527BC735B25A5907A5 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 80868CF2327E15F76AD68CF6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; 80970DB9418D27DD52879D1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; 809E47902CCE60747026EC3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -779,6 +779,7 @@ 9767C9015F48F6F42AEC0C9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAutoDisposer.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h"; sourceTree = "SOURCE_ROOT"; }; 97C74E9A0E8A5576FC301241 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; }; 97DDC460BD01030B91158218 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 98135B5CED6D00B04F8AD56C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 9819471C5F5583C007A4AED1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "win_utf8_io.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/win_utf8_io.h"; sourceTree = "SOURCE_ROOT"; }; 98305AA6513DCC298E322C0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; 9849BB6DC80E45E541475772 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jerror.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.h"; sourceTree = "SOURCE_ROOT"; }; @@ -883,6 +884,8 @@ AC36AEF9A7D94B5F50725E38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lpc.h"; sourceTree = "SOURCE_ROOT"; }; AC3D1C939D60CBB9F06E5195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorPlayer.h"; path = "../../../../modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h"; sourceTree = "SOURCE_ROOT"; }; ACDA8668B39A102D419BD481 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_TextButton.h"; sourceTree = "SOURCE_ROOT"; }; + ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; + AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; }; AD748818ED49AF2A6BF7AF0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAMath.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAMath.h"; sourceTree = "SOURCE_ROOT"; }; ADA10B57D3CACBF7CA3E7058 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; ADEFBF282F9FF39E37862A73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pnginfo.h"; sourceTree = "SOURCE_ROOT"; }; @@ -891,22 +894,44 @@ AE8270C49E4D0C9109CF8499 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; AF02093447674A2DBEFB7B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextInputTarget.h"; path = "../../../../modules/juce_gui_basics/keyboard/juce_TextInputTarget.h"; sourceTree = "SOURCE_ROOT"; }; AF575F9303D3AA5E410C274A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageCache.cpp"; path = "../../../../modules/juce_graphics/images/juce_ImageCache.cpp"; sourceTree = "SOURCE_ROOT"; }; + B0015C46815CEB6E15236944 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; + B032D869039A2B845AAD274E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; }; + B054CDFF33B17777FD1855BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; + B05EC8A81DA162236663A8AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../../modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; + B0B4FAE3EA49CE2AE0074204 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + B0E5392688FD05700AFA0569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; + B19103A5C4E54D5ABB50F27F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; B1972B63AC71C03527E02534 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PathStrokeType.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_PathStrokeType.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; - B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; + B2A30D3171F293ECE50DC06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2C885D79DF233E10656633A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; + B33097C6BA7E4793E7536BBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + B33E3A1B455B48F251A4EFEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; B3CA6447C345EE05F8B98195 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.h"; sourceTree = "SOURCE_ROOT"; }; B442A76A84E1800D10EE5954 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; B48471A74A3A2BDA248931F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisfile.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisfile.c"; sourceTree = "SOURCE_ROOT"; }; - B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; + B585667FC1E99FE5C1E3F799 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; }; B58CC7A93DBB3706A60E9E76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TabbedComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; + B5C3356C447E60F512C5E8CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; + B5CA4FEE0ADFDACCAF2FB017 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; }; B6ABAD2ACC048C4DAB31CA27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ModalComponentManager.h"; path = "../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h"; sourceTree = "SOURCE_ROOT"; }; + B6B3AF7688EF55A4FC61D5D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + B774AC9A00BFF63E24EA0646 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; + B77C48286D446F5C7BD4B76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; B77F4A6EA1005BE4683A0DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; }; + B812C4A2809BB37D45F54A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; }; + B8133580F67C0B95E1F36D4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; B85C9F9BF94FA8926EB9ACB8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableShape.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableShape.cpp"; sourceTree = "SOURCE_ROOT"; }; B8622807DB0688A98F8C75E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "lookup_data.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lookup_data.h"; sourceTree = "SOURCE_ROOT"; }; + B98F443DC0CE94BC13CC3D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; BAA373F740C171EB1219D9B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiMessage.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiMessage.h"; sourceTree = "SOURCE_ROOT"; }; - BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; }; + BB1D6E0B0982D0590E8EC99F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; + BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBB323B5DE53878F445064D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + BCC48160464BC0DFCAD33792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; BD283419247CBA6C6DD2ADD6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableComposite.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.h"; sourceTree = "SOURCE_ROOT"; }; + BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; C12C3BDF0D24260675D88C04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiBuffer.cpp"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; }; @@ -917,50 +942,26 @@ 8C9C38D32DB4D8BD543CA892 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; A6610B06B712DDE6F2A27290 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Flac Licence.txt"; path = "../../../../modules/juce_audio_formats/codecs/flac/Flac Licence.txt"; sourceTree = "SOURCE_ROOT"; }; AC3356631ED2AC043BC67B79 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - ACDCFB7C5CE966089DF7665E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_FileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; AD228AE61929A94FFBE55CF4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomicStack.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomicStack.h"; sourceTree = "SOURCE_ROOT"; }; - AD49758CCCDB81F781160518 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterInt.h"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioParameterInt.h"; sourceTree = "SOURCE_ROOT"; }; AE9CA003C4D379CB43E9CDE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAException.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAException.h"; sourceTree = "SOURCE_ROOT"; }; - B0015C46815CEB6E15236944 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPlayHead.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioPlayHead.h"; sourceTree = "SOURCE_ROOT"; }; - B032D869039A2B845AAD274E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = inftrees.h; path = "../../../../modules/juce_core/zip/zlib/inftrees.h"; sourceTree = "SOURCE_ROOT"; }; - B054CDFF33B17777FD1855BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; - B05EC8A81DA162236663A8AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IPAddress.cpp"; path = "../../../../modules/juce_core/network/juce_IPAddress.cpp"; sourceTree = "SOURCE_ROOT"; }; B0A987158C4CF4E8D0D75243 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/format.h"; sourceTree = "SOURCE_ROOT"; }; - B0B4FAE3EA49CE2AE0074204 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_InputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - B0E5392688FD05700AFA0569 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationBase.cpp"; path = "../../../../modules/juce_events/messages/juce_ApplicationBase.cpp"; sourceTree = "SOURCE_ROOT"; }; - B19103A5C4E54D5ABB50F27F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryInputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryInputStream.h"; sourceTree = "SOURCE_ROOT"; }; - B2A30D3171F293ECE50DC06B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Variant.cpp"; path = "../../../../modules/juce_core/containers/juce_Variant.cpp"; sourceTree = "SOURCE_ROOT"; }; - B2C885D79DF233E10656633A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedArray.h"; path = "../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h"; sourceTree = "SOURCE_ROOT"; }; - B33097C6BA7E4793E7536BBC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsContext.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; - B33E3A1B455B48F251A4EFEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Files.cpp"; path = "../../../../modules/juce_core/native/juce_linux_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + B2CF7DCAD1C8871201A6CE26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; + B2F8C1DFA6A765EDB034399D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextEditor.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_TextEditor.h"; sourceTree = "SOURCE_ROOT"; }; B3425236EBB43087A2C4AA71 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListenerList.h"; path = "../../../../modules/juce_core/containers/juce_ListenerList.h"; sourceTree = "SOURCE_ROOT"; }; B389D5350378076E0DF5DA6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = export.h; path = "../../../../modules/juce_audio_formats/codecs/flac/export.h"; sourceTree = "SOURCE_ROOT"; }; - B3AED660CB964056A7063CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourGradient.h"; path = "../../../../modules/juce_graphics/colour/juce_ColourGradient.h"; sourceTree = "SOURCE_ROOT"; }; - B4C32A6592E159751BD10360 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; - B585667FC1E99FE5C1E3F799 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jquant2.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jquant2.c"; sourceTree = "SOURCE_ROOT"; }; - B5C3356C447E60F512C5E8CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiTimer.cpp"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; - B5CA4FEE0ADFDACCAF2FB017 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngget.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngget.c"; sourceTree = "SOURCE_ROOT"; }; - B6B3AF7688EF55A4FC61D5D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AsyncUpdater.cpp"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; + B5029BFA56B6E1BB5FB43BFD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableHeaderComponent.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + B5CD08BC33A8414D48F4CD67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MouseCursor.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_MouseCursor.h"; sourceTree = "SOURCE_ROOT"; }; B6EA3B412C6E73478C4D36AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; - B774AC9A00BFF63E24EA0646 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3PluginFormat.h"; path = "../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; - B77C48286D446F5C7BD4B76F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MessageManager.mm"; path = "../../../../modules/juce_events/native/juce_mac_MessageManager.mm"; sourceTree = "SOURCE_ROOT"; }; B79F6D7A104EF67978CFFC4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h"; sourceTree = "SOURCE_ROOT"; }; B801E3F5A1C2992F592A0FBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioThumbnail.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnail.h"; sourceTree = "SOURCE_ROOT"; }; - B812C4A2809BB37D45F54A59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdatasrc.c"; sourceTree = "SOURCE_ROOT"; }; - B8133580F67C0B95E1F36D4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WaitableEvent.h"; path = "../../../../modules/juce_core/threads/juce_WaitableEvent.h"; sourceTree = "SOURCE_ROOT"; }; B986157ED5B0414CDF696C62 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAHostTimeBase.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAHostTimeBase.h"; sourceTree = "SOURCE_ROOT"; }; - B98F443DC0CE94BC13CC3D44 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Timer.cpp"; path = "../../../../modules/juce_events/timers/juce_Timer.cpp"; sourceTree = "SOURCE_ROOT"; }; BABAE6EE994D5EBDC4013AAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - BB1D6E0B0982D0590E8EC99F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_SystemStats.cpp"; path = "../../../../modules/juce_core/native/juce_linux_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; BB525259297D31B45CC624C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DeletedAtShutdown.cpp"; path = "../../../../modules/juce_events/messages/juce_DeletedAtShutdown.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB8432AE150D5AEB38808FA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Application.cpp"; path = "../../../../modules/juce_gui_basics/application/juce_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; - BBB323B5DE53878F445064D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Files.cpp"; path = "../../../../modules/juce_core/native/juce_android_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; + BBD06432CC4155521050CD2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V3.h"; path = "../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h"; sourceTree = "SOURCE_ROOT"; }; BC2068C5203B2AA39EAE0C6A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - BCC48160464BC0DFCAD33792 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; BD58CC09BA9FED0E9CACC97B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WindowsMediaAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; BD95E66B6A4CDADCF0631707 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAStreamBasicDescription.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAStreamBasicDescription.cpp"; sourceTree = "SOURCE_ROOT"; }; BDDC593699182D1603163238 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_devices.cpp"; path = "../../../../modules/juce_audio_devices/juce_audio_devices.cpp"; sourceTree = "SOURCE_ROOT"; }; - BDEE5F6548D2980373C45F5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentBuilder.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp"; sourceTree = "SOURCE_ROOT"; }; BED2521A9CE66A6F1A5AE7F7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngpread.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngpread.c"; sourceTree = "SOURCE_ROOT"; }; BED2D02D5F333084E058D678 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; BF6BA28F41BA2A03D9325E0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = md5.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/md5.h"; sourceTree = "SOURCE_ROOT"; }; @@ -999,21 +1000,20 @@ C7BED13E38A3138A9D851FAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; C80FFBB5F1E2674B9DBC054B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HyperlinkButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp"; sourceTree = "SOURCE_ROOT"; }; C87B625D4AD4826BF9301E7E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_8.h"; sourceTree = "SOURCE_ROOT"; }; + C9407CAAB91ABCB83CD3F80D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; - CE80FC970F6099B27DAB080D = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - C9407CAAB91ABCB83CD3F80D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTimer.h"; path = "../../../../modules/juce_events/timers/juce_MultiTimer.h"; sourceTree = "SOURCE_ROOT"; }; CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; + CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; CD3ABE20AE524B92B9B6A6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; CD41042388657A558C93AD86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1231,6 +1231,7 @@ F5DC35A024D665725204B375 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; F5E8E9C083E0933E6FB6CC13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; F60276DF99D86FCE8A565BE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + F625DBBA7CA4F3E2830A8FC4 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; F6370FC667E0362CE87FE3E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnit.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.h"; sourceTree = "SOURCE_ROOT"; }; F66119B180E2027EA08FDCAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; F663ABEC52B192E36EBB2958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cpu.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1627,6 +1628,7 @@ 9329788543F0C6DA2B50BD72, 2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = ""; }; 988670913C41D72F28DFE34E = {isa = PBXGroup; children = ( + 98135B5CED6D00B04F8AD56C, DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = ""; }; FE2338066D80D87950BB4358 = {isa = PBXGroup; children = ( 26DB94618438B2D5BF6B856E, @@ -1687,11 +1689,10 @@ F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = ( FE2338066D80D87950BB4358, - F43FCD869B7CBA50CF03BB6F, 3E76A3788CAAB12560CB4517, AE1DD722E80713D6A2C820C9, 2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = ""; }; - 3CF6F89CE98D1BD583C34852 = {isa = PBXGroup; children = ( + 618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = ( 8905DE78626372768938A4C0, 05C14DEEE0E3BDC4049484B5, 2FA12F7EBB9AC99A08FC1025, @@ -1699,10 +1700,10 @@ DBA0B8703ED6A2CFF6E952A8, 2D4E5D168D18704BCB317DD8, CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = ""; }; - 5E03484B053FE94C3308A153 = {isa = PBXGroup; children = ( + E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = ( 33B2FD7C625F65B132945522, 44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = ""; }; - 5D85476955DBC422757405C1 = {isa = PBXGroup; children = ( + 6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = ( 30CDFDC04232575AE7A491F3, F96C31890AED2B62C4E0E20A, 00A950F33C21C6688103E667, @@ -1712,19 +1713,19 @@ 99AC2D0C2304F21B912FEC5B, 2F9011C34B50B11B6FFEDA7F, EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = ""; }; - F3BA35D57A9C238A5CC3628F = {isa = PBXGroup; children = ( + 666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = ( 78DD966E73DF076A83FC1F2C, 6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = ""; }; - 51E2FC46CC35EE59A85AF51E = {isa = PBXGroup; children = ( + 47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = ( 08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = ""; }; E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = ( 988670913C41D72F28DFE34E, A2BBDDDA694235612BDE9BD0, - 3CF6F89CE98D1BD583C34852, - 5E03484B053FE94C3308A153, - 5D85476955DBC422757405C1, - F3BA35D57A9C238A5CC3628F, - 51E2FC46CC35EE59A85AF51E, + 618CCB6A21E8C032AF1D2BEB, + E57F8E0940E0C2FB651C1534, + 6E32D1C853DB168862215AF5, + 666ACBAA58DBC0AD514A3CF9, + 47BE374539E9FEBFEFDAD7E3, 9EDB40D557C3BBB1CC63CF65, 26AE9472CE02F176A9513852, 03DE1C983B7DECDCC451C8F8, @@ -2758,7 +2759,6 @@ F3498E82A2D4ACBED68A7F43, 6AFB9EB642850186B551DB33, F003DFE998431203650E2E3F, - FF08B80860BB393314DC49EA, D06C2B85E02F13F9B57DB1A9, ); name = Resources; sourceTree = ""; }; ED86208188082DE5EA9381E4 = {isa = PBXGroup; children = ( 7CBEB55B80E78C9DE16A713A, @@ -3146,7 +3146,7 @@ F550A01E8A9468C64A914B97 = {isa = XCConfigurationList; buildConfigurations = ( 7007C784A0219490DFD18C27, 0ADE306E346FE4F925722F86, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - EF49DCC88B5FC3C6E67ED2A4 = {isa = PBXAggregateTarget; buildConfigurationList = F550A01E8A9468C64A914B97; dependencies = ( + EF49DCC88B5FC3C6E67ED2A4 = {isa = PBXAggregateTarget; buildConfigurationList = F550A01E8A9468C64A914B97; buildPhases = ( ); buildRules = ( ); dependencies = ( 811D9E9CC2221100847306C9, 1316EADEF579F0DB90CF349C, 8F5816EA1D519B78C3345C1B, @@ -3157,7 +3157,6 @@ 19D80348287645B624E0C6B8, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 2094EE2ED994CDD1B1C905BB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( F56A47BDEEC76681EE80A15E, - 26AB69B22ED0C3D7288D1175, 78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; }; 074C299F37078964C5476AC0 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E94BB952CDD544FA3A0A4DBB, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3182,7 +3181,6 @@ 11C129F26625007CE9DFD618, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; C123969EE00E891FAC7CEF45 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( F56A47BDEEC76681EE80A15E, - 26AB69B22ED0C3D7288D1175, 78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; }; 795D24AC6934948AE4F8FDE2 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D137C5E337024E492FA14D4, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3207,7 +3205,6 @@ 5FAC649347835B831BAE3C41, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 0306890051760AEBAFEA2099 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( F56A47BDEEC76681EE80A15E, - 26AB69B22ED0C3D7288D1175, 78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; }; E60CDCD59C66D98FB19938F1 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0942F20A9A312E80B2EE65E5, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3235,7 +3232,6 @@ AE95330B72116D75608B9C68, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 4E507FDDF2C5DF3FE77D60E4 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( F56A47BDEEC76681EE80A15E, - 26AB69B22ED0C3D7288D1175, 78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; }; 7B44C01FD5EBA7864D985AC2 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0E0B50F4A042E48B9631A42A, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj b/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj index 5fc359c5..0e9b73e8 100644 --- a/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj +++ b/examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj @@ -6,6 +6,7 @@ objectVersion = 46; objects = { + 55B4C2F046533A9C139516FF = {isa = PBXBuildFile; fileRef = F5E81FD99EFCB226D2486603; }; EE8DCBA5DC0EE7CAD6FF2F39 = {isa = PBXBuildFile; fileRef = 746B19364297E7D489749B70; }; 3F1630B6EF37313AADD6EAB8 = {isa = PBXBuildFile; fileRef = EC3DE1F504C76EEDDA7F2216; }; 77FA445D27C21FBA66A46BF2 = {isa = PBXBuildFile; fileRef = 9536B5A780A03F6BACB24144; }; @@ -31,6 +32,7 @@ 0E0B50F4A042E48B9631A42A = {isa = PBXBuildFile; fileRef = CF02DA80A8A515CE41B0C8F6; }; 72733104CA9C62BE856879C9 = {isa = PBXBuildFile; fileRef = 63AFF514CAE6FB89A3503CEF; }; A00624D77FD68669DD6234D0 = {isa = PBXBuildFile; fileRef = A8315F08B794D9C87328F17F; }; + E94BB952CDD544FA3A0A4DBB = {isa = PBXBuildFile; fileRef = 853D9A89FE96C6DD6730CEC7; }; 8EBD1E279B7E4B420F310D12 = {isa = PBXBuildFile; fileRef = D9ED0926381D40DA1A66C26D; }; 045E9D3412FD38BFE3071254 = {isa = PBXBuildFile; fileRef = 9965CB9ED8D2B26CACA9C44A; }; 4066B5EF83133035C3579D0D = {isa = PBXBuildFile; fileRef = 58E254BD072595F6E3F6D5F5; }; @@ -568,6 +570,7 @@ 6C5C4F38A006227C77FCBAD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CharPointer_UTF32.h"; path = "../../../../modules/juce_core/text/juce_CharPointer_UTF32.h"; sourceTree = "SOURCE_ROOT"; }; 6CE2AFEAEE4AE23D2E17E2D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_graphics.mm"; path = "../../../../modules/juce_graphics/juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; 6D61505DE8021C51E8C5AE52 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/lsp.c"; sourceTree = "SOURCE_ROOT"; }; + 6DA4597568FFE5B6D1F5B68A = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST.plist"; path = "Info-VST.plist"; sourceTree = "SOURCE_ROOT"; }; 6DED13EB49FCE393E16D59FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AbstractFifo.h"; path = "../../../../modules/juce_core/containers/juce_AbstractFifo.h"; sourceTree = "SOURCE_ROOT"; }; 6DF4FA55C69B25537DCD88C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; 6DFDBE298AD93DD1B3F067B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Uuid.cpp"; path = "../../../../modules/juce_core/misc/juce_Uuid.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -598,7 +601,6 @@ 738FC67C7D9A53148C0A21AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandManager.cpp"; path = "../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp"; sourceTree = "SOURCE_ROOT"; }; 73BB8E247A275838FD16AFE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mapping0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c"; sourceTree = "SOURCE_ROOT"; }; 745B58030382C3D0DB6E7815 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinate.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; }; 75034A13541D4052025A4B39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jutils.c"; sourceTree = "SOURCE_ROOT"; }; 750DF21E43BED98CE4F53DE7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ReferenceCountedObject.h"; path = "../../../../modules/juce_core/memory/juce_ReferenceCountedObject.h"; sourceTree = "SOURCE_ROOT"; }; 76272B6E0F4FB6D7225653CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -635,7 +637,6 @@ 7BAB8DD68B7A25B281233969 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MarkerList.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_MarkerList.h"; sourceTree = "SOURCE_ROOT"; }; 7C3E7364953EF9D78C71B866 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Files.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Files.cpp"; sourceTree = "SOURCE_ROOT"; }; 7CA84F62BB5AC492B1EB49A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_MessageQueue.h"; path = "../../../../modules/juce_events/native/juce_osx_MessageQueue.h"; sourceTree = "SOURCE_ROOT"; }; - 7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; 7CE0FEFCEC64DF0ADA0B2DF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MessageListener.h"; path = "../../../../modules/juce_events/messages/juce_MessageListener.h"; sourceTree = "SOURCE_ROOT"; }; 7D0417B22EF55BE16E7C5061 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileListComponent.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileListComponent.h"; sourceTree = "SOURCE_ROOT"; }; 7D1E28BE09A85EEBA041558C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Slider.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Slider.h"; sourceTree = "SOURCE_ROOT"; }; @@ -651,6 +652,7 @@ 7FE887D76DBB520BBC48CDAF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 802CA561D36E5556CF267271 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAtomic.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAtomic.h"; sourceTree = "SOURCE_ROOT"; }; 804448A2E110E3D84021289F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FlacAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 805675527BC735B25A5907A5 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 80868CF2327E15F76AD68CF6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NewLine.h"; path = "../../../../modules/juce_core/text/juce_NewLine.h"; sourceTree = "SOURCE_ROOT"; }; 80970DB9418D27DD52879D1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; 809E47902CCE60747026EC3B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Timer.h"; path = "../../../../modules/juce_events/timers/juce_Timer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -676,6 +678,7 @@ 84ABD4F5D068289F4D43E7CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Decibels.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Decibels.h"; sourceTree = "SOURCE_ROOT"; }; 84D3302B18B67B725905AF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LAMEEncoderAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 8524CF106D2B7B1E08D312C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioAppComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioAppComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 853D9A89FE96C6DD6730CEC7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; 854757FAD81F978667CAA43C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeRectangle.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeRectangle.h"; sourceTree = "SOURCE_ROOT"; }; 8553867F8B04D10919C2BD4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = smallft.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.c"; sourceTree = "SOURCE_ROOT"; }; 856618203AAE94C7B806F9EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableRectangle.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -687,7 +690,6 @@ 86AC66980898843AE721BD08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RectanglePlacement.h"; path = "../../../../modules/juce_graphics/placement/juce_RectanglePlacement.h"; sourceTree = "SOURCE_ROOT"; }; 86E1396EB5DB7C3F8D42AF19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; 87181526B9C99144CBE4F8A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; - 872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; 87415D844832686C8423F226 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; }; 874FADD694BB58E2E736FC20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MixerAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 876D30F6E9647DB0F9BE4463 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = format.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/format.h"; sourceTree = "SOURCE_ROOT"; }; @@ -708,7 +710,6 @@ 89CC639E5B1CDE71BDBC02D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; 89E00773FE73394C30642A4E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; 8A3F809F240408D5195FB0F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = memory.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/memory.c"; sourceTree = "SOURCE_ROOT"; }; - 8AA012F95CDEE0ECAC1D698E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; }; 8ACD82D09483797E1A7A65B2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawablePath.cpp"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawablePath.cpp"; sourceTree = "SOURCE_ROOT"; }; 8AEA9D5BBBC4CB214F18FCE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; 8AED766CFA1A37B45BC2DE98 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CustomTypeface.h"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.h"; sourceTree = "SOURCE_ROOT"; }; @@ -725,8 +726,6 @@ 8D030B4C002B429D9A9CF05A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = metadata.h; path = "../../../../modules/juce_audio_formats/codecs/flac/metadata.h"; sourceTree = "SOURCE_ROOT"; }; 8D4AF11BC6D0F698838984C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputElement.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputElement.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D6D7548957FA154DA777E17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; - 8D753ADD4B2F1CB0C974A522 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; - 8DCEAA37D9F7AAD98A244B49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; 8E1318FA20D468AD45C7A20F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CallOutBox.h"; path = "../../../../modules/juce_gui_basics/windows/juce_CallOutBox.h"; sourceTree = "SOURCE_ROOT"; }; 8E29909B5886662F2EC3F5CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BooleanPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 8E61D5E0D6068F247E70219C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Button.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_Button.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -734,43 +733,56 @@ 8F3941CB0EBB70B37B7DB6DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_osx_ObjCHelpers.h"; path = "../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h"; sourceTree = "SOURCE_ROOT"; }; 8F3C3474E9EB852A40B3A25B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; 8F3FC2A8E965AA4E83259DB3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeCoordinatePositioner.cpp"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; 8FC88FE9250C7A25AC724BEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DynamicObject.cpp"; path = "../../../../modules/juce_core/containers/juce_DynamicObject.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; }; - 90064DDC086AD775FA7D5FFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - 9015FC74644F82DB0A49FBFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; }; 903B9CD04DF181894AC76EF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Identifier.cpp"; path = "../../../../modules/juce_core/text/juce_Identifier.cpp"; sourceTree = "SOURCE_ROOT"; }; 90C18AF3CAC0E59C88732904 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeParallelogram.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h"; sourceTree = "SOURCE_ROOT"; }; 90D3112151AC631747E60670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Base64.h"; path = "../../../../modules/juce_core/text/juce_Base64.h"; sourceTree = "SOURCE_ROOT"; }; 9136CCE147582160FA805637 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_16.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_16.h"; sourceTree = "SOURCE_ROOT"; }; 9146F18918C954121E932A8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_PropertiesFile.cpp"; path = "../../../../modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 92529B06E070A28F0C3C4914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; + 933DE5C4D4002BA9203F65A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9376596E6EC0707DFEE00ADB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; + 94304B55601DBF7FBCFC6767 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; + 94BFEB9B92F3D546332FD8E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = alloc.h; path = "../../../../modules/juce_audio_formats/codecs/flac/alloc.h"; sourceTree = "SOURCE_ROOT"; }; + 95D4FB306A367AE3A6D28173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; + 96DCCD578FF29CD7D381E8BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; + 96F6E7AE69A06FEE69CCA3C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; }; + 9A392FBECB732FAC0AA04262 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 9FB1AAC5EC1146B5FC0EFCD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; + A148CC41BDB41EDC8E88DC7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; + A15E68C337279B15ED933BE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; }; + E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + F5E81FD99EFCB226D2486603 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AUv3Synth.vst; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 746B19364297E7D489749B70 = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = AUv3Synth.appex; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 7CBEB55B80E78C9DE16A713A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; + 872D05BD56490FD7B375C11B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; + 8AA012F95CDEE0ECAC1D698E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPEZoneLayout.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h"; sourceTree = "SOURCE_ROOT"; }; + 8D753ADD4B2F1CB0C974A522 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiBuffer.h"; path = "../../../../modules/juce_audio_basics/midi/juce_MidiBuffer.h"; sourceTree = "SOURCE_ROOT"; }; + 8DCEAA37D9F7AAD98A244B49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LowLevelGraphicsSoftwareRenderer.cpp"; path = "../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8FAE0E215D1E95E6CA7C58E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_data_structures.h"; path = "../../../../modules/juce_data_structures/juce_data_structures.h"; sourceTree = "SOURCE_ROOT"; }; + 8FE4D93D82016AE0E952662F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcomapi.c"; sourceTree = "SOURCE_ROOT"; }; + 90064DDC086AD775FA7D5FFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OptionalScopedPointer.h"; path = "../../../../modules/juce_core/memory/juce_OptionalScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + 9015FC74644F82DB0A49FBFB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = vorbisenc.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/vorbisenc.c"; sourceTree = "SOURCE_ROOT"; }; 9198593E2E34D16752B90CD1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AttributedString.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_AttributedString.cpp"; sourceTree = "SOURCE_ROOT"; }; 91D10BF1909D2B9C169E4493 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; }; 91F32F326BD577CD67AE20D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_44u.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_44u.h"; sourceTree = "SOURCE_ROOT"; }; - 92529B06E070A28F0C3C4914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemFactory.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h"; sourceTree = "SOURCE_ROOT"; }; 92723EFA7826236908D48AC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAUParameter.cpp; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.cpp"; sourceTree = "SOURCE_ROOT"; }; 92BFAF31B51618764234C779 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryBlock.cpp"; path = "../../../../modules/juce_core/memory/juce_MemoryBlock.cpp"; sourceTree = "SOURCE_ROOT"; }; 9312B68ACDD2A4EAA31CAA73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChoicePropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; 9329788543F0C6DA2B50BD72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_formats.mm"; path = "../../../../modules/juce_audio_formats/juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - 933DE5C4D4002BA9203F65A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9376596E6EC0707DFEE00ADB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReadWriteLock.cpp"; path = "../../../../modules/juce_core/threads/juce_ReadWriteLock.cpp"; sourceTree = "SOURCE_ROOT"; }; 938B5112D072B60A18918CF1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdcoefct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdcoefct.c"; sourceTree = "SOURCE_ROOT"; }; - 94304B55601DBF7FBCFC6767 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; 94308E0D87CFF0D58DAAA0D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "os_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/os_types.h"; sourceTree = "SOURCE_ROOT"; }; 947776740572A5A07C2500EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_EdgeTable.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_EdgeTable.cpp"; sourceTree = "SOURCE_ROOT"; }; - 94BFEB9B92F3D546332FD8E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = alloc.h; path = "../../../../modules/juce_audio_formats/codecs/flac/alloc.h"; sourceTree = "SOURCE_ROOT"; }; 94EA45AA948C996F231D6946 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComboBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ComboBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 955635CD2D6A1C5BACA519CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_ListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 95931BF9B518FB17845AF4A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = smallft.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/smallft.h"; sourceTree = "SOURCE_ROOT"; }; - 95D4FB306A367AE3A6D28173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ZipFile.cpp"; path = "../../../../modules/juce_core/zip/juce_ZipFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 96102E98CC639030FAD7EA68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_GraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_android_GraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; 968EC4E33A1D1949AA4A9F87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; 96DA31F4C1619188159F7FC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; }; - 96DCCD578FF29CD7D381E8BC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FillType.cpp"; path = "../../../../modules/juce_graphics/colour/juce_FillType.cpp"; sourceTree = "SOURCE_ROOT"; }; - 96F6E7AE69A06FEE69CCA3C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CompilerSupport.h"; path = "../../../../modules/juce_core/system/juce_CompilerSupport.h"; sourceTree = "SOURCE_ROOT"; }; 9767C9015F48F6F42AEC0C9D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAutoDisposer.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h"; sourceTree = "SOURCE_ROOT"; }; 97C74E9A0E8A5576FC301241 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; }; 97DDC460BD01030B91158218 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ColourSelector.h"; path = "../../../../modules/juce_gui_extra/misc/juce_ColourSelector.h"; sourceTree = "SOURCE_ROOT"; }; + 98135B5CED6D00B04F8AD56C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 9819471C5F5583C007A4AED1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "win_utf8_io.h"; path = "../../../../modules/juce_audio_formats/codecs/flac/win_utf8_io.h"; sourceTree = "SOURCE_ROOT"; }; 98305AA6513DCC298E322C0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; 9849BB6DC80E45E541475772 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jerror.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jerror.h"; sourceTree = "SOURCE_ROOT"; }; @@ -779,7 +791,6 @@ 997766E6B5491A51A5242F68 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; 99AC2D0C2304F21B912FEC5B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; 9A3351689C885961A9BD3F2F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Atomic.h"; path = "../../../../modules/juce_core/memory/juce_Atomic.h"; sourceTree = "SOURCE_ROOT"; }; - 9A392FBECB732FAC0AA04262 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_InterprocessConnectionServer.cpp"; path = "../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp"; sourceTree = "SOURCE_ROOT"; }; 9A419F28D68BDEB200F29603 = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AUv3Synth/Images.xcassets; sourceTree = "SOURCE_ROOT"; }; 9A69DDED5C8357717BAD57DD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Array.h"; path = "../../../../modules/juce_core/containers/juce_Array.h"; sourceTree = "SOURCE_ROOT"; }; 9AA36A7E6CCDA68D308E0721 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -810,15 +821,12 @@ 9F1DFEFDC78EC139C4089DEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RuntimePermissions.cpp"; path = "../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp"; sourceTree = "SOURCE_ROOT"; }; 9F91E161DF777F050B61B6BE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioTransportSource.cpp"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 9FA43271ACEB06BF3AB00095 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = envelope.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.h"; sourceTree = "SOURCE_ROOT"; }; - 9FB1AAC5EC1146B5FC0EFCD2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Synthesiser.cpp"; path = "../../../../modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp"; sourceTree = "SOURCE_ROOT"; }; A0173759895A8C13BB754998 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/all.h"; sourceTree = "SOURCE_ROOT"; }; A032CFC5A613848D8594B40B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = all.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/all.h"; sourceTree = "SOURCE_ROOT"; }; A1159B10837BBDD1BD12A882 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CachedValue.cpp"; path = "../../../../modules/juce_data_structures/values/juce_CachedValue.cpp"; sourceTree = "SOURCE_ROOT"; }; A11CF361C0253B499324D31E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageButton.cpp"; path = "../../../../modules/juce_gui_basics/buttons/juce_ImageButton.cpp"; sourceTree = "SOURCE_ROOT"; }; A12A4C86AE4FA12C99334932 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DirectoryContentsDisplayComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - A148CC41BDB41EDC8E88DC7D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_BufferingAudioSource.cpp"; path = "../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; A1595E748092878FDAEA5A30 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Application.h"; path = "../../../../modules/juce_gui_basics/application/juce_Application.h"; sourceTree = "SOURCE_ROOT"; }; - A15E68C337279B15ED933BE3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FloatVectorOperations.cpp"; path = "../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp"; sourceTree = "SOURCE_ROOT"; }; A1CFD76549B8E9EB1C360ED5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeDocument.cpp"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; A1FA95A0AA37CD773ACBCE8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AsyncUpdater.h"; path = "../../../../modules/juce_events/broadcasters/juce_AsyncUpdater.h"; sourceTree = "SOURCE_ROOT"; }; A2129507609CE7130FBA1340 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colours.h"; path = "../../../../modules/juce_graphics/colour/juce_Colours.h"; sourceTree = "SOURCE_ROOT"; }; @@ -960,6 +968,7 @@ C14EFFF60594E0BC2421DC0F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileSearchPathListComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; C1983ED4284CBEF3B5A427E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; C1D83773976CEDB413DB5E5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = envelope.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/envelope.c"; sourceTree = "SOURCE_ROOT"; }; + C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; C1EFF2064480889DAC74D2D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageEffectFilter.h"; path = "../../../../modules/juce_graphics/effects/juce_ImageEffectFilter.h"; sourceTree = "SOURCE_ROOT"; }; C25203A01A84B7032A7774CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_RelativeCoordinatePositioner.h"; path = "../../../../modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h"; sourceTree = "SOURCE_ROOT"; }; C2DF4936EF95E5A32E71B755 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -976,6 +985,8 @@ C5A2FC7A4569F1C242016136 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = png.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/png.c"; sourceTree = "SOURCE_ROOT"; }; C5B2DDCFB6FEA46E4F97BBA1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; C61D176AAECFBC9A277EF2E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FFT.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_FFT.cpp"; sourceTree = "SOURCE_ROOT"; }; + C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; }; + C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; C639338DD5AF077DF5BF8361 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; C68283C8A9FA7CEC6AA6975C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; }; C6846316837E7D4578428945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Message.h"; path = "../../../../modules/juce_events/messages/juce_Message.h"; sourceTree = "SOURCE_ROOT"; }; @@ -986,42 +997,33 @@ C9494DFECDCD27C0815A6F17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectoryContentsList.h"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h"; sourceTree = "SOURCE_ROOT"; }; C9B7C5BD09A1486B2A10DA8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/cpu.h"; sourceTree = "SOURCE_ROOT"; }; CA633B8B756E9E7826C8D173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResamplingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; + CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; + CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; CC14A34F66FDF9E12523CABF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AUv3.mm"; path = "../../JuceLibraryCode/juce_audio_plugin_client_AUv3.mm"; sourceTree = "SOURCE_ROOT"; }; CC155101953B89262C8B633C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_Network.cpp"; path = "../../../../modules/juce_core/native/juce_android_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; CD3ABE20AE524B92B9B6A6FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_FileChooser.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_FileChooser.mm"; sourceTree = "SOURCE_ROOT"; }; CD41042388657A558C93AD86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngtrans.c; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngtrans.c"; sourceTree = "SOURCE_ROOT"; }; CD44BCDC60998F9B56D816C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; }; - CE80FC970F6099B27DAB080D = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; + CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; + CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; }; CF02DA80A8A515CE41B0C8F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_Standalone.cpp"; path = "../../JuceLibraryCode/juce_audio_plugin_client_Standalone.cpp"; sourceTree = "SOURCE_ROOT"; }; CF2F576CE0F6A185597C8D40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Label.h"; path = "../../../../modules/juce_gui_basics/widgets/juce_Label.h"; sourceTree = "SOURCE_ROOT"; }; CF344C62ABCBA9BAAB6ACFA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_AudioSource.h"; sourceTree = "SOURCE_ROOT"; }; CF51659EBB00003E6CB20B66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_Wrapper.cpp"; path = "../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; - D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; - D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; - D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; - D636983E7D4B5897EF493708 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; - DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C1E4A7F5418639D70CB51F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormatReader.h"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.h"; sourceTree = "SOURCE_ROOT"; }; - C61EEED69EE6C34E5C64B729 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "config_types.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/config_types.h"; sourceTree = "SOURCE_ROOT"; }; - C63541C14D518046922DF60B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilter.cpp"; path = "../../../../modules/juce_audio_basics/effects/juce_IIRFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; - CB23F9E24266013856B53BBE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniser.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; - CBA22CAB6770979BCCD18EEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = framing.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/framing.c"; sourceTree = "SOURCE_ROOT"; }; - CC32EDCC4709790EBBA55941 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; - CDE81ADB14F09742FBBA28E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - CE491063B3EF486A263519F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; - CE517EF86B0776BA9B27F3F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUTimestampGenerator.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUTimestampGenerator.h"; sourceTree = "SOURCE_ROOT"; }; CF6FA9D2F39F03FE2858F11B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; CF7ECFB4AA9A00E103525840 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryMappedFile.h"; path = "../../../../modules/juce_core/files/juce_MemoryMappedFile.h"; sourceTree = "SOURCE_ROOT"; }; CF9EEC4A087AA9010D5D21A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioPluginFormat.h"; path = "../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; CFADD611F5F0D9EC5127C6C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = trees.c; path = "../../../../modules/juce_core/zip/zlib/trees.c"; sourceTree = "SOURCE_ROOT"; }; CFAFC86F4D25AB5A31DF3BE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; CFFC609186B1EE226ACEBD2D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Network.cpp"; path = "../../../../modules/juce_core/native/juce_win32_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; + D03583C1CA01284B5781955E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; D0584D8F725E0D7E61F830F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; }; + D06C2B85E02F13F9B57DB1A9 = {isa = PBXFileReference; lastKnownFileType = image.png; name = power.png; path = ../../Source/BinaryData/power.png; sourceTree = "SOURCE_ROOT"; }; + D0A4E2C5F2B21172DE13DE0C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_ios_Windowing.mm"; path = "../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"; sourceTree = "SOURCE_ROOT"; }; D0ECDC7390CA390D69946652 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jcsample.c"; sourceTree = "SOURCE_ROOT"; }; + D1683E32F1EB634904CD7DE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; D19E20CCCD4790B2347D5B80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSubsectionReader.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp"; sourceTree = "SOURCE_ROOT"; }; D2436FFFE291F08409B1EEE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Colours.cpp"; path = "../../../../modules/juce_graphics/colour/juce_Colours.cpp"; sourceTree = "SOURCE_ROOT"; }; D264387115074C98CF251072 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatWriter.cpp"; path = "../../../../modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1034,10 +1036,12 @@ D48932C6554B443ECB71DC87 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ResizableBorderComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h"; sourceTree = "SOURCE_ROOT"; }; D4A4555171F923D744B1FDF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngstruct.h; path = "../../../../modules/juce_graphics/image_formats/pnglib/pngstruct.h"; sourceTree = "SOURCE_ROOT"; }; D4C0852C1C54EDA5D4F82EB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; + D515546E71BD92C742D67905 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioTransportSource.h"; path = "../../../../modules/juce_audio_devices/sources/juce_AudioTransportSource.h"; sourceTree = "SOURCE_ROOT"; }; D557AAD12557BF1706441B19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SliderPropertyComponent.cpp"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; D5797410CEE0E8D2E03D98F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; D57DF4F024A84881420586E8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = trees.h; path = "../../../../modules/juce_core/zip/zlib/trees.h"; sourceTree = "SOURCE_ROOT"; }; D5816478E1FBC9D296E78CFA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_processors.cpp"; path = "../../../../modules/juce_audio_processors/juce_audio_processors.cpp"; sourceTree = "SOURCE_ROOT"; }; + D636983E7D4B5897EF493708 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DialogWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_DialogWindow.h"; sourceTree = "SOURCE_ROOT"; }; D6670F0F52C7A439715B706F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; D6979B0DD8E310EA2512B147 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChannelRemappingAudioSource.h"; path = "../../../../modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; D72A2819C390689ED5A58197 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ContainerDeletePolicy.h"; path = "../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1065,6 +1069,7 @@ DA4E0EA3EB80BE34F9047E72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentBuilder.h"; path = "../../../../modules/juce_gui_basics/layout/juce_ComponentBuilder.h"; sourceTree = "SOURCE_ROOT"; }; DACA6E5A3CE684EC649F31B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Typeface.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_Typeface.cpp"; sourceTree = "SOURCE_ROOT"; }; DAEE812EF95F96E7D65D875F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; + DAF78E342ACF24B5A83E0605 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; DB216D8107F0BBBBD3F2B0E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; DB3A7C49C8444BD2F57B6689 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; DB43ED26DBABD0BC17385E6E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1098,7 +1103,6 @@ DFF6A93D460B71379FE3EAA2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiMessageCollector.cpp"; path = "../../../../modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp"; sourceTree = "SOURCE_ROOT"; }; E0260479B3C2CAF8477026FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorParameters.cpp"; path = "../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameters.cpp"; sourceTree = "SOURCE_ROOT"; }; E03AA585A375A39A9BFF3DD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; - E04216439C3A2AD69B69B520 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioSampleBuffer.h"; path = "../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h"; sourceTree = "SOURCE_ROOT"; }; E0484E5F0994D64013F4EEA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TextDragAndDropTarget.h"; path = "../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"; sourceTree = "SOURCE_ROOT"; }; E09404F45899AA1E82CFC21C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; E0B49BAB1C8D7341A6E142B7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jdct.h; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdct.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1120,7 +1124,6 @@ E31219AD074DCBB8C6A9F816 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RelativeTime.cpp"; path = "../../../../modules/juce_core/time/juce_RelativeTime.cpp"; sourceTree = "SOURCE_ROOT"; }; E320A8161071D0D1B9261E2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AlertWindow.h"; path = "../../../../modules/juce_gui_basics/windows/juce_AlertWindow.h"; sourceTree = "SOURCE_ROOT"; }; E32E43F0CC33ED95FD0A9DE2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsMediaAudioFormat.h"; path = "../../../../modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; - E40580FB3605FA6D5DA3FD73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h"; sourceTree = "SOURCE_ROOT"; }; E433734FC5466D7E26FC11D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DropShadower.cpp"; path = "../../../../modules/juce_gui_basics/misc/juce_DropShadower.cpp"; sourceTree = "SOURCE_ROOT"; }; E4CB12FDCA729EC8BD9E0845 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; }; E4D985BB229FC31731681790 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_PropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1137,16 +1140,19 @@ E755606E63BE2C5558FFB353 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; path = "../../../../modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp"; sourceTree = "SOURCE_ROOT"; }; E795FC063102CA8BAB722C58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SliderPropertyComponent.h"; path = "../../../../modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; E79A4F024D4890B61628C42C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputStream.h"; path = "../../../../modules/juce_core/streams/juce_InputStream.h"; sourceTree = "SOURCE_ROOT"; }; + E93BF1F2B52BF52EA12326A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; }; + EA6D44AA3D1C9B0A5873DC4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; + EC3DE1F504C76EEDDA7F2216 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AUv3Synth.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 9536B5A780A03F6BACB24144 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libAUv3Synth.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + E40580FB3605FA6D5DA3FD73 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBaseHelper.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBaseHelper.h"; sourceTree = "SOURCE_ROOT"; }; E7E45873BE802DD8D676E9CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GroupComponent.h"; path = "../../../../modules/juce_gui_basics/layout/juce_GroupComponent.h"; sourceTree = "SOURCE_ROOT"; }; E88DF76B88F3E67D0FB58CEB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = floor0.c; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/floor0.c"; sourceTree = "SOURCE_ROOT"; }; E8EB40396974468FBD0EE15B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Path.cpp"; path = "../../../../modules/juce_graphics/geometry/juce_Path.cpp"; sourceTree = "SOURCE_ROOT"; }; - E93BF1F2B52BF52EA12326A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; }; E9617DEC7E639354C2AF66A8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Value.cpp"; path = "../../../../modules/juce_data_structures/values/juce_Value.cpp"; sourceTree = "SOURCE_ROOT"; }; E9745B8F0DE747F94EAF65A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_GlyphArrangement.cpp"; path = "../../../../modules/juce_graphics/fonts/juce_GlyphArrangement.cpp"; sourceTree = "SOURCE_ROOT"; }; E975A1A60F48EB781C00B9CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; E9C1C03509E00C37AAA45727 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_QuickTimeAudioFormat.cpp"; path = "../../../../modules/juce_audio_formats/codecs/juce_QuickTimeAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; EA4345362FE80828317BB860 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Base64.cpp"; path = "../../../../modules/juce_core/text/juce_Base64.cpp"; sourceTree = "SOURCE_ROOT"; }; - EA6D44AA3D1C9B0A5873DC4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_data_structures.cpp"; path = "../../../../modules/juce_data_structures/juce_data_structures.cpp"; sourceTree = "SOURCE_ROOT"; }; EA89A423564A332B875F040F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = misc.h; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/misc.h"; sourceTree = "SOURCE_ROOT"; }; EA8B1437F945AFED7BDF11DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WindowsHooks.h"; path = "../../../../modules/juce_audio_plugin_client/utility/juce_WindowsHooks.h"; sourceTree = "SOURCE_ROOT"; }; EA92EA0E7F4D3859821CEB4A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1216,6 +1222,7 @@ F5DC35A024D665725204B375 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_AudioUnitPluginFormat.mm"; path = "../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm"; sourceTree = "SOURCE_ROOT"; }; F5E8E9C083E0933E6FB6CC13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Component.h"; path = "../../../../modules/juce_gui_basics/components/juce_Component.h"; sourceTree = "SOURCE_ROOT"; }; F60276DF99D86FCE8A565BE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutResizerBar.h"; path = "../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h"; sourceTree = "SOURCE_ROOT"; }; + F625DBBA7CA4F3E2830A8FC4 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; F6370FC667E0362CE87FE3E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnit.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnit.h"; sourceTree = "SOURCE_ROOT"; }; F66119B180E2027EA08FDCAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; F663ABEC52B192E36EBB2958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = cpu.c; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/cpu.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1611,6 +1618,7 @@ 9329788543F0C6DA2B50BD72, 2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = ""; }; 988670913C41D72F28DFE34E = {isa = PBXGroup; children = ( + 98135B5CED6D00B04F8AD56C, DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = ""; }; FE2338066D80D87950BB4358 = {isa = PBXGroup; children = ( 26DB94618438B2D5BF6B856E, @@ -1671,11 +1679,10 @@ F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = ( FE2338066D80D87950BB4358, - F43FCD869B7CBA50CF03BB6F, 3E76A3788CAAB12560CB4517, AE1DD722E80713D6A2C820C9, 2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = ""; }; - 3CF6F89CE98D1BD583C34852 = {isa = PBXGroup; children = ( + 618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = ( 8905DE78626372768938A4C0, 05C14DEEE0E3BDC4049484B5, 2FA12F7EBB9AC99A08FC1025, @@ -1683,10 +1690,10 @@ DBA0B8703ED6A2CFF6E952A8, 2D4E5D168D18704BCB317DD8, CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = ""; }; - 5E03484B053FE94C3308A153 = {isa = PBXGroup; children = ( + E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = ( 33B2FD7C625F65B132945522, 44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = ""; }; - 5D85476955DBC422757405C1 = {isa = PBXGroup; children = ( + 6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = ( 30CDFDC04232575AE7A491F3, F96C31890AED2B62C4E0E20A, 00A950F33C21C6688103E667, @@ -1696,19 +1703,19 @@ 99AC2D0C2304F21B912FEC5B, 2F9011C34B50B11B6FFEDA7F, EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = ""; }; - F3BA35D57A9C238A5CC3628F = {isa = PBXGroup; children = ( + 666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = ( 78DD966E73DF076A83FC1F2C, 6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = ""; }; - 51E2FC46CC35EE59A85AF51E = {isa = PBXGroup; children = ( + 47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = ( 08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = ""; }; E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = ( 988670913C41D72F28DFE34E, A2BBDDDA694235612BDE9BD0, - 3CF6F89CE98D1BD583C34852, - 5E03484B053FE94C3308A153, - 5D85476955DBC422757405C1, - F3BA35D57A9C238A5CC3628F, - 51E2FC46CC35EE59A85AF51E, + 618CCB6A21E8C032AF1D2BEB, + E57F8E0940E0C2FB651C1534, + 6E32D1C853DB168862215AF5, + 666ACBAA58DBC0AD514A3CF9, + 47BE374539E9FEBFEFDAD7E3, 9EDB40D557C3BBB1CC63CF65, 26AE9472CE02F176A9513852, 03DE1C983B7DECDCC451C8F8, @@ -2725,6 +2732,7 @@ CF02DA80A8A515CE41B0C8F6, 63AFF514CAE6FB89A3503CEF, A8315F08B794D9C87328F17F, + 853D9A89FE96C6DD6730CEC7, D9ED0926381D40DA1A66C26D, 9965CB9ED8D2B26CACA9C44A, 58E254BD072595F6E3F6D5F5, @@ -2735,6 +2743,7 @@ E553E188A17BDF4E832F0A01, F138CA63A1127DA0DB69B127, ); name = "Juce Library Code"; sourceTree = ""; }; A727F6B063FCDB816462D213 = {isa = PBXGroup; children = ( + 6DA4597568FFE5B6D1F5B68A, F3498E82A2D4ACBED68A7F43, 6AFB9EB642850186B551DB33, 9A419F28D68BDEB200F29603, @@ -2752,6 +2761,7 @@ 29982493607128FD6DB6A284, 5EF6762AB1C5CE4C2DCD59ED, ); name = Frameworks; sourceTree = ""; }; E793574695108F202603BAA5 = {isa = PBXGroup; children = ( + F5E81FD99EFCB226D2486603, 746B19364297E7D489749B70, EC3DE1F504C76EEDDA7F2216, 9536B5A780A03F6BACB24144, ); name = Products; sourceTree = ""; }; @@ -2764,6 +2774,77 @@ E793574695108F202603BAA5, ); name = Source; sourceTree = ""; }; 7007C784A0219490DFD18C27 = {isa = XCBuildConfiguration; buildSettings = { }; name = Debug; }; 0ADE306E346FE4F925722F86 = {isa = XCBuildConfiguration; buildSettings = { }; name = Release; }; + 653C6C73C56BA201AB6F094C = {isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_LINK_OBJC_RUNTIME = NO; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; + COPY_PHASE_STRIP = NO; + DEPLOYMENT_LOCATION = YES; + DSTROOT = /; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_DEBUG=1", + "DEBUG=1", + "JucePlugin_Build_VST=1", + "JucePlugin_Build_VST3=0", + "JucePlugin_Build_AU=0", + "JucePlugin_Build_AUv3=0", + "JucePlugin_Build_RTAS=0", + "JucePlugin_Build_AAX=0", + "JucePlugin_Build_Standalone=0", + "JUCER_XCODE_IPHONE_5BC26AE3=1", + "JUCE_APP_VERSION=1.0.0", + "JUCE_APP_VERSION_HEX=0x10000", ); + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GENERATE_PKGINFO_FILE = YES; + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + INFOPLIST_FILE = Info-VST.plist; + INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/"; + LIBRARY_STYLE = Bundle; + OTHER_LDFLAGS = "-bundle -lAUv3Synth"; + PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; + WRAPPER_EXTENSION = vst; }; name = Debug; }; + 19D80348287645B624E0C6B8 = {isa = XCBuildConfiguration; buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_LINK_OBJC_RUNTIME = NO; + CODE_SIGN_IDENTITY = ""; + COMBINE_HIDPI_IMAGES = YES; + CONFIGURATION_BUILD_DIR = "$(PROJECT_DIR)/build/$(CONFIGURATION)"; + DEAD_CODE_STRIPPING = YES; + DEPLOYMENT_LOCATION = YES; + DSTROOT = /; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_PREPROCESSOR_DEFINITIONS = ( + "_NDEBUG=1", + "NDEBUG=1", + "JucePlugin_Build_VST=1", + "JucePlugin_Build_VST3=0", + "JucePlugin_Build_AU=0", + "JucePlugin_Build_AUv3=0", + "JucePlugin_Build_RTAS=0", + "JucePlugin_Build_AAX=0", + "JucePlugin_Build_Standalone=0", + "JUCER_XCODE_IPHONE_5BC26AE3=1", + "JUCE_APP_VERSION=1.0.0", + "JUCE_APP_VERSION_HEX=0x10000", ); + GCC_SYMBOLS_PRIVATE_EXTERN = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GENERATE_PKGINFO_FILE = YES; + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + INFOPLIST_FILE = Info-VST.plist; + INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/VST/"; + LIBRARY_STYLE = Bundle; + OTHER_LDFLAGS = "-bundle -lAUv3Synth"; + PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; + WRAPPER_EXTENSION = vst; }; name = Release; }; DC95EAEBECC74A55CADCD887 = {isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -2789,7 +2870,7 @@ "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AUv3_AppExtension.plist; OTHER_LDFLAGS = "-lAUv3Synth"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3; }; name = Debug; }; @@ -2819,7 +2900,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AUv3_AppExtension.plist; OTHER_LDFLAGS = "-lAUv3Synth"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth.AUv3SynthAUv3; }; name = Release; }; @@ -2848,7 +2929,7 @@ "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AUv3_Standalone.plist; OTHER_LDFLAGS = "-lAUv3Synth"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Debug; }; @@ -2878,7 +2959,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-AUv3_Standalone.plist; OTHER_LDFLAGS = "-lAUv3Synth"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Release; }; @@ -2897,7 +2978,7 @@ "_DEBUG=1", "DEBUG=1", "JUCE_SHARED_CODE=1", - "JucePlugin_Build_VST=0", + "JucePlugin_Build_VST=1", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=1", @@ -2908,7 +2989,7 @@ "JUCE_APP_VERSION=1.0.0", "JUCE_APP_VERSION_HEX=0x10000", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INSTALL_PATH = "@executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Debug; }; 5DA389BE0C844A1A9E20FD7C = {isa = XCBuildConfiguration; buildSettings = { @@ -2926,7 +3007,7 @@ "_NDEBUG=1", "NDEBUG=1", "JUCE_SHARED_CODE=1", - "JucePlugin_Build_VST=0", + "JucePlugin_Build_VST=1", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=1", @@ -2938,7 +3019,7 @@ "JUCE_APP_VERSION_HEX=0x10000", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ("\"~/SDKs/VST3 SDK\"", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INSTALL_PATH = "@executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.development.AUv3Synth; }; name = Release; }; D32671708EF2662A51A6335A = {isa = XCBuildConfiguration; buildSettings = { @@ -2979,6 +3060,7 @@ TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; ZERO_LINK = NO; }; name = Release; }; + 811D9E9CC2221100847306C9 = {isa = PBXTargetDependency; target = 73F4C13CDCAC7EE5914F2E61; }; 8F5816EA1D519B78C3345C1B = {isa = PBXTargetDependency; target = 7A046597FDDDB82B78C64AAC; }; E06C8C12CD5FDD7FB372E602 = {isa = PBXTargetDependency; target = E600EF631F7AFA8F3A723E29; }; 017B214D817BF0DF53051BB2 = {isa = PBXTargetDependency; target = CD6892FED0DB19C0DDD9AD37; }; @@ -2988,10 +3070,36 @@ F550A01E8A9468C64A914B97 = {isa = XCConfigurationList; buildConfigurations = ( 7007C784A0219490DFD18C27, 0ADE306E346FE4F925722F86, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - EF49DCC88B5FC3C6E67ED2A4 = {isa = PBXAggregateTarget; buildConfigurationList = F550A01E8A9468C64A914B97; dependencies = ( + EF49DCC88B5FC3C6E67ED2A4 = {isa = PBXAggregateTarget; buildConfigurationList = F550A01E8A9468C64A914B97; buildPhases = ( ); buildRules = ( ); dependencies = ( + 811D9E9CC2221100847306C9, 8F5816EA1D519B78C3345C1B, E06C8C12CD5FDD7FB372E602, 017B214D817BF0DF53051BB2, ); name = "AUv3Synth (All)"; productName = AUv3Synth; }; + 32113A068DE980F098C3A7FA = {isa = XCConfigurationList; buildConfigurations = ( + 653C6C73C56BA201AB6F094C, + 19D80348287645B624E0C6B8, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + 2094EE2ED994CDD1B1C905BB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6F585AC4628EC14C9F757022, + 78704983DFEA5408FC5767D8, ); runOnlyForDeploymentPostprocessing = 0; }; + 074C299F37078964C5476AC0 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + E94BB952CDD544FA3A0A4DBB, ); runOnlyForDeploymentPostprocessing = 0; }; + 88CA07DBC6CAFF5FF3E65E3E = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FAD4DF17110D52B8ED8D9F93, + 737E06660F37BFFCABD89643, + D53302896621B8A3E8BDD606, + 669F51FA55E939D010EA279D, + EDC8ABA2EC0A2D7A2147E896, + 7DEC97493F97160DE6622DBC, + 1DF18B2507A574FBA9C49DE1, + 71F62F07CBC67FB4FB010583, + 6B818B8342839FB008124DEA, + F452B8399A32BE4F1074F596, + E4236DCEE707C3855C2E3B22, ); runOnlyForDeploymentPostprocessing = 0; }; + 73F4C13CDCAC7EE5914F2E61 = {isa = PBXNativeTarget; buildConfigurationList = 32113A068DE980F098C3A7FA; buildPhases = ( + 2094EE2ED994CDD1B1C905BB, + 074C299F37078964C5476AC0, + 88CA07DBC6CAFF5FF3E65E3E, ); buildRules = ( ); dependencies = ( + 017B214D817BF0DF53051BB2, ); name = "AUv3Synth (VST)"; productName = AUv3Synth; productReference = F5E81FD99EFCB226D2486603; productType = "com.apple.product-type.bundle"; }; 3A7896DB2C11717D9046CE5B = {isa = XCConfigurationList; buildConfigurations = ( DC95EAEBECC74A55CADCD887, 5FAC649347835B831BAE3C41, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; @@ -3067,7 +3175,7 @@ 4D9D92DD454BB03746241196, ); runOnlyForDeploymentPostprocessing = 0; }; CD6892FED0DB19C0DDD9AD37 = {isa = PBXNativeTarget; buildConfigurationList = AF907C78A0D17B741F5F8944; buildPhases = ( 1F4A8812AAE49E02F3215F48, ); buildRules = ( ); dependencies = ( ); name = "AUv3Synth (Shared Code)"; productName = AUv3Synth; productReference = 9536B5A780A03F6BACB24144; productType = "com.apple.product-type.library.static"; }; - D0E003364F0BE3205BD9243E = {isa = PBXProject; buildConfigurationList = 444EA74CE26BF416566E542C; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { EF49DCC88B5FC3C6E67ED2A4 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };7A046597FDDDB82B78C64AAC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 1; }; }; };E600EF631F7AFA8F3A723E29 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };CD6892FED0DB19C0DDD9AD37 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 4BFA153CE4E8A774C67EC642; projectDirPath = ""; projectRoot = ""; targets = (EF49DCC88B5FC3C6E67ED2A4, 7A046597FDDDB82B78C64AAC, E600EF631F7AFA8F3A723E29, CD6892FED0DB19C0DDD9AD37); }; + D0E003364F0BE3205BD9243E = {isa = PBXProject; buildConfigurationList = 444EA74CE26BF416566E542C; attributes = { LastUpgradeCheck = 0440; TargetAttributes = { EF49DCC88B5FC3C6E67ED2A4 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };73F4C13CDCAC7EE5914F2E61 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };7A046597FDDDB82B78C64AAC = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 1; }; }; };E600EF631F7AFA8F3A723E29 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; };CD6892FED0DB19C0DDD9AD37 = { SystemCapabilities = {com.apple.InAppPurchase = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 4BFA153CE4E8A774C67EC642; projectDirPath = ""; projectRoot = ""; targets = (EF49DCC88B5FC3C6E67ED2A4, 73F4C13CDCAC7EE5914F2E61, 7A046597FDDDB82B78C64AAC, E600EF631F7AFA8F3A723E29, CD6892FED0DB19C0DDD9AD37); }; }; rootObject = D0E003364F0BE3205BD9243E; } diff --git a/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist b/examples/AUv3Synth/Builds/iOS/Info-VST.plist similarity index 53% rename from examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist rename to examples/AUv3Synth/Builds/iOS/Info-VST.plist index 43df714c..71b368c0 100644 --- a/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist +++ b/examples/AUv3Synth/Builds/iOS/Info-VST.plist @@ -3,18 +3,20 @@ + LSRequiresIPhoneOS + + UIViewControllerBasedStatusBarAppearance + CFBundleExecutable ${EXECUTABLE_NAME} - CFBundleIconFile - CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleName - Arpeggiator + AUv3Synth CFBundleDisplayName - Arpeggiator + AUv3Synth CFBundlePackageType - FMWK + BNDL CFBundleSignature ???? CFBundleShortVersionString @@ -22,8 +24,20 @@ CFBundleVersion 1.0.0 NSHumanReadableCopyright - ROLI Ltd. + NSHighResolutionCapable + UIRequiresFullScreen + + UIStatusBarHidden + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIBackgroundModes + diff --git a/examples/AUv3Synth/JuceLibraryCode/AppConfig.h b/examples/AUv3Synth/JuceLibraryCode/AppConfig.h index 8ca835fb..303210b6 100644 --- a/examples/AUv3Synth/JuceLibraryCode/AppConfig.h +++ b/examples/AUv3Synth/JuceLibraryCode/AppConfig.h @@ -108,6 +108,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -232,10 +239,10 @@ #define JucePlugin_ManufacturerEmail "" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'AUv3' + #define JucePlugin_PluginCode 0x41557633 // 'AUv3' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 1 diff --git a/examples/AnimationAppExample/AnimationAppExample.jucer b/examples/AnimationAppExample/AnimationAppExample.jucer index 92a39b9e..c28861d3 100644 --- a/examples/AnimationAppExample/AnimationAppExample.jucer +++ b/examples/AnimationAppExample/AnimationAppExample.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> + jucerVersion="4.2.3"> + includeBinaryInAppConfig="1" jucerVersion="4.2.3"> + includeBinaryInAppConfig="1" jucerVersion="4.2.3"> + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile diff --git a/examples/Demo/Builds/iOS/Info-App.plist b/examples/Demo/Builds/iOS/Info-App.plist index 756003b2..6aa71d6b 100644 --- a/examples/Demo/Builds/iOS/Info-App.plist +++ b/examples/Demo/Builds/iOS/Info-App.plist @@ -3,6 +3,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + LSRequiresIPhoneOS UIViewControllerBasedStatusBarAppearance diff --git a/examples/Demo/JuceDemo.jucer b/examples/Demo/JuceDemo.jucer index 1357c418..f19a1623 100644 --- a/examples/Demo/JuceDemo.jucer +++ b/examples/Demo/JuceDemo.jucer @@ -1,11 +1,12 @@ + objCExtraSuffix="hZh0GG" bigIcon="BvyE0d" extraCompilerFlags="-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter" + customPList="<plist> <dict> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> </dict> </plist>"> + objCExtraSuffix="Lpywnl" bigIcon="BvyE0d" iosScreenOrientation="portraitlandscape" + customPList="<plist> <dict> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> </dict> </plist>"> #include "JuceDemoHeader.h" //============================================================================== @@ -558,19 +559,18 @@ AudioDeviceManager& MainAppWindow::getSharedAudioDeviceManager() if (sharedAudioDeviceManager == nullptr) { sharedAudioDeviceManager = new AudioDeviceManager(); - - RuntimePermissions::request ( - RuntimePermissions::recordAudio, - [] (bool wasGranted) { - int numInputChannels = wasGranted ? 2 : 0; - sharedAudioDeviceManager->initialise (numInputChannels, 2, nullptr, true, String(), nullptr); - } - ); + RuntimePermissions::request (RuntimePermissions::recordAudio, runtimPermissionsCallback); } return *sharedAudioDeviceManager; } +void MainAppWindow::runtimPermissionsCallback (bool wasGranted) +{ + int numInputChannels = wasGranted ? 2 : 0; + sharedAudioDeviceManager->initialise (numInputChannels, 2, nullptr, true, String(), nullptr); +} + MainAppWindow* MainAppWindow::getMainAppWindow() { for (int i = TopLevelWindow::getNumTopLevelWindows(); --i >= 0;) diff --git a/examples/Demo/Source/MainWindow.h b/examples/Demo/Source/MainWindow.h index e1f5610d..5baa678f 100644 --- a/examples/Demo/Source/MainWindow.h +++ b/examples/Demo/Source/MainWindow.h @@ -93,6 +93,9 @@ public: }; private: + + static void runtimPermissionsCallback (bool wasGranted); + ScopedPointer contentComponent; ScopedPointer taskbarIcon; ScopedPointer currentBubbleMessage; diff --git a/examples/HelloWorld/Builds/Linux/Makefile b/examples/HelloWorld/Builds/Linux/Makefile index 218a56a1..da1622d5 100644 --- a/examples/HelloWorld/Builds/Linux/Makefile +++ b/examples/HelloWorld/Builds/Linux/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt diff --git a/examples/HelloWorld/HelloWorld.jucer b/examples/HelloWorld/HelloWorld.jucer index fa4e5f4c..1bff1211 100644 --- a/examples/HelloWorld/HelloWorld.jucer +++ b/examples/HelloWorld/HelloWorld.jucer @@ -1,7 +1,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/MidiTest/Builds/LinuxMakefile/Makefile b/examples/MidiTest/Builds/LinuxMakefile/Makefile index 4fa71c7c..12b70046 100644 --- a/examples/MidiTest/Builds/LinuxMakefile/Makefile +++ b/examples/MidiTest/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/examples/MidiTest/MidiTest.jucer b/examples/MidiTest/MidiTest.jucer index 67586a97..c8d285f9 100644 --- a/examples/MidiTest/MidiTest.jucer +++ b/examples/MidiTest/MidiTest.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile b/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile index 49f701d5..e95df255 100644 --- a/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile +++ b/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer b/examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer index 324f6003..9dc7e648 100644 --- a/examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer +++ b/examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer @@ -2,7 +2,7 @@ + includeBinaryInAppConfig="1" jucerVersion="4.2.3"> diff --git a/examples/OSCMonitor/Builds/LinuxMakefile/Makefile b/examples/OSCMonitor/Builds/LinuxMakefile/Makefile index 17f3ca0d..40905c53 100644 --- a/examples/OSCMonitor/Builds/LinuxMakefile/Makefile +++ b/examples/OSCMonitor/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/examples/OSCMonitor/OSCMonitor.jucer b/examples/OSCMonitor/OSCMonitor.jucer index d8f152a6..74a01941 100644 --- a/examples/OSCMonitor/OSCMonitor.jucer +++ b/examples/OSCMonitor/OSCMonitor.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/OSCReceiver/Builds/LinuxMakefile/Makefile b/examples/OSCReceiver/Builds/LinuxMakefile/Makefile index ae5774b0..ee6a4fc0 100644 --- a/examples/OSCReceiver/Builds/LinuxMakefile/Makefile +++ b/examples/OSCReceiver/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt diff --git a/examples/OSCReceiver/OSCReceiver.jucer b/examples/OSCReceiver/OSCReceiver.jucer index a6020558..3f14082d 100644 --- a/examples/OSCReceiver/OSCReceiver.jucer +++ b/examples/OSCReceiver/OSCReceiver.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/OSCSender/Builds/LinuxMakefile/Makefile b/examples/OSCSender/Builds/LinuxMakefile/Makefile index 70de81b7..7f0f27a3 100644 --- a/examples/OSCSender/Builds/LinuxMakefile/Makefile +++ b/examples/OSCSender/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt diff --git a/examples/OSCSender/OSCSender.jucer b/examples/OSCSender/OSCSender.jucer index e71fe86f..77c8d155 100644 --- a/examples/OSCSender/OSCSender.jucer +++ b/examples/OSCSender/OSCSender.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/OpenGLAppExample/OpenGLAppExample.jucer b/examples/OpenGLAppExample/OpenGLAppExample.jucer index 8c1c1519..2c7024b4 100644 --- a/examples/OpenGLAppExample/OpenGLAppExample.jucer +++ b/examples/OpenGLAppExample/OpenGLAppExample.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/PluckedStringsDemo/PluckedStringsDemo.jucer b/examples/PluckedStringsDemo/PluckedStringsDemo.jucer index d9f817a1..5bf0782e 100644 --- a/examples/PluckedStringsDemo/PluckedStringsDemo.jucer +++ b/examples/PluckedStringsDemo/PluckedStringsDemo.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3"> diff --git a/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj b/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj index a2cf610a..695b477d 100644 --- a/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj @@ -26,9 +26,8 @@ 2652F9F9C3F4DBC1C5D34974 = {isa = PBXBuildFile; fileRef = FAC1B0E5511BBD94A50A2E49; }; 6056E4708065C48B5DBEC734 = {isa = PBXBuildFile; fileRef = 970820EDE1527139F0A21632; }; EFD318C0120FF5F53BE57A95 = {isa = PBXBuildFile; fileRef = 2F12CFEB1E95BC54E1CD3C7D; }; - E3609826518EFA6E8E7589AB = {isa = PBXBuildFile; fileRef = ACE47F30020C3E4144BD108A; }; CBE3170A78C2C2BA01C59EB0 = {isa = PBXBuildFile; fileRef = C74725F506BB44F32F0D8E50; }; - 8A0665F23ACB1B3CB69D88F8 = {isa = PBXBuildFile; fileRef = A3F2CF6BFEAFFFE58A0A9B24; }; + BDB2CF0F590248E3BB247AFD = {isa = PBXBuildFile; fileRef = 697EF2A14DCAE2E85C3C5A53; }; CD51ABAA6EF40CBA996A4E90 = {isa = PBXBuildFile; fileRef = 2E94A5BF0507304C7FBE7DAC; }; F9286BDCED2819E0411D290B = {isa = PBXBuildFile; fileRef = 2F4E8F666770D3FE1819841C; }; E121C97227FD69E95BC0B848 = {isa = PBXBuildFile; fileRef = B88670F8C43CDC4E1C93F040; }; @@ -146,6 +145,7 @@ 1433B21863210729F0530CE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_data_structures.mm"; path = "../../JuceLibraryCode/juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; 1468E60D6C97CED46CEE65D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngread.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngread.c"; sourceTree = "SOURCE_ROOT"; }; 149DE318630BB06FE1878110 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TextEditor.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TextEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; + 14ADC9B94C2E4CD0D6E0AEC1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 14B42A90EAB699C9D84607C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; }; 14D6E8868C09C8A775DC2409 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ComponentBase.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/ComponentBase.h"; sourceTree = "SOURCE_ROOT"; }; 14F1769BC9227265335CE7E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../../../../modules/juce_video/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -242,6 +242,7 @@ 2B27A10CE5AE76648A90D11B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_DrawableImage.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableImage.cpp"; sourceTree = "SOURCE_ROOT"; }; 2B74FE1DB5690776640A424A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctfst.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctfst.c"; sourceTree = "SOURCE_ROOT"; }; 2B934F373C03D2E722D651A7 = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "Flac Licence.txt"; path = "../../../../../modules/juce_audio_formats/codecs/flac/Flac Licence.txt"; sourceTree = "SOURCE_ROOT"; }; + 2BFEB8B6D2202970E1EDA7E2 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; 2C5EC74F7F59FB4D2EDBF48A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPESynthesiserVoice.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h"; sourceTree = "SOURCE_ROOT"; }; 2C96D1EF867911A0E68FFBFF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_processors.mm"; path = "../../../../../modules/juce_audio_processors/juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; 2CCEDD6E4D5033AC85568494 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AppleRemote.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_AppleRemote.h"; sourceTree = "SOURCE_ROOT"; }; @@ -257,15 +258,15 @@ 2E886B4634424C6F38673E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcapimin.c"; sourceTree = "SOURCE_ROOT"; }; 2E94A5BF0507304C7FBE7DAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../JuceLibraryCode/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; 2EC53AB4DD0E835D9B23844C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; - 2F4E8F666770D3FE1819841C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../JuceLibraryCode/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; 2FFF28CCC21983E2097F661E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ApplicationCommandTarget.h"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h"; sourceTree = "SOURCE_ROOT"; }; 315792D7850F26654F7F799A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 316054DECCF2C8CA1375419C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAVectorUnitTypes.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAVectorUnitTypes.h"; sourceTree = "SOURCE_ROOT"; }; 31C6340CFAED51F9297A247B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CustomTypeface.cpp"; path = "../../../../../modules/juce_graphics/fonts/juce_CustomTypeface.cpp"; sourceTree = "SOURCE_ROOT"; }; - 326380A033B511A7D6C908B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; + 31EA1DBEF38B6612DCF697ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; 32AAD6851954F58C57AAF699 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedLock.h"; path = "../../../../../modules/juce_core/threads/juce_ScopedLock.h"; sourceTree = "SOURCE_ROOT"; }; 33FA636BC069C12099595FF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LowLevelGraphicsPostScriptRenderer.h"; path = "../../../../../modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h"; sourceTree = "SOURCE_ROOT"; }; 34E23BC027A8B05CC5F418FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Thread.cpp"; path = "../../../../../modules/juce_core/threads/juce_Thread.cpp"; sourceTree = "SOURCE_ROOT"; }; + 34F7EF8094F8E02C29C9851B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; 35A89273665F75DDA18CDC47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; 35D50824AD807A721FA1ED0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioCDBurner.h"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDBurner.h"; sourceTree = "SOURCE_ROOT"; }; 3676883386C9710B77E2A882 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitreader.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitreader.h"; sourceTree = "SOURCE_ROOT"; }; @@ -273,8 +274,6 @@ 36E62B359C62BCD4DEC8715B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = fixed.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/fixed.h"; sourceTree = "SOURCE_ROOT"; }; 375309A679FB0737182D6268 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = mapping0.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mapping0.c"; sourceTree = "SOURCE_ROOT"; }; 377125E7F99E475F08A365DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; - 38286B4A32B4D3C255E0A871 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AAX_Wrapper.cpp"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; - 385469D6F16711AF64054853 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; 3BEDADA1310ADC048CDA2C5F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MPENote.h"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPENote.h"; sourceTree = "SOURCE_ROOT"; }; 3DF64E77DF55D4CFF0445C51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ReverbAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; 3F2ECB4984ED66DFE2FBC8A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = float.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/float.c"; sourceTree = "SOURCE_ROOT"; }; @@ -287,10 +286,11 @@ 2C88000D1FD0FF38CE9A45DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_RTAS_MacUtilities.mm"; path = "../../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm"; sourceTree = "SOURCE_ROOT"; }; 2D0FF4338F332D5D2EF467BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ByteOrder.h"; path = "../../../../../modules/juce_core/memory/juce_ByteOrder.h"; sourceTree = "SOURCE_ROOT"; }; 2F12CFEB1E95BC54E1CD3C7D = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; + 2F4E8F666770D3FE1819841C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../JuceLibraryCode/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; 2F9B863B3208F7FDC2DFB5C2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ComponentDragger.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.h"; sourceTree = "SOURCE_ROOT"; }; 3076EC4F52A19CE9017D3F25 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ToolbarItemPalette.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp"; sourceTree = "SOURCE_ROOT"; }; 30C6744AD7589406A556BB04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_JSON.cpp"; path = "../../../../../modules/juce_core/javascript/juce_JSON.cpp"; sourceTree = "SOURCE_ROOT"; }; - 31EA1DBEF38B6612DCF697ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Strings.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Strings.mm"; sourceTree = "SOURCE_ROOT"; }; + 326380A033B511A7D6C908B6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Component.cpp"; path = "../../../../../modules/juce_gui_basics/components/juce_Component.cpp"; sourceTree = "SOURCE_ROOT"; }; 32A851BECAA8CB552DA0C92B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActionListener.h"; path = "../../../../../modules/juce_events/broadcasters/juce_ActionListener.h"; sourceTree = "SOURCE_ROOT"; }; 333B1B17AC6BBF4E5330BA2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponent.mm"; path = "../../../../../modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm"; sourceTree = "SOURCE_ROOT"; }; 3393B8D4E413710805AAD1FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGL_osx.h"; path = "../../../../../modules/juce_opengl/native/juce_OpenGL_osx.h"; sourceTree = "SOURCE_ROOT"; }; @@ -298,7 +298,6 @@ 3447AC4248751CBF85190EAB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Fonts.cpp"; path = "../../../../../modules/juce_graphics/native/juce_linux_Fonts.cpp"; sourceTree = "SOURCE_ROOT"; }; 34A5198B33BE63C226542043 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Button.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_Button.h"; sourceTree = "SOURCE_ROOT"; }; 34D919EE29BFF65E7B058F7B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_WeakReference.h"; path = "../../../../../modules/juce_core/memory/juce_WeakReference.h"; sourceTree = "SOURCE_ROOT"; }; - 34F7EF8094F8E02C29C9851B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; 35BC4E6396C07229A7B57058 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Desktop.h"; path = "../../../../../modules/juce_gui_basics/components/juce_Desktop.h"; sourceTree = "SOURCE_ROOT"; }; 364C3095D20CCE47471C4DB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TableListBox.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableListBox.cpp"; sourceTree = "SOURCE_ROOT"; }; 36B5D78633D30EBA28D70796 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadWithProgressWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -307,6 +306,8 @@ 37506BAF1DE7956F29B94FC3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; 37CB0A4D4B303E50117CE937 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SubregionStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_SubregionStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 37CC572A9EBB11B044700DD9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CaretComponent.h"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_CaretComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 38286B4A32B4D3C255E0A871 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AAX_Wrapper.cpp"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; + 385469D6F16711AF64054853 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; 38611AE4F0B78E647A39BDD4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RuntimePermissions.cpp"; path = "../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp"; sourceTree = "SOURCE_ROOT"; }; 387FA9A6E4DD47AA1E9EB560 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zconf.in.h; path = "../../../../../modules/juce_core/zip/zlib/zconf.in.h"; sourceTree = "SOURCE_ROOT"; }; 38EB4858B45965104516E7E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLShaderProgram.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h"; sourceTree = "SOURCE_ROOT"; }; @@ -570,6 +571,7 @@ 6965419522A8F4EE3C0E2F45 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; 6966F44BE8B15F279DD220B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IPAddress.h"; path = "../../../../../modules/juce_core/network/juce_IPAddress.h"; sourceTree = "SOURCE_ROOT"; }; 697C69452850D5C1756C89AF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ListBox.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ListBox.h"; sourceTree = "SOURCE_ROOT"; }; + 697EF2A14DCAE2E85C3C5A53 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 69B162683CA492C8029257F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_CameraDevice.cpp"; path = "../../../../../modules/juce_video/native/juce_win32_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; 69B2E6C4996E538FBA2F0DE6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputBase.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUOutputBase.cpp"; sourceTree = "SOURCE_ROOT"; }; 69B37CF1CC379A84387B0334 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pnginfo.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pnginfo.h"; sourceTree = "SOURCE_ROOT"; }; @@ -854,7 +856,6 @@ A3C4B0ADA80F626A16808AE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jdhuff.c"; sourceTree = "SOURCE_ROOT"; }; A3CD317F3EE5C06F2EA1A08C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; A3E82EA41C7ED1F1F667C06F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_events.cpp"; path = "../../../../../modules/juce_events/juce_events.cpp"; sourceTree = "SOURCE_ROOT"; }; - A3F2CF6BFEAFFFE58A0A9B24 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; A42D10D549BC0D20A8F94101 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLContext.cpp"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLContext.cpp"; sourceTree = "SOURCE_ROOT"; }; A4934E1C24CBC9827ECC9149 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TableHeaderComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; A49A07A7416A34302BA77068 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1657,6 +1658,7 @@ C0EDB3E56321B663CEA2E600, DAF907ABF4DE87F35748F3D6, ); name = "juce_audio_formats"; sourceTree = ""; }; A761179035DC171AE3CC1361 = {isa = PBXGroup; children = ( + 14ADC9B94C2E4CD0D6E0AEC1, 38286B4A32B4D3C255E0A871, ); name = AAX; sourceTree = ""; }; 2950965D1962FA815C4D2EED = {isa = PBXGroup; children = ( 8050245A4FDA661B38C56FB7, @@ -1717,12 +1719,10 @@ 905886A5158A96197F3B794D, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; BA137B835216E7860F255BD8 = {isa = PBXGroup; children = ( 2950965D1962FA815C4D2EED, - 433FE5AD20CFA2F2D6A1E037, 3C5308C4C1F27A3EDA01A6AE, 7E48708D1F7B5C675C2317FA, - 5B391F3E3B16BFFA2E2E022F, - A3F2CF6BFEAFFFE58A0A9B24, ); name = AU; sourceTree = ""; }; - 8691C24C4102F1C9E9B9C411 = {isa = PBXGroup; children = ( + 5B391F3E3B16BFFA2E2E022F, ); name = AU; sourceTree = ""; }; + 0F72F8E63055FBB979899A29 = {isa = PBXGroup; children = ( 60887069093B99EFB6343769, 26EFE7738F4209B87E675B48, 8495D4AC707047B56331794B, @@ -1730,10 +1730,10 @@ 2C88000D1FD0FF38CE9A45DC, 85762464FE37AFE1886FEC22, EBC20070F34FA195234BE6DF, ); name = RTAS; sourceTree = ""; }; - C05274DFED1EB6E34DF36733 = {isa = PBXGroup; children = ( + 745D75DA8B561FCA6860047F = {isa = PBXGroup; children = ( 4383F22A2A80A06AD2CC494A, 12351FF0F32DCFFD8F9B753E, ); name = Standalone; sourceTree = ""; }; - 99C24791D5336D7A9E41FAF5 = {isa = PBXGroup; children = ( + B6C772C0440D8D8DBE7632CB = {isa = PBXGroup; children = ( 391348A415637487C38D51AF, 689997DCF29C4EA0BBE54FB3, F04DF2587A3735FD7CBD29C0, @@ -1743,22 +1743,23 @@ 4C2521E196D9F39AEE5A9A3C, 54ED3AEF6A560DA2A2C9A6A1, 73967B10B92F7FAB36839F0C, ); name = utility; sourceTree = ""; }; - 5485B6828CE54EEAFCFE850A = {isa = PBXGroup; children = ( + 6CA0C21AAEF945AA59C2EB8C = {isa = PBXGroup; children = ( 0462FCF4041854C357138EB2, C18A26D290AB9B1B16DDF330, ); name = VST; sourceTree = ""; }; - 17217ECF28B1997B5294F7EB = {isa = PBXGroup; children = ( + 8A9835029A0E7FDB7F930A00 = {isa = PBXGroup; children = ( EAAA5DE166254FF08BBF56C4, ); name = VST3; sourceTree = ""; }; 7FF931018B659697B544BFF0 = {isa = PBXGroup; children = ( A761179035DC171AE3CC1361, BA137B835216E7860F255BD8, - 8691C24C4102F1C9E9B9C411, - C05274DFED1EB6E34DF36733, - 99C24791D5336D7A9E41FAF5, - 5485B6828CE54EEAFCFE850A, - 17217ECF28B1997B5294F7EB, + 0F72F8E63055FBB979899A29, + 745D75DA8B561FCA6860047F, + B6C772C0440D8D8DBE7632CB, + 6CA0C21AAEF945AA59C2EB8C, + 8A9835029A0E7FDB7F930A00, 735F5B2D82B337DC3E3F2B4C, 951CE97A5CF4D268F6F8F450, F9BB54AE65B0CB1C8D3A6484, + 697EF2A14DCAE2E85C3C5A53, 7A8D5B45E22BF4C69EE381A7, 5E7D4EE3F4AF0E8F5178E18E, 74F428D92543A96844DADEA8, @@ -2844,8 +2845,7 @@ AD33FF34F267508546D24E26, E39E8398B8A26F3F99A37341, DE0DBA6DFFF3F7B3024D78AF, - 2F12CFEB1E95BC54E1CD3C7D, - ACE47F30020C3E4144BD108A, ); name = Resources; sourceTree = ""; }; + 2F12CFEB1E95BC54E1CD3C7D, ); name = Resources; sourceTree = ""; }; 61D8F5CF64FE3EC528B85D1B = {isa = PBXGroup; children = ( C3F6222E9059F8CCD9674AD0, AC840D910B076A8D6E11D0E3, @@ -3277,7 +3277,7 @@ 3C2FB38C546E3A4CBD11DD08 = {isa = XCConfigurationList; buildConfigurations = ( 6A83695CF366C87636A392BE, 024F8B1B5C243015CA8FEF35, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 08D74DB290FCD09A8D4810BB = {isa = PBXAggregateTarget; buildConfigurationList = 3C2FB38C546E3A4CBD11DD08; dependencies = ( + 08D74DB290FCD09A8D4810BB = {isa = PBXAggregateTarget; buildConfigurationList = 3C2FB38C546E3A4CBD11DD08; buildPhases = ( ); buildRules = ( ); dependencies = ( D65F24B83710D0DAEB515331, FB5FCA02BA29016482B2C525, 78D7AF4AA023DEF36CFB4694, @@ -3287,8 +3287,7 @@ D83A1735FBD5B491316453B8, AC0ABA95F0350939E21390E1, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; DD2730D2C73FAF12FC2A2FE1 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - EFD318C0120FF5F53BE57A95, - E3609826518EFA6E8E7589AB, ); runOnlyForDeploymentPostprocessing = 0; }; + EFD318C0120FF5F53BE57A95, ); runOnlyForDeploymentPostprocessing = 0; }; 374615B793201971BEB6ACD7 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 3F4774290CDA1A5712701353, ); runOnlyForDeploymentPostprocessing = 0; }; C536519964353A302E775B31 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3313,8 +3312,7 @@ D42A639827E2709B5AF668D8, 07B9E8F70529950A47F22BA0, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 6E5217D875151ACA03487C5F = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - EFD318C0120FF5F53BE57A95, - E3609826518EFA6E8E7589AB, ); runOnlyForDeploymentPostprocessing = 0; }; + EFD318C0120FF5F53BE57A95, ); runOnlyForDeploymentPostprocessing = 0; }; D6A7B6CC63294E7F4E4C2669 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 087F53B6CB2E5291253A1662, ); runOnlyForDeploymentPostprocessing = 0; }; FD25AA0E45A27BC734181E25 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3339,10 +3337,9 @@ 575D0AC8DD9926D1C8349BE2, 6B6E02F5844A057FE3738154, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; D4AFA92A095134140E436078 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - EFD318C0120FF5F53BE57A95, - E3609826518EFA6E8E7589AB, ); runOnlyForDeploymentPostprocessing = 0; }; + EFD318C0120FF5F53BE57A95, ); runOnlyForDeploymentPostprocessing = 0; }; 2DBC42F261B32E5F29204E1A = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 8A0665F23ACB1B3CB69D88F8, ); runOnlyForDeploymentPostprocessing = 0; }; + BDB2CF0F590248E3BB247AFD, ); runOnlyForDeploymentPostprocessing = 0; }; CE1F70D63BB05DCAD3BA3110 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 7FD723582B7BF1775729023D, 1935BD4130D5954448BC9B9D, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3371,8 +3368,7 @@ 515B9E5E69F486633922E731, 3F21DFC5AA6C44E97BE3588C, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 56971B7CCCA861C76980BF5F = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - EFD318C0120FF5F53BE57A95, - E3609826518EFA6E8E7589AB, ); runOnlyForDeploymentPostprocessing = 0; }; + EFD318C0120FF5F53BE57A95, ); runOnlyForDeploymentPostprocessing = 0; }; A74DE6A1732099BA13F670AD = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0C147FBEF5B1A66FBFBB01F4, ); runOnlyForDeploymentPostprocessing = 0; }; B6D4E134F7DDBE5BEE94F2B0 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj index 84d45cf6..f74744c8 100644 --- a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj +++ b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj @@ -1952,6 +1952,7 @@ + @@ -2449,7 +2450,8 @@ - + + diff --git a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters index d35303a8..3e8e47ed 100644 --- a/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters +++ b/examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters @@ -2676,6 +2676,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4163,8 +4166,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h index 7a74eb2a..84d9132b 100644 --- a/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h @@ -110,6 +110,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -253,10 +260,10 @@ #define JucePlugin_ManufacturerEmail "info@juce.com" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'Arpg' + #define JucePlugin_PluginCode 0x41727067 // 'Arpg' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 0 @@ -289,7 +296,7 @@ #define JucePlugin_VSTCategory kPlugCategEffect #endif #ifndef JucePlugin_AUMainType - #define JucePlugin_AUMainType kAudioUnitType_Effect + #define JucePlugin_AUMainType 'aumi' #endif #ifndef JucePlugin_AUSubType #define JucePlugin_AUSubType JucePlugin_PluginCode diff --git a/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj b/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj index e6580bf8..eeb46720 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj @@ -26,9 +26,8 @@ 6B4E64CC0DA5E1DC53159376 = {isa = PBXBuildFile; fileRef = 28754784774E7974CF215965; }; 14E482AFF9CC9F18BA3798BD = {isa = PBXBuildFile; fileRef = 8B25F581B3FC77FB9FE0079B; }; 434F6E14A0DACDAA2BF2212B = {isa = PBXBuildFile; fileRef = E13512F9451169A200CA63BF; }; - 685F85F881C02A3AAA5E9B47 = {isa = PBXBuildFile; fileRef = BF909DFBC9B899C6119F556B; }; FADD82E463A2C5169B5F72E9 = {isa = PBXBuildFile; fileRef = ECD7D7FB3760E3792BAAC6CE; }; - 9D6465B0B231D381F43E350E = {isa = PBXBuildFile; fileRef = 52F901B45BB73B9A4C4588C4; }; + F6C5AAF2B7414AC1474EF3EA = {isa = PBXBuildFile; fileRef = 2BB3D82DA20E11064A181C9F; }; BE1CCB2BA25C1B9CC93BD180 = {isa = PBXBuildFile; fileRef = 2A42EB4E6808C916CD805B55; }; 6A823DA60FD178B0AE4F7795 = {isa = PBXBuildFile; fileRef = 539D8FB917601AE0FEF2EDD0; }; 6859170B30F156B4628F7476 = {isa = PBXBuildFile; fileRef = 3F62CC0D964ADA2C5FEE8780; }; @@ -222,6 +221,7 @@ 2134DC1B33511F87D54B2D8A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OpenGLFrameBuffer.cpp"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp"; sourceTree = "SOURCE_ROOT"; }; 2147F477AF3713D33E1E50CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Variant.h"; path = "../../../../../modules/juce_core/containers/juce_Variant.h"; sourceTree = "SOURCE_ROOT"; }; 2152D28F9FCD5E968AB74A6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ConnectedChildProcess.cpp"; path = "../../../../../modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp"; sourceTree = "SOURCE_ROOT"; }; + 21888BBF72D5076AA09BF442 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; 218E7DFF985197C095961EB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiDataConcatenator.h"; path = "../../../../../modules/juce_audio_devices/native/juce_MidiDataConcatenator.h"; sourceTree = "SOURCE_ROOT"; }; 21B97DA05679BB8EE0C91A65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FloatVectorOperations.h"; path = "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h"; sourceTree = "SOURCE_ROOT"; }; 21D96C3F5C44E2768DC18ED0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLFrameBuffer.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -277,6 +277,7 @@ 2B67B13342F0A3F807DF2B2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiRPN.cpp"; path = "../../../../../modules/juce_audio_basics/midi/juce_MidiRPN.cpp"; sourceTree = "SOURCE_ROOT"; }; 2B7C784CF333CA6BEEF5038A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode1.cpp"; path = "../../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp"; sourceTree = "SOURCE_ROOT"; }; 2B8E9F5D2845DA70FCDB53F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = "../../../../../modules/juce_core/zip/zlib/deflate.c"; sourceTree = "SOURCE_ROOT"; }; + 2BB3D82DA20E11064A181C9F = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 2BC8F8214792631A55C86182 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeModuleHeaders.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h"; sourceTree = "SOURCE_ROOT"; }; 2BFB3614DD9C2CFD7D08B4D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_graphics.cpp"; path = "../../../../../modules/juce_graphics/juce_graphics.cpp"; sourceTree = "SOURCE_ROOT"; }; 2C29E6A7967E9244FC3CDE85 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; @@ -472,7 +473,6 @@ 52B3A797835ED0B7474BD7C5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_QuickTimeMovieComponent.cpp"; path = "../../../../../modules/juce_video/native/juce_win32_QuickTimeMovieComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 52BFB6C68B8BF5A6BEFC0127 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBuffer.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBuffer.h"; sourceTree = "SOURCE_ROOT"; }; 52E047F304B418DC34B7961D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_UnitTest.cpp"; path = "../../../../../modules/juce_core/unit_tests/juce_UnitTest.cpp"; sourceTree = "SOURCE_ROOT"; }; - 52F901B45BB73B9A4C4588C4 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; 539D8FB917601AE0FEF2EDD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_devices.mm"; path = "../../JuceLibraryCode/juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; 53C8168EAD3420C0EFD34BE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CoreAudioFormat.cpp"; path = "../../../../../modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp"; sourceTree = "SOURCE_ROOT"; }; 53F794C42FF269F389C0371A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ScrollBar.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ScrollBar.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1227,6 +1227,7 @@ EE3D9D885DC024F73E7BA834 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CarbonEventHandler.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CarbonEventHandler.cpp"; sourceTree = "SOURCE_ROOT"; }; EE68D617C21D6400FFDC08E3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ActiveXControlComponent.h"; path = "../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h"; sourceTree = "SOURCE_ROOT"; }; EE799DBCC57F1B69CEB332A1 = {isa = PBXFileReference; lastKnownFileType = file.r; name = AUResources.r; path = "../../../../../modules/juce_audio_plugin_client/AU/AUResources.r"; sourceTree = "SOURCE_ROOT"; }; + EEB2A8271DE160CC76165242 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; EEE02CD512C902DD7B0C5D13 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Process.h"; path = "../../../../../modules/juce_core/threads/juce_Process.h"; sourceTree = "SOURCE_ROOT"; }; EF055DD10D73DD84E657AB0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_gui_extra.h"; path = "../../../../../modules/juce_gui_extra/juce_gui_extra.h"; sourceTree = "SOURCE_ROOT"; }; EF0ED3DFA2926694133E27E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModalComponentManager.cpp"; path = "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1244,6 +1245,7 @@ F19532C9A9B834EF732E2C52 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEZoneLayout.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; F1A0F0881D3C62C8E705120E = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-VST3.plist"; path = "Info-VST3.plist"; sourceTree = "SOURCE_ROOT"; }; F1B4EC755365729CF9850E27 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; + F1B858A448D0BA6929408B97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jchuff.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jchuff.h"; sourceTree = "SOURCE_ROOT"; }; F1C1D72B4B911227DF608946 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ModifierKeys.cpp"; path = "../../../../../modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp"; sourceTree = "SOURCE_ROOT"; }; F2317300350CF81B3EC383A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = transupp.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/transupp.c"; sourceTree = "SOURCE_ROOT"; }; F28941FBBB1C31040CDFEA67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Toolbar.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Toolbar.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1253,11 +1255,6 @@ F3B8EEB02E5588D99021DD10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AiffAudioFormat.h"; path = "../../../../../modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; F3BFC5ADFAD663890D658894 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BufferingAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_BufferingAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; F3FC0F1212CEA1EE597AF0DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_opengl.cpp"; path = "../../../../../modules/juce_opengl/juce_opengl.cpp"; sourceTree = "SOURCE_ROOT"; }; - F8D93BA03DB14514E2F9D007 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; - C43A527A45129CF421296BD0 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 074F1E0FAFBD4B127B869BC2 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGainPlugIn.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; - F1B858A448D0BA6929408B97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jchuff.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jchuff.h"; sourceTree = "SOURCE_ROOT"; }; - F405F19EE310FBC6BB4A1472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAXException.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h"; sourceTree = "SOURCE_ROOT"; }; F507AE61AF55B2101383B1E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DirectShowComponent.h"; path = "../../../../../modules/juce_video/playback/juce_DirectShowComponent.h"; sourceTree = "SOURCE_ROOT"; }; F527FEA0852AA21984AD9F47 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_mac_CoreGraphicsHelpers.h"; path = "../../../../../modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h"; sourceTree = "SOURCE_ROOT"; }; F549ECCF4D91FC7A30105297 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedPipe.h"; path = "../../../../../modules/juce_core/network/juce_NamedPipe.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1270,13 +1267,17 @@ F5C623942E20C541382097E9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_OutputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_OutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; F5EAFB838EC3E83930E9C8F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jddctmgr.c"; sourceTree = "SOURCE_ROOT"; }; F6AC635E17C2745BA801256F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_File.cpp"; path = "../../../../../modules/juce_core/files/juce_File.cpp"; sourceTree = "SOURCE_ROOT"; }; - F6D0C31C49847196CB56EF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; F6D61FC781A1532ACF955A56 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileBrowserListener.h"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h"; sourceTree = "SOURCE_ROOT"; }; - F6F268E5CE4AC0C5EFF2A414 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h"; sourceTree = "SOURCE_ROOT"; }; F73E61CD3ACE30495293E399 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jcphuff.c"; sourceTree = "SOURCE_ROOT"; }; F758A3A014E70D7F75D889D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ApplicationCommandInfo.cpp"; path = "../../../../../modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp"; sourceTree = "SOURCE_ROOT"; }; - F76BAD45163B80F58A11FE42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; F7837342DC31305E98733379 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioProcessorGraph.cpp"; path = "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp"; sourceTree = "SOURCE_ROOT"; }; + F8D93BA03DB14514E2F9D007 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.component; sourceTree = "BUILT_PRODUCTS_DIR"; }; + C43A527A45129CF421296BD0 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GainPlugIn.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; + 074F1E0FAFBD4B127B869BC2 = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libGainPlugIn.a; sourceTree = "BUILT_PRODUCTS_DIR"; }; + F405F19EE310FBC6BB4A1472 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAXException.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAXException.h"; sourceTree = "SOURCE_ROOT"; }; + F6D0C31C49847196CB56EF7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_core.mm"; path = "../../../../../modules/juce_core/juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; + F6F268E5CE4AC0C5EFF2A414 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUCarbonViewControl.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUCarbonViewControl.h"; sourceTree = "SOURCE_ROOT"; }; + F76BAD45163B80F58A11FE42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatManager.cpp"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatManager.cpp"; sourceTree = "SOURCE_ROOT"; }; F79776F078375AA287A24AB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../JuceLibraryCode/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; F7BB750285C1A56C05A6B437 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; F7FA3CA65C2B371C902CA9EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1657,6 +1658,7 @@ 56FF5DCB746A2F7485406F63, 18B7B5B0C06A1C96ED45C9AB, ); name = "juce_audio_formats"; sourceTree = ""; }; F1C57B1BE7D3A85714FB7C7A = {isa = PBXGroup; children = ( + EEB2A8271DE160CC76165242, B41DB1D9877BC61AB0558A69, ); name = AAX; sourceTree = ""; }; AB9348DF000622E4B2C60AD4 = {isa = PBXGroup; children = ( F12E2F9633C0C10172C7EB29, @@ -1717,12 +1719,10 @@ 5E148B6D2D4D3ACADBD369BA, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; F2D5F877258DB2BBF0433F23 = {isa = PBXGroup; children = ( AB9348DF000622E4B2C60AD4, - EE799DBCC57F1B69CEB332A1, 8CABBDFF3D48FA622F561D56, B15D003DE2F4E963EC111711, - 8782AADF74783EA3DD066529, - 52F901B45BB73B9A4C4588C4, ); name = AU; sourceTree = ""; }; - A8BAB3F628FDD2F723B11AF5 = {isa = PBXGroup; children = ( + 8782AADF74783EA3DD066529, ); name = AU; sourceTree = ""; }; + 1DDAAEC5B6DB8099FC652515 = {isa = PBXGroup; children = ( B7EC6979B78232E97C67586D, 2B7C784CF333CA6BEEF5038A, CF608BF804CB06BCBB51B9C2, @@ -1730,10 +1730,10 @@ 6701AB4D2F5DAD2EA72ACFE9, DC55FBABEB3A839B6602D678, DBF11B9083F40C0C849B9302, ); name = RTAS; sourceTree = ""; }; - 48CA15F7102E796E2AD6058D = {isa = PBXGroup; children = ( + ABE3EC02D9B5D528025BF690 = {isa = PBXGroup; children = ( 43B51F79EFF2E9673AA1BCE6, 8323AB8EF5430A81A4FDD26E, ); name = Standalone; sourceTree = ""; }; - 50034CFA00470A07703FD97C = {isa = PBXGroup; children = ( + AAB881B99070695DB74EB217 = {isa = PBXGroup; children = ( 9B5CE97BAC0AAD8EEAF75ABF, 38687DB2FEC47B8E4826346E, E219774D186DF70D694D2768, @@ -1743,22 +1743,23 @@ 9F56E1F9CF75D555C677A38D, E9FEFC46FF2B51B8C3A520F4, 21F8A643A1D07AE29337D139, ); name = utility; sourceTree = ""; }; - 0DA9BEC29F87A7F4440AA21A = {isa = PBXGroup; children = ( + D78074DEDA44278DDA6376E6 = {isa = PBXGroup; children = ( 9548631628595F1576CD7B73, C3D43F992D8AAA5EF9D23288, ); name = VST; sourceTree = ""; }; - CD737733FC3EFC2B3A99B8C1 = {isa = PBXGroup; children = ( + C02CF34EACB3A93904174BD4 = {isa = PBXGroup; children = ( 8676D218DB100E6B4636A82E, ); name = VST3; sourceTree = ""; }; F7173AE77C51F8BD4B4476AC = {isa = PBXGroup; children = ( F1C57B1BE7D3A85714FB7C7A, F2D5F877258DB2BBF0433F23, - A8BAB3F628FDD2F723B11AF5, - 48CA15F7102E796E2AD6058D, - 50034CFA00470A07703FD97C, - 0DA9BEC29F87A7F4440AA21A, - CD737733FC3EFC2B3A99B8C1, + 1DDAAEC5B6DB8099FC652515, + ABE3EC02D9B5D528025BF690, + AAB881B99070695DB74EB217, + D78074DEDA44278DDA6376E6, + C02CF34EACB3A93904174BD4, B5F601E64CCEDC477481A4ED, BBBE3DABDB9284A6397CE7B8, FEDE864FABF0E3C4883CF664, + 2BB3D82DA20E11064A181C9F, A9D38AF307DF9AD3D7E01502, 4544225B1B0BC9D00BA328C0, 03B89FFF7FBE455F753317FB, @@ -2844,8 +2845,7 @@ F1A0F0881D3C62C8E705120E, EDFE3B976573F01C8D3AA486, 9D1C58BBAA0B7F70D6EB7724, - E13512F9451169A200CA63BF, - BF909DFBC9B899C6119F556B, ); name = Resources; sourceTree = ""; }; + E13512F9451169A200CA63BF, ); name = Resources; sourceTree = ""; }; 00DE399BF0EF1D2BB5C99DF6 = {isa = PBXGroup; children = ( 71B73129FAEF3B7CB3FF6993, 9D6BD8DE6FC16E28FE2169F0, @@ -3277,7 +3277,7 @@ 960E82451D9B9C0C256DE750 = {isa = XCConfigurationList; buildConfigurations = ( 28E3B1FE50FFC5B2A58897A0, 987E131B9EAD1C8CE9786F9C, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 67946078D4B1207C2A6BDB4F = {isa = PBXAggregateTarget; buildConfigurationList = 960E82451D9B9C0C256DE750; dependencies = ( + 67946078D4B1207C2A6BDB4F = {isa = PBXAggregateTarget; buildConfigurationList = 960E82451D9B9C0C256DE750; buildPhases = ( ); buildRules = ( ); dependencies = ( 60FCED8B68702AB28A4297C4, 0F3A38F7A210718AC51B5B67, 6FBE3D1D1900F691ECD1E9CF, @@ -3287,8 +3287,7 @@ 2258034E5AABF301ACB109C1, B5B4DDE9429C2F747AEAFEBC, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; AAA7EBE70E20807CF2102118 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 434F6E14A0DACDAA2BF2212B, - 685F85F881C02A3AAA5E9B47, ); runOnlyForDeploymentPostprocessing = 0; }; + 434F6E14A0DACDAA2BF2212B, ); runOnlyForDeploymentPostprocessing = 0; }; 006D5D33A2A2D68C9354B32D = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( C396DBDD84D1162113B3ABD7, ); runOnlyForDeploymentPostprocessing = 0; }; 911E05FA69C1B8015EA96560 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3313,8 +3312,7 @@ 1F8B7104586EEA017DC9E66D, 8C4CBD97ADA22451A0CBDB2A, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; F779790510354BCC375B6866 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 434F6E14A0DACDAA2BF2212B, - 685F85F881C02A3AAA5E9B47, ); runOnlyForDeploymentPostprocessing = 0; }; + 434F6E14A0DACDAA2BF2212B, ); runOnlyForDeploymentPostprocessing = 0; }; 961B720A39DE7A36993450FB = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 60A23086F8F04399960054A9, ); runOnlyForDeploymentPostprocessing = 0; }; B97CFDFCFBB3263FBE4CE9DA = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3339,10 +3337,9 @@ 913C8DA77769EF7E429930F2, 93405247663082AE0B727930, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; A8BFD81EACAF4420A2D9C7E7 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 434F6E14A0DACDAA2BF2212B, - 685F85F881C02A3AAA5E9B47, ); runOnlyForDeploymentPostprocessing = 0; }; + 434F6E14A0DACDAA2BF2212B, ); runOnlyForDeploymentPostprocessing = 0; }; 12E5B85CBAEF4ADCEF60C693 = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 9D6465B0B231D381F43E350E, ); runOnlyForDeploymentPostprocessing = 0; }; + F6C5AAF2B7414AC1474EF3EA, ); runOnlyForDeploymentPostprocessing = 0; }; 7CD5DF20930E5FD4B8978F68 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 27BAA78181CB9EA282A6AC64, 7EFB529B9EA74539375A96E0, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3371,8 +3368,7 @@ 71BC79A3E5FEBDB257DE068E, A1AD203AE69C428760D3AD4A, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 87D9874ECD12A1F70BE4B01C = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 434F6E14A0DACDAA2BF2212B, - 685F85F881C02A3AAA5E9B47, ); runOnlyForDeploymentPostprocessing = 0; }; + 434F6E14A0DACDAA2BF2212B, ); runOnlyForDeploymentPostprocessing = 0; }; 5ED60E79CB2B11C45637CA8A = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 920289CA43FF41424E0F0AE9, ); runOnlyForDeploymentPostprocessing = 0; }; B4837EEA7868B856A37F43BD = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj index 26db43e0..3169ab02 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj +++ b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj @@ -1952,6 +1952,7 @@ + @@ -2449,7 +2450,8 @@ - + + diff --git a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters index a5dcf34f..d5c5414b 100644 --- a/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters +++ b/examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters @@ -2676,6 +2676,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4163,8 +4166,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer b/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer index fc250e77..623d7787 100644 --- a/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer +++ b/examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer @@ -8,7 +8,7 @@ pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0" pluginSilenceInIsSilenceOut="1" pluginEditorRequiresKeys="0" pluginAUExportPrefix="GainPlugInAU" pluginRTASCategory="" aaxIdentifier="com.ROLI.GainPlugIn" - pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1" + pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3" pluginIsMidiEffectPlugin="0" buildAUv3="0"> diff --git a/examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h index fb02c044..f3583051 100644 --- a/examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h @@ -110,6 +110,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -253,10 +260,10 @@ #define JucePlugin_ManufacturerEmail "" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'Gain' + #define JucePlugin_PluginCode 0x4761696e // 'Gain' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 0 diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj b/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj index 38865926..905ef531 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj @@ -26,9 +26,8 @@ EF983C366CDBC57B6FEE75D3 = {isa = PBXBuildFile; fileRef = 15B8BCB48229C73748FB9E9C; }; FC43C69A538FBE74E63D8D2D = {isa = PBXBuildFile; fileRef = 0E52162DFFFCCD06B941AE62; }; 7293C6A173EDB952C43C4E1E = {isa = PBXBuildFile; fileRef = 8F6829961A0F50B8265BD9CB; }; - 0D85DE716EC383C1E7CA404B = {isa = PBXBuildFile; fileRef = 47C8050DE3ABBEC6BEC74B2F; }; DBEB6D440551FCEA8C7EC910 = {isa = PBXBuildFile; fileRef = 614BDB6E04A50D791DF8A237; }; - 28C99E7CD1CE273646B706BF = {isa = PBXBuildFile; fileRef = F06745DFADC49CA1C3D5C964; }; + 7E2BF0D7672428735E4B25C6 = {isa = PBXBuildFile; fileRef = 662205D63DB6B428A86C4E88; }; F3EA62332EC4B7A82F672E51 = {isa = PBXBuildFile; fileRef = 0D3AB1D2BB096CE5F3EAAE0F; }; CBF6D1C360065E76B0C371BD = {isa = PBXBuildFile; fileRef = CBDE271C4C5387CE39BD348F; }; 6849CB54E7F162EDDFB344C9 = {isa = PBXBuildFile; fileRef = 6FCB8DD99D8DB1C154E30620; }; @@ -580,6 +579,7 @@ 65D9B4315FAA195761CE7527 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessorParameterWithID.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h"; sourceTree = "SOURCE_ROOT"; }; 65F124A6502B670A634647EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileTreeComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 660CCC2FD998549705CD7B61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_NSViewComponentPeer.mm"; path = "../../../../../modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm"; sourceTree = "SOURCE_ROOT"; }; + 662205D63DB6B428A86C4E88 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 665763F2042DE8357AF3B1A5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GlowEffect.h"; path = "../../../../../modules/juce_graphics/effects/juce_GlowEffect.h"; sourceTree = "SOURCE_ROOT"; }; 665D6CE9BEC24300CD897F0D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RecentlyOpenedFilesList.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp"; sourceTree = "SOURCE_ROOT"; }; 66C34363559FEABE6A3FFF4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ImageConvolutionKernel.h"; path = "../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.h"; sourceTree = "SOURCE_ROOT"; }; @@ -633,6 +633,7 @@ 701887A3C3EE66EEF8EF0961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioParameterFloat.h"; path = "../../../../../modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h"; sourceTree = "SOURCE_ROOT"; }; 701C0E9CF1CA9D837C4EB044 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAUParameter.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAUParameter.h"; sourceTree = "SOURCE_ROOT"; }; 7053FC8D746749F7DA46BC08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitreader.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c"; sourceTree = "SOURCE_ROOT"; }; + 7059556F3B242B8E276833AC = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; 706EA223A5859B5B1D9AE107 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Colour.h"; path = "../../../../../modules/juce_graphics/colour/juce_Colour.h"; sourceTree = "SOURCE_ROOT"; }; 70BC3C87909EA4BAA5A23BFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ButtonPropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 70C5C7441E1ABDD141697357 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPESynthesiserVoice.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -786,6 +787,7 @@ 8F5F65FD0D7B5E2A7029D68C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_22.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_22.h"; sourceTree = "SOURCE_ROOT"; }; 8F6829961A0F50B8265BD9CB = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; 8F808F4330D4F791E62FC452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageConvolutionKernel.cpp"; path = "../../../../../modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8F929BB1E10DD57C1056FF50 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 8F9997207C596AF8202322E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ComponentDragger.cpp"; path = "../../../../../modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FA0603940FEA0AFA46A769E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Windowing.cpp"; path = "../../../../../modules/juce_gui_basics/native/juce_win32_Windowing.cpp"; sourceTree = "SOURCE_ROOT"; }; 8FBC36FD7DC1A74D573936AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SortedSet.h"; path = "../../../../../modules/juce_core/containers/juce_SortedSet.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1079,7 +1081,6 @@ CA8CF02AC2665E599ECF7A7C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioFormatReader.cpp"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormatReader.cpp"; sourceTree = "SOURCE_ROOT"; }; CAAE1D22DACE9CACB93B2129 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; CAF48DE29336FD7E6BA83365 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ConcertinaPanel.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_ConcertinaPanel.h"; sourceTree = "SOURCE_ROOT"; }; - CB841032A149EE040BB59594 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; CBDE271C4C5387CE39BD348F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_basics.mm"; path = "../../JuceLibraryCode/juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; CC1F87E59205712A0B2B08D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_PluginHostType.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_PluginHostType.h"; sourceTree = "SOURCE_ROOT"; }; CC8E350DE3898296FD1CA6AB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_gui_extra.cpp"; path = "../../../../../modules/juce_gui_extra/juce_gui_extra.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1088,12 +1089,9 @@ CCF97D006BD017722C74B6A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/MusicDeviceBase.cpp"; sourceTree = "SOURCE_ROOT"; }; CD02F270DE7AE1635A3E423E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; CD111D36AD8E9D73CE9739F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StandardHeader.h"; path = "../../../../../modules/juce_core/system/juce_StandardHeader.h"; sourceTree = "SOURCE_ROOT"; }; - CD26D70DEFE69EB620F09443 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; - CD2CEC703F63930859D26DBA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; CD4A4B5DF38D0F6C1B5CA961 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FilenameComponent.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; CE1C954808FDA669FEEFDC2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ToolbarItemComponent.h"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h"; sourceTree = "SOURCE_ROOT"; }; - CE7AB9CEBC2AD27B236A69F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; }; - CEEC9947F99D7F39C77DE79B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; + CE756CA0F5505BA8084D5CA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; CF2A59FABE1AEC5251A7C9A6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CAAudioChannelLayout.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAudioChannelLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; D5445BE1A8D52195956FD045 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioFormat.h"; path = "../../../../../modules/juce_audio_formats/format/juce_AudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; D6889EB5ED8960BD2093A686 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ios_Audio.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_ios_Audio.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1105,10 +1103,14 @@ C785485A7DC04A2134F4F2B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MPEValue.cpp"; path = "../../../../../modules/juce_audio_basics/mpe/juce_MPEValue.cpp"; sourceTree = "SOURCE_ROOT"; }; C7FF15427F8871470BFA4820 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_IIRFilterAudioSource.cpp"; path = "../../../../../modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp"; sourceTree = "SOURCE_ROOT"; }; CB1789262FD3A919F45A7FD3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KnownPluginList.h"; path = "../../../../../modules/juce_audio_processors/scanning/juce_KnownPluginList.h"; sourceTree = "SOURCE_ROOT"; }; + CB841032A149EE040BB59594 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; + CD26D70DEFE69EB620F09443 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; + CD2CEC703F63930859D26DBA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VSTPluginFormat.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h"; sourceTree = "SOURCE_ROOT"; }; CD4CB495D75A2ABAA66A2951 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MixerAudioSource.h"; path = "../../../../../modules/juce_audio_basics/sources/juce_MixerAudioSource.h"; sourceTree = "SOURCE_ROOT"; }; CDB15D2B8437758B0F7434B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Expression.h"; path = "../../../../../modules/juce_core/maths/juce_Expression.h"; sourceTree = "SOURCE_ROOT"; }; - CE756CA0F5505BA8084D5CA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pngconf.h; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngconf.h"; sourceTree = "SOURCE_ROOT"; }; + CE7AB9CEBC2AD27B236A69F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; }; CEA5C634122F13B61BC06B2B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_SystemTrayIcon.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp"; sourceTree = "SOURCE_ROOT"; }; + CEEC9947F99D7F39C77DE79B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_NamedValueSet.cpp"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp"; sourceTree = "SOURCE_ROOT"; }; D01619CC43F88EC81883B673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ShapeButton.h"; path = "../../../../../modules/juce_gui_basics/buttons/juce_ShapeButton.h"; sourceTree = "SOURCE_ROOT"; }; D06DCC799C2F8567B19C2B0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Reverb.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_Reverb.h"; sourceTree = "SOURCE_ROOT"; }; D08EBD01477B270E49ADD283 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitwise.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/bitwise.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1246,7 +1248,6 @@ EF8849B28A436C3A48F95829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OpenGLHelpers.h"; path = "../../../../../modules/juce_opengl/opengl/juce_OpenGLHelpers.h"; sourceTree = "SOURCE_ROOT"; }; EFC0C53B3B0C166406FA20DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; EFECC8D227334F0274FE2BF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ThreadPool.cpp"; path = "../../../../../modules/juce_core/threads/juce_ThreadPool.cpp"; sourceTree = "SOURCE_ROOT"; }; - F06745DFADC49CA1C3D5C964 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; F09ADDD0ED10155EB599DD3F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = synthesis.c; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/synthesis.c"; sourceTree = "SOURCE_ROOT"; }; F0E7FB678622A999A3AF4FED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_video.mm"; path = "../../../../../modules/juce_video/juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; F13ED53195C1AFEC88B36244 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ChangeBroadcaster.h"; path = "../../../../../modules/juce_events/broadcasters/juce_ChangeBroadcaster.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1664,6 +1665,7 @@ 0D4AA39D67CF9EB2B8FC06C9, 4B4395FD0B981840C14E2344, ); name = "juce_audio_formats"; sourceTree = ""; }; EC8818482FE69DEA2472407C = {isa = PBXGroup; children = ( + 8F929BB1E10DD57C1056FF50, 069622CB01111075080B6F60, ); name = AAX; sourceTree = ""; }; 93B4691809E49A377D666871 = {isa = PBXGroup; children = ( AA6B7C4CCA49273A0A082DD0, @@ -1724,12 +1726,10 @@ 75300D231C75A269DD7D523F, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 7B934098FF9E066D257F3FC8 = {isa = PBXGroup; children = ( 93B4691809E49A377D666871, - 868CB112CC3DC2F9ABBB8480, 5A56163B25252D8E74389F96, 836EAC1C5D126C6C8907E8C7, - 675627DA901E329524A4B7CD, - F06745DFADC49CA1C3D5C964, ); name = AU; sourceTree = ""; }; - F28D61A1E7F58403483E15BA = {isa = PBXGroup; children = ( + 675627DA901E329524A4B7CD, ); name = AU; sourceTree = ""; }; + B034C01D71A8349088379345 = {isa = PBXGroup; children = ( 1DDD52E2562F45C7BF44E3BA, 86FD2BEB554C25724A2AF813, E8F14A4246A337084B54E9C1, @@ -1737,10 +1737,10 @@ 6E9CF164968692ECBF14BFA4, A99BE51ABD7D9EC4B325A59C, 3DC291F8A448B57C4E7B85C9, ); name = RTAS; sourceTree = ""; }; - 5BFF3A02016001970CDD81AC = {isa = PBXGroup; children = ( + F4395C66021B50FE5AAB303C = {isa = PBXGroup; children = ( CE7AB9CEBC2AD27B236A69F8, 8379A87D62F44DFFC9366AD6, ); name = Standalone; sourceTree = ""; }; - 506B96F755E66EF451C5D0F0 = {isa = PBXGroup; children = ( + B973D84EF8EAD532ECB42F83 = {isa = PBXGroup; children = ( 9407A9BBA5CC55FAB981363F, 1B468DBA17F78A4C46EFDB34, 8BC913A5669953BFE5A456F6, @@ -1750,22 +1750,23 @@ CC1F87E59205712A0B2B08D5, EE10601535426EBE973755EE, 45A7DB93A834F903CFB76794, ); name = utility; sourceTree = ""; }; - 038E461CCD00BE2C0FFB4060 = {isa = PBXGroup; children = ( + 794BD365073742451788E5DF = {isa = PBXGroup; children = ( 21F7313455725884DEC213E7, F7D1FD08E57CD55F824DB44D, ); name = VST; sourceTree = ""; }; - CC2DA37A9DF73AE3068DDFB6 = {isa = PBXGroup; children = ( + 27252EE648860860662C12D6 = {isa = PBXGroup; children = ( A9BFA5468698DC8F32062A9B, ); name = VST3; sourceTree = ""; }; B7199B2DD8BEEA7DBC08C672 = {isa = PBXGroup; children = ( EC8818482FE69DEA2472407C, 7B934098FF9E066D257F3FC8, - F28D61A1E7F58403483E15BA, - 5BFF3A02016001970CDD81AC, - 506B96F755E66EF451C5D0F0, - 038E461CCD00BE2C0FFB4060, - CC2DA37A9DF73AE3068DDFB6, + B034C01D71A8349088379345, + F4395C66021B50FE5AAB303C, + B973D84EF8EAD532ECB42F83, + 794BD365073742451788E5DF, + 27252EE648860860662C12D6, 04DAC3B6E82E983D25C6700E, C6765BF98421489E663C9713, AC1D5EC23242A02FFBB90928, + 662205D63DB6B428A86C4E88, D1D5978F5EE20BB506361B3A, 1CEDDCD15AC89113C91DB85D, 63219087202573D0D10EF3DE, @@ -2853,8 +2854,7 @@ 641C08407D49F28BD9FDB843, 3B0847349353DE99EB99252B, E9105E2E5E237EC32F79DFDF, - 8F6829961A0F50B8265BD9CB, - 47C8050DE3ABBEC6BEC74B2F, ); name = Resources; sourceTree = ""; }; + 8F6829961A0F50B8265BD9CB, ); name = Resources; sourceTree = ""; }; 649BBC267932DD53D319C8C1 = {isa = PBXGroup; children = ( 918ECC9726F9792AEA2BF389, 759F7DE2DC579FE827D3048E, @@ -3276,7 +3276,7 @@ F00437060A1034E54BE737BF = {isa = XCConfigurationList; buildConfigurations = ( 326E2BA4D324D09F4A7F0A63, B4227B6386A801962DC6DE9F, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - F142F5144E24B9733BC560AA = {isa = PBXAggregateTarget; buildConfigurationList = F00437060A1034E54BE737BF; dependencies = ( + F142F5144E24B9733BC560AA = {isa = PBXAggregateTarget; buildConfigurationList = F00437060A1034E54BE737BF; buildPhases = ( ); buildRules = ( ); dependencies = ( 75C3E9C0CE34EEE2F5A36000, 4B92B77B69B5E3247011B212, D2DBB1440B1CF214018AA738, @@ -3286,8 +3286,7 @@ 5F2A5A5FDFB771E794E04854, A57CA38D505E2243A3395BA7, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 04536241DA00BCF3D76062A5 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7293C6A173EDB952C43C4E1E, - 0D85DE716EC383C1E7CA404B, ); runOnlyForDeploymentPostprocessing = 0; }; + 7293C6A173EDB952C43C4E1E, ); runOnlyForDeploymentPostprocessing = 0; }; 8059231D72D6BF32B790D039 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E131F66DF397C2C865D2BDB9, ); runOnlyForDeploymentPostprocessing = 0; }; 33FB604DCAD6DD6453DD6488 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3312,8 +3311,7 @@ 242FD13403C5B6F386EFC545, 6908F21CF215042E9B0ABFFA, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 7088241D4191060ACF5CFCA9 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7293C6A173EDB952C43C4E1E, - 0D85DE716EC383C1E7CA404B, ); runOnlyForDeploymentPostprocessing = 0; }; + 7293C6A173EDB952C43C4E1E, ); runOnlyForDeploymentPostprocessing = 0; }; DD4F2A6BEA93776ADBB4E10B = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8C76E37FF5C940A385BEB140, ); runOnlyForDeploymentPostprocessing = 0; }; 4C772F7842B90802A57373D0 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3338,10 +3336,9 @@ FC26955F59CF4154DB451744, DF2B398AB709C3CAEAC8FE2E, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; BFA824A2C63456DA5C6422E9 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7293C6A173EDB952C43C4E1E, - 0D85DE716EC383C1E7CA404B, ); runOnlyForDeploymentPostprocessing = 0; }; + 7293C6A173EDB952C43C4E1E, ); runOnlyForDeploymentPostprocessing = 0; }; 266612BAF31747EB6270EF76 = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 28C99E7CD1CE273646B706BF, ); runOnlyForDeploymentPostprocessing = 0; }; + 7E2BF0D7672428735E4B25C6, ); runOnlyForDeploymentPostprocessing = 0; }; 1F0C1963E7BE22BFAB4A0ADB = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( A52519AD234D3F6BC18A647D, FB2400E593546DDBAA460738, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3370,8 +3367,7 @@ 43006A3E8ABF9104DF671B2D, C73CB90BA269F3D54B8DF37B, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 9D7CAC1B0EC21F17055AD199 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7293C6A173EDB952C43C4E1E, - 0D85DE716EC383C1E7CA404B, ); runOnlyForDeploymentPostprocessing = 0; }; + 7293C6A173EDB952C43C4E1E, ); runOnlyForDeploymentPostprocessing = 0; }; 42953782839B367DFDE6876C = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F85D68AA01C1180EE14E32B2, ); runOnlyForDeploymentPostprocessing = 0; }; 13698285AE0013DEB1144725 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj index ce7ac2d3..fbc1e080 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj +++ b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj @@ -1953,6 +1953,7 @@ + @@ -2452,7 +2453,8 @@ - + + diff --git a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters index 11973d06..71829f42 100644 --- a/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters +++ b/examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters @@ -2682,6 +2682,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4175,8 +4178,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h index f728486e..f66afbd7 100644 --- a/examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h @@ -110,6 +110,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -253,10 +260,10 @@ #define JucePlugin_ManufacturerEmail "info@juce.com" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'MoSy' + #define JucePlugin_PluginCode 0x4d6f5379 // 'MoSy' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 1 diff --git a/examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer b/examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer index 6c4bd90d..987b41fa 100644 --- a/examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer +++ b/examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer @@ -9,7 +9,7 @@ pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="MultiOutSynthAU" pluginRTASCategory="" aaxIdentifier="com.ROLI.MultiOutSynth" pluginAAXCategory="AAX_ePlugInCategory_SWGenerators" - jucerVersion="4.2.1" companyName="ROLI Ltd." companyWebsite="www.roli.com" + jucerVersion="4.2.3" companyName="ROLI Ltd." companyWebsite="www.roli.com" companyEmail="info@juce.com" pluginIsMidiEffectPlugin="0" buildAUv3="0"> diff --git a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj b/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj index ada4f342..66055274 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj @@ -26,9 +26,8 @@ 37650014CFB133BE49E618C7 = {isa = PBXBuildFile; fileRef = 5ACE35425F10E6FE0CD30B44; }; 15165888F33A50CEEAF270C7 = {isa = PBXBuildFile; fileRef = B6567C791BE962F993B78C02; }; 12C002E482A05AEA16654DF9 = {isa = PBXBuildFile; fileRef = 7A6A889A32581FBE73645356; }; - A6EFA2CFF4D8C125C8AAEFB6 = {isa = PBXBuildFile; fileRef = 12C24C2237E0F23FDCCCE953; }; 5AD5FE50F1508B1EC89C37AF = {isa = PBXBuildFile; fileRef = 45E82A90482A147FF8FA6507; }; - 0A67F5C2A80DEC5B7E1A75A2 = {isa = PBXBuildFile; fileRef = 78AF8E4090DF691FA058374D; }; + 5242C773D354EA0B2527D4B8 = {isa = PBXBuildFile; fileRef = F9AD652235B91EB0693AB186; }; ED749B2640D6B4FB7E32CC22 = {isa = PBXBuildFile; fileRef = 60ECEC321E2335CA55B41A55; }; F85FA72ECA3C1A04D624A4BD = {isa = PBXBuildFile; fileRef = 2DA5A7253793B9BFBB4E2A18; }; C452CBE4FAC93EDD00579A23 = {isa = PBXBuildFile; fileRef = 8E20AE27507F5C47985A6865; }; @@ -632,7 +631,6 @@ 783876754D144BA9D9D80508 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jidctflt.c"; sourceTree = "SOURCE_ROOT"; }; 789D3C1F5D021FF597F455E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_Network.cpp"; path = "../../../../../modules/juce_core/native/juce_linux_Network.cpp"; sourceTree = "SOURCE_ROOT"; }; 789EBDE5AA3DDBF44BCCE63F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Label.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_Label.cpp"; sourceTree = "SOURCE_ROOT"; }; - 78AF8E4090DF691FA058374D = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; 78F0E6FD7AF95F7440C0291C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUInputFormatConverter.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputFormatConverter.h"; sourceTree = "SOURCE_ROOT"; }; 79123AD075DF679CBD0CD0F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = md5.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/md5.c"; sourceTree = "SOURCE_ROOT"; }; 79A8D43470A0E32CB2CBED38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUBase.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.h"; sourceTree = "SOURCE_ROOT"; }; @@ -706,6 +704,7 @@ 854A261D384CB1F682305BE9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MultiTouchMapper.h"; path = "../../../../../modules/juce_gui_basics/native/juce_MultiTouchMapper.h"; sourceTree = "SOURCE_ROOT"; }; 85B9E97C3FC7D20270A420B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_XmlDocument.cpp"; path = "../../../../../modules/juce_core/xml/juce_XmlDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; 865AA1F62812A0984F048080 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "res_books_51.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/books/coupled/res_books_51.h"; sourceTree = "SOURCE_ROOT"; }; + 86691FA1B2CDD3570ABEA9C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 867F6834281C8B941D0BCE1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MemoryOutputStream.cpp"; path = "../../../../../modules/juce_core/streams/juce_MemoryOutputStream.cpp"; sourceTree = "SOURCE_ROOT"; }; 873AB549F9D4BB2CB942B021 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_GraphicsContext.h"; path = "../../../../../modules/juce_graphics/contexts/juce_GraphicsContext.h"; sourceTree = "SOURCE_ROOT"; }; 8751B08C7CCFAA3B9B070452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CameraDevice.h"; path = "../../../../../modules/juce_video/capture/juce_CameraDevice.h"; sourceTree = "SOURCE_ROOT"; }; @@ -812,15 +811,19 @@ 9CBD130337083207F2B56452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CharacterFunctions.cpp"; path = "../../../../../modules/juce_core/text/juce_CharacterFunctions.cpp"; sourceTree = "SOURCE_ROOT"; }; 9CC8CDF595616EEF33071A40 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ResizableEdgeComponent.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9CCA07FAE3B4A4D2257497BA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_FileOutputStream.h"; path = "../../../../../modules/juce_core/files/juce_FileOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9CDA4A2E17BF5DB191F883D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D14B147B6A2CA89387ADD72 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_Files.mm"; path = "../../../../../modules/juce_core/native/juce_mac_Files.mm"; sourceTree = "SOURCE_ROOT"; }; 9D67E9F6247EDE2E207EFE8C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CameraDevice.cpp"; path = "../../../../../modules/juce_video/capture/juce_CameraDevice.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D91048D35939171C41AFA99 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_WebBrowserComponent.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_linux_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9DAB02E651736622947A4879 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_OwnedArray.h"; path = "../../../../../modules/juce_core/containers/juce_OwnedArray.h"; sourceTree = "SOURCE_ROOT"; }; + 9DEA01475DB585366B99507A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; + 9DF06DEA20D7CC5B7784ABB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; }; 9E0C3CD23088388B14CFE298 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TabbedComponent.cpp"; path = "../../../../../modules/juce_gui_basics/layout/juce_TabbedComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E1B841AC727490DBAD510C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngwio.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngwio.c"; sourceTree = "SOURCE_ROOT"; }; - 9EA4A85998E5730634754DA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; 9EB05C378008BD43BC552E33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_NamedValueSet.h"; path = "../../../../../modules/juce_core/containers/juce_NamedValueSet.h"; sourceTree = "SOURCE_ROOT"; }; + 9EB8F8C25EC50AA2C1289551 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; 9F0F2E14CFA9F3D6A25E2B38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MemoryOutputStream.h"; path = "../../../../../modules/juce_core/streams/juce_MemoryOutputStream.h"; sourceTree = "SOURCE_ROOT"; }; + 9F5C521FCFAB9BD273073B55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; 9FC8B1D81C0535EC5B6D0C75 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_basics.cpp"; path = "../../../../../modules/juce_audio_basics/juce_audio_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; AFB3197B2BE07ED91A0C5FEA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CatmullRomInterpolator.cpp"; path = "../../../../../modules/juce_audio_basics/effects/juce_CatmullRomInterpolator.cpp"; sourceTree = "SOURCE_ROOT"; }; B135B7ABB572DE03324CFD7A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = memory.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/memory.h"; sourceTree = "SOURCE_ROOT"; }; @@ -832,27 +835,24 @@ 970832BB3D7B3F1D404D36CE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_X.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_X.h"; sourceTree = "SOURCE_ROOT"; }; 9998DD31ABBEB8513422A48B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = fixed.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/fixed.c"; sourceTree = "SOURCE_ROOT"; }; 9C62742BCA5D3C9524DE3029 = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NoiseGate.aaxplugin; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 9CDA4A2E17BF5DB191F883D9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_SVGParser.cpp"; path = "../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D0EADD58202012822195D8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_audio_plugin_client_VST2.cpp"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp"; sourceTree = "SOURCE_ROOT"; }; 9D366DD91CD44CED6934A26A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = bitreader.c; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/bitreader.c"; sourceTree = "SOURCE_ROOT"; }; 9D67999CB8A7EA49B548EF9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = mdct.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/mdct.h"; sourceTree = "SOURCE_ROOT"; }; - 9DEA01475DB585366B99507A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Thread.h"; path = "../../../../../modules/juce_core/threads/juce_Thread.h"; sourceTree = "SOURCE_ROOT"; }; - 9DF06DEA20D7CC5B7784ABB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = zlib.h; path = "../../../../../modules/juce_core/zip/zlib/zlib.h"; sourceTree = "SOURCE_ROOT"; }; 9E2841D274BDF096C1567AA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AAX.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm"; sourceTree = "SOURCE_ROOT"; }; 9E3C9508D07D11C753F6F4EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BlowFish.h"; path = "../../../../../modules/juce_cryptography/encryption/juce_BlowFish.h"; sourceTree = "SOURCE_ROOT"; }; 9E65E218A429E2B64829B4E0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TooltipWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_TooltipWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; 9E685F6C42796C5B486A08BF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AUPlugInDispatch.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUPlugInDispatch.h"; sourceTree = "SOURCE_ROOT"; }; - 9EB8F8C25EC50AA2C1289551 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableRectangle.h"; path = "../../../../../modules/juce_gui_basics/drawables/juce_DrawableRectangle.h"; sourceTree = "SOURCE_ROOT"; }; + 9EA4A85998E5730634754DA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeTokeniser.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h"; sourceTree = "SOURCE_ROOT"; }; 9F385C17D1F088F19F3A12F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MidiOutput.cpp"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp"; sourceTree = "SOURCE_ROOT"; }; 9F39266110C56F8A0C97FA65 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = jversion.h; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jversion.h"; sourceTree = "SOURCE_ROOT"; }; 9F53388B3A4667994AD93E8D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitwriter.h; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitwriter.h"; sourceTree = "SOURCE_ROOT"; }; - 9F5C521FCFAB9BD273073B55 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_InputSource.h"; path = "../../../../../modules/juce_core/streams/juce_InputSource.h"; sourceTree = "SOURCE_ROOT"; }; 9F5E1264C9AC4AA54E0AB158 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiInput.h"; path = "../../../../../modules/juce_audio_devices/midi_io/juce_MidiInput.h"; sourceTree = "SOURCE_ROOT"; }; 9F9D896F664C8CA286C041FD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_Viewport.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_Viewport.h"; sourceTree = "SOURCE_ROOT"; }; 9FB3DAAD402A11A090B0521C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IncludeSystemHeaders.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h"; sourceTree = "SOURCE_ROOT"; }; 9FD8096E8A6E070EB0D3E6F2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_ActiveXComponent.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; A0189ED3EEAACC00AD4649EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = codebook.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/codebook.h"; sourceTree = "SOURCE_ROOT"; }; A067B55828A6944BF5F96152 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ChoicePropertyComponent.cpp"; path = "../../../../../modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + A06D19395CD8A48E64CE9E16 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; A092D24F3C62D06CF5928A64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = scales.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/scales.h"; sourceTree = "SOURCE_ROOT"; }; A0B50A729CB25919EE133A4D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioSourcePlayer.cpp"; path = "../../../../../modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp"; sourceTree = "SOURCE_ROOT"; }; A0CB59F4AD5D67685CD8673D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_SystemStats.cpp"; path = "../../../../../modules/juce_core/native/juce_android_SystemStats.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1297,6 +1297,7 @@ F977E6E34D35E0FC5235BA25 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_TooltipClient.h"; path = "../../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"; sourceTree = "SOURCE_ROOT"; }; F983B97EB7A763CA91C2B615 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = AUInputElement.cpp; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUInputElement.cpp"; sourceTree = "SOURCE_ROOT"; }; F99AADA9ED5F73C39AE618ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = os.h; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/os.h"; sourceTree = "SOURCE_ROOT"; }; + F9AD652235B91EB0693AB186 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; F9AEBC8B0F4EAE709D0D5E80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_BubbleMessageComponent.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h"; sourceTree = "SOURCE_ROOT"; }; FA2B3781996DC52D0CFE3BA6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DynamicLibrary.h"; path = "../../../../../modules/juce_core/threads/juce_DynamicLibrary.h"; sourceTree = "SOURCE_ROOT"; }; FA5C3295E813D0648A2E7543 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = adler32.c; path = "../../../../../modules/juce_core/zip/zlib/adler32.c"; sourceTree = "SOURCE_ROOT"; }; @@ -1657,6 +1658,7 @@ 5BB1BBCB34B72DCE9B16B695, 259860F50BF88025C9451A37, ); name = "juce_audio_formats"; sourceTree = ""; }; C87C608E9A5C5E6E7E794076 = {isa = PBXGroup; children = ( + 86691FA1B2CDD3570ABEA9C7, 218937DFF1E643C7E9392D3D, ); name = AAX; sourceTree = ""; }; 0F13F4CD7D902B9D2DA69DC9 = {isa = PBXGroup; children = ( E9A6A98219D0E4514484593D, @@ -1717,12 +1719,10 @@ F899FD17F2789DA5C2BC257A, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 3D494EE356FF362ACDC1098E = {isa = PBXGroup; children = ( 0F13F4CD7D902B9D2DA69DC9, - 69D40DB250FC6775EDBCCC5B, 3105E167622313C70055B903, CB425D61E072DED92F6CAC85, - C6C096547CAD0C12FA4746CF, - 78AF8E4090DF691FA058374D, ); name = AU; sourceTree = ""; }; - 7188C9AEA767393C223A5803 = {isa = PBXGroup; children = ( + C6C096547CAD0C12FA4746CF, ); name = AU; sourceTree = ""; }; + 5A8AB44A44CEA32DC33D5765 = {isa = PBXGroup; children = ( F4E8427587734D0D2B94F4D8, E09DC8AF27C6E40AB436E821, 6033F6DD0B905B8819C115E2, @@ -1730,10 +1730,10 @@ F8AB7D10F5C9ABF34829AE8F, F785317A2BB8414F5D8E2813, D0A3F2265D323BB3F90F3DD5, ); name = RTAS; sourceTree = ""; }; - C681F67747E80C4D05C41413 = {isa = PBXGroup; children = ( + A0C36FF148057D22D568BE59 = {isa = PBXGroup; children = ( F4D616BD3FAFE9587EC29FC6, 5202ABFCC92AA0AFBC9400BE, ); name = Standalone; sourceTree = ""; }; - 5800B1C18680BF3EA8806892 = {isa = PBXGroup; children = ( + 3AE05782CAEEEB1F04B31F1A = {isa = PBXGroup; children = ( 210E0DDAE66818EF2B278274, 94F3D0138EBB7EB31E15940C, F4C02954B36F8FCE5D4E647C, @@ -1743,22 +1743,23 @@ A29D254460762F8F6990D54C, B9A21AE64CC4B86FC1F67061, F35CA755BCEF635E1D3A905C, ); name = utility; sourceTree = ""; }; - 4083DD4A6818D524406ECDF6 = {isa = PBXGroup; children = ( + CBE8572BAED059334FB2FDF2 = {isa = PBXGroup; children = ( 906428E1A9963444AF1B0D60, 69A29D8420DB0B53507E223D, ); name = VST; sourceTree = ""; }; - 430F3673E2829D691E5A9ECF = {isa = PBXGroup; children = ( + 2CFD285766D4639C6B7C7457 = {isa = PBXGroup; children = ( CDE1B83C996A1861A93C93A7, ); name = VST3; sourceTree = ""; }; 3935AB4CC6A0A44A4A93B7E8 = {isa = PBXGroup; children = ( C87C608E9A5C5E6E7E794076, 3D494EE356FF362ACDC1098E, - 7188C9AEA767393C223A5803, - C681F67747E80C4D05C41413, - 5800B1C18680BF3EA8806892, - 4083DD4A6818D524406ECDF6, - 430F3673E2829D691E5A9ECF, + 5A8AB44A44CEA32DC33D5765, + A0C36FF148057D22D568BE59, + 3AE05782CAEEEB1F04B31F1A, + CBE8572BAED059334FB2FDF2, + 2CFD285766D4639C6B7C7457, 163F8CC7509513B483860103, AF02EDDBD4B4B8081DC18DA4, 9E2841D274BDF096C1567AA0, + F9AD652235B91EB0693AB186, 68810A5E034BC83F99EFE3B9, B7CEA623FCCB463BF8058A7F, 9771DD4915BE1789A7993E69, @@ -2844,8 +2845,7 @@ BCC02F39B2F24479D8F6DB50, D30F58A3C82A7C61E6768EBE, 44AA2CDFC06F2E27F3BD6313, - 7A6A889A32581FBE73645356, - 12C24C2237E0F23FDCCCE953, ); name = Resources; sourceTree = ""; }; + 7A6A889A32581FBE73645356, ); name = Resources; sourceTree = ""; }; 2D45B9382F864E0FC39A7D86 = {isa = PBXGroup; children = ( EE004DC5369648F9F4F967B5, 943B88ECAC8C127556319A56, @@ -3277,7 +3277,7 @@ 4B6CE3423D63B067B4CCB9CA = {isa = XCConfigurationList; buildConfigurations = ( D43C967D02EDDCC29FB7059C, EEA93C1E6EEC110939D1685F, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - BE96E7C5FAB338297CC69BA9 = {isa = PBXAggregateTarget; buildConfigurationList = 4B6CE3423D63B067B4CCB9CA; dependencies = ( + BE96E7C5FAB338297CC69BA9 = {isa = PBXAggregateTarget; buildConfigurationList = 4B6CE3423D63B067B4CCB9CA; buildPhases = ( ); buildRules = ( ); dependencies = ( 211DD9687930134AF6E64FF0, 6FE20A9165A15D7BE98F2B99, 0D517069DB7201D47B168BEE, @@ -3287,8 +3287,7 @@ BA984224A933EC837F514164, AC5F1E6328DC16FF2891CB62, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 216E0D6AC94324AA60E8341F = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 12C002E482A05AEA16654DF9, - A6EFA2CFF4D8C125C8AAEFB6, ); runOnlyForDeploymentPostprocessing = 0; }; + 12C002E482A05AEA16654DF9, ); runOnlyForDeploymentPostprocessing = 0; }; EEE027F86C42C2897FFAFAB4 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 0D1C8A857D386C6BC5C99FA3, ); runOnlyForDeploymentPostprocessing = 0; }; 88ED31A2FC837CDDC443C602 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3313,8 +3312,7 @@ 23F878D56387ED4B67B9E2DF, 32B1624E3B1B34C461D60562, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 47F5AD1898E28C0A6D16C018 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 12C002E482A05AEA16654DF9, - A6EFA2CFF4D8C125C8AAEFB6, ); runOnlyForDeploymentPostprocessing = 0; }; + 12C002E482A05AEA16654DF9, ); runOnlyForDeploymentPostprocessing = 0; }; FE7603D4FD2A5265B17C5CDB = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 6D0FB6DF3B238687E64CA059, ); runOnlyForDeploymentPostprocessing = 0; }; E3794423504E5A68368E60FB = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3339,10 +3337,9 @@ 4130388B36B3B506391E717A, B3B550855CF90C491B1B3921, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 2547749F251ADA67558CFBC5 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 12C002E482A05AEA16654DF9, - A6EFA2CFF4D8C125C8AAEFB6, ); runOnlyForDeploymentPostprocessing = 0; }; + 12C002E482A05AEA16654DF9, ); runOnlyForDeploymentPostprocessing = 0; }; F38684DBAA310B29B5B2598B = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 0A67F5C2A80DEC5B7E1A75A2, ); runOnlyForDeploymentPostprocessing = 0; }; + 5242C773D354EA0B2527D4B8, ); runOnlyForDeploymentPostprocessing = 0; }; 2B362E865E39D8FBBEF5836E = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 65D4B3952523E1D9729D5696, 297C90DB48F08189C5E161F6, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3371,8 +3368,7 @@ 6597D0E1B573ECB84853415C, BCA3F1D08B6DEDD8120DDF25, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 547175C3907E0E0E4318B03E = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 12C002E482A05AEA16654DF9, - A6EFA2CFF4D8C125C8AAEFB6, ); runOnlyForDeploymentPostprocessing = 0; }; + 12C002E482A05AEA16654DF9, ); runOnlyForDeploymentPostprocessing = 0; }; 60B6674FAE4C8F988F0F1086 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( FCE06A0BAC628295014D8729, ); runOnlyForDeploymentPostprocessing = 0; }; A47A37CF689DBA8E163F1A4D = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj index c2fc73b3..2205dff4 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj +++ b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj @@ -1952,6 +1952,7 @@ + @@ -2449,7 +2450,8 @@ - + + diff --git a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters index 02a65ab3..8621d761 100644 --- a/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters +++ b/examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters @@ -2676,6 +2676,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4163,8 +4166,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h index 943d98ee..4cefb869 100644 --- a/examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h @@ -110,6 +110,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -253,10 +260,10 @@ #define JucePlugin_ManufacturerEmail "" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'Nois' + #define JucePlugin_PluginCode 0x4e6f6973 // 'Nois' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 0 diff --git a/examples/PlugInSamples/NoiseGate/NoiseGate.jucer b/examples/PlugInSamples/NoiseGate/NoiseGate.jucer index 08623640..ef3653ce 100644 --- a/examples/PlugInSamples/NoiseGate/NoiseGate.jucer +++ b/examples/PlugInSamples/NoiseGate/NoiseGate.jucer @@ -8,7 +8,7 @@ pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0" pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="NoiseGateAU" pluginRTASCategory="" aaxIdentifier="com.roli.NoiseGate" - pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1" + pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3" pluginIsMidiEffectPlugin="0" buildAUv3="0"> diff --git a/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile b/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile index 8575d2a0..f3d05d2d 100644 --- a/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile +++ b/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj b/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj index 49193e43..3a84dead 100644 --- a/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj +++ b/examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj @@ -26,9 +26,8 @@ 1730BAC6358B020E5359B15D = {isa = PBXBuildFile; fileRef = 130A1E6607521A6C51E7E702; }; FDCC043886C609481941F040 = {isa = PBXBuildFile; fileRef = 407B6CB925E1B5FAA7E3914E; }; 2191E7D09CE99E98C2CCCF54 = {isa = PBXBuildFile; fileRef = 7B09ECEA92A79A22173B9A1A; }; - 841F2C2B98BCB5059C093CCA = {isa = PBXBuildFile; fileRef = A0BFEED17AF0E43A7401189C; }; 84756A2E1F219D073187D649 = {isa = PBXBuildFile; fileRef = 4F1AF1D850DBBFB581EAE294; }; - A36135867496E3E1F6C08770 = {isa = PBXBuildFile; fileRef = 0ED2BEA90D9AB8F53ABAC23F; }; + B68A16DE8AEEE404657DB343 = {isa = PBXBuildFile; fileRef = 02FB9A6955DBBBEAC8BB16D8; }; C45C4C878E526E955DB4BE2C = {isa = PBXBuildFile; fileRef = CC3734C049214EF91327C2B6; }; BC0836F398C7EA8BED36B53B = {isa = PBXBuildFile; fileRef = 9B38FFE6C8577E7F22DFEF2F; }; 8FF45061553548B84D31A121 = {isa = PBXBuildFile; fileRef = 689794DAC80724A7C23A1759; }; @@ -67,6 +66,7 @@ 02011069400D49AE29D3A8AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_audio_plugin_client_AU_1.mm"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm"; sourceTree = "SOURCE_ROOT"; }; 024CB198D719E920742AAF38 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LookAndFeel_V1.h"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h"; sourceTree = "SOURCE_ROOT"; }; 02CE6BB6202647637FF78A6C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LAMEEncoderAudioFormat.h"; path = "../../../../../modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h"; sourceTree = "SOURCE_ROOT"; }; + 02FB9A6955DBBBEAC8BB16D8 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 0362C38B47B2235F4443A98D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = zutil.c; path = "../../../../../modules/juce_core/zip/zlib/zutil.c"; sourceTree = "SOURCE_ROOT"; }; 036F63DADE847F2C8CF7E777 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_SpinLock.h"; path = "../../../../../modules/juce_core/threads/juce_SpinLock.h"; sourceTree = "SOURCE_ROOT"; }; 03E9D79DB85F5A7AB13B3890 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CodeDocument.h"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeDocument.h"; sourceTree = "SOURCE_ROOT"; }; @@ -133,7 +133,6 @@ 0EC44B4F782B363577DC6BB1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileChooser.cpp"; path = "../../../../../modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp"; sourceTree = "SOURCE_ROOT"; }; 0EC5AD5447DD911B8294F413 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedValueSetter.h"; path = "../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h"; sourceTree = "SOURCE_ROOT"; }; 0ECBC001B10ABD4E646F2141 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_FileInputSource.cpp"; path = "../../../../../modules/juce_core/streams/juce_FileInputSource.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0ED2BEA90D9AB8F53ABAC23F = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; 1000AB9EC17650FB0092DCD8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_RTAS_DigiCode3.cpp"; path = "../../../../../modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp"; sourceTree = "SOURCE_ROOT"; }; 10307599177903E1B8824E06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ArrayAllocationBase.h"; path = "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h"; sourceTree = "SOURCE_ROOT"; }; 103B4CFDB78F4A23AB769052 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_WebBrowserComponent.cpp"; path = "../../../../../modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -702,6 +701,7 @@ 831D6FCD81612A1649B0CF08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ValueTree.h"; path = "../../../../../modules/juce_data_structures/values/juce_ValueTree.h"; sourceTree = "SOURCE_ROOT"; }; 832774543B7277913460C41E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAAutoDisposer.h; path = "../../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAAutoDisposer.h"; sourceTree = "SOURCE_ROOT"; }; 83E2EFC9133757FD09C67ABE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_StretchableLayoutManager.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h"; sourceTree = "SOURCE_ROOT"; }; + 84361AF1AD46751899D33C5D = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; 854BE217C612C256BED72308 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_HighResolutionTimer.cpp"; path = "../../../../../modules/juce_core/threads/juce_HighResolutionTimer.cpp"; sourceTree = "SOURCE_ROOT"; }; 857D93C46EF5F30B686666FF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jctrans.c; path = "../../../../../modules/juce_graphics/image_formats/jpglib/jctrans.c"; sourceTree = "SOURCE_ROOT"; }; 863578C8C35502444456B6EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_LookAndFeel_V3.cpp"; path = "../../../../../modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -725,11 +725,12 @@ 8A604B4BD445F2F0F2ED6C96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ColourSelector.cpp"; path = "../../../../../modules/juce_gui_extra/misc/juce_ColourSelector.cpp"; sourceTree = "SOURCE_ROOT"; }; 8AB1217C7D9CEC5CA4CE87B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AnimatedPositionBehaviours.h"; path = "../../../../../modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h"; sourceTree = "SOURCE_ROOT"; }; 8B2B33EB8FE2027523BD9ADD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_KeyMappingEditorComponent.h"; path = "../../../../../modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8B61BBC7490B7EB09164C24E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3Headers.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VST3Headers.h"; sourceTree = "SOURCE_ROOT"; }; + 8D2F64C046BBAAA084369818 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D3B6133B6EFF1551DA6A0B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "residue_8.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/residue_8.h"; sourceTree = "SOURCE_ROOT"; }; 8DC3D1402CD78E1E728A885C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_VST_Wrapper.cpp"; path = "../../../../../modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp"; sourceTree = "SOURCE_ROOT"; }; 8E11074D4A9A023AE33D2777 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CheckSettingMacros.h"; path = "../../../../../modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h"; sourceTree = "SOURCE_ROOT"; }; 8E5677A16F98C56CAA7F2842 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_16.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_16.h"; sourceTree = "SOURCE_ROOT"; }; + 8EE2300EB5893E6FE4447464 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; 90593FC8C1E0DF38F5C4E13C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "setup_32.h"; path = "../../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/setup_32.h"; sourceTree = "SOURCE_ROOT"; }; 91B36A38A2515EACFDB74FF2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "stream_encoder.h"; path = "../../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/protected/stream_encoder.h"; sourceTree = "SOURCE_ROOT"; }; 91DC52EFEE54AA6A25F414F6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IIRFilter.h"; path = "../../../../../modules/juce_audio_basics/effects/juce_IIRFilter.h"; sourceTree = "SOURCE_ROOT"; }; @@ -751,10 +752,10 @@ 89BE99C79A12FAA559AB0958 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioCDReader.cpp"; path = "../../../../../modules/juce_audio_devices/audio_cd/juce_AudioCDReader.cpp"; sourceTree = "SOURCE_ROOT"; }; 8A0648AE319C0CEA55D7AD88 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; 8ACBFC171B28F02B7C79EC9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ImageComponent.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ImageComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; + 8B61BBC7490B7EB09164C24E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_VST3Headers.h"; path = "../../../../../modules/juce_audio_processors/format_types/juce_VST3Headers.h"; sourceTree = "SOURCE_ROOT"; }; 8B8C8E45262B02EE3013C440 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_CodeEditorComponent.cpp"; path = "../../../../../modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; 8C3432BC2BDC534720A9DBB9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = pngrutil.c; path = "../../../../../modules/juce_graphics/image_formats/pnglib/pngrutil.c"; sourceTree = "SOURCE_ROOT"; }; 8D136314D0A9E7C7A20F5252 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = infback.c; path = "../../../../../modules/juce_core/zip/zlib/infback.c"; sourceTree = "SOURCE_ROOT"; }; - 8D2F64C046BBAAA084369818 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_ProgressBar.cpp"; path = "../../../../../modules/juce_gui_basics/widgets/juce_ProgressBar.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D7431A21F329A0623106F9F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_StandaloneFilterApp.cpp"; path = "../../../../../modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp"; sourceTree = "SOURCE_ROOT"; }; 8D8276FB197AE7CF5FBB3AB0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_TopLevelWindow.cpp"; path = "../../../../../modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; 8DCC53AC83A1540BF58AF95D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_ScopedPointer.h"; path = "../../../../../modules/juce_core/memory/juce_ScopedPointer.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1659,6 +1660,7 @@ 35B628AB8DFBC44E9BBF1EF9, 907ECB8961B34F538328C66D, ); name = "juce_audio_formats"; sourceTree = ""; }; B03491D4B8689C8544B25B87 = {isa = PBXGroup; children = ( + 8EE2300EB5893E6FE4447464, 4B133B1F9874EBA8953DCDF9, ); name = AAX; sourceTree = ""; }; DA59CA30765E869649A5C076 = {isa = PBXGroup; children = ( 458D73FCC89935898F0D2C23, @@ -1719,12 +1721,10 @@ 9497F6127D98FC93F698D42F, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; 682B81CC505D8F57DEA7E0AC = {isa = PBXGroup; children = ( DA59CA30765E869649A5C076, - A120FD8A1529CD1910D93F52, E8154A3245B28F12461708E8, 7BD189FD9F797A43D5818C6A, - 3A925CFFB7F60920C14EC144, - 0ED2BEA90D9AB8F53ABAC23F, ); name = AU; sourceTree = ""; }; - F780A21E1C3DA3D40B592D7A = {isa = PBXGroup; children = ( + 3A925CFFB7F60920C14EC144, ); name = AU; sourceTree = ""; }; + E314FF34EAECD51445016614 = {isa = PBXGroup; children = ( 5583A45CA7C609741BB8B9EF, 55DFDE807E321ABD1E879E41, AB04D06155A5E52B0658F3D6, @@ -1732,10 +1732,10 @@ 7D2CA0CEB4019C90AE75474C, C52ED1AAE029660B7F7E195A, 283ADB95E9375730B1389880, ); name = RTAS; sourceTree = ""; }; - D67F6C60D18A07F957783FCA = {isa = PBXGroup; children = ( + 18C29C50CF51AC97F9938ADF = {isa = PBXGroup; children = ( 8D7431A21F329A0623106F9F, F468166F5B1642808084C964, ); name = Standalone; sourceTree = ""; }; - FAD31EA8ACFB57F726B6B00A = {isa = PBXGroup; children = ( + 0B1A4F8E5F393124D0B107B5 = {isa = PBXGroup; children = ( EDF3BB834AA5EA021B07F5FA, 8E11074D4A9A023AE33D2777, 377EE4F29DE0ECCB0B0F8EBD, @@ -1745,22 +1745,23 @@ ADCF8757250D34CD709BF18E, F6AE18B04CC3D2BB90189253, D7D538F79741F629EC0B174F, ); name = utility; sourceTree = ""; }; - CFB2A255E91D41F8C12E5150 = {isa = PBXGroup; children = ( + 2B8EF8A8BCA0AB75EDE7FB7A = {isa = PBXGroup; children = ( 8DC3D1402CD78E1E728A885C, 897466367AE90A6757BD78AA, ); name = VST; sourceTree = ""; }; - B71E23C0ADB4B7F7D300A2B9 = {isa = PBXGroup; children = ( + 6BA032A25FA6EF715361DBA9 = {isa = PBXGroup; children = ( C97229429AD64768E560F4AD, ); name = VST3; sourceTree = ""; }; 3C13BDA7064F6A67ED81C57C = {isa = PBXGroup; children = ( B03491D4B8689C8544B25B87, 682B81CC505D8F57DEA7E0AC, - F780A21E1C3DA3D40B592D7A, - D67F6C60D18A07F957783FCA, - FAD31EA8ACFB57F726B6B00A, - CFB2A255E91D41F8C12E5150, - B71E23C0ADB4B7F7D300A2B9, + E314FF34EAECD51445016614, + 18C29C50CF51AC97F9938ADF, + 0B1A4F8E5F393124D0B107B5, + 2B8EF8A8BCA0AB75EDE7FB7A, + 6BA032A25FA6EF715361DBA9, 764CC7C9098B8A13EE1E2BDD, 5E4DECB460D73AB4F75A0807, 98DEEE52698DC2DD0C22A537, + 02FB9A6955DBBBEAC8BB16D8, 02011069400D49AE29D3A8AA, C5AC6B7D92F08E36C6CC81D0, DC26D1CA02600B967A955667, @@ -2846,8 +2847,7 @@ 3E67AEA9A0FD3291E8C1B486, F02875DC328E400B3141069D, 19E1189C678E9189ECD11DEF, - 7B09ECEA92A79A22173B9A1A, - A0BFEED17AF0E43A7401189C, ); name = Resources; sourceTree = ""; }; + 7B09ECEA92A79A22173B9A1A, ); name = Resources; sourceTree = ""; }; 18B9690A5C364D20F5C100E3 = {isa = PBXGroup; children = ( 52EEFA8ED8C29967F5A9E1EE, D8FC94038AF7B050BBADC027, @@ -3279,7 +3279,7 @@ EED368527EBF92E628608D8B = {isa = XCConfigurationList; buildConfigurations = ( C73902ED4D2E8620A64FB955, 10FD9778667189623A2CDD86, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 662E24C61A67634787C1DDDA = {isa = PBXAggregateTarget; buildConfigurationList = EED368527EBF92E628608D8B; dependencies = ( + 662E24C61A67634787C1DDDA = {isa = PBXAggregateTarget; buildConfigurationList = EED368527EBF92E628608D8B; buildPhases = ( ); buildRules = ( ); dependencies = ( 5FC77F15FFD6E6F3449B16D6, 32FFC55D51387C8C331E25B9, 53E1E3FE56FEC27499FA8243, @@ -3289,8 +3289,7 @@ EB917BF8D9134F341F138D54, 4C0FBAEF448A6C797FB6DD45, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; C6635CD032CBB46EE84BE2BD = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2191E7D09CE99E98C2CCCF54, - 841F2C2B98BCB5059C093CCA, ); runOnlyForDeploymentPostprocessing = 0; }; + 2191E7D09CE99E98C2CCCF54, ); runOnlyForDeploymentPostprocessing = 0; }; 7DBFF07EA24A761249FDB194 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( E03A96B10126A69293C044FD, ); runOnlyForDeploymentPostprocessing = 0; }; 2E087F2A8528F2C788D09A5E = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3315,8 +3314,7 @@ 61074CD12CE591486A05A574, 7FCB6817E56D52F78EC1AE71, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 82A795FF64B3DC1673E6DFFD = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2191E7D09CE99E98C2CCCF54, - 841F2C2B98BCB5059C093CCA, ); runOnlyForDeploymentPostprocessing = 0; }; + 2191E7D09CE99E98C2CCCF54, ); runOnlyForDeploymentPostprocessing = 0; }; C40118D5AA68EA22C25990A9 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( CEBB3C6F336A43045FFF411D, ); runOnlyForDeploymentPostprocessing = 0; }; 38083A2E2A2930885CC53FC0 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3341,10 +3339,9 @@ E32045A65CECB559C0FB4C68, 1D54A1AEFE13AA013860EF06, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 6A3AF05F6EAA6537996C2F42 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2191E7D09CE99E98C2CCCF54, - 841F2C2B98BCB5059C093CCA, ); runOnlyForDeploymentPostprocessing = 0; }; + 2191E7D09CE99E98C2CCCF54, ); runOnlyForDeploymentPostprocessing = 0; }; EE0E282E33E11BDEEC93785F = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - A36135867496E3E1F6C08770, ); runOnlyForDeploymentPostprocessing = 0; }; + B68A16DE8AEEE404657DB343, ); runOnlyForDeploymentPostprocessing = 0; }; 6AF7D8B2A0C3D350ECF9E451 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 64624CD6DC9AD04D81B9E401, 057B3431395E851B7328AE02, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3373,8 +3370,7 @@ 6097E35463A00493A0E17C6D, B376411945AB7D80ECC98A26, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 5276FC9AAD3BF2140C19513D = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2191E7D09CE99E98C2CCCF54, - 841F2C2B98BCB5059C093CCA, ); runOnlyForDeploymentPostprocessing = 0; }; + 2191E7D09CE99E98C2CCCF54, ); runOnlyForDeploymentPostprocessing = 0; }; 9CA62E78DD58EF6DCD1F513E = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( F07C6D3843A293AF087DC6AA, ); runOnlyForDeploymentPostprocessing = 0; }; E0725217929C36E3C067C5DB = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( diff --git a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj index 3e3be5ef..c143d079 100644 --- a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj +++ b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj @@ -1952,6 +1952,7 @@ + @@ -2449,7 +2450,8 @@ - + + diff --git a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters index 40680975..d05b2cec 100644 --- a/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters +++ b/examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters @@ -2679,6 +2679,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4166,8 +4169,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h b/examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h index 4638b179..ebad7119 100644 --- a/examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h +++ b/examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h @@ -110,6 +110,13 @@ //#define JUCE_USE_WINDOWS_MEDIA_FORMAT #endif +//============================================================================== +// juce_audio_plugin_client flags: + +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS +#endif + //============================================================================== // juce_audio_processors flags: @@ -253,10 +260,10 @@ #define JucePlugin_ManufacturerEmail "" #endif #ifndef JucePlugin_ManufacturerCode - #define JucePlugin_ManufacturerCode 'ROLI' + #define JucePlugin_ManufacturerCode 0x524f4c49 // 'ROLI' #endif #ifndef JucePlugin_PluginCode - #define JucePlugin_PluginCode 'Srrd' + #define JucePlugin_PluginCode 0x53727264 // 'Srrd' #endif #ifndef JucePlugin_IsSynth #define JucePlugin_IsSynth 0 diff --git a/examples/PlugInSamples/Surround/Surround.jucer b/examples/PlugInSamples/Surround/Surround.jucer index 6537d202..8c5852ce 100644 --- a/examples/PlugInSamples/Surround/Surround.jucer +++ b/examples/PlugInSamples/Surround/Surround.jucer @@ -9,7 +9,7 @@ pluginIsMidiEffectPlugin="0" pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0" pluginAUExportPrefix="SurroundAU" pluginRTASCategory="" aaxIdentifier="com.ROLI.Surround" pluginAAXCategory="AAX_ePlugInCategory_Dynamics" - jucerVersion="4.2.1" buildAUv3="0"> + jucerVersion="4.2.3" buildAUv3="0"> + jucerVersion="4.2.3"> factoryFunction JuceDemoProjectAUFactory manufacturer - Roli + ROLI type aumf subtype diff --git a/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj b/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj index 4af59088..09ea0dec 100644 --- a/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj +++ b/examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj @@ -23,10 +23,9 @@ 221F46E90C0A8651AB76A0E5 = {isa = PBXBuildFile; fileRef = 58E978708BAA8613A40F61E3; }; B46C12D99498E9FA8F1D083A = {isa = PBXBuildFile; fileRef = A59A08DCC76EE0FC7EBE1203; }; B003460B11C0B7C1CC07E666 = {isa = PBXBuildFile; fileRef = 0926E36205F4D676343AB6E7; }; - 984317B46E5445CE1D8E4096 = {isa = PBXBuildFile; fileRef = F5E9ED24FCF950C2B09ED67C; }; E32999B782F688D3746FEB08 = {isa = PBXBuildFile; fileRef = 9EC0C4C02099C656EEF39DA9; }; 8265E59547F2C5DDD10F58BF = {isa = PBXBuildFile; fileRef = 682D51082D9FE9859F364A10; }; - 71BB1850016434ACD2C733E3 = {isa = PBXBuildFile; fileRef = BD5793B7DA291D1C1B991DDC; }; + 839CB91EF7AAB3086CD898FE = {isa = PBXBuildFile; fileRef = 550FAA1B7314518C5237CB46; }; A135B77ECC75825288B59AD1 = {isa = PBXBuildFile; fileRef = F68C44DED59A1830DEC06DDB; }; CBEE8BA08EA81BC9612EB237 = {isa = PBXBuildFile; fileRef = 0E062265A0862663225F3BE4; }; 57CCDB4997DD3ADCE483C6D9 = {isa = PBXBuildFile; fileRef = F87AC3FCCA31FB0B419456B2; }; @@ -114,6 +113,7 @@ 0BEC77B5C0B5DCE51EE24DA7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_DirectSound.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_win32_DirectSound.cpp"; sourceTree = "SOURCE_ROOT"; }; 0C4BA1D16AD18E7FD8D242EE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_CPlusPlusCodeTokeniserFunctions.h"; path = "../../../../modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h"; sourceTree = "SOURCE_ROOT"; }; 0C68BAE8F95098A8AD14F2A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_android_OpenSL.cpp"; path = "../../../../modules/juce_audio_devices/native/juce_android_OpenSL.cpp"; sourceTree = "SOURCE_ROOT"; }; + 0C8BB62A92D20349100A4EDA = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_RTAS.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r"; sourceTree = "SOURCE_ROOT"; }; 0CD474E9C69F05868EF8D9EA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_linux_CommonFile.cpp"; path = "../../../../modules/juce_core/native/juce_linux_CommonFile.cpp"; sourceTree = "SOURCE_ROOT"; }; 0CF861C9A12A38A47B7BC43C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_LagrangeInterpolator.h"; path = "../../../../modules/juce_audio_basics/effects/juce_LagrangeInterpolator.h"; sourceTree = "SOURCE_ROOT"; }; 0D06541766ED7D5D99E403C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_DrawableButton.h"; path = "../../../../modules/juce_gui_basics/buttons/juce_DrawableButton.h"; sourceTree = "SOURCE_ROOT"; }; @@ -454,6 +454,7 @@ 5484ACC1742F9FA740314458 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jccolor.c"; sourceTree = "SOURCE_ROOT"; }; 54A2AD39C0C739C9880E35B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_11.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_11.h"; sourceTree = "SOURCE_ROOT"; }; 54DD8BD688BB54E3F94A19A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MidiKeyboardComponent.h"; path = "../../../../modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h"; sourceTree = "SOURCE_ROOT"; }; + 550FAA1B7314518C5237CB46 = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_audio_plugin_client_AU.r"; path = "../../../../modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r"; sourceTree = "SOURCE_ROOT"; }; 551EB50AA3CCA08ABE8CB458 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdapimin.c"; sourceTree = "SOURCE_ROOT"; }; 5532406796823FC4FB6ADC39 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = bitmath.h; path = "../../../../modules/juce_audio_formats/codecs/flac/libFLAC/include/private/bitmath.h"; sourceTree = "SOURCE_ROOT"; }; 5535A6B1099BB113B17C42DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_AudioCDReader.mm"; path = "../../../../modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm"; sourceTree = "SOURCE_ROOT"; }; @@ -948,7 +949,6 @@ BCE8039887ABB9343A257AFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AudioProcessor.h"; path = "../../../../modules/juce_audio_processors/processors/juce_AudioProcessor.h"; sourceTree = "SOURCE_ROOT"; }; BD1EC91E61ECEAB657C78D5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_Toolbar.cpp"; path = "../../../../modules/juce_gui_basics/widgets/juce_Toolbar.cpp"; sourceTree = "SOURCE_ROOT"; }; BD443A9D110E97DAB8EBB131 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CAThreadSafeList.h; path = "../../../../modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/CAThreadSafeList.h"; sourceTree = "SOURCE_ROOT"; }; - BD5793B7DA291D1C1B991DDC = {isa = PBXFileReference; lastKnownFileType = file.r; name = "juce_RezResources_AU.r"; path = "../../../../modules/juce_audio_plugin_client/AU/juce_RezResources_AU.r"; sourceTree = "SOURCE_ROOT"; }; BD8E1F131237E716EC029375 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_IPAddress.h"; path = "../../../../modules/juce_core/network/juce_IPAddress.h"; sourceTree = "SOURCE_ROOT"; }; BDAAC3539C137CDDEF894B3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = "../../../../modules/juce_graphics/image_formats/jpglib/jdpostct.c"; sourceTree = "SOURCE_ROOT"; }; BDB897B2503C29D7ABDDB656 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_AudioThumbnailCache.cpp"; path = "../../../../modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp"; sourceTree = "SOURCE_ROOT"; }; @@ -1004,6 +1004,7 @@ C7CC2605B8131869099F0D1D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "juce_mac_MainMenu.mm"; path = "../../../../modules/juce_gui_basics/native/juce_mac_MainMenu.mm"; sourceTree = "SOURCE_ROOT"; }; C8302DD07934EBD796C2BFBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_win32_Direct2DGraphicsContext.cpp"; path = "../../../../modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp"; sourceTree = "SOURCE_ROOT"; }; C83B8AC79590CB5FBF6CEDB9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "psych_44.h"; path = "../../../../modules/juce_audio_formats/codecs/oggvorbis/libvorbis-1.3.2/lib/modes/psych_44.h"; sourceTree = "SOURCE_ROOT"; }; + C83FE0526DC2E3078BCAFC5D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_AAX_Modifier_Injector.h"; path = "../../../../modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h"; sourceTree = "SOURCE_ROOT"; }; C854266C28A55C3F34489746 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_WildcardFileFilter.cpp"; path = "../../../../modules/juce_core/files/juce_WildcardFileFilter.cpp"; sourceTree = "SOURCE_ROOT"; }; C859B01B55EAB67BC10ED803 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "juce_MultiDocumentPanel.cpp"; path = "../../../../modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; C8741583F363ECB8C2010509 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "juce_MenuBarComponent.h"; path = "../../../../modules/juce_gui_basics/menus/juce_MenuBarComponent.h"; sourceTree = "SOURCE_ROOT"; }; @@ -1614,6 +1615,7 @@ 0687D10EFBEEEC129BC807D3, 2AA92DC1171DAF0BA4BB0E63, ); name = "juce_audio_formats"; sourceTree = ""; }; B663729F88A22F9325C3C9D0 = {isa = PBXGroup; children = ( + C83FE0526DC2E3078BCAFC5D, 1BAAB47A9C5B1D76D28FA282, ); name = AAX; sourceTree = ""; }; 35F768B6427149AF0129BB8C = {isa = PBXGroup; children = ( 3AA0960DF09414DBA0A2255B, @@ -1674,12 +1676,10 @@ 49386674C08BAD7864966166, ); name = CoreAudioUtilityClasses; sourceTree = ""; }; E96D0837CDD1CE8B768E4077 = {isa = PBXGroup; children = ( 35F768B6427149AF0129BB8C, - 20BA6A1962016CD285EB30F2, 3F16A54F45ED278001F4CA09, EE149F9075819C0132879D4C, - 833921AD05E4BAF484FC7749, - BD5793B7DA291D1C1B991DDC, ); name = AU; sourceTree = ""; }; - B002DD058A40E158192BAEE5 = {isa = PBXGroup; children = ( + 833921AD05E4BAF484FC7749, ); name = AU; sourceTree = ""; }; + 10721EE9E840AA7BC5F61764 = {isa = PBXGroup; children = ( CD61A73C6A090CD85EC57354, 9C9DEB7FB75C42C4F47AF999, F7454AD16EE05969CCF5FD7C, @@ -1687,10 +1687,10 @@ 3755479207D218969425F91F, 17EC828C9226E13D4EF03E85, 1D4AFBEC703C6F373B292D9A, ); name = RTAS; sourceTree = ""; }; - 69EEEA6D294205148B1E268A = {isa = PBXGroup; children = ( + 5B3F9588F32C646D12DE0ACE = {isa = PBXGroup; children = ( 12D74EEE2F7F5D8E17C746EA, A13CE6DC3E31158D49337C8F, ); name = Standalone; sourceTree = ""; }; - 18E6563C4672B4D77223D259 = {isa = PBXGroup; children = ( + 0356C38F32660D46D5EE6554 = {isa = PBXGroup; children = ( 7B870EE6D43B984CADE69C28, 94AA9AF4939F914AD00CEE1F, 58CEA1474B2E77B7287D735B, @@ -1700,22 +1700,23 @@ 841B6783475386C5471CA039, 8C0D1A1E000E47D09B771963, 7E588E8934AFA6EA5C58C133, ); name = utility; sourceTree = ""; }; - 0EB0BD7272CEB2232D7F7BD2 = {isa = PBXGroup; children = ( + 0720EF699B01F6EB0A2C4E3A = {isa = PBXGroup; children = ( 1E496F7BF3B3C59E5ECACCDE, 8EB324480D60B3E3A81541E5, ); name = VST; sourceTree = ""; }; - DBCC2B2AF371A45272E6FA21 = {isa = PBXGroup; children = ( + E090AC75C454B0E281AB5C5A = {isa = PBXGroup; children = ( 6CEFF94C7852DB3BFA5E29EB, ); name = VST3; sourceTree = ""; }; 09C66663E0BF7CD43C73C7E6 = {isa = PBXGroup; children = ( B663729F88A22F9325C3C9D0, E96D0837CDD1CE8B768E4077, - B002DD058A40E158192BAEE5, - 69EEEA6D294205148B1E268A, - 18E6563C4672B4D77223D259, - 0EB0BD7272CEB2232D7F7BD2, - DBCC2B2AF371A45272E6FA21, + 10721EE9E840AA7BC5F61764, + 5B3F9588F32C646D12DE0ACE, + 0356C38F32660D46D5EE6554, + 0720EF699B01F6EB0A2C4E3A, + E090AC75C454B0E281AB5C5A, E65E231978B796AA7868DC4A, BB2CD1B0323135818D0AB47F, 2A6E2BC2F602472C0FC70E68, + 550FAA1B7314518C5237CB46, CB93B445C37845467DFFA948, D79CAC82B4607BE7DEED1045, DFB0C0515543105C1C262D1F, @@ -2742,8 +2743,7 @@ 12E665A9E9A675668AF160A9, CF99F55660DC79DAE3D0D1A2, 8B67A16CB449160267AA05BB, - 0926E36205F4D676343AB6E7, - F5E9ED24FCF950C2B09ED67C, ); name = Resources; sourceTree = ""; }; + 0926E36205F4D676343AB6E7, ); name = Resources; sourceTree = ""; }; 7EA0AEAFB626CDF5E0038ED5 = {isa = PBXGroup; children = ( 537D65EF3BBBDFC4651D389D, A206765795252391D3F60EA4, @@ -3087,7 +3087,7 @@ 66A99B0A3E2094889407A133 = {isa = XCConfigurationList; buildConfigurations = ( 155E2212057EC38829899A3C, 103368FE85719AF0B91BA072, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - D4A200CA175E6673EB359B63 = {isa = PBXAggregateTarget; buildConfigurationList = 66A99B0A3E2094889407A133; dependencies = ( + D4A200CA175E6673EB359B63 = {isa = PBXAggregateTarget; buildConfigurationList = 66A99B0A3E2094889407A133; buildPhases = ( ); buildRules = ( ); dependencies = ( 3D94E4E73BA4376BD0C954BB, 96A187ABC229B69131A7A553, F1D7CFC05961A0332974083D, @@ -3096,8 +3096,7 @@ A4B12DFADE1730C6014F332B, D56C28DC5C3854D6AA9E04C2, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; A9C5EEDC68735C4FD82BD179 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B003460B11C0B7C1CC07E666, - 984317B46E5445CE1D8E4096, ); runOnlyForDeploymentPostprocessing = 0; }; + B003460B11C0B7C1CC07E666, ); runOnlyForDeploymentPostprocessing = 0; }; 8FC8AA9EA1AC4A26A5275F62 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2A10495092621B672B55C020, ); runOnlyForDeploymentPostprocessing = 0; }; 401B24CA453ED2BFC0EB2E89 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3120,8 +3119,7 @@ AD749722210AC59435D40744, 5B39217A95807DE26271788F, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 0F2E05BC557F712359B8A9EB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B003460B11C0B7C1CC07E666, - 984317B46E5445CE1D8E4096, ); runOnlyForDeploymentPostprocessing = 0; }; + B003460B11C0B7C1CC07E666, ); runOnlyForDeploymentPostprocessing = 0; }; 0F041AFA4DBFCC6D0F1BAF6D = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 4B8B36CA49A9DEFEF84C4554, ); runOnlyForDeploymentPostprocessing = 0; }; 543F0A994B5AC3479C27489E = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -3144,10 +3142,9 @@ 1FA913B64C8ADDFFCA9768E1, 9E686ABA5935BF9B713A0C5A, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; 98265196468E8519A8CB7DDB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B003460B11C0B7C1CC07E666, - 984317B46E5445CE1D8E4096, ); runOnlyForDeploymentPostprocessing = 0; }; + B003460B11C0B7C1CC07E666, ); runOnlyForDeploymentPostprocessing = 0; }; 60542F4F7805D965FF306DF1 = {isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( - 71BB1850016434ACD2C733E3, ); runOnlyForDeploymentPostprocessing = 0; }; + 839CB91EF7AAB3086CD898FE, ); runOnlyForDeploymentPostprocessing = 0; }; 37F22BD1952B828C02A1154C = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 7F77BD3679C81BEB8057BE4F, A001C0EF302F42D8784EF150, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj index 36e6393b..734d9f99 100644 --- a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj +++ b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj @@ -1917,6 +1917,7 @@ + @@ -2389,7 +2390,8 @@ - + + diff --git a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters index dd30b798..0c2e50c0 100644 --- a/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters +++ b/examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters @@ -2610,6 +2610,9 @@ Juce Modules\juce_audio_formats + + Juce Modules\juce_audio_plugin_client\AAX + Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses @@ -4022,8 +4025,11 @@ Juce Modules\juce_audio_plugin_client\AU - - Juce Modules\juce_audio_plugin_client\AU + + Juce Modules\juce_audio_plugin_client + + + Juce Modules\juce_audio_plugin_client Juce Modules\juce_graphics\image_formats\jpglib diff --git a/examples/audio plugin demo/JuceDemoPlugin.jucer b/examples/audio plugin demo/JuceDemoPlugin.jucer index 78394d16..a2dce7b7 100644 --- a/examples/audio plugin demo/JuceDemoPlugin.jucer +++ b/examples/audio plugin demo/JuceDemoPlugin.jucer @@ -3,12 +3,12 @@ setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth() / 2))); delaySlider->setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth()))); - resizer->setBounds (getWidth() - 16, getHeight() - 16, 16, 16); - getProcessor().lastUIWidth = getWidth(); getProcessor().lastUIHeight = getHeight(); } @@ -136,14 +133,14 @@ void JuceDemoPluginAudioProcessorEditor::timerCallback() // quick-and-dirty function to format a timecode string static String timeToTimecodeString (double seconds) { - const int millisecs = roundToInt (std::abs (seconds * 1000.0)); + const int millisecs = roundToInt (seconds * 1000.0); + const int absMillisecs = std::abs (millisecs); - return String::formatted ("%s%02d:%02d:%02d.%03d", - seconds < 0 ? "-" : "", + return String::formatted ("%02d:%02d:%02d.%03d", millisecs / 360000, - (millisecs / 60000) % 60, - (millisecs / 1000) % 60, - millisecs % 1000); + (absMillisecs / 60000) % 60, + (absMillisecs / 1000) % 60, + absMillisecs % 1000); } // quick-and-dirty function to format a bars/beats string @@ -165,25 +162,20 @@ static String quarterNotePositionToBarsBeatsString (double quarterNotes, int num // Updates the text in our position label. void JuceDemoPluginAudioProcessorEditor::updateTimecodeDisplay (AudioPlayHead::CurrentPositionInfo pos) { - if (lastDisplayedPosition != pos) - { - lastDisplayedPosition = pos; - - MemoryOutputStream displayText; - - displayText << "[" << SystemStats::getJUCEVersion() << "] " - << String (pos.bpm, 2) << " bpm, " - << pos.timeSigNumerator << '/' << pos.timeSigDenominator - << " - " << timeToTimecodeString (pos.timeInSeconds) - << " - " << quarterNotePositionToBarsBeatsString (pos.ppqPosition, - pos.timeSigNumerator, - pos.timeSigDenominator); - - if (pos.isRecording) - displayText << " (recording)"; - else if (pos.isPlaying) - displayText << " (playing)"; - - timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification); - } + MemoryOutputStream displayText; + + displayText << "[" << SystemStats::getJUCEVersion() << "] " + << String (pos.bpm, 2) << " bpm, " + << pos.timeSigNumerator << '/' << pos.timeSigDenominator + << " - " << timeToTimecodeString (pos.timeInSeconds) + << " - " << quarterNotePositionToBarsBeatsString (pos.ppqPosition, + pos.timeSigNumerator, + pos.timeSigDenominator); + + if (pos.isRecording) + displayText << " (recording)"; + else if (pos.isPlaying) + displayText << " (playing)"; + + timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification); } diff --git a/examples/audio plugin demo/Source/PluginEditor.h b/examples/audio plugin demo/Source/PluginEditor.h index d62250db..5ba46d5b 100644 --- a/examples/audio plugin demo/Source/PluginEditor.h +++ b/examples/audio plugin demo/Source/PluginEditor.h @@ -36,10 +36,6 @@ private: MidiKeyboardComponent midiKeyboard; Label timecodeDisplayLabel, gainLabel, delayLabel; ScopedPointer gainSlider, delaySlider; - ScopedPointer resizer; - ComponentBoundsConstrainer resizeLimits; - - AudioPlayHead::CurrentPositionInfo lastDisplayedPosition; //============================================================================== JuceDemoPluginAudioProcessor& getProcessor() const diff --git a/examples/audio plugin demo/Source/PluginProcessor.cpp b/examples/audio plugin demo/Source/PluginProcessor.cpp index b045d438..5a16b9ed 100644 --- a/examples/audio plugin demo/Source/PluginProcessor.cpp +++ b/examples/audio plugin demo/Source/PluginProcessor.cpp @@ -344,8 +344,8 @@ void JuceDemoPluginAudioProcessor::setStateInformation (const void* data, int si if (xmlState->hasTagName ("MYPLUGINSETTINGS")) { // ok, now pull out our last window size.. - lastUIWidth = xmlState->getIntAttribute ("uiWidth", lastUIWidth); - lastUIHeight = xmlState->getIntAttribute ("uiHeight", lastUIHeight); + lastUIWidth = jmax (xmlState->getIntAttribute ("uiWidth", lastUIWidth), 400); + lastUIHeight = jmax (xmlState->getIntAttribute ("uiHeight", lastUIHeight), 200); // Now reload our parameters.. for (int i = 0; i < getNumParameters(); ++i) diff --git a/examples/audio plugin host/Builds/Linux/Makefile b/examples/audio plugin host/Builds/Linux/Makefile index b9dac0e9..2257e6f5 100644 --- a/examples/audio plugin host/Builds/Linux/Makefile +++ b/examples/audio plugin host/Builds/Linux/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/examples/audio plugin host/Plugin Host.jucer b/examples/audio plugin host/Plugin Host.jucer index ca298619..c3068823 100644 --- a/examples/audio plugin host/Plugin Host.jucer +++ b/examples/audio plugin host/Plugin Host.jucer @@ -2,7 +2,7 @@ + includeBinaryInAppConfig="1" jucerVersion="4.2.3"> diff --git a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile index 5aba42a1..adb76892 100644 --- a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile +++ b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/extras/Projucer/Builds/LinuxMakefile/Makefile b/extras/Projucer/Builds/LinuxMakefile/Makefile index c98167ca..dd33a826 100644 --- a/extras/Projucer/Builds/LinuxMakefile/Makefile +++ b/extras/Projucer/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=4.2.1" -D "JUCE_APP_VERSION_HEX=0x40201" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=4.2.1" -D "JUCE_APP_VERSION_HEX=0x40201" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl diff --git a/extras/Projucer/Builds/MacOSX/Info-App.plist b/extras/Projucer/Builds/MacOSX/Info-App.plist index 50cd38f8..86a8b55f 100644 --- a/extras/Projucer/Builds/MacOSX/Info-App.plist +++ b/extras/Projucer/Builds/MacOSX/Info-App.plist @@ -33,9 +33,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 4.2.1 + 4.2.3 CFBundleVersion - 4.2.1 + 4.2.3 NSHumanReadableCopyright NSHighResolutionCapable diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj index 4b31c6b8..ce66ba69 100644 --- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj +++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj @@ -2372,8 +2372,8 @@ "_DEBUG=1", "DEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=4.2.1", - "JUCE_APP_VERSION_HEX=0x40201", ); + "JUCE_APP_VERSION=4.2.3", + "JUCE_APP_VERSION_HEX=0x40203", ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); INFOPLIST_FILE = Info-App.plist; @@ -2396,8 +2396,8 @@ "_NDEBUG=1", "NDEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=4.2.1", - "JUCE_APP_VERSION_HEX=0x40201", ); + "JUCE_APP_VERSION=4.2.3", + "JUCE_APP_VERSION_HEX=0x40203", ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); diff --git a/extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj b/extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj index 23d5a012..de6498d0 100644 --- a/extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj @@ -58,7 +58,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -97,7 +97,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions) MultiThreaded true diff --git a/extras/Projucer/Builds/VisualStudio2013/resources.rc b/extras/Projucer/Builds/VisualStudio2013/resources.rc index 0cb9c207..21778ece 100644 --- a/extras/Projucer/Builds/VisualStudio2013/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2013/resources.rc @@ -7,16 +7,16 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 4,2,1,0 +FILEVERSION 4,2,3,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "4.2.1\0" + VALUE "FileVersion", "4.2.3\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "4.2.1\0" + VALUE "ProductVersion", "4.2.3\0" END END diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj b/extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj index 106889b3..59dc2eab 100644 --- a/extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj @@ -58,7 +58,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -97,7 +97,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions) MultiThreaded true diff --git a/extras/Projucer/Builds/VisualStudio2015/resources.rc b/extras/Projucer/Builds/VisualStudio2015/resources.rc index 0cb9c207..21778ece 100644 --- a/extras/Projucer/Builds/VisualStudio2015/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2015/resources.rc @@ -7,16 +7,16 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 4,2,1,0 +FILEVERSION 4,2,3,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "4.2.1\0" + VALUE "FileVersion", "4.2.3\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "4.2.1\0" + VALUE "ProductVersion", "4.2.3\0" END END diff --git a/extras/Projucer/JuceLibraryCode/JuceHeader.h b/extras/Projucer/JuceLibraryCode/JuceHeader.h index 1a71a18d..8db2f1c3 100644 --- a/extras/Projucer/JuceLibraryCode/JuceHeader.h +++ b/extras/Projucer/JuceLibraryCode/JuceHeader.h @@ -35,8 +35,8 @@ namespace ProjectInfo { const char* const projectName = "Projucer"; - const char* const versionString = "4.2.1"; - const int versionNumber = 0x40201; + const char* const versionString = "4.2.3"; + const int versionNumber = 0x40203; } #endif diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer index 9413a2c3..5fc7dd25 100644 --- a/extras/Projucer/Projucer.jucer +++ b/extras/Projucer/Projucer.jucer @@ -1,7 +1,7 @@ & props) { ButtonHandler::getEditableProperties (component, document, props); - addColourProperties (component, document, props); } XmlElement* createXmlFor (Component* comp, const ComponentLayout* layout) { - XmlElement* e = ButtonHandler::createXmlFor (comp, layout); - - //TextButton* tb = (TextButton*) comp; - - return e; + return ButtonHandler::createXmlFor (comp, layout); } bool restoreFromXml (const XmlElement& xml, Component* comp, const ComponentLayout* layout) { - if (! ButtonHandler::restoreFromXml (xml, comp, layout)) - return false; - - //TextButton* tb = (TextButton*) comp; - - return true; + return ButtonHandler::restoreFromXml (xml, comp, layout); } void fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName) { ButtonHandler::fillInCreationCode (code, component, memberVariableName); - //TextButton* const tb = dynamic_cast (component); - //TextButton defaultButton (String::empty); - String s; s << getColourIntialisationCode (component, memberVariableName) diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h index c174c827..9f741b3e 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h @@ -335,6 +335,9 @@ protected: Value shouldGenerateManifestValue() { return getValue (Ids::generateManifest); } bool shouldGenerateManifest() const { return config [Ids::generateManifest]; } + Value shouldLinkIncrementalValue() { return getValue (Ids::enableIncrementalLinking); } + bool shouldLinkIncremental() const { return config [Ids::enableIncrementalLinking]; } + Value getWholeProgramOptValue() { return getValue (Ids::wholeProgramOptimisation); } bool shouldDisableWholeProgramOpt() const { return static_cast (config [Ids::wholeProgramOptimisation]) > 0; } @@ -399,6 +402,12 @@ protected: StringArray (wpoNames), Array (wpoValues, numElementsInArray (wpoValues)))); } + { + props.add (new BooleanPropertyComponent (shouldLinkIncrementalValue(), "Incremental Linking", "Enable"), + "Enable to avoid linking from scratch for every new build. " + "Disable to ensure that your final release build does not contain padding or thunks."); + } + if (! isDebug()) props.add (new BooleanPropertyComponent (shouldGenerateDebugSymbolsValue(), "Debug Symbols", "Force generation of debug symbols")); @@ -1026,6 +1035,7 @@ protected: linker->setAttribute ("IgnoreDefaultLibraryNames", isDebug ? "libcmt.lib, msvcrt.lib" : ""); linker->setAttribute ("GenerateDebugInformation", (isDebug || config.shouldGenerateDebugSymbols()) ? "true" : "false"); + linker->setAttribute ("LinkIncremental", config.shouldLinkIncremental() ? "2" : "1"); linker->setAttribute ("ProgramDatabaseFile", getIntDirFile (config, config.getOutputFilename (".pdb", true))); linker->setAttribute ("SubSystem", msvcIsWindowsSubsystem ? "2" : "1"); @@ -1073,6 +1083,8 @@ protected: linker->setAttribute ("OutputFile", getOutDirFile (config, config.getOutputFilename (msvcTargetSuffix, false))); linker->setAttribute ("IgnoreDefaultLibraryNames", isDebug ? "libcmt.lib, msvcrt.lib" : ""); + + linker->setAttribute ("LinkIncremental", config.shouldLinkIncremental() ? "2" : "1"); } else { @@ -1370,6 +1382,9 @@ protected: if (! (config.isDebug() || config.shouldDisableWholeProgramOpt())) e->createNewChildElement ("WholeProgramOptimization")->addTextElement ("true"); + if (config.shouldLinkIncremental()) + e->createNewChildElement ("LinkIncremental")->addTextElement ("true"); + if (config.is64Bit()) e->createNewChildElement ("PlatformToolset")->addTextElement (getPlatformToolset()); } diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h index 23c3b48d..632b520f 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h @@ -124,7 +124,7 @@ public: bool isOSX() const override { return ! iOS; } bool isiOS() const override { return iOS; } - bool supportsVST() const override { return ! iOS; } + bool supportsVST() const override { return true; } bool supportsVST3() const override { return ! iOS; } bool supportsAAX() const override { return ! iOS; } bool supportsRTAS() const override { return ! iOS; } @@ -1593,10 +1593,10 @@ private: if (! projectType.isStaticLibrary() && target.type != Target::SharedCodeTarget) target.addBuildPhase ("PBXFrameworksBuildPhase", target.frameworkIDs); - - target.addShellScriptBuildPhase ("Post-build script", getPostBuildScript()); } + target.addShellScriptBuildPhase ("Post-build script", getPostBuildScript()); + if (project.getProjectType().isAudioPlugin() && project.shouldBuildAUv3().getValue() && project.shouldBuildStandalone().getValue() && target.type == Target::StandalonePlugIn) embedAppExtension(); @@ -1661,11 +1661,8 @@ private: v->setProperty ("isa", target.type == Target::AggregateTarget ? "PBXAggregateTarget" : "PBXNativeTarget", nullptr); v->setProperty ("buildConfigurationList", createID (String ("__configList") + targetName), nullptr); - if (target.type != Target::AggregateTarget) - { - v->setProperty ("buildPhases", indentParenthesisedList (target.buildPhaseIDs), nullptr); - v->setProperty ("buildRules", "( )", nullptr); - } + v->setProperty ("buildPhases", indentParenthesisedList (target.buildPhaseIDs), nullptr); + v->setProperty ("buildRules", "( )", nullptr); v->setProperty ("dependencies", indentParenthesisedList (getTargetDependencies (target)), nullptr); v->setProperty (Ids::name, target.getXCodeSchemeName(), nullptr); @@ -2204,20 +2201,23 @@ private: return refID; } - String addRezFile (const RelativePath& path) const + String addRezFile (const Project::Item& projectItem, const RelativePath& path) const { const String pathAsString (path.toUnixStyle()); const String refID (addFileReference (path.toUnixStyle())); - Target* auTarget = getTargetOfType (Target::AudioUnitPlugIn); - - if (auTarget == nullptr) - return String(); + if (projectItem.isModuleCode()) + { + if (Target* xcodeTarget = getTargetOfType (getTargetTypeFromFilePath (projectItem.getFile(), false))) + { + String rezFileID = addBuildFile (pathAsString, refID, false, false, xcodeTarget); + xcodeTarget->rezFileIDs.add (rezFileID); - String rezFileID = addBuildFile (pathAsString, refID, false, false, auTarget); - auTarget->rezFileIDs.add (rezFileID); + return refID; + } + } - return refID; + return String(); } String getEntitlementsFileName() const @@ -2270,25 +2270,12 @@ private: else path = RelativePath (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder); - if (path.hasFileExtension (".r") && LibraryModule::CompileUnit::hasSuffix (projectItem.getFile(), "_AU")) - return addRezFile (path); + if (path.hasFileExtension (".r")) + return addRezFile (projectItem, path); Target* xcodeTarget = nullptr; if (projectItem.isModuleCode() && projectItem.shouldBeCompiled()) - { - const File& file = projectItem.getFile(); - - Target::Type targetType = Target::unspecified; - if (LibraryModule::CompileUnit::hasSuffix (file, "_AU")) targetType = Target::AudioUnitPlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_AUv3")) targetType = Target::AudioUnitv3PlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_AAX")) targetType = Target::AAXPlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_RTAS")) targetType = Target::RTASPlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST2")) targetType = Target::VSTPlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST3")) targetType = Target::VST3PlugIn; - else if (LibraryModule::CompileUnit::hasSuffix (file, "_Standalone")) targetType = Target::StandalonePlugIn; - - xcodeTarget = getTargetOfType (targetType); - } + xcodeTarget = getTargetOfType (getTargetTypeFromFilePath (projectItem.getFile(), false)); return addFile (path, projectItem.shouldBeCompiled(), projectItem.shouldBeAddedToBinaryResources(), @@ -2392,6 +2379,19 @@ private: misc.add (v); } + static Target::Type getTargetTypeFromFilePath (const File& file, bool returnSharedTargetIfNoValidSuffic) + { + if (LibraryModule::CompileUnit::hasSuffix (file, "_AU")) return Target::AudioUnitPlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_AUv3")) return Target::AudioUnitv3PlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_AAX")) return Target::AAXPlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_RTAS")) return Target::RTASPlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST2")) return Target::VSTPlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST3")) return Target::VST3PlugIn; + else if (LibraryModule::CompileUnit::hasSuffix (file, "_Standalone")) return Target::StandalonePlugIn; + + return (returnSharedTargetIfNoValidSuffic ? Target::SharedCodeTarget : Target::unspecified); + } + //============================================================================== void removeMismatchedXcuserdata() const { diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.cpp b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.cpp index df80d3e1..31ab0095 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.cpp +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.cpp @@ -56,7 +56,16 @@ namespace inline String valueToCharLiteral (const var& v) { - return CppTokeniserFunctions::addEscapeChars (v.toString().trim().substring (0, 4)).quoted ('\''); + String fourCharCode = v.toString().trim().substring (0, 4); + uint32 hexRepresentation = 0; + + for (int i = 0; i < 4; ++i) + hexRepresentation = (hexRepresentation << 8U) + | (static_cast (fourCharCode[i]) & 0xffU); + + return String ("0x") + String::toHexString (static_cast (hexRepresentation)) + + String (" // ") + + CppTokeniserFunctions::addEscapeChars (fourCharCode).quoted ('\''); } } diff --git a/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h b/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h index 15be8db1..a103cbd6 100644 --- a/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h +++ b/extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h @@ -46,10 +46,7 @@ public: void paintIcon (Graphics& g, Rectangle area) override { g.setColour (Colours::black); - - g.drawImageWithin (icon, area.getX(), area.getY(), - area.getWidth(), area.getHeight(), - RectanglePlacement::centred, false); + g.drawImage (icon, area.toFloat(), RectanglePlacement::centred); } void deleteItem() override diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index cf8624c8..ff59f9f0 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -601,12 +601,6 @@ File EnabledModuleList::findLocalModuleFolder (const String& moduleID, bool useE if (ModuleDescription (f).isValid()) return f; - - f = moduleFolder.getChildFile ("modules") - .getChildFile (moduleID); - - if (ModuleDescription (f).isValid()) - return f; } } } diff --git a/extras/Projucer/Source/Project/jucer_Project.cpp b/extras/Projucer/Source/Project/jucer_Project.cpp index 1ff64ff7..29be7e38 100644 --- a/extras/Projucer/Source/Project/jucer_Project.cpp +++ b/extras/Projucer/Source/Project/jucer_Project.cpp @@ -1121,9 +1121,12 @@ String Project::getAUMainTypeString() if (s.isEmpty()) { - if (getPluginIsSynth().getValue()) s = "kAudioUnitType_MusicDevice"; - else if (getPluginWantsMidiInput().getValue()) s = "kAudioUnitType_MusicEffect"; - else s = "kAudioUnitType_Effect"; + // Unfortunately, Rez uses a header where kAudioUnitType_MIDIProcessor is undefined + // Use aumi instead. + if (getPluginIsMidiEffectPlugin().getValue()) s = "'aumi'"; + else if (getPluginIsSynth().getValue()) s = "kAudioUnitType_MusicDevice"; + else if (getPluginWantsMidiInput().getValue()) s = "kAudioUnitType_MusicEffect"; + else s = "kAudioUnitType_Effect"; } return s; diff --git a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp index 1ea94cb7..f65729fd 100644 --- a/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -446,11 +446,7 @@ struct EnableBuildComp : public Component //============================================================================== Component* ProjectContentComponent::createBuildTab (CompileEngineChildProcess* child) { - #if JUCE_WINDOWS - ignoreUnused (child); - return new ProjucerDisabledComp ("Windows support is still under development - " - "please check for updates at www.juce.com!", false, false); - #elif JUCE_LINUX + #if JUCE_LINUX ignoreUnused (child); return new ProjucerDisabledComp ("Linux support is still under development - " "please check for updates at www.juce.com!", false, false); @@ -1474,7 +1470,6 @@ void ProjectContentComponent::timerCallback() ReferenceCountedObjectPtr ProjectContentComponent::getChildProcess() { - #if JUCE_MAC if (childProcess == nullptr && isBuildEnabled()) { childProcess = ProjucerApplication::getApp().childProcessCache->getOrCreate (*project); @@ -1482,7 +1477,6 @@ ReferenceCountedObjectPtr ProjectContentComponent::ge if (childProcess != nullptr) childProcess->setContinuousRebuild (isContinuousRebuildEnabled()); } - #endif return childProcess; } diff --git a/extras/Projucer/Source/Utility/jucer_MiscUtilities.cpp b/extras/Projucer/Source/Utility/jucer_MiscUtilities.cpp index f722a20b..5a030345 100644 --- a/extras/Projucer/Source/Utility/jucer_MiscUtilities.cpp +++ b/extras/Projucer/Source/Utility/jucer_MiscUtilities.cpp @@ -138,10 +138,7 @@ String createGCCPreprocessorFlags (const StringPairArray& defs) if (value.isNotEmpty()) def << "=" << value; - if (! def.endsWithChar ('"')) - def = def.quoted(); - - s += " -D " + def; + s += " -D" + def; } return s; diff --git a/extras/Projucer/Source/Utility/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/jucer_PresetIDs.h index 3bbb26e2..f9203f33 100644 --- a/extras/Projucer/Source/Utility/jucer_PresetIDs.h +++ b/extras/Projucer/Source/Utility/jucer_PresetIDs.h @@ -117,6 +117,7 @@ namespace Ids DECLARE_ID (generateManifest); DECLARE_ID (useRuntimeLibDLL); DECLARE_ID (wholeProgramOptimisation); + DECLARE_ID (enableIncrementalLinking); DECLARE_ID (buildVST); DECLARE_ID (bundleIdentifier); DECLARE_ID (aaxIdentifier); diff --git a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile index 40005af1..68cd0d73 100644 --- a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile +++ b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile @@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt @@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_LINUX_MAKE_6D53C8B4=1" -D "JUCE_APP_VERSION=1.0.0" -D "JUCE_APP_VERSION_HEX=0x10000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules + CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CXXFLAGS += $(CFLAGS) -std=c++11 LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt diff --git a/extras/UnitTestRunner/UnitTestRunner.jucer b/extras/UnitTestRunner/UnitTestRunner.jucer index 5ae2d490..759f4539 100644 --- a/extras/UnitTestRunner/UnitTestRunner.jucer +++ b/extras/UnitTestRunner/UnitTestRunner.jucer @@ -2,7 +2,7 @@ + jucerVersion="4.2.3" defines="JUCE_UNIT_TESTS=1"> diff --git a/extras/binarybuilder/BinaryBuilder.jucer b/extras/binarybuilder/BinaryBuilder.jucer index 8b56fb80..237f6a49 100644 --- a/extras/binarybuilder/BinaryBuilder.jucer +++ b/extras/binarybuilder/BinaryBuilder.jucer @@ -1,7 +1,7 @@ + jucerVersion="4.2.3" defines="JUCE_DLL_BUILD=1" includeBinaryInAppConfig="1"> diff --git a/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp b/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp index 0f91bc24..0d60e3e8 100644 --- a/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp +++ b/modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp @@ -204,10 +204,11 @@ namespace FloatVectorHelpers typedef float Type; typedef float32x4_t ParallelType; typedef uint32x4_t IntegerType; + union signMaskUnion { ParallelType f; IntegerType i; }; enum { numParallel = 4 }; - static forcedinline IntegerType toint (ParallelType v) noexcept { union { ParallelType f; IntegerType i; } u; u.f = v; return u.i; } - static forcedinline ParallelType toflt (IntegerType v) noexcept { union { ParallelType f; IntegerType i; } u; u.i = v; return u.f; } + static forcedinline IntegerType toint (ParallelType v) noexcept { signMaskUnion u; u.f = v; return u.i; } + static forcedinline ParallelType toflt (IntegerType v) noexcept { signMaskUnion u; u.i = v; return u.f; } static forcedinline ParallelType load1 (Type v) noexcept { return vld1q_dup_f32 (&v); } static forcedinline ParallelType loadA (const Type* v) noexcept { return vld1q_f32 (v); } @@ -235,10 +236,11 @@ namespace FloatVectorHelpers typedef double Type; typedef double ParallelType; typedef uint64 IntegerType; + union signMaskUnion { ParallelType f; IntegerType i; }; enum { numParallel = 1 }; - static forcedinline IntegerType toint (ParallelType v) noexcept { union { ParallelType f; IntegerType i; } u; u.f = v; return u.i; } - static forcedinline ParallelType toflt (IntegerType v) noexcept { union { ParallelType f; IntegerType i; } u; u.i = v; return u.f; } + static forcedinline IntegerType toint (ParallelType v) noexcept { signMaskUnion u; u.f = v; return u.i; } + static forcedinline ParallelType toflt (IntegerType v) noexcept { signMaskUnion u; u.i = v; return u.f; } static forcedinline ParallelType load1 (Type v) noexcept { return v; } static forcedinline ParallelType loadA (const Type* v) noexcept { return *v; } @@ -346,6 +348,9 @@ namespace FloatVectorHelpers #define JUCE_LOAD_SRC1_SRC2_DEST(src1Load, src2Load, dstLoad) const Mode::ParallelType d = dstLoad (dest), s1 = src1Load (src1), s2 = src2Load (src2); #define JUCE_LOAD_SRC_DEST(srcLoad, dstLoad) const Mode::ParallelType d = dstLoad (dest), s = srcLoad (src); + union signMask32 { float f; uint32 i; }; + union signMask64 { double d; uint64 i; }; + #if JUCE_USE_SSE_INTRINSICS || JUCE_USE_ARM_NEON template struct ModeType { typedef BasicOps32 Mode; }; template<> struct ModeType<8> { typedef BasicOps64 Mode; }; @@ -806,7 +811,7 @@ void FloatVectorOperations::abs (float* dest, const float* src, int num) noexcep #if JUCE_USE_VDSP_FRAMEWORK vDSP_vabs ((float*) src, 1, dest, 1, (vDSP_Length) num); #else - union { float f; uint32 i; } signMask; + FloatVectorHelpers::signMask32 signMask; signMask.i = 0x7fffffffUL; JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = fabsf (src[i]), Mode::bit_and (s, mask), JUCE_LOAD_SRC, JUCE_INCREMENT_SRC_DEST, @@ -821,7 +826,7 @@ void FloatVectorOperations::abs (double* dest, const double* src, int num) noexc #if JUCE_USE_VDSP_FRAMEWORK vDSP_vabsD ((double*) src, 1, dest, 1, (vDSP_Length) num); #else - union {double d; uint64 i;} signMask; + FloatVectorHelpers::signMask64 signMask; signMask.i = 0x7fffffffffffffffULL; JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = fabs (src[i]), Mode::bit_and (s, mask), diff --git a/modules/juce_audio_basics/juce_audio_basics.h b/modules/juce_audio_basics/juce_audio_basics.h index 2ca734cd..6742c9e9 100644 --- a/modules/juce_audio_basics/juce_audio_basics.h +++ b/modules/juce_audio_basics/juce_audio_basics.h @@ -33,7 +33,7 @@ ID: juce_audio_basics vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE audio and MIDI data classes description: Classes for audio buffer manipulation, midi message handling, synthesis, etc. website: http://www.juce.com/juce diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp index a334dfe8..556c2d84 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp @@ -33,11 +33,23 @@ namespace MidiHelpers { return (uint8) jlimit (0, 127, v); } +} - inline uint8 floatVelocityToByte (const float v) noexcept - { - return validVelocity (roundToInt (v * 127.0f)); - } +//============================================================================== +uint8 MidiMessage::floatValueToMidiByte (const float v) noexcept +{ + return MidiHelpers::validVelocity (roundToInt (v * 127.0f)); +} + +uint16 MidiMessage::pitchbendToPitchwheelPos (const float pitchbend, + const float pitchbendRange) noexcept +{ + // can't translate a pitchbend value that is outside of the given range! + jassert (std::abs (pitchbend) <= pitchbendRange); + + return static_cast (pitchbend > 0.0f + ? jmap (pitchbend, 0.0f, pitchbendRange, 8192.0f, 16383.0f) + : jmap (pitchbend, -pitchbendRange, 0.0f, 0.0f, 8192.0f)); } //============================================================================== @@ -84,25 +96,24 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) noexcept MidiMessage::MidiMessage() noexcept : timeStamp (0), size (2) { - preallocatedData.asBytes[0] = 0xf0; - preallocatedData.asBytes[1] = 0xf7; + packedData.asBytes[0] = 0xf0; + packedData.asBytes[1] = 0xf7; } MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t) - : timeStamp (t), - size (dataSize) + : timeStamp (t), size (dataSize) { jassert (dataSize > 0); - memcpy (allocateSpace (dataSize), d, (size_t) dataSize); + // this checks that the length matches the data.. + jassert (dataSize > 3 || *(uint8*)d >= 0xf0 || getMessageLengthFromFirstByte (*(uint8*)d) == size); - // check that the length matches the data.. - jassert (size > 3 || *(uint8*)d >= 0xf0 || getMessageLengthFromFirstByte (*(uint8*)d) == size); + memcpy (allocateSpace (dataSize), d, (size_t) dataSize); } MidiMessage::MidiMessage (const int byte1, const double t) noexcept : timeStamp (t), size (1) { - preallocatedData.asBytes[0] = (uint8) byte1; + packedData.asBytes[0] = (uint8) byte1; // check that the length matches the data.. jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 1); @@ -111,8 +122,8 @@ MidiMessage::MidiMessage (const int byte1, const double t) noexcept MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) noexcept : timeStamp (t), size (2) { - preallocatedData.asBytes[0] = (uint8) byte1; - preallocatedData.asBytes[1] = (uint8) byte2; + packedData.asBytes[0] = (uint8) byte1; + packedData.asBytes[1] = (uint8) byte2; // check that the length matches the data.. jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 2); @@ -121,9 +132,9 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const double t) noex MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, const double t) noexcept : timeStamp (t), size (3) { - preallocatedData.asBytes[0] = (uint8) byte1; - preallocatedData.asBytes[1] = (uint8) byte2; - preallocatedData.asBytes[2] = (uint8) byte3; + packedData.asBytes[0] = (uint8) byte1; + packedData.asBytes[1] = (uint8) byte2; + packedData.asBytes[2] = (uint8) byte3; // check that the length matches the data.. jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 3); @@ -132,29 +143,19 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, con MidiMessage::MidiMessage (const MidiMessage& other) : timeStamp (other.timeStamp), size (other.size) { - if (other.allocatedData != nullptr) - { - allocatedData.malloc ((size_t) size); - memcpy (allocatedData, other.allocatedData, (size_t) size); - } + if (isHeapAllocated()) + memcpy (allocateSpace (size), other.getData(), (size_t) size); else - { - preallocatedData.asInt32 = other.preallocatedData.asInt32; - } + packedData.allocatedData = other.packedData.allocatedData; } MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp) : timeStamp (newTimeStamp), size (other.size) { - if (other.allocatedData != nullptr) - { - allocatedData.malloc ((size_t) size); - memcpy (allocatedData, other.allocatedData, (size_t) size); - } + if (isHeapAllocated()) + memcpy (allocateSpace (size), other.getData(), (size_t) size); else - { - preallocatedData.asInt32 = other.preallocatedData.asInt32; - } + packedData.allocatedData = other.packedData.allocatedData; } MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const uint8 lastStatusByte, @@ -229,16 +230,15 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const } else { - preallocatedData.asInt32 = 0; size = getMessageLengthFromFirstByte ((uint8) byte); - preallocatedData.asBytes[0] = (uint8) byte; + packedData.asBytes[0] = (uint8) byte; if (size > 1) { - preallocatedData.asBytes[1] = src[0]; + packedData.asBytes[1] = src[0]; if (size > 2) - preallocatedData.asBytes[2] = src[1]; + packedData.asBytes[2] = src[1]; } } @@ -246,7 +246,7 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const } else { - preallocatedData.asInt32 = 0; + packedData.allocatedData = nullptr; size = 0; } } @@ -255,19 +255,25 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) { if (this != &other) { - timeStamp = other.timeStamp; - size = other.size; - - if (other.allocatedData != nullptr) + if (other.isHeapAllocated()) { - allocatedData.malloc ((size_t) size); - memcpy (allocatedData, other.allocatedData, (size_t) size); + if (isHeapAllocated()) + packedData.allocatedData = static_cast (std::realloc (packedData.allocatedData, (size_t) other.size)); + else + packedData.allocatedData = static_cast (std::malloc ((size_t) other.size)); + + memcpy (packedData.allocatedData, other.packedData.allocatedData, (size_t) other.size); } else { - allocatedData.free(); - preallocatedData.asInt32 = other.preallocatedData.asInt32; + if (isHeapAllocated()) + std::free (packedData.allocatedData); + + packedData.allocatedData = other.packedData.allocatedData; } + + timeStamp = other.timeStamp; + size = other.size; } return *this; @@ -277,36 +283,36 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other) MidiMessage::MidiMessage (MidiMessage&& other) noexcept : timeStamp (other.timeStamp), size (other.size) { - if (other.allocatedData != nullptr) - allocatedData.swapWith (other.allocatedData); - else - preallocatedData.asInt32 = other.preallocatedData.asInt32; + packedData.allocatedData = other.packedData.allocatedData; + other.size = 0; } MidiMessage& MidiMessage::operator= (MidiMessage&& other) noexcept { - jassert (this != &other); // shouldn't be possible - + packedData.allocatedData = other.packedData.allocatedData; timeStamp = other.timeStamp; size = other.size; - allocatedData.swapWith (other.allocatedData); - preallocatedData.asInt32 = other.preallocatedData.asInt32; - + other.size = 0; return *this; } #endif -MidiMessage::~MidiMessage() {} +MidiMessage::~MidiMessage() noexcept +{ + if (isHeapAllocated()) + std::free (packedData.allocatedData); +} uint8* MidiMessage::allocateSpace (int bytes) { - if (bytes > 4) + if (bytes > (int) sizeof (packedData)) { - allocatedData.malloc ((size_t) bytes); - return allocatedData; + uint8* d = static_cast (std::malloc ((size_t) bytes)); + packedData.allocatedData = d; + return d; } - return preallocatedData.asBytes; + return packedData.asBytes; } String MidiMessage::getDescription() const @@ -416,7 +422,7 @@ float MidiMessage::getFloatVelocity() const noexcept void MidiMessage::setVelocity (const float newVelocity) noexcept { if (isNoteOnOrOff()) - getData()[2] = MidiHelpers::floatVelocityToByte (newVelocity); + getData()[2] = floatValueToMidiByte (newVelocity); } void MidiMessage::multiplyVelocity (const float scaleFactor) noexcept @@ -563,7 +569,7 @@ MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const float velocity) noexcept { - return noteOn (channel, noteNumber, MidiHelpers::floatVelocityToByte (velocity)); + return noteOn (channel, noteNumber, floatValueToMidiByte (velocity)); } MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, uint8 velocity) noexcept @@ -577,7 +583,7 @@ MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, uint8 MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, float velocity) noexcept { - return noteOff (channel, noteNumber, MidiHelpers::floatVelocityToByte (velocity)); + return noteOff (channel, noteNumber, floatValueToMidiByte (velocity)); } MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber) noexcept @@ -722,9 +728,10 @@ MidiMessage MidiMessage::textMetaEvent (int type, StringRef text) header[--n] = 0xff; const size_t headerLen = sizeof (header) - n; + const int totalSize = (int) (headerLen + textSize); - uint8* const dest = result.allocateSpace ((int) (headerLen + textSize)); - result.size = (int) (headerLen + textSize); + uint8* const dest = result.allocateSpace (totalSize); + result.size = totalSize; memcpy (dest, header + n, headerLen); memcpy (dest + headerLen, text.text.getAddress(), textSize); @@ -1010,7 +1017,7 @@ String MidiMessage::getMidiNoteName (int note, bool useSharps, bool includeOctav return String(); } -double MidiMessage::getMidiNoteInHertz (int noteNumber, const double frequencyOfA) noexcept +double MidiMessage::getMidiNoteInHertz (const int noteNumber, const double frequencyOfA) noexcept { return frequencyOfA * pow (2.0, (noteNumber - 69) / 12.0); } diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h index 10fd0b20..bfaaa026 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h @@ -104,7 +104,7 @@ public: MidiMessage (const MidiMessage&, double newTimeStamp); /** Destructor. */ - ~MidiMessage(); + ~MidiMessage() noexcept; /** Copies this message from another one. */ MidiMessage& operator= (const MidiMessage& other); @@ -118,7 +118,7 @@ public: /** Returns a pointer to the raw midi data. @see getRawDataSize */ - const uint8* getRawData() const noexcept { return allocatedData != nullptr ? allocatedData.getData() : preallocatedData.asBytes; } + const uint8* getRawData() const noexcept { return getData(); } /** Returns the number of bytes of data in the message. @see getRawData @@ -851,7 +851,7 @@ public: The value passed in must be 0x80 or higher. */ - static int getMessageLengthFromFirstByte (const uint8 firstByte) noexcept; + static int getMessageLengthFromFirstByte (uint8 firstByte) noexcept; //============================================================================== /** Returns the name of a midi note number. @@ -878,7 +878,7 @@ public: The frequencyOfA parameter is an optional frequency for 'A', normally 440-444Hz for concert pitch. @see getMidiNoteName */ - static double getMidiNoteInHertz (int noteNumber, const double frequencyOfA = 440.0) noexcept; + static double getMidiNoteInHertz (int noteNumber, double frequencyOfA = 440.0) noexcept; /** Returns true if the given midi note number is a black key. */ static bool isMidiNoteBlack (int noteNumber) noexcept; @@ -905,21 +905,29 @@ public: */ static const char* getControllerName (int controllerNumber); + /** Converts a floating-point value between 0 and 1 to a MIDI 7-bit value between 0 and 127. */ + static uint8 floatValueToMidiByte (float valueBetween0and1) noexcept; + + /** Converts a pitchbend value in semitones to a MIDI 14-bit pitchwheel position value. */ + static uint16 pitchbendToPitchwheelPos (float pitchbendInSemitones, + float pitchbendRangeInSemitones) noexcept; + private: //============================================================================== - double timeStamp; - HeapBlock allocatedData; - int size; - #ifndef DOXYGEN - union + union PackedData { - uint8 asBytes[4]; - uint32 asInt32; - } preallocatedData; + uint8* allocatedData; + uint8 asBytes[sizeof (uint8*)]; + }; + + PackedData packedData; + double timeStamp; + int size; #endif - inline uint8* getData() noexcept { return allocatedData != nullptr ? allocatedData.getData() : preallocatedData.asBytes; } + inline bool isHeapAllocated() const noexcept { return size > (int) sizeof (packedData); } + inline uint8* getData() const noexcept { return isHeapAllocated() ? packedData.allocatedData : (uint8*) packedData.asBytes; } uint8* allocateSpace (int); }; diff --git a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h index 2f55e2da..3e04245d 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessageSequence.h @@ -48,6 +48,18 @@ public: /** Replaces this sequence with another one. */ MidiMessageSequence& operator= (const MidiMessageSequence&); + #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS + MidiMessageSequence (MidiMessageSequence&& other) noexcept + : list (static_cast&&> (other.list)) + {} + + MidiMessageSequence& operator= (MidiMessageSequence&& other) noexcept + { + list = static_cast&&> (other.list); + return *this; + } + #endif + /** Destructor. */ ~MidiMessageSequence(); diff --git a/modules/juce_audio_basics/mpe/juce_MPEZone.h b/modules/juce_audio_basics/mpe/juce_MPEZone.h index d9d6c3ec..c677d3c4 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEZone.h +++ b/modules/juce_audio_basics/mpe/juce_MPEZone.h @@ -69,27 +69,35 @@ struct JUCE_API MPEZone int perNotePitchbendRange = 48, int masterPitchbendRange = 2) noexcept; - /* Returns the MIDI master channel of this zone. */ + /* Returns the MIDI master channel number (in the range 1-16) of this zone. */ int getMasterChannel() const noexcept; /** Returns the number of note channels occupied by this zone. */ int getNumNoteChannels() const noexcept; - /* Returns the MIDI channel number of the lowest-numbered note channel of this zone. */ + /* Returns the MIDI channel number (in the range 1-16) of the + lowest-numbered note channel of this zone. + */ int getFirstNoteChannel() const noexcept; - /* Returns the MIDI channel number of the highest-numbered note channel of this zone. */ + /* Returns the MIDI channel number (in the range 1-16) of the + highest-numbered note channel of this zone. + */ int getLastNoteChannel() const noexcept; - /** Returns the MIDI channel numbers of the note channels of this zone as a Range. */ + /** Returns the MIDI channel numbers (in the range 1-16) of the + note channels of this zone as a Range. + */ Range getNoteChannelRange() const noexcept; /** Returns true if the MIDI channel (in the range 1-16) is used by this zone - either as a note channel or as the master channel; false otherwise. */ + either as a note channel or as the master channel; false otherwise. + */ bool isUsingChannel (int channel) const noexcept; /** Returns true if the MIDI channel (in the range 1-16) is used by this zone - as a note channel; false otherwise. */ + as a note channel; false otherwise. + */ bool isUsingChannelAsNoteChannel (int channel) const noexcept; /** Returns the per-note pitchbend range in semitones set for this zone. */ diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index e70ae7c1..25678d7b 100755 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -346,8 +346,8 @@ String AudioDeviceManager::initialiseFromXML (const XmlElement& xml, currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName(); } - setup.bufferSize = xml.getIntAttribute ("audioDeviceBufferSize"); - setup.sampleRate = xml.getDoubleAttribute ("audioDeviceRate"); + setup.bufferSize = xml.getIntAttribute ("audioDeviceBufferSize", setup.bufferSize); + setup.sampleRate = xml.getDoubleAttribute ("audioDeviceRate", setup.sampleRate); setup.inputChannels .parseString (xml.getStringAttribute ("audioDeviceInChans", "11"), 2); setup.outputChannels.parseString (xml.getStringAttribute ("audioDeviceOutChans", "11"), 2); diff --git a/modules/juce_audio_devices/juce_audio_devices.h b/modules/juce_audio_devices/juce_audio_devices.h index 66d6b32c..a342c9cb 100644 --- a/modules/juce_audio_devices/juce_audio_devices.h +++ b/modules/juce_audio_devices/juce_audio_devices.h @@ -33,7 +33,7 @@ ID: juce_audio_devices vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE audio and MIDI I/O device classes description: Classes to play and record from audio and MIDI I/O devices website: http://www.juce.com/juce diff --git a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h index 62eb5346..28ba6672 100644 --- a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h +++ b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h @@ -71,8 +71,7 @@ public: // the normal message, handle it now.. if (*d >= 0xf8 && *d <= 0xfe) { - const MidiMessage m (*d++, time); - callback.handleIncomingMidiMessage (input, m); + callback.handleIncomingMidiMessage (input, MidiMessage (*d++, time)); --numBytes; } else @@ -83,7 +82,15 @@ public: data[len++] = *d++; --numBytes; - if (len >= MidiMessage::getMessageLengthFromFirstByte (data[0])) + const uint8 firstByte = data[0]; + + if (firstByte < 0x80 || firstByte == 0xf7) + { + len = 0; + break; // ignore this malformed MIDI message.. + } + + if (len >= MidiMessage::getMessageLengthFromFirstByte (firstByte)) break; } } diff --git a/modules/juce_audio_devices/native/juce_ios_Audio.cpp b/modules/juce_audio_devices/native/juce_ios_Audio.cpp index f0da9809..d4734a0e 100644 --- a/modules/juce_audio_devices/native/juce_ios_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_ios_Audio.cpp @@ -287,7 +287,14 @@ public: return r; } - int getDefaultBufferSize() override { return 256; } + int getDefaultBufferSize() override + { + #if TARGET_IPHONE_SIMULATOR + return 512; + #else + return 256; + #endif + } String open (const BigInteger& inputChannelsWanted, const BigInteger& outputChannelsWanted, @@ -682,14 +689,20 @@ private: UInt32 framesPerSlice; UInt32 dataSize = sizeof (framesPerSlice); - if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &framesPerSlice, &dataSize) == noErr - && dataSize == sizeof (framesPerSlice) && framesPerSlice != actualBufferSize) + AudioUnitInitialize (audioUnit); + + AudioUnitSetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, 0, &actualBufferSize, sizeof (actualBufferSize)); + + + if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, + kAudioUnitScope_Global, 0, &framesPerSlice, &dataSize) == noErr + && dataSize == sizeof (framesPerSlice) && static_cast (framesPerSlice) != actualBufferSize) { - actualBufferSize = framesPerSlice; + actualBufferSize = static_cast (framesPerSlice); prepareFloatBuffers (actualBufferSize); } - AudioUnitInitialize (audioUnit); return true; } diff --git a/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp b/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp index 1a06a894..0285726b 100644 --- a/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp +++ b/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp @@ -290,6 +290,8 @@ public: } } + updateActivePorts(); + return lastError; } diff --git a/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm b/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm index 1ef5bd3e..a67d3cf5 100644 --- a/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm +++ b/modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm @@ -137,8 +137,7 @@ AudioCDReader* AudioCDReader::createReaderForCD (const int index) AudioCDReader::AudioCDReader (const File& volume) : AudioFormatReader (0, "CD Audio"), volumeDir (volume), - currentReaderTrack (-1), - reader (0) + currentReaderTrack (-1) { sampleRate = 44100.0; bitsPerSample = 16; diff --git a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp index cbe963f5..542b3dbc 100644 --- a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp +++ b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp @@ -365,17 +365,18 @@ public: void updateSampleRates() { // find a list of sample rates.. - const int possibleSampleRates[] = { 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 }; Array newRates; if (asioObject != nullptr) { + const int possibleSampleRates[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 }; + for (int index = 0; index < numElementsInArray (possibleSampleRates); ++index) if (asioObject->canSampleRate ((double) possibleSampleRates[index]) == 0) newRates.add ((double) possibleSampleRates[index]); } - if (newRates.size() == 0) + if (newRates.isEmpty()) { double cr = getSampleRate(); JUCE_ASIO_LOG ("No sample rates supported - current rate: " + String ((int) cr)); diff --git a/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp index 2afebbed..dd3d5254 100644 --- a/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp @@ -24,6 +24,66 @@ #if JUCE_USE_FLAC +} + +#if defined _WIN32 && !defined __CYGWIN__ + #include +#else + #include +#endif + +#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ + #include /* for off_t */ +#endif + +#if HAVE_INTTYPES_H + #define __STDC_FORMAT_MACROS + #include +#endif + +#if defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ || defined __EMX__ + #include /* for _setmode(), chmod() */ + #include /* for _O_BINARY */ +#else + #include /* for chown(), unlink() */ +#endif + +#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__ + #if defined __BORLANDC__ + #include /* for utime() */ + #else + #include /* for utime() */ + #endif +#else + #include /* some flavors of BSD (like OS X) require this to get time_t */ + #include /* for utime() */ +#endif + +#if defined _MSC_VER + #if _MSC_VER >= 1600 + #include + #else + #include + #endif +#endif + +#ifdef _WIN32 + #include + #include + #include + #include +#endif + +#ifdef DEBUG + #include +#endif + +#include +#include + +namespace juce +{ + namespace FlacNamespace { #if JUCE_INCLUDE_FLAC_CODE || ! defined (JUCE_INCLUDE_FLAC_CODE) @@ -62,7 +122,7 @@ namespace FlacNamespace #define FLAC__HAS_X86INTRIN 1 #endif - #undef __STDC_LIMIT_MACROS +#undef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #define flac_max jmax #define flac_min jmin diff --git a/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp index 1351a453..52535970 100644 --- a/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp @@ -656,7 +656,10 @@ namespace WavFileHelpers if (infoLength > 0) { - infoLength = jlimit ((int64) 0, infoLength, (int64) input.readInt()); + infoLength = jmin (infoLength, (int64) input.readInt()); + + if (infoLength <= 0) + return; for (int i = 0; i < numElementsInArray (types); ++i) { diff --git a/modules/juce_audio_formats/juce_audio_formats.h b/modules/juce_audio_formats/juce_audio_formats.h index 4990620c..ee94ceed 100644 --- a/modules/juce_audio_formats/juce_audio_formats.h +++ b/modules/juce_audio_formats/juce_audio_formats.h @@ -33,7 +33,7 @@ ID: juce_audio_formats vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE audio file format codecs description: Classes for reading and writing various audio file formats. website: http://www.juce.com/juce diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h b/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h new file mode 100644 index 00000000..db3ae30f --- /dev/null +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h @@ -0,0 +1,41 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2016 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_AAX_MODIFIER_INJECTOR_H_INCLUDED +#define JUCE_AAX_MODIFIER_INJECTOR_H_INCLUDED + +struct ModifierKeyProvider +{ + virtual ~ModifierKeyProvider() {} + virtual int getWin32Modifiers() const = 0; +}; + +struct ModifierKeyReceiver +{ + virtual ~ModifierKeyReceiver() {} + virtual void setModifierKeyProvider (ModifierKeyProvider* provider) = 0; + virtual void removeModifierKeyProvider () = 0; +}; + +#endif \ No newline at end of file diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index 5ddbfed9..d6722ae0 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -93,22 +93,30 @@ #undef check +namespace juce +{ + #include "juce_AAX_Modifier_Injector.h" +} + const int32_t juceChunkType = 'juce'; const int maxAAXChannels = 8; -JUCE_DEFINE_WRAPPER_TYPE (wrapperType_AAX); - //============================================================================== struct AAXClasses { - static void check (AAX_Result result) + static int32 getAAXParamHash (AAX_CParamID paramID) noexcept { - jassert (result == AAX_SUCCESS); ignoreUnused (result); + int32 result = 0; + + while (*paramID != 0) + result = (31 * result) + (*paramID++); + + return result; } - static int getParamIndexFromID (AAX_CParamID paramID) noexcept + static void check (AAX_Result result) { - return atoi (paramID); + jassert (result == AAX_SUCCESS); ignoreUnused (result); } static bool isBypassParam (AAX_CParamID paramID) noexcept @@ -323,7 +331,7 @@ struct AAXClasses #endif //============================================================================== - class JuceAAX_GUI : public AAX_CEffectGUI + class JuceAAX_GUI : public AAX_CEffectGUI, public ModifierKeyProvider { public: JuceAAX_GUI() {} @@ -356,6 +364,9 @@ struct AAXClasses { component->setVisible (true); component->addToDesktop (0, nativeViewToAttachTo); + + if (ModifierKeyReceiver* modReceiver = dynamic_cast (component->getPeer())) + modReceiver->setModifierKeyProvider (this); } } } @@ -366,6 +377,9 @@ struct AAXClasses { JUCE_AUTORELEASEPOOL { + if (ModifierKeyReceiver* modReceiver = dynamic_cast (component->getPeer())) + modReceiver->removeModifierKeyProvider(); + component->removeFromDesktop(); component = nullptr; } @@ -409,7 +423,41 @@ struct AAXClasses return AAX_ERROR_NULL_OBJECT; } + int getWin32Modifiers() const override + { + int modifierFlags = 0; + + if (const AAX_IViewContainer* viewContainer = GetViewContainer()) + { + uint32 aaxViewMods = 0; + const_cast(viewContainer)->GetModifiers (&aaxViewMods); + + if ((aaxViewMods & AAX_eModifiers_Shift) != 0) modifierFlags |= ModifierKeys::shiftModifier; + if ((aaxViewMods & AAX_eModifiers_Alt ) != 0) modifierFlags |= ModifierKeys::altModifier; + } + + return modifierFlags; + } + private: + //============================================================================== + inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept + { + if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) + return params->getParamIndexFromID (paramID); + + return -1; + } + + inline AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept + { + if (const JuceAAX_Processor* params = dynamic_cast (GetEffectParameters())) + return params->getAAXParamIDFromJuceIndex (index); + + return nullptr; + } + + //============================================================================== struct ContentWrapperComponent : public Component { ContentWrapperComponent (JuceAAX_GUI& gui, AudioProcessor& plugin) @@ -449,11 +497,12 @@ struct AAXClasses { const int parameterIndex = pluginEditor->getControlParameterIndex (*e.eventComponent); - if (parameterIndex >= 0) + if (AAX_CParamID aaxParamID = owner.getAAXParamIDFromJuceIndex (parameterIndex)) { uint32_t mods = 0; vc->GetModifiers (&mods); - (vc->*method) (IndexAsParamID (parameterIndex), mods); + + (vc->*method) (aaxParamID, mods); } } } @@ -498,7 +547,7 @@ struct AAXClasses { public: JuceAAX_Processor() : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_AAX)), - busUtils (*pluginInstance, false, maxAAXChannels), + isPrepared (false), busUtils (*pluginInstance, false, maxAAXChannels), sampleRate (0), lastBufferSize (1024), maxBufferSize (1024), hasSidechain (false) { @@ -512,10 +561,21 @@ struct AAXClasses static AAX_CEffectParameters* AAX_CALLBACK Create() { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_AAX); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX; return new JuceAAX_Processor(); } + AAX_Result Uninitialize() override + { + if (isPrepared && pluginInstance != nullptr) + { + isPrepared = false; + pluginInstance->releaseResources(); + } + + return AAX_CEffectParameters::Uninitialize(); + } + AAX_Result EffectInit() override { AAX_Result err; @@ -606,7 +666,7 @@ struct AAXClasses const int numParameters = pluginInstance->getNumParameters(); for (int i = 0; i < numParameters; ++i) - SetParameterNormalizedValue (IndexAsParamID (i), (double) pluginInstance->getParameter(i)); + SetParameterNormalizedValue (getAAXParamIDFromJuceIndex (i), (double) pluginInstance->getParameter(i)); return AAX_SUCCESS; } @@ -844,7 +904,7 @@ struct AAXClasses void audioProcessorParameterChanged (AudioProcessor* /*processor*/, int parameterIndex, float newValue) override { - SetParameterNormalizedValue (IndexAsParamID (parameterIndex), (double) newValue); + SetParameterNormalizedValue (getAAXParamIDFromJuceIndex (parameterIndex), (double) newValue); } void audioProcessorChanged (AudioProcessor* processor) override @@ -855,12 +915,12 @@ struct AAXClasses void audioProcessorParameterChangeGestureBegin (AudioProcessor* /*processor*/, int parameterIndex) override { - TouchParameter (IndexAsParamID (parameterIndex)); + TouchParameter (getAAXParamIDFromJuceIndex (parameterIndex)); } void audioProcessorParameterChangeGestureEnd (AudioProcessor* /*processor*/, int parameterIndex) override { - ReleaseParameter (IndexAsParamID (parameterIndex)); + ReleaseParameter (getAAXParamIDFromJuceIndex (parameterIndex)); } AAX_Result NotificationReceived (AAX_CTypeID type, const void* data, uint32_t size) override @@ -935,6 +995,8 @@ struct AAXClasses bool supportsSidechain() const noexcept { return hasSidechain; }; private: + friend class JuceAAX_GUI; + void process (float* const* channels, const int numChans, const int bufferSize, const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodesOut) { @@ -1030,14 +1092,27 @@ struct AAXClasses void addAudioProcessorParameters() { AudioProcessor& audioProcessor = getPluginInstance(); + const int numParameters = audioProcessor.getNumParameters(); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + const bool usingManagedParameters = false; + #else + const bool usingManagedParameters = (audioProcessor.getParameters().size() == numParameters); + #endif + for (int parameterIndex = 0; parameterIndex < numParameters; ++parameterIndex) { + aaxParamIDs.add (usingManagedParameters ? audioProcessor.getParameterID (parameterIndex) + : String (parameterIndex)); + AAX_CString paramName (audioProcessor.getParameterName (parameterIndex, 31).toRawUTF8()); + AAX_CParamID paramID = aaxParamIDs.getReference (parameterIndex).getCharPointer(); + + paramMap.set (AAXClasses::getAAXParamHash (paramID), parameterIndex); AAX_IParameter* parameter - = new AAX_CParameter (IndexAsParamID (parameterIndex), + = new AAX_CParameter (paramID, paramName, audioProcessor.getParameterDefaultValue (parameterIndex), AAX_CLinearTaperDelegate(), @@ -1064,6 +1139,7 @@ struct AAXClasses AAX_Result preparePlugin() { AudioProcessor& audioProcessor = getPluginInstance(); + bool hasSomethingChanged = false; #if JucePlugin_IsMidiEffect // MIDI effect plug-ins do not support any audio channels @@ -1081,39 +1157,74 @@ struct AAXClasses if ( (inputSet == AudioChannelSet::disabled() && inputStemFormat != AAX_eStemFormat_None) || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None)) + { + if (isPrepared) + { + isPrepared = false; + audioProcessor.releaseResources(); + } + return AAX_ERROR_UNIMPLEMENTED; + } + bool success = true; if (busUtils.getBusCount (true) > 0) - success = audioProcessor.setPreferredBusArrangement (true, 0, inputSet); + success = setPreferredBusArrangement (busUtils, true, 0, inputSet, hasSomethingChanged); if (success && busUtils.getBusCount (false) > 0) - success = audioProcessor.setPreferredBusArrangement (false, 0, outputSet); + success = setPreferredBusArrangement (busUtils, false, 0, outputSet, hasSomethingChanged); // This should never happen as the plugin reported that this layout is supported jassert (success); - hasSidechain = enableAuxBusesForCurrentFormat (busUtils, inputSet, outputSet); - if (hasSidechain) + hasSidechain = enableAuxBusesForCurrentFormat (busUtils, inputSet, outputSet, hasSomethingChanged); + if (hasSidechain && hasSomethingChanged) sideChainBuffer.realloc (static_cast (maxBufferSize)); // recheck the format if ( (busUtils.getBusCount (true) > 0 && busUtils.getChannelSet (true, 0) != inputSet) || (busUtils.getBusCount (false) > 0 && busUtils.getChannelSet (false, 0) != outputSet) || (hasSidechain && busUtils.getNumChannels(true, 1) != 1)) + { + if (isPrepared) + { + isPrepared = false; + audioProcessor.releaseResources(); + } + return AAX_ERROR_UNIMPLEMENTED; + } - rebuildChannelMapArrays (true); - rebuildChannelMapArrays (false); + if (hasSomethingChanged) + { + rebuildChannelMapArrays (true); + rebuildChannelMapArrays (false); + } #endif - audioProcessor.setRateAndBufferSizeDetails (sampleRate, maxBufferSize); - audioProcessor.prepareToPlay (sampleRate, lastBufferSize); - maxBufferSize = lastBufferSize; + hasSomethingChanged = (sampleRate != audioProcessor.getSampleRate() + || maxBufferSize != lastBufferSize + || hasSomethingChanged); + + if (hasSomethingChanged || (! isPrepared)) + { + if (isPrepared) + { + isPrepared = false; + audioProcessor.releaseResources(); + } + + audioProcessor.setRateAndBufferSizeDetails (sampleRate, lastBufferSize); + audioProcessor.prepareToPlay (sampleRate, lastBufferSize); + maxBufferSize = lastBufferSize; + } check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples())); + isPrepared = true; + return AAX_SUCCESS; } @@ -1141,9 +1252,24 @@ struct AAXClasses } } + //============================================================================== + inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept + { + return paramMap [AAXClasses::getAAXParamHash (paramID)]; + } + + inline AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept + { + if (! isPositiveAndBelow (index, aaxParamIDs.size())) return nullptr; + + return aaxParamIDs.getReference (index).getCharPointer(); + } + + //============================================================================== ScopedJuceInitialiser_GUI libraryInitialiser; ScopedPointer pluginInstance; + bool isPrepared; PluginBusUtilities busUtils; MidiBuffer midiBuffer; Array channelList; @@ -1154,6 +1280,9 @@ struct AAXClasses HeapBlock sideChainBuffer; Array inputLayoutMap, outputLayoutMap; + Array aaxParamIDs; + HashMap paramMap; + struct ChunkMemoryBlock : public ReferenceCountedObject { juce::MemoryBlock data; @@ -1173,36 +1302,6 @@ struct AAXClasses JUCE_DECLARE_NON_COPYABLE (JuceAAX_Processor) }; - //============================================================================== - struct IndexAsParamID - { - inline explicit IndexAsParamID (int i) noexcept : index (i) {} - - operator AAX_CParamID() noexcept - { - jassert (index >= 0); - - char* t = name + sizeof (name); - *--t = 0; - int v = index; - - do - { - *--t = (char) ('0' + (v % 10)); - v /= 10; - - } while (v > 0); - - return static_cast (t); - } - - private: - int index; - char name[32]; - - JUCE_DECLARE_NON_COPYABLE (IndexAsParamID) - }; - //============================================================================== struct AAXFormatConfiguration { @@ -1245,7 +1344,8 @@ struct AAXClasses } static bool enableAuxBusesForCurrentFormat (PluginBusUtilities& busUtils, const AudioChannelSet& inputLayout, - const AudioChannelSet& outputLayout) + const AudioChannelSet& outputLayout, + bool& hasSomethingChanged) { const int numOutBuses = busUtils.getBusCount (false); const int numInputBuses = busUtils.getBusCount(true); @@ -1263,7 +1363,7 @@ struct AAXClasses if (layout == AudioChannelSet::disabled()) { layout = busUtils.getDefaultLayoutForBus (false, busIdx); - busUtils.processor.setPreferredBusArrangement (false, busIdx, layout); + setPreferredBusArrangement (busUtils, false, busIdx, layout, hasSomethingChanged); } } @@ -1271,15 +1371,17 @@ struct AAXClasses bool success = true; if (numInputBuses > 0) - success = busUtils.processor.setPreferredBusArrangement (true, 0, inputLayout); + success = setPreferredBusArrangement (busUtils, true, 0, inputLayout, hasSomethingChanged); if (success) - success = busUtils.processor.setPreferredBusArrangement (false, 0, outputLayout); + success = setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged); // was the above successful if (success && (numInputBuses == 0 || busUtils.getChannelSet (true, 0) == inputLayout) && busUtils.getChannelSet (false, 0) == outputLayout) layoutRestorer.release(); + else + hasSomethingChanged = true; } // does the plug-in have side-chain support? Check the following: @@ -1293,10 +1395,12 @@ struct AAXClasses const AudioChannelSet set = busUtils.getDefaultLayoutForChannelNumAndBus (true, 1, 1); if (! set.isDisabled()) - hasSidechain = busUtils.processor.setPreferredBusArrangement (true, 1, set); + hasSidechain = setPreferredBusArrangement (busUtils, true, 1, set, hasSomethingChanged); if (! hasSidechain) - success = busUtils.processor.setPreferredBusArrangement (true, 1, AudioChannelSet::disabled()); + success = setPreferredBusArrangement (busUtils, true, 1, + AudioChannelSet::disabled(), + hasSomethingChanged); // AAX requires your processor's first sidechain to be either mono or that // it can be disabled @@ -1305,7 +1409,9 @@ struct AAXClasses // disable all other input buses for (int busIdx = 2; busIdx < numInputBuses; ++busIdx) { - success = busUtils.processor.setPreferredBusArrangement (true, busIdx, AudioChannelSet::disabled()); + success = setPreferredBusArrangement (busUtils, true, busIdx, + AudioChannelSet::disabled(), + hasSomethingChanged); // AAX can only have a single side-chain input. Therefore, your processor must either // only have a single side-chain input or allow disabling all other side-chains @@ -1315,21 +1421,34 @@ struct AAXClasses if (hasSidechain) { if (busUtils.getBusCount (false) == 0 || busUtils.getBusCount (true) == 0 || - (busUtils.getChannelSet (true, 0) == inputLayout && busUtils.getChannelSet (false, 0) == outputLayout)) + (busUtils.getChannelSet (true, 0) == inputLayout && busUtils.getChannelSet (false, 0) == outputLayout)) return true; // restore the old layout if (busUtils.getBusCount(true) > 0) - busUtils.processor.setPreferredBusArrangement (true, 0, inputLayout); + setPreferredBusArrangement (busUtils, true, 0, inputLayout, hasSomethingChanged); if (busUtils.getBusCount (false) > 0) - busUtils.processor.setPreferredBusArrangement (false, 0, outputLayout); + setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged); } } return false; } + // wrap setPreferredBusArrangement calls with this to prevent excessive calls to the plug-in + static bool setPreferredBusArrangement (PluginBusUtilities& busUtils, bool isInput, int busIdx, + const AudioChannelSet& layout, + bool& didChangePlugin) + { + // no need to do anything + if (busUtils.getChannelSet (isInput, busIdx) == layout) + return true; + + didChangePlugin = true; + return busUtils.processor.setPreferredBusArrangement (isInput, busIdx, layout); + } + //============================================================================== static void createDescriptor (AAX_IComponentDescriptor& desc, int configIndex, PluginBusUtilities& busUtils, const AudioChannelSet& inputLayout, const AudioChannelSet& outputLayout, @@ -1392,7 +1511,8 @@ struct AAXClasses properties->AddProperty (AAX_eProperty_SupportsSaveRestore, false); #endif - if (enableAuxBusesForCurrentFormat (busUtils, inputLayout, outputLayout)) + bool ignore; + if (enableAuxBusesForCurrentFormat (busUtils, inputLayout, outputLayout, ignore)) { check (desc.AddSideChainIn (JUCEAlgorithmIDs::sideChainBuffers)); properties->AddProperty (AAX_eProperty_SupportsSideChainInput, true); @@ -1427,7 +1547,7 @@ struct AAXClasses static void getPlugInDescription (AAX_IEffectDescriptor& descriptor) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_AAX); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX; ScopedPointer plugin = createPluginFilterOfType (AudioProcessor::wrapperType_AAX); PluginBusUtilities busUtils (*plugin, false, maxAAXChannels); @@ -1454,7 +1574,7 @@ struct AAXClasses #if JucePlugin_IsMidiEffect // MIDI effect plug-ins do not support any audio channels - jassert (getBusCount (true) == 0 && getBusCount (false) == 0); + jassert (busUtils.getBusCount (true) == 0 && busUtils.getBusCount (false) == 0); if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor()) { diff --git a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp index f7d7d117..7410b864 100644 --- a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp @@ -46,8 +46,6 @@ #pragma clang diagnostic ignored "-Wcomment" #endif -JUCE_DEFINE_WRAPPER_TYPE (wrapperType_RTAS); - /* Note about include paths ------------------------ @@ -479,8 +477,19 @@ public: AddControl (new CPluginControl_OnOff ('bypa', "Master Bypass\nMastrByp\nMByp\nByp", false, true)); DefineMasterBypassControlIndex (bypassControlIndex); - for (int i = 0; i < juceFilter->getNumParameters(); ++i) - AddControl (new JucePluginControl (*juceFilter, i)); + const int numParameters = juceFilter->getNumParameters(); + + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + const bool usingManagedParameters = false; + #else + const bool usingManagedParameters = (juceFilter->getParameters().size() == numParameters); + #endif + + for (int i = 0; i < numParameters; ++i) + { + OSType rtasParamID = static_cast (usingManagedParameters ? juceFilter->getParameterID (i).hashCode() : i); + AddControl (new JucePluginControl (*juceFilter, i, rtasParamID)); + } // we need to do this midi log-in to get timecode, regardless of whether // the plugin actually uses midi... @@ -816,14 +825,14 @@ private: { public: //============================================================================== - JucePluginControl (AudioProcessor& p, const int i) - : processor (p), index (i) + JucePluginControl (AudioProcessor& p, const int i, OSType rtasParamID) + : processor (p), index (i), paramID (rtasParamID) { CPluginControl::SetValue (GetDefaultValue()); } //============================================================================== - OSType GetID() const { return index + 1; } + OSType GetID() const { return paramID; } long GetDefaultValue() const { return floatToLong (processor.getParameterDefaultValue (index)); } void SetDefaultValue (long) {} long GetNumSteps() const { return processor.getParameterNumSteps (index); } @@ -868,6 +877,7 @@ private: //============================================================================== AudioProcessor& processor; const int index; + const OSType paramID; JUCE_DECLARE_NON_COPYABLE (JucePluginControl) }; @@ -946,7 +956,7 @@ private: #if JUCE_WINDOWS Process::setCurrentModuleInstanceHandle (gThisModule); #endif - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_RTAS); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_RTAS; initialiseJuce_GUI(); return new JucePlugInProcess(); diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp index 1eb2acb3..647346ca 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp @@ -35,8 +35,6 @@ #include #include -JUCE_DEFINE_WRAPPER_TYPE (wrapperType_Standalone); - // You can set this flag in your build if you need to specify a different // standalone JUCEApplication class for your app to use. If you don't // set it then by default we'll just create a simple one as below. @@ -55,7 +53,7 @@ class StandaloneFilterApp : public JUCEApplication public: StandaloneFilterApp() { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_Standalone); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Standalone; } const String getApplicationName() override { return JucePlugin_Name; } @@ -91,10 +89,8 @@ public: quit(); } -private: +protected: ScopedPointer mainWindow; }; -START_JUCE_APPLICATION (StandaloneFilterApp); - #endif diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index 60c88e3f..d1f3ea03 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -83,8 +83,8 @@ public: jassert (processor != nullptr); // Your createPluginFilter() function must return a valid object! // try to disable sidechain and aux buses - const int numInBuses = processor->busArrangement.inputBuses.size(); - const int numOutBuses = processor->busArrangement.inputBuses.size(); + const int numInBuses = processor->busArrangement.inputBuses. size(); + const int numOutBuses = processor->busArrangement.outputBuses.size(); for (int busIdx = 1; busIdx < numInBuses; ++busIdx) processor->setPreferredBusArrangement (true, busIdx, AudioChannelSet::disabled()); diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 2d9ffdfd..7d671525 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -111,8 +111,6 @@ class JuceVSTWrapper; static bool recursionCheck = false; -JUCE_DEFINE_WRAPPER_TYPE (wrapperType_VST); - namespace juce { #if JUCE_MAC @@ -272,11 +270,13 @@ public: firstProcessCallback (true), shouldDeleteEditor (false), #if JUCE_64BIT - useNSView (true), + useNSView (true) #else - useNSView (false), + useNSView (false) + #endif + #if ! JUCE_IOS + , hostWindow (0) #endif - hostWindow (0) { busUtils.init(); @@ -343,7 +343,9 @@ public: delete filter; filter = nullptr; + #if ! JUCE_IOS jassert (editorComp == 0); + #endif deleteTempChannels(); @@ -386,13 +388,13 @@ public: //============================================================================== bool getEffectName (char* name) override { - String (JucePlugin_Name).copyToUTF8 (name, 64); + String (JucePlugin_Name).copyToUTF8 (name, 64 + 1); return true; } bool getVendorString (char* text) override { - String (JucePlugin_Manufacturer).copyToUTF8 (text, 64); + String (JucePlugin_Manufacturer).copyToUTF8 (text, 64 + 1); return true; } @@ -822,14 +824,14 @@ public: void getProgramName (char* name) override { if (filter != nullptr) - filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 (name, 24); + filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 (name, 24 + 1); } bool getProgramNameIndexed (VstInt32 /*category*/, VstInt32 index, char* text) override { if (filter != nullptr && isPositiveAndBelow (index, filter->getNumPrograms())) { - filter->getProgramName (index).copyToUTF8 (text, 24); + filter->getProgramName (index).copyToUTF8 (text, 24 + 1); return true; } @@ -860,7 +862,7 @@ public: if (filter != nullptr) { jassert (isPositiveAndBelow (index, filter->getNumParameters())); - filter->getParameterText (index, 24).copyToUTF8 (text, 24); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. + filter->getParameterText (index, 24).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. } } @@ -885,7 +887,7 @@ public: if (filter != nullptr) { jassert (isPositiveAndBelow (index, filter->getNumParameters())); - filter->getParameterName (index, 16).copyToUTF8 (text, 16); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. + filter->getParameterName (index, 16).copyToUTF8 (text, 16 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. } } @@ -894,7 +896,7 @@ public: if (filter != nullptr) { jassert (isPositiveAndBelow (index, filter->getNumParameters())); - filter->getParameterLabel (index).copyToUTF8 (text, 24); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. + filter->getParameterLabel (index).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. } } @@ -1064,8 +1066,8 @@ public: String channelName = busInfo.name + String (" ") + abbvChannelName; - channelName.copyToUTF8 (properties.label, (size_t) (kVstMaxLabelLen - 1)); - channelName.copyToUTF8 (properties.shortLabel, (size_t) (kVstMaxShortLabelLen - 1)); + channelName.copyToUTF8 (properties.label, (size_t) (kVstMaxLabelLen + 1)); + channelName.copyToUTF8 (properties.shortLabel, (size_t) (kVstMaxShortLabelLen + 1)); properties.flags = kVstPinUseSpeaker | kVstPinIsActive; properties.arrangementType = SpeakerMappings::channelSetToVstArrangementType (busInfo.channels); @@ -1331,6 +1333,7 @@ public: void createEditorComp() { + #if ! JUCE_IOS if (hasShutdown || filter == nullptr) return; @@ -1349,12 +1352,16 @@ public: cEffect.flags &= ~effFlagsHasEditor; } } + #endif shouldDeleteEditor = false; } void deleteEditor (bool canDeleteLaterIfModal) { + #if JUCE_IOS + ignoreUnused (canDeleteLaterIfModal); + #else JUCE_AUTORELEASEPOOL { PopupMenu::dismissAllActiveMenus(); @@ -1396,6 +1403,7 @@ public: hostWindow = 0; #endif } + #endif } VstIntPtr dispatcher (VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt) override @@ -1403,6 +1411,7 @@ public: if (hasShutdown) return 0; + #if ! JUCE_IOS if (opCode == effEditIdle) { doIdleCallback(); @@ -1432,7 +1441,7 @@ public: hostWindow = (Window) ptr; Window editorWnd = (Window) editorComp->getWindowHandle(); XReparentWindow (display, editorWnd, hostWindow, 0, 0); - #else + #elif JUCE_MAC hostWindow = attachComponentToWindowRefVST (editorComp, ptr, useNSView); #endif editorComp->setVisible (true); @@ -1467,10 +1476,11 @@ public: return 0; } - + #endif return AudioEffectX::dispatcher (opCode, index, value, ptr, opt); } + #if ! JUCE_IOS void resizeHostWindow (int newWidth, int newHeight) { if (editorComp != nullptr) @@ -1659,6 +1669,7 @@ public: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EditorCompWrapper) }; + #endif //============================================================================== private: @@ -1666,8 +1677,10 @@ private: PluginBusUtilities busUtils; juce::MemoryBlock chunkMemory; juce::uint32 chunkMemoryTime; + #if ! JUCE_IOS ScopedPointer editorComp; ERect editorSize; + #endif MidiBuffer midiEvents; VSTMidiEventList outgoingEvents; bool isProcessing, isBypassed, hasShutdown, isInSizeWindow, firstProcessCallback; @@ -1680,7 +1693,7 @@ private: void* hostWindow; #elif JUCE_LINUX Window hostWindow; - #else + #elif JUCE_WINDOWS HWND hostWindow; #endif @@ -1974,23 +1987,29 @@ namespace //============================================================================== // Mac startup code.. -#if JUCE_MAC +#if JUCE_MAC || JUCE_IOS JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster); JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; + #if JUCE_MAC initialiseMacVST(); + #endif + return pluginEntryPoint (audioMaster); } JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster); JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; + #if JUCE_MAC initialiseMacVST(); + #endif + return pluginEntryPoint (audioMaster); } @@ -2001,7 +2020,7 @@ namespace JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster); JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; SharedMessageThread::getInstance(); return pluginEntryPoint (audioMaster); @@ -2010,7 +2029,7 @@ namespace JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster) asm ("main"); JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; return VSTPluginMain (audioMaster); } @@ -2025,7 +2044,7 @@ namespace extern "C" __declspec (dllexport) AEffect* VSTPluginMain (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; return pluginEntryPoint (audioMaster); } @@ -2033,7 +2052,7 @@ namespace #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4) extern "C" __declspec (dllexport) int main (audioMasterCallback audioMaster) { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; return (int) pluginEntryPoint (audioMaster); } diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm index 55370bc9..929b31ea 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm @@ -23,6 +23,9 @@ */ #include "../../juce_core/system/juce_TargetPlatform.h" + +#if JUCE_MAC + #include "../utility/juce_CheckSettingMacros.h" #if JucePlugin_Build_VST || JucePlugin_Build_VST3 @@ -311,3 +314,4 @@ bool forwardCurrentKeyEventToHostVST (Component* comp, bool isNSView) } // (juce namespace) #endif +#endif diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 7dc6aa98..794f791a 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -27,7 +27,15 @@ //============================================================================== #if JucePlugin_Build_VST3 && (__APPLE_CPP__ || __APPLE_CC__ || _WIN32 || _WIN64) +#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS) + #undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY + #define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1 +#endif + #include "../../juce_audio_processors/format_types/juce_VST3Headers.h" + +#undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY + #include "../utility/juce_CheckSettingMacros.h" #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_WindowsHooks.h" @@ -55,8 +63,6 @@ #endif #endif -JUCE_DEFINE_WRAPPER_TYPE (wrapperType_VST3); - namespace juce { @@ -102,6 +108,8 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor) }; +class JuceVST3Component; + //============================================================================== class JuceVST3EditController : public Vst::EditController, public Vst::IMidiMapping, @@ -109,6 +117,9 @@ class JuceVST3EditController : public Vst::EditController, { public: JuceVST3EditController (Vst::IHostApplication* host) + #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS + : usingManagedParameter (false) + #endif { if (host != nullptr) host->queryInterface (FUnknown::iid, (void**) &hostContext); @@ -180,11 +191,18 @@ public: } //============================================================================== + enum InternalParameters + { + paramPreset = 0x70727374, // 'prst' + paramBypass = 0x62797073, // 'byps' + paramMidiControllerOffset = 0x6d636d00 // 'mdm*' + }; + struct Param : public Vst::Parameter { - Param (AudioProcessor& p, int index) : owner (p), paramIndex (index) + Param (AudioProcessor& p, int index, Vst::ParamID paramID) : owner (p), paramIndex (index) { - info.id = (Vst::ParamID) index; + info.id = paramID; toString128 (info.title, p.getParameterName (index)); toString128 (info.shortTitle, p.getParameterName (index, 8)); toString128 (info.units, p.getParameterLabel (index)); @@ -251,9 +269,9 @@ public: //============================================================================== struct BypassParam : public Vst::Parameter { - BypassParam (AudioProcessor& p, int index) : owner (p), paramIndex (index) + BypassParam (AudioProcessor& p, Vst::ParamID vstParamID) : owner (p) { - info.id = (Vst::ParamID) index; + info.id = vstParamID; toString128 (info.title, "Bypass"); toString128 (info.shortTitle, "Bypass"); toString128 (info.units, ""); @@ -329,11 +347,83 @@ public: private: AudioProcessor& owner; - int paramIndex; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BypassParam) }; + //============================================================================== + struct ProgramChangeParameter : public Vst::Parameter + { + ProgramChangeParameter (AudioProcessor& p) : owner (p) + { + jassert (owner.getNumPrograms() > 1); + + info.id = paramPreset; + toString128 (info.title, "Program"); + toString128 (info.shortTitle, "Program"); + toString128 (info.units, ""); + info.stepCount = owner.getNumPrograms() - 1; + info.defaultNormalizedValue = static_cast (owner.getCurrentProgram()) / static_cast (info.stepCount); + info.unitId = Vst::kRootUnitId; + info.flags = Vst::ParameterInfo::kIsProgramChange | Vst::ParameterInfo::kCanAutomate; + } + + virtual ~ProgramChangeParameter() {} + + bool setNormalized (Vst::ParamValue v) override + { + Vst::ParamValue program = v * info.stepCount; + + if (! isPositiveAndBelow ((int) program, owner.getNumPrograms())) + return false; + + if (valueNormalized != v) + { + valueNormalized = v; + changed(); + return true; + } + + return false; + } + + void toString (Vst::ParamValue value, Vst::String128 result) const override + { + Vst::ParamValue program = value * info.stepCount; + toString128 (result, owner.getProgramName ((int) program)); + } + + bool fromString (const Vst::TChar* text, Vst::ParamValue& outValueNormalized) const override + { + const String paramValueString (getStringFromVstTChars (text)); + + const int n = owner.getNumPrograms(); + for (int i = 0; i < n; ++i) + { + if (paramValueString == owner.getProgramName (i)) + { + outValueNormalized = static_cast (i) / info.stepCount; + return true; + } + } + + return false; + } + + static String getStringFromVstTChars (const Vst::TChar* text) + { + return juce::String (juce::CharPointer_UTF16 (reinterpret_cast (text))); + } + + Vst::ParamValue toPlain (Vst::ParamValue v) const override { return v * info.stepCount; } + Vst::ParamValue toNormalized (Vst::ParamValue v) const override { return v / info.stepCount; } + + private: + AudioProcessor& owner; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProgramChangeParameter) + }; + //============================================================================== tresult PLUGIN_API setComponentState (IBStream* stream) override { @@ -343,9 +433,13 @@ public: const int numParameters = pluginInstance->getNumParameters(); for (int i = 0; i < numParameters; ++i) - setParamNormalized ((Vst::ParamID) i, (double) pluginInstance->getParameter (i)); + setParamNormalized (getVSTParamIDForIndex (i), (double) pluginInstance->getParameter (i)); - setParamNormalized ((Vst::ParamID) numParameters, audioProcessor->isBypassed ? 1.0f : 0.0f); + setParamNormalized (bypassParamID, audioProcessor->isBypassed ? 1.0f : 0.0f); + + const int numPrograms = pluginInstance->getNumPrograms(); + if (numPrograms > 1) + setParamNormalized (paramPreset, static_cast (pluginInstance->getCurrentProgram()) / static_cast (numPrograms - 1)); } return Vst::EditController::setComponentState (stream); @@ -382,15 +476,15 @@ public: tresult PLUGIN_API getMidiControllerAssignment (Steinberg::int32 /*busIndex*/, Steinberg::int16 channel, Vst::CtrlNumber midiControllerNumber, Vst::ParamID& resultID) override { - resultID = (Vst::ParamID) midiControllerToParameter[channel][midiControllerNumber]; + resultID = midiControllerToParameter[channel][midiControllerNumber]; return kResultTrue; // Returning false makes some hosts stop asking for further MIDI Controller Assignments } // Converts an incoming parameter index to a MIDI controller: - bool getMidiControllerForParameter (int index, int& channel, int& ctrlNumber) + bool getMidiControllerForParameter (Vst::ParamID index, int& channel, int& ctrlNumber) { - const int mappedIndex = index - parameterToMidiControllerOffset; + const int mappedIndex = static_cast (index - parameterToMidiControllerOffset); if (isPositiveAndBelow (mappedIndex, numElementsInArray (parameterToMidiController))) { @@ -407,6 +501,13 @@ public: return false; } + inline bool isMidiControllerParamID (Vst::ParamID paramID) const noexcept + { + return (paramID >= parameterToMidiControllerOffset + && isPositiveAndBelow (paramID - parameterToMidiControllerOffset, + static_cast (numElementsInArray (parameterToMidiController)))); + } + //============================================================================== IPlugView* PLUGIN_API createView (const char* name) override { @@ -423,19 +524,26 @@ public: } //============================================================================== - void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override { beginEdit ((Vst::ParamID) index); } + void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override { beginEdit (getVSTParamIDForIndex (index)); } void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) override { // NB: Cubase has problems if performEdit is called without setParamNormalized - EditController::setParamNormalized ((Vst::ParamID) index, (double) newValue); - performEdit ((Vst::ParamID) index, (double) newValue); + EditController::setParamNormalized (getVSTParamIDForIndex (index), (double) newValue); + performEdit (getVSTParamIDForIndex (index), (double) newValue); } - void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override { endEdit ((Vst::ParamID) index); } + void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override { endEdit (getVSTParamIDForIndex (index)); } void audioProcessorChanged (AudioProcessor*) override { + if (AudioProcessor* pluginInstance = getPluginInstance()) + { + if (pluginInstance->getNumPrograms() > 1) + EditController::setParamNormalized (paramPreset, static_cast (pluginInstance->getCurrentProgram()) + / static_cast (pluginInstance->getNumPrograms() - 1)); + } + if (componentHandler != nullptr) componentHandler->restartComponent (Vst::kLatencyChanged | Vst::kParamValuesChanged); } @@ -450,6 +558,9 @@ public: } private: + + friend class JuceVST3Component; + //============================================================================== ComSmartPtr audioProcessor; ScopedJuceInitialiser_GUI libraryInitialiser; @@ -462,9 +573,17 @@ private: }; enum { numMIDIChannels = 16 }; - int parameterToMidiControllerOffset; + Vst::ParamID parameterToMidiControllerOffset; MidiController parameterToMidiController[numMIDIChannels * Vst::kCountCtrlNumber]; - int midiControllerToParameter[numMIDIChannels][Vst::kCountCtrlNumber]; + Vst::ParamID midiControllerToParameter[numMIDIChannels][Vst::kCountCtrlNumber]; + + //============================================================================== + #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS + bool usingManagedParameter; + Array vstParamIDs; + #endif + Vst::ParamID bypassParamID; + //============================================================================== void setupParameters() @@ -473,40 +592,61 @@ private: { pluginInstance->addListener (this); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + const bool usingManagedParameter = false; + #endif + if (parameters.getParameterCount() <= 0) { const int numParameters = pluginInstance->getNumParameters(); + #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS + usingManagedParameter = (pluginInstance->getParameters().size() == numParameters); + #endif + for (int i = 0; i < numParameters; ++i) - parameters.addParameter (new Param (*pluginInstance, i)); + { + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + const Vst::ParamID vstParamID = static_cast (i); + #else + const Vst::ParamID vstParamID = generateVSTParamIDForIndex (pluginInstance, i); + vstParamIDs.add (vstParamID); + #endif + + parameters.addParameter (new Param (*pluginInstance, i, vstParamID)); + } - parameters.addParameter (new BypassParam (*pluginInstance, numParameters)); + bypassParamID = static_cast (usingManagedParameter ? paramBypass : numParameters); + parameters.addParameter (new BypassParam (*pluginInstance, bypassParamID)); + + if (pluginInstance->getNumPrograms() > 1) + parameters.addParameter (new ProgramChangeParameter (*pluginInstance)); } #if JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS - // (NB: the +1 is to account for the bypass parameter) - initialiseMidiControllerMappings (pluginInstance->getNumParameters() + 1); + parameterToMidiControllerOffset = static_cast (usingManagedParameter ? paramMidiControllerOffset + : parameters.getParameterCount()); + + initialiseMidiControllerMappings (); #endif audioProcessorChanged (pluginInstance); } } - void initialiseMidiControllerMappings (const int numVstParameters) + void initialiseMidiControllerMappings () { - parameterToMidiControllerOffset = numVstParameters; - for (int c = 0, p = 0; c < numMIDIChannels; ++c) { for (int i = 0; i < Vst::kCountCtrlNumber; ++i, ++p) { - midiControllerToParameter[c][i] = p + parameterToMidiControllerOffset; + midiControllerToParameter[c][i] = static_cast (p) + parameterToMidiControllerOffset; parameterToMidiController[p].channel = c; parameterToMidiController[p].ctrlNumber = i; parameters.addParameter (new Vst::Parameter (toString ("MIDI CC " + String (c) + "|" + String (i)), - (Vst::ParamID) (p + parameterToMidiControllerOffset), 0, 0, 0, - Vst::ParameterInfo::kCanAutomate, Vst::kRootUnitId)); + static_cast (p) + parameterToMidiControllerOffset, 0, 0, 0, + Vst::ParameterInfo::kCanAutomate, Vst::kRootUnitId)); } } } @@ -524,6 +664,34 @@ private: } } + //============================================================================== + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept { return static_cast (paramIndex); } + #else + static Vst::ParamID generateVSTParamIDForIndex (AudioProcessor* const pluginFilter, int paramIndex) + { + jassert (pluginFilter != nullptr); + + const int n = pluginFilter->getNumParameters(); + const bool managedParameter = (pluginFilter->getParameters().size() == n); + + if (isPositiveAndBelow (paramIndex, n)) + { + const String& juceParamID = pluginFilter->getParameterID (paramIndex); + return managedParameter ? static_cast (juceParamID.hashCode()) + : static_cast (juceParamID.getIntValue()); + } + + return static_cast (-1); + } + + inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept + { + return usingManagedParameter ? vstParamIDs.getReference (paramIndex) + : static_cast (paramIndex); + } + #endif + //============================================================================== class JuceVST3Editor : public Vst::EditorView { @@ -627,14 +795,30 @@ private: return kResultFalse; } - tresult PLUGIN_API canResize() override { return kResultTrue; } + tresult PLUGIN_API canResize() override + { + if (component != nullptr) + if (AudioProcessorEditor* editor = component->pluginEditor) + return editor->isResizable() ? kResultTrue : kResultFalse; + + return kResultFalse; + } tresult PLUGIN_API checkSizeConstraint (ViewRect* rectToCheck) override { if (rectToCheck != nullptr && component != nullptr) { - rectToCheck->right = rectToCheck->left + component->getWidth(); - rectToCheck->bottom = rectToCheck->top + component->getHeight(); + // checkSizeConstraint + Rectangle juceRect = Rectangle::leftTopRightBottom (rectToCheck->left, rectToCheck->top, + rectToCheck->right, rectToCheck->bottom); + if (AudioProcessorEditor* editor = component->pluginEditor) + if (ComponentBoundsConstrainer* constrainer = editor->getConstrainer()) + juceRect.setSize (jlimit (constrainer->getMinimumWidth(), constrainer->getMaximumWidth(), juceRect.getWidth()), + jlimit (constrainer->getMinimumHeight(), constrainer->getMaximumHeight(), juceRect.getHeight())); + + rectToCheck->right = rectToCheck->left + juceRect.getWidth(); + rectToCheck->bottom = rectToCheck->top + juceRect.getHeight(); + return kResultTrue; } @@ -648,8 +832,8 @@ private: { public: ContentWrapperComponent (JuceVST3Editor& editor, AudioProcessor& plugin) - : owner (editor), - pluginEditor (plugin.createEditorIfNeeded()) + : pluginEditor (plugin.createEditorIfNeeded()), + owner (editor) { setOpaque (true); setBroughtToFrontOnMouseClick (true); @@ -720,9 +904,10 @@ private: } } + ScopedPointer pluginEditor; + private: JuceVST3Editor& owner; - ScopedPointer pluginEditor; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ContentWrapperComponent) }; @@ -803,7 +988,11 @@ public: processSetup.sampleRate = 44100.0; processSetup.symbolicSampleSize = Vst::kSample32; - vstBypassParameterId = pluginInstance->getNumParameters(); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + vstBypassParameterId = static_cast (pluginInstance->getNumParameters()); + #else + cacheParameterIDs(); + #endif pluginInstance->setPlayHead (this); } @@ -1256,7 +1445,7 @@ public: { if (listIndex == 0) { - info.id = paramPreset; + info.id = JuceVST3EditController::paramPreset; info.programCount = (Steinberg::int32) getPluginInstance().getNumPrograms(); toString128 (info.name, TRANS("Factory Presets")); @@ -1271,7 +1460,7 @@ public: tresult PLUGIN_API getProgramName (Vst::ProgramListID listId, Steinberg::int32 programIndex, Vst::String128 name) override { - if (listId == paramPreset + if (listId == JuceVST3EditController::paramPreset && isPositiveAndBelow ((int) programIndex, getPluginInstance().getNumPrograms())) { toString128 (name, getPluginInstance().getProgramName ((int) programIndex)); @@ -1399,7 +1588,7 @@ public: info.flags = Vst::BusInfo::kDefaultActive; #if JucePlugin_WantsMidiInput - if (dir == Vst::kInput) + if (dir == Vst::kInput && index == 0) { info.mediaType = Vst::kEvent; info.direction = dir; @@ -1411,7 +1600,7 @@ public: #endif #if JucePlugin_ProducesMidiOutput - if (dir == Vst::kOutput) + if (dir == Vst::kOutput && index == 0) { info.mediaType = Vst::kEvent; info.direction = dir; @@ -1613,22 +1802,35 @@ public: if (paramQueue->getPoint (numPoints - 1, offsetSamples, value) == kResultTrue) { - const int id = (int) paramQueue->getParameterId(); + const Vst::ParamID vstParamID = paramQueue->getParameterId(); - if (isPositiveAndBelow (id, pluginInstance->getNumParameters())) - pluginInstance->setParameter (id, static_cast (value)); - else if (id == vstBypassParameterId) + if (vstParamID == vstBypassParameterId) setBypassed (static_cast (value) != 0.0f); #if JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS - else - addParameterChangeToMidiBuffer (offsetSamples, id, value); + else if (juceVST3EditController->isMidiControllerParamID (vstParamID)) + addParameterChangeToMidiBuffer (offsetSamples, vstParamID, value); #endif + else if (vstParamID == JuceVST3EditController::paramPreset) + { + const int numPrograms = pluginInstance->getNumPrograms(); + const int programValue = roundToInt (value * numPrograms); + + if (numPrograms > 1 && isPositiveAndBelow (programValue, numPrograms) + && programValue != pluginInstance->getCurrentProgram()) + pluginInstance->setCurrentProgram (programValue); + } + else + { + const int index = getJuceIndexForVSTParamID (vstParamID); + if (isPositiveAndBelow (index, pluginInstance->getNumParameters())) + pluginInstance->setParameter (index, static_cast (value)); + } } } } } - void addParameterChangeToMidiBuffer (const Steinberg::int32 offsetSamples, const int id, const double value) + void addParameterChangeToMidiBuffer (const Steinberg::int32 offsetSamples, const Vst::ParamID id, const double value) { // If the parameter is mapped to a MIDI CC message then insert it into the midiBuffer. int channel, ctrlNumber; @@ -1717,7 +1919,12 @@ private: ScopedJuceInitialiser_GUI libraryInitialiser; - int vstBypassParameterId; + #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS + bool usingManagedParameter; + Array vstParamIDs; + HashMap paramMap; + #endif + Vst::ParamID vstBypassParameterId; static const char* kJucePrivateDataIdentifier; @@ -1862,12 +2069,6 @@ private: return AudioBusPointerHelper::impl (data); } - //============================================================================== - enum InternalParameters - { - paramPreset = 'prst' - }; - void preparePlugin (double sampleRate, int bufferSize) { AudioProcessor& p = getPluginInstance(); @@ -1876,6 +2077,40 @@ private: p.prepareToPlay (sampleRate, bufferSize); } + //============================================================================== + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept { return static_cast (paramIndex); } + inline int getJuceIndexForVSTParamID (Vst::ParamID paramID) const noexcept { return static_cast (paramID); } + #else + void cacheParameterIDs() + { + const int numParameters = pluginInstance->getNumParameters(); + usingManagedParameter = (pluginInstance->getParameters().size() == numParameters); + + vstBypassParameterId = static_cast (usingManagedParameter ? JuceVST3EditController::paramBypass : numParameters); + + for (int i = 0; i < numParameters; ++i) + { + const Vst::ParamID paramID = JuceVST3EditController::generateVSTParamIDForIndex (pluginInstance, i); + + vstParamIDs.add (paramID); + paramMap.set (static_cast (paramID), i); + } + } + + inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept + { + return usingManagedParameter ? vstParamIDs.getReference (paramIndex) + : static_cast (paramIndex); + } + + inline int getJuceIndexForVSTParamID (Vst::ParamID paramID) const noexcept + { + return usingManagedParameter ? paramMap[static_cast (paramID)] + : static_cast (paramID); + } + #endif + //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Component) }; @@ -2264,7 +2499,7 @@ private: // The VST3 plugin entry point. JUCE_EXPORTED_FUNCTION IPluginFactory* PLUGIN_API GetPluginFactory() { - JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST3); + PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3; #if JUCE_WINDOWS // Cunning trick to force this function to be exported. Life's too short to diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h index ade01180..5dbbb6cc 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h @@ -33,7 +33,7 @@ ID: juce_audio_plugin_client vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE audio plugin wrapper classes description: Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins. website: http://www.juce.com/juce @@ -53,6 +53,17 @@ #include #include +/** Config: JUCE_FORCE_USE_LEGACY_PARAM_IDS + + Enable this if you want to force JUCE to use a continuous parameter + index to identify a parameter in a DAW (this was the default in old + versions of JUCE). This is index is usually used by the DAW to save + automation data and enabling this may mess up user's DAW projects. +*/ +#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS + #define JUCE_FORCE_USE_LEGACY_PARAM_IDS 0 +#endif + namespace juce { #include "utility/juce_PluginHostType.h" diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r new file mode 100644 index 00000000..2a345b29 --- /dev/null +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r @@ -0,0 +1,69 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2015 - ROLI Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#define UseExtendedThingResource 1 +#include + +//============================================================================== +/* The AppConfig.h file should be a file in your project, containing info to describe the + plugin's name, type, etc. The introjucer will generate this file automatically for you. + + You may need to adjust the include path of your project to make sure it can be + found by this include statement. (Don't hack this file to change the include path) +*/ +#include "AppConfig.h" + + +//============================================================================== +// component resources for Audio Unit +#define RES_ID 1000 +#define COMP_TYPE JucePlugin_AUMainType +#define COMP_SUBTYPE JucePlugin_AUSubType +#define COMP_MANUF JucePlugin_AUManufacturerCode +#define VERSION JucePlugin_VersionCode +#define NAME JucePlugin_Manufacturer ": " JucePlugin_Name +#define DESCRIPTION JucePlugin_Desc +#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "Entry" + +#include "AUResources.r" + +//============================================================================== +// component resources for Audio Unit Carbon View + +#ifndef BUILD_AU_CARBON_UI + #define BUILD_AU_CARBON_UI 1 +#endif + +#if BUILD_AU_CARBON_UI + #define RES_ID 2000 + #define COMP_TYPE kAudioUnitCarbonViewComponentType + #define COMP_SUBTYPE JucePlugin_AUSubType + #define COMP_MANUF JucePlugin_AUManufacturerCode + #define VERSION JucePlugin_VersionCode + #define NAME JucePlugin_Manufacturer ": " JucePlugin_Name " View" + #define DESCRIPTION NAME + #define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "ViewEntry" + + #include "AUResources.r" +#endif diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r b/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r new file mode 100644 index 00000000..a40e1f39 --- /dev/null +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r @@ -0,0 +1,6 @@ + +/* + This dummy file is added to the resources section of the project to + force XCode to create some resources for the dpm. If there aren't any + resources, PT will refuse to load the plugin.. +*/ diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp index 53092449..cf78781f 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp @@ -27,3 +27,7 @@ #endif #include "Standalone/juce_StandaloneFilterApp.cpp" + +#if ! JUCE_USE_CUSTOM_AU3_STANDALONE_APP + START_JUCE_APPLICATION (StandaloneFilterApp); +#endif diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h b/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h index ec702615..143e2e97 100644 --- a/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h +++ b/modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h @@ -45,7 +45,7 @@ struct PluginBusUtilities AudioBusArray& getFilterBus (bool inputBus) noexcept { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; } const AudioBusArray& getFilterBus (bool inputBus) const noexcept { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; } int getBusCount (bool inputBus) const noexcept { return getFilterBus (inputBus).size(); } - AudioChannelSet getChannelSet (bool inputBus, int bus) noexcept { return getFilterBus (inputBus).getReference (bus).channels; } + AudioChannelSet getChannelSet (bool inp, int bus) noexcept { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels : AudioChannelSet(); } int getNumChannels (bool inp, int bus) const noexcept { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels.size() : 0; } bool isBusEnabled (bool inputBus, int bus) const noexcept { return (getNumChannels (inputBus, bus) > 0); } bool hasInputs (int bus) const noexcept { return isBusEnabled (true, bus); } diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h b/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h index eb9d0628..b779bf1d 100644 --- a/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h +++ b/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h @@ -22,18 +22,6 @@ ============================================================================== */ -#ifndef DOXYGEN - // @internal - extern JUCE_API int* jucePlugInClientCurrentWrapperType; - - // this is ugly hack is needed by juce_getExecutableFile to have a wrapper - // dependent symbol - #define JUCE_DEFINE_WRAPPER_TYPE(x) JUCE_API int jucePlugInClientCurrentWrapperType_ ## x = static_cast (AudioProcessor::x); - #define JUCE_DECLARE_WRAPPER_TYPE(x) jucePlugInClientCurrentWrapperType = &jucePlugInClientCurrentWrapperType_ ## x; - -#endif - - //============================================================================== class PluginHostType { @@ -190,15 +178,15 @@ public: @see AudioProcessor::wrapperType */ - static AudioProcessor::WrapperType getPluginLoadedAs() noexcept - { - if (jucePlugInClientCurrentWrapperType != nullptr) - return static_cast (*jucePlugInClientCurrentWrapperType); - - return AudioProcessor::wrapperType_Undefined; - } + static AudioProcessor::WrapperType getPluginLoadedAs() noexcept { return jucePlugInClientCurrentWrapperType; } //============================================================================== + + #ifndef DOXYGEN + // @internal + static AudioProcessor::WrapperType jucePlugInClientCurrentWrapperType; + #endif + private: static HostType getHostType() { diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp b/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp index d95c9311..f9f4a2f2 100644 --- a/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp +++ b/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp @@ -32,7 +32,7 @@ namespace juce { - int* jucePlugInClientCurrentWrapperType = nullptr; + AudioProcessor::WrapperType PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Undefined; } #if _MSC_VER || JUCE_MINGW diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp index c908d5fc..a6f8f1e3 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp @@ -65,11 +65,11 @@ void AudioPluginFormatManager::addDefaultFormats() // you should only call this method once! for (int i = formats.size(); --i >= 0;) { - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) jassert (dynamic_cast (formats[i]) == nullptr); #endif - #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN) + #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS) jassert (dynamic_cast (formats[i]) == nullptr); #endif @@ -87,11 +87,11 @@ void AudioPluginFormatManager::addDefaultFormats() formats.add (new AudioUnitPluginFormat()); #endif - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) formats.add (new VSTPluginFormat()); #endif - #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN) + #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS) formats.add (new VST3PluginFormat()); #endif diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index a94e7828..552d4154 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -40,7 +40,9 @@ #endif #ifndef JUCE_SUPPORTS_AUv3 - #if JUCE_COMPILER_SUPPORTS_VARIADIC_TEMPLATES && defined (MAC_OS_X_VERSION_MIN_REQUIRED) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8) && __OBJC2__ + #if JUCE_COMPILER_SUPPORTS_VARIADIC_TEMPLATES && __OBJC2__ \ + && ((defined (MAC_OS_X_VERSION_MIN_REQUIRED) && defined (MAC_OS_X_VERSION_10_11) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11)) \ + || (defined (__IPHONE_OS_VERSION_MIN_REQUIRED) && defined (__IPHONE_9_0) && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0))) #define JUCE_SUPPORTS_AUv3 1 #else #define JUCE_SUPPORTS_AUv3 0 @@ -340,50 +342,55 @@ public: jassert (AudioUnitFormatHelpers::insideCallback.get() == 0); #endif - #if JUCE_MAC - if (eventListenerRef != 0) - { - AUListenerDispose (eventListenerRef); - eventListenerRef = 0; - } - #endif - if (audioUnit != nullptr) { - if (prepared) - releaseResources(); - struct AUDeleter : public CallbackMessage { - AUDeleter (AudioComponentInstance& inInstance, WaitableEvent& inEvent) + AUDeleter (AudioUnitPluginInstance& inInstance, WaitableEvent& inEvent) : auInstance (inInstance), completionSignal (inEvent) {} void messageCallback() override { - AudioComponentInstanceDispose (auInstance); - auInstance = nullptr; + auInstance.cleanup(); completionSignal.signal(); } - AudioComponentInstance& auInstance; + AudioUnitPluginInstance& auInstance; WaitableEvent& completionSignal; }; if (MessageManager::getInstance()->isThisTheMessageThread()) { - AudioComponentInstanceDispose (audioUnit); - audioUnit = nullptr; + cleanup(); } else { WaitableEvent completionEvent; - (new AUDeleter (audioUnit, completionEvent))->post(); + (new AUDeleter (*this, completionEvent))->post(); completionEvent.wait(); } } } + // called from the destructer above + void cleanup() + { + #if JUCE_MAC + if (eventListenerRef != 0) + { + AUListenerDispose (eventListenerRef); + eventListenerRef = 0; + } + #endif + + if (prepared) + releaseResources(); + + AudioComponentInstanceDispose (audioUnit); + audioUnit = nullptr; + } + bool initialise (double rate, int blockSize) { updateNumChannels(); diff --git a/modules/juce_audio_processors/format_types/juce_VST3Common.h b/modules/juce_audio_processors/format_types/juce_VST3Common.h index 06364100..3c535195 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3Common.h +++ b/modules/juce_audio_processors/format_types/juce_VST3Common.h @@ -154,7 +154,7 @@ static inline Steinberg::Vst::Speaker getSpeakerType (AudioChannelSet::ChannelTy case AudioChannelSet::surround: return kSpeakerS; case AudioChannelSet::leftRearSurround: return kSpeakerSl; case AudioChannelSet::rightRearSurround: return kSpeakerSr; - case AudioChannelSet::topMiddle: return kSpeakerTm; + case AudioChannelSet::topMiddle: return (1 << 11); /* kSpeakerTm */ case AudioChannelSet::topFrontLeft: return kSpeakerTfl; case AudioChannelSet::topFrontCentre: return kSpeakerTfc; case AudioChannelSet::topFrontRight: return kSpeakerTfr; @@ -185,7 +185,7 @@ static inline AudioChannelSet::ChannelType getChannelType (Steinberg::Vst::Speak case kSpeakerS: return AudioChannelSet::surround; case kSpeakerSl: return AudioChannelSet::leftRearSurround; case kSpeakerSr: return AudioChannelSet::rightRearSurround; - case kSpeakerTm: return AudioChannelSet::topMiddle; + case (1 << 11): return AudioChannelSet::topMiddle; /* kSpeakerTm */ case kSpeakerTfl: return AudioChannelSet::topFrontLeft; case kSpeakerTfc: return AudioChannelSet::topFrontCentre; case kSpeakerTfr: return AudioChannelSet::topFrontRight; diff --git a/modules/juce_audio_processors/format_types/juce_VST3Headers.h b/modules/juce_audio_processors/format_types/juce_VST3Headers.h index c5564db8..49dc270b 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3Headers.h +++ b/modules/juce_audio_processors/format_types/juce_VST3Headers.h @@ -81,6 +81,7 @@ #include #include #include + #include #else #include #include @@ -128,6 +129,10 @@ namespace Steinberg #pragma clang diagnostic pop #endif +#if JUCE_WINDOWS + #include +#endif + //============================================================================== #undef ASSERT #undef WARNING diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index 43ffca29..486bf020 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -22,20 +22,13 @@ ============================================================================== */ -#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN) +#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS) } // namespace juce -#if JucePlugin_Build_VST3 - #undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY - #define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1 -#endif - #include #include "juce_VST3Headers.h" -#undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY - namespace juce { @@ -405,7 +398,17 @@ public: return kResultFalse; owner->sendParamChangeMessageToListeners (index, (float) valueNormalized); - return owner->editController->setParamNormalized (paramID, valueNormalized); + + { + Steinberg::int32 eventIndex; + owner->inputParameterChanges->addParameterData (paramID, eventIndex)->addPoint (0, valueNormalized, eventIndex); + } + + // did the plug-in already update the parameter internally + if (owner->editController->getParamNormalized (paramID) != (float) valueNormalized) + return owner->editController->setParamNormalized (paramID, valueNormalized); + + return kResultTrue; } tresult PLUGIN_API endEdit (Vst::ParamID paramID) override @@ -693,8 +696,8 @@ public: tresult PLUGIN_API notifyProgramListChange (Vst::ProgramListID, Steinberg::int32) override { - jassertfalse; - return kResultFalse; + owner->syncProgramNames(); + return kResultTrue; } //============================================================================== @@ -1154,7 +1157,10 @@ struct DLLHandle if (GetFactoryProc proc = (GetFactoryProc) getFunction ("GetPluginFactory")) factory = proc(); - jassert (factory != nullptr); // The plugin NEEDS to provide a factory to be able to be called a VST3! + // The plugin NEEDS to provide a factory to be able to be called a VST3! + // Most likely you are trying to load a 32-bit VST3 from a 64-bit host + // or vice versa. + jassert (factory != nullptr); return factory; } @@ -1590,6 +1596,7 @@ public: : module (handle), numInputAudioBusses (0), numOutputAudioBusses (0), + programParameterID ((Vst::ParamID) -1), inputParameterChanges (new ParamValueQueueList()), outputParameterChanges (new ParamValueQueueList()), midiInputs (new MidiEventList()), @@ -1659,6 +1666,7 @@ public: grabInformationObjects(); synchroniseStates(); interconnectComponentAndController(); + syncProgramNames(); setupIO(); return true; } @@ -1947,25 +1955,34 @@ public: } //============================================================================== - int getNumPrograms() override { return getProgramListInfo (0).programCount; } - int getCurrentProgram() override { return 0; } - void setCurrentProgram (int) override {} + int getNumPrograms() override { return programNames.size(); } + const String getProgramName (int index) override { return programNames[index]; } + int getCurrentProgram() override { return jmax (0, (int) editController->getParamNormalized (programParameterID) * (programNames.size() - 1)); } void changeProgramName (int, const String&) override {} - const String getProgramName (int index) override + void setCurrentProgram (int program) override { - Vst::String128 result; - unitInfo->getProgramName (getProgramListInfo (0).id, index, result); - return toString (result); + if (programNames.size() > 0 && editController != nullptr) + { + Vst::ParamValue value = + static_cast (program) / static_cast (programNames.size()); + + editController->setParamNormalized (programParameterID, value); + Steinberg::int32 index; + inputParameterChanges->addParameterData (programParameterID, index)->addPoint (0, value, index); + } } //============================================================================== void reset() override { - if (component != nullptr) + if (component != nullptr && processor != nullptr) { + processor->setProcessing (false); component->setActive (false); + component->setActive (true); + processor->setProcessing (true); } } @@ -2022,18 +2039,18 @@ public: class ParamValueQueueList : public Vst::IParameterChanges { public: - ParamValueQueueList() {} + ParamValueQueueList() : numQueuesUsed (0) {} virtual ~ParamValueQueueList() {} JUCE_DECLARE_VST3_COM_REF_METHODS JUCE_DECLARE_VST3_COM_QUERY_METHODS - Steinberg::int32 PLUGIN_API getParameterCount() override { return (Steinberg::int32) queues.size(); } - Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override { return queues[(int) index]; } + Steinberg::int32 PLUGIN_API getParameterCount() override { return numQueuesUsed; } + Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override { return isPositiveAndBelow (static_cast (index), numQueuesUsed) ? queues[(int) index] : nullptr; } Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID& id, Steinberg::int32& index) override { - for (int i = queues.size(); --i >= 0;) + for (int i = numQueuesUsed; --i >= 0;) { if (queues.getUnchecked (i)->getParameterId() == id) { @@ -2042,25 +2059,32 @@ public: } } - index = getParameterCount(); - return queues.add (new ParamValueQueue (id)); + index = numQueuesUsed++; + ParamValueQueue* valueQueue = (index < queues.size() ? queues[index] + : queues.add (new ParamValueQueue)); + + valueQueue->clear(); + valueQueue->setParamID (id); + + return valueQueue; } void clearAllQueues() noexcept { - for (int i = queues.size(); --i >= 0;) - queues.getUnchecked (i)->clear(); + numQueuesUsed = 0; } struct ParamValueQueue : public Vst::IParamValueQueue { - ParamValueQueue (Vst::ParamID parameterID) : paramID (parameterID) + ParamValueQueue () : paramID (static_cast (-1)) { points.ensureStorageAllocated (1024); } virtual ~ParamValueQueue() {} + void setParamID (Vst::ParamID pID) noexcept { paramID = pID; } + JUCE_DECLARE_VST3_COM_REF_METHODS JUCE_DECLARE_VST3_COM_QUERY_METHODS @@ -2112,7 +2136,7 @@ public: }; Atomic refCount; - const Vst::ParamID paramID; + Vst::ParamID paramID; Array points; CriticalSection pointLock; @@ -2121,6 +2145,7 @@ public: Atomic refCount; OwnedArray queues; + int numQueuesUsed; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamValueQueueList) }; @@ -2160,6 +2185,9 @@ private: VST3FloatAndDoubleBusMapComposite inputBusMap, outputBusMap; Array inputBusses, outputBusses; + StringArray programNames; + Vst::ParamID programParameterID; + //============================================================================== template static void appendStateFrom (XmlElement& head, ComSmartPtr& object, const String& identifier) @@ -2313,8 +2341,8 @@ private: if (componentConnection != nullptr && editControllerConnection != nullptr) { - warnOnFailure (editControllerConnection->connect (componentConnection)); warnOnFailure (componentConnection->connect (editControllerConnection)); + warnOnFailure (editControllerConnection->connect (componentConnection)); } } @@ -2380,6 +2408,7 @@ private: Vst::BusInfo busInfo; busInfo.mediaType = forAudio ? Vst::kAudio : Vst::kEvent; busInfo.direction = forInput ? Vst::kInput : Vst::kOutput; + busInfo.channelCount = 0; component->getBusInfo (busInfo.mediaType, busInfo.direction, (Steinberg::int32) index, busInfo); @@ -2446,6 +2475,77 @@ private: return paramInfo; } + void syncProgramNames () + { + programNames.clear(); + + if (processor == nullptr || editController == nullptr) + return; + + Vst::UnitID programUnitID; + Vst::ParameterInfo paramInfo = { 0 }; + + { + int idx, num = editController->getParameterCount(); + for (idx = 0; idx < num; ++idx) + if (editController->getParameterInfo (idx, paramInfo) == kResultOk + && (paramInfo.flags & Steinberg::Vst::ParameterInfo::kIsProgramChange) != 0) + break; + + if (idx >= num) return; + + programParameterID = paramInfo.id; + programUnitID = paramInfo.unitId; + } + + if (unitInfo != nullptr) + { + Vst::UnitInfo uInfo = { 0 }; + const int unitCount = unitInfo->getUnitCount(); + + for (int idx = 0; idx < unitCount; ++idx) + { + if (unitInfo->getUnitInfo(idx, uInfo) == kResultOk + && uInfo.id == programUnitID) + { + const int programListCount = unitInfo->getProgramListCount(); + + for (int j = 0; j < programListCount; ++j) + { + Vst::ProgramListInfo programListInfo = { 0 }; + + if (unitInfo->getProgramListInfo (j, programListInfo) == kResultOk + && programListInfo.id == uInfo.programListId) + { + Vst::String128 name; + + for (int k = 0; k < programListInfo.programCount; ++k) + if (unitInfo->getProgramName (programListInfo.id, k, name) == kResultOk) + programNames.add (toString (name)); + + return; + } + } + + break; + } + } + } + + if (editController != nullptr + && paramInfo.stepCount > 0) + { + const int numPrograms = paramInfo.stepCount + 1; + for (int i = 0; i < numPrograms; ++i) + { + Vst::String128 programName; + Vst::ParamValue valueNormalized = static_cast (i) / static_cast (paramInfo.stepCount); + if (editController->getParamStringByValue (paramInfo.id, valueNormalized, programName) == kResultOk) + programNames.add (toString (programName)); + } + } + } + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VST3PluginInstance) }; diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h index 6b1b9810..e9650e29 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h @@ -25,7 +25,7 @@ #ifndef JUCE_VST3PLUGINFORMAT_H_INCLUDED #define JUCE_VST3PLUGINFORMAT_H_INCLUDED -#if (JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN)) || DOXYGEN +#if (JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)) || DOXYGEN /** Implements a plugin format for VST3s. diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index e8c53ce5..46adb5c0 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -22,7 +22,7 @@ ============================================================================== */ -#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX) +#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) //============================================================================== #if JUCE_MAC && JUCE_SUPPORT_CARBON @@ -165,7 +165,7 @@ namespace { #if JUCE_WINDOWS return timeGetTime() * 1000000.0; - #elif JUCE_LINUX + #elif JUCE_LINUX || JUCE_IOS timeval micro; gettimeofday (µ, 0); return micro.tv_usec * 1000.0; @@ -342,7 +342,7 @@ public: } //============================================================================== - static ModuleHandle* findOrCreateModule (const File& file) + static Ptr findOrCreateModule (const File& file) { for (int i = getActiveModules().size(); --i >= 0;) { @@ -352,33 +352,33 @@ public: return module; } - _fpreset(); // (doesn't do any harm) - const IdleCallRecursionPreventer icrp; shellUIDToCreate = 0; + _fpreset(); JUCE_VST_LOG ("Attempting to load VST: " + file.getFullPathName()); - ScopedPointer m (new ModuleHandle (file)); - - if (! m->open()) - m = nullptr; + Ptr m = new ModuleHandle (file, nullptr); - _fpreset(); // (doesn't do any harm) + if (m->open()) + { + _fpreset(); + return m; + } - return m.release(); + return nullptr; } //============================================================================== - ModuleHandle (const File& f) - : file (f), moduleMain (nullptr), customMain (nullptr) + ModuleHandle (const File& f, MainCall customMainCall) + : file (f), moduleMain (customMainCall), customMain (nullptr) #if JUCE_MAC , resHandle (0), bundleRef (0), resFileId (0) #endif { getActiveModules().add (this); - #if JUCE_WINDOWS || JUCE_LINUX + #if JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS fullParentDirectoryPathName = f.getParentDirectory().getFullPathName(); #elif JUCE_MAC FSRef ref; @@ -394,12 +394,18 @@ public: } //============================================================================== -#if JUCE_WINDOWS || JUCE_LINUX - DynamicLibrary module; + #if ! JUCE_MAC String fullParentDirectoryPathName; + #endif + + #if JUCE_WINDOWS || JUCE_LINUX + DynamicLibrary module; bool open() { + if (moduleMain != nullptr) + return true; + pluginName = file.getFileNameWithoutExtension(); module.open (file.getFullPathName()); @@ -457,14 +463,20 @@ public: return String(); } #endif -#else + #else Handle resHandle; CFBundleRef bundleRef; + + #if JUCE_MAC + CFBundleRefNum resFileId; FSSpec parentDirFSSpec; - ResFileRefNum resFileId; + #endif bool open() { + if (moduleMain != nullptr) + return true; + bool ok = false; if (file.hasFileExtension (".vst")) @@ -504,13 +516,18 @@ public: if (pluginName.isEmpty()) pluginName = file.getFileNameWithoutExtension(); + #if JUCE_MAC resFileId = CFBundleOpenBundleResourceMap (bundleRef); + #endif ok = true; Array vstXmlFiles; - file.getChildFile ("Contents") + file + #if JUCE_MAC + .getChildFile ("Contents") .getChildFile ("Resources") + #endif .findChildFiles (vstXmlFiles, File::findFiles, false, "*.vstxml"); if (vstXmlFiles.size() > 0) @@ -535,7 +552,9 @@ public: { if (bundleRef != 0) { + #if JUCE_MAC CFBundleCloseBundleResourceMap (bundleRef, resFileId); + #endif if (CFGetRetainCount (bundleRef) == 1) CFBundleUnloadExecutable (bundleRef); @@ -550,7 +569,7 @@ public: eff->dispatcher (eff, effClose, 0, 0, 0, 0); } -#endif + #endif private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle) @@ -615,6 +634,7 @@ public: ~VSTPluginInstance() { const ScopedLock sl (lock); + stopTimer(); if (effect != nullptr && effect->magic == kEffectMagic) { @@ -668,6 +688,18 @@ public: desc.isInstrument = (effect != nullptr && (effect->flags & effFlagsIsSynth) != 0); } + bool initialiseEffect (double initialSampleRate, int initialBlockSize) + { + if (effect != nullptr) + { + effect->resvd2 = (VstIntPtr) (pointer_sized_int) this; + initialise (initialSampleRate, initialBlockSize); + return true; + } + + return false; + } + void initialise (double initialSampleRate, int initialBlockSize) { if (initialised || effect == nullptr) @@ -714,7 +746,7 @@ public: wantsMidiMessages = pluginCanDo ("receiveVstMidiEvent") > 0; #if JUCE_MAC && JUCE_SUPPORT_CARBON - usesCocoaNSView = (pluginCanDo ("hasCockosViewAsConfig") & (int) 0xffff0000) == 0xbeef0000; + usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul; #endif setLatencySamples (effect->initialDelay); @@ -856,7 +888,12 @@ public: } //============================================================================== + #if JUCE_IOS + bool hasEditor() const override { return false; } + #else bool hasEditor() const override { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; } + #endif + AudioProcessorEditor* createEditor() override; //============================================================================== @@ -1787,6 +1824,7 @@ private: }; //============================================================================== +#if ! JUCE_IOS class VSTPluginWindow; static Array activeVSTWindows; @@ -2525,7 +2563,7 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow) }; - +#endif #if JUCE_MSVC #pragma warning (pop) #endif @@ -2533,8 +2571,12 @@ private: //============================================================================== AudioProcessorEditor* VSTPluginInstance::createEditor() { + #if JUCE_IOS + return nullptr; + #else return hasEditor() ? new VSTPluginWindow (*this) : nullptr; + #endif } //============================================================================== @@ -2647,12 +2689,7 @@ void VSTPluginFormat::createPluginInstance (const PluginDescription& desc, result = new VSTPluginInstance (module); - if (result->effect != nullptr) - { - result->effect->resvd2 = (VstIntPtr) (pointer_sized_int) (VSTPluginInstance*) result; - result->initialise (sampleRate, blockSize); - } - else + if (! result->initialiseEffect (sampleRate, blockSize)) result = nullptr; } @@ -2676,7 +2713,7 @@ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdenti { const File f (File::createFileWithoutCheckingPath (fileOrIdentifier)); - #if JUCE_MAC + #if JUCE_MAC || JUCE_IOS return f.isDirectory() && f.hasFileExtension (".vst"); #elif JUCE_WINDOWS return f.existsAsFile() && f.hasFileExtension (".dll"); @@ -2751,6 +2788,19 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() paths.add (WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\Software\\VST\\VSTPluginsPath", programFiles + "\\VstPlugins")); return paths; + #elif JUCE_IOS + // on iOS you can only load plug-ins inside the hosts bundle folder + CFURLRef relativePluginDir = CFBundleCopyBuiltInPlugInsURL (CFBundleGetMainBundle()); + CFURLRef pluginDir = CFURLCopyAbsoluteURL (relativePluginDir); + CFRelease (relativePluginDir); + + CFStringRef path = CFURLCopyFileSystemPath (pluginDir, kCFURLPOSIXPathStyle); + CFRelease (pluginDir); + + FileSearchPath retval (String (CFStringGetCStringPtr (path, kCFStringEncodingUTF8))); + CFRelease (path); + + return retval; #endif } @@ -2795,6 +2845,22 @@ bool VSTPluginFormat::setChunkData (AudioPluginInstance* plugin, const void* dat return false; } +AudioPluginInstance* VSTPluginFormat::createCustomVSTFromMainCall (void* entryPointFunction, + double initialSampleRate, int initialBufferSize) +{ + ModuleHandle::Ptr module = new ModuleHandle (File(), (MainCall) entryPointFunction); + + if (module->open()) + { + ScopedPointer result (new VSTPluginInstance (module)); + + if (result->initialiseEffect (initialSampleRate, initialBufferSize)) + return result.release(); + } + + return nullptr; +} + void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunctions* functions) { ScopedPointer f (functions); diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index dc6ad749..02f4a57f 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -22,7 +22,7 @@ ============================================================================== */ -#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX)) || DOXYGEN +#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)) || DOXYGEN //============================================================================== /** @@ -53,6 +53,13 @@ public: /** Attempts to set a VST's state from a chunk of memory. */ static bool setChunkData (AudioPluginInstance* plugin, const void* data, int size, bool isPreset); + /** Given a suitable function pointer to a VSTPluginMain function, this will attempt to + instantiate and return a plugin for it. + */ + static AudioPluginInstance* createCustomVSTFromMainCall (void* entryPointFunction, + double initialSampleRate, + int initialBufferSize); + //============================================================================== /** Base class for some extra functions that can be attached to a VST plugin instance. */ class ExtraFunctions diff --git a/modules/juce_audio_processors/juce_audio_processors.h b/modules/juce_audio_processors/juce_audio_processors.h index 2c775db4..3d72d4b0 100644 --- a/modules/juce_audio_processors/juce_audio_processors.h +++ b/modules/juce_audio_processors/juce_audio_processors.h @@ -33,7 +33,7 @@ ID: juce_audio_processors vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE audio processor classes description: Classes for loading and playing VST, AU, or internally-generated audio processors. website: http://www.juce.com/juce diff --git a/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp b/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp index 3873647d..e12a2263 100644 --- a/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp @@ -208,6 +208,13 @@ void AudioChannelSet::addChannel (ChannelType newChannel) channels.setBit (bit); } +void AudioChannelSet::removeChannel (ChannelType newChannel) +{ + const int bit = static_cast (newChannel); + jassert (bit >= 0 && bit < 1024); + channels.clearBit (bit); +} + AudioChannelSet AudioChannelSet::disabled() { return AudioChannelSet(); } AudioChannelSet AudioChannelSet::mono() { return AudioChannelSet (1u << centre); } AudioChannelSet AudioChannelSet::stereo() { return AudioChannelSet ((1u << left) | (1u << right)); } diff --git a/modules/juce_audio_processors/processors/juce_AudioChannelSet.h b/modules/juce_audio_processors/processors/juce_AudioChannelSet.h index 3bfc2c62..8af8f877 100644 --- a/modules/juce_audio_processors/processors/juce_AudioChannelSet.h +++ b/modules/juce_audio_processors/processors/juce_AudioChannelSet.h @@ -166,10 +166,13 @@ public: /** Adds a channel to the set. */ void addChannel (ChannelType newChannelType); + /** Removes a channel from the set. */ + void removeChannel (ChannelType newChannelType); + /** Returns the number of channels in the set. */ int size() const noexcept; - /** Returns the number of channels in the set. */ + /** Returns true if there are no channels in the set. */ bool isDisabled() const noexcept { return size() == 0; } /** Returns an array of all the types in this channel set. */ @@ -195,6 +198,9 @@ public: /** Returns if this is a channel layout made-up of discrete channels. */ bool isDiscreteLayout() const noexcept; + /** Intersect two channel layouts. */ + void intersect (const AudioChannelSet& other) { channels &= other.channels; } + //============================================================================== bool operator== (const AudioChannelSet&) const noexcept; bool operator!= (const AudioChannelSet&) const noexcept; diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp index a5f4a79d..b7eed3b5 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.cpp @@ -292,6 +292,15 @@ const String AudioProcessor::getParameterName (int index) return String(); } +String AudioProcessor::getParameterID (int index) +{ + // Don't use getParamChecked here, as this must also work for legacy plug-ins + if (AudioProcessorParameterWithID* p = dynamic_cast (managedParameters[index])) + return p->paramID; + + return String (index); +} + String AudioProcessor::getParameterName (int index, int maximumStringLength) { if (AudioProcessorParameter* p = managedParameters[index]) @@ -394,8 +403,16 @@ void AudioProcessor::suspendProcessing (const bool shouldBeSuspended) } void AudioProcessor::reset() {} -void AudioProcessor::processBlockBypassed (AudioBuffer&, MidiBuffer&) {} -void AudioProcessor::processBlockBypassed (AudioBuffer&, MidiBuffer&) {} + +template +void AudioProcessor::processBypassed (AudioBuffer& buffer, MidiBuffer&) +{ + for (int ch = getMainBusNumInputChannels(); ch < getTotalNumOutputChannels(); ++ch) + buffer.clear (ch, 0, buffer.getNumSamples()); +} + +void AudioProcessor::processBlockBypassed (AudioBuffer& buffer, MidiBuffer& midi) { processBypassed (buffer, midi); } +void AudioProcessor::processBlockBypassed (AudioBuffer& buffer, MidiBuffer& midi) { processBypassed (buffer, midi); } void AudioProcessor::processBlock (AudioBuffer& buffer, MidiBuffer& midiMessages) { diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessor.h b/modules/juce_audio_processors/processors/juce_AudioProcessor.h index cabb2772..c9970500 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessor.h @@ -611,6 +611,17 @@ public: */ virtual const String getParameterName (int parameterIndex); + /** Returns the ID of a particular parameter. + + The ID is used to communicate the value or mapping of a particular parameter with + the host. By default this method will simply return a string representation of + index. + + NOTE! This method will eventually be deprecated! It's recommended that you use the + AudioProcessorParameterWithID class instead to manage your parameters. + */ + virtual String getParameterID (int index); + /** Called by the host to find out the value of one of the filter's parameters. The host will expect the value returned to be between 0 and 1.0. @@ -628,7 +639,7 @@ public: If you want to provide customised short versions of your parameter names that will look better in constrained spaces (e.g. the displays on hardware controller devices or mixing desks) then you should implement this method. - If you don't override it, the default implementation will call getParameterText(int), + If you don't override it, the default implementation will call getParameterName(int), and truncate the result. NOTE! This method will eventually be deprecated! It's recommended that you use @@ -1002,6 +1013,9 @@ private: void disableNonMainBuses (bool isInput); void updateSpeakerFormatStrings(); + template + void processBypassed (AudioBuffer&, MidiBuffer&); + // This method is no longer used - you can delete it from your AudioProcessor classes. JUCE_DEPRECATED_WITH_BODY (virtual bool silenceInProducesSilenceOut() const, { return false; }); diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp index 07f865e8..344d8c4e 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp @@ -22,14 +22,16 @@ ============================================================================== */ -AudioProcessorEditor::AudioProcessorEditor (AudioProcessor& p) noexcept : processor (p) +AudioProcessorEditor::AudioProcessorEditor (AudioProcessor& p) noexcept : processor (p), constrainer (nullptr) { + initialise(); } -AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept : processor (*p) +AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept : processor (*p), constrainer (nullptr) { // the filter must be valid.. jassert (p != nullptr); + initialise(); } AudioProcessorEditor::~AudioProcessorEditor() @@ -37,7 +39,132 @@ AudioProcessorEditor::~AudioProcessorEditor() // if this fails, then the wrapper hasn't called editorBeingDeleted() on the // filter for some reason.. jassert (processor.getActiveEditor() != this); + removeComponentListener (resizeListener); } void AudioProcessorEditor::setControlHighlight (ParameterControlHighlightInfo) {} int AudioProcessorEditor::getControlParameterIndex (Component&) { return -1; } + +void AudioProcessorEditor::initialise() +{ + resizable = false; + + attachConstrainer (&defaultConstrainer); + addComponentListener (resizeListener = new AudioProcessorEditorListener (this)); +} + +//============================================================================== +void AudioProcessorEditor::setResizable (const bool shouldBeResizable, const bool useBottomRightCornerResizer) +{ + if (shouldBeResizable != resizable) + { + resizable = shouldBeResizable; + + if (! resizable) + { + setConstrainer (&defaultConstrainer); + + if (getWidth() > 0 && getHeight() > 0) + { + defaultConstrainer.setSizeLimits (getWidth(), getHeight(), getWidth(), getHeight()); + resized(); + } + } + } + + const bool shouldHaveCornerResizer = (useBottomRightCornerResizer && shouldBeResizable); + if (shouldHaveCornerResizer != (resizableCorner != nullptr)) + { + if (shouldHaveCornerResizer) + { + Component::addChildComponent (resizableCorner = new ResizableCornerComponent (this, constrainer)); + resizableCorner->setAlwaysOnTop (true); + } + else + resizableCorner = nullptr; + } +} + +void AudioProcessorEditor::setResizeLimits (const int newMinimumWidth, + const int newMinimumHeight, + const int newMaximumWidth, + const int newMaximumHeight) noexcept +{ + // if you've set up a custom constrainer then these settings won't have any effect.. + jassert (constrainer == &defaultConstrainer || constrainer == nullptr); + + const bool shouldEnableResize = (newMinimumWidth != newMaximumWidth || newMinimumHeight != newMaximumHeight); + const bool shouldHaveCornerResizer = (shouldEnableResize != resizable || resizableCorner != nullptr); + + setResizable (shouldEnableResize, shouldHaveCornerResizer); + + if (constrainer == nullptr) + setConstrainer (&defaultConstrainer); + + defaultConstrainer.setSizeLimits (newMinimumWidth, newMinimumHeight, + newMaximumWidth, newMaximumHeight); + + setBoundsConstrained (getBounds()); +} + +void AudioProcessorEditor::setConstrainer (ComponentBoundsConstrainer* newConstrainer) +{ + if (constrainer != newConstrainer) + { + resizable = true; + attachConstrainer (newConstrainer); + } +} + +void AudioProcessorEditor::attachConstrainer (ComponentBoundsConstrainer* newConstrainer) +{ + if (constrainer != newConstrainer) + { + constrainer = newConstrainer; + updatePeer(); + } +} + +void AudioProcessorEditor::setBoundsConstrained (Rectangle newBounds) +{ + if (constrainer != nullptr) + constrainer->setBoundsForComponent (this, newBounds, false, false, false, false); + else + setBounds (newBounds); +} + +void AudioProcessorEditor::editorResized (bool wasResized) +{ + if (wasResized) + { + bool resizerHidden = false; + + if (ComponentPeer* peer = getPeer()) + resizerHidden = peer->isFullScreen() || peer->isKioskMode(); + + if (resizableCorner != nullptr) + { + resizableCorner->setVisible (! resizerHidden); + + const int resizerSize = 18; + resizableCorner->setBounds (getWidth() - resizerSize, + getHeight() - resizerSize, + resizerSize, resizerSize); + } + + + if (! resizable) + { + if (getWidth() > 0 && getHeight() > 0) + defaultConstrainer.setSizeLimits (getWidth(), getHeight(), + getWidth(), getHeight()); + } + } +} + +void AudioProcessorEditor::updatePeer() +{ + if (isOnDesktop()) + if (ComponentPeer* const peer = getPeer()) + peer->setConstrainer (constrainer); +} diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h index e043c37b..e28de0a3 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h @@ -25,7 +25,7 @@ #ifndef JUCE_AUDIOPROCESSOREDITOR_H_INCLUDED #define JUCE_AUDIOPROCESSOREDITOR_H_INCLUDED - +class AudioProcessorEditorListener; //============================================================================== /** Base class for the component that acts as the GUI for an AudioProcessor. @@ -84,7 +84,83 @@ public: */ virtual int getControlParameterIndex (Component&); + //============================================================================== + /** Make the editor resizable or fixed. + + @param shouldBeResizable whether it's resizable at all + @see setResizeLimits, isResizable + */ + void setResizable (bool shouldBeResizable, bool useBottomRightCornerResizer); + + /** Returns true if resizing is enabled. + + @see setResizable + */ + bool isResizable() const noexcept { return resizable; } + + /** This sets the maximum and minimum sizes for the window. + + If the window's current size is outside these limits, it will be resized to + make sure it's within them. + + A direct call to setBounds() will bypass any constraint checks, but when the + window is dragged by the user or resized by other indirect means, the constrainer + will limit the numbers involved. + + @see setResizable + */ + void setResizeLimits (int newMinimumWidth, + int newMinimumHeight, + int newMaximumWidth, + int newMaximumHeight) noexcept; + + + /** Returns the bounds constrainer object that this window is using. + You can access this to change its properties. + */ + ComponentBoundsConstrainer* getConstrainer() noexcept { return constrainer; } + + /** Sets the bounds-constrainer object to use for resizing and dragging this window. + + A pointer to the object you pass in will be kept, but it won't be deleted + by this object, so it's the caller's responsibility to manage it. + + If you pass a nullptr, then no contraints will be placed on the positioning of the window. + */ + void setConstrainer (ComponentBoundsConstrainer* newConstrainer); + + /** Calls the window's setBounds method, after first checking these bounds + with the current constrainer. + + @see setConstrainer + */ + void setBoundsConstrained (Rectangle newBounds); + + ScopedPointer resizableCorner; + private: + //============================================================================== + struct AudioProcessorEditorListener : ComponentListener + { + AudioProcessorEditorListener (AudioProcessorEditor* audioEditor) : e (audioEditor) {} + + void componentMovedOrResized (Component&, bool, bool wasResized) override { e->editorResized (wasResized); } + void componentParentHierarchyChanged (Component&) override { e->updatePeer(); } + AudioProcessorEditor* e; + }; + + //============================================================================== + void initialise(); + void editorResized (bool wasResized); + void updatePeer(); + void attachConstrainer (ComponentBoundsConstrainer* newConstrainer); + + //============================================================================== + ScopedPointer resizeListener; + bool resizable; + ComponentBoundsConstrainer defaultConstrainer; + ComponentBoundsConstrainer* constrainer; + JUCE_DECLARE_NON_COPYABLE (AudioProcessorEditor) }; diff --git a/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp b/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp index e1ba865a..a8918a73 100644 --- a/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp +++ b/modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp @@ -105,6 +105,16 @@ private: } } + void startedDragging() override + { + owner.beginParameterChangeGesture(index); + } + + void stoppedDragging() override + { + owner.endParameterChangeGesture(index); + } + String getTextFromValue (double /*value*/) override { return owner.getParameterText (index) + " " + owner.getParameterLabel (index).trimEnd(); diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp index b53aae35..5d45ac6e 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp @@ -27,6 +27,8 @@ KnownPluginList::~KnownPluginList() {} void KnownPluginList::clear() { + ScopedLock lock (typesArrayLock); + if (types.size() > 0) { types.clear(); @@ -36,6 +38,8 @@ void KnownPluginList::clear() PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifier) const { + ScopedLock lock (typesArrayLock); + for (int i = 0; i < types.size(); ++i) if (types.getUnchecked(i)->fileOrIdentifier == fileOrIdentifier) return types.getUnchecked(i); @@ -45,6 +49,8 @@ PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifi PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& identifierString) const { + ScopedLock lock (typesArrayLock); + for (int i = 0; i < types.size(); ++i) if (types.getUnchecked(i)->matchesIdentifierString (identifierString)) return types.getUnchecked(i); @@ -54,27 +60,37 @@ PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& id bool KnownPluginList::addType (const PluginDescription& type) { - for (int i = types.size(); --i >= 0;) { - if (types.getUnchecked(i)->isDuplicateOf (type)) + ScopedLock lock (typesArrayLock); + + for (int i = types.size(); --i >= 0;) { - // strange - found a duplicate plugin with different info.. - jassert (types.getUnchecked(i)->name == type.name); - jassert (types.getUnchecked(i)->isInstrument == type.isInstrument); + if (types.getUnchecked(i)->isDuplicateOf (type)) + { + // strange - found a duplicate plugin with different info.. + jassert (types.getUnchecked(i)->name == type.name); + jassert (types.getUnchecked(i)->isInstrument == type.isInstrument); - *types.getUnchecked(i) = type; - return false; + *types.getUnchecked(i) = type; + return false; + } } + + types.insert (0, new PluginDescription (type)); } - types.insert (0, new PluginDescription (type)); sendChangeMessage(); return true; } void KnownPluginList::removeType (const int index) { - types.remove (index); + { + ScopedLock lock (typesArrayLock); + + types.remove (index); + } + sendChangeMessage(); } @@ -84,6 +100,8 @@ bool KnownPluginList::isListingUpToDate (const String& fileOrIdentifier, if (getTypeForFile (fileOrIdentifier) == nullptr) return false; + ScopedLock lock (typesArrayLock); + for (int i = types.size(); --i >= 0;) { const PluginDescription* const d = types.getUnchecked(i); @@ -113,6 +131,8 @@ bool KnownPluginList::scanAndAddFile (const String& fileOrIdentifier, { bool needsRescanning = false; + ScopedLock lock (typesArrayLock); + for (int i = types.size(); --i >= 0;) { const PluginDescription* const d = types.getUnchecked(i); @@ -298,12 +318,17 @@ void KnownPluginList::sort (const SortMethod method, bool forwards) if (method != defaultOrder) { Array oldOrder, newOrder; - oldOrder.addArray (types); - PluginSorter sorter (method, forwards); - types.sort (sorter, true); + { + ScopedLock lock (typesArrayLock); + + oldOrder.addArray (types); + + PluginSorter sorter (method, forwards); + types.sort (sorter, true); - newOrder.addArray (types); + newOrder.addArray (types); + } if (oldOrder != newOrder) sendChangeMessage(); @@ -315,8 +340,12 @@ XmlElement* KnownPluginList::createXml() const { XmlElement* const e = new XmlElement ("KNOWNPLUGINS"); - for (int i = types.size(); --i >= 0;) - e->prependChildElement (types.getUnchecked(i)->createXml()); + { + ScopedLock lock (typesArrayLock); + + for (int i = types.size(); --i >= 0;) + e->prependChildElement (types.getUnchecked(i)->createXml()); + } for (int i = 0; i < blacklist.size(); ++i) e->createNewChildElement ("BLACKLISTED")->setAttribute ("id", blacklist[i]); @@ -516,6 +545,7 @@ KnownPluginList::PluginTree* KnownPluginList::createTree (const SortMethod sortM Array sorted; { + ScopedLock lock (typesArrayLock); PluginSorter sorter (sortMethod, true); for (int i = 0; i < types.size(); ++i) diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.h b/modules/juce_audio_processors/scanning/juce_KnownPluginList.h index 252c5426..7be3c761 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.h +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.h @@ -216,7 +216,7 @@ private: OwnedArray types; StringArray blacklist; ScopedPointer scanner; - CriticalSection scanLock; + CriticalSection scanLock, typesArrayLock; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (KnownPluginList) }; diff --git a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp index 37adaa37..a321a5da 100644 --- a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp +++ b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp @@ -348,8 +348,10 @@ public: if (path.getNumPaths() > 0) // if the path is empty, then paths aren't used for this format. { + #if ! JUCE_IOS if (propertiesToUse != nullptr) path = getLastSearchPath (*propertiesToUse, formatToScan); + #endif pathList.setSize (500, 300); pathList.setPath (path); diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp index 3d242df3..1cbbadd9 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp @@ -25,7 +25,7 @@ #if JUCE_COMPILER_SUPPORTS_LAMBDAS //============================================================================== -struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParameter, +struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParameterWithID, private ValueTree::Listener { Parameter (AudioProcessorValueTreeState& s, @@ -33,7 +33,8 @@ struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParamete NormalisableRange r, float defaultVal, std::function valueToText, std::function textToValue) - : owner (s), paramID (parameterID), name (paramName), label (labelText), + : AudioProcessorParameterWithID (parameterID, paramName), + owner (s), label (labelText), valueToTextFunction (valueToText), textToValueFunction (textToValue), range (r), value (defaultVal), defaultValue (defaultVal), @@ -51,7 +52,6 @@ struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParamete float getValue() const override { return range.convertTo0to1 (value); } float getDefaultValue() const override { return range.convertTo0to1 (defaultValue); } - String getName (int maximumStringLength) const override { return name.substring (0, maximumStringLength); } String getLabel() const override { return label; } float getValueForText (const String& text) const override @@ -141,7 +141,7 @@ struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParamete AudioProcessorValueTreeState& owner; ValueTree state; - String paramID, name, label; + String label; ListenerList listeners; std::function valueToTextFunction; std::function textToValueFunction; diff --git a/modules/juce_audio_utils/juce_audio_utils.h b/modules/juce_audio_utils/juce_audio_utils.h index 51812223..2de78b5e 100644 --- a/modules/juce_audio_utils/juce_audio_utils.h +++ b/modules/juce_audio_utils/juce_audio_utils.h @@ -33,7 +33,7 @@ ID: juce_audio_utils vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE extra audio utility classes description: Classes for audio-related GUI and miscellaneous tasks. website: http://www.juce.com/juce diff --git a/modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h b/modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h index 00f209ae..a5bde5b5 100644 --- a/modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h +++ b/modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h @@ -239,7 +239,7 @@ inline void b2Contact::SetEnabled(bool flag) } else { - m_flags &= ~e_enabledFlag; + m_flags &= ~((unsigned int) e_enabledFlag); } } diff --git a/modules/juce_box2d/juce_box2d.h b/modules/juce_box2d/juce_box2d.h index 6d2128b6..bf5f9da8 100644 --- a/modules/juce_box2d/juce_box2d.h +++ b/modules/juce_box2d/juce_box2d.h @@ -33,7 +33,7 @@ ID: juce_box2d vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE wrapper for the Box2D physics engine description: The Box2D physics engine and some utility classes. website: http://www.juce.com/juce diff --git a/modules/juce_core/containers/juce_Array.h b/modules/juce_core/containers/juce_Array.h index 30e6de89..7b536e26 100644 --- a/modules/juce_core/containers/juce_Array.h +++ b/modules/juce_core/containers/juce_Array.h @@ -540,13 +540,17 @@ public: will be done. @param newElement the new object to add to the array + @return true if the element was added to the array; false otherwise. */ - void addIfNotAlreadyThere (ParameterType newElement) + bool addIfNotAlreadyThere (ParameterType newElement) { const ScopedLockType lock (getLock()); - if (! contains (newElement)) - add (newElement); + if (contains (newElement)) + return false; + + add (newElement); + return true; } /** Replaces an element with a new value. diff --git a/modules/juce_core/containers/juce_OwnedArray.h b/modules/juce_core/containers/juce_OwnedArray.h index 9fdb61ed..a64c9cbe 100644 --- a/modules/juce_core/containers/juce_OwnedArray.h +++ b/modules/juce_core/containers/juce_OwnedArray.h @@ -378,16 +378,17 @@ public: If the array already contains a matching object, nothing will be done. @param newObject the new object to add to the array - @returns the new object that was added + @returns true if the new object was added, false otherwise */ - ObjectClass* addIfNotAlreadyThere (ObjectClass* newObject) noexcept + bool addIfNotAlreadyThere (ObjectClass* newObject) noexcept { const ScopedLockType lock (getLock()); - if (! contains (newObject)) - add (newObject); + if (contains (newObject)) + return false; - return newObject; + add (newObject); + return true; } /** Replaces an object in the array with a different one. diff --git a/modules/juce_core/containers/juce_ReferenceCountedArray.h b/modules/juce_core/containers/juce_ReferenceCountedArray.h index 87d76391..e5dfe965 100644 --- a/modules/juce_core/containers/juce_ReferenceCountedArray.h +++ b/modules/juce_core/containers/juce_ReferenceCountedArray.h @@ -386,12 +386,17 @@ public: If the array already contains a matching object, nothing will be done. @param newObject the new object to add to the array + @returns true if the object has been added, false otherwise */ - void addIfNotAlreadyThere (ObjectClass* const newObject) noexcept + bool addIfNotAlreadyThere (ObjectClass* const newObject) noexcept { const ScopedLockType lock (getLock()); - if (! contains (newObject)) - add (newObject); + + if (contains (newObject)) + return false; + + add (newObject); + return true; } /** Replaces an object in the array with a different one. diff --git a/modules/juce_core/containers/juce_Variant.cpp b/modules/juce_core/containers/juce_Variant.cpp index 9e3335df..01c65edf 100644 --- a/modules/juce_core/containers/juce_Variant.cpp +++ b/modules/juce_core/containers/juce_Variant.cpp @@ -504,6 +504,7 @@ var& var::operator= (const double v) { type->cleanUp (value); type = var& var::operator= (const char* const v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } var& var::operator= (const wchar_t* const v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } var& var::operator= (const String& v) { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; } +var& var::operator= (const MemoryBlock& v) { type->cleanUp (value); type = &VariantType_Binary::instance; value.binaryValue = new MemoryBlock (v); return *this; } var& var::operator= (const Array& v) { var v2 (v); swapWith (v2); return *this; } var& var::operator= (ReferenceCountedObject* v) { var v2 (v); swapWith (v2); return *this; } var& var::operator= (NativeFunction v) { var v2 (v); swapWith (v2); return *this; } diff --git a/modules/juce_core/containers/juce_Variant.h b/modules/juce_core/containers/juce_Variant.h index 8720a0d0..4b57c6a3 100644 --- a/modules/juce_core/containers/juce_Variant.h +++ b/modules/juce_core/containers/juce_Variant.h @@ -95,6 +95,7 @@ public: var& operator= (const char* value); var& operator= (const wchar_t* value); var& operator= (const String& value); + var& operator= (const MemoryBlock& value); var& operator= (const Array& value); var& operator= (ReferenceCountedObject* object); var& operator= (NativeFunction method); diff --git a/modules/juce_core/files/juce_File.cpp b/modules/juce_core/files/juce_File.cpp index 4463a04f..bebdeed5 100644 --- a/modules/juce_core/files/juce_File.cpp +++ b/modules/juce_core/files/juce_File.cpp @@ -73,19 +73,40 @@ const File File::nonexistent; //============================================================================== static String removeEllipsis (const String& path) { - StringArray toks; - toks.addTokens (path, File::separatorString, StringRef()); - - for (int i = 1; i < toks.size(); ++i) + // This will quickly find both /../ and /./ at the expense of a minor + // false-positive performance hit when path elements end in a dot. + #if JUCE_WINDOWS + if (path.contains (".\\")) + #else + if (path.contains ("./")) + #endif { - if (toks[i] == ".." && toks[i - 1] != "..") + StringArray toks; + toks.addTokens (path, File::separatorString, StringRef()); + bool anythingChanged = false; + + for (int i = 1; i < toks.size(); ++i) { - toks.removeRange (i - 1, 2); - i = jmax (0, i - 2); + const String& t = toks[i]; + + if (t == ".." && toks[i - 1] != "..") + { + anythingChanged = true; + toks.removeRange (i - 1, 2); + i = jmax (0, i - 2); + } + else if (t == ".") + { + anythingChanged = true; + toks.remove (i--); + } } + + if (anythingChanged) + return toks.joinIntoString (File::separatorString); } - return toks.joinIntoString (File::separatorString); + return path; } String File::parseAbsolutePath (const String& p) @@ -95,10 +116,7 @@ String File::parseAbsolutePath (const String& p) #if JUCE_WINDOWS // Windows.. - String path (p.replaceCharacter ('/', '\\')); - - if (path.contains ("\\..\\")) - path = removeEllipsis (path); + String path (removeEllipsis (p.replaceCharacter ('/', '\\'))); if (path.startsWithChar (separator)) { @@ -137,10 +155,7 @@ String File::parseAbsolutePath (const String& p) // If that's why you've ended up here, use File::getChildFile() to build your paths instead. jassert ((! p.containsChar ('\\')) || (p.indexOfChar ('/') >= 0 && p.indexOfChar ('/') < p.indexOfChar ('\\'))); - String path (p); - - if (path.contains ("/../")) - path = removeEllipsis (path); + String path (removeEllipsis (p)); if (path.startsWithChar ('~')) { @@ -1058,7 +1073,9 @@ public: expect (home.getChildFile ("././xyz") == home.getChildFile ("xyz")); expect (home.getChildFile ("../xyz") == home.getParentDirectory().getChildFile ("xyz")); expect (home.getChildFile (".././xyz") == home.getParentDirectory().getChildFile ("xyz")); + expect (home.getChildFile (".././xyz/./abc") == home.getParentDirectory().getChildFile ("xyz/abc")); expect (home.getChildFile ("./../xyz") == home.getParentDirectory().getChildFile ("xyz")); + expect (home.getChildFile ("a1/a2/a3/./../../a4") == home.getChildFile ("a1/a4")); { FileOutputStream fo (tempFile); diff --git a/modules/juce_core/files/juce_FileSearchPath.cpp b/modules/juce_core/files/juce_FileSearchPath.cpp index 5531c62a..629ac604 100644 --- a/modules/juce_core/files/juce_FileSearchPath.cpp +++ b/modules/juce_core/files/juce_FileSearchPath.cpp @@ -87,13 +87,14 @@ void FileSearchPath::add (const File& dir, const int insertIndex) directories.insert (insertIndex, dir.getFullPathName()); } -void FileSearchPath::addIfNotAlreadyThere (const File& dir) +bool FileSearchPath::addIfNotAlreadyThere (const File& dir) { for (int i = 0; i < directories.size(); ++i) if (File (directories[i]) == dir) - return; + return false; add (dir); + return true; } void FileSearchPath::remove (const int index) diff --git a/modules/juce_core/files/juce_FileSearchPath.h b/modules/juce_core/files/juce_FileSearchPath.h index 3744a49b..1089c8b1 100644 --- a/modules/juce_core/files/juce_FileSearchPath.h +++ b/modules/juce_core/files/juce_FileSearchPath.h @@ -92,8 +92,11 @@ public: void add (const File& directoryToAdd, int insertIndex = -1); - /** Adds a new directory to the search path if it's not already in there. */ - void addIfNotAlreadyThere (const File& directoryToAdd); + /** Adds a new directory to the search path if it's not already in there. + + @return true if the directory has been added, false otherwise. + */ + bool addIfNotAlreadyThere (const File& directoryToAdd); /** Removes a directory from the search path. */ void remove (int indexToRemove); diff --git a/modules/juce_core/javascript/juce_JSON.cpp b/modules/juce_core/javascript/juce_JSON.cpp index 98762a67..455412c4 100644 --- a/modules/juce_core/javascript/juce_JSON.cpp +++ b/modules/juce_core/javascript/juce_JSON.cpp @@ -571,6 +571,19 @@ public: return CharPointer_ASCII (buffer); } + // (creates a random double that can be easily stringified, to avoid + // false failures when decimal places are rounded or truncated slightly) + static var createRandomDouble (Random& r) + { + for (;;) + { + var v (String (r.nextDouble() * 1000.0, 20).getDoubleValue()); + + if (v.toString() == String (static_cast (v), 20)) + return v; + } + } + static var createRandomVar (Random& r, int depth) { switch (r.nextInt (depth > 3 ? 6 : 8)) @@ -579,7 +592,7 @@ public: case 1: return r.nextInt(); case 2: return r.nextInt64(); case 3: return r.nextBool(); - case 4: return String (r.nextDouble(), 8).getDoubleValue(); + case 4: return createRandomDouble (r); case 5: return createRandomWideCharString (r); case 6: diff --git a/modules/juce_core/javascript/juce_Javascript.cpp b/modules/juce_core/javascript/juce_Javascript.cpp index 44bc7a6c..2fa845fa 100644 --- a/modules/juce_core/javascript/juce_Javascript.cpp +++ b/modules/juce_core/javascript/juce_Javascript.cpp @@ -67,12 +67,13 @@ struct JavascriptEngine::RootObject : public DynamicObject { RootObject() { - setMethod ("exec", exec); - setMethod ("eval", eval); - setMethod ("trace", trace); - setMethod ("charToInt", charToInt); - setMethod ("parseInt", IntegerClass::parseInt); - setMethod ("typeof", typeof_internal); + setMethod ("exec", exec); + setMethod ("eval", eval); + setMethod ("trace", trace); + setMethod ("charToInt", charToInt); + setMethod ("parseInt", IntegerClass::parseInt); + setMethod ("typeof", typeof_internal); + setMethod ("parseFloat", parseFloat); } Time timeout; @@ -1505,6 +1506,8 @@ struct JavascriptEngine::RootObject : public DynamicObject setMethod ("remove", remove); setMethod ("join", join); setMethod ("push", push); + setMethod ("splice", splice); + setMethod ("indexOf", indexOf); } static Identifier getClassName() { static const Identifier i ("Array"); return i; } @@ -1548,6 +1551,52 @@ struct JavascriptEngine::RootObject : public DynamicObject return var::undefined(); } + + static var splice (Args a) + { + if (Array* array = a.thisObject.getArray()) + { + const int arraySize = array->size(); + int start = get (a, 0); + + if (start < 0) + start = jmax (0, arraySize + start); + else if (start > arraySize) + start = arraySize; + + const int num = a.numArguments > 1 ? jlimit (0, arraySize - start, getInt (a, 1)) + : arraySize - start; + + Array itemsRemoved; + itemsRemoved.ensureStorageAllocated (num); + + for (int i = 0; i < num; ++i) + itemsRemoved.add (array->getReference (start + i)); + + array->removeRange (start, num); + + for (int i = 2; i < a.numArguments; ++i) + array->insert (start++, get (a, i)); + + return itemsRemoved; + } + + return var::undefined(); + } + + static var indexOf (Args a) + { + if (const Array* array = a.thisObject.getArray()) + { + const var target (get (a, 0)); + + for (int i = (a.numArguments > 1 ? getInt (a, 1) : 0); i < array->size(); ++i) + if (array->getReference(i) == target) + return i; + } + + return -1; + } }; //============================================================================== @@ -1677,6 +1726,7 @@ struct JavascriptEngine::RootObject : public DynamicObject //============================================================================== static var trace (Args a) { Logger::outputDebugString (JSON::toString (a.thisObject)); return var::undefined(); } static var charToInt (Args a) { return (int) (getString (a, 0)[0]); } + static var parseFloat (Args a) { return getDouble (a, 0); } static var typeof_internal (Args a) { diff --git a/modules/juce_core/juce_core.cpp b/modules/juce_core/juce_core.cpp index 34d63a25..370e7d75 100644 --- a/modules/juce_core/juce_core.cpp +++ b/modules/juce_core/juce_core.cpp @@ -82,6 +82,7 @@ #endif #if JUCE_LINUX + #include #include #include #include diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h index bb073d77..e27cdc89 100644 --- a/modules/juce_core/juce_core.h +++ b/modules/juce_core/juce_core.h @@ -38,7 +38,7 @@ ID: juce_core vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE core classes description: The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality. website: http://www.juce.com/juce diff --git a/modules/juce_core/maths/juce_BigInteger.cpp b/modules/juce_core/maths/juce_BigInteger.cpp index 81bcf61b..d5512450 100644 --- a/modules/juce_core/maths/juce_BigInteger.cpp +++ b/modules/juce_core/maths/juce_BigInteger.cpp @@ -385,12 +385,12 @@ BigInteger& BigInteger::operator+= (const BigInteger& other) BigInteger temp (*this); temp.negate(); *this = other; - operator-= (temp); + *this -= temp; } else { negate(); - operator-= (other); + *this -= other; negate(); } } @@ -436,7 +436,7 @@ BigInteger& BigInteger::operator-= (const BigInteger& other) { BigInteger temp (other); swapWith (temp); - operator-= (temp); + *this -= temp; negate(); return *this; } @@ -444,7 +444,7 @@ BigInteger& BigInteger::operator-= (const BigInteger& other) else { negate(); - operator+= (other); + *this += other; negate(); return *this; } @@ -476,24 +476,40 @@ BigInteger& BigInteger::operator-= (const BigInteger& other) BigInteger& BigInteger::operator*= (const BigInteger& other) { - BigInteger total; - highestBit = getHighestBit(); + int n = getHighestBit(); + int t = other.getHighestBit(); + const bool wasNegative = isNegative(); setNegative (false); - for (int i = 0; i <= highestBit; ++i) + BigInteger total; + total.highestBit = n + t + 1; + + n >>= 5; + t >>= 5; + + total.ensureSize ((size_t) (n + t + 2)); + + BigInteger m (other); + m.setNegative (false); + + for (int i = 0; i <= t; ++i) { - if (operator[](i)) + uint32 c = 0; + + for (int j = 0; j <= n; ++j) { - BigInteger n (other); - n.setNegative (false); - n <<= i; - total += n; + uint64 uv = (uint64) total.values[i + j] + (uint64) values[j] * (uint64) m.values[i] + (uint64) c; + total.values[i + j] = (uint32) uv; + c = uv >> 32; } + + total.values[i + n + 1] = c; } total.setNegative (wasNegative ^ other.isNegative()); swapWith (total); + return *this; } @@ -683,7 +699,7 @@ void BigInteger::shiftLeft (int bits, const int startBit) if (startBit > 0) { for (int i = highestBit + 1; --i >= startBit;) - setBit (i + bits, operator[] (i)); + setBit (i + bits, (*this) [i]); while (--bits >= 0) clearBit (bits + startBit); @@ -726,7 +742,7 @@ void BigInteger::shiftRight (int bits, const int startBit) if (startBit > 0) { for (int i = startBit; i <= highestBit; ++i) - setBit (i, operator[] (i + bits)); + setBit (i, (*this) [i + bits]); highestBit = getHighestBit(); } @@ -816,25 +832,128 @@ BigInteger BigInteger::findGreatestCommonDivisor (BigInteger n) const void BigInteger::exponentModulo (const BigInteger& exponent, const BigInteger& modulus) { + *this %= modulus; BigInteger exp (exponent); exp %= modulus; - BigInteger value (1); - swapWith (value); - value %= modulus; + if (modulus.getHighestBit() <= 32 || modulus % 2 == 0) + { + BigInteger a (*this); + + const int n = exp.getHighestBit(); + + for (int i = n; --i >= 0;) + { + *this *= *this; - while (! exp.isZero()) + if (exp[i]) + *this *= a; + + if (compareAbsolute (modulus) >= 0) + *this %= modulus; + } + } + else { - if (exp [0]) + const int Rfactor = modulus.getHighestBit() + 1; + BigInteger R (1); + R.shiftLeft (Rfactor, 0); + + BigInteger R1, m1, g; + g.extendedEuclidean (modulus, R, m1, R1); + + if (! g.isOne()) { - operator*= (value); - operator%= (modulus); + BigInteger a (*this); + + for (int i = exp.getHighestBit(); --i >= 0;) + { + *this *= *this; + + if (exp[i]) + *this *= a; + + if (compareAbsolute (modulus) >= 0) + *this %= modulus; + } } + else + { + BigInteger am (((*this) * R) % modulus); + BigInteger xm (am); + BigInteger um (R % modulus); - value *= value; - value %= modulus; - exp >>= 1; + for (int i = exp.getHighestBit(); --i >= 0;) + { + xm.montgomeryMultiplication (xm, modulus, m1, Rfactor); + + if (exp[i]) + xm.montgomeryMultiplication (am, modulus, m1, Rfactor); + } + + xm.montgomeryMultiplication (1, modulus, m1, Rfactor); + swapWith (xm); + } + } +} + +void BigInteger::montgomeryMultiplication (const BigInteger& other, const BigInteger& modulus, + const BigInteger& modulusp, const int k) +{ + *this *= other; + + BigInteger t (*this); + + setRange (k, highestBit - k + 1, false); + *this *= modulusp; + + setRange (k, highestBit - k + 1, false); + *this *= modulus; + *this += t; + shiftRight (k, 0); + + if (compare (modulus) >= 0) + *this -= modulus; + else if (isNegative()) + *this += modulus; +} + +void BigInteger::extendedEuclidean (const BigInteger& a, const BigInteger& b, + BigInteger& x, BigInteger& y) +{ + BigInteger p(a), q(b), gcd(1); + + Array tempValues; + + while (! q.isZero()) + { + tempValues.add (p / q); + gcd = q; + q = p % q; + p = gcd; + } + + x.clear(); + y = 1; + + for (int i = 1; i < tempValues.size(); ++i) + { + const BigInteger& v = tempValues.getReference (tempValues.size() - i - 1); + + if ((i & 1) != 0) + x += y * v; + else + y += x * v; } + + if (gcd.compareAbsolute (y * b - x * a) != 0) + { + x.negate(); + x.swapWith (y); + x.negate(); + } + + swapWith (gcd); } void BigInteger::inverseModulo (const BigInteger& modulus) @@ -846,7 +965,7 @@ void BigInteger::inverseModulo (const BigInteger& modulus) } if (isNegative() || compareAbsolute (modulus) >= 0) - operator%= (modulus); + *this %= modulus; if (isOne()) return; @@ -959,8 +1078,8 @@ void BigInteger::parseString (StringRef text, const int base) if (((uint32) digit) < (uint32) base) { - operator<<= (bits); - operator+= (digit); + *this <<= bits; + *this += digit; } else if (c == 0) { @@ -978,8 +1097,8 @@ void BigInteger::parseString (StringRef text, const int base) if (c >= '0' && c <= '9') { - operator*= (ten); - operator+= ((int) (c - '0')); + *this *= ten; + *this += (int) (c - '0'); } else if (c == 0) { diff --git a/modules/juce_core/maths/juce_BigInteger.h b/modules/juce_core/maths/juce_BigInteger.h index 2f99424a..ada0e89e 100644 --- a/modules/juce_core/maths/juce_BigInteger.h +++ b/modules/juce_core/maths/juce_BigInteger.h @@ -180,6 +180,22 @@ public: */ int getHighestBit() const noexcept; + //============================================================================== + /** Returns true if the value is less than zero. + @see setNegative, negate + */ + bool isNegative() const noexcept; + + /** Changes the sign of the number to be positive or negative. + @see isNegative, negate + */ + void setNegative (bool shouldBeNegative) noexcept; + + /** Inverts the sign of the number. + @see isNegative, setNegative + */ + void negate() noexcept; + //============================================================================== // All the standard arithmetic ops... @@ -236,6 +252,7 @@ public: */ int compareAbsolute (const BigInteger& other) const noexcept; + //============================================================================== /** Divides this value by another one and returns the remainder. This number is divided by other, leaving the quotient in this number, @@ -243,7 +260,7 @@ public: */ void divideBy (const BigInteger& divisor, BigInteger& remainder); - /** Returns the largest value that will divide both this value and the one passed-in. */ + /** Returns the largest value that will divide both this value and the argument. */ BigInteger findGreatestCommonDivisor (BigInteger other) const; /** Performs a combined exponent and modulo operation. @@ -256,21 +273,20 @@ public: */ void inverseModulo (const BigInteger& modulus); - //============================================================================== - /** Returns true if the value is less than zero. - @see setNegative, negate - */ - bool isNegative() const noexcept; - - /** Changes the sign of the number to be positive or negative. - @see isNegative, negate + /** Performs the Montgomery Multiplication with modulo. + This object is left containing the result value: ((this * other) * R1) % modulus. + To get this result, we need modulus, modulusp and k such as R = 2^k, with + modulus * modulusp - R * R1 = GCD(modulus, R) = 1 */ - void setNegative (bool shouldBeNegative) noexcept; + void montgomeryMultiplication (const BigInteger& other, const BigInteger& modulus, + const BigInteger& modulusp, int k); - /** Inverts the sign of the number. - @see isNegative, setNegative + /** Performs the Extended Euclidean algorithm. + This method will set the xOut and yOut arguments such that (a * xOut) - (b * yOut) = GCD (a, b). + On return, this object is left containing the value of the GCD. */ - void negate() noexcept; + void extendedEuclidean (const BigInteger& a, const BigInteger& b, + BigInteger& xOut, BigInteger& yOut); //============================================================================== /** Converts the number to a string. diff --git a/modules/juce_core/memory/juce_ReferenceCountedObject.h b/modules/juce_core/memory/juce_ReferenceCountedObject.h index 9a2e9c7f..cf60756f 100644 --- a/modules/juce_core/memory/juce_ReferenceCountedObject.h +++ b/modules/juce_core/memory/juce_ReferenceCountedObject.h @@ -246,6 +246,14 @@ public: incIfNotNull (refCountedObject); } + #if JUCE_COMPILER_SUPPORTS_NULLPTR + /** Creates a pointer to a null object. */ + ReferenceCountedObjectPtr (decltype (nullptr)) noexcept + : referencedObject (nullptr) + { + } + #endif + /** Copies another pointer. This will increment the object's reference-count. */ @@ -258,7 +266,7 @@ public: /** Copies another pointer. This will increment the object's reference-count (if it is non-null). */ - template + template ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr& other) noexcept : referencedObject (static_cast (other.get())) { @@ -278,7 +286,7 @@ public: The reference count of the old object is decremented, and it might be deleted if it hits zero. The new object's count is incremented. */ - template + template ReferenceCountedObjectPtr& operator= (const ReferenceCountedObjectPtr& other) { return operator= (static_cast (other.get())); @@ -370,42 +378,42 @@ private: //============================================================================== /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator== (const ReferenceCountedObjectPtr& object1, ReferenceCountedObjectClass* const object2) noexcept { return object1.get() == object2; } /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator== (const ReferenceCountedObjectPtr& object1, const ReferenceCountedObjectPtr& object2) noexcept { return object1.get() == object2.get(); } /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator== (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr& object2) noexcept { return object1 == object2.get(); } /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator!= (const ReferenceCountedObjectPtr& object1, const ReferenceCountedObjectClass* object2) noexcept { return object1.get() != object2; } /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator!= (const ReferenceCountedObjectPtr& object1, const ReferenceCountedObjectPtr& object2) noexcept { return object1.get() != object2.get(); } /** Compares two ReferenceCountedObjectPtrs. */ -template +template bool operator!= (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr& object2) noexcept { return object1 != object2.get(); diff --git a/modules/juce_core/memory/juce_ScopedPointer.h b/modules/juce_core/memory/juce_ScopedPointer.h index 6b460772..3db0c1cf 100644 --- a/modules/juce_core/memory/juce_ScopedPointer.h +++ b/modules/juce_core/memory/juce_ScopedPointer.h @@ -76,6 +76,13 @@ public: { } + #if JUCE_COMPILER_SUPPORTS_NULLPTR + /** Creates a ScopedPointer containing a null pointer. */ + inline ScopedPointer (decltype (nullptr)) noexcept : object (nullptr) + { + } + #endif + /** Creates a ScopedPointer that owns the specified object. */ inline ScopedPointer (ObjectType* const objectToTakePossessionOf) noexcept : object (objectToTakePossessionOf) diff --git a/modules/juce_core/native/juce_linux_Network.cpp b/modules/juce_core/native/juce_linux_Network.cpp index a05518c9..6401ca07 100644 --- a/modules/juce_core/native/juce_linux_Network.cpp +++ b/modules/juce_core/native/juce_linux_Network.cpp @@ -429,14 +429,15 @@ private: writeValueIfNotPresent (header, userHeaders, "Connection:", "close"); if (isPost) - { writeValueIfNotPresent (header, userHeaders, "Content-Length:", String ((int) postData.getSize())); - header << userHeaders << "\r\n" << postData; - } - else - { - header << "\r\n" << userHeaders << "\r\n"; - } + + if (userHeaders.isNotEmpty()) + header << "\r\n" << userHeaders; + + header << "\r\n"; + + if (isPost) + header << postData; return header.getMemoryBlock(); } diff --git a/modules/juce_core/native/juce_mac_Network.mm b/modules/juce_core/native/juce_mac_Network.mm index f14adc74..afde564f 100644 --- a/modules/juce_core/native/juce_mac_Network.mm +++ b/modules/juce_core/native/juce_mac_Network.mm @@ -35,6 +35,7 @@ void MACAddress::findAllAddresses (Array& result) for (const ifaddrs* cursor = addrs; cursor != nullptr; cursor = cursor->ifa_next) { sockaddr_storage* sto = (sockaddr_storage*) cursor->ifa_addr; + if (sto->ss_family == AF_LINK) { const sockaddr_dl* const sadd = (const sockaddr_dl*) cursor->ifa_addr; @@ -45,7 +46,7 @@ void MACAddress::findAllAddresses (Array& result) if (sadd->sdl_type == IFT_ETHER) { - MACAddress ma (MACAddress (((const uint8*) sadd->sdl_data) + sadd->sdl_nlen)); + MACAddress ma (((const uint8*) sadd->sdl_data) + sadd->sdl_nlen); if (! ma.isNull()) result.addIfNotAlreadyThere (ma); @@ -108,6 +109,253 @@ bool JUCE_CALLTYPE Process::openEmailWithAttachments (const String& targetEmailA #endif } +//============================================================================== +// Unfortunately, we need to have this ugly ifdef here as long as some older OS X versions do not support NSURLSession +#if JUCE_IOS || (defined (__MAC_OS_X_VERSION_MIN_REQUIRED) && defined (__MAC_10_10) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_10) + +//============================================================================== +class URLConnectionState : private Thread +{ +public: + URLConnectionState (NSURLRequest* req, const int maxRedirects) + : Thread ("http connection"), + request ([req retain]), + data ([[NSMutableData data] retain]), + numRedirectsToFollow (maxRedirects) + { + static DelegateClass cls; + delegate = [cls.createInstance() init]; + DelegateClass::setState (delegate, this); + } + + ~URLConnectionState() + { + stop(); + [data release]; + [request release]; + [headers release]; + [session release]; + [delegate release]; + } + + bool start (URL::OpenStreamProgressCallback* callback, void* context) + { + startThread(); + + while (isThreadRunning() && ! initialised) + { + if (callback != nullptr) + callback (context, (int) latestTotalBytes, (int) [[request HTTPBody] length]); + + Thread::sleep (1); + } + + return true; + } + + void stop() + { + { + const ScopedLock sl (dataLock); + [task cancel]; + } + + stopThread (10000); + [task release]; + task = nil; + } + + int read (char* dest, int numBytes) + { + int numDone = 0; + + while (numBytes > 0) + { + const int available = jmin (numBytes, (int) [data length]); + + if (available > 0) + { + const ScopedLock sl (dataLock); + [data getBytes: dest length: (NSUInteger) available]; + [data replaceBytesInRange: NSMakeRange (0, (NSUInteger) available) withBytes: nil length: 0]; + + numDone += available; + numBytes -= available; + dest += available; + } + else + { + if (hasFailed || hasFinished) + break; + + Thread::sleep (1); + } + } + + return numDone; + } + + void didReceiveResponse (NSURLResponse* response, id completionHandler) + { + { + const ScopedLock sl (dataLock); + [data setLength: 0]; + } + + contentLength = [response expectedContentLength]; + + [headers release]; + headers = nil; + + if ([response isKindOfClass: [NSHTTPURLResponse class]]) + { + auto httpResponse = (NSHTTPURLResponse*) response; + headers = [[httpResponse allHeaderFields] retain]; + statusCode = (int) [httpResponse statusCode]; + } + + initialised = true; + + if (completionHandler != nil) + { + // Need to wrangle this parameter back into an obj-C block, + // and call it to allow the transfer to continue.. + void (^callbackBlock)(NSURLSessionResponseDisposition) = completionHandler; + callbackBlock (NSURLSessionResponseAllow); + } + } + + void didBecomeInvalidWithError (NSError* error) + { + DBG (nsStringToJuce ([error description])); ignoreUnused (error); + hasFailed = true; + initialised = true; + signalThreadShouldExit(); + } + + void didReceiveData (NSData* newData) + { + const ScopedLock sl (dataLock); + [data appendData: newData]; + initialised = true; + } + + void didSendBodyData (int64_t totalBytesWritten) + { + latestTotalBytes = static_cast (totalBytesWritten); + } + + void willPerformHTTPRedirection (NSURLRequest* aRequest, void (^completionHandler)(NSURLRequest *)) + { + NSURLRequest* newRequest = (numRedirects++ < numRedirectsToFollow ? aRequest : nullptr); + completionHandler (newRequest); + } + + void run() override + { + jassert (task == nil && session == nil); + + session = [[NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration defaultSessionConfiguration] + delegate: delegate + delegateQueue: [NSOperationQueue currentQueue]] retain]; + + task = [session dataTaskWithRequest: request]; + + if (task == nil) + return; + + [task retain]; + [task resume]; + + while (! threadShouldExit()) + { + wait (5); + + if (task.state != NSURLSessionTaskStateRunning) + break; + } + + hasFinished = true; + initialised = true; + } + + int64 contentLength = -1; + CriticalSection dataLock; + id delegate = nil; + NSURLRequest* request = nil; + NSURLSession* session = nil; + NSURLSessionTask* task = nil; + NSMutableData* data = nil; + NSDictionary* headers = nil; + int statusCode = 0; + bool initialised = false, hasFailed = false, hasFinished = false; + const int numRedirectsToFollow; + int numRedirects = 0; + int64 latestTotalBytes = 0; + +private: + //============================================================================== + struct DelegateClass : public ObjCClass + { + DelegateClass() : ObjCClass ("JUCE_URLDelegate_") + { + addIvar ("state"); + + addMethod (@selector (URLSession:dataTask:didReceiveResponse:completionHandler:), + didReceiveResponse, "v@:@@@@"); + addMethod (@selector (URLSession:didBecomeInvalidWithError:), didBecomeInvalidWithError, "v@:@@"); + addMethod (@selector (URLSession:dataTask:didReceiveData:), didReceiveData, "v@:@@@"); + addMethod (@selector (URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:), + didSendBodyData, "v@:@@qqq"); + addMethod (@selector (URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:), + willPerformHTTPRedirection, "v@:@@@@@"); + registerClass(); + } + + static void setState (id self, URLConnectionState* state) { object_setInstanceVariable (self, "state", state); } + static URLConnectionState* getState (id self) { return getIvar (self, "state"); } + + private: + static void didReceiveResponse (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSURLResponse* response, id completionHandler) + { + getState (self)->didReceiveResponse (response, completionHandler); + } + + static void didBecomeInvalidWithError (id self, SEL, NSURLSession*, NSError* error) + { + getState (self)->didBecomeInvalidWithError (error); + } + + static void didReceiveData (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSData* newData) + { + getState (self)->didReceiveData (newData); + } + + static void didSendBodyData (id self, SEL, NSURLSession*, NSURLSessionTask*, int64_t, int64_t totalBytesWritten, int64_t) + { + getState (self)->didSendBodyData (totalBytesWritten); + } + + static void willPerformHTTPRedirection (id self, SEL, NSURLSession*, NSURLSessionTask*, NSHTTPURLResponse*, + NSURLRequest* request, void (^completionHandler)(NSURLRequest *)) + { + getState (self)->willPerformHTTPRedirection (request, completionHandler); + } + }; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (URLConnectionState) +}; + +//============================================================================== +#else + +// This version is only used for backwards-compatibility with older OSX targets, +// so we'll turn off deprecation warnings. This code will be removed at some point +// in the future. + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" + //============================================================================== class URLConnectionState : public Thread { @@ -160,7 +408,11 @@ public: void stop() { - [connection cancel]; + { + const ScopedLock sl (dataLock); + [connection cancel]; + } + stopThread (10000); } @@ -339,6 +591,10 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (URLConnectionState) }; +#pragma clang diagnostic pop + +#endif + //============================================================================== class WebInputStream : public InputStream @@ -372,8 +628,13 @@ public: } } + ~WebInputStream() + { + connection = nullptr; + } + //============================================================================== - bool isError() const { return connection == nullptr; } + bool isError() const { return (connection == nullptr || connection->headers == nullptr); } int64 getTotalLength() override { return connection == nullptr ? -1 : connection->contentLength; } bool isExhausted() override { return finished; } int64 getPosition() override { return position; } @@ -433,14 +694,11 @@ private: { jassert (connection == nullptr); - NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: juceStringToNS (address)] - cachePolicy: NSURLRequestReloadIgnoringLocalCacheData - timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)]; - - if (req != nil) + if (NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: juceStringToNS (address)] + cachePolicy: NSURLRequestReloadIgnoringLocalCacheData + timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)]) { [req setHTTPMethod: [NSString stringWithUTF8String: httpRequestCmd.toRawUTF8()]]; - //[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData]; StringArray headerLines; headerLines.addLines (headers); @@ -448,8 +706,8 @@ private: for (int i = 0; i < headerLines.size(); ++i) { - const String key (headerLines[i].upToFirstOccurrenceOf (":", false, false).trim()); - const String value (headerLines[i].fromFirstOccurrenceOf (":", false, false).trim()); + String key = headerLines[i].upToFirstOccurrenceOf (":", false, false).trim(); + String value = headerLines[i].fromFirstOccurrenceOf (":", false, false).trim(); if (key.isNotEmpty() && value.isNotEmpty()) [req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)]; diff --git a/modules/juce_core/native/juce_posix_SharedCode.h b/modules/juce_core/native/juce_posix_SharedCode.h index 412c36a3..033e4378 100644 --- a/modules/juce_core/native/juce_posix_SharedCode.h +++ b/modules/juce_core/native/juce_posix_SharedCode.h @@ -26,10 +26,6 @@ ============================================================================== */ -#ifdef JUCE_MODULE_AVAILABLE_juce_audio_plugin_client - extern int* jucePlugInClientCurrentWrapperType; -#endif - CriticalSection::CriticalSection() noexcept { pthread_mutexattr_t atts; @@ -336,11 +332,21 @@ uint64 File::getFileIdentifier() const return juce_stat (fullPath, info) ? (uint64) info.st_ino : 0; } +static bool hasEffectiveRootFilePermissions() +{ + #if JUCE_LINUX + return (geteuid() == 0); + #else + return false; + #endif +} + //============================================================================== bool File::hasWriteAccess() const { if (exists()) - return access (fullPath.toUTF8(), W_OK) == 0; + return (hasEffectiveRootFilePermissions() + || access (fullPath.toUTF8(), W_OK) == 0); if ((! isDirectory()) && fullPath.containsChar (separator)) return getParentDirectory().hasWriteAccess(); @@ -634,12 +640,7 @@ File juce_getExecutableFile() { Dl_info exeInfo; - #ifdef JUCE_MODULE_AVAILABLE_juce_audio_plugin_client - void* localSymbol = jucePlugInClientCurrentWrapperType != nullptr ? (void*) jucePlugInClientCurrentWrapperType - : (void*) juce_getExecutableFile; - #else void* localSymbol = (void*) juce_getExecutableFile; - #endif dladdr (localSymbol, &exeInfo); return CharPointer_UTF8 (exeInfo.dli_fname); } @@ -1090,14 +1091,14 @@ public: close (pipeHandles[0]); // close the read handle if ((streamFlags & wantStdOut) != 0) - dup2 (pipeHandles[1], 1); // turns the pipe into stdout + dup2 (pipeHandles[1], STDOUT_FILENO); // turns the pipe into stdout else - close (STDOUT_FILENO); + dup2 (open ("/dev/null", O_WRONLY), STDOUT_FILENO); if ((streamFlags & wantStdErr) != 0) - dup2 (pipeHandles[1], 2); + dup2 (pipeHandles[1], STDERR_FILENO); else - close (STDERR_FILENO); + dup2 (open ("/dev/null", O_WRONLY), STDERR_FILENO); close (pipeHandles[1]); diff --git a/modules/juce_core/native/juce_win32_Network.cpp b/modules/juce_core/native/juce_win32_Network.cpp index dc80f773..3282a600 100644 --- a/modules/juce_core/native/juce_win32_Network.cpp +++ b/modules/juce_core/native/juce_win32_Network.cpp @@ -53,7 +53,7 @@ public: if (! isError()) { DWORD bufferSizeBytes = 4096; - StringPairArray dataHeaders (false); + StringPairArray dataHeaders; for (;;) { diff --git a/modules/juce_core/native/juce_win32_SystemStats.cpp b/modules/juce_core/native/juce_win32_SystemStats.cpp index 027d06b0..e07e6a09 100644 --- a/modules/juce_core/native/juce_win32_SystemStats.cpp +++ b/modules/juce_core/native/juce_win32_SystemStats.cpp @@ -260,17 +260,6 @@ public: { LARGE_INTEGER ticks; QueryPerformanceCounter (&ticks); - - const int64 mainCounterAsHiResTicks = (juce_millisecondsSinceStartup() * hiResTicksPerSecond) / 1000; - const int64 newOffset = mainCounterAsHiResTicks - ticks.QuadPart; - - // fix for a very obscure PCI hardware bug that can make the counter - // sometimes jump forwards by a few seconds.. - const int64 offsetDrift = abs64 (newOffset - hiResTicksOffset); - - if (offsetDrift > (hiResTicksPerSecond >> 1)) - hiResTicksOffset = newOffset; - return ticks.QuadPart + hiResTicksOffset; } diff --git a/modules/juce_core/network/juce_URL.cpp b/modules/juce_core/network/juce_URL.cpp index 9a0a3e66..2350e8a1 100644 --- a/modules/juce_core/network/juce_URL.cpp +++ b/modules/juce_core/network/juce_URL.cpp @@ -136,7 +136,7 @@ namespace URLHelpers || url[i] == '+' || url[i] == '-' || url[i] == '.') ++i; - return url[i] == ':' ? i + 1 : 0; + return url.substring (i).startsWith ("://") ? i + 1 : 0; } static int findStartOfNetLocation (const String& url) diff --git a/modules/juce_core/system/juce_CompilerSupport.h b/modules/juce_core/system/juce_CompilerSupport.h index 9b903c8e..5169a373 100644 --- a/modules/juce_core/system/juce_CompilerSupport.h +++ b/modules/juce_core/system/juce_CompilerSupport.h @@ -98,7 +98,7 @@ #define JUCE_COMPILER_SUPPORTS_STATIC_ASSERT 1 #endif - #ifndef JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL + #if __has_feature (cxx_override_control) && (! defined (JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL)) #define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1 #endif diff --git a/modules/juce_core/system/juce_StandardHeader.h b/modules/juce_core/system/juce_StandardHeader.h index d7cf6184..2234f27e 100644 --- a/modules/juce_core/system/juce_StandardHeader.h +++ b/modules/juce_core/system/juce_StandardHeader.h @@ -36,7 +36,7 @@ */ #define JUCE_MAJOR_VERSION 4 #define JUCE_MINOR_VERSION 2 -#define JUCE_BUILDNUMBER 1 +#define JUCE_BUILDNUMBER 3 /** Current Juce version number. diff --git a/modules/juce_core/text/juce_StringArray.cpp b/modules/juce_core/text/juce_StringArray.cpp index dc331d8d..f31c8470 100644 --- a/modules/juce_core/text/juce_StringArray.cpp +++ b/modules/juce_core/text/juce_StringArray.cpp @@ -152,10 +152,13 @@ void StringArray::insert (const int index, const String& newString) strings.insert (index, newString); } -void StringArray::addIfNotAlreadyThere (const String& newString, const bool ignoreCase) +bool StringArray::addIfNotAlreadyThere (const String& newString, const bool ignoreCase) { - if (! contains (newString, ignoreCase)) - add (newString); + if (contains (newString, ignoreCase)) + return false; + + add (newString); + return true; } void StringArray::addArray (const StringArray& otherArray, int startIndex, int numElementsToAdd) diff --git a/modules/juce_core/text/juce_StringArray.h b/modules/juce_core/text/juce_StringArray.h index 9d96241e..d173a2c0 100644 --- a/modules/juce_core/text/juce_StringArray.h +++ b/modules/juce_core/text/juce_StringArray.h @@ -191,8 +191,10 @@ public: /** Adds a string to the array as long as it's not already in there. The search can optionally be case-insensitive. + + @return true if the string has been added, false otherwise. */ - void addIfNotAlreadyThere (const String& stringToAdd, bool ignoreCase = false); + bool addIfNotAlreadyThere (const String& stringToAdd, bool ignoreCase = false); /** Replaces one of the strings in the array with another one. diff --git a/modules/juce_core/unit_tests/juce_UnitTest.h b/modules/juce_core/unit_tests/juce_UnitTest.h index d698c95a..72a2896f 100644 --- a/modules/juce_core/unit_tests/juce_UnitTest.h +++ b/modules/juce_core/unit_tests/juce_UnitTest.h @@ -138,23 +138,78 @@ public: */ void expect (bool testResult, const String& failureMessage = String()); - /** Compares two values, and if they don't match, prints out a message containing the - expected and actual result values. + //============================================================================== + /** Compares a value to an expected value. + If they are not equal, prints out a message containing the expected and actual values. */ template void expectEquals (ValueType actual, ValueType expected, String failureMessage = String()) { - const bool result = (actual == expected); + bool result = actual == expected; + expectResultAndPrint (actual, expected, result, "", failureMessage); + } - if (! result) - { - if (failureMessage.isNotEmpty()) - failureMessage << " -- "; + /** Checks whether a value is not equal to a comparison value. + If this check fails, prints out a message containing the actual and comparison values. + */ + template + void expectNotEquals (ValueType value, ValueType valueToCompareTo, String failureMessage = String()) + { + bool result = value != valueToCompareTo; + expectResultAndPrint (value, valueToCompareTo, result, "unequal to", failureMessage); + } - failureMessage << "Expected value: " << expected << ", Actual value: " << actual; - } + /** Checks whether a value is greater than a comparison value. + If this check fails, prints out a message containing the actual and comparison values. + */ + template + void expectGreaterThan (ValueType value, ValueType valueToCompareTo, String failureMessage = String()) + { + bool result = value > valueToCompareTo; + expectResultAndPrint (value, valueToCompareTo, result, "greater than", failureMessage); + } - expect (result, failureMessage); + /** Checks whether a value is less than a comparison value. + If this check fails, prints out a message containing the actual and comparison values. + */ + template + void expectLessThan (ValueType value, ValueType valueToCompareTo, String failureMessage = String()) + { + bool result = value < valueToCompareTo; + expectResultAndPrint (value, valueToCompareTo, result, "less than", failureMessage); + } + + /** Checks whether a value is greater or equal to a comparison value. + If this check fails, prints out a message containing the actual and comparison values. + */ + template + void expectGreaterOrEqual (ValueType value, ValueType valueToCompareTo, String failureMessage = String()) + { + bool result = value >= valueToCompareTo; + expectResultAndPrint (value, valueToCompareTo, result, "greater or equal to", failureMessage); + } + + /** Checks whether a value is less or equal to a comparison value. + If this check fails, prints out a message containing the actual and comparison values. + */ + template + void expectLessOrEqual (ValueType value, ValueType valueToCompareTo, String failureMessage = String()) + { + bool result = value <= valueToCompareTo; + expectResultAndPrint (value, valueToCompareTo, result, "less or equal to", failureMessage); + } + + /** Computes the difference between a value and a comparison value, and if it is larger than a + specified maximum value, prints out a message containing the actual and comparison values + and the maximum allowed error. + */ + template + void expectWithinAbsoluteError (ValueType actual, ValueType expected, ValueType maxAbsoluteError, String failureMessage = String()) + { + const ValueType diff = std::abs (actual - expected); + const bool result = diff <= maxAbsoluteError; + + expectResultAndPrint (actual, expected, result, " within " + String (maxAbsoluteError) + " of" , failureMessage); } //============================================================================== @@ -221,6 +276,24 @@ public: Random getRandom() const; private: + //============================================================================== + template + void expectResultAndPrint (ValueType value, ValueType valueToCompareTo, bool result, + String compDescription, String failureMessage) + { + if (! result) + { + if (failureMessage.isNotEmpty()) + failureMessage << " -- "; + + failureMessage << "Expected value" << (compDescription.isEmpty() ? "" : " ") + << compDescription << ": " << valueToCompareTo + << ", Actual value: " << value; + } + + expect (result, failureMessage); + } + //============================================================================== const String name; UnitTestRunner* runner; diff --git a/modules/juce_core/xml/juce_XmlDocument.cpp b/modules/juce_core/xml/juce_XmlDocument.cpp index c0f016e3..bf56f4f6 100644 --- a/modules/juce_core/xml/juce_XmlDocument.cpp +++ b/modules/juce_core/xml/juce_XmlDocument.cpp @@ -617,9 +617,17 @@ void XmlDocument::readChildElements (XmlElement& parent) } else { - for (;;) + for (;; ++input) { - const juce_wchar nextChar = *input; + juce_wchar nextChar = *input; + + if (nextChar == '\r') + { + nextChar = '\n'; + + if (input[1] == '\n') + continue; + } if (nextChar == '<' || nextChar == '&') break; @@ -633,7 +641,6 @@ void XmlDocument::readChildElements (XmlElement& parent) textElementContent.appendUTF8Char (nextChar); contentShouldBeUsed = contentShouldBeUsed || ! CharacterFunctions::isWhitespace (nextChar); - ++input; } } } diff --git a/modules/juce_cryptography/juce_cryptography.h b/modules/juce_cryptography/juce_cryptography.h index 2f7d422f..047172a4 100644 --- a/modules/juce_cryptography/juce_cryptography.h +++ b/modules/juce_cryptography/juce_cryptography.h @@ -33,7 +33,7 @@ ID: juce_cryptography vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE cryptography classes description: Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc. website: http://www.juce.com/juce diff --git a/modules/juce_data_structures/juce_data_structures.h b/modules/juce_data_structures/juce_data_structures.h index e9b3922a..fd8b0c32 100644 --- a/modules/juce_data_structures/juce_data_structures.h +++ b/modules/juce_data_structures/juce_data_structures.h @@ -33,7 +33,7 @@ ID: juce_data_structures vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE data model helper classes description: Classes for undo/redo management, and smart data structures. website: http://www.juce.com/juce diff --git a/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp b/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp index b422a1cb..3890f8a8 100644 --- a/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp +++ b/modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp @@ -33,13 +33,13 @@ InterprocessConnectionServer::~InterprocessConnectionServer() } //============================================================================== -bool InterprocessConnectionServer::beginWaitingForSocket (const int portNumber) +bool InterprocessConnectionServer::beginWaitingForSocket (const int portNumber, const String& bindAddress) { stop(); socket = new StreamingSocket(); - if (socket->createListener (portNumber)) + if (socket->createListener (portNumber, bindAddress)) { startThread(); return true; diff --git a/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h b/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h index 32350837..01bee327 100644 --- a/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h +++ b/modules/juce_events/interprocess/juce_InterprocessConnectionServer.h @@ -57,9 +57,16 @@ public: Use stop() to stop the thread running. + @param portNumber The port on which the server will receive + connections + @param bindAddress The address on which the server will listen + for connections. An empty string indicates + that it should listen on all addresses + assigned to this machine. + @see createConnectionObject, stop */ - bool beginWaitingForSocket (int portNumber); + bool beginWaitingForSocket (int portNumber, const String& bindAddress = String()); /** Terminates the listener thread, if it's active. diff --git a/modules/juce_events/juce_events.h b/modules/juce_events/juce_events.h index 2a0798db..b2e6c5e4 100644 --- a/modules/juce_events/juce_events.h +++ b/modules/juce_events/juce_events.h @@ -33,7 +33,7 @@ ID: juce_events vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE message and event handling classes description: Classes for running an application's main event loop and sending/receiving messages, timers, etc. website: http://www.juce.com/juce diff --git a/modules/juce_events/messages/juce_ApplicationBase.cpp b/modules/juce_events/messages/juce_ApplicationBase.cpp index 66cd07f4..f130bf41 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.cpp +++ b/modules/juce_events/messages/juce_ApplicationBase.cpp @@ -257,6 +257,16 @@ bool JUCEApplicationBase::initialiseApp() } #endif + #if JUCE_WINDOWS && JUCE_STANDALONE_APPLICATION && ! defined (_CONSOLE) + if (AttachConsole (ATTACH_PARENT_PROCESS) != 0) + { + // if we've launched a GUI app from cmd.exe or PowerShell, we need this to enable printf etc. + freopen("CON", "w", stdout); + freopen("CON", "w", stderr); + freopen("CON", "r", stdin); + } + #endif + // let the app do its setting-up.. initialise (getCommandLineParameters()); diff --git a/modules/juce_graphics/contexts/juce_GraphicsContext.cpp b/modules/juce_graphics/contexts/juce_GraphicsContext.cpp index 2efb3aa9..4f3df524 100644 --- a/modules/juce_graphics/contexts/juce_GraphicsContext.cpp +++ b/modules/juce_graphics/contexts/juce_GraphicsContext.cpp @@ -25,7 +25,7 @@ namespace { template - Rectangle coordsToRectangle (Type x, Type y, Type w, Type h) + Rectangle coordsToRectangle (Type x, Type y, Type w, Type h) noexcept { #if JUCE_DEBUG const int maxVal = 0x3fffffff; @@ -77,7 +77,7 @@ bool Graphics::isVectorDevice() const return context.isVectorDevice(); } -bool Graphics::reduceClipRegion (const Rectangle& area) +bool Graphics::reduceClipRegion (Rectangle area) { saveStateIfPending(); return context.clipToRectangle (area); @@ -85,7 +85,7 @@ bool Graphics::reduceClipRegion (const Rectangle& area) bool Graphics::reduceClipRegion (const int x, const int y, const int w, const int h) { - return reduceClipRegion (Rectangle (x, y, w, h)); + return reduceClipRegion (coordsToRectangle (x, y, w, h)); } bool Graphics::reduceClipRegion (const RectangleList& clipRegion) @@ -108,7 +108,7 @@ bool Graphics::reduceClipRegion (const Image& image, const AffineTransform& tran return ! context.isClipEmpty(); } -void Graphics::excludeClipRegion (const Rectangle& rectangleToExclude) +void Graphics::excludeClipRegion (Rectangle rectangleToExclude) { saveStateIfPending(); context.excludeClipRectangle (rectangleToExclude); @@ -164,7 +164,7 @@ void Graphics::addTransform (const AffineTransform& transform) context.addTransform (transform); } -bool Graphics::clipRegionIntersects (const Rectangle& area) const +bool Graphics::clipRegionIntersects (Rectangle area) const { return context.clipRegionIntersects (area); } @@ -281,7 +281,7 @@ void Graphics::drawMultiLineText (const String& text, const int startX, } } -void Graphics::drawText (const String& text, const Rectangle& area, +void Graphics::drawText (const String& text, Rectangle area, Justification justificationType, bool useEllipsesIfTooBig) const { if (text.isNotEmpty() && context.clipRegionIntersects (area.getSmallestIntegerContainer())) @@ -297,19 +297,19 @@ void Graphics::drawText (const String& text, const Rectangle& area, } } -void Graphics::drawText (const String& text, const Rectangle& area, +void Graphics::drawText (const String& text, Rectangle area, Justification justificationType, bool useEllipsesIfTooBig) const { drawText (text, area.toFloat(), justificationType, useEllipsesIfTooBig); } -void Graphics::drawText (const String& text, const int x, const int y, const int width, const int height, +void Graphics::drawText (const String& text, int x, int y, int width, int height, Justification justificationType, const bool useEllipsesIfTooBig) const { - drawText (text, Rectangle (x, y, width, height), justificationType, useEllipsesIfTooBig); + drawText (text, coordsToRectangle (x, y, width, height), justificationType, useEllipsesIfTooBig); } -void Graphics::drawFittedText (const String& text, const Rectangle& area, +void Graphics::drawFittedText (const String& text, Rectangle area, Justification justification, const int maximumNumberOfLines, const float minimumHorizontalScale) const @@ -328,7 +328,7 @@ void Graphics::drawFittedText (const String& text, const Rectangle& area, } } -void Graphics::drawFittedText (const String& text, const int x, const int y, const int width, const int height, +void Graphics::drawFittedText (const String& text, int x, int y, int width, int height, Justification justification, const int maximumNumberOfLines, const float minimumHorizontalScale) const @@ -338,12 +338,12 @@ void Graphics::drawFittedText (const String& text, const int x, const int y, con } //============================================================================== -void Graphics::fillRect (const Rectangle& r) const +void Graphics::fillRect (Rectangle r) const { context.fillRect (r, false); } -void Graphics::fillRect (const Rectangle& r) const +void Graphics::fillRect (Rectangle r) const { context.fillRect (r); } @@ -371,7 +371,7 @@ void Graphics::fillRectList (const RectangleList& rects) const void Graphics::setPixel (int x, int y) const { - context.fillRect (Rectangle (x, y, 1, 1), false); + context.fillRect (coordsToRectangle (x, y, 1, 1), false); } void Graphics::fillAll() const @@ -426,7 +426,7 @@ void Graphics::drawRect (int x, int y, int width, int height, int lineThickness) drawRect (coordsToRectangle (x, y, width, height), lineThickness); } -void Graphics::drawRect (const Rectangle& r, int lineThickness) const +void Graphics::drawRect (Rectangle r, int lineThickness) const { drawRect (r.toFloat(), (float) lineThickness); } @@ -444,7 +444,7 @@ void Graphics::drawRect (Rectangle r, const float lineThickness) const } //============================================================================== -void Graphics::fillEllipse (const Rectangle& area) const +void Graphics::fillEllipse (Rectangle area) const { Path p; p.addEllipse (area); @@ -453,19 +453,31 @@ void Graphics::fillEllipse (const Rectangle& area) const void Graphics::fillEllipse (float x, float y, float w, float h) const { - fillEllipse (Rectangle (x, y, w, h)); + fillEllipse (coordsToRectangle (x, y, w, h)); } void Graphics::drawEllipse (float x, float y, float width, float height, float lineThickness) const { - Path p; - p.addEllipse (x, y, width, height); - strokePath (p, PathStrokeType (lineThickness)); + drawEllipse (coordsToRectangle (x, y, width, height), lineThickness); } -void Graphics::drawEllipse (const Rectangle& area, float lineThickness) const +void Graphics::drawEllipse (Rectangle area, float lineThickness) const { - drawEllipse (area.getX(), area.getY(), area.getWidth(), area.getHeight(), lineThickness); + Path p; + + if (area.getWidth() == area.getHeight()) + { + // For a circle, we can avoid having to generate a stroke + p.addEllipse (area.expanded (lineThickness * 0.5f)); + p.addEllipse (area.reduced (lineThickness * 0.5f)); + p.setUsingNonZeroWinding (false); + fillPath (p); + } + else + { + p.addEllipse (area); + strokePath (p, PathStrokeType (lineThickness)); + } } void Graphics::fillRoundedRectangle (float x, float y, float width, float height, float cornerSize) const @@ -473,7 +485,7 @@ void Graphics::fillRoundedRectangle (float x, float y, float width, float height fillRoundedRectangle (coordsToRectangle (x, y, width, height), cornerSize); } -void Graphics::fillRoundedRectangle (const Rectangle& r, const float cornerSize) const +void Graphics::fillRoundedRectangle (Rectangle r, const float cornerSize) const { Path p; p.addRoundedRectangle (r, cornerSize); @@ -486,7 +498,7 @@ void Graphics::drawRoundedRectangle (float x, float y, float width, float height drawRoundedRectangle (coordsToRectangle (x, y, width, height), cornerSize, lineThickness); } -void Graphics::drawRoundedRectangle (const Rectangle& r, float cornerSize, float lineThickness) const +void Graphics::drawRoundedRectangle (Rectangle r, float cornerSize, float lineThickness) const { Path p; p.addRoundedRectangle (r, cornerSize); @@ -500,7 +512,7 @@ void Graphics::drawArrow (const Line& line, float lineThickness, float ar fillPath (p); } -void Graphics::fillCheckerBoard (const Rectangle& area, +void Graphics::fillCheckerBoard (Rectangle area, const int checkWidth, const int checkHeight, Colour colour1, Colour colour2) const { @@ -630,18 +642,22 @@ void Graphics::drawImageAt (const Image& imageToDraw, int x, int y, bool fillAlp fillAlphaChannel); } -void Graphics::drawImageWithin (const Image& imageToDraw, - int dx, int dy, int dw, int dh, - RectanglePlacement placementWithinTarget, - const bool fillAlphaChannelWithCurrentBrush) const +void Graphics::drawImage (const Image& imageToDraw, Rectangle targetArea, + RectanglePlacement placementWithinTarget, bool fillAlphaChannelWithCurrentBrush) const { if (imageToDraw.isValid()) drawImageTransformed (imageToDraw, - placementWithinTarget.getTransformToFit (imageToDraw.getBounds().toFloat(), - coordsToRectangle (dx, dy, dw, dh).toFloat()), + placementWithinTarget.getTransformToFit (imageToDraw.getBounds().toFloat(), targetArea), fillAlphaChannelWithCurrentBrush); } +void Graphics::drawImageWithin (const Image& imageToDraw, int dx, int dy, int dw, int dh, + RectanglePlacement placementWithinTarget, bool fillAlphaChannelWithCurrentBrush) const +{ + drawImage (imageToDraw, coordsToRectangle (dx, dy, dw, dh).toFloat(), + placementWithinTarget, fillAlphaChannelWithCurrentBrush); +} + void Graphics::drawImage (const Image& imageToDraw, int dx, int dy, int dw, int dh, int sx, int sy, int sw, int sh, diff --git a/modules/juce_graphics/contexts/juce_GraphicsContext.h b/modules/juce_graphics/contexts/juce_GraphicsContext.h index 3cfcc8cf..98205394 100644 --- a/modules/juce_graphics/contexts/juce_GraphicsContext.h +++ b/modules/juce_graphics/contexts/juce_GraphicsContext.h @@ -170,7 +170,7 @@ public: @see drawSingleLineText, drawFittedText, drawMultiLineText, GlyphArrangement::addJustifiedText */ void drawText (const String& text, - const Rectangle& area, + Rectangle area, Justification justificationType, bool useEllipsesIfTooBig = true) const; @@ -184,7 +184,7 @@ public: @see drawSingleLineText, drawFittedText, drawMultiLineText, GlyphArrangement::addJustifiedText */ void drawText (const String& text, - const Rectangle& area, + Rectangle area, Justification justificationType, bool useEllipsesIfTooBig = true) const; @@ -233,7 +233,7 @@ public: @see GlyphArrangement::addFittedText */ void drawFittedText (const String& text, - const Rectangle& area, + Rectangle area, Justification justificationFlags, int maximumNumberOfLines, float minimumHorizontalScale = 0.0f) const; @@ -257,12 +257,12 @@ public: /** Fills a rectangle with the current colour or brush. @see drawRect, fillRoundedRectangle */ - void fillRect (const Rectangle& rectangle) const; + void fillRect (Rectangle rectangle) const; /** Fills a rectangle with the current colour or brush. @see drawRect, fillRoundedRectangle */ - void fillRect (const Rectangle& rectangle) const; + void fillRect (Rectangle rectangle) const; /** Fills a rectangle with the current colour or brush. @see drawRect, fillRoundedRectangle @@ -297,11 +297,11 @@ public: /** Uses the current colour or brush to fill a rectangle with rounded corners. @see drawRoundedRectangle, Path::addRoundedRectangle */ - void fillRoundedRectangle (const Rectangle& rectangle, + void fillRoundedRectangle (Rectangle rectangle, float cornerSize) const; /** Fills a rectangle with a checkerboard pattern, alternating between two colours. */ - void fillCheckerBoard (const Rectangle& area, + void fillCheckerBoard (Rectangle area, int checkWidth, int checkHeight, Colour colour1, Colour colour2) const; @@ -321,7 +321,7 @@ public: The lines are drawn inside the given rectangle, and greater line thicknesses extend inwards. @see fillRect */ - void drawRect (const Rectangle& rectangle, int lineThickness = 1) const; + void drawRect (Rectangle rectangle, int lineThickness = 1) const; /** Draws a rectangular outline, using the current colour or brush. The lines are drawn inside the given rectangle, and greater line thicknesses extend inwards. @@ -338,7 +338,7 @@ public: /** Uses the current colour or brush to draw the outline of a rectangle with rounded corners. @see fillRoundedRectangle, Path::addRoundedRectangle */ - void drawRoundedRectangle (const Rectangle& rectangle, + void drawRoundedRectangle (Rectangle rectangle, float cornerSize, float lineThickness) const; /** Fills a 1x1 pixel using the current colour or brush. @@ -358,7 +358,7 @@ public: The ellipse is drawn to fit inside the given rectangle. @see drawEllipse, Path::addEllipse */ - void fillEllipse (const Rectangle& area) const; + void fillEllipse (Rectangle area) const; /** Draws an elliptical stroke using the current colour or brush. @see fillEllipse, Path::addEllipse @@ -369,7 +369,7 @@ public: /** Draws an elliptical stroke using the current colour or brush. @see fillEllipse, Path::addEllipse */ - void drawEllipse (const Rectangle& area, float lineThickness) const; + void drawEllipse (Rectangle area, float lineThickness) const; //============================================================================== /** Draws a line between two points. @@ -542,6 +542,23 @@ public: const AffineTransform& transform, bool fillAlphaChannelWithCurrentBrush = false) const; + /** Draws an image to fit within a designated rectangle. + + @param imageToDraw the source image to draw + @param destArea the target rectangle to fit it into + @param placementWithinTarget this specifies how the image should be positioned + within the target rectangle - see the RectanglePlacement + class for more details about this. + @param fillAlphaChannelWithCurrentBrush if true, then instead of drawing the image, just its + alpha channel will be used as a mask with which to + draw with the current brush or colour. This is + similar to fillAlphaMap(), and see also drawImage() + @see drawImage, drawImageTransformed, drawImageAt, RectanglePlacement + */ + void drawImage (const Image& imageToDraw, Rectangle targetArea, + RectanglePlacement placementWithinTarget = RectanglePlacement::stretchToFit, + bool fillAlphaChannelWithCurrentBrush = false) const; + /** Draws an image to fit within a designated rectangle. If the image is too big or too small for the space, it will be rescaled @@ -568,7 +585,6 @@ public: RectanglePlacement placementWithinTarget, bool fillAlphaChannelWithCurrentBrush = false) const; - //============================================================================== /** Returns the position of the bounding box for the current clipping region. @see getClipRegion, clipRegionIntersects @@ -581,7 +597,7 @@ public: method can be used to optimise a component's paint() method, by letting it avoid drawing complex objects that aren't within the region being repainted. */ - bool clipRegionIntersects (const Rectangle& area) const; + bool clipRegionIntersects (Rectangle area) const; /** Intersects the current clipping region with another region. @@ -595,7 +611,7 @@ public: @returns true if the resulting clipping region is non-zero in size @see setOrigin, clipRegionIntersects */ - bool reduceClipRegion (const Rectangle& area); + bool reduceClipRegion (Rectangle area); /** Intersects the current clipping region with a rectangle list region. @@ -625,7 +641,7 @@ public: bool reduceClipRegion (const Image& image, const AffineTransform& transform); /** Excludes a rectangle to stop it being drawn into. */ - void excludeClipRegion (const Rectangle& rectangleToExclude); + void excludeClipRegion (Rectangle rectangleToExclude); /** Returns true if no drawing can be done because the clip region is zero. */ bool isClipEmpty() const; diff --git a/modules/juce_graphics/geometry/juce_PathStrokeType.cpp b/modules/juce_graphics/geometry/juce_PathStrokeType.cpp index c0dd8789..9f55b039 100644 --- a/modules/juce_graphics/geometry/juce_PathStrokeType.cpp +++ b/modules/juce_graphics/geometry/juce_PathStrokeType.cpp @@ -449,7 +449,7 @@ namespace PathStrokeHelpers { destPath.startNewSubPath (firstLine.rx2, firstLine.ry2); - if (arrowhead != nullptr) + if (arrowhead != nullptr && arrowhead->startWidth > 0.0f) addArrowhead (destPath, firstLine.rx2, firstLine.ry2, lastX1, lastY1, firstLine.x1, firstLine.y1, width, arrowhead->startWidth); else @@ -491,7 +491,7 @@ namespace PathStrokeHelpers { destPath.lineTo (lastX2, lastY2); - if (arrowhead != nullptr) + if (arrowhead != nullptr && arrowhead->endWidth > 0.0f) addArrowhead (destPath, lastX2, lastY2, lastLine.rx1, lastLine.ry1, lastLine.x2, lastLine.y2, width, arrowhead->endWidth); else diff --git a/modules/juce_graphics/images/juce_Image.cpp b/modules/juce_graphics/images/juce_Image.cpp index cb51d5d8..2bf79eb8 100644 --- a/modules/juce_graphics/images/juce_Image.cpp +++ b/modules/juce_graphics/images/juce_Image.cpp @@ -102,7 +102,7 @@ public: sendDataChangeMessage(); } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { SoftwarePixelData* s = new SoftwarePixelData (pixelFormat, width, height, false); memcpy (s->imageData, imageData, (size_t) (lineStride * height)); @@ -153,13 +153,13 @@ class SubsectionPixelData : public ImagePixelData public: SubsectionPixelData (ImagePixelData* const im, const Rectangle& r) : ImagePixelData (im->pixelFormat, r.getWidth(), r.getHeight()), - image (im), area (r) + sourceImage (im), area (r) { } LowLevelGraphicsContext* createLowLevelContext() override { - LowLevelGraphicsContext* g = image->createLowLevelContext(); + LowLevelGraphicsContext* g = sourceImage->createLowLevelContext(); g->clipToRectangle (area); g->setOrigin (area.getPosition()); return g; @@ -167,16 +167,16 @@ public: void initialiseBitmapData (Image::BitmapData& bitmap, int x, int y, Image::BitmapData::ReadWriteMode mode) override { - image->initialiseBitmapData (bitmap, x + area.getX(), y + area.getY(), mode); + sourceImage->initialiseBitmapData (bitmap, x + area.getX(), y + area.getY(), mode); if (mode != Image::BitmapData::readOnly) sendDataChangeMessage(); } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { jassert (getReferenceCount() > 0); // (This method can't be used on an unowned pointer, as it will end up self-deleting) - const ScopedPointer type (image->createType()); + const ScopedPointer type (createType()); Image newImage (type->create (pixelFormat, area.getWidth(), area.getHeight(), pixelFormat != Image::RGB)); @@ -185,18 +185,17 @@ public: g.drawImageAt (Image (this), 0, 0); } - newImage.getPixelData()->incReferenceCount(); return newImage.getPixelData(); } - ImageType* createType() const override { return image->createType(); } + ImageType* createType() const override { return sourceImage->createType(); } /* as we always hold a reference to image, don't double count */ - int getSharedCount() const noexcept override { return getReferenceCount() + image->getSharedCount() - 1; } + int getSharedCount() const noexcept override { return getReferenceCount() + sourceImage->getSharedCount() - 1; } private: friend class Image; - const ImagePixelData::Ptr image; + const ImagePixelData::Ptr sourceImage; const Rectangle area; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SubsectionPixelData) diff --git a/modules/juce_graphics/images/juce_Image.h b/modules/juce_graphics/images/juce_Image.h index 189094c9..d246739c 100644 --- a/modules/juce_graphics/images/juce_Image.h +++ b/modules/juce_graphics/images/juce_Image.h @@ -435,10 +435,12 @@ public: ImagePixelData (Image::PixelFormat, int width, int height); ~ImagePixelData(); + typedef ReferenceCountedObjectPtr Ptr; + /** Creates a context that will draw into this image. */ virtual LowLevelGraphicsContext* createLowLevelContext() = 0; /** Creates a copy of this image. */ - virtual ImagePixelData* clone() = 0; + virtual Ptr clone() = 0; /** Creates an instance of the type of this image. */ virtual ImageType* createType() const = 0; /** Initialises a BitmapData object. */ @@ -458,8 +460,6 @@ public: */ NamedValueSet userData; - typedef ReferenceCountedObjectPtr Ptr; - //============================================================================== struct Listener { diff --git a/modules/juce_graphics/juce_graphics.h b/modules/juce_graphics/juce_graphics.h index 795b61bb..e367bde0 100644 --- a/modules/juce_graphics/juce_graphics.h +++ b/modules/juce_graphics/juce_graphics.h @@ -33,7 +33,7 @@ ID: juce_graphics vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE graphics classes description: Classes for 2D vector graphics, image loading/saving, font handling, etc. website: http://www.juce.com/juce diff --git a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm index 584e6e79..90ff506b 100644 --- a/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm +++ b/modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm @@ -72,7 +72,7 @@ public: } } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { CoreGraphicsImage* im = new CoreGraphicsImage (pixelFormat, width, height, false); memcpy (im->imageData, imageData, (size_t) (lineStride * height)); diff --git a/modules/juce_gui_basics/buttons/juce_DrawableButton.h b/modules/juce_gui_basics/buttons/juce_DrawableButton.h index 072cbbf7..7c142bcd 100644 --- a/modules/juce_gui_basics/buttons/juce_DrawableButton.h +++ b/modules/juce_gui_basics/buttons/juce_DrawableButton.h @@ -73,19 +73,19 @@ public: The button will keep its own internal copies of these drawables. @param normalImage the thing to draw for the button's 'normal' state. An internal copy - will be made of the object passed-in if it is non-zero. + will be made of the object passed-in if it is non-null. @param overImage the thing to draw for the button's 'over' state - if this is - zero, the button's normal image will be used when the mouse is + null, the button's normal image will be used when the mouse is over it. An internal copy will be made of the object passed-in - if it is non-zero. + if it is non-null. @param downImage the thing to draw for the button's 'down' state - if this is - zero, the 'over' image will be used instead (or the normal image + null, the 'over' image will be used instead (or the normal image as a last resort). An internal copy will be made of the object - passed-in if it is non-zero. - @param disabledImage an image to draw when the button is disabled. If this is zero, + passed-in if it is non-null. + @param disabledImage an image to draw when the button is disabled. If this is null, the normal image will be drawn with a reduced opacity instead. An internal copy will be made of the object passed-in if it is - non-zero. + non-null. @param normalImageOn same as the normalImage, but this is used when the button's toggle state is 'on'. If this is nullptr, the normal image is used instead @param overImageOn same as the overImage, but this is used when the button's toggle diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index 23d7ab1a..f96dadcc 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -1712,7 +1712,7 @@ int Component::runModalLoop() ->callFunctionOnMessageThread (&ComponentHelpers::runModalLoopCallback, this); } - if (! isCurrentlyModal()) + if (! isCurrentlyModal (false)) enterModalState (true); return ModalComponentManager::getInstance()->runEventLoopForCurrentComponent(); @@ -1728,7 +1728,7 @@ void Component::enterModalState (const bool shouldTakeKeyboardFocus, // thread, you'll need to use a MessageManagerLock object to make sure it's thread-safe. ASSERT_MESSAGE_MANAGER_IS_LOCKED - if (! isCurrentlyModal()) + if (! isCurrentlyModal (false)) { ModalComponentManager& mcm = *ModalComponentManager::getInstance(); mcm.startModal (this, deleteWhenDismissed); @@ -1748,7 +1748,7 @@ void Component::enterModalState (const bool shouldTakeKeyboardFocus, void Component::exitModalState (const int returnValue) { - if (isCurrentlyModal()) + if (isCurrentlyModal (false)) { if (MessageManager::getInstance()->isThisTheMessageThread()) { @@ -1777,9 +1777,15 @@ void Component::exitModalState (const int returnValue) } } -bool Component::isCurrentlyModal() const noexcept +bool Component::isCurrentlyModal (bool onlyConsiderForemostModalComponent) const noexcept { - return getCurrentlyModalComponent() == this; + const int n = onlyConsiderForemostModalComponent ? 1 : getNumCurrentlyModalComponents(); + + for (int i = 0; i < n; ++i) + if (getCurrentlyModalComponent (i) == this) + return true; + + return false; } bool Component::isCurrentlyBlockedByAnotherModalComponent() const @@ -2679,7 +2685,7 @@ void Component::internalFocusLoss (const FocusChangeType cause) { const WeakReference safePointer (this); - focusLost (focusChangedDirectly); + focusLost (cause); if (safePointer != nullptr) internalChildFocusChange (cause, safePointer); diff --git a/modules/juce_gui_basics/components/juce_Component.h b/modules/juce_gui_basics/components/juce_Component.h index 486066a1..4f7750f4 100644 --- a/modules/juce_gui_basics/components/juce_Component.h +++ b/modules/juce_gui_basics/components/juce_Component.h @@ -1952,12 +1952,14 @@ public: /** Returns true if this component is the modal one. It's possible to have nested modal components, e.g. a pop-up dialog box - that launches another pop-up, but this will only return true for - the one at the top of the stack. + that launches another pop-up. If onlyConsiderForemostModalComponent is + true then isCurrentlyModal will only return true for the one at the top + of the stack. If onlyConsiderForemostModalComponent is false then + isCurrentlyModal will return true for any modal component in the stack. @see getCurrentlyModalComponent */ - bool isCurrentlyModal() const noexcept; + bool isCurrentlyModal (bool onlyConsiderForemostModalComponent = true) const noexcept; /** Returns the number of components that are currently in a modal state. @see getCurrentlyModalComponent diff --git a/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp b/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp index cc46ac0b..908c4d1f 100644 --- a/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp +++ b/modules/juce_gui_basics/components/juce_ModalComponentManager.cpp @@ -245,13 +245,14 @@ bool ModalComponentManager::cancelAllModalComponents() return numModal > 0; } +//============================================================================== #if JUCE_MODAL_LOOPS_PERMITTED class ModalComponentManager::ReturnValueRetriever : public ModalComponentManager::Callback { public: ReturnValueRetriever (int& v, bool& done) : value (v), finished (done) {} - void modalStateFinished (int returnValue) + void modalStateFinished (int returnValue) override { finished = true; value = returnValue; @@ -292,3 +293,21 @@ int ModalComponentManager::runEventLoopForCurrentComponent() return returnValue; } #endif + +//============================================================================== +#if JUCE_COMPILER_SUPPORTS_LAMBDAS +struct LambdaCallback : public ModalComponentManager::Callback +{ + LambdaCallback (std::function fn) noexcept : function (fn) {} + void modalStateFinished (int result) override { function (result); } + + std::function function; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LambdaCallback) +}; + +ModalComponentManager::Callback* ModalCallbackFunction::create (std::function f) +{ + return new LambdaCallback (f); +} +#endif diff --git a/modules/juce_gui_basics/components/juce_ModalComponentManager.h b/modules/juce_gui_basics/components/juce_ModalComponentManager.h index b0817518..03b2990d 100644 --- a/modules/juce_gui_basics/components/juce_ModalComponentManager.h +++ b/modules/juce_gui_basics/components/juce_ModalComponentManager.h @@ -184,9 +184,20 @@ public: static ModalComponentManager::Callback* create (void (*functionToCall) (int, ParamType), ParamType parameterValue) { - return new FunctionCaller1 (functionToCall, parameterValue); + return new FunctionCaller1 (functionToCall, parameterValue); } + #if JUCE_COMPILER_SUPPORTS_LAMBDAS + /** This is a utility function to create a ModalComponentManager::Callback that will + call a lambda function. + The lambda that you supply must take an integer parameter, which is the result code that + was returned when the modal component was dismissed. + + @see ModalComponentManager::Callback + */ + static ModalComponentManager::Callback* create (std::function); + #endif + //============================================================================== /** This is a utility function to create a ModalComponentManager::Callback that will call a static function with two custom parameters. @@ -214,7 +225,7 @@ public: ParamType1 parameterValue1, ParamType2 parameterValue2) { - return new FunctionCaller2 (functionToCall, parameterValue1, parameterValue2); + return new FunctionCaller2 (functionToCall, parameterValue1, parameterValue2); } //============================================================================== @@ -244,7 +255,7 @@ public: static ModalComponentManager::Callback* forComponent (void (*functionToCall) (int, ComponentType*), ComponentType* component) { - return new ComponentCaller1 (functionToCall, component); + return new ComponentCaller1 (functionToCall, component); } //============================================================================== @@ -275,21 +286,20 @@ public: ComponentType* component, ParamType param) { - return new ComponentCaller2 (functionToCall, component, param); + return new ComponentCaller2 (functionToCall, component, param); } private: //============================================================================== template - class FunctionCaller1 : public ModalComponentManager::Callback + struct FunctionCaller1 : public ModalComponentManager::Callback { - public: typedef void (*FunctionType) (int, ParamType); FunctionCaller1 (FunctionType& f, ParamType& p1) : function (f), param (p1) {} - void modalStateFinished (int returnValue) { function (returnValue, param); } + void modalStateFinished (int returnValue) override { function (returnValue, param); } private: const FunctionType function; @@ -299,15 +309,14 @@ private: }; template - class FunctionCaller2 : public ModalComponentManager::Callback + struct FunctionCaller2 : public ModalComponentManager::Callback { - public: typedef void (*FunctionType) (int, ParamType1, ParamType2); FunctionCaller2 (FunctionType& f, ParamType1& p1, ParamType2& p2) : function (f), param1 (p1), param2 (p2) {} - void modalStateFinished (int returnValue) { function (returnValue, param1, param2); } + void modalStateFinished (int returnValue) override { function (returnValue, param1, param2); } private: const FunctionType function; @@ -318,15 +327,14 @@ private: }; template - class ComponentCaller1 : public ModalComponentManager::Callback + struct ComponentCaller1 : public ModalComponentManager::Callback { - public: typedef void (*FunctionType) (int, ComponentType*); ComponentCaller1 (FunctionType& f, ComponentType* c) : function (f), comp (c) {} - void modalStateFinished (int returnValue) + void modalStateFinished (int returnValue) override { function (returnValue, static_cast (comp.get())); } @@ -339,15 +347,14 @@ private: }; template - class ComponentCaller2 : public ModalComponentManager::Callback + struct ComponentCaller2 : public ModalComponentManager::Callback { - public: typedef void (*FunctionType) (int, ComponentType*, ParamType1); ComponentCaller2 (FunctionType& f, ComponentType* c, ParamType1 p1) : function (f), comp (c), param1 (p1) {} - void modalStateFinished (int returnValue) + void modalStateFinished (int returnValue) override { function (returnValue, static_cast (comp.get()), param1); } diff --git a/modules/juce_gui_basics/drawables/juce_SVGParser.cpp b/modules/juce_gui_basics/drawables/juce_SVGParser.cpp index 513cf6b8..e819d3fc 100644 --- a/modules/juce_gui_basics/drawables/juce_SVGParser.cpp +++ b/modules/juce_gui_basics/drawables/juce_SVGParser.cpp @@ -66,6 +66,55 @@ public: const XmlPath* parent; }; + //============================================================================== + struct UsePathOp + { + const SVGState* state; + Path* targetPath; + + void operator() (const XmlPath& xmlPath) + { + state->parsePathElement (xmlPath, *targetPath); + } + }; + + struct GetClipPathOp + { + const SVGState* state; + Drawable* target; + + void operator() (const XmlPath& xmlPath) + { + state->applyClipPath (*target, xmlPath); + } + }; + + struct SetGradientStopsOp + { + const SVGState* state; + ColourGradient* gradient; + + void operator() (const XmlPath& xml) + { + state->addGradientStopsIn (*gradient, xml); + } + }; + + struct GetFillTypeOp + { + const SVGState* state; + const Path* path; + float opacity; + FillType fillType; + + void operator() (const XmlPath& xml) + { + if (xml->hasTagNameIgnoringNamespace ("linearGradient") + || xml->hasTagNameIgnoringNamespace ("radialGradient")) + fillType = state->getGradientFillType (xml, *path, opacity); + } + }; + //============================================================================== Drawable* parseSVGElement (const XmlPath& xml) { @@ -553,17 +602,6 @@ private: { const String linkedID = link.substring (1); - struct UsePathOp - { - const SVGState* state; - Path* targetPath; - - void operator() (const XmlPath& xmlPath) - { - state->parsePathElement (xmlPath, *targetPath); - } - }; - UsePathOp op = { this, &path }; topLevelXml.applyOperationToChildWithID (linkedID, op); } @@ -692,17 +730,6 @@ private: if (urlID.isNotEmpty()) { - struct GetClipPathOp - { - const SVGState* state; - Drawable* target; - - void operator() (const XmlPath& xmlPath) - { - state->applyClipPath (*target, xmlPath); - } - }; - GetClipPathOp op = { this, &d }; topLevelXml.applyOperationToChildWithID (urlID, op); } @@ -751,17 +778,6 @@ private: if (id.startsWithChar ('#')) { - struct SetGradientStopsOp - { - const SVGState* state; - ColourGradient* gradient; - - void operator() (const XmlPath& xml) - { - state->addGradientStopsIn (*gradient, xml); - } - }; - SetGradientStopsOp op = { this, &gradient, }; topLevelXml.applyOperationToChildWithID (id.substring (1), op); } @@ -893,21 +909,6 @@ private: if (urlID.isNotEmpty()) { - struct GetFillTypeOp - { - const SVGState* state; - const Path* path; - float opacity; - FillType fillType; - - void operator() (const XmlPath& xml) - { - if (xml->hasTagNameIgnoringNamespace ("linearGradient") - || xml->hasTagNameIgnoringNamespace ("radialGradient")) - fillType = state->getGradientFillType (xml, *path, opacity); - } - }; - GetFillTypeOp op = { this, &path, opacity, FillType() }; if (topLevelXml.applyOperationToChildWithID (urlID, op)) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp b/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp index 97c3f325..7a6eb360 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp @@ -113,13 +113,15 @@ bool FileChooser::showDialog (const int flags, FilePreviewComponent* const previ } else { - WildcardFileFilter wildcard (selectsFiles ? filters : String::empty, - selectsDirectories ? "*" : String::empty, - String::empty); + ignoreUnused (selectMultiple); + + WildcardFileFilter wildcard (selectsFiles ? filters : String(), + selectsDirectories ? "*" : String(), + String()); FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComp); - FileChooserDialogBox box (title, String::empty, + FileChooserDialogBox box (title, String(), browserComponent, warnAboutOverwrite, browserComponent.findColour (AlertWindow::backgroundColourId)); diff --git a/modules/juce_gui_basics/juce_gui_basics.h b/modules/juce_gui_basics/juce_gui_basics.h index 94f4729c..b0e31ed6 100644 --- a/modules/juce_gui_basics/juce_gui_basics.h +++ b/modules/juce_gui_basics/juce_gui_basics.h @@ -33,7 +33,7 @@ ID: juce_gui_basics vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE GUI core classes description: Basic user-interface components and related classes. website: http://www.juce.com/juce diff --git a/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp b/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp index 29e2f4ef..22fc2c24 100644 --- a/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp +++ b/modules/juce_gui_basics/keyboard/juce_KeyPress.cpp @@ -250,7 +250,7 @@ String KeyPress::getTextDescription() const { // some keyboard layouts use a shift-key to get the slash, but in those cases, we // want to store it as being a slash, not shift+whatever. - if (textCharacter == '/') + if (textCharacter == '/' && keyCode != numberPadDivide) return "/"; if (mods.isCtrlDown()) desc << "ctrl + "; diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index a7d2d0bb..718496c6 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -1075,6 +1075,11 @@ void LookAndFeel_V2::drawMenuBarItem (Graphics& g, int width, int height, g.drawFittedText (itemText, 0, 0, width, height, Justification::centred, 1); } +Component* LookAndFeel_V2::getParentComponentForMenuOptions (const PopupMenu::Options& options) +{ + return options.getParentComponent(); +} + //============================================================================== void LookAndFeel_V2::fillTextEditorBackground (Graphics& g, int /*width*/, int /*height*/, TextEditor& textEditor) { diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index aea45395..1633bfd0 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -173,6 +173,8 @@ public: bool isMouseOverItem, bool isMenuOpen, bool isMouseOverBar, MenuBarComponent&) override; + Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) override; + //============================================================================== void drawComboBox (Graphics&, int width, int height, bool isButtonDown, int buttonX, int buttonY, int buttonW, int buttonH, diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp index e81b1b0a..774830c0 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp @@ -28,7 +28,7 @@ LookAndFeel_V3::LookAndFeel_V3() const Colour textButtonColour (0xffeeeeff); setColour (TextButton::buttonColourId, textButtonColour); - setColour (TextButton::buttonOnColourId, textButtonColour); + setColour (TextButton::buttonOnColourId, Colour (0xff000000)); setColour (ComboBox::buttonColourId, textButtonColour); setColour (TextEditor::outlineColourId, Colours::transparentBlack); setColour (TabbedButtonBar::tabOutlineColourId, Colour (0x66000000)); diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 04e437be..004bfff3 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -152,7 +152,9 @@ private: void updateShortcutKeyDescription() { - if (item.commandManager != nullptr && item.itemID != 0) + if (item.commandManager != nullptr + && item.itemID != 0 + && item.shortcutKeyDescription.isEmpty()) { String shortcutKey; const Array keyPresses (item.commandManager->getKeyMappings() @@ -198,6 +200,7 @@ public: options (opts), managerOfChosenCommand (manager), componentAttachedTo (options.targetComponent), + parentComponent (nullptr), hasBeenOver (false), needsToScroll (false), dismissOnMouseUp (shouldDismissOnMouseUp), @@ -218,6 +221,8 @@ public: setLookAndFeel (parent != nullptr ? &(parent->getLookAndFeel()) : menu.lookAndFeel.get()); + parentComponent = getLookAndFeel().getParentComponentForMenuOptions (options); + setOpaque (getLookAndFeel().findColour (PopupMenu::backgroundColourId).isOpaque() || ! Desktop::canUseSemiTransparentWindows()); @@ -235,18 +240,30 @@ public: if (options.visibleItemID != 0) { - const int y = options.targetArea.getY() - windowPos.getY(); + const Point targetPosition = + (parentComponent != nullptr ? parentComponent->getLocalPoint (nullptr, options.targetArea.getTopLeft()) + : options.targetArea.getTopLeft()); + + const int y = targetPosition.getY() - windowPos.getY(); ensureItemIsVisible (options.visibleItemID, isPositiveAndBelow (y, windowPos.getHeight()) ? y : -1); } resizeToBestWindowPos(); - addToDesktop (ComponentPeer::windowIsTemporary - | ComponentPeer::windowIgnoresKeyPresses - | getLookAndFeel().getMenuWindowFlags()); - getActiveWindows().add (this); - Desktop::getInstance().addGlobalMouseListener (this); + if (parentComponent != nullptr) + { + parentComponent->addChildComponent (this); + } + else + { + addToDesktop (ComponentPeer::windowIsTemporary + | ComponentPeer::windowIgnoresKeyPresses + | getLookAndFeel().getMenuWindowFlags()); + + getActiveWindows().add (this); + Desktop::getInstance().addGlobalMouseListener (this); + } } ~MenuWindow() @@ -268,10 +285,13 @@ public: void paintOverChildren (Graphics& g) override { + LookAndFeel& lf = getLookAndFeel(); + + if (parentComponent != nullptr) + lf.drawResizableFrame (g, getWidth(), getHeight(), BorderSize (PopupMenuSettings::borderSize)); + if (canScroll()) { - LookAndFeel& lf = getLookAndFeel(); - if (isTopScrollZoneActive()) lf.drawPopupMenuUpDownArrow (g, getWidth(), PopupMenuSettings::scrollZone, true); @@ -551,27 +571,43 @@ public: } //============================================================================== - void calculateWindowPos (const Rectangle& target, const bool alignToRectangle) + Rectangle getParentArea (Point targetPoint) { - const Rectangle mon (Desktop::getInstance().getDisplays() - .getDisplayContaining (target.getCentre()) - #if JUCE_MAC - .userArea); - #else - .totalArea); // on windows, don't stop the menu overlapping the taskbar - #endif + Rectangle parentArea (Desktop::getInstance().getDisplays() + .getDisplayContaining (targetPoint) + #if JUCE_MAC + .userArea); + #else + .totalArea); // on windows, don't stop the menu overlapping the taskbar + #endif - const int maxMenuHeight = mon.getHeight() - 24; + if (parentComponent == nullptr) + return parentArea; + + return parentComponent->getLocalArea (nullptr, + parentComponent->getScreenBounds() + .reduced (PopupMenuSettings::borderSize) + .getIntersection (parentArea)); + } + + void calculateWindowPos (Rectangle target, const bool alignToRectangle) + { + const Rectangle parentArea = getParentArea (target.getCentre()); + + if (parentComponent != nullptr) + target = parentComponent->getLocalArea (nullptr, target).getIntersection (parentArea); + + const int maxMenuHeight = parentArea.getHeight() - 24; int x, y, widthToUse, heightToUse; - layoutMenuItems (mon.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse); + layoutMenuItems (parentArea.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse); if (alignToRectangle) { x = target.getX(); - const int spaceUnder = mon.getHeight() - (target.getBottom() - mon.getY()); - const int spaceOver = target.getY() - mon.getY(); + const int spaceUnder = parentArea.getHeight() - (target.getBottom() - parentArea.getY()); + const int spaceOver = target.getY() - parentArea.getY(); if (heightToUse < spaceUnder - 30 || spaceUnder >= spaceOver) y = target.getBottom(); @@ -580,7 +616,7 @@ public: } else { - bool tendTowardsRight = target.getCentreX() < mon.getCentreX(); + bool tendTowardsRight = target.getCentreX() < parentArea.getCentreX(); if (parent != nullptr) { @@ -589,19 +625,19 @@ public: const bool parentGoingRight = (parent->getX() + parent->getWidth() / 2 > parent->parent->getX() + parent->parent->getWidth() / 2); - if (parentGoingRight && target.getRight() + widthToUse < mon.getRight() - 4) + if (parentGoingRight && target.getRight() + widthToUse < parentArea.getRight() - 4) tendTowardsRight = true; else if ((! parentGoingRight) && target.getX() > widthToUse + 4) tendTowardsRight = false; } - else if (target.getRight() + widthToUse < mon.getRight() - 32) + else if (target.getRight() + widthToUse < parentArea.getRight() - 32) { tendTowardsRight = true; } } - const int biggestSpace = jmax (mon.getRight() - target.getRight(), - target.getX() - mon.getX()) - 32; + const int biggestSpace = jmax (parentArea.getRight() - target.getRight(), + target.getX() - parentArea.getX()) - 32; if (biggestSpace < widthToUse) { @@ -610,21 +646,21 @@ public: if (numColumns > 1) layoutMenuItems (biggestSpace - 4, maxMenuHeight, widthToUse, heightToUse); - tendTowardsRight = (mon.getRight() - target.getRight()) >= (target.getX() - mon.getX()); + tendTowardsRight = (parentArea.getRight() - target.getRight()) >= (target.getX() - parentArea.getX()); } if (tendTowardsRight) - x = jmin (mon.getRight() - widthToUse - 4, target.getRight()); + x = jmin (parentArea.getRight() - widthToUse - 4, target.getRight()); else - x = jmax (mon.getX() + 4, target.getX() - widthToUse); + x = jmax (parentArea.getX() + 4, target.getX() - widthToUse); y = target.getY(); - if (target.getCentreY() > mon.getCentreY()) - y = jmax (mon.getY(), target.getBottom() - heightToUse); + if (target.getCentreY() > parentArea.getCentreY()) + y = jmax (parentArea.getY(), target.getBottom() - heightToUse); } - x = jmax (mon.getX() + 1, jmin (mon.getRight() - (widthToUse + 6), x)); - y = jmax (mon.getY() + 1, jmin (mon.getBottom() - (heightToUse + 6), y)); + x = jmax (parentArea.getX() + 1, jmin (parentArea.getRight() - (widthToUse + 6), x)); + y = jmax (parentArea.getY() + 1, jmin (parentArea.getBottom() - (heightToUse + 6), y)); windowPos.setBounds (x, y, widthToUse, heightToUse); @@ -695,9 +731,12 @@ public: childNum += numChildren; } - if (totalW < options.minWidth) + // width must never be larger than the screen + const int minWidth = jmin (maxMenuW, options.minWidth); + + if (totalW < minWidth) { - totalW = options.minWidth; + totalW = minWidth; for (int col = 0; col < numColumns; ++col) columnWidths.set (0, totalW / numColumns); @@ -727,16 +766,15 @@ public: windowPos.getHeight() - (PopupMenuSettings::scrollZone + m->getHeight())), currentY); - const Rectangle mon (Desktop::getInstance().getDisplays() - .getDisplayContaining (windowPos.getPosition()).userArea); + const Rectangle parantArea = getParentArea (windowPos.getPosition()); int deltaY = wantedY - currentY; - windowPos.setSize (jmin (windowPos.getWidth(), mon.getWidth()), - jmin (windowPos.getHeight(), mon.getHeight())); + windowPos.setSize (jmin (windowPos.getWidth(), parantArea.getWidth()), + jmin (windowPos.getHeight(), parantArea.getHeight())); - const int newY = jlimit (mon.getY(), - mon.getBottom() - windowPos.getHeight(), + const int newY = jlimit (parantArea.getY(), + parantArea.getBottom() - windowPos.getHeight(), windowPos.getY() + deltaY); deltaY -= newY - windowPos.getY(); @@ -912,6 +950,7 @@ public: OwnedArray items; ApplicationCommandManager** managerOfChosenCommand; WeakReference componentAttachedTo; + Component* parentComponent; Rectangle windowPos; bool hasBeenOver, needsToScroll; bool dismissOnMouseUp, hideOnExit, disableMouseMoves, hasAnyJuceCompHadFocus; @@ -1428,6 +1467,7 @@ void PopupMenu::addSectionHeader (const String& title) //============================================================================== PopupMenu::Options::Options() : targetComponent (nullptr), + parentComponent (nullptr), visibleItemID (0), minWidth (0), maxColumns (0), @@ -1482,6 +1522,13 @@ PopupMenu::Options PopupMenu::Options::withItemThatMustBeVisible (int idOfItemTo return o; } +PopupMenu::Options PopupMenu::Options::withParentComponent (Component* parent) const noexcept +{ + Options o (*this); + o.parentComponent = parent; + return o; +} + Component* PopupMenu::createWindow (const Options& options, ApplicationCommandManager** managerOfChosenCommand) const { @@ -1506,7 +1553,7 @@ struct PopupMenuCompletionCallback : public ModalComponentManager::Callback PopupMenuSettings::menuWasHiddenBecauseOfAppChange = false; } - void modalStateFinished (int result) + void modalStateFinished (int result) override { if (managerOfChosenCommand != nullptr && result != 0) { diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index ac0a4d76..0a7f2778 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -380,18 +380,31 @@ public: public: Options(); + //============================================================================== Options withTargetComponent (Component* targetComponent) const noexcept; Options withTargetScreenArea (const Rectangle& targetArea) const noexcept; Options withMinimumWidth (int minWidth) const noexcept; Options withMaximumNumColumns (int maxNumColumns) const noexcept; Options withStandardItemHeight (int standardHeight) const noexcept; Options withItemThatMustBeVisible (int idOfItemToBeVisible) const noexcept; + Options withParentComponent (Component* parentComponent) const noexcept; + + //============================================================================== + Component* getParentComponent() const noexcept { return parentComponent; } + Component* getTargetComponent() const noexcept { return targetComponent; } + Rectangle getTargetScreenArea() const noexcept { return targetArea; } + int getMinimumWidth() const noexcept { return minWidth; } + int getMaximumNumColumns() const noexcept { return maxColumns; } + int getStandardItemHeight() const noexcept { return standardHeight; } + int getItemThatMustBeVisible() const noexcept { return visibleItemID; } private: + //============================================================================== friend class PopupMenu; friend class PopupMenu::Window; Rectangle targetArea; Component* targetComponent; + Component* parentComponent; int visibleItemID, minWidth, maxColumns, standardHeight; }; @@ -668,6 +681,8 @@ public: bool isMenuOpen, bool isMouseOverBar, MenuBarComponent&) = 0; + + virtual Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) = 0; }; private: diff --git a/modules/juce_gui_basics/native/juce_android_Windowing.cpp b/modules/juce_gui_basics/native/juce_android_Windowing.cpp index 79f091e4..09bc0674 100644 --- a/modules/juce_gui_basics/native/juce_android_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_android_Windowing.cpp @@ -572,9 +572,8 @@ private: int sizeAllocated; float scale; - class PreallocatedImage : public ImagePixelData + struct PreallocatedImage : public ImagePixelData { - public: PreallocatedImage (const int width_, const int height_, jint* data_, bool hasAlpha_) : ImagePixelData (Image::ARGB, width_, height_), data (data_), hasAlpha (hasAlpha_) { @@ -607,7 +606,7 @@ private: bm.data = (uint8*) (data + x + y * width); } - ImagePixelData* clone() + ImagePixelData::Ptr clone() { PreallocatedImage* s = new PreallocatedImage (width, height, 0, hasAlpha); s->allocatedData.malloc (sizeof (jint) * width * height); diff --git a/modules/juce_gui_basics/native/juce_ios_Windowing.mm b/modules/juce_gui_basics/native/juce_ios_Windowing.mm index e0a90b4a..466c4ecf 100644 --- a/modules/juce_gui_basics/native/juce_ios_Windowing.mm +++ b/modules/juce_gui_basics/native/juce_ios_Windowing.mm @@ -39,6 +39,7 @@ Array appBecomingInactiveCallbacks; { } +@property (strong, nonatomic) UIWindow *window; - (void) applicationDidFinishLaunching: (UIApplication*) application; - (void) applicationWillTerminate: (UIApplication*) application; - (void) applicationDidEnterBackground: (UIApplication*) application; diff --git a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp index 180a0bfa..05b23f6f 100644 --- a/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp +++ b/modules/juce_gui_basics/native/juce_linux_FileChooser.cpp @@ -171,8 +171,6 @@ void FileChooser::showPlatformDialog (Array& results, else addZenityArgs (args, separator, title, file, filters, isDirectory, isSave, selectMultipleFiles); - args.add ("2>/dev/null"); // (to avoid logging info ending up in the results) - ChildProcess child; if (child.start (args, ChildProcess::wantStdOut)) diff --git a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp index 752588d1..5896787c 100644 --- a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp @@ -635,7 +635,7 @@ public: sendDataChangeMessage(); } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { jassertfalse; return nullptr; @@ -1214,7 +1214,10 @@ private: e.dpi = ((static_cast (crtc->width) * 25.4 * 0.5) / static_cast (output->mm_width)) + ((static_cast (crtc->height) * 25.4 * 0.5) / static_cast (output->mm_height)); - e.scale = masterScale * getScaleForDisplay (output->name, e); + double scale = getScaleForDisplay (output->name, e); + scale = (scale <= 0.1 ? 1.0 : scale); + + e.scale = masterScale * scale; infos.add (e); } @@ -3959,9 +3962,8 @@ void* CustomMouseCursorInfo::create() const hotspotX = (hotspotX * (int) cursorW) / (int) imageW; hotspotY = (hotspotY * (int) cursorH) / (int) imageH; - g.drawImageWithin (image, 0, 0, (int) imageW, (int) imageH, - RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize, - false); + g.drawImage (image, Rectangle ((float) imageW, (float) imageH), + RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize); } else { diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 494958bf..a4cea29e 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -2098,7 +2098,7 @@ const int KeyPress::F7Key = NSF7FunctionKey; const int KeyPress::F8Key = NSF8FunctionKey; const int KeyPress::F9Key = NSF9FunctionKey; const int KeyPress::F10Key = NSF10FunctionKey; -const int KeyPress::F11Key = NSF1FunctionKey; +const int KeyPress::F11Key = NSF11FunctionKey; const int KeyPress::F12Key = NSF12FunctionKey; const int KeyPress::F13Key = NSF13FunctionKey; const int KeyPress::F14Key = NSF14FunctionKey; diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index e382c9ae..264b81bd 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -39,6 +39,10 @@ #define WM_APPCOMMAND 0x0319 #endif +#if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + #include +#endif + extern void juce_repeatLastProcessPriority(); extern void juce_checkCurrentlyFocusedTopLevelWindow(); // in juce_TopLevelWindow.cpp extern bool juce_isRunningInWine(); @@ -381,7 +385,7 @@ public: sendDataChangeMessage(); } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { WindowsBitmapImage* im = new WindowsBitmapImage (pixelFormat, width, height, false); @@ -561,6 +565,9 @@ namespace IconConverters //============================================================================== class HWNDComponentPeer : public ComponentPeer + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + , public ModifierKeyReceiver + #endif { public: enum RenderingEngineType @@ -585,6 +592,9 @@ public: currentWindowIcon (0), dropTarget (nullptr), updateLayeredWindowAlpha (255) + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + , modProvider (nullptr) + #endif { callFunctionIfNotLocked (&createWindowCallback, this); @@ -1166,6 +1176,9 @@ private: JuceDropTarget* dropTarget; uint8 updateLayeredWindowAlpha; MultiTouchMapper currentTouches; + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + ModifierKeyProvider* modProvider; + #endif //============================================================================== class TemporaryImage : public Timer @@ -1752,6 +1765,11 @@ private: updateKeyModifiers(); + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + if (modProvider != nullptr) + currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers()); + #endif + TRACKMOUSEEVENT tme; tme.cbSize = sizeof (tme); tme.dwFlags = TME_LEAVE; @@ -1794,6 +1812,12 @@ private: if (isValidPeer (this)) { updateModifiersFromWParam (wParam); + + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + if (modProvider != nullptr) + currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers()); + #endif + isDragging = true; doMouseEvent (position, MouseInputSource::invalidPressure); @@ -1807,6 +1831,12 @@ private: return; updateModifiersFromWParam (wParam); + + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + if (modProvider != nullptr) + currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers()); + #endif + const bool wasDragging = isDragging; isDragging = false; @@ -2392,6 +2422,19 @@ private: { } + //============================================================================== + #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client + void setModifierKeyProvider (ModifierKeyProvider* provider) override + { + modProvider = provider; + } + + void removeModifierKeyProvider() override + { + modProvider = nullptr; + } + #endif + //============================================================================== public: static LRESULT CALLBACK windowProc (HWND h, UINT message, WPARAM wParam, LPARAM lParam) diff --git a/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp b/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp index 86cb5487..9d750608 100644 --- a/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp +++ b/modules/juce_gui_basics/widgets/juce_ImageComponent.cpp @@ -73,5 +73,5 @@ RectanglePlacement ImageComponent::getImagePlacement() const void ImageComponent::paint (Graphics& g) { g.setOpacity (1.0f); - g.drawImageWithin (image, 0, 0, getWidth(), getHeight(), placement, false); + g.drawImage (image, getLocalBounds().toFloat(), placement); } diff --git a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp index 458f0b5f..c9362c23 100644 --- a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp +++ b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp @@ -33,6 +33,7 @@ public: fixedSize (fixedSize_), drawBar (drawBar_) { + setWantsKeyboardFocus (false); } bool getToolbarItemSizes (int toolbarThickness, bool /*isToolbarVertical*/, diff --git a/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h b/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h index 0594e578..20271150 100644 --- a/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h +++ b/modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h @@ -104,7 +104,7 @@ public: @see contentAreaChanged */ - const Rectangle& getContentArea() const noexcept { return contentArea; } + Rectangle getContentArea() const noexcept { return contentArea; } //============================================================================== /** This method must return the size criteria for this item, based on a given toolbar diff --git a/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp b/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp index 8f970069..ef311e8e 100644 --- a/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp +++ b/modules/juce_gui_basics/windows/juce_TooltipWindow.cpp @@ -92,7 +92,8 @@ void TooltipWindow::displayTip (Point screenPos, const String& tip) addToDesktop (ComponentPeer::windowHasDropShadow | ComponentPeer::windowIsTemporary - | ComponentPeer::windowIgnoresKeyPresses); + | ComponentPeer::windowIgnoresKeyPresses + | ComponentPeer::windowIgnoresMouseClicks); } toFront (false); diff --git a/modules/juce_gui_extra/juce_gui_extra.h b/modules/juce_gui_extra/juce_gui_extra.h index c2719a94..63d93052 100644 --- a/modules/juce_gui_extra/juce_gui_extra.h +++ b/modules/juce_gui_extra/juce_gui_extra.h @@ -33,7 +33,7 @@ ID: juce_gui_extra vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE extended GUI classes description: Miscellaneous GUI classes for specialised tasks. website: http://www.juce.com/juce diff --git a/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp b/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp index 40d69700..a5224830 100644 --- a/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp +++ b/modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp @@ -112,8 +112,8 @@ void SystemTrayIconComponent::setIconImage (const Image& newImage) void SystemTrayIconComponent::paint (Graphics& g) { if (pimpl != nullptr) - g.drawImageWithin (pimpl->image, 0, 0, getWidth(), getHeight(), - RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize, false); + g.drawImage (pimpl->image, getLocalBounds().toFloat(), + RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize); } void SystemTrayIconComponent::setIconTooltip (const String& /*tooltip*/) diff --git a/modules/juce_opengl/juce_opengl.h b/modules/juce_opengl/juce_opengl.h index 208c678d..da65fbb2 100644 --- a/modules/juce_opengl/juce_opengl.h +++ b/modules/juce_opengl/juce_opengl.h @@ -33,7 +33,7 @@ ID: juce_opengl vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE OpenGL classes description: Classes for rendering OpenGL in a JUCE window. website: http://www.juce.com/juce diff --git a/modules/juce_opengl/opengl/juce_OpenGLImage.cpp b/modules/juce_opengl/opengl/juce_OpenGLImage.cpp index 4a9dacc4..e0eae4fd 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLImage.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLImage.cpp @@ -46,19 +46,13 @@ public: ImageType* createType() const override { return new OpenGLImageType(); } - ImagePixelData* clone() override + ImagePixelData::Ptr clone() override { - OpenGLFrameBufferImage* im = new OpenGLFrameBufferImage (context, width, height); - im->incReferenceCount(); + Image newImage (new OpenGLFrameBufferImage (context, width, height)); + Graphics g (newImage); + g.drawImageAt (Image (this), 0, 0, false); - { - Image newImage (im); - Graphics g (newImage); - g.drawImageAt (Image (this), 0, 0, false); - } - - im->resetReferenceCount(); - return im; + return newImage.getPixelData(); } void initialiseBitmapData (Image::BitmapData& bitmapData, int x, int y, Image::BitmapData::ReadWriteMode mode) override diff --git a/modules/juce_osc/juce_osc.h b/modules/juce_osc/juce_osc.h index 959a9653..98e89554 100644 --- a/modules/juce_osc/juce_osc.h +++ b/modules/juce_osc/juce_osc.h @@ -33,7 +33,7 @@ ID: juce_osc vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE OSC classes description: Open Sound Control implementation. website: http://www.juce.com/juce diff --git a/modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h b/modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h index 37739537..e39c6254 100644 --- a/modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h +++ b/modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h @@ -33,7 +33,7 @@ ID: juce_tracktion_marketplace vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE Tracktion marketplace support description: Classes for online product authentication via the Tracktion marketplace. website: http://www.juce.com/juce diff --git a/modules/juce_video/juce_video.h b/modules/juce_video/juce_video.h index 5b886d74..770f977f 100644 --- a/modules/juce_video/juce_video.h +++ b/modules/juce_video/juce_video.h @@ -34,7 +34,7 @@ ID: juce_video vendor: juce - version: 4.2.1 + version: 4.2.3 name: JUCE video playback and capture classes description: Classes for playing video and capturing camera input. website: http://www.juce.com/juce -- 2.30.2