New upstream version 4.2.3~repack
authorIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>
Mon, 8 Aug 2016 13:27:14 +0000 (15:27 +0200)
committerIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>
Mon, 8 Aug 2016 13:27:14 +0000 (15:27 +0200)
228 files changed:
ChangeList.txt
examples/AUv3Synth/AUv3Synth.jucer
examples/AUv3Synth/Builds/MacOSX/AUv3Synth.xcodeproj/project.pbxproj
examples/AUv3Synth/Builds/iOS/AUv3Synth.xcodeproj/project.pbxproj
examples/AUv3Synth/Builds/iOS/Info-VST.plist [new file with mode: 0644]
examples/AUv3Synth/JuceLibraryCode/AppConfig.h
examples/AnimationAppExample/AnimationAppExample.jucer
examples/AudioAppExample/AudioAppExample.jucer
examples/BouncingBallWavetableDemo/BouncingBallWavetableDemo.jucer
examples/BouncingBallWavetableDemo/Builds/Linux/Makefile
examples/ComponentTutorialExample/ComponentTutorialExample.jucer
examples/Demo/Builds/Android/jni/Android.mk
examples/Demo/Builds/Linux/Makefile
examples/Demo/Builds/MacOSX/Info-App.plist
examples/Demo/Builds/iOS/Info-App.plist
examples/Demo/JuceDemo.jucer
examples/Demo/Source/Demos/CryptographyDemo.cpp
examples/Demo/Source/MainWindow.cpp
examples/Demo/Source/MainWindow.h
examples/HelloWorld/Builds/Linux/Makefile
examples/HelloWorld/HelloWorld.jucer
examples/MPETest/Builds/LinuxMakefile/Makefile
examples/MPETest/MPETest.jucer
examples/MidiTest/Builds/LinuxMakefile/Makefile
examples/MidiTest/MidiTest.jucer
examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile
examples/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer
examples/OSCMonitor/Builds/LinuxMakefile/Makefile
examples/OSCMonitor/OSCMonitor.jucer
examples/OSCReceiver/Builds/LinuxMakefile/Makefile
examples/OSCReceiver/OSCReceiver.jucer
examples/OSCSender/Builds/LinuxMakefile/Makefile
examples/OSCSender/OSCSender.jucer
examples/OpenGLAppExample/OpenGLAppExample.jucer
examples/PluckedStringsDemo/PluckedStringsDemo.jucer
examples/PlugInSamples/Arpeggiator/Arpeggiator.jucer
examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Arpeggiator.xcodeproj/project.pbxproj
examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist [deleted file]
examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj
examples/PlugInSamples/Arpeggiator/Builds/VisualStudio2015/Arpeggiator.vcxproj.filters
examples/PlugInSamples/Arpeggiator/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/GainPlugIn/Builds/MacOSX/GainPlugIn.xcodeproj/project.pbxproj
examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj
examples/PlugInSamples/GainPlugIn/Builds/VisualStudio2015/GainPlugIn.vcxproj.filters
examples/PlugInSamples/GainPlugIn/GainPlugIn.jucer
examples/PlugInSamples/GainPlugIn/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/MultiOutSynth/Builds/MacOSX/MultiOutSynth.xcodeproj/project.pbxproj
examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj
examples/PlugInSamples/MultiOutSynth/Builds/VisualStudio2015/MultiOutSynth.vcxproj.filters
examples/PlugInSamples/MultiOutSynth/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/MultiOutSynth/MultiOutSynth.jucer
examples/PlugInSamples/NoiseGate/Builds/MacOSX/NoiseGate.xcodeproj/project.pbxproj
examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj
examples/PlugInSamples/NoiseGate/Builds/VisualStudio2015/NoiseGate.vcxproj.filters
examples/PlugInSamples/NoiseGate/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/NoiseGate/NoiseGate.jucer
examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile
examples/PlugInSamples/Surround/Builds/MacOSX/Surround.xcodeproj/project.pbxproj
examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj
examples/PlugInSamples/Surround/Builds/VisualStudio2015/Surround.vcxproj.filters
examples/PlugInSamples/Surround/JuceLibraryCode/AppConfig.h
examples/PlugInSamples/Surround/Surround.jucer
examples/SimpleFFTExample/SimpleFFTExample.jucer
examples/SimpleFFTExample/Source/SpectrogramComponent.h
examples/audio plugin demo/Builds/Linux/Makefile
examples/audio plugin demo/Builds/MacOSX/Info-AU.plist
examples/audio plugin demo/Builds/MacOSX/JuceDemoPlugin.xcodeproj/project.pbxproj
examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj
examples/audio plugin demo/Builds/VisualStudio2015/JuceDemoPlugin.vcxproj.filters
examples/audio plugin demo/JuceDemoPlugin.jucer
examples/audio plugin demo/JuceLibraryCode/AppConfig.h
examples/audio plugin demo/Source/PluginEditor.cpp
examples/audio plugin demo/Source/PluginEditor.h
examples/audio plugin demo/Source/PluginProcessor.cpp
examples/audio plugin host/Builds/Linux/Makefile
examples/audio plugin host/Plugin Host.jucer
extras/AudioPerformanceTest/AudioPerformanceTest.jucer
extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile
extras/Projucer/Builds/LinuxMakefile/Makefile
extras/Projucer/Builds/MacOSX/Info-App.plist
extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj
extras/Projucer/Builds/VisualStudio2013/Projucer.vcxproj
extras/Projucer/Builds/VisualStudio2013/resources.rc
extras/Projucer/Builds/VisualStudio2015/Projucer.vcxproj
extras/Projucer/Builds/VisualStudio2015/resources.rc
extras/Projucer/JuceLibraryCode/JuceHeader.h
extras/Projucer/Projucer.jucer
extras/Projucer/Source/ComponentEditor/components/jucer_TextButtonHandler.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h
extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h
extras/Projucer/Source/Project Saving/jucer_ProjectSaver.cpp
extras/Projucer/Source/Project/jucer_ConfigTree_Exporter.h
extras/Projucer/Source/Project/jucer_Module.cpp
extras/Projucer/Source/Project/jucer_Project.cpp
extras/Projucer/Source/Project/jucer_ProjectContentComponent.cpp
extras/Projucer/Source/Utility/jucer_MiscUtilities.cpp
extras/Projucer/Source/Utility/jucer_PresetIDs.h
extras/UnitTestRunner/Builds/LinuxMakefile/Makefile
extras/UnitTestRunner/UnitTestRunner.jucer
extras/binarybuilder/BinaryBuilder.jucer
extras/binarybuilder/Builds/Linux/Makefile
extras/windows dll/jucedll.jucer
modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp
modules/juce_audio_basics/juce_audio_basics.h
modules/juce_audio_basics/midi/juce_MidiMessage.cpp
modules/juce_audio_basics/midi/juce_MidiMessage.h
modules/juce_audio_basics/midi/juce_MidiMessageSequence.h
modules/juce_audio_basics/mpe/juce_MPEZone.h
modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp
modules/juce_audio_devices/juce_audio_devices.h
modules/juce_audio_devices/native/juce_MidiDataConcatenator.h
modules/juce_audio_devices/native/juce_ios_Audio.cpp
modules/juce_audio_devices/native/juce_linux_JackAudio.cpp
modules/juce_audio_devices/native/juce_mac_AudioCDReader.mm
modules/juce_audio_devices/native/juce_win32_ASIO.cpp
modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp
modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp
modules/juce_audio_formats/juce_audio_formats.h
modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h [new file with mode: 0644]
modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp
modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp
modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp
modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h
modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm
modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp
modules/juce_audio_plugin_client/juce_audio_plugin_client.h
modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r [new file with mode: 0644]
modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r [new file with mode: 0644]
modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp
modules/juce_audio_plugin_client/utility/juce_PluginBusUtilities.h
modules/juce_audio_plugin_client/utility/juce_PluginHostType.h
modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp
modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp
modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm
modules/juce_audio_processors/format_types/juce_VST3Common.h
modules/juce_audio_processors/format_types/juce_VST3Headers.h
modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp
modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h
modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp
modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h
modules/juce_audio_processors/juce_audio_processors.h
modules/juce_audio_processors/processors/juce_AudioChannelSet.cpp
modules/juce_audio_processors/processors/juce_AudioChannelSet.h
modules/juce_audio_processors/processors/juce_AudioProcessor.cpp
modules/juce_audio_processors/processors/juce_AudioProcessor.h
modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp
modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h
modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp
modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp
modules/juce_audio_processors/scanning/juce_KnownPluginList.h
modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp
modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp
modules/juce_audio_utils/juce_audio_utils.h
modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h
modules/juce_box2d/juce_box2d.h
modules/juce_core/containers/juce_Array.h
modules/juce_core/containers/juce_OwnedArray.h
modules/juce_core/containers/juce_ReferenceCountedArray.h
modules/juce_core/containers/juce_Variant.cpp
modules/juce_core/containers/juce_Variant.h
modules/juce_core/files/juce_File.cpp
modules/juce_core/files/juce_FileSearchPath.cpp
modules/juce_core/files/juce_FileSearchPath.h
modules/juce_core/javascript/juce_JSON.cpp
modules/juce_core/javascript/juce_Javascript.cpp
modules/juce_core/juce_core.cpp
modules/juce_core/juce_core.h
modules/juce_core/maths/juce_BigInteger.cpp
modules/juce_core/maths/juce_BigInteger.h
modules/juce_core/memory/juce_ReferenceCountedObject.h
modules/juce_core/memory/juce_ScopedPointer.h
modules/juce_core/native/juce_linux_Network.cpp
modules/juce_core/native/juce_mac_Network.mm
modules/juce_core/native/juce_posix_SharedCode.h
modules/juce_core/native/juce_win32_Network.cpp
modules/juce_core/native/juce_win32_SystemStats.cpp
modules/juce_core/network/juce_URL.cpp
modules/juce_core/system/juce_CompilerSupport.h
modules/juce_core/system/juce_StandardHeader.h
modules/juce_core/text/juce_StringArray.cpp
modules/juce_core/text/juce_StringArray.h
modules/juce_core/unit_tests/juce_UnitTest.h
modules/juce_core/xml/juce_XmlDocument.cpp
modules/juce_cryptography/juce_cryptography.h
modules/juce_data_structures/juce_data_structures.h
modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp
modules/juce_events/interprocess/juce_InterprocessConnectionServer.h
modules/juce_events/juce_events.h
modules/juce_events/messages/juce_ApplicationBase.cpp
modules/juce_graphics/contexts/juce_GraphicsContext.cpp
modules/juce_graphics/contexts/juce_GraphicsContext.h
modules/juce_graphics/geometry/juce_PathStrokeType.cpp
modules/juce_graphics/images/juce_Image.cpp
modules/juce_graphics/images/juce_Image.h
modules/juce_graphics/juce_graphics.h
modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm
modules/juce_gui_basics/buttons/juce_DrawableButton.h
modules/juce_gui_basics/components/juce_Component.cpp
modules/juce_gui_basics/components/juce_Component.h
modules/juce_gui_basics/components/juce_ModalComponentManager.cpp
modules/juce_gui_basics/components/juce_ModalComponentManager.h
modules/juce_gui_basics/drawables/juce_SVGParser.cpp
modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp
modules/juce_gui_basics/juce_gui_basics.h
modules/juce_gui_basics/keyboard/juce_KeyPress.cpp
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h
modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp
modules/juce_gui_basics/menus/juce_PopupMenu.cpp
modules/juce_gui_basics/menus/juce_PopupMenu.h
modules/juce_gui_basics/native/juce_android_Windowing.cpp
modules/juce_gui_basics/native/juce_ios_Windowing.mm
modules/juce_gui_basics/native/juce_linux_FileChooser.cpp
modules/juce_gui_basics/native/juce_linux_Windowing.cpp
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
modules/juce_gui_basics/native/juce_win32_Windowing.cpp
modules/juce_gui_basics/widgets/juce_ImageComponent.cpp
modules/juce_gui_basics/widgets/juce_Toolbar.cpp
modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h
modules/juce_gui_basics/windows/juce_TooltipWindow.cpp
modules/juce_gui_extra/juce_gui_extra.h
modules/juce_gui_extra/native/juce_linux_SystemTrayIcon.cpp
modules/juce_opengl/juce_opengl.h
modules/juce_opengl/opengl/juce_OpenGLImage.cpp
modules/juce_osc/juce_osc.h
modules/juce_tracktion_marketplace/juce_tracktion_marketplace.h
modules/juce_video/juce_video.h

index ee5411ae096fa73252298b6662a69b7f3e6f12e4..71efd0e4f4b6751143e2fcab51f59ac3a48d9c06 100644 (file)
@@ -2,7 +2,13 @@
 == Major JUCE features and updates ==\r
 \r
 This file just lists the more notable headline features. For more detailed info\r
-about minor changes and bugfixes, please see the git log!\r
+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\r
 \r
 Version 4.2.1\r
   - New class CachedValue, for providing easy and efficient access to ValueTree properties
index 56189d2d0ee5d4126990b55d0321459941e9c769..c1aa7d0c40744656255a825da768ab54829aea1d 100644 (file)
@@ -9,7 +9,7 @@
               pluginWantsMidiIn="1" pluginProducesMidiOut="0" pluginIsMidiEffectPlugin="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="AUv3SynthAU"\r
               pluginRTASCategory="" aaxIdentifier="com.roli.development.AUv3Synth"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
               buildStandalone="1">\r
   <MAINGROUP id="h0gx6L" name="AUv3Synth">\r
     <GROUP id="{9DC59668-E6DF-876C-EB58-DDA88D152162}" name="Source">\r
index 38e73c68e2175315ea7af4b302ba8b787c8d7e9a..8dec284a66a44d066f5f599d6dbf6c317422ec03 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        9329788543F0C6DA2B50BD72,
                                        2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                988670913C41D72F28DFE34E = {isa = PBXGroup; children = (
+                                       98135B5CED6D00B04F8AD56C,
                                        DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = "<group>"; };
                FE2338066D80D87950BB4358 = {isa = PBXGroup; children = (
                                        26DB94618438B2D5BF6B856E,
                                        F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = (
                                        FE2338066D80D87950BB4358,
-                                       F43FCD869B7CBA50CF03BB6F,
                                        3E76A3788CAAB12560CB4517,
                                        AE1DD722E80713D6A2C820C9,
                                        2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = "<group>"; };
-               3CF6F89CE98D1BD583C34852 = {isa = PBXGroup; children = (
+               618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = (
                                        8905DE78626372768938A4C0,
                                        05C14DEEE0E3BDC4049484B5,
                                        2FA12F7EBB9AC99A08FC1025,
                                        DBA0B8703ED6A2CFF6E952A8,
                                        2D4E5D168D18704BCB317DD8,
                                        CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = "<group>"; };
-               5E03484B053FE94C3308A153 = {isa = PBXGroup; children = (
+               E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = (
                                        33B2FD7C625F65B132945522,
                                        44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = "<group>"; };
-               5D85476955DBC422757405C1 = {isa = PBXGroup; children = (
+               6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = (
                                        30CDFDC04232575AE7A491F3,
                                        F96C31890AED2B62C4E0E20A,
                                        00A950F33C21C6688103E667,
                                        99AC2D0C2304F21B912FEC5B,
                                        2F9011C34B50B11B6FFEDA7F,
                                        EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = "<group>"; };
-               F3BA35D57A9C238A5CC3628F = {isa = PBXGroup; children = (
+               666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = (
                                        78DD966E73DF076A83FC1F2C,
                                        6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = "<group>"; };
-               51E2FC46CC35EE59A85AF51E = {isa = PBXGroup; children = (
+               47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = (
                                        08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = "<group>"; };
                E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = (
                                        988670913C41D72F28DFE34E,
                                        A2BBDDDA694235612BDE9BD0,
-                                       3CF6F89CE98D1BD583C34852,
-                                       5E03484B053FE94C3308A153,
-                                       5D85476955DBC422757405C1,
-                                       F3BA35D57A9C238A5CC3628F,
-                                       51E2FC46CC35EE59A85AF51E,
+                                       618CCB6A21E8C032AF1D2BEB,
+                                       E57F8E0940E0C2FB651C1534,
+                                       6E32D1C853DB168862215AF5,
+                                       666ACBAA58DBC0AD514A3CF9,
+                                       47BE374539E9FEBFEFDAD7E3,
                                        9EDB40D557C3BBB1CC63CF65,
                                        26AE9472CE02F176A9513852,
                                        03DE1C983B7DECDCC451C8F8,
                                        F3498E82A2D4ACBED68A7F43,
                                        6AFB9EB642850186B551DB33,
                                        F003DFE998431203650E2E3F,
-                                       FF08B80860BB393314DC49EA,
                                        D06C2B85E02F13F9B57DB1A9, ); name = Resources; sourceTree = "<group>"; };
                ED86208188082DE5EA9381E4 = {isa = PBXGroup; children = (
                                        7CBEB55B80E78C9DE16A713A,
                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,
                                        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; };
                                        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; };
                                        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; };
                                        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; };
index 5fc359c59af17b7d96a9a0ecd609dc0f3d5b0d23..0e9b73e892397dc46ac265a10cf33104f6524596 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        9329788543F0C6DA2B50BD72,
                                        2CC92DEE105B69921A4BD036, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                988670913C41D72F28DFE34E = {isa = PBXGroup; children = (
+                                       98135B5CED6D00B04F8AD56C,
                                        DC8F10CCAC55F7216F0304F9, ); name = AAX; sourceTree = "<group>"; };
                FE2338066D80D87950BB4358 = {isa = PBXGroup; children = (
                                        26DB94618438B2D5BF6B856E,
                                        F8952FD62C839E34EBB043F6, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                A2BBDDDA694235612BDE9BD0 = {isa = PBXGroup; children = (
                                        FE2338066D80D87950BB4358,
-                                       F43FCD869B7CBA50CF03BB6F,
                                        3E76A3788CAAB12560CB4517,
                                        AE1DD722E80713D6A2C820C9,
                                        2220D1078A2681D8AAF3563E, ); name = AU; sourceTree = "<group>"; };
-               3CF6F89CE98D1BD583C34852 = {isa = PBXGroup; children = (
+               618CCB6A21E8C032AF1D2BEB = {isa = PBXGroup; children = (
                                        8905DE78626372768938A4C0,
                                        05C14DEEE0E3BDC4049484B5,
                                        2FA12F7EBB9AC99A08FC1025,
                                        DBA0B8703ED6A2CFF6E952A8,
                                        2D4E5D168D18704BCB317DD8,
                                        CF51659EBB00003E6CB20B66, ); name = RTAS; sourceTree = "<group>"; };
-               5E03484B053FE94C3308A153 = {isa = PBXGroup; children = (
+               E57F8E0940E0C2FB651C1534 = {isa = PBXGroup; children = (
                                        33B2FD7C625F65B132945522,
                                        44E613EE8E541E69E6B8A449, ); name = Standalone; sourceTree = "<group>"; };
-               5D85476955DBC422757405C1 = {isa = PBXGroup; children = (
+               6E32D1C853DB168862215AF5 = {isa = PBXGroup; children = (
                                        30CDFDC04232575AE7A491F3,
                                        F96C31890AED2B62C4E0E20A,
                                        00A950F33C21C6688103E667,
                                        99AC2D0C2304F21B912FEC5B,
                                        2F9011C34B50B11B6FFEDA7F,
                                        EA8B1437F945AFED7BDF11DB, ); name = utility; sourceTree = "<group>"; };
-               F3BA35D57A9C238A5CC3628F = {isa = PBXGroup; children = (
+               666ACBAA58DBC0AD514A3CF9 = {isa = PBXGroup; children = (
                                        78DD966E73DF076A83FC1F2C,
                                        6FA729EAB8A64447D81B36E9, ); name = VST; sourceTree = "<group>"; };
-               51E2FC46CC35EE59A85AF51E = {isa = PBXGroup; children = (
+               47BE374539E9FEBFEFDAD7E3 = {isa = PBXGroup; children = (
                                        08D38FFAFF41735F36FD4BF9, ); name = VST3; sourceTree = "<group>"; };
                E4D31720EE240DC9A75C9459 = {isa = PBXGroup; children = (
                                        988670913C41D72F28DFE34E,
                                        A2BBDDDA694235612BDE9BD0,
-                                       3CF6F89CE98D1BD583C34852,
-                                       5E03484B053FE94C3308A153,
-                                       5D85476955DBC422757405C1,
-                                       F3BA35D57A9C238A5CC3628F,
-                                       51E2FC46CC35EE59A85AF51E,
+                                       618CCB6A21E8C032AF1D2BEB,
+                                       E57F8E0940E0C2FB651C1534,
+                                       6E32D1C853DB168862215AF5,
+                                       666ACBAA58DBC0AD514A3CF9,
+                                       47BE374539E9FEBFEFDAD7E3,
                                        9EDB40D557C3BBB1CC63CF65,
                                        26AE9472CE02F176A9513852,
                                        03DE1C983B7DECDCC451C8F8,
                                        CF02DA80A8A515CE41B0C8F6,
                                        63AFF514CAE6FB89A3503CEF,
                                        A8315F08B794D9C87328F17F,
+                                       853D9A89FE96C6DD6730CEC7,
                                        D9ED0926381D40DA1A66C26D,
                                        9965CB9ED8D2B26CACA9C44A,
                                        58E254BD072595F6E3F6D5F5,
                                        E553E188A17BDF4E832F0A01,
                                        F138CA63A1127DA0DB69B127, ); name = "Juce Library Code"; sourceTree = "<group>"; };
                A727F6B063FCDB816462D213 = {isa = PBXGroup; children = (
+                                       6DA4597568FFE5B6D1F5B68A,
                                        F3498E82A2D4ACBED68A7F43,
                                        6AFB9EB642850186B551DB33,
                                        9A419F28D68BDEB200F29603,
                                        29982493607128FD6DB6A284,
                                        5EF6762AB1C5CE4C2DCD59ED, ); name = Frameworks; sourceTree = "<group>"; };
                E793574695108F202603BAA5 = {isa = PBXGroup; children = (
+                                       F5E81FD99EFCB226D2486603,
                                        746B19364297E7D489749B70,
                                        EC3DE1F504C76EEDDA7F2216,
                                        9536B5A780A03F6BACB24144, ); name = Products; sourceTree = "<group>"; };
                                        E793574695108F202603BAA5, ); name = Source; sourceTree = "<group>"; };
                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;
                                        "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; };
                                        "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; };
                                        "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; };
                                        "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; };
                                        "_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",
                                        "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 = {
                                        "_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",
                                        "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 = {
                                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; };
                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; };
                                        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/AUv3Synth/Builds/iOS/Info-VST.plist b/examples/AUv3Synth/Builds/iOS/Info-VST.plist
new file mode 100644 (file)
index 0000000..71b368c
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
+<plist>\r
+  <dict>\r
+    <key>LSRequiresIPhoneOS</key>\r
+    <true/>\r
+    <key>UIViewControllerBasedStatusBarAppearance</key>\r
+    <false/>\r
+    <key>CFBundleExecutable</key>\r
+    <string>${EXECUTABLE_NAME}</string>\r
+    <key>CFBundleIdentifier</key>\r
+    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\r
+    <key>CFBundleName</key>\r
+    <string>AUv3Synth</string>\r
+    <key>CFBundleDisplayName</key>\r
+    <string>AUv3Synth</string>\r
+    <key>CFBundlePackageType</key>\r
+    <string>BNDL</string>\r
+    <key>CFBundleSignature</key>\r
+    <string>????</string>\r
+    <key>CFBundleShortVersionString</key>\r
+    <string>1.0.0</string>\r
+    <key>CFBundleVersion</key>\r
+    <string>1.0.0</string>\r
+    <key>NSHumanReadableCopyright</key>\r
+    <string></string>\r
+    <key>NSHighResolutionCapable</key>\r
+    <true/>\r
+    <key>UIRequiresFullScreen</key>\r
+    <true/>\r
+    <key>UIStatusBarHidden</key>\r
+    <true/>\r
+    <key>UISupportedInterfaceOrientations</key>\r
+    <array>\r
+      <string>UIInterfaceOrientationPortrait</string>\r
+      <string>UIInterfaceOrientationLandscapeLeft</string>\r
+      <string>UIInterfaceOrientationLandscapeRight</string>\r
+    </array>\r
+    <key>UIBackgroundModes</key>\r
+    <array/>\r
+  </dict>\r
+</plist>\r
index 8ca835fbef75dcbc2e78fe070c07f6b195dddcdb..303210b658fdf275f873e047f6a74b17b7762446 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      ""\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'AUv3'\r
+ #define JucePlugin_PluginCode             0x41557633 // 'AUv3'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                1\r
index 92a39b9e8eb22cd55c82bd19304ab49dcfc2245b..c28861d38951f2c5100d75e95647abddcffe6884 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="LrATE6" name="AnimationAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.AnimationAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="F3keCY" name="AnimationAppExample">\r
     <GROUP id="{5E4132EA-C4A0-CBDE-BEDA-FD6772DA79D5}" name="Source">\r
       <FILE id="n1FmZc" name="MainComponent.cpp" compile="1" resource="0"\r
index b504e0323e16fae96a1bd4361b6814aac53ec9c5..56b5de6b691f1ac424958553bed09b383ca7da2f 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="PAnJXP" name="AudioAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.AudioAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="GaJIge" name="AudioAppExample">\r
     <GROUP id="{168FC5D4-FA65-8320-F83E-C14C416638E1}" name="Source">\r
       <FILE id="aHvhJ2" name="MainComponent.cpp" compile="1" resource="0"\r
index 7080672e5cfa09c7ca0bb74e25853b7a01d327b2..920c8435edefe405b43055eecf997a1e379b48ed 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="fyUrFS" name="BouncingBallWavetableDemo" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.BouncingBallWavetableDemo"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.1">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
   <MAINGROUP id="MgjqDB" name="BouncingBallWavetableDemo">\r
     <GROUP id="{D35F88A0-C242-1CAA-21A9-6D01F78F4128}" name="Source">\r
       <FILE id="M5GUDX" name="MainComponent.cpp" compile="1" resource="0"\r
index 075451f0bf6e9aee8426eb21d930159a09405e75..d0ea1f4445f4eaad9f38ebc6eb92d21a27fad910 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 91b1f38546513713e22ccddf62763ab0d9630f1d..4b9b576a2ee619be92ccc86d1b163dd2ffe979c8 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="oNvA5C" name="ComponentTutorialExample" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.yourcompany.ComponentTutorialExample"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.1">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
   <MAINGROUP id="WydTVz" name="ComponentTutorialExample">\r
     <GROUP id="{F2C8112A-EE4B-7AF1-A0A9-16152D1EF1A7}" name="Source">\r
       <FILE id="t4ngZQ" name="ToggleLightGridComponent.h" compile="0" resource="0"\r
index 163e55cb12287468076c6f1df9b7f788eae7656c..2acd46db7f1b71d2ffe33b4e072acb4036e8d250 100644 (file)
@@ -69,14 +69,14 @@ LOCAL_SRC_FILES := \
   ../../../JuceLibraryCode/juce_video.cpp\\r
 \r
 ifeq ($(NDK_DEBUG),1)\r
-  LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -I "../../../../modules" -O0 -std=gnu++11 -D "JUCE_ANDROID=1" -D "JUCE_ANDROID_API_VERSION=23" -D "JUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo" -D JUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000"\r
+  LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -I "../../../../modules" -O0 -std=gnu++11 -DJUCE_ANDROID=1 -DJUCE_ANDROID_API_VERSION=23 -DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo -DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_ANDROID_7F0E4A25=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000\r
   LOCAL_LDLIBS := -llog -lGLESv2 -landroid -lEGL\r
-  LOCAL_CFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -I "../../../../modules" -O0 -std=gnu++11 -D "JUCE_ANDROID=1" -D "JUCE_ANDROID_API_VERSION=23" -D "JUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo" -D JUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000"\r
+  LOCAL_CFLAGS += -fsigned-char -fexceptions -frtti -g -I "../../JuceLibraryCode" -I "../../../../modules" -O0 -std=gnu++11 -DJUCE_ANDROID=1 -DJUCE_ANDROID_API_VERSION=23 -DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo -DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_ANDROID_7F0E4A25=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000\r
   LOCAL_LDLIBS := -llog -lGLESv2 -landroid -lEGL\r
 else\r
-  LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -I "../../JuceLibraryCode" -I "../../../../modules" -O3 -std=gnu++11 -D "JUCE_ANDROID=1" -D "JUCE_ANDROID_API_VERSION=23" -D "JUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo" -D JUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000"\r
+  LOCAL_CPPFLAGS += -fsigned-char -fexceptions -frtti -I "../../JuceLibraryCode" -I "../../../../modules" -O3 -std=gnu++11 -DJUCE_ANDROID=1 -DJUCE_ANDROID_API_VERSION=23 -DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo -DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_ANDROID_7F0E4A25=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000\r
   LOCAL_LDLIBS := -llog -lGLESv2 -landroid -lEGL\r
-  LOCAL_CFLAGS += -fsigned-char -fexceptions -frtti -I "../../JuceLibraryCode" -I "../../../../modules" -O3 -std=gnu++11 -D "JUCE_ANDROID=1" -D "JUCE_ANDROID_API_VERSION=23" -D "JUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo" -D JUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_ANDROID_7F0E4A25=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000"\r
+  LOCAL_CFLAGS += -fsigned-char -fexceptions -frtti -I "../../JuceLibraryCode" -I "../../../../modules" -O3 -std=gnu++11 -DJUCE_ANDROID=1 -DJUCE_ANDROID_API_VERSION=23 -DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_jucedemo_JuceDemo -DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/jucedemo/JuceDemo\" -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_ANDROID_7F0E4A25=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000\r
   LOCAL_LDLIBS := -llog -lGLESv2 -landroid -lEGL\r
 endif\r
 \r
index 26d574110af3cbfd88363f49b7a753e8b9209fed..8f73ad3b584f8725358c6a8ce68b54668d80443a 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
+  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCE_UNIT_TESTS=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -D "JUCE_APP_VERSION=3.0.0" -D "JUCE_APP_VERSION_HEX=0x30000" -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
+  CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 71c5339c5609851198d7a4bd69ef379f2058141a..bb0fc6d292177a652d7e43265d833a076da8a205 100644 (file)
@@ -3,6 +3,11 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
 <plist>\r
   <dict>\r
+    <key>NSAppTransportSecurity</key>\r
+    <dict>\r
+      <key>NSAllowsArbitraryLoads</key>\r
+      <true/>\r
+    </dict>\r
     <key>CFBundleExecutable</key>\r
     <string>${EXECUTABLE_NAME}</string>\r
     <key>CFBundleIconFile</key>\r
index 756003b2e9ff870ed4489e6d64b42b273b90a45a..6aa71d6b65eb9ef0dae4af31450e02e3a13b50ff 100644 (file)
@@ -3,6 +3,11 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
 <plist>\r
   <dict>\r
+    <key>NSAppTransportSecurity</key>\r
+    <dict>\r
+      <key>NSAllowsArbitraryLoads</key>\r
+      <true/>\r
+    </dict>\r
     <key>LSRequiresIPhoneOS</key>\r
     <true/>\r
     <key>UIViewControllerBasedStatusBarAppearance</key>\r
index 1357c418997bf92986c37d760f9596e813263ba2..f19a16234b0f094afb822876f47150712d805aa7 100644 (file)
@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="sBBIzr" name="JuceDemo" projectType="guiapp" version="3.0.0"\r
-              bundleIdentifier="com.yourcompany.JuceDemo" jucerVersion="4.2.1"\r
+              bundleIdentifier="com.yourcompany.JuceDemo" jucerVersion="4.2.3"\r
               defines="JUCE_UNIT_TESTS=1" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
-               objCExtraSuffix="hZh0GG" bigIcon="BvyE0d" extraCompilerFlags="-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter">\r
+               objCExtraSuffix="hZh0GG" bigIcon="BvyE0d" extraCompilerFlags="-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter"\r
+               customPList="&lt;plist&gt;&#10;&lt;dict&gt;&#10;&#9;&lt;key&gt;NSAppTransportSecurity&lt;/key&gt;&#10;&#9;&lt;dict&gt;&#10;&#9;&#9;&lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt;&#10;&#9;&#9;&lt;true/&gt;&#10;&#9;&lt;/dict&gt;&#10;&lt;/dict&gt;&#10;&lt;/plist&gt;">\r
       <CONFIGURATIONS>\r
         <CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="JuceDemo"\r
                        osxSDK="default" osxCompatibility="10.10 SDK" osxArchitecture="default"\r
@@ -33,7 +34,8 @@
       </MODULEPATHS>\r
     </XCODE_MAC>\r
     <XCODE_IPHONE targetFolder="Builds/iOS" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
-                  objCExtraSuffix="Lpywnl" bigIcon="BvyE0d" iosScreenOrientation="portraitlandscape">\r
+                  objCExtraSuffix="Lpywnl" bigIcon="BvyE0d" iosScreenOrientation="portraitlandscape"\r
+                  customPList="&lt;plist&gt;&#10;&lt;dict&gt;&#10;&#9;&lt;key&gt;NSAppTransportSecurity&lt;/key&gt;&#10;&#9;&lt;dict&gt;&#10;&#9;&#9;&lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt;&#10;&#9;&#9;&lt;true/&gt;&#10;&#9;&lt;/dict&gt;&#10;&lt;/dict&gt;&#10;&lt;/plist&gt;">\r
       <CONFIGURATIONS>\r
         <CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="JuceDemo"\r
                        osxSDK="default" osxCompatibility="default" osxArchitecture="default"\r
index 90598407d7ecb2e6fcbc0b992863185181cfc0bc..3c7050c8d0c46433cb0180b9548ff74b4c0255be 100644 (file)
@@ -70,7 +70,7 @@ public:
 private:\r
     void createRSAKey()\r
     {\r
-        int bits = jlimit (32, 512, bitSize.getText().getIntValue());\r
+        int bits = jlimit (32, 1024, bitSize.getText().getIntValue());\r
         bitSize.setText (String (bits), dontSendNotification);\r
 \r
         // Create a key-pair...\r
index 2426148048acff316adb54ac327a341723cb26a0..ea2e6aa6382e325de476d882c7b253b15afe4372 100644 (file)
@@ -22,6 +22,7 @@
   ==============================================================================\r
 */\r
 \r
+#include <typeinfo>\r
 #include "JuceDemoHeader.h"\r
 \r
 //==============================================================================\r
@@ -558,19 +559,18 @@ AudioDeviceManager& MainAppWindow::getSharedAudioDeviceManager()
     if (sharedAudioDeviceManager == nullptr)\r
     {\r
         sharedAudioDeviceManager = new AudioDeviceManager();\r
-\r
-        RuntimePermissions::request (\r
-            RuntimePermissions::recordAudio,\r
-            [] (bool wasGranted) {\r
-                int numInputChannels = wasGranted ? 2 : 0;\r
-                sharedAudioDeviceManager->initialise (numInputChannels, 2, nullptr, true, String(), nullptr);\r
-            }\r
-        );\r
+        RuntimePermissions::request (RuntimePermissions::recordAudio, runtimPermissionsCallback);\r
     }\r
 \r
     return *sharedAudioDeviceManager;\r
 }\r
 \r
+void MainAppWindow::runtimPermissionsCallback (bool wasGranted)\r
+{\r
+    int numInputChannels = wasGranted ? 2 : 0;\r
+    sharedAudioDeviceManager->initialise (numInputChannels, 2, nullptr, true, String(), nullptr);\r
+}\r
+\r
 MainAppWindow* MainAppWindow::getMainAppWindow()\r
 {\r
     for (int i = TopLevelWindow::getNumTopLevelWindows(); --i >= 0;)\r
index e1f5610ddeea0c3ca9e0d69c6afd630a23da5719..5baa678f3c11450b22b576889aa40076500e599d 100644 (file)
@@ -93,6 +93,9 @@ public:
     };\r
 \r
 private:\r
+\r
+    static void runtimPermissionsCallback (bool wasGranted);\r
+\r
     ScopedPointer<ContentComponent> contentComponent;\r
     ScopedPointer<Component> taskbarIcon;\r
     ScopedPointer<BubbleMessageComponent> currentBubbleMessage;\r
index 218a56a10179b25e5e9f521dd32c51102a7b3701..da1622d58e82aa6eae933db3ffc918e35358a88d 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
index fa4e5f4cc41e1c92bf771197240c51e63f27c475..1bff121183102312a2f34d4d9744c93e29f8076b 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="tTAKTK1s" name="HelloWorld" projectType="guiapp" juceFolder="../../../juce"\r
-              jucerVersion="4.2.1" version="1.0.0" bundleIdentifier="com.roli.jucehelloworld"\r
+              jucerVersion="4.2.3" version="1.0.0" bundleIdentifier="com.roli.jucehelloworld"\r
               companyName="ROLI Ltd." includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
index 992c4df71872e83602abaa691e8598d7ce0b7cce..549c25af424ecc44db702a56dd24d1c3a72bbda2 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 97afb6e375b8b433286df5aad3704ef986269638..656d8b110184d7584955c4baf929c707c12d11ae 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IilE7R" name="MPETest" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.MPETest" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="VCQQcn" name="MPETest">\r
     <GROUP id="{D43238F0-992F-BC5A-F1AA-31BBBD3D17B0}" name="Source">\r
       <FILE id="uRxR7V" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 4fa71c7cf807a3b87e20af14a937eba11ad233fc..12b7004609cf633dbb685a8774dece60e5e63c38 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 67586a974917f1393fe67215fb11fa946dc70b8a..c8d285f990690e5f269ae190ec70fe96b93591f1 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="wHE0ay" name="MidiTest" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.MidiTest" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="s3xxCh" name="MidiTest">\r
     <GROUP id="{7D29F5BC-1B05-AE8F-9202-5CF152AB1103}" name="Source">\r
       <FILE id="kpmJ3T" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 49f701d5b444c2618e8daee5423d8cfcf0eabf8a..e95df255ac770181e22c73410dfb2d7d2925d321 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 324f60039c5dda82962eb574b0380c4812b11cd2..9dc7e64812093ec78f13532c6bf54e7b2bfe6982 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="gWI5Ir" name="JUCE Network Graphics Demo" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.NetworkGraphicsDemo"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.1">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
   <MAINGROUP id="OT9rJ2" name="JUCE Network Graphics Demo">\r
     <GROUP id="{48D54E6E-37F4-B20A-E038-C63E4EDFD4D9}" name="Source">\r
       <FILE id="BfclEZ" name="Demos.h" compile="0" resource="0" file="Source/Demos.h"/>\r
index 17f3ca0df6909663dbfbdf7dc5e13dc019e8a343..40905c5373f04db97c3fc6ecf9f6815aefe5abc0 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index d8f152a62726bcc6e732f19e1c83377e1b7779d0..74a019412955e5421a1343d6f88e81fdc6798a55 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IhmIkj" name="OSCMonitor" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.rawmaterialsoftware.OSCMonitor" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="N9NMMk" name="OSCMonitor">\r
     <GROUP id="{2B92546C-6B49-72D9-ACD0-0F2FCE9AD0D5}" name="Source">\r
       <FILE id="fqVB21" name="OSCLogListBox.h" compile="0" resource="0" file="Source/OSCLogListBox.h"/>\r
index ae5774b0ee081aeac86477b87770537c17c0c4a7..ee6a4fc0e34bbc6cbb7d143757d1af6e0e320944 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
index a602055853907e1822142886ebf3e43c0d848e3f..3f14082dedfe71c0d08adbdd376ca52eef3507f2 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="pdocPt" name="OSCReceiver" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OSCReceiver" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="Y6Q0O9" name="OSCReceiver">\r
     <GROUP id="{9F303ECD-83DE-CA91-97B4-C083DA897F49}" name="Source">\r
       <FILE id="HHuoMc" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>\r
index 70de81b7c4fb9b822169d718f5eff63a48c49578..7f0f27a3153419dbcc2c9bf0a3a521e8a305c9eb 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt \r
index e71fe86f71ff13e54b46a968743046a21a043b8c..77c8d1551dcc8b012605733ac9105587e34d50bd 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="rysVAr" name="OSCSender" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OSCSender" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="knnZZJ" name="OSCSender">\r
     <GROUP id="{F2A0007A-4D24-4DD6-DEC8-6428F36CE45D}" name="Source">\r
       <FILE id="ORaBHU" name="MainComponent.h" compile="0" resource="0" file="Source/MainComponent.h"/>\r
index 8c1c1519a78fa7c55af32de2ee5d59fa80256a41..2c7024b411e85e242e49c01170ad60cd5ac22ad0 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="c3KrlE" name="OpenGLAppExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.OpenGLAppExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="amjEXL" name="OpenGLAppExample">\r
     <GROUP id="{28FE2D12-A88D-07E2-72CF-CD04014CF225}" name="Source">\r
       <GROUP id="{666960E2-D311-806A-1FE7-A27057939840}" name="Resources">\r
index d9f817a1fb7df3d715fb51b2dc4777da4bf43e46..5bf0782e2a810c61af4bf5788dd1ec8e61d1055c 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="jKHEJM" name="PluckedStringsDemo" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.timurdoumler.PluckedStringsDemo" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="IWdVf7" name="PluckedStringsDemo">\r
     <GROUP id="{8800CD50-6741-8B75-0305-FAF13427EF5D}" name="Source">\r
       <FILE id="Z7hWe1" name="StringSynthesiser.h" compile="0" resource="0"\r
index fb7766e3736cf98de3dd5d269a7c59eb662b3066..18d502e212c7bb56dc3264e4e0d98c7871c4ecbf 100644 (file)
@@ -9,7 +9,7 @@
               pluginIsMidiEffectPlugin="1" pluginSilenceInIsSilenceOut="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="ArpeggiatorAU"\r
               pluginRTASCategory="" aaxIdentifier="com.ROLI.Arpeggiator" pluginAAXCategory="AAX_EPlugInCategory_Effect"\r
-              jucerVersion="4.2.1" companyName="ROLI Ltd." companyWebsite="www.juce.com"\r
+              jucerVersion="4.2.3" companyName="ROLI Ltd." companyWebsite="www.juce.com"\r
               companyEmail="info@juce.com" buildAUv3="0">\r
   <MAINGROUP id="l0H2am" name="Arpeggiator">\r
     <GROUP id="{E91162B3-479D-3630-4B5F-0E76EE995FB8}" name="Source">\r
index a2cf610a45bcbc9246905f6fabc77561b0075fda..695b477d403d6b674ff616d57361945315c6b4d8 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        C0EDB3E56321B663CEA2E600,
                                        DAF907ABF4DE87F35748F3D6, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                A761179035DC171AE3CC1361 = {isa = PBXGroup; children = (
+                                       14ADC9B94C2E4CD0D6E0AEC1,
                                        38286B4A32B4D3C255E0A871, ); name = AAX; sourceTree = "<group>"; };
                2950965D1962FA815C4D2EED = {isa = PBXGroup; children = (
                                        8050245A4FDA661B38C56FB7,
                                        905886A5158A96197F3B794D, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                BA137B835216E7860F255BD8 = {isa = PBXGroup; children = (
                                        2950965D1962FA815C4D2EED,
-                                       433FE5AD20CFA2F2D6A1E037,
                                        3C5308C4C1F27A3EDA01A6AE,
                                        7E48708D1F7B5C675C2317FA,
-                                       5B391F3E3B16BFFA2E2E022F,
-                                       A3F2CF6BFEAFFFE58A0A9B24, ); name = AU; sourceTree = "<group>"; };
-               8691C24C4102F1C9E9B9C411 = {isa = PBXGroup; children = (
+                                       5B391F3E3B16BFFA2E2E022F, ); name = AU; sourceTree = "<group>"; };
+               0F72F8E63055FBB979899A29 = {isa = PBXGroup; children = (
                                        60887069093B99EFB6343769,
                                        26EFE7738F4209B87E675B48,
                                        8495D4AC707047B56331794B,
                                        2C88000D1FD0FF38CE9A45DC,
                                        85762464FE37AFE1886FEC22,
                                        EBC20070F34FA195234BE6DF, ); name = RTAS; sourceTree = "<group>"; };
-               C05274DFED1EB6E34DF36733 = {isa = PBXGroup; children = (
+               745D75DA8B561FCA6860047F = {isa = PBXGroup; children = (
                                        4383F22A2A80A06AD2CC494A,
                                        12351FF0F32DCFFD8F9B753E, ); name = Standalone; sourceTree = "<group>"; };
-               99C24791D5336D7A9E41FAF5 = {isa = PBXGroup; children = (
+               B6C772C0440D8D8DBE7632CB = {isa = PBXGroup; children = (
                                        391348A415637487C38D51AF,
                                        689997DCF29C4EA0BBE54FB3,
                                        F04DF2587A3735FD7CBD29C0,
                                        4C2521E196D9F39AEE5A9A3C,
                                        54ED3AEF6A560DA2A2C9A6A1,
                                        73967B10B92F7FAB36839F0C, ); name = utility; sourceTree = "<group>"; };
-               5485B6828CE54EEAFCFE850A = {isa = PBXGroup; children = (
+               6CA0C21AAEF945AA59C2EB8C = {isa = PBXGroup; children = (
                                        0462FCF4041854C357138EB2,
                                        C18A26D290AB9B1B16DDF330, ); name = VST; sourceTree = "<group>"; };
-               17217ECF28B1997B5294F7EB = {isa = PBXGroup; children = (
+               8A9835029A0E7FDB7F930A00 = {isa = PBXGroup; children = (
                                        EAAA5DE166254FF08BBF56C4, ); name = VST3; sourceTree = "<group>"; };
                7FF931018B659697B544BFF0 = {isa = PBXGroup; children = (
                                        A761179035DC171AE3CC1361,
                                        BA137B835216E7860F255BD8,
-                                       8691C24C4102F1C9E9B9C411,
-                                       C05274DFED1EB6E34DF36733,
-                                       99C24791D5336D7A9E41FAF5,
-                                       5485B6828CE54EEAFCFE850A,
-                                       17217ECF28B1997B5294F7EB,
+                                       0F72F8E63055FBB979899A29,
+                                       745D75DA8B561FCA6860047F,
+                                       B6C772C0440D8D8DBE7632CB,
+                                       6CA0C21AAEF945AA59C2EB8C,
+                                       8A9835029A0E7FDB7F930A00,
                                        735F5B2D82B337DC3E3F2B4C,
                                        951CE97A5CF4D268F6F8F450,
                                        F9BB54AE65B0CB1C8D3A6484,
+                                       697EF2A14DCAE2E85C3C5A53,
                                        7A8D5B45E22BF4C69EE381A7,
                                        5E7D4EE3F4AF0E8F5178E18E,
                                        74F428D92543A96844DADEA8,
                                        AD33FF34F267508546D24E26,
                                        E39E8398B8A26F3F99A37341,
                                        DE0DBA6DFFF3F7B3024D78AF,
-                                       2F12CFEB1E95BC54E1CD3C7D,
-                                       ACE47F30020C3E4144BD108A, ); name = Resources; sourceTree = "<group>"; };
+                                       2F12CFEB1E95BC54E1CD3C7D, ); name = Resources; sourceTree = "<group>"; };
                61D8F5CF64FE3EC528B85D1B = {isa = PBXGroup; children = (
                                        C3F6222E9059F8CCD9674AD0,
                                        AC840D910B076A8D6E11D0E3,
                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,
                                        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 = (
                                        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 = (
                                        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; };
                                        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/MacOSX/Info-Shared_Code.plist b/examples/PlugInSamples/Arpeggiator/Builds/MacOSX/Info-Shared_Code.plist
deleted file mode 100644 (file)
index 43df714..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-\r
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
-<plist>\r
-  <dict>\r
-    <key>CFBundleExecutable</key>\r
-    <string>${EXECUTABLE_NAME}</string>\r
-    <key>CFBundleIconFile</key>\r
-    <string></string>\r
-    <key>CFBundleIdentifier</key>\r
-    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\r
-    <key>CFBundleName</key>\r
-    <string>Arpeggiator</string>\r
-    <key>CFBundleDisplayName</key>\r
-    <string>Arpeggiator</string>\r
-    <key>CFBundlePackageType</key>\r
-    <string>FMWK</string>\r
-    <key>CFBundleSignature</key>\r
-    <string>????</string>\r
-    <key>CFBundleShortVersionString</key>\r
-    <string>1.0.0</string>\r
-    <key>CFBundleVersion</key>\r
-    <string>1.0.0</string>\r
-    <key>NSHumanReadableCopyright</key>\r
-    <string>ROLI Ltd.</string>\r
-    <key>NSHighResolutionCapable</key>\r
-    <true/>\r
-  </dict>\r
-</plist>\r
index 84d45cf6841c96884d2c8f7e152e026005109fc7..f74744c8f6f142dfe827d76bb1f8ff6e918584b8 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index d35303a8b6f6c95c6132008e3eef97367d4865fc..3e8e47ed718aca2d956efee7794f0b5f6519d859 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index 7a74eb2a39812564649a875f8121f549b226fb48..84d9132be44aa9cd7a3521ab09bde2a8b0afa04a 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      "info@juce.com"\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'Arpg'\r
+ #define JucePlugin_PluginCode             0x41727067 // 'Arpg'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                0\r
  #define JucePlugin_VSTCategory            kPlugCategEffect\r
 #endif\r
 #ifndef  JucePlugin_AUMainType\r
- #define JucePlugin_AUMainType             kAudioUnitType_Effect\r
+ #define JucePlugin_AUMainType             'aumi'\r
 #endif\r
 #ifndef  JucePlugin_AUSubType\r
  #define JucePlugin_AUSubType              JucePlugin_PluginCode\r
index e6580bf868f0e0e78fb962ee3ad4f71fc06b8088..eeb4672060621cbb27ec5ba2c6e902cfc99459de 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        56FF5DCB746A2F7485406F63,
                                        18B7B5B0C06A1C96ED45C9AB, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                F1C57B1BE7D3A85714FB7C7A = {isa = PBXGroup; children = (
+                                       EEB2A8271DE160CC76165242,
                                        B41DB1D9877BC61AB0558A69, ); name = AAX; sourceTree = "<group>"; };
                AB9348DF000622E4B2C60AD4 = {isa = PBXGroup; children = (
                                        F12E2F9633C0C10172C7EB29,
                                        5E148B6D2D4D3ACADBD369BA, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                F2D5F877258DB2BBF0433F23 = {isa = PBXGroup; children = (
                                        AB9348DF000622E4B2C60AD4,
-                                       EE799DBCC57F1B69CEB332A1,
                                        8CABBDFF3D48FA622F561D56,
                                        B15D003DE2F4E963EC111711,
-                                       8782AADF74783EA3DD066529,
-                                       52F901B45BB73B9A4C4588C4, ); name = AU; sourceTree = "<group>"; };
-               A8BAB3F628FDD2F723B11AF5 = {isa = PBXGroup; children = (
+                                       8782AADF74783EA3DD066529, ); name = AU; sourceTree = "<group>"; };
+               1DDAAEC5B6DB8099FC652515 = {isa = PBXGroup; children = (
                                        B7EC6979B78232E97C67586D,
                                        2B7C784CF333CA6BEEF5038A,
                                        CF608BF804CB06BCBB51B9C2,
                                        6701AB4D2F5DAD2EA72ACFE9,
                                        DC55FBABEB3A839B6602D678,
                                        DBF11B9083F40C0C849B9302, ); name = RTAS; sourceTree = "<group>"; };
-               48CA15F7102E796E2AD6058D = {isa = PBXGroup; children = (
+               ABE3EC02D9B5D528025BF690 = {isa = PBXGroup; children = (
                                        43B51F79EFF2E9673AA1BCE6,
                                        8323AB8EF5430A81A4FDD26E, ); name = Standalone; sourceTree = "<group>"; };
-               50034CFA00470A07703FD97C = {isa = PBXGroup; children = (
+               AAB881B99070695DB74EB217 = {isa = PBXGroup; children = (
                                        9B5CE97BAC0AAD8EEAF75ABF,
                                        38687DB2FEC47B8E4826346E,
                                        E219774D186DF70D694D2768,
                                        9F56E1F9CF75D555C677A38D,
                                        E9FEFC46FF2B51B8C3A520F4,
                                        21F8A643A1D07AE29337D139, ); name = utility; sourceTree = "<group>"; };
-               0DA9BEC29F87A7F4440AA21A = {isa = PBXGroup; children = (
+               D78074DEDA44278DDA6376E6 = {isa = PBXGroup; children = (
                                        9548631628595F1576CD7B73,
                                        C3D43F992D8AAA5EF9D23288, ); name = VST; sourceTree = "<group>"; };
-               CD737733FC3EFC2B3A99B8C1 = {isa = PBXGroup; children = (
+               C02CF34EACB3A93904174BD4 = {isa = PBXGroup; children = (
                                        8676D218DB100E6B4636A82E, ); name = VST3; sourceTree = "<group>"; };
                F7173AE77C51F8BD4B4476AC = {isa = PBXGroup; children = (
                                        F1C57B1BE7D3A85714FB7C7A,
                                        F2D5F877258DB2BBF0433F23,
-                                       A8BAB3F628FDD2F723B11AF5,
-                                       48CA15F7102E796E2AD6058D,
-                                       50034CFA00470A07703FD97C,
-                                       0DA9BEC29F87A7F4440AA21A,
-                                       CD737733FC3EFC2B3A99B8C1,
+                                       1DDAAEC5B6DB8099FC652515,
+                                       ABE3EC02D9B5D528025BF690,
+                                       AAB881B99070695DB74EB217,
+                                       D78074DEDA44278DDA6376E6,
+                                       C02CF34EACB3A93904174BD4,
                                        B5F601E64CCEDC477481A4ED,
                                        BBBE3DABDB9284A6397CE7B8,
                                        FEDE864FABF0E3C4883CF664,
+                                       2BB3D82DA20E11064A181C9F,
                                        A9D38AF307DF9AD3D7E01502,
                                        4544225B1B0BC9D00BA328C0,
                                        03B89FFF7FBE455F753317FB,
                                        F1A0F0881D3C62C8E705120E,
                                        EDFE3B976573F01C8D3AA486,
                                        9D1C58BBAA0B7F70D6EB7724,
-                                       E13512F9451169A200CA63BF,
-                                       BF909DFBC9B899C6119F556B, ); name = Resources; sourceTree = "<group>"; };
+                                       E13512F9451169A200CA63BF, ); name = Resources; sourceTree = "<group>"; };
                00DE399BF0EF1D2BB5C99DF6 = {isa = PBXGroup; children = (
                                        71B73129FAEF3B7CB3FF6993,
                                        9D6BD8DE6FC16E28FE2169F0,
                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,
                                        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 = (
                                        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 = (
                                        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; };
                                        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 = (
index 26db43e03a7fd5aa5e97fffa46ce65c00fcb7b92..3169ab027f3ed83cf2329bf9acf916d5c6b1fc23 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index a5dcf34fb0c264fda211f08b241d8670b703ac4f..d5c5414b6e79f24d3fd3741b2e6bef58d74fa8c9 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index fc250e7772a879c95a22096ed6ca2ed63b365c7d..623d778753649d851074e0570588a503f1be10dd 100644 (file)
@@ -8,7 +8,7 @@
               pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"\r
               pluginSilenceInIsSilenceOut="1" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="GainPlugInAU" pluginRTASCategory="" aaxIdentifier="com.ROLI.GainPlugIn"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
               pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="sXaVAU" name="GainPlugIn">\r
     <GROUP id="{57500C1B-EA6F-4A79-EE51-1D02CA8A8350}" name="Source">\r
index fb02c044c43ac8f5d9d8bda5881c835d33952e48..f35830513da2b2512a0596c1ec010c6578e60666 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      ""\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'Gain'\r
+ #define JucePlugin_PluginCode             0x4761696e // 'Gain'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                0\r
index 38865926579e0764c75ddeec0b7dcde241c496dc..905ef5316f4b59116fe4bcfd31564e0b94335c91 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        0D4AA39D67CF9EB2B8FC06C9,
                                        4B4395FD0B981840C14E2344, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                EC8818482FE69DEA2472407C = {isa = PBXGroup; children = (
+                                       8F929BB1E10DD57C1056FF50,
                                        069622CB01111075080B6F60, ); name = AAX; sourceTree = "<group>"; };
                93B4691809E49A377D666871 = {isa = PBXGroup; children = (
                                        AA6B7C4CCA49273A0A082DD0,
                                        75300D231C75A269DD7D523F, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                7B934098FF9E066D257F3FC8 = {isa = PBXGroup; children = (
                                        93B4691809E49A377D666871,
-                                       868CB112CC3DC2F9ABBB8480,
                                        5A56163B25252D8E74389F96,
                                        836EAC1C5D126C6C8907E8C7,
-                                       675627DA901E329524A4B7CD,
-                                       F06745DFADC49CA1C3D5C964, ); name = AU; sourceTree = "<group>"; };
-               F28D61A1E7F58403483E15BA = {isa = PBXGroup; children = (
+                                       675627DA901E329524A4B7CD, ); name = AU; sourceTree = "<group>"; };
+               B034C01D71A8349088379345 = {isa = PBXGroup; children = (
                                        1DDD52E2562F45C7BF44E3BA,
                                        86FD2BEB554C25724A2AF813,
                                        E8F14A4246A337084B54E9C1,
                                        6E9CF164968692ECBF14BFA4,
                                        A99BE51ABD7D9EC4B325A59C,
                                        3DC291F8A448B57C4E7B85C9, ); name = RTAS; sourceTree = "<group>"; };
-               5BFF3A02016001970CDD81AC = {isa = PBXGroup; children = (
+               F4395C66021B50FE5AAB303C = {isa = PBXGroup; children = (
                                        CE7AB9CEBC2AD27B236A69F8,
                                        8379A87D62F44DFFC9366AD6, ); name = Standalone; sourceTree = "<group>"; };
-               506B96F755E66EF451C5D0F0 = {isa = PBXGroup; children = (
+               B973D84EF8EAD532ECB42F83 = {isa = PBXGroup; children = (
                                        9407A9BBA5CC55FAB981363F,
                                        1B468DBA17F78A4C46EFDB34,
                                        8BC913A5669953BFE5A456F6,
                                        CC1F87E59205712A0B2B08D5,
                                        EE10601535426EBE973755EE,
                                        45A7DB93A834F903CFB76794, ); name = utility; sourceTree = "<group>"; };
-               038E461CCD00BE2C0FFB4060 = {isa = PBXGroup; children = (
+               794BD365073742451788E5DF = {isa = PBXGroup; children = (
                                        21F7313455725884DEC213E7,
                                        F7D1FD08E57CD55F824DB44D, ); name = VST; sourceTree = "<group>"; };
-               CC2DA37A9DF73AE3068DDFB6 = {isa = PBXGroup; children = (
+               27252EE648860860662C12D6 = {isa = PBXGroup; children = (
                                        A9BFA5468698DC8F32062A9B, ); name = VST3; sourceTree = "<group>"; };
                B7199B2DD8BEEA7DBC08C672 = {isa = PBXGroup; children = (
                                        EC8818482FE69DEA2472407C,
                                        7B934098FF9E066D257F3FC8,
-                                       F28D61A1E7F58403483E15BA,
-                                       5BFF3A02016001970CDD81AC,
-                                       506B96F755E66EF451C5D0F0,
-                                       038E461CCD00BE2C0FFB4060,
-                                       CC2DA37A9DF73AE3068DDFB6,
+                                       B034C01D71A8349088379345,
+                                       F4395C66021B50FE5AAB303C,
+                                       B973D84EF8EAD532ECB42F83,
+                                       794BD365073742451788E5DF,
+                                       27252EE648860860662C12D6,
                                        04DAC3B6E82E983D25C6700E,
                                        C6765BF98421489E663C9713,
                                        AC1D5EC23242A02FFBB90928,
+                                       662205D63DB6B428A86C4E88,
                                        D1D5978F5EE20BB506361B3A,
                                        1CEDDCD15AC89113C91DB85D,
                                        63219087202573D0D10EF3DE,
                                        641C08407D49F28BD9FDB843,
                                        3B0847349353DE99EB99252B,
                                        E9105E2E5E237EC32F79DFDF,
-                                       8F6829961A0F50B8265BD9CB,
-                                       47C8050DE3ABBEC6BEC74B2F, ); name = Resources; sourceTree = "<group>"; };
+                                       8F6829961A0F50B8265BD9CB, ); name = Resources; sourceTree = "<group>"; };
                649BBC267932DD53D319C8C1 = {isa = PBXGroup; children = (
                                        918ECC9726F9792AEA2BF389,
                                        759F7DE2DC579FE827D3048E,
                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,
                                        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 = (
                                        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 = (
                                        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; };
                                        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 = (
index ce7ac2d3401dc0694d3f6ac74dde6a2ae9ca7d3f..fbc1e08080bae1787f905a84541598dc6530c78b 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index 11973d0671af665cee6395bbd7cf4f36de6d4863..71829f4230e12050b0e794ef3ea7ec23b30789d3 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index f728486e93a945d088ea9e3a077c0695e723fa26..f66afbd7acfb535f212221ba7e5c1210c2b31617 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      "info@juce.com"\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'MoSy'\r
+ #define JucePlugin_PluginCode             0x4d6f5379 // 'MoSy'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                1\r
index 6c4bd90d2b7006c21538e0f2bb82fb4c81499df2..987b41fa743953609850ca5447aee12cd84575ba 100644 (file)
@@ -9,7 +9,7 @@
               pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="MultiOutSynthAU" pluginRTASCategory=""\r
               aaxIdentifier="com.ROLI.MultiOutSynth" pluginAAXCategory="AAX_ePlugInCategory_SWGenerators"\r
-              jucerVersion="4.2.1" companyName="ROLI Ltd." companyWebsite="www.roli.com"\r
+              jucerVersion="4.2.3" companyName="ROLI Ltd." companyWebsite="www.roli.com"\r
               companyEmail="info@juce.com" pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="uGSDhi" name="MultiOutSynth">\r
     <GROUP id="{78464AFF-72EB-5BDD-4FD3-6C8C6CF5DFA3}" name="Source">\r
index ada4f342c6830cbbb27cc1d38da53cc370dcadbe..66055274a087e0bf25975ba0f9d784f05b94a169 100644 (file)
@@ -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; };
                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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        5BB1BBCB34B72DCE9B16B695,
                                        259860F50BF88025C9451A37, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                C87C608E9A5C5E6E7E794076 = {isa = PBXGroup; children = (
+                                       86691FA1B2CDD3570ABEA9C7,
                                        218937DFF1E643C7E9392D3D, ); name = AAX; sourceTree = "<group>"; };
                0F13F4CD7D902B9D2DA69DC9 = {isa = PBXGroup; children = (
                                        E9A6A98219D0E4514484593D,
                                        F899FD17F2789DA5C2BC257A, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                3D494EE356FF362ACDC1098E = {isa = PBXGroup; children = (
                                        0F13F4CD7D902B9D2DA69DC9,
-                                       69D40DB250FC6775EDBCCC5B,
                                        3105E167622313C70055B903,
                                        CB425D61E072DED92F6CAC85,
-                                       C6C096547CAD0C12FA4746CF,
-                                       78AF8E4090DF691FA058374D, ); name = AU; sourceTree = "<group>"; };
-               7188C9AEA767393C223A5803 = {isa = PBXGroup; children = (
+                                       C6C096547CAD0C12FA4746CF, ); name = AU; sourceTree = "<group>"; };
+               5A8AB44A44CEA32DC33D5765 = {isa = PBXGroup; children = (
                                        F4E8427587734D0D2B94F4D8,
                                        E09DC8AF27C6E40AB436E821,
                                        6033F6DD0B905B8819C115E2,
                                        F8AB7D10F5C9ABF34829AE8F,
                                        F785317A2BB8414F5D8E2813,
                                        D0A3F2265D323BB3F90F3DD5, ); name = RTAS; sourceTree = "<group>"; };
-               C681F67747E80C4D05C41413 = {isa = PBXGroup; children = (
+               A0C36FF148057D22D568BE59 = {isa = PBXGroup; children = (
                                        F4D616BD3FAFE9587EC29FC6,
                                        5202ABFCC92AA0AFBC9400BE, ); name = Standalone; sourceTree = "<group>"; };
-               5800B1C18680BF3EA8806892 = {isa = PBXGroup; children = (
+               3AE05782CAEEEB1F04B31F1A = {isa = PBXGroup; children = (
                                        210E0DDAE66818EF2B278274,
                                        94F3D0138EBB7EB31E15940C,
                                        F4C02954B36F8FCE5D4E647C,
                                        A29D254460762F8F6990D54C,
                                        B9A21AE64CC4B86FC1F67061,
                                        F35CA755BCEF635E1D3A905C, ); name = utility; sourceTree = "<group>"; };
-               4083DD4A6818D524406ECDF6 = {isa = PBXGroup; children = (
+               CBE8572BAED059334FB2FDF2 = {isa = PBXGroup; children = (
                                        906428E1A9963444AF1B0D60,
                                        69A29D8420DB0B53507E223D, ); name = VST; sourceTree = "<group>"; };
-               430F3673E2829D691E5A9ECF = {isa = PBXGroup; children = (
+               2CFD285766D4639C6B7C7457 = {isa = PBXGroup; children = (
                                        CDE1B83C996A1861A93C93A7, ); name = VST3; sourceTree = "<group>"; };
                3935AB4CC6A0A44A4A93B7E8 = {isa = PBXGroup; children = (
                                        C87C608E9A5C5E6E7E794076,
                                        3D494EE356FF362ACDC1098E,
-                                       7188C9AEA767393C223A5803,
-                                       C681F67747E80C4D05C41413,
-                                       5800B1C18680BF3EA8806892,
-                                       4083DD4A6818D524406ECDF6,
-                                       430F3673E2829D691E5A9ECF,
+                                       5A8AB44A44CEA32DC33D5765,
+                                       A0C36FF148057D22D568BE59,
+                                       3AE05782CAEEEB1F04B31F1A,
+                                       CBE8572BAED059334FB2FDF2,
+                                       2CFD285766D4639C6B7C7457,
                                        163F8CC7509513B483860103,
                                        AF02EDDBD4B4B8081DC18DA4,
                                        9E2841D274BDF096C1567AA0,
+                                       F9AD652235B91EB0693AB186,
                                        68810A5E034BC83F99EFE3B9,
                                        B7CEA623FCCB463BF8058A7F,
                                        9771DD4915BE1789A7993E69,
                                        BCC02F39B2F24479D8F6DB50,
                                        D30F58A3C82A7C61E6768EBE,
                                        44AA2CDFC06F2E27F3BD6313,
-                                       7A6A889A32581FBE73645356,
-                                       12C24C2237E0F23FDCCCE953, ); name = Resources; sourceTree = "<group>"; };
+                                       7A6A889A32581FBE73645356, ); name = Resources; sourceTree = "<group>"; };
                2D45B9382F864E0FC39A7D86 = {isa = PBXGroup; children = (
                                        EE004DC5369648F9F4F967B5,
                                        943B88ECAC8C127556319A56,
                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,
                                        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 = (
                                        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 = (
                                        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; };
                                        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 = (
index c2fc73b35a6b6e0fd2cbba37ed2f644e6c2f4056..2205dff4ecbc47a86684a41c72b6d8462a0f644d 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index 02a65ab3f64d7c54eceeca37756d850bce80341a..8621d761c3ff5065d6bb86f980be7f467bcaf641 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index 943d98eeffaa0cff39d486f84f482ae5b05f3a84..4cefb869f8c0422c7975c3b5dbbfdd5b8b4ad6d4 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      ""\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'Nois'\r
+ #define JucePlugin_PluginCode             0x4e6f6973 // 'Nois'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                0\r
index 0862364014892b701d055650193d25935282d5c9..ef3653ceaf9f49269f1a222c7af47303681328d4 100644 (file)
@@ -8,7 +8,7 @@
               pluginIsSynth="0" pluginWantsMidiIn="0" pluginProducesMidiOut="0"\r
               pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0"\r
               pluginAUExportPrefix="NoiseGateAU" pluginRTASCategory="" aaxIdentifier="com.roli.NoiseGate"\r
-              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.1"\r
+              pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="4.2.3"\r
               pluginIsMidiEffectPlugin="0" buildAUv3="0">\r
   <MAINGROUP id="FVYuyg" name="NoiseGate">\r
     <GROUP id="{6EB662B0-ED81-2504-8B90-DCBFA5675DFC}" name="Source">\r
index 8575d2a08429e8a126684800250d5ce7d7afb8e6..f3d05d2d5bc715f5114237c0862b5d2837239eeb 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   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\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   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\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   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 \r
index 49193e43b78166681a148f0f0d5c8dbad777ba50..3a84dead66f3ca6cec2784cf5dfaaacbc9727f9c 100644 (file)
@@ -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"; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        35B628AB8DFBC44E9BBF1EF9,
                                        907ECB8961B34F538328C66D, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                B03491D4B8689C8544B25B87 = {isa = PBXGroup; children = (
+                                       8EE2300EB5893E6FE4447464,
                                        4B133B1F9874EBA8953DCDF9, ); name = AAX; sourceTree = "<group>"; };
                DA59CA30765E869649A5C076 = {isa = PBXGroup; children = (
                                        458D73FCC89935898F0D2C23,
                                        9497F6127D98FC93F698D42F, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                682B81CC505D8F57DEA7E0AC = {isa = PBXGroup; children = (
                                        DA59CA30765E869649A5C076,
-                                       A120FD8A1529CD1910D93F52,
                                        E8154A3245B28F12461708E8,
                                        7BD189FD9F797A43D5818C6A,
-                                       3A925CFFB7F60920C14EC144,
-                                       0ED2BEA90D9AB8F53ABAC23F, ); name = AU; sourceTree = "<group>"; };
-               F780A21E1C3DA3D40B592D7A = {isa = PBXGroup; children = (
+                                       3A925CFFB7F60920C14EC144, ); name = AU; sourceTree = "<group>"; };
+               E314FF34EAECD51445016614 = {isa = PBXGroup; children = (
                                        5583A45CA7C609741BB8B9EF,
                                        55DFDE807E321ABD1E879E41,
                                        AB04D06155A5E52B0658F3D6,
                                        7D2CA0CEB4019C90AE75474C,
                                        C52ED1AAE029660B7F7E195A,
                                        283ADB95E9375730B1389880, ); name = RTAS; sourceTree = "<group>"; };
-               D67F6C60D18A07F957783FCA = {isa = PBXGroup; children = (
+               18C29C50CF51AC97F9938ADF = {isa = PBXGroup; children = (
                                        8D7431A21F329A0623106F9F,
                                        F468166F5B1642808084C964, ); name = Standalone; sourceTree = "<group>"; };
-               FAD31EA8ACFB57F726B6B00A = {isa = PBXGroup; children = (
+               0B1A4F8E5F393124D0B107B5 = {isa = PBXGroup; children = (
                                        EDF3BB834AA5EA021B07F5FA,
                                        8E11074D4A9A023AE33D2777,
                                        377EE4F29DE0ECCB0B0F8EBD,
                                        ADCF8757250D34CD709BF18E,
                                        F6AE18B04CC3D2BB90189253,
                                        D7D538F79741F629EC0B174F, ); name = utility; sourceTree = "<group>"; };
-               CFB2A255E91D41F8C12E5150 = {isa = PBXGroup; children = (
+               2B8EF8A8BCA0AB75EDE7FB7A = {isa = PBXGroup; children = (
                                        8DC3D1402CD78E1E728A885C,
                                        897466367AE90A6757BD78AA, ); name = VST; sourceTree = "<group>"; };
-               B71E23C0ADB4B7F7D300A2B9 = {isa = PBXGroup; children = (
+               6BA032A25FA6EF715361DBA9 = {isa = PBXGroup; children = (
                                        C97229429AD64768E560F4AD, ); name = VST3; sourceTree = "<group>"; };
                3C13BDA7064F6A67ED81C57C = {isa = PBXGroup; children = (
                                        B03491D4B8689C8544B25B87,
                                        682B81CC505D8F57DEA7E0AC,
-                                       F780A21E1C3DA3D40B592D7A,
-                                       D67F6C60D18A07F957783FCA,
-                                       FAD31EA8ACFB57F726B6B00A,
-                                       CFB2A255E91D41F8C12E5150,
-                                       B71E23C0ADB4B7F7D300A2B9,
+                                       E314FF34EAECD51445016614,
+                                       18C29C50CF51AC97F9938ADF,
+                                       0B1A4F8E5F393124D0B107B5,
+                                       2B8EF8A8BCA0AB75EDE7FB7A,
+                                       6BA032A25FA6EF715361DBA9,
                                        764CC7C9098B8A13EE1E2BDD,
                                        5E4DECB460D73AB4F75A0807,
                                        98DEEE52698DC2DD0C22A537,
+                                       02FB9A6955DBBBEAC8BB16D8,
                                        02011069400D49AE29D3A8AA,
                                        C5AC6B7D92F08E36C6CC81D0,
                                        DC26D1CA02600B967A955667,
                                        3E67AEA9A0FD3291E8C1B486,
                                        F02875DC328E400B3141069D,
                                        19E1189C678E9189ECD11DEF,
-                                       7B09ECEA92A79A22173B9A1A,
-                                       A0BFEED17AF0E43A7401189C, ); name = Resources; sourceTree = "<group>"; };
+                                       7B09ECEA92A79A22173B9A1A, ); name = Resources; sourceTree = "<group>"; };
                18B9690A5C364D20F5C100E3 = {isa = PBXGroup; children = (
                                        52EEFA8ED8C29967F5A9E1EE,
                                        D8FC94038AF7B050BBADC027,
                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,
                                        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 = (
                                        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 = (
                                        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; };
                                        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 = (
index 3e3be5ef3cc4c39492a611e1ec5e7ed6c836464c..c143d079d7db157e98de554bd7acbba6ec1392e2 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index 406809752388419c53b532c9a3278a5a693b6ec9..d05b2cecea8890f4a1171c2cc82afdf825a7e327 100644 (file)
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index 4638b1794391191ac4656f414e94828b25d70f1d..ebad7119373b7234a6129f892a370f0b3ae826ab 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      ""\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'ROLI'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'Srrd'\r
+ #define JucePlugin_PluginCode             0x53727264 // 'Srrd'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                0\r
index 6537d202ba257a5a10aa285879d66d1c77cbe8ae..8c5852ce95643613c393171460f159ccd28ec5e1 100644 (file)
@@ -9,7 +9,7 @@
               pluginIsMidiEffectPlugin="0" pluginSilenceInIsSilenceOut="0"\r
               pluginEditorRequiresKeys="0" pluginAUExportPrefix="SurroundAU"\r
               pluginRTASCategory="" aaxIdentifier="com.ROLI.Surround" pluginAAXCategory="AAX_ePlugInCategory_Dynamics"\r
-              jucerVersion="4.2.1" buildAUv3="0">\r
+              jucerVersion="4.2.3" buildAUv3="0">\r
   <MAINGROUP id="dEAH7t" name="Surround">\r
     <GROUP id="{1CB41212-BD0E-AC71-15E8-C40AD59BD2EE}" name="Source">\r
       <FILE id="sLk2ic" name="SurroundProcessor.cpp" compile="1" resource="0"\r
index 124571b556ca3d52f3ab7f500508a45fd9735bab..18d927fd4a257a94fcdda7082d3c9fcf8dbd7e33 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="cgcxPd" name="SimpleFFTExample" projectType="guiapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.SimpleFFTExample" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1">\r
+              jucerVersion="4.2.3">\r
   <MAINGROUP id="rZCHr8" name="SimpleFFTExample">\r
     <GROUP id="{8DC23B3F-98AC-AB1C-B26A-E693AF2DF0D2}" name="Source">\r
       <FILE id="B1L62H" name="SpectrogramComponent.h" compile="0" resource="0"\r
index a715eff5e3925c10b53210d73ea6316f9842ac1b..9f9ab4d4fcb05542a6feec5dc7ed6cb1cfffcbf2 100644 (file)
@@ -56,7 +56,7 @@ public:
         g.fillAll (Colours::black);\r
 \r
         g.setOpacity (1.0f);\r
-        g.drawImageWithin (spectrogramImage, 0, 0, getWidth(), getHeight(), RectanglePlacement::stretchToFit);\r
+        g.drawImage (spectrogramImage, getLocalBounds().toFloat());\r
     }\r
 \r
     void timerCallback() override\r
index 641c9961f806d09331b6e23dc742aea884340128..fa163ac65772351f551499c992e5cf147188fe03 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 614903a91b46abb6382ece67fa993ea59cf56c4c..069adb20b7f463e2ef16290a263f271d7ee772a1 100644 (file)
@@ -35,7 +35,7 @@
         <key>factoryFunction</key>\r
         <string>JuceDemoProjectAUFactory</string>\r
         <key>manufacturer</key>\r
-        <string>Roli</string>\r
+        <string>ROLI</string>\r
         <key>type</key>\r
         <string>aumf</string>\r
         <key>subtype</key>\r
index 4af590885e4f79aa98f78dd776f82ee2d9ef1be5..09ea0decdba8669ebf5b859bea3887925831926c 100644 (file)
                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; };
                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"; };
                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"; };
                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"; };
                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"; };
                                        0687D10EFBEEEC129BC807D3,
                                        2AA92DC1171DAF0BA4BB0E63, ); name = "juce_audio_formats"; sourceTree = "<group>"; };
                B663729F88A22F9325C3C9D0 = {isa = PBXGroup; children = (
+                                       C83FE0526DC2E3078BCAFC5D,
                                        1BAAB47A9C5B1D76D28FA282, ); name = AAX; sourceTree = "<group>"; };
                35F768B6427149AF0129BB8C = {isa = PBXGroup; children = (
                                        3AA0960DF09414DBA0A2255B,
                                        49386674C08BAD7864966166, ); name = CoreAudioUtilityClasses; sourceTree = "<group>"; };
                E96D0837CDD1CE8B768E4077 = {isa = PBXGroup; children = (
                                        35F768B6427149AF0129BB8C,
-                                       20BA6A1962016CD285EB30F2,
                                        3F16A54F45ED278001F4CA09,
                                        EE149F9075819C0132879D4C,
-                                       833921AD05E4BAF484FC7749,
-                                       BD5793B7DA291D1C1B991DDC, ); name = AU; sourceTree = "<group>"; };
-               B002DD058A40E158192BAEE5 = {isa = PBXGroup; children = (
+                                       833921AD05E4BAF484FC7749, ); name = AU; sourceTree = "<group>"; };
+               10721EE9E840AA7BC5F61764 = {isa = PBXGroup; children = (
                                        CD61A73C6A090CD85EC57354,
                                        9C9DEB7FB75C42C4F47AF999,
                                        F7454AD16EE05969CCF5FD7C,
                                        3755479207D218969425F91F,
                                        17EC828C9226E13D4EF03E85,
                                        1D4AFBEC703C6F373B292D9A, ); name = RTAS; sourceTree = "<group>"; };
-               69EEEA6D294205148B1E268A = {isa = PBXGroup; children = (
+               5B3F9588F32C646D12DE0ACE = {isa = PBXGroup; children = (
                                        12D74EEE2F7F5D8E17C746EA,
                                        A13CE6DC3E31158D49337C8F, ); name = Standalone; sourceTree = "<group>"; };
-               18E6563C4672B4D77223D259 = {isa = PBXGroup; children = (
+               0356C38F32660D46D5EE6554 = {isa = PBXGroup; children = (
                                        7B870EE6D43B984CADE69C28,
                                        94AA9AF4939F914AD00CEE1F,
                                        58CEA1474B2E77B7287D735B,
                                        841B6783475386C5471CA039,
                                        8C0D1A1E000E47D09B771963,
                                        7E588E8934AFA6EA5C58C133, ); name = utility; sourceTree = "<group>"; };
-               0EB0BD7272CEB2232D7F7BD2 = {isa = PBXGroup; children = (
+               0720EF699B01F6EB0A2C4E3A = {isa = PBXGroup; children = (
                                        1E496F7BF3B3C59E5ECACCDE,
                                        8EB324480D60B3E3A81541E5, ); name = VST; sourceTree = "<group>"; };
-               DBCC2B2AF371A45272E6FA21 = {isa = PBXGroup; children = (
+               E090AC75C454B0E281AB5C5A = {isa = PBXGroup; children = (
                                        6CEFF94C7852DB3BFA5E29EB, ); name = VST3; sourceTree = "<group>"; };
                09C66663E0BF7CD43C73C7E6 = {isa = PBXGroup; children = (
                                        B663729F88A22F9325C3C9D0,
                                        E96D0837CDD1CE8B768E4077,
-                                       B002DD058A40E158192BAEE5,
-                                       69EEEA6D294205148B1E268A,
-                                       18E6563C4672B4D77223D259,
-                                       0EB0BD7272CEB2232D7F7BD2,
-                                       DBCC2B2AF371A45272E6FA21,
+                                       10721EE9E840AA7BC5F61764,
+                                       5B3F9588F32C646D12DE0ACE,
+                                       0356C38F32660D46D5EE6554,
+                                       0720EF699B01F6EB0A2C4E3A,
+                                       E090AC75C454B0E281AB5C5A,
                                        E65E231978B796AA7868DC4A,
                                        BB2CD1B0323135818D0AB47F,
                                        2A6E2BC2F602472C0FC70E68,
+                                       550FAA1B7314518C5237CB46,
                                        CB93B445C37845467DFFA948,
                                        D79CAC82B4607BE7DEED1045,
                                        DFB0C0515543105C1C262D1F,
                                        12E665A9E9A675668AF160A9,
                                        CF99F55660DC79DAE3D0D1A2,
                                        8B67A16CB449160267AA05BB,
-                                       0926E36205F4D676343AB6E7,
-                                       F5E9ED24FCF950C2B09ED67C, ); name = Resources; sourceTree = "<group>"; };
+                                       0926E36205F4D676343AB6E7, ); name = Resources; sourceTree = "<group>"; };
                7EA0AEAFB626CDF5E0038ED5 = {isa = PBXGroup; children = (
                                        537D65EF3BBBDFC4651D389D,
                                        A206765795252391D3F60EA4,
                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,
                                        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 = (
                                        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 = (
                                        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; };
index 36e6393b228acfc2f21129b1de511bcf43436287..734d9f99afd7037a7a11b9dbeecf7ffe38f116a0 100644 (file)
     <ClInclude Include="..\..\..\..\modules\juce_audio_formats\sampler\juce_Sampler.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h"/>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBaseHelper.h"/>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBuffer.h"/>\r
     <None Include="..\..\..\..\modules\juce_audio_formats\codecs\flac\Flac Licence.txt"/>\r
     <None Include="..\..\..\..\modules\juce_audio_formats\codecs\oggvorbis\Ogg Vorbis Licence.txt"/>\r
     <None Include="..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r"/>\r
-    <None Include="..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r"/>\r
+    <None Include="..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r"/>\r
+    <None Include="..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r"/>\r
     <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/>\r
     <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/>\r
   </ItemGroup>\r
index dd30b79870b94c6b944a2b3636555898630910c4..0c2e50c0ee5f4f82e7c327d489053807ba4e349b 100644 (file)
     <ClInclude Include="..\..\..\..\modules\juce_audio_formats\juce_audio_formats.h">\r
       <Filter>Juce Modules\juce_audio_formats</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AAX\juce_AAX_Modifier_Injector.h">\r
+      <Filter>Juce Modules\juce_audio_plugin_client\AAX</Filter>\r
+    </ClInclude>\r
     <ClInclude Include="..\..\..\..\modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses\AUBase.h">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU\CoreAudioUtilityClasses</Filter>\r
     </ClInclude>\r
     <None Include="..\..\..\..\modules\juce_audio_plugin_client\AU\AUResources.r">\r
       <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
     </None>\r
-    <None Include="..\..\..\..\modules\juce_audio_plugin_client\AU\juce_RezResources_AU.r">\r
-      <Filter>Juce Modules\juce_audio_plugin_client\AU</Filter>\r
+    <None Include="..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_AU.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
+    </None>\r
+    <None Include="..\..\..\..\modules\juce_audio_plugin_client\juce_audio_plugin_client_RTAS.r">\r
+      <Filter>Juce Modules\juce_audio_plugin_client</Filter>\r
     </None>\r
     <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt">\r
       <Filter>Juce Modules\juce_graphics\image_formats\jpglib</Filter>\r
index 78394d16587180de890a945619075ad008f68410..a2dce7b745fea1f3ff5d60749cb5bb411a975b0f 100644 (file)
@@ -3,12 +3,12 @@
 <JUCERPROJECT id="0nRd9LLGO" name="JuceDemoPlugin" projectType="audioplug"\r
               version="1.0.0" juceLinkage="amalg_multi" buildVST="1" buildRTAS="0"\r
               buildAU="1" pluginName="Juce Demo Plugin" pluginDesc="Juce Demo Plugin"\r
-              pluginManufacturer="ROLI Ltd." pluginManufacturerCode="Roli"\r
+              pluginManufacturer="ROLI Ltd." pluginManufacturerCode="ROLI"\r
               pluginCode="Jcdm" pluginChannelConfigs="{1, 1}, {2, 2}" pluginIsSynth="0"\r
               pluginWantsMidiIn="1" pluginProducesMidiOut="1" pluginSilenceInIsSilenceOut="0"\r
               pluginTailLength="0" pluginEditorRequiresKeys="1" pluginAUExportPrefix="JuceDemoProjectAU"\r
               pluginAUViewClass="JuceDemoProjectAU_V1" pluginRTASCategory=""\r
-              bundleIdentifier="com.juce.JuceDemoPlugin" jucerVersion="4.2.1"\r
+              bundleIdentifier="com.juce.JuceDemoPlugin" jucerVersion="4.2.3"\r
               companyName="ROLI Ltd." aaxIdentifier="com.yourcompany.JuceDemoPlugin"\r
               buildAAX="0" pluginAAXCategory="AAX_ePlugInCategory_Dynamics"\r
               includeBinaryInAppConfig="1" buildVST3="1" pluginManufacturerEmail="support@yourcompany.com"\r
index f7f9e325e953e2c2871c0a9e0c24a5327d400d86..08cf3a60792a8950f7306f5816904249ecc58f51 100644 (file)
  //#define JUCE_USE_WINDOWS_MEDIA_FORMAT\r
 #endif\r
 \r
+//==============================================================================\r
+// juce_audio_plugin_client flags:\r
+\r
+#ifndef    JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ //#define JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+#endif\r
+\r
 //==============================================================================\r
 // juce_audio_processors flags:\r
 \r
  #define JucePlugin_ManufacturerEmail      "info@juce.com"\r
 #endif\r
 #ifndef  JucePlugin_ManufacturerCode\r
- #define JucePlugin_ManufacturerCode       'Roli'\r
+ #define JucePlugin_ManufacturerCode       0x524f4c49 // 'ROLI'\r
 #endif\r
 #ifndef  JucePlugin_PluginCode\r
- #define JucePlugin_PluginCode             'Jcdm'\r
+ #define JucePlugin_PluginCode             0x4a63646d // 'Jcdm'\r
 #endif\r
 #ifndef  JucePlugin_IsSynth\r
  #define JucePlugin_IsSynth                0\r
index 091d5aa781057950ef80145fd217cc4ebb8bc73e..463a603b7856a8090dbadc273bd6b244be024d5a 100644 (file)
@@ -82,9 +82,8 @@ JuceDemoPluginAudioProcessorEditor::JuceDemoPluginAudioProcessorEditor (JuceDemo
     timecodeDisplayLabel.setColour (Label::textColourId, Colours::blue);\r
     timecodeDisplayLabel.setFont (Font (Font::getDefaultMonospacedFontName(), 15.0f, Font::plain));\r
 \r
-    // add the triangular resizer component for the bottom-right of the UI\r
-    addAndMakeVisible (resizer = new ResizableCornerComponent (this, &resizeLimits));\r
-    resizeLimits.setSizeLimits (150, 150, 800, 300);\r
+    // set resize limits for this plug-in\r
+    setResizeLimits (400, 200, 800, 300);\r
 \r
     // set our component's initial size to be the last one that was stored in the filter's settings\r
     setSize (owner.lastUIWidth,\r
@@ -120,8 +119,6 @@ void JuceDemoPluginAudioProcessorEditor::resized()
     gainSlider->setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth() / 2)));\r
     delaySlider->setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth())));\r
 \r
-    resizer->setBounds (getWidth() - 16, getHeight() - 16, 16, 16);\r
-\r
     getProcessor().lastUIWidth = getWidth();\r
     getProcessor().lastUIHeight = getHeight();\r
 }\r
@@ -136,14 +133,14 @@ void JuceDemoPluginAudioProcessorEditor::timerCallback()
 // quick-and-dirty function to format a timecode string\r
 static String timeToTimecodeString (double seconds)\r
 {\r
-    const int millisecs = roundToInt (std::abs (seconds * 1000.0));\r
+    const int millisecs = roundToInt (seconds * 1000.0);\r
+    const int absMillisecs = std::abs (millisecs);\r
 \r
-    return String::formatted ("%s%02d:%02d:%02d.%03d",\r
-                              seconds < 0 ? "-" : "",\r
+    return String::formatted ("%02d:%02d:%02d.%03d",\r
                               millisecs / 360000,\r
-                              (millisecs / 60000) % 60,\r
-                              (millisecs / 1000) % 60,\r
-                              millisecs % 1000);\r
+                              (absMillisecs / 60000) % 60,\r
+                              (absMillisecs / 1000) % 60,\r
+                              absMillisecs % 1000);\r
 }\r
 \r
 // quick-and-dirty function to format a bars/beats string\r
@@ -165,25 +162,20 @@ static String quarterNotePositionToBarsBeatsString (double quarterNotes, int num
 // Updates the text in our position label.\r
 void JuceDemoPluginAudioProcessorEditor::updateTimecodeDisplay (AudioPlayHead::CurrentPositionInfo pos)\r
 {\r
-    if (lastDisplayedPosition != pos)\r
-    {\r
-        lastDisplayedPosition = pos;\r
-\r
-        MemoryOutputStream displayText;\r
-\r
-        displayText << "[" << SystemStats::getJUCEVersion() << "]   "\r
-                    << String (pos.bpm, 2) << " bpm, "\r
-                    << pos.timeSigNumerator << '/' << pos.timeSigDenominator\r
-                    << "  -  " << timeToTimecodeString (pos.timeInSeconds)\r
-                    << "  -  " << quarterNotePositionToBarsBeatsString (pos.ppqPosition,\r
-                                                                        pos.timeSigNumerator,\r
-                                                                        pos.timeSigDenominator);\r
-\r
-        if (pos.isRecording)\r
-            displayText << "  (recording)";\r
-        else if (pos.isPlaying)\r
-            displayText << "  (playing)";\r
-\r
-        timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification);\r
-    }\r
+    MemoryOutputStream displayText;\r
+\r
+    displayText << "[" << SystemStats::getJUCEVersion() << "]   "\r
+                << String (pos.bpm, 2) << " bpm, "\r
+                << pos.timeSigNumerator << '/' << pos.timeSigDenominator\r
+                << "  -  " << timeToTimecodeString (pos.timeInSeconds)\r
+                << "  -  " << quarterNotePositionToBarsBeatsString (pos.ppqPosition,\r
+                                                                    pos.timeSigNumerator,\r
+                                                                    pos.timeSigDenominator);\r
+\r
+    if (pos.isRecording)\r
+        displayText << "  (recording)";\r
+    else if (pos.isPlaying)\r
+        displayText << "  (playing)";\r
+\r
+    timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification);\r
 }\r
index d62250db308f290a24eaa087c8b003ae0e57d843..5ba46d5bf0dd262e6765c7a848481d42e29562e2 100644 (file)
@@ -36,10 +36,6 @@ private:
     MidiKeyboardComponent midiKeyboard;\r
     Label timecodeDisplayLabel, gainLabel, delayLabel;\r
     ScopedPointer<ParameterSlider> gainSlider, delaySlider;\r
-    ScopedPointer<ResizableCornerComponent> resizer;\r
-    ComponentBoundsConstrainer resizeLimits;\r
-\r
-    AudioPlayHead::CurrentPositionInfo lastDisplayedPosition;\r
 \r
     //==============================================================================\r
     JuceDemoPluginAudioProcessor& getProcessor() const\r
index b045d438ab2b413290edcd4ceb3f7f482f5e36e4..5a16b9edca838130a845eb0199ddd8856c2eec6d 100644 (file)
@@ -344,8 +344,8 @@ void JuceDemoPluginAudioProcessor::setStateInformation (const void* data, int si
         if (xmlState->hasTagName ("MYPLUGINSETTINGS"))\r
         {\r
             // ok, now pull out our last window size..\r
-            lastUIWidth  = xmlState->getIntAttribute ("uiWidth", lastUIWidth);\r
-            lastUIHeight = xmlState->getIntAttribute ("uiHeight", lastUIHeight);\r
+            lastUIWidth  = jmax (xmlState->getIntAttribute ("uiWidth", lastUIWidth), 400);\r
+            lastUIHeight = jmax (xmlState->getIntAttribute ("uiHeight", lastUIHeight), 200);\r
 \r
             // Now reload our parameters..\r
             for (int i = 0; i < getNumParameters(); ++i)\r
index b9dac0e9aa4da3e3a6da6e2e40f6815f69fb0c0f..2257e6f5579dfef19f63106fbb3ade13cee86583 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index ca29861901113903ee6025edcb29de1df83e820e..c30688234118bc416093bcfdbb86dbecfef91f37 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="NTe0XB0ij" name="Plugin Host" projectType="guiapp" version="1.0.0"\r
               juceFolder="../../../juce" vstFolderMac="~/SDKs/vstsdk2.4" vstFolderPC="c:\SDKs\vstsdk2.4"\r
-              bundleIdentifier="com.roli.pluginhost" jucerVersion="4.2.1" companyName="ROLI Ltd."\r
+              bundleIdentifier="com.roli.pluginhost" jucerVersion="4.2.3" companyName="ROLI Ltd."\r
               includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="" rtasFolder="~/SDKs/PT_80_SDK"\r
index d15f4cabbdf27ee5b5bd152c3789f342144d90a2..c2df6eeda288552f17bcd99aa6000732b4359d4a 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="AKfc5m" name="AudioPerformanceTest" projectType="guiapp"\r
               version="1.0.0" bundleIdentifier="com.juce.AudioPerformanceTest"\r
-              includeBinaryInAppConfig="1" jucerVersion="4.2.1">\r
+              includeBinaryInAppConfig="1" jucerVersion="4.2.3">\r
   <MAINGROUP id="b1eVTe" name="AudioPerformanceTest">\r
     <GROUP id="{AB66118C-9D88-1C3A-D95C-42892D828E4B}" name="Source">\r
       <FILE id="SqGU9p" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 5aba42a17444f4716459950a44d4130cf9636a12..adb768928ee285dfdaee507a7a33c6d04277dc77 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index c98167ca4d73864a5cbda9d58fd0c9d0e4af7e41..dd33a82640a4a24ff1841d729046a0af81672685 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl \r
index 50cd38f8c2e0a759d2f990a374d56f867fbfba2e..86a8b55fb7eef125858d6755ba04c44371a35aeb 100644 (file)
@@ -33,9 +33,9 @@
     <key>CFBundleSignature</key>\r
     <string>????</string>\r
     <key>CFBundleShortVersionString</key>\r
-    <string>4.2.1</string>\r
+    <string>4.2.3</string>\r
     <key>CFBundleVersion</key>\r
-    <string>4.2.1</string>\r
+    <string>4.2.3</string>\r
     <key>NSHumanReadableCopyright</key>\r
     <string></string>\r
     <key>NSHighResolutionCapable</key>\r
index 4b31c6b80d4b606ef6f4a815a87feea4957ba518..ce66ba69abebaa06540b7fc42ff9a4d2c191c4c7 100644 (file)
                                        "_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;
                                        "_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)");
index 23d5a0125d611739b9752bc1bfb6408aed34adca..de6498d038293aff0c8736f14a15af3fd9b3c8a5 100644 (file)
@@ -58,7 +58,7 @@
       <Optimization>Disabled</Optimization>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <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)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
@@ -97,7 +97,7 @@
     <ClCompile>\r
       <Optimization>Full</Optimization>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
index 0cb9c207645898ddd12ee65a66f8cf2dfb559120..21778ece55917dc0d3c6db5a7c2ef64ba0239a3c 100644 (file)
@@ -7,16 +7,16 @@
 #include <windows.h>\r
 \r
 VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION  4,2,1,0\r
+FILEVERSION  4,2,3,0\r
 BEGIN\r
   BLOCK "StringFileInfo"\r
   BEGIN\r
     BLOCK "040904E4"\r
     BEGIN\r
       VALUE "FileDescription",  "Projucer\0"\r
-      VALUE "FileVersion",  "4.2.1\0"\r
+      VALUE "FileVersion",  "4.2.3\0"\r
       VALUE "ProductName",  "Projucer\0"\r
-      VALUE "ProductVersion",  "4.2.1\0"\r
+      VALUE "ProductVersion",  "4.2.3\0"\r
     END\r
   END\r
 \r
index 106889b36879e70b971c54924312bf4dde897ae2..59dc2eabbe109b99e31d7bc1594e8eec5c158c12 100644 (file)
@@ -58,7 +58,7 @@
       <Optimization>Disabled</Optimization>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <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)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
@@ -97,7 +97,7 @@
     <ClCompile>\r
       <Optimization>Full</Optimization>\r
       <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.1;JUCE_APP_VERSION_HEX=0x40201;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=4.2.3;JUCE_APP_VERSION_HEX=0x40203;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\r
       <RuntimeTypeInfo>true</RuntimeTypeInfo>\r
       <PrecompiledHeader/>\r
index 0cb9c207645898ddd12ee65a66f8cf2dfb559120..21778ece55917dc0d3c6db5a7c2ef64ba0239a3c 100644 (file)
@@ -7,16 +7,16 @@
 #include <windows.h>\r
 \r
 VS_VERSION_INFO VERSIONINFO\r
-FILEVERSION  4,2,1,0\r
+FILEVERSION  4,2,3,0\r
 BEGIN\r
   BLOCK "StringFileInfo"\r
   BEGIN\r
     BLOCK "040904E4"\r
     BEGIN\r
       VALUE "FileDescription",  "Projucer\0"\r
-      VALUE "FileVersion",  "4.2.1\0"\r
+      VALUE "FileVersion",  "4.2.3\0"\r
       VALUE "ProductName",  "Projucer\0"\r
-      VALUE "ProductVersion",  "4.2.1\0"\r
+      VALUE "ProductVersion",  "4.2.3\0"\r
     END\r
   END\r
 \r
index 1a71a18db4f061f55430dded2c74c10352591227..8db2f1c3a56f561208304f6c54f34b151666b296 100644 (file)
@@ -35,8 +35,8 @@
 namespace ProjectInfo\r
 {\r
     const char* const  projectName    = "Projucer";\r
-    const char* const  versionString  = "4.2.1";\r
-    const int          versionNumber  = 0x40201;\r
+    const char* const  versionString  = "4.2.3";\r
+    const int          versionNumber  = 0x40203;\r
 }\r
 #endif\r
 \r
index 9413a2c331724fc1c4407b05c82aa71b29d67b55..5fc7dd25ad9b36206df02a4be359e9237b7eefb3 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"\r
-              jucerVersion="4.2.1" version="4.2.1" bundleIdentifier="com.juce.theprojucer"\r
+              jucerVersion="4.2.3" version="4.2.3" bundleIdentifier="com.juce.theprojucer"\r
               defines="" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
index 185d0c776b8a5e5a66d42b41c52c2011a49735f7..f9cf4525aa4cab93d9385e529da924e870e45353 100644 (file)
@@ -30,48 +30,35 @@ public:
     {\r
         registerColour (TextButton::buttonColourId, "background (normal)", "bgColOff");\r
         registerColour (TextButton::buttonOnColourId, "background (on)", "bgColOn");\r
-        registerColour (TextButton::textColourOnId, "text colour (normal)", "textCol");\r
-        registerColour (TextButton::textColourOffId, "text colour (on)", "textColOn");\r
+        registerColour (TextButton::textColourOffId, "text colour (normal)", "textCol");\r
+        registerColour (TextButton::textColourOnId, "text colour (on)", "textColOn");\r
     }\r
 \r
     Component* createNewComponent (JucerDocument*)\r
     {\r
-        return new TextButton ("new button", String::empty);\r
+        return new TextButton ("new button", String());\r
     }\r
 \r
     void getEditableProperties (Component* component, JucerDocument& document, Array<PropertyComponent*>& props)\r
     {\r
         ButtonHandler::getEditableProperties (component, document, props);\r
-\r
         addColourProperties (component, document, props);\r
     }\r
 \r
     XmlElement* createXmlFor (Component* comp, const ComponentLayout* layout)\r
     {\r
-        XmlElement* e = ButtonHandler::createXmlFor (comp, layout);\r
-\r
-        //TextButton* tb = (TextButton*) comp;\r
-\r
-        return e;\r
+        return ButtonHandler::createXmlFor (comp, layout);\r
     }\r
 \r
     bool restoreFromXml (const XmlElement& xml, Component* comp, const ComponentLayout* layout)\r
     {\r
-        if (! ButtonHandler::restoreFromXml (xml, comp, layout))\r
-            return false;\r
-\r
-        //TextButton* tb = (TextButton*) comp;\r
-\r
-        return true;\r
+        return ButtonHandler::restoreFromXml (xml, comp, layout);\r
     }\r
 \r
     void fillInCreationCode (GeneratedCode& code, Component* component, const String& memberVariableName)\r
     {\r
         ButtonHandler::fillInCreationCode (code, component, memberVariableName);\r
 \r
-        //TextButton* const tb = dynamic_cast<TextButton*> (component);\r
-        //TextButton defaultButton (String::empty);\r
-\r
         String s;\r
 \r
         s << getColourIntialisationCode (component, memberVariableName)\r
index c174c8271800648252725255f448530ba30e011e..9f741b3e41a766231b6b2f5f981c1aadf57e2e50 100644 (file)
@@ -335,6 +335,9 @@ protected:
         Value shouldGenerateManifestValue()         { return getValue (Ids::generateManifest); }\r
         bool shouldGenerateManifest() const         { return config [Ids::generateManifest]; }\r
 \r
+        Value shouldLinkIncrementalValue()          { return getValue (Ids::enableIncrementalLinking); }\r
+        bool shouldLinkIncremental() const          { return config [Ids::enableIncrementalLinking]; }\r
+\r
         Value getWholeProgramOptValue()             { return getValue (Ids::wholeProgramOptimisation); }\r
         bool shouldDisableWholeProgramOpt() const   { return static_cast<int> (config [Ids::wholeProgramOptimisation]) > 0; }\r
 \r
@@ -399,6 +402,12 @@ protected:
                                                         StringArray (wpoNames), Array<var> (wpoValues, numElementsInArray (wpoValues))));\r
             }\r
 \r
+            {\r
+                props.add (new BooleanPropertyComponent (shouldLinkIncrementalValue(), "Incremental Linking", "Enable"),\r
+                           "Enable to avoid linking from scratch for every new build. "\r
+                           "Disable to ensure that your final release build does not contain padding or thunks.");\r
+            }\r
+\r
             if (! isDebug())\r
                 props.add (new BooleanPropertyComponent (shouldGenerateDebugSymbolsValue(), "Debug Symbols", "Force generation of debug symbols"));\r
 \r
@@ -1026,6 +1035,7 @@ protected:
 \r
             linker->setAttribute ("IgnoreDefaultLibraryNames", isDebug ? "libcmt.lib, msvcrt.lib" : "");\r
             linker->setAttribute ("GenerateDebugInformation", (isDebug || config.shouldGenerateDebugSymbols()) ? "true" : "false");\r
+            linker->setAttribute ("LinkIncremental", config.shouldLinkIncremental() ? "2" : "1");\r
             linker->setAttribute ("ProgramDatabaseFile", getIntDirFile (config, config.getOutputFilename (".pdb", true)));\r
             linker->setAttribute ("SubSystem", msvcIsWindowsSubsystem ? "2" : "1");\r
 \r
@@ -1073,6 +1083,8 @@ protected:
 \r
                 linker->setAttribute ("OutputFile", getOutDirFile (config, config.getOutputFilename (msvcTargetSuffix, false)));\r
                 linker->setAttribute ("IgnoreDefaultLibraryNames", isDebug ? "libcmt.lib, msvcrt.lib" : "");\r
+\r
+                linker->setAttribute ("LinkIncremental", config.shouldLinkIncremental() ? "2" : "1");\r
             }\r
             else\r
             {\r
@@ -1370,6 +1382,9 @@ protected:
             if (! (config.isDebug() || config.shouldDisableWholeProgramOpt()))\r
                 e->createNewChildElement ("WholeProgramOptimization")->addTextElement ("true");\r
 \r
+            if (config.shouldLinkIncremental())\r
+                e->createNewChildElement ("LinkIncremental")->addTextElement ("true");\r
+\r
             if (config.is64Bit())\r
                 e->createNewChildElement ("PlatformToolset")->addTextElement (getPlatformToolset());\r
         }\r
index 23c3b48d6f387bae410187e48189a55622df158b..632b520fce1e262ff0695efa449739899fbe3dae 100644 (file)
@@ -124,7 +124,7 @@ public:
     bool isOSX() const override                      { return ! iOS; }\r
     bool isiOS() const override                      { return iOS; }\r
 \r
-    bool supportsVST() const override                { return ! iOS; }\r
+    bool supportsVST() const override                { return true; }\r
     bool supportsVST3() const override               { return ! iOS; }\r
     bool supportsAAX() const override                { return ! iOS; }\r
     bool supportsRTAS() const override               { return ! iOS; }\r
@@ -1593,10 +1593,10 @@ private:
 \r
                 if (! projectType.isStaticLibrary() && target.type != Target::SharedCodeTarget)\r
                     target.addBuildPhase ("PBXFrameworksBuildPhase", target.frameworkIDs);\r
-\r
-                target.addShellScriptBuildPhase ("Post-build script", getPostBuildScript());\r
             }\r
 \r
+            target.addShellScriptBuildPhase ("Post-build script", getPostBuildScript());\r
+\r
             if (project.getProjectType().isAudioPlugin() && project.shouldBuildAUv3().getValue()\r
                 && project.shouldBuildStandalone().getValue() && target.type == Target::StandalonePlugIn)\r
                 embedAppExtension();\r
@@ -1661,11 +1661,8 @@ private:
         v->setProperty ("isa", target.type == Target::AggregateTarget ? "PBXAggregateTarget" : "PBXNativeTarget", nullptr);\r
         v->setProperty ("buildConfigurationList", createID (String ("__configList") + targetName), nullptr);\r
 \r
-        if (target.type != Target::AggregateTarget)\r
-        {\r
-            v->setProperty ("buildPhases", indentParenthesisedList (target.buildPhaseIDs), nullptr);\r
-            v->setProperty ("buildRules", "( )", nullptr);\r
-        }\r
+        v->setProperty ("buildPhases", indentParenthesisedList (target.buildPhaseIDs), nullptr);\r
+        v->setProperty ("buildRules", "( )", nullptr);\r
 \r
         v->setProperty ("dependencies", indentParenthesisedList (getTargetDependencies (target)), nullptr);\r
         v->setProperty (Ids::name, target.getXCodeSchemeName(), nullptr);\r
@@ -2204,20 +2201,23 @@ private:
         return refID;\r
     }\r
 \r
-    String addRezFile (const RelativePath& path) const\r
+    String addRezFile (const Project::Item& projectItem, const RelativePath& path) const\r
     {\r
         const String pathAsString (path.toUnixStyle());\r
         const String refID (addFileReference (path.toUnixStyle()));\r
 \r
-        Target* auTarget = getTargetOfType (Target::AudioUnitPlugIn);\r
-\r
-        if (auTarget == nullptr)\r
-            return String();\r
+        if (projectItem.isModuleCode())\r
+        {\r
+            if (Target* xcodeTarget = getTargetOfType (getTargetTypeFromFilePath (projectItem.getFile(), false)))\r
+            {\r
+                String rezFileID = addBuildFile (pathAsString, refID, false, false, xcodeTarget);\r
+                xcodeTarget->rezFileIDs.add (rezFileID);\r
 \r
-        String rezFileID = addBuildFile (pathAsString, refID, false, false, auTarget);\r
-        auTarget->rezFileIDs.add (rezFileID);\r
+                return refID;\r
+            }\r
+        }\r
 \r
-        return refID;\r
+        return String();\r
     }\r
 \r
     String getEntitlementsFileName() const\r
@@ -2270,25 +2270,12 @@ private:
             else\r
                 path = RelativePath (projectItem.getFile(), getTargetFolder(), RelativePath::buildTargetFolder);\r
 \r
-            if (path.hasFileExtension (".r") && LibraryModule::CompileUnit::hasSuffix (projectItem.getFile(), "_AU"))\r
-                return addRezFile (path);\r
+            if (path.hasFileExtension (".r"))\r
+                return addRezFile (projectItem, path);\r
 \r
             Target* xcodeTarget = nullptr;\r
             if (projectItem.isModuleCode() && projectItem.shouldBeCompiled())\r
-            {\r
-                const File& file = projectItem.getFile();\r
-\r
-                Target::Type targetType = Target::unspecified;\r
-                if      (LibraryModule::CompileUnit::hasSuffix (file, "_AU"))         targetType = Target::AudioUnitPlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_AUv3"))       targetType = Target::AudioUnitv3PlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_AAX"))        targetType = Target::AAXPlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_RTAS"))       targetType = Target::RTASPlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST2"))       targetType = Target::VSTPlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST3"))       targetType = Target::VST3PlugIn;\r
-                else if (LibraryModule::CompileUnit::hasSuffix (file, "_Standalone")) targetType = Target::StandalonePlugIn;\r
-\r
-                xcodeTarget = getTargetOfType (targetType);\r
-            }\r
+                xcodeTarget = getTargetOfType (getTargetTypeFromFilePath (projectItem.getFile(), false));\r
 \r
             return addFile (path, projectItem.shouldBeCompiled(),\r
                             projectItem.shouldBeAddedToBinaryResources(),\r
@@ -2392,6 +2379,19 @@ private:
         misc.add (v);\r
     }\r
 \r
+    static Target::Type getTargetTypeFromFilePath (const File& file, bool returnSharedTargetIfNoValidSuffic)\r
+    {\r
+        if      (LibraryModule::CompileUnit::hasSuffix (file, "_AU"))         return Target::AudioUnitPlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_AUv3"))       return Target::AudioUnitv3PlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_AAX"))        return Target::AAXPlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_RTAS"))       return Target::RTASPlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST2"))       return Target::VSTPlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_VST3"))       return Target::VST3PlugIn;\r
+        else if (LibraryModule::CompileUnit::hasSuffix (file, "_Standalone")) return Target::StandalonePlugIn;\r
+\r
+        return (returnSharedTargetIfNoValidSuffic ? Target::SharedCodeTarget : Target::unspecified);\r
+    }\r
+\r
     //==============================================================================\r
     void removeMismatchedXcuserdata() const\r
     {\r
index df80d3e1b865462c994cf52478a67d4cde2ebc9a..31ab00950433eb68e064035373ba71db5eadec10 100644 (file)
@@ -56,7 +56,16 @@ namespace
 \r
     inline String valueToCharLiteral (const var& v)\r
     {\r
-        return CppTokeniserFunctions::addEscapeChars (v.toString().trim().substring (0, 4)).quoted ('\'');\r
+        String fourCharCode = v.toString().trim().substring (0, 4);\r
+        uint32 hexRepresentation = 0;\r
+\r
+        for (int i = 0; i < 4; ++i)\r
+            hexRepresentation = (hexRepresentation << 8U)\r
+                             |  (static_cast<unsigned int> (fourCharCode[i]) & 0xffU);\r
+\r
+        return String ("0x") + String::toHexString (static_cast<int> (hexRepresentation))\r
+                             + String (" // ")\r
+                             + CppTokeniserFunctions::addEscapeChars (fourCharCode).quoted ('\'');\r
     }\r
 }\r
 \r
index 15be8db10be42433e9743dd1a98f43087c8a7ff5..a103cbd6b305051c0e4a201da8ef6bda7c39a1ab 100644 (file)
@@ -46,10 +46,7 @@ public:
     void paintIcon (Graphics& g, Rectangle<int> area) override\r
     {\r
         g.setColour (Colours::black);\r
-\r
-        g.drawImageWithin (icon, area.getX(), area.getY(),\r
-                           area.getWidth(), area.getHeight(),\r
-                           RectanglePlacement::centred, false);\r
+        g.drawImage (icon, area.toFloat(), RectanglePlacement::centred);\r
     }\r
 \r
     void deleteItem() override\r
index cf8624c8dec04d19c46870ddad7d60fc80f13441..ff59f9f0f451b28408f3a3a5ac8c4f4a3e090e1b 100644 (file)
@@ -601,12 +601,6 @@ File EnabledModuleList::findLocalModuleFolder (const String& moduleID, bool useE
 \r
                     if (ModuleDescription (f).isValid())\r
                         return f;\r
-\r
-                    f = moduleFolder.getChildFile ("modules")\r
-                                    .getChildFile (moduleID);\r
-\r
-                    if (ModuleDescription (f).isValid())\r
-                        return f;\r
                 }\r
             }\r
         }\r
index 1ff64ff7ddcd08a6dd201d126746117c020949bd..29be7e389a75add8cf0709da98da61966e325a1c 100644 (file)
@@ -1121,9 +1121,12 @@ String Project::getAUMainTypeString()
 \r
     if (s.isEmpty())\r
     {\r
-        if (getPluginIsSynth().getValue())              s = "kAudioUnitType_MusicDevice";\r
-        else if (getPluginWantsMidiInput().getValue())  s = "kAudioUnitType_MusicEffect";\r
-        else                                            s = "kAudioUnitType_Effect";\r
+        // Unfortunately, Rez uses a header where kAudioUnitType_MIDIProcessor is undefined\r
+        // Use aumi instead.\r
+        if      (getPluginIsMidiEffectPlugin().getValue()) s = "'aumi'";\r
+        else if (getPluginIsSynth().getValue())            s = "kAudioUnitType_MusicDevice";\r
+        else if (getPluginWantsMidiInput().getValue())     s = "kAudioUnitType_MusicEffect";\r
+        else                                               s = "kAudioUnitType_Effect";\r
     }\r
 \r
     return s;\r
index 1ea94cb73f1acc773b1b268af50a57fc6cebca93..f65729fdfbccd4c39391bd0001ffa110c24e0471 100644 (file)
@@ -446,11 +446,7 @@ struct EnableBuildComp   : public Component
 //==============================================================================\r
 Component* ProjectContentComponent::createBuildTab (CompileEngineChildProcess* child)\r
 {\r
-   #if JUCE_WINDOWS\r
-    ignoreUnused (child);\r
-    return new ProjucerDisabledComp ("Windows support is still under development - "\r
-                                     "please check for updates at www.juce.com!", false, false);\r
-   #elif JUCE_LINUX\r
+   #if JUCE_LINUX\r
     ignoreUnused (child);\r
     return new ProjucerDisabledComp ("Linux support is still under development - "\r
                                      "please check for updates at www.juce.com!", false, false);\r
@@ -1474,7 +1470,6 @@ void ProjectContentComponent::timerCallback()
 \r
 ReferenceCountedObjectPtr<CompileEngineChildProcess> ProjectContentComponent::getChildProcess()\r
 {\r
-   #if JUCE_MAC\r
     if (childProcess == nullptr && isBuildEnabled())\r
     {\r
         childProcess = ProjucerApplication::getApp().childProcessCache->getOrCreate (*project);\r
@@ -1482,7 +1477,6 @@ ReferenceCountedObjectPtr<CompileEngineChildProcess> ProjectContentComponent::ge
         if (childProcess != nullptr)\r
             childProcess->setContinuousRebuild (isContinuousRebuildEnabled());\r
     }\r
-   #endif\r
 \r
     return childProcess;\r
 }\r
index f722a20bb4f57ad228578c6c4e91e9be88251e81..5a0303451cb7540055ab491d4901ee0e491e2793 100644 (file)
@@ -138,10 +138,7 @@ String createGCCPreprocessorFlags (const StringPairArray& defs)
         if (value.isNotEmpty())\r
             def << "=" << value;\r
 \r
-        if (! def.endsWithChar ('"'))\r
-            def = def.quoted();\r
-\r
-        s += " -D " + def;\r
+        s += " -D" + def;\r
     }\r
 \r
     return s;\r
index 3bbb26e20677bcfa646f2ed2f60f1fd5ec9b9593..f9203f332307dcdd9b11a911585d742a742a5078 100644 (file)
@@ -117,6 +117,7 @@ namespace Ids
     DECLARE_ID (generateManifest);\r
     DECLARE_ID (useRuntimeLibDLL);\r
     DECLARE_ID (wholeProgramOptimisation);\r
+    DECLARE_ID (enableIncrementalLinking);\r
     DECLARE_ID (buildVST);\r
     DECLARE_ID (bundleIdentifier);\r
     DECLARE_ID (aaxIdentifier);\r
index 40005af11147aa7fd4a761dae21dab2ee3c61584..68cd0d738bd7954792f0cb33b27ab0b7093e8bc8 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt \r
index 5ae2d490dc1106c44adb7da44bda5be5c6d7c687..759f4539cd9f4024283ffe51a85676fcd065aee8 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="Z2Xzcp" name="UnitTestRunner" projectType="consoleapp" version="1.0.0"\r
               bundleIdentifier="com.yourcompany.UnitTestRunner" includeBinaryInAppConfig="1"\r
-              jucerVersion="4.2.1" defines="JUCE_UNIT_TESTS=1">\r
+              jucerVersion="4.2.3" defines="JUCE_UNIT_TESTS=1">\r
   <MAINGROUP id="GZdWCU" name="UnitTestRunner">\r
     <GROUP id="{22894462-E1A9-036F-ED94-B51A50C87552}" name="Source">\r
       <FILE id="ynaYaM" name="Main.cpp" compile="1" resource="0" file="Source/Main.cpp"/>\r
index 8b56fb800908c974f2a6c6cabf05ad7ee9eb8609..237f6a4900db5cc77b5a42604eeb130367d82d9a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 \r
 <JUCERPROJECT id="3t6YqETY1" name="BinaryBuilder" projectType="consoleapp"\r
-              juceFolder="../../../juce" jucerVersion="4.2.1" bundleIdentifier="com.rawmaterialsoftware.binarybuilder"\r
+              juceFolder="../../../juce" jucerVersion="4.2.3" bundleIdentifier="com.rawmaterialsoftware.binarybuilder"\r
               includeBinaryInAppConfig="1" version="1.0.0">\r
   <EXPORTFORMATS>\r
     <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"\r
index 0b5a81f16dac09fdfae4ddb04f3885c150e24974..2e152dae8b710c4a3cdd49748e0a793351fe3d73 100644 (file)
@@ -18,7 +18,7 @@ ifeq ($(CONFIG),Debug)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -ldl -lpthread -lrt \r
@@ -38,7 +38,7 @@ ifeq ($(CONFIG),Release)
     TARGET_ARCH := -march=native\r
   endif\r
 \r
-  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\r
+  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\r
   CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os\r
   CXXFLAGS += $(CFLAGS) -std=c++11\r
   LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -ldl -lpthread -lrt \r
index fe1292541f269edd4e590feca4dc9c552038e0f7..967c659f7752d3ed57e9bce6228e66df14edc03b 100644 (file)
@@ -2,7 +2,7 @@
 \r
 <JUCERPROJECT id="IvabE4" name="juce_dll" projectType="library" version="1.0.0"\r
               juceLinkage="none" bundleIdentifier="com.rawmaterialsoftware.juce"\r
-              jucerVersion="4.2.1" defines="JUCE_DLL_BUILD=1" includeBinaryInAppConfig="1">\r
+              jucerVersion="4.2.3" defines="JUCE_DLL_BUILD=1" includeBinaryInAppConfig="1">\r
   <EXPORTFORMATS>\r
     <VS2010 targetFolder="Builds/VisualStudio2010">\r
       <CONFIGURATIONS>\r
index 0f91bc242653e4cd6767a890cc1bd14ce30b77f9..0d60e3e87cc502b133a8db5df00ba37a8993fb09 100644 (file)
@@ -204,10 +204,11 @@ namespace FloatVectorHelpers
         typedef float Type;\r
         typedef float32x4_t ParallelType;\r
         typedef uint32x4_t IntegerType;\r
+        union signMaskUnion { ParallelType f; IntegerType i; };\r
         enum { numParallel = 4 };\r
 \r
-        static forcedinline IntegerType toint (ParallelType v) noexcept                 { union { ParallelType f; IntegerType i; } u; u.f = v; return u.i; }\r
-        static forcedinline ParallelType toflt (IntegerType v) noexcept                 { union { ParallelType f; IntegerType i; } u; u.i = v; return u.f; }\r
+        static forcedinline IntegerType toint (ParallelType v) noexcept                 { signMaskUnion u; u.f = v; return u.i; }\r
+        static forcedinline ParallelType toflt (IntegerType v) noexcept                 { signMaskUnion u; u.i = v; return u.f; }\r
 \r
         static forcedinline ParallelType load1 (Type v) noexcept                        { return vld1q_dup_f32 (&v); }\r
         static forcedinline ParallelType loadA (const Type* v) noexcept                 { return vld1q_f32 (v); }\r
@@ -235,10 +236,11 @@ namespace FloatVectorHelpers
         typedef double Type;\r
         typedef double ParallelType;\r
         typedef uint64 IntegerType;\r
+        union signMaskUnion { ParallelType f; IntegerType i; };\r
         enum { numParallel = 1 };\r
 \r
-        static forcedinline IntegerType toint (ParallelType v) noexcept                 { union { ParallelType f; IntegerType i; } u; u.f = v; return u.i; }\r
-        static forcedinline ParallelType toflt (IntegerType v) noexcept                 { union { ParallelType f; IntegerType i; } u; u.i = v; return u.f; }\r
+        static forcedinline IntegerType toint (ParallelType v) noexcept                 { signMaskUnion u; u.f = v; return u.i; }\r
+        static forcedinline ParallelType toflt (IntegerType v) noexcept                 { signMaskUnion u; u.i = v; return u.f; }\r
 \r
         static forcedinline ParallelType load1 (Type v) noexcept                        { return v; }\r
         static forcedinline ParallelType loadA (const Type* v) noexcept                 { return *v; }\r
@@ -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);\r
     #define JUCE_LOAD_SRC_DEST(srcLoad, dstLoad)                    const Mode::ParallelType d = dstLoad (dest), s = srcLoad (src);\r
 \r
+    union signMask32 { float  f; uint32 i; };\r
+    union signMask64 { double d; uint64 i; };\r
+\r
    #if JUCE_USE_SSE_INTRINSICS || JUCE_USE_ARM_NEON\r
     template<int typeSize> struct ModeType    { typedef BasicOps32 Mode; };\r
     template<>             struct ModeType<8> { typedef BasicOps64 Mode; };\r
@@ -806,7 +811,7 @@ void FloatVectorOperations::abs (float* dest, const float* src, int num) noexcep
    #if JUCE_USE_VDSP_FRAMEWORK\r
     vDSP_vabs ((float*) src, 1, dest, 1, (vDSP_Length) num);\r
    #else\r
-    union { float f; uint32 i; } signMask;\r
+    FloatVectorHelpers::signMask32 signMask;\r
     signMask.i = 0x7fffffffUL;\r
     JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = fabsf (src[i]), Mode::bit_and (s, mask),\r
                                   JUCE_LOAD_SRC, JUCE_INCREMENT_SRC_DEST,\r
@@ -821,7 +826,7 @@ void FloatVectorOperations::abs (double* dest, const double* src, int num) noexc
    #if JUCE_USE_VDSP_FRAMEWORK\r
     vDSP_vabsD ((double*) src, 1, dest, 1, (vDSP_Length) num);\r
    #else\r
-    union {double d; uint64 i;} signMask;\r
+    FloatVectorHelpers::signMask64 signMask;\r
     signMask.i = 0x7fffffffffffffffULL;\r
 \r
     JUCE_PERFORM_VEC_OP_SRC_DEST (dest[i] = fabs (src[i]), Mode::bit_and (s, mask),\r
index 2ca734cd8d4cd7b4dc75caa5e36341574a141353..6742c9e913be373005ac8db425a1e6cd1dcd0b37 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_basics\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE audio and MIDI data classes\r
   description:      Classes for audio buffer manipulation, midi message handling, synthesis, etc.\r
   website:          http://www.juce.com/juce\r
index a334dfe89e00cae3b614427be5cecf7d139dfdc1..556c2d84b201a0240b18f9663b76c48ed8dd6f26 100644 (file)
@@ -33,11 +33,23 @@ namespace MidiHelpers
     {\r
         return (uint8) jlimit (0, 127, v);\r
     }\r
+}\r
 \r
-    inline uint8 floatVelocityToByte (const float v) noexcept\r
-    {\r
-        return validVelocity (roundToInt (v * 127.0f));\r
-    }\r
+//==============================================================================\r
+uint8 MidiMessage::floatValueToMidiByte (const float v) noexcept\r
+{\r
+    return MidiHelpers::validVelocity (roundToInt (v * 127.0f));\r
+}\r
+\r
+uint16 MidiMessage::pitchbendToPitchwheelPos (const float pitchbend,\r
+                                 const float pitchbendRange) noexcept\r
+{\r
+    // can't translate a pitchbend value that is outside of the given range!\r
+    jassert (std::abs (pitchbend) <= pitchbendRange);\r
+\r
+    return static_cast<uint16> (pitchbend > 0.0f\r
+                                  ? jmap (pitchbend, 0.0f, pitchbendRange, 8192.0f, 16383.0f)\r
+                                  : jmap (pitchbend, -pitchbendRange, 0.0f, 0.0f, 8192.0f));\r
 }\r
 \r
 //==============================================================================\r
@@ -84,25 +96,24 @@ int MidiMessage::getMessageLengthFromFirstByte (const uint8 firstByte) noexcept
 MidiMessage::MidiMessage() noexcept\r
    : timeStamp (0), size (2)\r
 {\r
-    preallocatedData.asBytes[0] = 0xf0;\r
-    preallocatedData.asBytes[1] = 0xf7;\r
+    packedData.asBytes[0] = 0xf0;\r
+    packedData.asBytes[1] = 0xf7;\r
 }\r
 \r
 MidiMessage::MidiMessage (const void* const d, const int dataSize, const double t)\r
-   : timeStamp (t),\r
-     size (dataSize)\r
+   : timeStamp (t), size (dataSize)\r
 {\r
     jassert (dataSize > 0);\r
-    memcpy (allocateSpace (dataSize), d, (size_t) dataSize);\r
+    // this checks that the length matches the data..\r
+    jassert (dataSize > 3 || *(uint8*)d >= 0xf0 || getMessageLengthFromFirstByte (*(uint8*)d) == size);\r
 \r
-    // check that the length matches the data..\r
-    jassert (size > 3 || *(uint8*)d >= 0xf0 || getMessageLengthFromFirstByte (*(uint8*)d) == size);\r
+    memcpy (allocateSpace (dataSize), d, (size_t) dataSize);\r
 }\r
 \r
 MidiMessage::MidiMessage (const int byte1, const double t) noexcept\r
    : timeStamp (t), size (1)\r
 {\r
-    preallocatedData.asBytes[0] = (uint8) byte1;\r
+    packedData.asBytes[0] = (uint8) byte1;\r
 \r
     // check that the length matches the data..\r
     jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 1);\r
@@ -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\r
    : timeStamp (t), size (2)\r
 {\r
-    preallocatedData.asBytes[0] = (uint8) byte1;\r
-    preallocatedData.asBytes[1] = (uint8) byte2;\r
+    packedData.asBytes[0] = (uint8) byte1;\r
+    packedData.asBytes[1] = (uint8) byte2;\r
 \r
     // check that the length matches the data..\r
     jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 2);\r
@@ -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\r
    : timeStamp (t), size (3)\r
 {\r
-    preallocatedData.asBytes[0] = (uint8) byte1;\r
-    preallocatedData.asBytes[1] = (uint8) byte2;\r
-    preallocatedData.asBytes[2] = (uint8) byte3;\r
+    packedData.asBytes[0] = (uint8) byte1;\r
+    packedData.asBytes[1] = (uint8) byte2;\r
+    packedData.asBytes[2] = (uint8) byte3;\r
 \r
     // check that the length matches the data..\r
     jassert (byte1 >= 0xf0 || getMessageLengthFromFirstByte ((uint8) byte1) == 3);\r
@@ -132,29 +143,19 @@ MidiMessage::MidiMessage (const int byte1, const int byte2, const int byte3, con
 MidiMessage::MidiMessage (const MidiMessage& other)\r
    : timeStamp (other.timeStamp), size (other.size)\r
 {\r
-    if (other.allocatedData != nullptr)\r
-    {\r
-        allocatedData.malloc ((size_t) size);\r
-        memcpy (allocatedData, other.allocatedData, (size_t) size);\r
-    }\r
+    if (isHeapAllocated())\r
+        memcpy (allocateSpace (size), other.getData(), (size_t) size);\r
     else\r
-    {\r
-        preallocatedData.asInt32 = other.preallocatedData.asInt32;\r
-    }\r
+        packedData.allocatedData = other.packedData.allocatedData;\r
 }\r
 \r
 MidiMessage::MidiMessage (const MidiMessage& other, const double newTimeStamp)\r
    : timeStamp (newTimeStamp), size (other.size)\r
 {\r
-    if (other.allocatedData != nullptr)\r
-    {\r
-        allocatedData.malloc ((size_t) size);\r
-        memcpy (allocatedData, other.allocatedData, (size_t) size);\r
-    }\r
+    if (isHeapAllocated())\r
+        memcpy (allocateSpace (size), other.getData(), (size_t) size);\r
     else\r
-    {\r
-        preallocatedData.asInt32 = other.preallocatedData.asInt32;\r
-    }\r
+        packedData.allocatedData = other.packedData.allocatedData;\r
 }\r
 \r
 MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const uint8 lastStatusByte,\r
@@ -229,16 +230,15 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const
         }\r
         else\r
         {\r
-            preallocatedData.asInt32 = 0;\r
             size = getMessageLengthFromFirstByte ((uint8) byte);\r
-            preallocatedData.asBytes[0] = (uint8) byte;\r
+            packedData.asBytes[0] = (uint8) byte;\r
 \r
             if (size > 1)\r
             {\r
-                preallocatedData.asBytes[1] = src[0];\r
+                packedData.asBytes[1] = src[0];\r
 \r
                 if (size > 2)\r
-                    preallocatedData.asBytes[2] = src[1];\r
+                    packedData.asBytes[2] = src[1];\r
             }\r
         }\r
 \r
@@ -246,7 +246,7 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const
     }\r
     else\r
     {\r
-        preallocatedData.asInt32 = 0;\r
+        packedData.allocatedData = nullptr;\r
         size = 0;\r
     }\r
 }\r
@@ -255,19 +255,25 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other)
 {\r
     if (this != &other)\r
     {\r
-        timeStamp = other.timeStamp;\r
-        size = other.size;\r
-\r
-        if (other.allocatedData != nullptr)\r
+        if (other.isHeapAllocated())\r
         {\r
-            allocatedData.malloc ((size_t) size);\r
-            memcpy (allocatedData, other.allocatedData, (size_t) size);\r
+            if (isHeapAllocated())\r
+                packedData.allocatedData = static_cast<uint8*> (std::realloc (packedData.allocatedData, (size_t) other.size));\r
+            else\r
+                packedData.allocatedData = static_cast<uint8*> (std::malloc ((size_t) other.size));\r
+\r
+            memcpy (packedData.allocatedData, other.packedData.allocatedData, (size_t) other.size);\r
         }\r
         else\r
         {\r
-            allocatedData.free();\r
-            preallocatedData.asInt32 = other.preallocatedData.asInt32;\r
+            if (isHeapAllocated())\r
+                std::free (packedData.allocatedData);\r
+\r
+            packedData.allocatedData = other.packedData.allocatedData;\r
         }\r
+\r
+        timeStamp = other.timeStamp;\r
+        size = other.size;\r
     }\r
 \r
     return *this;\r
@@ -277,36 +283,36 @@ MidiMessage& MidiMessage::operator= (const MidiMessage& other)
 MidiMessage::MidiMessage (MidiMessage&& other) noexcept\r
    : timeStamp (other.timeStamp), size (other.size)\r
 {\r
-    if (other.allocatedData != nullptr)\r
-        allocatedData.swapWith (other.allocatedData);\r
-    else\r
-        preallocatedData.asInt32 = other.preallocatedData.asInt32;\r
+    packedData.allocatedData = other.packedData.allocatedData;\r
+    other.size = 0;\r
 }\r
 \r
 MidiMessage& MidiMessage::operator= (MidiMessage&& other) noexcept\r
 {\r
-    jassert (this != &other); // shouldn't be possible\r
-\r
+    packedData.allocatedData = other.packedData.allocatedData;\r
     timeStamp = other.timeStamp;\r
     size = other.size;\r
-    allocatedData.swapWith (other.allocatedData);\r
-    preallocatedData.asInt32 = other.preallocatedData.asInt32;\r
-\r
+    other.size = 0;\r
     return *this;\r
 }\r
 #endif\r
 \r
-MidiMessage::~MidiMessage() {}\r
+MidiMessage::~MidiMessage() noexcept\r
+{\r
+    if (isHeapAllocated())\r
+        std::free (packedData.allocatedData);\r
+}\r
 \r
 uint8* MidiMessage::allocateSpace (int bytes)\r
 {\r
-    if (bytes > 4)\r
+    if (bytes > (int) sizeof (packedData))\r
     {\r
-        allocatedData.malloc ((size_t) bytes);\r
-        return allocatedData;\r
+        uint8* d = static_cast<uint8*> (std::malloc ((size_t) bytes));\r
+        packedData.allocatedData = d;\r
+        return d;\r
     }\r
 \r
-    return preallocatedData.asBytes;\r
+    return packedData.asBytes;\r
 }\r
 \r
 String MidiMessage::getDescription() const\r
@@ -416,7 +422,7 @@ float MidiMessage::getFloatVelocity() const noexcept
 void MidiMessage::setVelocity (const float newVelocity) noexcept\r
 {\r
     if (isNoteOnOrOff())\r
-        getData()[2] = MidiHelpers::floatVelocityToByte (newVelocity);\r
+        getData()[2] = floatValueToMidiByte (newVelocity);\r
 }\r
 \r
 void MidiMessage::multiplyVelocity (const float scaleFactor) noexcept\r
@@ -563,7 +569,7 @@ MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const
 \r
 MidiMessage MidiMessage::noteOn (const int channel, const int noteNumber, const float velocity) noexcept\r
 {\r
-    return noteOn (channel, noteNumber, MidiHelpers::floatVelocityToByte (velocity));\r
+    return noteOn (channel, noteNumber, floatValueToMidiByte (velocity));\r
 }\r
 \r
 MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, uint8 velocity) noexcept\r
@@ -577,7 +583,7 @@ MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, uint8
 \r
 MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber, float velocity) noexcept\r
 {\r
-    return noteOff (channel, noteNumber, MidiHelpers::floatVelocityToByte (velocity));\r
+    return noteOff (channel, noteNumber, floatValueToMidiByte (velocity));\r
 }\r
 \r
 MidiMessage MidiMessage::noteOff (const int channel, const int noteNumber) noexcept\r
@@ -722,9 +728,10 @@ MidiMessage MidiMessage::textMetaEvent (int type, StringRef text)
     header[--n] = 0xff;\r
 \r
     const size_t headerLen = sizeof (header) - n;\r
+    const int totalSize = (int) (headerLen + textSize);\r
 \r
-    uint8* const dest = result.allocateSpace ((int) (headerLen + textSize));\r
-    result.size = (int) (headerLen + textSize);\r
+    uint8* const dest = result.allocateSpace (totalSize);\r
+    result.size = totalSize;\r
 \r
     memcpy (dest, header + n, headerLen);\r
     memcpy (dest + headerLen, text.text.getAddress(), textSize);\r
@@ -1010,7 +1017,7 @@ String MidiMessage::getMidiNoteName (int note, bool useSharps, bool includeOctav
     return String();\r
 }\r
 \r
-double MidiMessage::getMidiNoteInHertz (int noteNumber, const double frequencyOfA) noexcept\r
+double MidiMessage::getMidiNoteInHertz (const int noteNumber, const double frequencyOfA) noexcept\r
 {\r
     return frequencyOfA * pow (2.0, (noteNumber - 69) / 12.0);\r
 }\r
index 10fd0b20906c89b5ec0de48ac2078c16e00ec316..bfaaa02610324a9621e1c8768f28229a0cfa89a3 100644 (file)
@@ -104,7 +104,7 @@ public:
     MidiMessage (const MidiMessage&, double newTimeStamp);\r
 \r
     /** Destructor. */\r
-    ~MidiMessage();\r
+    ~MidiMessage() noexcept;\r
 \r
     /** Copies this message from another one. */\r
     MidiMessage& operator= (const MidiMessage& other);\r
@@ -118,7 +118,7 @@ public:
     /** Returns a pointer to the raw midi data.\r
         @see getRawDataSize\r
     */\r
-    const uint8* getRawData() const noexcept            { return allocatedData != nullptr ? allocatedData.getData() : preallocatedData.asBytes; }\r
+    const uint8* getRawData() const noexcept            { return getData(); }\r
 \r
     /** Returns the number of bytes of data in the message.\r
         @see getRawData\r
@@ -851,7 +851,7 @@ public:
 \r
         The value passed in must be 0x80 or higher.\r
     */\r
-    static int getMessageLengthFromFirstByte (const uint8 firstByte) noexcept;\r
+    static int getMessageLengthFromFirstByte (uint8 firstByte) noexcept;\r
 \r
     //==============================================================================\r
     /** Returns the name of a midi note number.\r
@@ -878,7 +878,7 @@ public:
         The frequencyOfA parameter is an optional frequency for 'A', normally 440-444Hz for concert pitch.\r
         @see getMidiNoteName\r
     */\r
-    static double getMidiNoteInHertz (int noteNumber, const double frequencyOfA = 440.0) noexcept;\r
+    static double getMidiNoteInHertz (int noteNumber, double frequencyOfA = 440.0) noexcept;\r
 \r
     /** Returns true if the given midi note number is a black key. */\r
     static bool isMidiNoteBlack (int noteNumber) noexcept;\r
@@ -905,21 +905,29 @@ public:
     */\r
     static const char* getControllerName (int controllerNumber);\r
 \r
+    /** Converts a floating-point value between 0 and 1 to a MIDI 7-bit value between 0 and 127. */\r
+    static uint8 floatValueToMidiByte (float valueBetween0and1) noexcept;\r
+\r
+    /** Converts a pitchbend value in semitones to a MIDI 14-bit pitchwheel position value. */\r
+    static uint16 pitchbendToPitchwheelPos (float pitchbendInSemitones,\r
+                                            float pitchbendRangeInSemitones) noexcept;\r
+\r
 private:\r
     //==============================================================================\r
-    double timeStamp;\r
-    HeapBlock<uint8> allocatedData;\r
-    int size;\r
-\r
    #ifndef DOXYGEN\r
-    union\r
+    union PackedData\r
     {\r
-        uint8 asBytes[4];\r
-        uint32 asInt32;\r
-    } preallocatedData;\r
+        uint8* allocatedData;\r
+        uint8 asBytes[sizeof (uint8*)];\r
+    };\r
+\r
+    PackedData packedData;\r
+    double timeStamp;\r
+    int size;\r
    #endif\r
 \r
-    inline uint8* getData() noexcept   { return allocatedData != nullptr ? allocatedData.getData() : preallocatedData.asBytes; }\r
+    inline bool isHeapAllocated() const noexcept  { return size > (int) sizeof (packedData); }\r
+    inline uint8* getData() const noexcept        { return isHeapAllocated() ? packedData.allocatedData : (uint8*) packedData.asBytes; }\r
     uint8* allocateSpace (int);\r
 };\r
 \r
index 2f55e2dab0095ac11c98c292ffd2ea730072ce50..3e04245d8941d7a1f765380407d9868a372ea302 100644 (file)
@@ -48,6 +48,18 @@ public:
     /** Replaces this sequence with another one. */\r
     MidiMessageSequence& operator= (const MidiMessageSequence&);\r
 \r
+   #if JUCE_COMPILER_SUPPORTS_MOVE_SEMANTICS\r
+    MidiMessageSequence (MidiMessageSequence&& other) noexcept\r
+        : list (static_cast<OwnedArray<MidiEventHolder>&&> (other.list))\r
+    {}\r
+\r
+    MidiMessageSequence& operator= (MidiMessageSequence&& other) noexcept\r
+    {\r
+        list = static_cast<OwnedArray<MidiEventHolder>&&> (other.list);\r
+        return *this;\r
+    }\r
+   #endif\r
+\r
     /** Destructor. */\r
     ~MidiMessageSequence();\r
 \r
index d9d6c3ec868877dd15e2d9e26d96f0a343ab6e4e..c677d3c43a371ed841f8f10644a18db68a9a3202 100644 (file)
@@ -69,27 +69,35 @@ struct JUCE_API  MPEZone
              int perNotePitchbendRange = 48,\r
              int masterPitchbendRange = 2) noexcept;\r
 \r
-    /* Returns the MIDI master channel of this zone. */\r
+    /* Returns the MIDI master channel number (in the range 1-16) of this zone. */\r
     int getMasterChannel() const noexcept;\r
 \r
     /** Returns the number of note channels occupied by this zone. */\r
     int getNumNoteChannels() const noexcept;\r
 \r
-    /* Returns the MIDI channel number of the lowest-numbered note channel of this zone.  */\r
+    /* Returns the MIDI channel number (in the range 1-16) of the\r
+       lowest-numbered note channel of this zone.\r
+    */\r
     int getFirstNoteChannel() const noexcept;\r
 \r
-    /* Returns the MIDI channel number of the highest-numbered note channel of this zone.  */\r
+    /* Returns the MIDI channel number (in the range 1-16) of the\r
+       highest-numbered note channel of this zone.\r
+    */\r
     int getLastNoteChannel() const noexcept;\r
 \r
-    /** Returns the MIDI channel numbers of the note channels of this zone as a Range. */\r
+    /** Returns the MIDI channel numbers (in the range 1-16) of the\r
+        note channels of this zone as a Range.\r
+    */\r
     Range<int> getNoteChannelRange() const noexcept;\r
 \r
     /** Returns true if the MIDI channel (in the range 1-16) is used by this zone\r
-        either as a note channel or as the master channel; false otherwise. */\r
+        either as a note channel or as the master channel; false otherwise.\r
+    */\r
     bool isUsingChannel (int channel) const noexcept;\r
 \r
     /** Returns true if the MIDI channel (in the range 1-16) is used by this zone\r
-        as a note channel; false otherwise. */\r
+        as a note channel; false otherwise.\r
+    */\r
     bool isUsingChannelAsNoteChannel (int channel) const noexcept;\r
 \r
     /** Returns the per-note pitchbend range in semitones set for this zone. */\r
index e70ae7c16179ac5446fa8aa990385627c8ab7953..25678d7b4a90598e104f3472494ddee150bc993e 100755 (executable)
@@ -346,8 +346,8 @@ String AudioDeviceManager::initialiseFromXML (const XmlElement& xml,
             currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName();\r
     }\r
 \r
-    setup.bufferSize = xml.getIntAttribute ("audioDeviceBufferSize");\r
-    setup.sampleRate = xml.getDoubleAttribute ("audioDeviceRate");\r
+    setup.bufferSize = xml.getIntAttribute ("audioDeviceBufferSize", setup.bufferSize);\r
+    setup.sampleRate = xml.getDoubleAttribute ("audioDeviceRate", setup.sampleRate);\r
 \r
     setup.inputChannels .parseString (xml.getStringAttribute ("audioDeviceInChans",  "11"), 2);\r
     setup.outputChannels.parseString (xml.getStringAttribute ("audioDeviceOutChans", "11"), 2);\r
index 66d6b32c47aff1c997ddc60fc758351c3b9c1fc6..a342c9cb88cb5d90fa761618bbe91825b90b8aed 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_devices\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE audio and MIDI I/O device classes\r
   description:      Classes to play and record from audio and MIDI I/O devices\r
   website:          http://www.juce.com/juce\r
index 62eb5346b77ada66c044a963086d3b08fe53d513..28ba6672a1d8ea16136363de09332f915cb54e59 100644 (file)
@@ -71,8 +71,7 @@ public:
                     // the normal message, handle it now..\r
                     if (*d >= 0xf8 && *d <= 0xfe)\r
                     {\r
-                        const MidiMessage m (*d++, time);\r
-                        callback.handleIncomingMidiMessage (input, m);\r
+                        callback.handleIncomingMidiMessage (input, MidiMessage (*d++, time));\r
                         --numBytes;\r
                     }\r
                     else\r
@@ -83,7 +82,15 @@ public:
                         data[len++] = *d++;\r
                         --numBytes;\r
 \r
-                        if (len >= MidiMessage::getMessageLengthFromFirstByte (data[0]))\r
+                        const uint8 firstByte = data[0];\r
+\r
+                        if (firstByte < 0x80 || firstByte == 0xf7)\r
+                        {\r
+                            len = 0;\r
+                            break;   // ignore this malformed MIDI message..\r
+                        }\r
+\r
+                        if (len >= MidiMessage::getMessageLengthFromFirstByte (firstByte))\r
                             break;\r
                     }\r
                 }\r
index f0da9809a1a44e28c033784690760364ea6bbc60..d4734a0e065237c63f4b59fe5ac1c477f1911aaf 100644 (file)
@@ -287,7 +287,14 @@ public:
         return r;\r
     }\r
 \r
-    int getDefaultBufferSize() override         { return 256; }\r
+    int getDefaultBufferSize() override\r
+    {\r
+       #if TARGET_IPHONE_SIMULATOR\r
+        return 512;\r
+       #else\r
+        return 256;\r
+       #endif\r
+    }\r
 \r
     String open (const BigInteger& inputChannelsWanted,\r
                  const BigInteger& outputChannelsWanted,\r
@@ -682,14 +689,20 @@ private:
         UInt32 framesPerSlice;\r
         UInt32 dataSize = sizeof (framesPerSlice);\r
 \r
-        if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, &framesPerSlice, &dataSize) == noErr\r
-               && dataSize == sizeof (framesPerSlice) && framesPerSlice != actualBufferSize)\r
+        AudioUnitInitialize (audioUnit);\r
+\r
+        AudioUnitSetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice,\r
+                              kAudioUnitScope_Global, 0, &actualBufferSize, sizeof (actualBufferSize));\r
+\r
+\r
+        if (AudioUnitGetProperty (audioUnit, kAudioUnitProperty_MaximumFramesPerSlice,\r
+                                  kAudioUnitScope_Global, 0, &framesPerSlice, &dataSize) == noErr\r
+            && dataSize == sizeof (framesPerSlice) && static_cast<int> (framesPerSlice) != actualBufferSize)\r
         {\r
-            actualBufferSize = framesPerSlice;\r
+            actualBufferSize = static_cast<int> (framesPerSlice);\r
             prepareFloatBuffers (actualBufferSize);\r
         }\r
 \r
-        AudioUnitInitialize (audioUnit);\r
         return true;\r
     }\r
 \r
index 1a06a894617b010196d4e4664150b91804dcf575..0285726b02556aa2e8aa6c5267a38fb4c9a3440d 100644 (file)
@@ -290,6 +290,8 @@ public:
             }\r
         }\r
 \r
+        updateActivePorts();\r
+\r
         return lastError;\r
     }\r
 \r
index 1ef5bd3ecf4708230efd2a62aa1806292d9fdf01..a67d3cf5d58ebf00209665e0129eb6d64eaf893f 100644 (file)
@@ -137,8 +137,7 @@ AudioCDReader* AudioCDReader::createReaderForCD (const int index)
 AudioCDReader::AudioCDReader (const File& volume)\r
    : AudioFormatReader (0, "CD Audio"),\r
      volumeDir (volume),\r
-     currentReaderTrack (-1),\r
-     reader (0)\r
+     currentReaderTrack (-1)\r
 {\r
      sampleRate = 44100.0;\r
      bitsPerSample = 16;\r
index cbe963f5df258b5ca7fffabe543baa0c6ce4ba6a..542b3dbc13360c493fb92972cf56d1b7e5b7317b 100644 (file)
@@ -365,17 +365,18 @@ public:
     void updateSampleRates()\r
     {\r
         // find a list of sample rates..\r
-        const int possibleSampleRates[] = { 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 };\r
         Array<double> newRates;\r
 \r
         if (asioObject != nullptr)\r
         {\r
+            const int possibleSampleRates[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 };\r
+\r
             for (int index = 0; index < numElementsInArray (possibleSampleRates); ++index)\r
                 if (asioObject->canSampleRate ((double) possibleSampleRates[index]) == 0)\r
                     newRates.add ((double) possibleSampleRates[index]);\r
         }\r
 \r
-        if (newRates.size() == 0)\r
+        if (newRates.isEmpty())\r
         {\r
             double cr = getSampleRate();\r
             JUCE_ASIO_LOG ("No sample rates supported - current rate: " + String ((int) cr));\r
index 2afebbed331db7efae7e1e2421d7e37843daaa90..dd3d52545e33687dc683b0e80785206a59374ba7 100644 (file)
 \r
 #if JUCE_USE_FLAC\r
 \r
+}\r
+\r
+#if defined _WIN32 && !defined __CYGWIN__\r
+ #include <io.h>\r
+#else\r
+ #include <unistd.h>\r
+#endif\r
+\r
+#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__\r
+ #include <sys/types.h> /* for off_t */\r
+#endif\r
+\r
+#if HAVE_INTTYPES_H\r
+ #define __STDC_FORMAT_MACROS\r
+ #include <inttypes.h>\r
+#endif\r
+\r
+#if defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ || defined __EMX__\r
+ #include <io.h> /* for _setmode(), chmod() */\r
+ #include <fcntl.h> /* for _O_BINARY */\r
+#else\r
+ #include <unistd.h> /* for chown(), unlink() */\r
+#endif\r
+\r
+#if defined _MSC_VER || defined __BORLANDC__ || defined __MINGW32__\r
+ #if defined __BORLANDC__\r
+  #include <utime.h> /* for utime() */\r
+ #else\r
+  #include <sys/utime.h> /* for utime() */\r
+ #endif\r
+#else\r
+ #include <sys/types.h> /* some flavors of BSD (like OS X) require this to get time_t */\r
+ #include <utime.h> /* for utime() */\r
+#endif\r
+\r
+#if defined _MSC_VER\r
+ #if _MSC_VER >= 1600\r
+  #include <stdint.h>\r
+ #else\r
+  #include <limits.h>\r
+ #endif\r
+#endif\r
+\r
+#ifdef _WIN32\r
+ #include <stdio.h>\r
+ #include <sys/stat.h>\r
+ #include <stdarg.h>\r
+ #include <windows.h>\r
+#endif\r
+\r
+#ifdef DEBUG\r
+ #include <assert.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include <stdio.h>\r
+\r
+namespace juce\r
+{\r
+\r
 namespace FlacNamespace\r
 {\r
 #if JUCE_INCLUDE_FLAC_CODE || ! defined (JUCE_INCLUDE_FLAC_CODE)\r
@@ -62,7 +122,7 @@ namespace FlacNamespace
   #define FLAC__HAS_X86INTRIN 1\r
  #endif\r
 \r
- #undef __STDC_LIMIT_MACROS\r
+#undef __STDC_LIMIT_MACROS\r
  #define __STDC_LIMIT_MACROS 1\r
  #define flac_max jmax\r
  #define flac_min jmin\r
index 1351a45374767c8b23c0dd95ce8bb77104753bfb..52535970f2b0ae093d1224806df5eba19c58f556 100644 (file)
@@ -656,7 +656,10 @@ namespace WavFileHelpers
 \r
                 if (infoLength > 0)\r
                 {\r
-                    infoLength = jlimit ((int64) 0, infoLength, (int64) input.readInt());\r
+                    infoLength = jmin (infoLength, (int64) input.readInt());\r
+\r
+                    if (infoLength <= 0)\r
+                        return;\r
 \r
                     for (int i = 0; i < numElementsInArray (types); ++i)\r
                     {\r
index 4990620cd0b20a119222f5377032a1a2b694561b..ee94ceedd907def6b496bffc038f094f29a7d58e 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_formats\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE audio file format codecs\r
   description:      Classes for reading and writing various audio file formats.\r
   website:          http://www.juce.com/juce\r
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 (file)
index 0000000..db3ae30
--- /dev/null
@@ -0,0 +1,41 @@
+/*\r
+  ==============================================================================\r
+\r
+   This file is part of the JUCE library.\r
+   Copyright (c) 2016 - ROLI Ltd.\r
+\r
+   Permission is granted to use this software under the terms of either:\r
+   a) the GPL v2 (or any later version)\r
+   b) the Affero GPL v3\r
+\r
+   Details of these licenses can be found at: www.gnu.org/licenses\r
+\r
+   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY\r
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR\r
+   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r
+\r
+   ------------------------------------------------------------------------------\r
+\r
+   To release a closed-source product which uses JUCE, commercial licenses are\r
+   available: visit www.juce.com for more information.\r
+\r
+  ==============================================================================\r
+*/\r
+\r
+#ifndef JUCE_AAX_MODIFIER_INJECTOR_H_INCLUDED\r
+#define JUCE_AAX_MODIFIER_INJECTOR_H_INCLUDED\r
+\r
+struct ModifierKeyProvider\r
+{\r
+    virtual ~ModifierKeyProvider() {}\r
+    virtual int getWin32Modifiers() const = 0;\r
+};\r
+\r
+struct ModifierKeyReceiver\r
+{\r
+    virtual ~ModifierKeyReceiver() {}\r
+    virtual void setModifierKeyProvider (ModifierKeyProvider* provider) = 0;\r
+    virtual void removeModifierKeyProvider () = 0;\r
+};\r
+\r
+#endif
\ No newline at end of file
index 5ddbfed9c09e013077553a30122132ca242ec3f0..d6722ae0bf3b07c2a833caf243712cbc16e18413 100644 (file)
 \r
 #undef check\r
 \r
+namespace juce\r
+{\r
+ #include "juce_AAX_Modifier_Injector.h"\r
+}\r
+\r
 const int32_t juceChunkType = 'juce';\r
 const int maxAAXChannels = 8;\r
 \r
-JUCE_DEFINE_WRAPPER_TYPE (wrapperType_AAX);\r
-\r
 //==============================================================================\r
 struct AAXClasses\r
 {\r
-    static void check (AAX_Result result)\r
+    static int32 getAAXParamHash (AAX_CParamID paramID) noexcept\r
     {\r
-        jassert (result == AAX_SUCCESS); ignoreUnused (result);\r
+        int32 result = 0;\r
+\r
+        while (*paramID != 0)\r
+            result = (31 * result) + (*paramID++);\r
+\r
+        return result;\r
     }\r
 \r
-    static int getParamIndexFromID (AAX_CParamID paramID) noexcept\r
+    static void check (AAX_Result result)\r
     {\r
-        return atoi (paramID);\r
+        jassert (result == AAX_SUCCESS); ignoreUnused (result);\r
     }\r
 \r
     static bool isBypassParam (AAX_CParamID paramID) noexcept\r
@@ -323,7 +331,7 @@ struct AAXClasses
    #endif\r
 \r
     //==============================================================================\r
-    class JuceAAX_GUI   : public AAX_CEffectGUI\r
+    class JuceAAX_GUI   : public AAX_CEffectGUI, public ModifierKeyProvider\r
     {\r
     public:\r
         JuceAAX_GUI() {}\r
@@ -356,6 +364,9 @@ struct AAXClasses
                 {\r
                     component->setVisible (true);\r
                     component->addToDesktop (0, nativeViewToAttachTo);\r
+\r
+                    if (ModifierKeyReceiver* modReceiver = dynamic_cast<ModifierKeyReceiver*> (component->getPeer()))\r
+                        modReceiver->setModifierKeyProvider (this);\r
                 }\r
             }\r
         }\r
@@ -366,6 +377,9 @@ struct AAXClasses
             {\r
                 JUCE_AUTORELEASEPOOL\r
                 {\r
+                    if (ModifierKeyReceiver* modReceiver = dynamic_cast<ModifierKeyReceiver*> (component->getPeer()))\r
+                        modReceiver->removeModifierKeyProvider();\r
+\r
                     component->removeFromDesktop();\r
                     component = nullptr;\r
                 }\r
@@ -409,7 +423,41 @@ struct AAXClasses
             return AAX_ERROR_NULL_OBJECT;\r
         }\r
 \r
+        int getWin32Modifiers() const override\r
+        {\r
+            int modifierFlags = 0;\r
+\r
+            if (const AAX_IViewContainer* viewContainer = GetViewContainer())\r
+            {\r
+                uint32 aaxViewMods = 0;\r
+                const_cast<AAX_IViewContainer*>(viewContainer)->GetModifiers (&aaxViewMods);\r
+\r
+                if ((aaxViewMods & AAX_eModifiers_Shift) != 0) modifierFlags |= ModifierKeys::shiftModifier;\r
+                if ((aaxViewMods & AAX_eModifiers_Alt )  != 0) modifierFlags |= ModifierKeys::altModifier;\r
+            }\r
+\r
+            return modifierFlags;\r
+        }\r
+\r
     private:\r
+        //==============================================================================\r
+        inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept\r
+        {\r
+            if (const JuceAAX_Processor* params = dynamic_cast<const JuceAAX_Processor*> (GetEffectParameters()))\r
+                return params->getParamIndexFromID (paramID);\r
+\r
+            return -1;\r
+        }\r
+\r
+        inline AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept\r
+        {\r
+            if (const JuceAAX_Processor* params = dynamic_cast<const JuceAAX_Processor*> (GetEffectParameters()))\r
+                return params->getAAXParamIDFromJuceIndex (index);\r
+\r
+            return nullptr;\r
+        }\r
+\r
+        //==============================================================================\r
         struct ContentWrapperComponent  : public Component\r
         {\r
             ContentWrapperComponent (JuceAAX_GUI& gui, AudioProcessor& plugin)\r
@@ -449,11 +497,12 @@ struct AAXClasses
                 {\r
                     const int parameterIndex = pluginEditor->getControlParameterIndex (*e.eventComponent);\r
 \r
-                    if (parameterIndex >= 0)\r
+                    if (AAX_CParamID aaxParamID = owner.getAAXParamIDFromJuceIndex (parameterIndex))\r
                     {\r
                         uint32_t mods = 0;\r
                         vc->GetModifiers (&mods);\r
-                        (vc->*method) (IndexAsParamID (parameterIndex), mods);\r
+\r
+                        (vc->*method) (aaxParamID, mods);\r
                     }\r
                 }\r
             }\r
@@ -498,7 +547,7 @@ struct AAXClasses
     {\r
     public:\r
         JuceAAX_Processor()  : pluginInstance (createPluginFilterOfType (AudioProcessor::wrapperType_AAX)),\r
-                               busUtils (*pluginInstance, false, maxAAXChannels),\r
+                               isPrepared (false), busUtils (*pluginInstance, false, maxAAXChannels),\r
                                sampleRate (0), lastBufferSize (1024), maxBufferSize (1024),\r
                                hasSidechain (false)\r
         {\r
@@ -512,10 +561,21 @@ struct AAXClasses
 \r
         static AAX_CEffectParameters* AAX_CALLBACK Create()\r
         {\r
-            JUCE_DECLARE_WRAPPER_TYPE (wrapperType_AAX);\r
+            PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;\r
             return new JuceAAX_Processor();\r
         }\r
 \r
+        AAX_Result Uninitialize() override\r
+        {\r
+            if (isPrepared && pluginInstance != nullptr)\r
+            {\r
+                isPrepared = false;\r
+                pluginInstance->releaseResources();\r
+            }\r
+\r
+            return AAX_CEffectParameters::Uninitialize();\r
+        }\r
+\r
         AAX_Result EffectInit() override\r
         {\r
             AAX_Result err;\r
@@ -606,7 +666,7 @@ struct AAXClasses
             const int numParameters = pluginInstance->getNumParameters();\r
 \r
             for (int i = 0; i < numParameters; ++i)\r
-                SetParameterNormalizedValue (IndexAsParamID (i), (double) pluginInstance->getParameter(i));\r
+                SetParameterNormalizedValue (getAAXParamIDFromJuceIndex (i), (double) pluginInstance->getParameter(i));\r
 \r
             return AAX_SUCCESS;\r
         }\r
@@ -844,7 +904,7 @@ struct AAXClasses
 \r
         void audioProcessorParameterChanged (AudioProcessor* /*processor*/, int parameterIndex, float newValue) override\r
         {\r
-            SetParameterNormalizedValue (IndexAsParamID (parameterIndex), (double) newValue);\r
+            SetParameterNormalizedValue (getAAXParamIDFromJuceIndex (parameterIndex), (double) newValue);\r
         }\r
 \r
         void audioProcessorChanged (AudioProcessor* processor) override\r
@@ -855,12 +915,12 @@ struct AAXClasses
 \r
         void audioProcessorParameterChangeGestureBegin (AudioProcessor* /*processor*/, int parameterIndex) override\r
         {\r
-            TouchParameter (IndexAsParamID (parameterIndex));\r
+            TouchParameter (getAAXParamIDFromJuceIndex (parameterIndex));\r
         }\r
 \r
         void audioProcessorParameterChangeGestureEnd (AudioProcessor* /*processor*/, int parameterIndex) override\r
         {\r
-            ReleaseParameter (IndexAsParamID (parameterIndex));\r
+            ReleaseParameter (getAAXParamIDFromJuceIndex (parameterIndex));\r
         }\r
 \r
         AAX_Result NotificationReceived (AAX_CTypeID type, const void* data, uint32_t size) override\r
@@ -935,6 +995,8 @@ struct AAXClasses
         bool supportsSidechain() const noexcept { return hasSidechain; };\r
 \r
     private:\r
+        friend class JuceAAX_GUI;\r
+\r
         void process (float* const* channels, const int numChans, const int bufferSize,\r
                       const bool bypass, AAX_IMIDINode* midiNodeIn, AAX_IMIDINode* midiNodesOut)\r
         {\r
@@ -1030,14 +1092,27 @@ struct AAXClasses
         void addAudioProcessorParameters()\r
         {\r
             AudioProcessor& audioProcessor = getPluginInstance();\r
+\r
             const int numParameters = audioProcessor.getNumParameters();\r
 \r
+           #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+            const bool usingManagedParameters = false;\r
+           #else\r
+            const bool usingManagedParameters = (audioProcessor.getParameters().size() == numParameters);\r
+           #endif\r
+\r
             for (int parameterIndex = 0; parameterIndex < numParameters; ++parameterIndex)\r
             {\r
+                aaxParamIDs.add (usingManagedParameters ? audioProcessor.getParameterID (parameterIndex)\r
+                                                        : String (parameterIndex));\r
+\r
                 AAX_CString paramName (audioProcessor.getParameterName (parameterIndex, 31).toRawUTF8());\r
+                AAX_CParamID paramID = aaxParamIDs.getReference (parameterIndex).getCharPointer();\r
+\r
+                paramMap.set (AAXClasses::getAAXParamHash (paramID), parameterIndex);\r
 \r
                 AAX_IParameter* parameter\r
-                    = new AAX_CParameter<float> (IndexAsParamID (parameterIndex),\r
+                    = new AAX_CParameter<float> (paramID,\r
                                                  paramName,\r
                                                  audioProcessor.getParameterDefaultValue (parameterIndex),\r
                                                  AAX_CLinearTaperDelegate<float, 0>(),\r
@@ -1064,6 +1139,7 @@ struct AAXClasses
         AAX_Result preparePlugin()\r
         {\r
             AudioProcessor& audioProcessor = getPluginInstance();\r
+            bool hasSomethingChanged = false;\r
 \r
            #if JucePlugin_IsMidiEffect\r
             // MIDI effect plug-ins do not support any audio channels\r
@@ -1081,39 +1157,74 @@ struct AAXClasses
 \r
             if (  (inputSet  == AudioChannelSet::disabled() && inputStemFormat  != AAX_eStemFormat_None)\r
                || (outputSet == AudioChannelSet::disabled() && outputStemFormat != AAX_eStemFormat_None))\r
+            {\r
+                if (isPrepared)\r
+                {\r
+                    isPrepared = false;\r
+                    audioProcessor.releaseResources();\r
+                }\r
+\r
                 return AAX_ERROR_UNIMPLEMENTED;\r
+            }\r
+\r
 \r
             bool success = true;\r
 \r
             if (busUtils.getBusCount (true) > 0)\r
-                success = audioProcessor.setPreferredBusArrangement (true, 0, inputSet);\r
+                success = setPreferredBusArrangement (busUtils, true, 0, inputSet, hasSomethingChanged);\r
 \r
             if (success && busUtils.getBusCount (false) > 0)\r
-                success = audioProcessor.setPreferredBusArrangement (false, 0, outputSet);\r
+                success = setPreferredBusArrangement (busUtils, false, 0, outputSet, hasSomethingChanged);\r
 \r
             // This should never happen as the plugin reported that this layout is supported\r
             jassert (success);\r
 \r
-            hasSidechain = enableAuxBusesForCurrentFormat (busUtils, inputSet, outputSet);\r
-            if (hasSidechain)\r
+            hasSidechain = enableAuxBusesForCurrentFormat (busUtils, inputSet, outputSet, hasSomethingChanged);\r
+            if (hasSidechain && hasSomethingChanged)\r
                 sideChainBuffer.realloc (static_cast<size_t> (maxBufferSize));\r
 \r
             // recheck the format\r
             if ( (busUtils.getBusCount (true)  > 0 && busUtils.getChannelSet (true, 0)  != inputSet)\r
               || (busUtils.getBusCount (false) > 0 && busUtils.getChannelSet (false, 0) != outputSet)\r
               || (hasSidechain && busUtils.getNumChannels(true, 1) != 1))\r
+            {\r
+                if (isPrepared)\r
+                {\r
+                    isPrepared = false;\r
+                    audioProcessor.releaseResources();\r
+                }\r
+\r
                 return AAX_ERROR_UNIMPLEMENTED;\r
+            }\r
 \r
-            rebuildChannelMapArrays (true);\r
-            rebuildChannelMapArrays (false);\r
+            if (hasSomethingChanged)\r
+            {\r
+                rebuildChannelMapArrays (true);\r
+                rebuildChannelMapArrays (false);\r
+            }\r
            #endif\r
 \r
-            audioProcessor.setRateAndBufferSizeDetails (sampleRate, maxBufferSize);\r
-            audioProcessor.prepareToPlay (sampleRate, lastBufferSize);\r
-            maxBufferSize = lastBufferSize;\r
+            hasSomethingChanged = (sampleRate != audioProcessor.getSampleRate()\r
+                             || maxBufferSize != lastBufferSize\r
+                             || hasSomethingChanged);\r
+\r
+            if (hasSomethingChanged || (! isPrepared))\r
+            {\r
+                if (isPrepared)\r
+                {\r
+                    isPrepared = false;\r
+                    audioProcessor.releaseResources();\r
+                }\r
+\r
+                audioProcessor.setRateAndBufferSizeDetails (sampleRate, lastBufferSize);\r
+                audioProcessor.prepareToPlay (sampleRate, lastBufferSize);\r
+                maxBufferSize = lastBufferSize;\r
+            }\r
 \r
             check (Controller()->SetSignalLatency (audioProcessor.getLatencySamples()));\r
 \r
+            isPrepared = true;\r
+\r
             return AAX_SUCCESS;\r
         }\r
 \r
@@ -1141,9 +1252,24 @@ struct AAXClasses
             }\r
         }\r
 \r
+        //==============================================================================\r
+        inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept\r
+        {\r
+            return paramMap [AAXClasses::getAAXParamHash (paramID)];\r
+        }\r
+\r
+        inline AAX_CParamID getAAXParamIDFromJuceIndex (int index) const noexcept\r
+        {\r
+            if (! isPositiveAndBelow (index, aaxParamIDs.size())) return nullptr;\r
+\r
+            return aaxParamIDs.getReference (index).getCharPointer();\r
+        }\r
+\r
+        //==============================================================================\r
         ScopedJuceInitialiser_GUI libraryInitialiser;\r
 \r
         ScopedPointer<AudioProcessor> pluginInstance;\r
+        bool isPrepared;\r
         PluginBusUtilities busUtils;\r
         MidiBuffer midiBuffer;\r
         Array<float*> channelList;\r
@@ -1154,6 +1280,9 @@ struct AAXClasses
         HeapBlock<float> sideChainBuffer;\r
         Array<int> inputLayoutMap, outputLayoutMap;\r
 \r
+        Array<String> aaxParamIDs;\r
+        HashMap<int32, int> paramMap;\r
+\r
         struct ChunkMemoryBlock  : public ReferenceCountedObject\r
         {\r
             juce::MemoryBlock data;\r
@@ -1173,36 +1302,6 @@ struct AAXClasses
         JUCE_DECLARE_NON_COPYABLE (JuceAAX_Processor)\r
     };\r
 \r
-    //==============================================================================\r
-    struct IndexAsParamID\r
-    {\r
-        inline explicit IndexAsParamID (int i) noexcept : index (i) {}\r
-\r
-        operator AAX_CParamID() noexcept\r
-        {\r
-            jassert (index >= 0);\r
-\r
-            char* t = name + sizeof (name);\r
-            *--t = 0;\r
-            int v = index;\r
-\r
-            do\r
-            {\r
-                *--t = (char) ('0' + (v % 10));\r
-                v /= 10;\r
-\r
-            } while (v > 0);\r
-\r
-            return static_cast<AAX_CParamID> (t);\r
-        }\r
-\r
-    private:\r
-        int index;\r
-        char name[32];\r
-\r
-        JUCE_DECLARE_NON_COPYABLE (IndexAsParamID)\r
-    };\r
-\r
     //==============================================================================\r
     struct AAXFormatConfiguration\r
     {\r
@@ -1245,7 +1344,8 @@ struct AAXClasses
     }\r
 \r
     static bool enableAuxBusesForCurrentFormat (PluginBusUtilities& busUtils, const AudioChannelSet& inputLayout,\r
-                                                                              const AudioChannelSet& outputLayout)\r
+                                                                              const AudioChannelSet& outputLayout,\r
+                                                                              bool& hasSomethingChanged)\r
     {\r
         const int numOutBuses = busUtils.getBusCount (false);\r
         const int numInputBuses = busUtils.getBusCount(true);\r
@@ -1263,7 +1363,7 @@ struct AAXClasses
                 if (layout == AudioChannelSet::disabled())\r
                 {\r
                     layout = busUtils.getDefaultLayoutForBus (false, busIdx);\r
-                    busUtils.processor.setPreferredBusArrangement (false, busIdx, layout);\r
+                    setPreferredBusArrangement (busUtils, false, busIdx, layout, hasSomethingChanged);\r
                 }\r
             }\r
 \r
@@ -1271,15 +1371,17 @@ struct AAXClasses
             bool success = true;\r
 \r
             if (numInputBuses > 0)\r
-                success = busUtils.processor.setPreferredBusArrangement (true, 0, inputLayout);\r
+                success = setPreferredBusArrangement (busUtils, true, 0, inputLayout, hasSomethingChanged);\r
 \r
             if (success)\r
-                success = busUtils.processor.setPreferredBusArrangement (false, 0, outputLayout);\r
+                success = setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged);\r
 \r
             // was the above successful\r
             if (success && (numInputBuses == 0 || busUtils.getChannelSet (true,  0) == inputLayout)\r
                         && busUtils.getChannelSet (false, 0) == outputLayout)\r
                 layoutRestorer.release();\r
+            else\r
+                hasSomethingChanged = true;\r
         }\r
 \r
         // does the plug-in have side-chain support? Check the following:\r
@@ -1293,10 +1395,12 @@ struct AAXClasses
 \r
             const AudioChannelSet set = busUtils.getDefaultLayoutForChannelNumAndBus (true, 1, 1);\r
             if (! set.isDisabled())\r
-                hasSidechain = busUtils.processor.setPreferredBusArrangement (true, 1, set);\r
+                hasSidechain = setPreferredBusArrangement (busUtils, true, 1, set, hasSomethingChanged);\r
 \r
             if (! hasSidechain)\r
-                success = busUtils.processor.setPreferredBusArrangement (true, 1, AudioChannelSet::disabled());\r
+                success = setPreferredBusArrangement (busUtils, true, 1,\r
+                                                      AudioChannelSet::disabled(),\r
+                                                      hasSomethingChanged);\r
 \r
             // AAX requires your processor's first sidechain to be either mono or that\r
             // it can be disabled\r
@@ -1305,7 +1409,9 @@ struct AAXClasses
             // disable all other input buses\r
             for (int busIdx = 2; busIdx < numInputBuses; ++busIdx)\r
             {\r
-                success = busUtils.processor.setPreferredBusArrangement (true, busIdx, AudioChannelSet::disabled());\r
+                success = setPreferredBusArrangement (busUtils, true, busIdx,\r
+                                                      AudioChannelSet::disabled(),\r
+                                                      hasSomethingChanged);\r
 \r
                 // AAX can only have a single side-chain input. Therefore, your processor must either\r
                 // only have a single side-chain input or allow disabling all other side-chains\r
@@ -1315,21 +1421,34 @@ struct AAXClasses
             if (hasSidechain)\r
             {\r
                 if (busUtils.getBusCount (false) == 0 || busUtils.getBusCount (true) == 0 ||\r
-                   (busUtils.getChannelSet (true, 0)  == inputLayout && busUtils.getChannelSet (false, 0) == outputLayout))\r
+                   (busUtils.getChannelSet (true, 0) == inputLayout && busUtils.getChannelSet (false, 0) == outputLayout))\r
                     return true;\r
 \r
                 // restore the old layout\r
                 if (busUtils.getBusCount(true) > 0)\r
-                    busUtils.processor.setPreferredBusArrangement (true,  0, inputLayout);\r
+                    setPreferredBusArrangement (busUtils, true,  0, inputLayout, hasSomethingChanged);\r
 \r
                 if (busUtils.getBusCount (false) > 0)\r
-                    busUtils.processor.setPreferredBusArrangement (false, 0, outputLayout);\r
+                    setPreferredBusArrangement (busUtils, false, 0, outputLayout, hasSomethingChanged);\r
             }\r
         }\r
 \r
         return false;\r
     }\r
 \r
+    // wrap setPreferredBusArrangement calls with this to prevent excessive calls to the plug-in\r
+    static bool setPreferredBusArrangement (PluginBusUtilities& busUtils, bool isInput, int busIdx,\r
+                                                                          const AudioChannelSet& layout,\r
+                                                                          bool& didChangePlugin)\r
+    {\r
+        // no need to do anything\r
+        if (busUtils.getChannelSet (isInput, busIdx) == layout)\r
+            return true;\r
+\r
+        didChangePlugin = true;\r
+        return busUtils.processor.setPreferredBusArrangement (isInput, busIdx, layout);\r
+    }\r
+\r
     //==============================================================================\r
     static void createDescriptor (AAX_IComponentDescriptor& desc, int configIndex, PluginBusUtilities& busUtils,\r
                                   const AudioChannelSet& inputLayout, const AudioChannelSet& outputLayout,\r
@@ -1392,7 +1511,8 @@ struct AAXClasses
         properties->AddProperty (AAX_eProperty_SupportsSaveRestore, false);\r
        #endif\r
 \r
-        if (enableAuxBusesForCurrentFormat (busUtils, inputLayout, outputLayout))\r
+        bool ignore;\r
+        if (enableAuxBusesForCurrentFormat (busUtils, inputLayout, outputLayout, ignore))\r
         {\r
             check (desc.AddSideChainIn (JUCEAlgorithmIDs::sideChainBuffers));\r
             properties->AddProperty (AAX_eProperty_SupportsSideChainInput, true);\r
@@ -1427,7 +1547,7 @@ struct AAXClasses
 \r
     static void getPlugInDescription (AAX_IEffectDescriptor& descriptor)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_AAX);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_AAX;\r
 \r
         ScopedPointer<AudioProcessor> plugin = createPluginFilterOfType (AudioProcessor::wrapperType_AAX);\r
         PluginBusUtilities busUtils (*plugin, false, maxAAXChannels);\r
@@ -1454,7 +1574,7 @@ struct AAXClasses
 \r
        #if JucePlugin_IsMidiEffect\r
         // MIDI effect plug-ins do not support any audio channels\r
-        jassert (getBusCount (true) == 0 && getBusCount (false) == 0);\r
+        jassert (busUtils.getBusCount (true) == 0 && busUtils.getBusCount (false) == 0);\r
 \r
         if (AAX_IComponentDescriptor* const desc = descriptor.NewComponentDescriptor())\r
         {\r
index f7d7d1175e3fcc729a8f56dad89f21bde896743f..7410b864c5f3751202f3e605200ed6aefb182c7d 100644 (file)
@@ -46,8 +46,6 @@
  #pragma clang diagnostic ignored "-Wcomment"\r
 #endif\r
 \r
-JUCE_DEFINE_WRAPPER_TYPE (wrapperType_RTAS);\r
-\r
 /* Note about include paths\r
    ------------------------\r
 \r
@@ -479,8 +477,19 @@ public:
         AddControl (new CPluginControl_OnOff ('bypa', "Master Bypass\nMastrByp\nMByp\nByp", false, true));\r
         DefineMasterBypassControlIndex (bypassControlIndex);\r
 \r
-        for (int i = 0; i < juceFilter->getNumParameters(); ++i)\r
-            AddControl (new JucePluginControl (*juceFilter, i));\r
+        const int numParameters = juceFilter->getNumParameters();\r
+\r
+       #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+        const bool usingManagedParameters = false;\r
+       #else\r
+        const bool usingManagedParameters = (juceFilter->getParameters().size() == numParameters);\r
+       #endif\r
+\r
+        for (int i = 0; i < numParameters; ++i)\r
+        {\r
+            OSType rtasParamID = static_cast<OSType> (usingManagedParameters ? juceFilter->getParameterID (i).hashCode() : i);\r
+            AddControl (new JucePluginControl (*juceFilter, i, rtasParamID));\r
+        }\r
 \r
         // we need to do this midi log-in to get timecode, regardless of whether\r
         // the plugin actually uses midi...\r
@@ -816,14 +825,14 @@ private:
     {\r
     public:\r
         //==============================================================================\r
-        JucePluginControl (AudioProcessor& p, const int i)\r
-            : processor (p), index (i)\r
+        JucePluginControl (AudioProcessor& p, const int i, OSType rtasParamID)\r
+            : processor (p), index (i), paramID (rtasParamID)\r
         {\r
             CPluginControl::SetValue (GetDefaultValue());\r
         }\r
 \r
         //==============================================================================\r
-        OSType GetID() const            { return index + 1; }\r
+        OSType GetID() const            { return paramID; }\r
         long GetDefaultValue() const    { return floatToLong (processor.getParameterDefaultValue (index)); }\r
         void SetDefaultValue (long)     {}\r
         long GetNumSteps() const        { return processor.getParameterNumSteps (index); }\r
@@ -868,6 +877,7 @@ private:
         //==============================================================================\r
         AudioProcessor& processor;\r
         const int index;\r
+        const OSType paramID;\r
 \r
         JUCE_DECLARE_NON_COPYABLE (JucePluginControl)\r
     };\r
@@ -946,7 +956,7 @@ private:
        #if JUCE_WINDOWS\r
         Process::setCurrentModuleInstanceHandle (gThisModule);\r
        #endif\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_RTAS);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_RTAS;\r
         initialiseJuce_GUI();\r
 \r
         return new JucePlugInProcess();\r
index 1eb2acb3da1768d358af4d083816ce25f6e3c897..647346ca9e48470c000ede6ba534e77dac267f18 100644 (file)
@@ -35,8 +35,6 @@
 #include <juce_gui_extra/juce_gui_extra.h>\r
 #include <juce_audio_utils/juce_audio_utils.h>\r
 \r
-JUCE_DEFINE_WRAPPER_TYPE (wrapperType_Standalone);\r
-\r
 // You can set this flag in your build if you need to specify a different\r
 // standalone JUCEApplication class for your app to use. If you don't\r
 // set it then by default we'll just create a simple one as below.\r
@@ -55,7 +53,7 @@ class StandaloneFilterApp  : public JUCEApplication
 public:\r
     StandaloneFilterApp()\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_Standalone);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Standalone;\r
     }\r
 \r
     const String getApplicationName() override              { return JucePlugin_Name; }\r
@@ -91,10 +89,8 @@ public:
         quit();\r
     }\r
 \r
-private:\r
+protected:\r
     ScopedPointer<StandaloneFilterWindow> mainWindow;\r
 };\r
 \r
-START_JUCE_APPLICATION (StandaloneFilterApp);\r
-\r
 #endif\r
index 60c88e3f45ee834779ff82ba2dc8584fcd221749..d1f3ea03262b3dd39c8fc8908ac3b0a090bdcccb 100644 (file)
@@ -83,8 +83,8 @@ public:
         jassert (processor != nullptr); // Your createPluginFilter() function must return a valid object!\r
 \r
         // try to disable sidechain and aux buses\r
-        const int numInBuses  = processor->busArrangement.inputBuses.size();\r
-        const int numOutBuses = processor->busArrangement.inputBuses.size();\r
+        const int numInBuses  = processor->busArrangement.inputBuses. size();\r
+        const int numOutBuses = processor->busArrangement.outputBuses.size();\r
 \r
         for (int busIdx = 1; busIdx < numInBuses; ++busIdx)\r
             processor->setPreferredBusArrangement (true, busIdx, AudioChannelSet::disabled());\r
index 2d9ffdfd1e8bfe40bbd3fa77c50b7a7c4bf0b5af..7d671525bc3af5720d966c86c0fcb92d85bb9b90 100644 (file)
 class JuceVSTWrapper;\r
 static bool recursionCheck = false;\r
 \r
-JUCE_DEFINE_WRAPPER_TYPE (wrapperType_VST);\r
-\r
 namespace juce\r
 {\r
  #if JUCE_MAC\r
@@ -272,11 +270,13 @@ public:
          firstProcessCallback (true),\r
          shouldDeleteEditor (false),\r
         #if JUCE_64BIT\r
-         useNSView (true),\r
+         useNSView (true)\r
         #else\r
-         useNSView (false),\r
+         useNSView (false)\r
+        #endif\r
+        #if ! JUCE_IOS\r
+         , hostWindow (0)\r
         #endif\r
-         hostWindow (0)\r
     {\r
         busUtils.init();\r
 \r
@@ -343,7 +343,9 @@ public:
                 delete filter;\r
                 filter = nullptr;\r
 \r
+               #if ! JUCE_IOS\r
                 jassert (editorComp == 0);\r
+               #endif\r
 \r
                 deleteTempChannels();\r
 \r
@@ -386,13 +388,13 @@ public:
     //==============================================================================\r
     bool getEffectName (char* name) override\r
     {\r
-        String (JucePlugin_Name).copyToUTF8 (name, 64);\r
+        String (JucePlugin_Name).copyToUTF8 (name, 64 + 1);\r
         return true;\r
     }\r
 \r
     bool getVendorString (char* text) override\r
     {\r
-        String (JucePlugin_Manufacturer).copyToUTF8 (text, 64);\r
+        String (JucePlugin_Manufacturer).copyToUTF8 (text, 64 + 1);\r
         return true;\r
     }\r
 \r
@@ -822,14 +824,14 @@ public:
     void getProgramName (char* name) override\r
     {\r
         if (filter != nullptr)\r
-            filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 (name, 24);\r
+            filter->getProgramName (filter->getCurrentProgram()).copyToUTF8 (name, 24 + 1);\r
     }\r
 \r
     bool getProgramNameIndexed (VstInt32 /*category*/, VstInt32 index, char* text) override\r
     {\r
         if (filter != nullptr && isPositiveAndBelow (index, filter->getNumPrograms()))\r
         {\r
-            filter->getProgramName (index).copyToUTF8 (text, 24);\r
+            filter->getProgramName (index).copyToUTF8 (text, 24 + 1);\r
             return true;\r
         }\r
 \r
@@ -860,7 +862,7 @@ public:
         if (filter != nullptr)\r
         {\r
             jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterText (index, 24).copyToUTF8 (text, 24); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterText (index, 24).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
         }\r
     }\r
 \r
@@ -885,7 +887,7 @@ public:
         if (filter != nullptr)\r
         {\r
             jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterName (index, 16).copyToUTF8 (text, 16); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterName (index, 16).copyToUTF8 (text, 16 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
         }\r
     }\r
 \r
@@ -894,7 +896,7 @@ public:
         if (filter != nullptr)\r
         {\r
             jassert (isPositiveAndBelow (index, filter->getNumParameters()));\r
-            filter->getParameterLabel (index).copyToUTF8 (text, 24); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
+            filter->getParameterLabel (index).copyToUTF8 (text, 24 + 1); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more.\r
         }\r
     }\r
 \r
@@ -1064,8 +1066,8 @@ public:
 \r
         String channelName = busInfo.name + String (" ") + abbvChannelName;\r
 \r
-        channelName.copyToUTF8 (properties.label, (size_t) (kVstMaxLabelLen - 1));\r
-        channelName.copyToUTF8 (properties.shortLabel, (size_t) (kVstMaxShortLabelLen - 1));\r
+        channelName.copyToUTF8 (properties.label, (size_t) (kVstMaxLabelLen + 1));\r
+        channelName.copyToUTF8 (properties.shortLabel, (size_t) (kVstMaxShortLabelLen + 1));\r
 \r
         properties.flags = kVstPinUseSpeaker | kVstPinIsActive;\r
         properties.arrangementType = SpeakerMappings::channelSetToVstArrangementType (busInfo.channels);\r
@@ -1331,6 +1333,7 @@ public:
 \r
     void createEditorComp()\r
     {\r
+       #if ! JUCE_IOS\r
         if (hasShutdown || filter == nullptr)\r
             return;\r
 \r
@@ -1349,12 +1352,16 @@ public:
                 cEffect.flags &= ~effFlagsHasEditor;\r
             }\r
         }\r
+       #endif\r
 \r
         shouldDeleteEditor = false;\r
     }\r
 \r
     void deleteEditor (bool canDeleteLaterIfModal)\r
     {\r
+       #if JUCE_IOS\r
+        ignoreUnused (canDeleteLaterIfModal);\r
+       #else\r
         JUCE_AUTORELEASEPOOL\r
         {\r
             PopupMenu::dismissAllActiveMenus();\r
@@ -1396,6 +1403,7 @@ public:
             hostWindow = 0;\r
            #endif\r
         }\r
+       #endif\r
     }\r
 \r
     VstIntPtr dispatcher (VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt) override\r
@@ -1403,6 +1411,7 @@ public:
         if (hasShutdown)\r
             return 0;\r
 \r
+       #if ! JUCE_IOS\r
         if (opCode == effEditIdle)\r
         {\r
             doIdleCallback();\r
@@ -1432,7 +1441,7 @@ public:
                 hostWindow = (Window) ptr;\r
                 Window editorWnd = (Window) editorComp->getWindowHandle();\r
                 XReparentWindow (display, editorWnd, hostWindow, 0, 0);\r
-              #else\r
+              #elif JUCE_MAC\r
                 hostWindow = attachComponentToWindowRefVST (editorComp, ptr, useNSView);\r
               #endif\r
                 editorComp->setVisible (true);\r
@@ -1467,10 +1476,11 @@ public:
 \r
             return 0;\r
         }\r
-\r
+       #endif\r
         return AudioEffectX::dispatcher (opCode, index, value, ptr, opt);\r
     }\r
 \r
+   #if ! JUCE_IOS\r
     void resizeHostWindow (int newWidth, int newHeight)\r
     {\r
         if (editorComp != nullptr)\r
@@ -1659,6 +1669,7 @@ public:
 \r
         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EditorCompWrapper)\r
     };\r
+   #endif\r
 \r
     //==============================================================================\r
 private:\r
@@ -1666,8 +1677,10 @@ private:
     PluginBusUtilities busUtils;\r
     juce::MemoryBlock chunkMemory;\r
     juce::uint32 chunkMemoryTime;\r
+   #if ! JUCE_IOS\r
     ScopedPointer<EditorCompWrapper> editorComp;\r
     ERect editorSize;\r
+   #endif\r
     MidiBuffer midiEvents;\r
     VSTMidiEventList outgoingEvents;\r
     bool isProcessing, isBypassed, hasShutdown, isInSizeWindow, firstProcessCallback;\r
@@ -1680,7 +1693,7 @@ private:
     void* hostWindow;\r
    #elif JUCE_LINUX\r
     Window hostWindow;\r
-   #else\r
+   #elif JUCE_WINDOWS\r
     HWND hostWindow;\r
    #endif\r
 \r
@@ -1974,23 +1987,29 @@ namespace
 \r
 //==============================================================================\r
 // Mac startup code..\r
-#if JUCE_MAC\r
+#if JUCE_MAC || JUCE_IOS\r
 \r
     JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster);\r
     JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
+       #if JUCE_MAC\r
         initialiseMacVST();\r
+       #endif\r
+\r
         return pluginEntryPoint (audioMaster);\r
     }\r
 \r
     JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster);\r
     JUCE_EXPORTED_FUNCTION AEffect* main_macho (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
+       #if JUCE_MAC\r
         initialiseMacVST();\r
+       #endif\r
+\r
         return pluginEntryPoint (audioMaster);\r
     }\r
 \r
@@ -2001,7 +2020,7 @@ namespace
     JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster);\r
     JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
         SharedMessageThread::getInstance();\r
         return pluginEntryPoint (audioMaster);\r
@@ -2010,7 +2029,7 @@ namespace
     JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster) asm ("main");\r
     JUCE_EXPORTED_FUNCTION AEffect* main_plugin (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
         return VSTPluginMain (audioMaster);\r
     }\r
@@ -2025,7 +2044,7 @@ namespace
 \r
     extern "C" __declspec (dllexport) AEffect* VSTPluginMain (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
         return pluginEntryPoint (audioMaster);\r
     }\r
@@ -2033,7 +2052,7 @@ namespace
    #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4)\r
     extern "C" __declspec (dllexport) int main (audioMasterCallback audioMaster)\r
     {\r
-        JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST);\r
+        PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST;\r
 \r
         return (int) pluginEntryPoint (audioMaster);\r
     }\r
index 55370bc924dfd51b5f3f2662a63d2d6abf5c918d..929b31ea47962c8fe3ff2485b4ea4c81101e00cb 100644 (file)
@@ -23,6 +23,9 @@
 */\r
 \r
 #include "../../juce_core/system/juce_TargetPlatform.h"\r
+\r
+#if JUCE_MAC\r
+\r
 #include "../utility/juce_CheckSettingMacros.h"\r
 \r
 #if JucePlugin_Build_VST || JucePlugin_Build_VST3\r
@@ -311,3 +314,4 @@ bool forwardCurrentKeyEventToHostVST (Component* comp, bool isNSView)
 } // (juce namespace)\r
 \r
 #endif\r
+#endif\r
index 7dc6aa98f2a6fe697ae802f831803ef35fade6ef..794f791a38e806750fbf805e23283ebc4fddac9c 100644 (file)
 //==============================================================================\r
 #if JucePlugin_Build_VST3 && (__APPLE_CPP__ || __APPLE_CC__ || _WIN32 || _WIN64)\r
 \r
+#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)\r
+ #undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY\r
+ #define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1\r
+#endif\r
+\r
 #include "../../juce_audio_processors/format_types/juce_VST3Headers.h"\r
+\r
+#undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY\r
+\r
 #include "../utility/juce_CheckSettingMacros.h"\r
 #include "../utility/juce_IncludeModuleHeaders.h"\r
 #include "../utility/juce_WindowsHooks.h"\r
@@ -55,8 +63,6 @@
  #endif\r
 #endif\r
 \r
-JUCE_DEFINE_WRAPPER_TYPE (wrapperType_VST3);\r
-\r
 namespace juce\r
 {\r
 \r
@@ -102,6 +108,8 @@ private:
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceAudioProcessor)\r
 };\r
 \r
+class JuceVST3Component;\r
+\r
 //==============================================================================\r
 class JuceVST3EditController : public Vst::EditController,\r
                                public Vst::IMidiMapping,\r
@@ -109,6 +117,9 @@ class JuceVST3EditController : public Vst::EditController,
 {\r
 public:\r
     JuceVST3EditController (Vst::IHostApplication* host)\r
+       #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+        : usingManagedParameter (false)\r
+       #endif\r
     {\r
         if (host != nullptr)\r
             host->queryInterface (FUnknown::iid, (void**) &hostContext);\r
@@ -180,11 +191,18 @@ public:
     }\r
 \r
     //==============================================================================\r
+    enum InternalParameters\r
+    {\r
+        paramPreset               = 0x70727374, // 'prst'\r
+        paramBypass               = 0x62797073, // 'byps'\r
+        paramMidiControllerOffset = 0x6d636d00  // 'mdm*'\r
+    };\r
+\r
     struct Param  : public Vst::Parameter\r
     {\r
-        Param (AudioProcessor& p, int index)  : owner (p), paramIndex (index)\r
+        Param (AudioProcessor& p, int index, Vst::ParamID paramID)  : owner (p), paramIndex (index)\r
         {\r
-            info.id = (Vst::ParamID) index;\r
+            info.id = paramID;\r
             toString128 (info.title, p.getParameterName (index));\r
             toString128 (info.shortTitle, p.getParameterName (index, 8));\r
             toString128 (info.units, p.getParameterLabel (index));\r
@@ -251,9 +269,9 @@ public:
     //==============================================================================\r
     struct BypassParam  : public Vst::Parameter\r
     {\r
-        BypassParam (AudioProcessor& p, int index)  : owner (p), paramIndex (index)\r
+        BypassParam (AudioProcessor& p, Vst::ParamID vstParamID)  : owner (p)\r
         {\r
-            info.id = (Vst::ParamID) index;\r
+            info.id = vstParamID;\r
             toString128 (info.title, "Bypass");\r
             toString128 (info.shortTitle, "Bypass");\r
             toString128 (info.units, "");\r
@@ -329,11 +347,83 @@ public:
 \r
     private:\r
         AudioProcessor& owner;\r
-        int paramIndex;\r
 \r
         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BypassParam)\r
     };\r
 \r
+    //==============================================================================\r
+    struct ProgramChangeParameter  : public Vst::Parameter\r
+    {\r
+        ProgramChangeParameter (AudioProcessor& p)  : owner (p)\r
+        {\r
+            jassert (owner.getNumPrograms() > 1);\r
+\r
+            info.id = paramPreset;\r
+            toString128 (info.title, "Program");\r
+            toString128 (info.shortTitle, "Program");\r
+            toString128 (info.units, "");\r
+            info.stepCount = owner.getNumPrograms() - 1;\r
+            info.defaultNormalizedValue = static_cast<Vst::ParamValue> (owner.getCurrentProgram()) / static_cast<Vst::ParamValue> (info.stepCount);\r
+            info.unitId = Vst::kRootUnitId;\r
+            info.flags = Vst::ParameterInfo::kIsProgramChange | Vst::ParameterInfo::kCanAutomate;\r
+        }\r
+\r
+        virtual ~ProgramChangeParameter() {}\r
+\r
+        bool setNormalized (Vst::ParamValue v) override\r
+        {\r
+            Vst::ParamValue program = v * info.stepCount;\r
+\r
+            if (! isPositiveAndBelow ((int) program, owner.getNumPrograms()))\r
+                return false;\r
+\r
+            if (valueNormalized != v)\r
+            {\r
+                valueNormalized = v;\r
+                changed();\r
+                return true;\r
+            }\r
+\r
+            return false;\r
+        }\r
+\r
+        void toString (Vst::ParamValue value, Vst::String128 result) const override\r
+        {\r
+            Vst::ParamValue program = value * info.stepCount;\r
+            toString128 (result, owner.getProgramName ((int) program));\r
+        }\r
+\r
+        bool fromString (const Vst::TChar* text, Vst::ParamValue& outValueNormalized) const override\r
+        {\r
+            const String paramValueString (getStringFromVstTChars (text));\r
+\r
+            const int n = owner.getNumPrograms();\r
+            for (int i = 0; i < n; ++i)\r
+            {\r
+                if (paramValueString == owner.getProgramName (i))\r
+                {\r
+                    outValueNormalized = static_cast<Vst::ParamValue> (i) / info.stepCount;\r
+                    return true;\r
+                }\r
+            }\r
+\r
+            return false;\r
+        }\r
+\r
+        static String getStringFromVstTChars (const Vst::TChar* text)\r
+        {\r
+            return juce::String (juce::CharPointer_UTF16 (reinterpret_cast<const juce::CharPointer_UTF16::CharType*> (text)));\r
+        }\r
+\r
+        Vst::ParamValue toPlain (Vst::ParamValue v) const override       { return v * info.stepCount; }\r
+        Vst::ParamValue toNormalized (Vst::ParamValue v) const override  { return v / info.stepCount; }\r
+\r
+    private:\r
+        AudioProcessor& owner;\r
+\r
+        JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProgramChangeParameter)\r
+    };\r
+\r
     //==============================================================================\r
     tresult PLUGIN_API setComponentState (IBStream* stream) override\r
     {\r
@@ -343,9 +433,13 @@ public:
             const int numParameters = pluginInstance->getNumParameters();\r
 \r
             for (int i = 0; i < numParameters; ++i)\r
-                setParamNormalized ((Vst::ParamID) i, (double) pluginInstance->getParameter (i));\r
+                setParamNormalized (getVSTParamIDForIndex (i), (double) pluginInstance->getParameter (i));\r
 \r
-            setParamNormalized ((Vst::ParamID) numParameters, audioProcessor->isBypassed ? 1.0f : 0.0f);\r
+            setParamNormalized (bypassParamID, audioProcessor->isBypassed ? 1.0f : 0.0f);\r
+\r
+            const int numPrograms = pluginInstance->getNumPrograms();\r
+            if (numPrograms > 1)\r
+                setParamNormalized (paramPreset, static_cast<Vst::ParamValue> (pluginInstance->getCurrentProgram()) / static_cast<Vst::ParamValue> (numPrograms - 1));\r
         }\r
 \r
         return Vst::EditController::setComponentState (stream);\r
@@ -382,15 +476,15 @@ public:
     tresult PLUGIN_API getMidiControllerAssignment (Steinberg::int32 /*busIndex*/, Steinberg::int16 channel,\r
                                                     Vst::CtrlNumber midiControllerNumber, Vst::ParamID& resultID) override\r
     {\r
-        resultID = (Vst::ParamID) midiControllerToParameter[channel][midiControllerNumber];\r
+        resultID = midiControllerToParameter[channel][midiControllerNumber];\r
 \r
         return kResultTrue; // Returning false makes some hosts stop asking for further MIDI Controller Assignments\r
     }\r
 \r
     // Converts an incoming parameter index to a MIDI controller:\r
-    bool getMidiControllerForParameter (int index, int& channel, int& ctrlNumber)\r
+    bool getMidiControllerForParameter (Vst::ParamID index, int& channel, int& ctrlNumber)\r
     {\r
-        const int mappedIndex = index - parameterToMidiControllerOffset;\r
+        const int mappedIndex = static_cast<int> (index - parameterToMidiControllerOffset);\r
 \r
         if (isPositiveAndBelow (mappedIndex, numElementsInArray (parameterToMidiController)))\r
         {\r
@@ -407,6 +501,13 @@ public:
         return false;\r
     }\r
 \r
+    inline bool isMidiControllerParamID (Vst::ParamID paramID) const noexcept\r
+    {\r
+        return (paramID >= parameterToMidiControllerOffset\r
+                    && isPositiveAndBelow (paramID - parameterToMidiControllerOffset,\r
+                                           static_cast<Vst::ParamID> (numElementsInArray (parameterToMidiController))));\r
+    }\r
+\r
     //==============================================================================\r
     IPlugView* PLUGIN_API createView (const char* name) override\r
     {\r
@@ -423,19 +524,26 @@ public:
     }\r
 \r
     //==============================================================================\r
-    void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override        { beginEdit ((Vst::ParamID) index); }\r
+    void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override        { beginEdit (getVSTParamIDForIndex (index)); }\r
 \r
     void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) override\r
     {\r
         // NB: Cubase has problems if performEdit is called without setParamNormalized\r
-        EditController::setParamNormalized ((Vst::ParamID) index, (double) newValue);\r
-        performEdit ((Vst::ParamID) index, (double) newValue);\r
+        EditController::setParamNormalized (getVSTParamIDForIndex (index), (double) newValue);\r
+        performEdit (getVSTParamIDForIndex (index), (double) newValue);\r
     }\r
 \r
-    void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override          { endEdit ((Vst::ParamID) index); }\r
+    void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override          { endEdit (getVSTParamIDForIndex (index)); }\r
 \r
     void audioProcessorChanged (AudioProcessor*) override\r
     {\r
+        if (AudioProcessor* pluginInstance = getPluginInstance())\r
+        {\r
+            if (pluginInstance->getNumPrograms() > 1)\r
+                EditController::setParamNormalized (paramPreset, static_cast<Vst::ParamValue> (pluginInstance->getCurrentProgram())\r
+                                                               / static_cast<Vst::ParamValue> (pluginInstance->getNumPrograms() - 1));\r
+        }\r
+\r
         if (componentHandler != nullptr)\r
             componentHandler->restartComponent (Vst::kLatencyChanged | Vst::kParamValuesChanged);\r
     }\r
@@ -450,6 +558,9 @@ public:
     }\r
 \r
 private:\r
+\r
+    friend class JuceVST3Component;\r
+\r
     //==============================================================================\r
     ComSmartPtr<JuceAudioProcessor> audioProcessor;\r
     ScopedJuceInitialiser_GUI libraryInitialiser;\r
@@ -462,9 +573,17 @@ private:
     };\r
 \r
     enum { numMIDIChannels = 16 };\r
-    int parameterToMidiControllerOffset;\r
+    Vst::ParamID parameterToMidiControllerOffset;\r
     MidiController parameterToMidiController[numMIDIChannels * Vst::kCountCtrlNumber];\r
-    int midiControllerToParameter[numMIDIChannels][Vst::kCountCtrlNumber];\r
+    Vst::ParamID midiControllerToParameter[numMIDIChannels][Vst::kCountCtrlNumber];\r
+\r
+    //==============================================================================\r
+   #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+    bool usingManagedParameter;\r
+    Array<Vst::ParamID> vstParamIDs;\r
+   #endif\r
+    Vst::ParamID bypassParamID;\r
+\r
 \r
     //==============================================================================\r
     void setupParameters()\r
@@ -473,40 +592,61 @@ private:
         {\r
             pluginInstance->addListener (this);\r
 \r
+           #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+            const bool usingManagedParameter = false;\r
+           #endif\r
+\r
             if (parameters.getParameterCount() <= 0)\r
             {\r
                 const int numParameters = pluginInstance->getNumParameters();\r
 \r
+              #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+                usingManagedParameter = (pluginInstance->getParameters().size() == numParameters);\r
+              #endif\r
+\r
                 for (int i = 0; i < numParameters; ++i)\r
-                    parameters.addParameter (new Param (*pluginInstance, i));\r
+                {\r
+                   #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+                    const Vst::ParamID vstParamID = static_cast<Vst::ParamID> (i);\r
+                   #else\r
+                    const Vst::ParamID vstParamID = generateVSTParamIDForIndex (pluginInstance, i);\r
+                    vstParamIDs.add (vstParamID);\r
+                   #endif\r
+\r
+                    parameters.addParameter (new Param (*pluginInstance, i, vstParamID));\r
+                }\r
 \r
-                parameters.addParameter (new BypassParam (*pluginInstance, numParameters));\r
+                bypassParamID = static_cast<Vst::ParamID> (usingManagedParameter ? paramBypass : numParameters);\r
+                parameters.addParameter (new BypassParam (*pluginInstance, bypassParamID));\r
+\r
+                if (pluginInstance->getNumPrograms() > 1)\r
+                    parameters.addParameter (new ProgramChangeParameter (*pluginInstance));\r
             }\r
 \r
            #if JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS\r
-            // (NB: the +1 is to account for the bypass parameter)\r
-            initialiseMidiControllerMappings (pluginInstance->getNumParameters() + 1);\r
+            parameterToMidiControllerOffset = static_cast<Vst::ParamID> (usingManagedParameter ? paramMidiControllerOffset\r
+                                                                                               : parameters.getParameterCount());\r
+\r
+            initialiseMidiControllerMappings ();\r
            #endif\r
 \r
             audioProcessorChanged (pluginInstance);\r
         }\r
     }\r
 \r
-    void initialiseMidiControllerMappings (const int numVstParameters)\r
+    void initialiseMidiControllerMappings ()\r
     {\r
-        parameterToMidiControllerOffset = numVstParameters;\r
-\r
         for (int c = 0, p = 0; c < numMIDIChannels; ++c)\r
         {\r
             for (int i = 0; i < Vst::kCountCtrlNumber; ++i, ++p)\r
             {\r
-                midiControllerToParameter[c][i] = p + parameterToMidiControllerOffset;\r
+                midiControllerToParameter[c][i] = static_cast<Vst::ParamID> (p) + parameterToMidiControllerOffset;\r
                 parameterToMidiController[p].channel = c;\r
                 parameterToMidiController[p].ctrlNumber = i;\r
 \r
                 parameters.addParameter (new Vst::Parameter (toString ("MIDI CC " + String (c) + "|" + String (i)),\r
-                                         (Vst::ParamID) (p + parameterToMidiControllerOffset), 0, 0, 0,\r
-                                         Vst::ParameterInfo::kCanAutomate, Vst::kRootUnitId));\r
+                                          static_cast<Vst::ParamID> (p) + parameterToMidiControllerOffset, 0, 0, 0,\r
+                                          Vst::ParameterInfo::kCanAutomate, Vst::kRootUnitId));\r
             }\r
         }\r
     }\r
@@ -524,6 +664,34 @@ private:
         }\r
     }\r
 \r
+    //==============================================================================\r
+   #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+    inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept   { return static_cast<Vst::ParamID> (paramIndex); }\r
+   #else\r
+    static Vst::ParamID generateVSTParamIDForIndex (AudioProcessor* const pluginFilter, int paramIndex)\r
+    {\r
+        jassert (pluginFilter != nullptr);\r
+\r
+        const int n = pluginFilter->getNumParameters();\r
+        const bool managedParameter = (pluginFilter->getParameters().size() == n);\r
+\r
+        if (isPositiveAndBelow (paramIndex, n))\r
+        {\r
+            const String& juceParamID = pluginFilter->getParameterID (paramIndex);\r
+            return managedParameter ? static_cast<Vst::ParamID> (juceParamID.hashCode())\r
+                                    : static_cast<Vst::ParamID> (juceParamID.getIntValue());\r
+        }\r
+\r
+        return static_cast<Vst::ParamID> (-1);\r
+    }\r
+\r
+    inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept\r
+    {\r
+        return usingManagedParameter ? vstParamIDs.getReference (paramIndex)\r
+                                     : static_cast<Vst::ParamID> (paramIndex);\r
+    }\r
+   #endif\r
+\r
     //==============================================================================\r
     class JuceVST3Editor : public Vst::EditorView\r
     {\r
@@ -627,14 +795,30 @@ private:
             return kResultFalse;\r
         }\r
 \r
-        tresult PLUGIN_API canResize() override         { return kResultTrue; }\r
+        tresult PLUGIN_API canResize() override\r
+        {\r
+            if (component != nullptr)\r
+                if (AudioProcessorEditor* editor = component->pluginEditor)\r
+                    return editor->isResizable() ? kResultTrue : kResultFalse;\r
+\r
+            return kResultFalse;\r
+        }\r
 \r
         tresult PLUGIN_API checkSizeConstraint (ViewRect* rectToCheck) override\r
         {\r
             if (rectToCheck != nullptr && component != nullptr)\r
             {\r
-                rectToCheck->right  = rectToCheck->left + component->getWidth();\r
-                rectToCheck->bottom = rectToCheck->top  + component->getHeight();\r
+                // checkSizeConstraint\r
+                Rectangle<int> juceRect = Rectangle<int>::leftTopRightBottom (rectToCheck->left, rectToCheck->top,\r
+                                                                              rectToCheck->right, rectToCheck->bottom);\r
+                if (AudioProcessorEditor* editor = component->pluginEditor)\r
+                    if (ComponentBoundsConstrainer* constrainer = editor->getConstrainer())\r
+                        juceRect.setSize (jlimit (constrainer->getMinimumWidth(),  constrainer->getMaximumWidth(),  juceRect.getWidth()),\r
+                                          jlimit (constrainer->getMinimumHeight(), constrainer->getMaximumHeight(), juceRect.getHeight()));\r
+\r
+                rectToCheck->right  = rectToCheck->left + juceRect.getWidth();\r
+                rectToCheck->bottom = rectToCheck->top  + juceRect.getHeight();\r
+\r
                 return kResultTrue;\r
             }\r
 \r
@@ -648,8 +832,8 @@ private:
         {\r
         public:\r
             ContentWrapperComponent (JuceVST3Editor& editor, AudioProcessor& plugin)\r
-               : owner (editor),\r
-                 pluginEditor (plugin.createEditorIfNeeded())\r
+               : pluginEditor (plugin.createEditorIfNeeded()),\r
+                 owner (editor)\r
             {\r
                 setOpaque (true);\r
                 setBroughtToFrontOnMouseClick (true);\r
@@ -720,9 +904,10 @@ private:
                 }\r
             }\r
 \r
+            ScopedPointer<AudioProcessorEditor> pluginEditor;\r
+\r
         private:\r
             JuceVST3Editor& owner;\r
-            ScopedPointer<AudioProcessorEditor> pluginEditor;\r
 \r
             JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ContentWrapperComponent)\r
         };\r
@@ -803,7 +988,11 @@ public:
         processSetup.sampleRate = 44100.0;\r
         processSetup.symbolicSampleSize = Vst::kSample32;\r
 \r
-        vstBypassParameterId = pluginInstance->getNumParameters();\r
+       #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+        vstBypassParameterId = static_cast<Vst::ParamID> (pluginInstance->getNumParameters());\r
+       #else\r
+        cacheParameterIDs();\r
+       #endif\r
 \r
         pluginInstance->setPlayHead (this);\r
     }\r
@@ -1256,7 +1445,7 @@ public:
     {\r
         if (listIndex == 0)\r
         {\r
-            info.id = paramPreset;\r
+            info.id = JuceVST3EditController::paramPreset;\r
             info.programCount = (Steinberg::int32) getPluginInstance().getNumPrograms();\r
 \r
             toString128 (info.name, TRANS("Factory Presets"));\r
@@ -1271,7 +1460,7 @@ public:
 \r
     tresult PLUGIN_API getProgramName (Vst::ProgramListID listId, Steinberg::int32 programIndex, Vst::String128 name) override\r
     {\r
-        if (listId == paramPreset\r
+        if (listId == JuceVST3EditController::paramPreset\r
             && isPositiveAndBelow ((int) programIndex, getPluginInstance().getNumPrograms()))\r
         {\r
             toString128 (name, getPluginInstance().getProgramName ((int) programIndex));\r
@@ -1399,7 +1588,7 @@ public:
             info.flags = Vst::BusInfo::kDefaultActive;\r
 \r
            #if JucePlugin_WantsMidiInput\r
-            if (dir == Vst::kInput)\r
+            if (dir == Vst::kInput && index == 0)\r
             {\r
                 info.mediaType = Vst::kEvent;\r
                 info.direction = dir;\r
@@ -1411,7 +1600,7 @@ public:
            #endif\r
 \r
            #if JucePlugin_ProducesMidiOutput\r
-            if (dir == Vst::kOutput)\r
+            if (dir == Vst::kOutput && index == 0)\r
             {\r
                 info.mediaType = Vst::kEvent;\r
                 info.direction = dir;\r
@@ -1613,22 +1802,35 @@ public:
 \r
                 if (paramQueue->getPoint (numPoints - 1,  offsetSamples, value) == kResultTrue)\r
                 {\r
-                    const int id = (int) paramQueue->getParameterId();\r
+                    const Vst::ParamID vstParamID = paramQueue->getParameterId();\r
 \r
-                    if (isPositiveAndBelow (id, pluginInstance->getNumParameters()))\r
-                        pluginInstance->setParameter (id, static_cast<float> (value));\r
-                    else if (id == vstBypassParameterId)\r
+                    if (vstParamID == vstBypassParameterId)\r
                         setBypassed (static_cast<float> (value) != 0.0f);\r
                    #if JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS\r
-                    else\r
-                        addParameterChangeToMidiBuffer (offsetSamples, id, value);\r
+                    else if (juceVST3EditController->isMidiControllerParamID (vstParamID))\r
+                        addParameterChangeToMidiBuffer (offsetSamples, vstParamID, value);\r
                    #endif\r
+                    else if (vstParamID == JuceVST3EditController::paramPreset)\r
+                    {\r
+                        const int numPrograms  = pluginInstance->getNumPrograms();\r
+                        const int programValue = roundToInt (value * numPrograms);\r
+\r
+                        if (numPrograms > 1 && isPositiveAndBelow (programValue, numPrograms)\r
+                                            && programValue != pluginInstance->getCurrentProgram())\r
+                            pluginInstance->setCurrentProgram (programValue);\r
+                    }\r
+                    else\r
+                    {\r
+                        const int index = getJuceIndexForVSTParamID (vstParamID);\r
+                        if (isPositiveAndBelow (index, pluginInstance->getNumParameters()))\r
+                            pluginInstance->setParameter (index, static_cast<float> (value));\r
+                    }\r
                 }\r
             }\r
         }\r
     }\r
 \r
-    void addParameterChangeToMidiBuffer (const Steinberg::int32 offsetSamples, const int id, const double value)\r
+    void addParameterChangeToMidiBuffer (const Steinberg::int32 offsetSamples, const Vst::ParamID id, const double value)\r
     {\r
         // If the parameter is mapped to a MIDI CC message then insert it into the midiBuffer.\r
         int channel, ctrlNumber;\r
@@ -1717,7 +1919,12 @@ private:
 \r
     ScopedJuceInitialiser_GUI libraryInitialiser;\r
 \r
-    int vstBypassParameterId;\r
+   #if ! JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+    bool usingManagedParameter;\r
+    Array<Vst::ParamID> vstParamIDs;\r
+    HashMap<int32, int> paramMap;\r
+   #endif\r
+    Vst::ParamID vstBypassParameterId;\r
 \r
     static const char* kJucePrivateDataIdentifier;\r
 \r
@@ -1862,12 +2069,6 @@ private:
         return AudioBusPointerHelper<FloatType>::impl (data);\r
     }\r
 \r
-    //==============================================================================\r
-    enum InternalParameters\r
-    {\r
-        paramPreset = 'prst'\r
-    };\r
-\r
     void preparePlugin (double sampleRate, int bufferSize)\r
     {\r
         AudioProcessor& p = getPluginInstance();\r
@@ -1876,6 +2077,40 @@ private:
         p.prepareToPlay (sampleRate, bufferSize);\r
     }\r
 \r
+    //==============================================================================\r
+   #if JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+    inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept   { return static_cast<Vst::ParamID> (paramIndex); }\r
+    inline int getJuceIndexForVSTParamID (Vst::ParamID paramID) const noexcept  { return static_cast<int> (paramID); }\r
+   #else\r
+    void cacheParameterIDs()\r
+    {\r
+        const int numParameters = pluginInstance->getNumParameters();\r
+        usingManagedParameter = (pluginInstance->getParameters().size() == numParameters);\r
+\r
+        vstBypassParameterId = static_cast<Vst::ParamID> (usingManagedParameter ? JuceVST3EditController::paramBypass : numParameters);\r
+\r
+        for (int i = 0; i < numParameters; ++i)\r
+        {\r
+            const Vst::ParamID paramID = JuceVST3EditController::generateVSTParamIDForIndex (pluginInstance, i);\r
+\r
+            vstParamIDs.add (paramID);\r
+            paramMap.set (static_cast<int32> (paramID), i);\r
+        }\r
+    }\r
+\r
+    inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept\r
+    {\r
+        return usingManagedParameter ? vstParamIDs.getReference (paramIndex)\r
+                                     : static_cast<Vst::ParamID> (paramIndex);\r
+    }\r
+\r
+    inline int getJuceIndexForVSTParamID (Vst::ParamID paramID) const noexcept\r
+    {\r
+        return usingManagedParameter ? paramMap[static_cast<int32> (paramID)]\r
+                                     : static_cast<int> (paramID);\r
+    }\r
+   #endif\r
+\r
     //==============================================================================\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Component)\r
 };\r
@@ -2264,7 +2499,7 @@ private:
 // The VST3 plugin entry point.\r
 JUCE_EXPORTED_FUNCTION IPluginFactory* PLUGIN_API GetPluginFactory()\r
 {\r
-    JUCE_DECLARE_WRAPPER_TYPE (wrapperType_VST3);\r
+    PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3;\r
 \r
    #if JUCE_WINDOWS\r
     // Cunning trick to force this function to be exported. Life's too short to\r
index ade0118028a5d613451e3bbd538885f91f686af9..5dbbb6cc55b1ac8c35e5738b0d35c901788839c1 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_plugin_client\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE audio plugin wrapper classes\r
   description:      Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins.\r
   website:          http://www.juce.com/juce\r
 #include <juce_audio_basics/juce_audio_basics.h>\r
 #include <juce_audio_processors/juce_audio_processors.h>\r
 \r
+/** Config: JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+\r
+    Enable this if you want to force JUCE to use a continuous parameter\r
+    index to identify a parameter in a DAW (this was the default in old\r
+    versions of JUCE). This is index is usually used by the DAW to save\r
+    automation data and enabling this may mess up user's DAW projects.\r
+*/\r
+#ifndef JUCE_FORCE_USE_LEGACY_PARAM_IDS\r
+ #define JUCE_FORCE_USE_LEGACY_PARAM_IDS 0\r
+#endif\r
+\r
 namespace juce\r
 {\r
  #include "utility/juce_PluginHostType.h"\r
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 (file)
index 0000000..2a345b2
--- /dev/null
@@ -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 <AudioUnit/AudioUnit.r>
+
+//==============================================================================
+/*  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 (file)
index 0000000..a40e1f3
--- /dev/null
@@ -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..
+*/
index 530924492ec2ebbbf19670fa3b3b289a643f736c..cf78781f2410a5e5f33cd1fd3220f4dc5e54c236 100644 (file)
@@ -27,3 +27,7 @@
 #endif\r
 \r
 #include "Standalone/juce_StandaloneFilterApp.cpp"\r
+\r
+#if ! JUCE_USE_CUSTOM_AU3_STANDALONE_APP\r
+ START_JUCE_APPLICATION (StandaloneFilterApp);\r
+#endif\r
index ec7026151ffb9b01643c018b0ac3865e08ac5294..143e2e978ea857817705a9fa0772ac08c7381710 100644 (file)
@@ -45,7 +45,7 @@ struct PluginBusUtilities
     AudioBusArray&       getFilterBus (bool inputBus) noexcept         { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; }\r
     const AudioBusArray& getFilterBus (bool inputBus) const noexcept   { return inputBus ? processor.busArrangement.inputBuses : processor.busArrangement.outputBuses; }\r
     int getBusCount (bool inputBus) const noexcept                     { return getFilterBus (inputBus).size(); }\r
-    AudioChannelSet getChannelSet (bool inputBus, int bus) noexcept    { return getFilterBus (inputBus).getReference (bus).channels; }\r
+    AudioChannelSet getChannelSet (bool inp, int bus) noexcept         { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels : AudioChannelSet(); }\r
     int getNumChannels (bool inp, int bus) const noexcept              { return isPositiveAndBelow (bus, getBusCount (inp)) ? getFilterBus (inp).getReference (bus).channels.size() : 0; }\r
     bool isBusEnabled (bool inputBus, int bus) const noexcept          { return (getNumChannels (inputBus, bus) > 0); }\r
     bool hasInputs  (int bus) const noexcept                           { return isBusEnabled (true,  bus); }\r
index eb9d0628d77c95dc66b5be955403a605d2b90847..b779bf1d3f7b7efbef4c6e29714008d2c9fc9951 100644 (file)
   ==============================================================================\r
 */\r
 \r
-#ifndef DOXYGEN\r
- // @internal\r
- extern JUCE_API int* jucePlugInClientCurrentWrapperType;\r
-\r
- // this is ugly hack is needed by juce_getExecutableFile to have a wrapper\r
- // dependent symbol\r
- #define JUCE_DEFINE_WRAPPER_TYPE(x) JUCE_API int jucePlugInClientCurrentWrapperType_ ## x = static_cast<int> (AudioProcessor::x);\r
- #define JUCE_DECLARE_WRAPPER_TYPE(x) jucePlugInClientCurrentWrapperType = &jucePlugInClientCurrentWrapperType_ ## x;\r
-\r
-#endif\r
-\r
-\r
 //==============================================================================\r
 class PluginHostType\r
 {\r
@@ -190,15 +178,15 @@ public:
 \r
          @see AudioProcessor::wrapperType\r
     */\r
-    static AudioProcessor::WrapperType getPluginLoadedAs() noexcept\r
-    {\r
-        if (jucePlugInClientCurrentWrapperType != nullptr)\r
-            return static_cast<AudioProcessor::WrapperType> (*jucePlugInClientCurrentWrapperType);\r
-\r
-        return AudioProcessor::wrapperType_Undefined;\r
-    }\r
+    static AudioProcessor::WrapperType getPluginLoadedAs() noexcept    { return jucePlugInClientCurrentWrapperType; }\r
 \r
     //==============================================================================\r
+\r
+   #ifndef DOXYGEN\r
+    // @internal\r
+    static AudioProcessor::WrapperType jucePlugInClientCurrentWrapperType;\r
+   #endif\r
+\r
 private:\r
     static HostType getHostType()\r
     {\r
index d95c931191f9a248106aa93fe0ce4a2f654f2446..f9f4a2f29725103bace60bfa9569e46b0350a4cb 100644 (file)
@@ -32,7 +32,7 @@
 \r
 namespace juce\r
 {\r
-    int* jucePlugInClientCurrentWrapperType = nullptr;\r
+    AudioProcessor::WrapperType PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Undefined;\r
 }\r
 \r
 #if _MSC_VER || JUCE_MINGW\r
index c908d5fc551c4920655c05d5ff04f316c1d50ce2..a6f8f1e3b249f9094f6c9d80f2a63ef708f66ef0 100644 (file)
@@ -65,11 +65,11 @@ void AudioPluginFormatManager::addDefaultFormats()
     // you should only call this method once!\r
     for (int i = formats.size(); --i >= 0;)\r
     {\r
-       #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX)\r
+       #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)\r
         jassert (dynamic_cast<VSTPluginFormat*> (formats[i]) == nullptr);\r
        #endif\r
 \r
-       #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN)\r
+       #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)\r
         jassert (dynamic_cast<VST3PluginFormat*> (formats[i]) == nullptr);\r
        #endif\r
 \r
@@ -87,11 +87,11 @@ void AudioPluginFormatManager::addDefaultFormats()
     formats.add (new AudioUnitPluginFormat());\r
    #endif\r
 \r
-   #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX)\r
+   #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)\r
     formats.add (new VSTPluginFormat());\r
    #endif\r
 \r
-   #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN)\r
+   #if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)\r
     formats.add (new VST3PluginFormat());\r
    #endif\r
 \r
index a94e78285371687c0390da366bd6100888a4888e..552d4154f3fdf5560a4d7a6d7dac62e9dbbbed3c 100644 (file)
@@ -40,7 +40,9 @@
 #endif\r
 \r
 #ifndef JUCE_SUPPORTS_AUv3\r
- #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__\r
+ #if JUCE_COMPILER_SUPPORTS_VARIADIC_TEMPLATES && __OBJC2__  \\r
+      &&  ((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)) \\r
+       ||  (defined (__IPHONE_OS_VERSION_MIN_REQUIRED) && defined (__IPHONE_9_0)           && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0)))\r
   #define JUCE_SUPPORTS_AUv3 1\r
  #else\r
   #define JUCE_SUPPORTS_AUv3 0\r
@@ -340,50 +342,55 @@ public:
         jassert (AudioUnitFormatHelpers::insideCallback.get() == 0);\r
        #endif\r
 \r
-      #if JUCE_MAC\r
-        if (eventListenerRef != 0)\r
-        {\r
-            AUListenerDispose (eventListenerRef);\r
-            eventListenerRef = 0;\r
-        }\r
-      #endif\r
-\r
         if (audioUnit != nullptr)\r
         {\r
-            if (prepared)\r
-                releaseResources();\r
-\r
             struct AUDeleter : public CallbackMessage\r
             {\r
-                AUDeleter (AudioComponentInstance& inInstance, WaitableEvent& inEvent)\r
+                AUDeleter (AudioUnitPluginInstance& inInstance, WaitableEvent& inEvent)\r
                     : auInstance (inInstance), completionSignal (inEvent)\r
                 {}\r
 \r
                 void messageCallback() override\r
                 {\r
-                    AudioComponentInstanceDispose (auInstance);\r
-                    auInstance = nullptr;\r
+                    auInstance.cleanup();\r
                     completionSignal.signal();\r
                 }\r
 \r
-                AudioComponentInstance& auInstance;\r
+                AudioUnitPluginInstance& auInstance;\r
                 WaitableEvent& completionSignal;\r
             };\r
 \r
             if (MessageManager::getInstance()->isThisTheMessageThread())\r
             {\r
-                AudioComponentInstanceDispose (audioUnit);\r
-                audioUnit = nullptr;\r
+                cleanup();\r
             }\r
             else\r
             {\r
                 WaitableEvent completionEvent;\r
-                (new AUDeleter (audioUnit, completionEvent))->post();\r
+                (new AUDeleter (*this, completionEvent))->post();\r
                 completionEvent.wait();\r
             }\r
         }\r
     }\r
 \r
+    // called from the destructer above\r
+    void cleanup()\r
+    {\r
+       #if JUCE_MAC\r
+        if (eventListenerRef != 0)\r
+        {\r
+            AUListenerDispose (eventListenerRef);\r
+            eventListenerRef = 0;\r
+        }\r
+       #endif\r
+\r
+        if (prepared)\r
+            releaseResources();\r
+\r
+        AudioComponentInstanceDispose (audioUnit);\r
+        audioUnit = nullptr;\r
+    }\r
+\r
     bool initialise (double rate, int blockSize)\r
     {\r
         updateNumChannels();\r
index 06364100863ec0096dd178a8b33ceef65cec104e..3c5351953ccdbe9d3b219f1ed75d9fa6df6515fc 100644 (file)
@@ -154,7 +154,7 @@ static inline Steinberg::Vst::Speaker getSpeakerType (AudioChannelSet::ChannelTy
         case AudioChannelSet::surround:          return kSpeakerS;\r
         case AudioChannelSet::leftRearSurround:  return kSpeakerSl;\r
         case AudioChannelSet::rightRearSurround: return kSpeakerSr;\r
-        case AudioChannelSet::topMiddle:         return kSpeakerTm;\r
+        case AudioChannelSet::topMiddle:         return (1 << 11); /* kSpeakerTm */\r
         case AudioChannelSet::topFrontLeft:      return kSpeakerTfl;\r
         case AudioChannelSet::topFrontCentre:    return kSpeakerTfc;\r
         case AudioChannelSet::topFrontRight:     return kSpeakerTfr;\r
@@ -185,7 +185,7 @@ static inline AudioChannelSet::ChannelType getChannelType (Steinberg::Vst::Speak
         case kSpeakerS:     return AudioChannelSet::surround;\r
         case kSpeakerSl:    return AudioChannelSet::leftRearSurround;\r
         case kSpeakerSr:    return AudioChannelSet::rightRearSurround;\r
-        case kSpeakerTm:    return AudioChannelSet::topMiddle;\r
+        case (1 << 11):     return AudioChannelSet::topMiddle;  /* kSpeakerTm */\r
         case kSpeakerTfl:   return AudioChannelSet::topFrontLeft;\r
         case kSpeakerTfc:   return AudioChannelSet::topFrontCentre;\r
         case kSpeakerTfr:   return AudioChannelSet::topFrontRight;\r
index c5564db843b21f4a201a5c991ac9863fe646cf14..49dc270b667b5cc0811ed7c0f85ed2c1e587386e 100644 (file)
@@ -81,6 +81,7 @@
  #include <pluginterfaces/vst/ivstunits.h>\r
  #include <pluginterfaces/vst/ivstmidicontrollers.h>\r
  #include <public.sdk/source/common/memorystream.h>\r
+ #include <public.sdk/source/vst/vsteditcontroller.h>\r
 #else\r
  #include <base/source/baseiids.cpp>\r
  #include <base/source/fatomic.cpp>\r
@@ -128,6 +129,10 @@ namespace Steinberg
  #pragma clang diagnostic pop\r
 #endif\r
 \r
+#if JUCE_WINDOWS\r
+ #include <windows.h>\r
+#endif\r
+\r
 //==============================================================================\r
 #undef ASSERT\r
 #undef WARNING\r
index 43ffca299265616803dcde26bea16c777397312a..486bf02088087eddf71873873ee8e34781019752 100644 (file)
   ==============================================================================\r
 */\r
 \r
-#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN)\r
+#if JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)\r
 \r
 } // namespace juce\r
 \r
-#if JucePlugin_Build_VST3\r
- #undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY\r
- #define JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY 1\r
-#endif\r
-\r
 #include <map>\r
 #include "juce_VST3Headers.h"\r
 \r
-#undef JUCE_VST3HEADERS_INCLUDE_HEADERS_ONLY\r
-\r
 namespace juce\r
 {\r
 \r
@@ -405,7 +398,17 @@ public:
             return kResultFalse;\r
 \r
         owner->sendParamChangeMessageToListeners (index, (float) valueNormalized);\r
-        return owner->editController->setParamNormalized (paramID, valueNormalized);\r
+\r
+        {\r
+            Steinberg::int32 eventIndex;\r
+            owner->inputParameterChanges->addParameterData (paramID, eventIndex)->addPoint (0, valueNormalized, eventIndex);\r
+        }\r
+\r
+        // did the plug-in already update the parameter internally\r
+        if (owner->editController->getParamNormalized (paramID) != (float) valueNormalized)\r
+            return owner->editController->setParamNormalized (paramID, valueNormalized);\r
+\r
+        return kResultTrue;\r
     }\r
 \r
     tresult PLUGIN_API endEdit (Vst::ParamID paramID) override\r
@@ -693,8 +696,8 @@ public:
 \r
     tresult PLUGIN_API notifyProgramListChange (Vst::ProgramListID, Steinberg::int32) override\r
     {\r
-        jassertfalse;\r
-        return kResultFalse;\r
+        owner->syncProgramNames();\r
+        return kResultTrue;\r
     }\r
 \r
     //==============================================================================\r
@@ -1154,7 +1157,10 @@ struct DLLHandle
             if (GetFactoryProc proc = (GetFactoryProc) getFunction ("GetPluginFactory"))\r
                 factory = proc();\r
 \r
-        jassert (factory != nullptr); // The plugin NEEDS to provide a factory to be able to be called a VST3!\r
+        // The plugin NEEDS to provide a factory to be able to be called a VST3!\r
+        // Most likely you are trying to load a 32-bit VST3 from a 64-bit host\r
+        // or vice versa.\r
+        jassert (factory != nullptr);\r
         return factory;\r
     }\r
 \r
@@ -1590,6 +1596,7 @@ public:
       : module (handle),\r
         numInputAudioBusses (0),\r
         numOutputAudioBusses (0),\r
+        programParameterID ((Vst::ParamID) -1),\r
         inputParameterChanges (new ParamValueQueueList()),\r
         outputParameterChanges (new ParamValueQueueList()),\r
         midiInputs (new MidiEventList()),\r
@@ -1659,6 +1666,7 @@ public:
         grabInformationObjects();\r
         synchroniseStates();\r
         interconnectComponentAndController();\r
+        syncProgramNames();\r
         setupIO();\r
         return true;\r
     }\r
@@ -1947,25 +1955,34 @@ public:
     }\r
 \r
     //==============================================================================\r
-    int getNumPrograms() override                        { return getProgramListInfo (0).programCount; }\r
-    int getCurrentProgram() override                     { return 0; }\r
-    void setCurrentProgram (int) override                {}\r
+    int getNumPrograms() override                        { return programNames.size(); }\r
+    const String getProgramName (int index) override     { return programNames[index]; }\r
+    int getCurrentProgram() override                     { return jmax (0, (int) editController->getParamNormalized (programParameterID) * (programNames.size() - 1)); }\r
     void changeProgramName (int, const String&) override {}\r
 \r
-    const String getProgramName (int index) override\r
+    void setCurrentProgram (int program) override\r
     {\r
-        Vst::String128 result;\r
-        unitInfo->getProgramName (getProgramListInfo (0).id, index, result);\r
-        return toString (result);\r
+        if (programNames.size() > 0 && editController != nullptr)\r
+        {\r
+            Vst::ParamValue value =\r
+                static_cast<Vst::ParamValue> (program) / static_cast<Vst::ParamValue> (programNames.size());\r
+\r
+            editController->setParamNormalized (programParameterID, value);\r
+            Steinberg::int32 index;\r
+            inputParameterChanges->addParameterData (programParameterID, index)->addPoint (0, value, index);\r
+        }\r
     }\r
 \r
     //==============================================================================\r
     void reset() override\r
     {\r
-        if (component != nullptr)\r
+        if (component != nullptr && processor != nullptr)\r
         {\r
+            processor->setProcessing (false);\r
             component->setActive (false);\r
+\r
             component->setActive (true);\r
+            processor->setProcessing (true);\r
         }\r
     }\r
 \r
@@ -2022,18 +2039,18 @@ public:
     class ParamValueQueueList  : public Vst::IParameterChanges\r
     {\r
     public:\r
-        ParamValueQueueList() {}\r
+        ParamValueQueueList() : numQueuesUsed (0) {}\r
         virtual ~ParamValueQueueList() {}\r
 \r
         JUCE_DECLARE_VST3_COM_REF_METHODS\r
         JUCE_DECLARE_VST3_COM_QUERY_METHODS\r
 \r
-        Steinberg::int32 PLUGIN_API getParameterCount() override                                { return (Steinberg::int32) queues.size(); }\r
-        Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override    { return queues[(int) index]; }\r
+        Steinberg::int32 PLUGIN_API getParameterCount() override                                { return numQueuesUsed; }\r
+        Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override    { return isPositiveAndBelow (static_cast<int> (index), numQueuesUsed) ? queues[(int) index] : nullptr; }\r
 \r
         Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID& id, Steinberg::int32& index) override\r
         {\r
-            for (int i = queues.size(); --i >= 0;)\r
+            for (int i = numQueuesUsed; --i >= 0;)\r
             {\r
                 if (queues.getUnchecked (i)->getParameterId() == id)\r
                 {\r
@@ -2042,25 +2059,32 @@ public:
                 }\r
             }\r
 \r
-            index = getParameterCount();\r
-            return queues.add (new ParamValueQueue (id));\r
+            index = numQueuesUsed++;\r
+            ParamValueQueue* valueQueue = (index < queues.size() ? queues[index]\r
+                                                                 : queues.add (new ParamValueQueue));\r
+\r
+            valueQueue->clear();\r
+            valueQueue->setParamID (id);\r
+\r
+            return valueQueue;\r
         }\r
 \r
         void clearAllQueues() noexcept\r
         {\r
-            for (int i = queues.size(); --i >= 0;)\r
-                queues.getUnchecked (i)->clear();\r
+            numQueuesUsed = 0;\r
         }\r
 \r
         struct ParamValueQueue  : public Vst::IParamValueQueue\r
         {\r
-            ParamValueQueue (Vst::ParamID parameterID) : paramID (parameterID)\r
+            ParamValueQueue () : paramID (static_cast<Vst::ParamID> (-1))\r
             {\r
                 points.ensureStorageAllocated (1024);\r
             }\r
 \r
             virtual ~ParamValueQueue() {}\r
 \r
+            void setParamID (Vst::ParamID pID) noexcept    { paramID = pID; }\r
+\r
             JUCE_DECLARE_VST3_COM_REF_METHODS\r
             JUCE_DECLARE_VST3_COM_QUERY_METHODS\r
 \r
@@ -2112,7 +2136,7 @@ public:
             };\r
 \r
             Atomic<int> refCount;\r
-            const Vst::ParamID paramID;\r
+            Vst::ParamID paramID;\r
             Array<ParamPoint> points;\r
             CriticalSection pointLock;\r
 \r
@@ -2121,6 +2145,7 @@ public:
 \r
         Atomic<int> refCount;\r
         OwnedArray<ParamValueQueue> queues;\r
+        int numQueuesUsed;\r
 \r
         JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamValueQueueList)\r
     };\r
@@ -2160,6 +2185,9 @@ private:
     VST3FloatAndDoubleBusMapComposite inputBusMap, outputBusMap;\r
     Array<Vst::AudioBusBuffers> inputBusses, outputBusses;\r
 \r
+    StringArray programNames;\r
+    Vst::ParamID programParameterID;\r
+\r
     //==============================================================================\r
     template <typename Type>\r
     static void appendStateFrom (XmlElement& head, ComSmartPtr<Type>& object, const String& identifier)\r
@@ -2313,8 +2341,8 @@ private:
 \r
         if (componentConnection != nullptr && editControllerConnection != nullptr)\r
         {\r
-            warnOnFailure (editControllerConnection->connect (componentConnection));\r
             warnOnFailure (componentConnection->connect (editControllerConnection));\r
+            warnOnFailure (editControllerConnection->connect (componentConnection));\r
         }\r
     }\r
 \r
@@ -2380,6 +2408,7 @@ private:
         Vst::BusInfo busInfo;\r
         busInfo.mediaType = forAudio ? Vst::kAudio : Vst::kEvent;\r
         busInfo.direction = forInput ? Vst::kInput : Vst::kOutput;\r
+        busInfo.channelCount = 0;\r
 \r
         component->getBusInfo (busInfo.mediaType, busInfo.direction,\r
                                (Steinberg::int32) index, busInfo);\r
@@ -2446,6 +2475,77 @@ private:
         return paramInfo;\r
     }\r
 \r
+    void syncProgramNames ()\r
+    {\r
+        programNames.clear();\r
+\r
+        if (processor == nullptr || editController == nullptr)\r
+            return;\r
+\r
+        Vst::UnitID programUnitID;\r
+        Vst::ParameterInfo paramInfo = { 0 };\r
+\r
+        {\r
+            int idx, num = editController->getParameterCount();\r
+            for (idx = 0; idx < num; ++idx)\r
+                if (editController->getParameterInfo (idx, paramInfo) == kResultOk\r
+                     && (paramInfo.flags & Steinberg::Vst::ParameterInfo::kIsProgramChange) != 0)\r
+                    break;\r
+\r
+            if (idx >= num) return;\r
+\r
+            programParameterID = paramInfo.id;\r
+            programUnitID = paramInfo.unitId;\r
+        }\r
+\r
+        if (unitInfo != nullptr)\r
+        {\r
+            Vst::UnitInfo uInfo = { 0 };\r
+            const int unitCount = unitInfo->getUnitCount();\r
+\r
+            for (int idx = 0; idx < unitCount; ++idx)\r
+            {\r
+                if (unitInfo->getUnitInfo(idx, uInfo) == kResultOk\r
+                      && uInfo.id == programUnitID)\r
+                {\r
+                    const int programListCount = unitInfo->getProgramListCount();\r
+\r
+                    for (int j = 0; j < programListCount; ++j)\r
+                    {\r
+                        Vst::ProgramListInfo programListInfo = { 0 };\r
+\r
+                        if (unitInfo->getProgramListInfo (j, programListInfo) == kResultOk\r
+                              && programListInfo.id == uInfo.programListId)\r
+                        {\r
+                            Vst::String128 name;\r
+\r
+                            for (int k = 0; k < programListInfo.programCount; ++k)\r
+                                if (unitInfo->getProgramName (programListInfo.id, k, name) == kResultOk)\r
+                                    programNames.add (toString (name));\r
+\r
+                            return;\r
+                        }\r
+                    }\r
+\r
+                    break;\r
+                }\r
+            }\r
+        }\r
+\r
+        if (editController != nullptr\r
+               && paramInfo.stepCount > 0)\r
+        {\r
+            const int numPrograms = paramInfo.stepCount + 1;\r
+            for (int i = 0; i < numPrograms; ++i)\r
+            {\r
+                Vst::String128 programName;\r
+                Vst::ParamValue valueNormalized = static_cast<Vst::ParamValue> (i) / static_cast<Vst::ParamValue> (paramInfo.stepCount);\r
+                if (editController->getParamStringByValue (paramInfo.id, valueNormalized, programName) == kResultOk)\r
+                    programNames.add (toString (programName));\r
+            }\r
+        }\r
+    }\r
+\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VST3PluginInstance)\r
 };\r
 \r
index 6b1b9810ce6abce63efd8873c60d28fa96e04a08..e9650e292abdf586ecfc0fd39f761689e470e56e 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef JUCE_VST3PLUGINFORMAT_H_INCLUDED\r
 #define JUCE_VST3PLUGINFORMAT_H_INCLUDED\r
 \r
-#if (JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WIN)) || DOXYGEN\r
+#if (JUCE_PLUGINHOST_VST3 && (JUCE_MAC || JUCE_WINDOWS)) || DOXYGEN\r
 \r
 /**\r
     Implements a plugin format for VST3s.\r
index e8c53ce5100db84b549ce042b56e23a6795b738d..46adb5c00bebb2871a37774c4575bef70d6c5b5b 100644 (file)
@@ -22,7 +22,7 @@
   ==============================================================================\r
 */\r
 \r
-#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX)\r
+#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)\r
 \r
 //==============================================================================\r
 #if JUCE_MAC && JUCE_SUPPORT_CARBON\r
@@ -165,7 +165,7 @@ namespace
     {\r
        #if JUCE_WINDOWS\r
         return timeGetTime() * 1000000.0;\r
-       #elif JUCE_LINUX\r
+       #elif JUCE_LINUX || JUCE_IOS\r
         timeval micro;\r
         gettimeofday (&micro, 0);\r
         return micro.tv_usec * 1000.0;\r
@@ -342,7 +342,7 @@ public:
     }\r
 \r
     //==============================================================================\r
-    static ModuleHandle* findOrCreateModule (const File& file)\r
+    static Ptr findOrCreateModule (const File& file)\r
     {\r
         for (int i = getActiveModules().size(); --i >= 0;)\r
         {\r
@@ -352,33 +352,33 @@ public:
                 return module;\r
         }\r
 \r
-        _fpreset(); // (doesn't do any harm)\r
-\r
         const IdleCallRecursionPreventer icrp;\r
         shellUIDToCreate = 0;\r
+        _fpreset();\r
 \r
         JUCE_VST_LOG ("Attempting to load VST: " + file.getFullPathName());\r
 \r
-        ScopedPointer<ModuleHandle> m (new ModuleHandle (file));\r
-\r
-        if (! m->open())\r
-            m = nullptr;\r
+        Ptr m = new ModuleHandle (file, nullptr);\r
 \r
-        _fpreset(); // (doesn't do any harm)\r
+        if (m->open())\r
+        {\r
+            _fpreset();\r
+            return m;\r
+        }\r
 \r
-        return m.release();\r
+        return nullptr;\r
     }\r
 \r
     //==============================================================================\r
-    ModuleHandle (const File& f)\r
-        : file (f), moduleMain (nullptr), customMain (nullptr)\r
+    ModuleHandle (const File& f, MainCall customMainCall)\r
+        : file (f), moduleMain (customMainCall), customMain (nullptr)\r
          #if JUCE_MAC\r
            , resHandle (0), bundleRef (0), resFileId (0)\r
          #endif\r
     {\r
         getActiveModules().add (this);\r
 \r
-       #if JUCE_WINDOWS || JUCE_LINUX\r
+       #if JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS\r
         fullParentDirectoryPathName = f.getParentDirectory().getFullPathName();\r
        #elif JUCE_MAC\r
         FSRef ref;\r
@@ -394,12 +394,18 @@ public:
     }\r
 \r
     //==============================================================================\r
-#if JUCE_WINDOWS || JUCE_LINUX\r
-    DynamicLibrary module;\r
+   #if ! JUCE_MAC\r
     String fullParentDirectoryPathName;\r
+   #endif\r
+\r
+  #if JUCE_WINDOWS || JUCE_LINUX\r
+    DynamicLibrary module;\r
 \r
     bool open()\r
     {\r
+        if (moduleMain != nullptr)\r
+            return true;\r
+\r
         pluginName = file.getFileNameWithoutExtension();\r
 \r
         module.open (file.getFullPathName());\r
@@ -457,14 +463,20 @@ public:
         return String();\r
     }\r
    #endif\r
-#else\r
+  #else\r
     Handle resHandle;\r
     CFBundleRef bundleRef;\r
+\r
+   #if JUCE_MAC\r
+    CFBundleRefNum resFileId;\r
     FSSpec parentDirFSSpec;\r
-    ResFileRefNum resFileId;\r
+   #endif\r
 \r
     bool open()\r
     {\r
+        if (moduleMain != nullptr)\r
+            return true;\r
+\r
         bool ok = false;\r
 \r
         if (file.hasFileExtension (".vst"))\r
@@ -504,13 +516,18 @@ public:
                             if (pluginName.isEmpty())\r
                                 pluginName = file.getFileNameWithoutExtension();\r
 \r
+                           #if JUCE_MAC\r
                             resFileId = CFBundleOpenBundleResourceMap (bundleRef);\r
+                           #endif\r
 \r
                             ok = true;\r
 \r
                             Array<File> vstXmlFiles;\r
-                            file.getChildFile ("Contents")\r
+                            file\r
+                               #if JUCE_MAC\r
+                                .getChildFile ("Contents")\r
                                 .getChildFile ("Resources")\r
+                               #endif\r
                                 .findChildFiles (vstXmlFiles, File::findFiles, false, "*.vstxml");\r
 \r
                             if (vstXmlFiles.size() > 0)\r
@@ -535,7 +552,9 @@ public:
     {\r
         if (bundleRef != 0)\r
         {\r
+           #if JUCE_MAC\r
             CFBundleCloseBundleResourceMap (bundleRef, resFileId);\r
+           #endif\r
 \r
             if (CFGetRetainCount (bundleRef) == 1)\r
                 CFBundleUnloadExecutable (bundleRef);\r
@@ -550,7 +569,7 @@ public:
         eff->dispatcher (eff, effClose, 0, 0, 0, 0);\r
     }\r
 \r
-#endif\r
+  #endif\r
 \r
 private:\r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle)\r
@@ -615,6 +634,7 @@ public:
     ~VSTPluginInstance()\r
     {\r
         const ScopedLock sl (lock);\r
+        stopTimer();\r
 \r
         if (effect != nullptr && effect->magic == kEffectMagic)\r
         {\r
@@ -668,6 +688,18 @@ public:
         desc.isInstrument = (effect != nullptr && (effect->flags & effFlagsIsSynth) != 0);\r
     }\r
 \r
+    bool initialiseEffect (double initialSampleRate, int initialBlockSize)\r
+    {\r
+        if (effect != nullptr)\r
+        {\r
+            effect->resvd2 = (VstIntPtr) (pointer_sized_int) this;\r
+            initialise (initialSampleRate, initialBlockSize);\r
+            return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
     void initialise (double initialSampleRate, int initialBlockSize)\r
     {\r
         if (initialised || effect == nullptr)\r
@@ -714,7 +746,7 @@ public:
         wantsMidiMessages = pluginCanDo ("receiveVstMidiEvent") > 0;\r
 \r
        #if JUCE_MAC && JUCE_SUPPORT_CARBON\r
-        usesCocoaNSView = (pluginCanDo ("hasCockosViewAsConfig") & (int) 0xffff0000) == 0xbeef0000;\r
+        usesCocoaNSView = ((unsigned int) pluginCanDo ("hasCockosViewAsConfig") & 0xffff0000ul) == 0xbeef0000ul;\r
        #endif\r
 \r
         setLatencySamples (effect->initialDelay);\r
@@ -856,7 +888,12 @@ public:
     }\r
 \r
     //==============================================================================\r
+   #if JUCE_IOS\r
+    bool hasEditor() const override                  { return false; }\r
+   #else\r
     bool hasEditor() const override                  { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; }\r
+   #endif\r
+\r
     AudioProcessorEditor* createEditor() override;\r
 \r
     //==============================================================================\r
@@ -1787,6 +1824,7 @@ private:
 };\r
 \r
 //==============================================================================\r
+#if ! JUCE_IOS\r
 class VSTPluginWindow;\r
 static Array<VSTPluginWindow*> activeVSTWindows;\r
 \r
@@ -2525,7 +2563,7 @@ private:
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow)\r
 };\r
-\r
+#endif\r
 #if JUCE_MSVC\r
  #pragma warning (pop)\r
 #endif\r
@@ -2533,8 +2571,12 @@ private:
 //==============================================================================\r
 AudioProcessorEditor* VSTPluginInstance::createEditor()\r
 {\r
+   #if JUCE_IOS\r
+    return nullptr;\r
+   #else\r
     return hasEditor() ? new VSTPluginWindow (*this)\r
                        : nullptr;\r
+   #endif\r
 }\r
 \r
 //==============================================================================\r
@@ -2647,12 +2689,7 @@ void VSTPluginFormat::createPluginInstance (const PluginDescription& desc,
 \r
             result = new VSTPluginInstance (module);\r
 \r
-            if (result->effect != nullptr)\r
-            {\r
-                result->effect->resvd2 = (VstIntPtr) (pointer_sized_int) (VSTPluginInstance*) result;\r
-                result->initialise (sampleRate, blockSize);\r
-            }\r
-            else\r
+            if (! result->initialiseEffect (sampleRate, blockSize))\r
                 result = nullptr;\r
         }\r
 \r
@@ -2676,7 +2713,7 @@ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdenti
 {\r
     const File f (File::createFileWithoutCheckingPath (fileOrIdentifier));\r
 \r
-  #if JUCE_MAC\r
+  #if JUCE_MAC || JUCE_IOS\r
     return f.isDirectory() && f.hasFileExtension (".vst");\r
   #elif JUCE_WINDOWS\r
     return f.existsAsFile() && f.hasFileExtension (".dll");\r
@@ -2751,6 +2788,19 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch()
     paths.add (WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\Software\\VST\\VSTPluginsPath",\r
                                           programFiles + "\\VstPlugins"));\r
     return paths;\r
+   #elif JUCE_IOS\r
+    // on iOS you can only load plug-ins inside the hosts bundle folder\r
+    CFURLRef relativePluginDir = CFBundleCopyBuiltInPlugInsURL (CFBundleGetMainBundle());\r
+    CFURLRef pluginDir = CFURLCopyAbsoluteURL (relativePluginDir);\r
+    CFRelease (relativePluginDir);\r
+\r
+    CFStringRef path = CFURLCopyFileSystemPath (pluginDir, kCFURLPOSIXPathStyle);\r
+    CFRelease (pluginDir);\r
+\r
+    FileSearchPath retval (String (CFStringGetCStringPtr (path, kCFStringEncodingUTF8)));\r
+    CFRelease (path);\r
+\r
+    return retval;\r
    #endif\r
 }\r
 \r
@@ -2795,6 +2845,22 @@ bool VSTPluginFormat::setChunkData (AudioPluginInstance* plugin, const void* dat
     return false;\r
 }\r
 \r
+AudioPluginInstance* VSTPluginFormat::createCustomVSTFromMainCall (void* entryPointFunction,\r
+                                                                   double initialSampleRate, int initialBufferSize)\r
+{\r
+    ModuleHandle::Ptr module = new ModuleHandle (File(), (MainCall) entryPointFunction);\r
+\r
+    if (module->open())\r
+    {\r
+        ScopedPointer<VSTPluginInstance> result (new VSTPluginInstance (module));\r
+\r
+        if (result->initialiseEffect (initialSampleRate, initialBufferSize))\r
+            return result.release();\r
+    }\r
+\r
+    return nullptr;\r
+}\r
+\r
 void VSTPluginFormat::setExtraFunctions (AudioPluginInstance* plugin, ExtraFunctions* functions)\r
 {\r
     ScopedPointer<ExtraFunctions> f (functions);\r
index dc6ad74975e4077a8cc0d9a8367844c77c344778..02f4a57f57afd7a6e5706622593ea9986ff49ad4 100644 (file)
@@ -22,7 +22,7 @@
   ==============================================================================\r
 */\r
 \r
-#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WIN || JUCE_LINUX)) || DOXYGEN\r
+#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)) || DOXYGEN\r
 \r
 //==============================================================================\r
 /**\r
@@ -53,6 +53,13 @@ public:
     /** Attempts to set a VST's state from a chunk of memory. */\r
     static bool setChunkData (AudioPluginInstance* plugin, const void* data, int size, bool isPreset);\r
 \r
+    /** Given a suitable function pointer to a VSTPluginMain function, this will attempt to\r
+        instantiate and return a plugin for it.\r
+    */\r
+    static AudioPluginInstance* createCustomVSTFromMainCall (void* entryPointFunction,\r
+                                                             double initialSampleRate,\r
+                                                             int initialBufferSize);\r
+\r
     //==============================================================================\r
     /** Base class for some extra functions that can be attached to a VST plugin instance. */\r
     class ExtraFunctions\r
index 2c775db42609f566db2f7ecb02f90a07727cd474..3d72d4b0feb1bd3f2f08f2247b46d0f1eac8f991 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_processors\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE audio processor classes\r
   description:      Classes for loading and playing VST, AU, or internally-generated audio processors.\r
   website:          http://www.juce.com/juce\r
index 3873647d09e6d24d44aef4610b57fdaedf27728d..e12a2263caf2a4605e1649cf647746e188c65c87 100644 (file)
@@ -208,6 +208,13 @@ void AudioChannelSet::addChannel (ChannelType newChannel)
     channels.setBit (bit);\r
 }\r
 \r
+void AudioChannelSet::removeChannel (ChannelType newChannel)\r
+{\r
+    const int bit = static_cast<int> (newChannel);\r
+    jassert (bit >= 0 && bit < 1024);\r
+    channels.clearBit (bit);\r
+}\r
+\r
 AudioChannelSet AudioChannelSet::disabled()           { return AudioChannelSet(); }\r
 AudioChannelSet AudioChannelSet::mono()               { return AudioChannelSet (1u << centre); }\r
 AudioChannelSet AudioChannelSet::stereo()             { return AudioChannelSet ((1u << left) | (1u << right)); }\r
index 3bfc2c626a94a7d88b04782829137c78eae752bc..8af8f877914f99f02b8c54968aeed8a2e2f8cbf3 100644 (file)
@@ -166,10 +166,13 @@ public:
     /** Adds a channel to the set. */\r
     void addChannel (ChannelType newChannelType);\r
 \r
+    /** Removes a channel from the set. */\r
+    void removeChannel (ChannelType newChannelType);\r
+\r
     /** Returns the number of channels in the set. */\r
     int size() const noexcept;\r
 \r
-    /** Returns the number of channels in the set. */\r
+    /** Returns true if there are no channels in the set. */\r
     bool isDisabled() const noexcept                    { return size() == 0; }\r
 \r
     /** Returns an array of all the types in this channel set. */\r
@@ -195,6 +198,9 @@ public:
     /** Returns if this is a channel layout made-up of discrete channels. */\r
     bool isDiscreteLayout() const noexcept;\r
 \r
+    /** Intersect two channel layouts. */\r
+    void intersect (const AudioChannelSet& other)      { channels &= other.channels; }\r
+\r
     //==============================================================================\r
     bool operator== (const AudioChannelSet&) const noexcept;\r
     bool operator!= (const AudioChannelSet&) const noexcept;\r
index a5f4a79db0c96ff2ba3450c6bc51303185962a87..b7eed3b59bb3e582d3fdc496a83f4833cf9572cd 100644 (file)
@@ -292,6 +292,15 @@ const String AudioProcessor::getParameterName (int index)
     return String();\r
 }\r
 \r
+String AudioProcessor::getParameterID (int index)\r
+{\r
+    // Don't use getParamChecked here, as this must also work for legacy plug-ins\r
+    if (AudioProcessorParameterWithID* p = dynamic_cast<AudioProcessorParameterWithID*> (managedParameters[index]))\r
+        return p->paramID;\r
+\r
+    return String (index);\r
+}\r
+\r
 String AudioProcessor::getParameterName (int index, int maximumStringLength)\r
 {\r
     if (AudioProcessorParameter* p = managedParameters[index])\r
@@ -394,8 +403,16 @@ void AudioProcessor::suspendProcessing (const bool shouldBeSuspended)
 }\r
 \r
 void AudioProcessor::reset() {}\r
-void AudioProcessor::processBlockBypassed (AudioBuffer<float>&, MidiBuffer&) {}\r
-void AudioProcessor::processBlockBypassed (AudioBuffer<double>&, MidiBuffer&) {}\r
+\r
+template <typename floatType>\r
+void AudioProcessor::processBypassed (AudioBuffer<floatType>& buffer, MidiBuffer&)\r
+{\r
+    for (int ch = getMainBusNumInputChannels(); ch < getTotalNumOutputChannels(); ++ch)\r
+        buffer.clear (ch, 0, buffer.getNumSamples());\r
+}\r
+\r
+void AudioProcessor::processBlockBypassed (AudioBuffer<float>&  buffer, MidiBuffer& midi)    { processBypassed (buffer, midi); }\r
+void AudioProcessor::processBlockBypassed (AudioBuffer<double>& buffer, MidiBuffer& midi)    { processBypassed (buffer, midi); }\r
 \r
 void AudioProcessor::processBlock (AudioBuffer<double>& buffer, MidiBuffer& midiMessages)\r
 {\r
index cabb2772b0be289480e0734f2a5430e925aa0dd0..c997050042b605a4c19ea721fa99cfa6f4e70b47 100644 (file)
@@ -611,6 +611,17 @@ public:
     */\r
     virtual const String getParameterName (int parameterIndex);\r
 \r
+    /** Returns the ID of a particular parameter.\r
+\r
+        The ID is used to communicate the value or mapping of a particular parameter with\r
+        the host. By default this method will simply return a string representation of\r
+        index.\r
+\r
+        NOTE! This method will eventually be deprecated! It's recommended that you use the\r
+        AudioProcessorParameterWithID class instead to manage your parameters.\r
+     */\r
+    virtual String getParameterID (int index);\r
+\r
     /** Called by the host to find out the value of one of the filter's parameters.\r
 \r
         The host will expect the value returned to be between 0 and 1.0.\r
@@ -628,7 +639,7 @@ public:
         If you want to provide customised short versions of your parameter names that\r
         will look better in constrained spaces (e.g. the displays on hardware controller\r
         devices or mixing desks) then you should implement this method.\r
-        If you don't override it, the default implementation will call getParameterText(int),\r
+        If you don't override it, the default implementation will call getParameterName(int),\r
         and truncate the result.\r
 \r
         NOTE! This method will eventually be deprecated! It's recommended that you use\r
@@ -1002,6 +1013,9 @@ private:
     void disableNonMainBuses (bool isInput);\r
     void updateSpeakerFormatStrings();\r
 \r
+    template <typename floatType>\r
+    void processBypassed (AudioBuffer<floatType>&, MidiBuffer&);\r
+\r
     // This method is no longer used - you can delete it from your AudioProcessor classes.\r
     JUCE_DEPRECATED_WITH_BODY (virtual bool silenceInProducesSilenceOut() const, { return false; });\r
 \r
index 07f865e82aafbedf04f272a42fa9d3a9200699c1..344d8c4e82b730c630591b5d4720bceaf2d5515a 100644 (file)
   ==============================================================================\r
 */\r
 \r
-AudioProcessorEditor::AudioProcessorEditor (AudioProcessor& p) noexcept  : processor (p)\r
+AudioProcessorEditor::AudioProcessorEditor (AudioProcessor& p) noexcept  : processor (p), constrainer (nullptr)\r
 {\r
+    initialise();\r
 }\r
 \r
-AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept  : processor (*p)\r
+AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* p) noexcept  : processor (*p), constrainer (nullptr)\r
 {\r
     // the filter must be valid..\r
     jassert (p != nullptr);\r
+    initialise();\r
 }\r
 \r
 AudioProcessorEditor::~AudioProcessorEditor()\r
@@ -37,7 +39,132 @@ AudioProcessorEditor::~AudioProcessorEditor()
     // if this fails, then the wrapper hasn't called editorBeingDeleted() on the\r
     // filter for some reason..\r
     jassert (processor.getActiveEditor() != this);\r
+    removeComponentListener (resizeListener);\r
 }\r
 \r
 void AudioProcessorEditor::setControlHighlight (ParameterControlHighlightInfo) {}\r
 int AudioProcessorEditor::getControlParameterIndex (Component&)  { return -1; }\r
+\r
+void AudioProcessorEditor::initialise()\r
+{\r
+    resizable = false;\r
+\r
+    attachConstrainer (&defaultConstrainer);\r
+    addComponentListener (resizeListener = new AudioProcessorEditorListener (this));\r
+}\r
+\r
+//==============================================================================\r
+void AudioProcessorEditor::setResizable (const bool shouldBeResizable, const bool useBottomRightCornerResizer)\r
+{\r
+    if (shouldBeResizable != resizable)\r
+    {\r
+        resizable = shouldBeResizable;\r
+\r
+        if (! resizable)\r
+        {\r
+            setConstrainer (&defaultConstrainer);\r
+\r
+            if (getWidth() > 0 && getHeight() > 0)\r
+            {\r
+                defaultConstrainer.setSizeLimits (getWidth(), getHeight(), getWidth(), getHeight());\r
+                resized();\r
+            }\r
+        }\r
+    }\r
+\r
+    const bool shouldHaveCornerResizer = (useBottomRightCornerResizer && shouldBeResizable);\r
+    if (shouldHaveCornerResizer != (resizableCorner != nullptr))\r
+    {\r
+        if (shouldHaveCornerResizer)\r
+        {\r
+            Component::addChildComponent (resizableCorner = new ResizableCornerComponent (this, constrainer));\r
+            resizableCorner->setAlwaysOnTop (true);\r
+        }\r
+        else\r
+            resizableCorner = nullptr;\r
+    }\r
+}\r
+\r
+void AudioProcessorEditor::setResizeLimits (const int newMinimumWidth,\r
+                                            const int newMinimumHeight,\r
+                                            const int newMaximumWidth,\r
+                                            const int newMaximumHeight) noexcept\r
+{\r
+    // if you've set up a custom constrainer then these settings won't have any effect..\r
+    jassert (constrainer == &defaultConstrainer || constrainer == nullptr);\r
+\r
+    const bool shouldEnableResize      = (newMinimumWidth != newMaximumWidth || newMinimumHeight != newMaximumHeight);\r
+    const bool shouldHaveCornerResizer = (shouldEnableResize != resizable    || resizableCorner != nullptr);\r
+\r
+    setResizable (shouldEnableResize, shouldHaveCornerResizer);\r
+\r
+    if (constrainer == nullptr)\r
+        setConstrainer (&defaultConstrainer);\r
+\r
+    defaultConstrainer.setSizeLimits (newMinimumWidth, newMinimumHeight,\r
+                                      newMaximumWidth, newMaximumHeight);\r
+\r
+    setBoundsConstrained (getBounds());\r
+}\r
+\r
+void AudioProcessorEditor::setConstrainer (ComponentBoundsConstrainer* newConstrainer)\r
+{\r
+    if (constrainer != newConstrainer)\r
+    {\r
+        resizable = true;\r
+        attachConstrainer (newConstrainer);\r
+    }\r
+}\r
+\r
+void AudioProcessorEditor::attachConstrainer (ComponentBoundsConstrainer* newConstrainer)\r
+{\r
+    if (constrainer != newConstrainer)\r
+    {\r
+        constrainer = newConstrainer;\r
+        updatePeer();\r
+    }\r
+}\r
+\r
+void AudioProcessorEditor::setBoundsConstrained (Rectangle<int> newBounds)\r
+{\r
+    if (constrainer != nullptr)\r
+        constrainer->setBoundsForComponent (this, newBounds, false, false, false, false);\r
+    else\r
+        setBounds (newBounds);\r
+}\r
+\r
+void AudioProcessorEditor::editorResized (bool wasResized)\r
+{\r
+    if (wasResized)\r
+    {\r
+        bool resizerHidden = false;\r
+\r
+        if (ComponentPeer* peer = getPeer())\r
+            resizerHidden = peer->isFullScreen() || peer->isKioskMode();\r
+\r
+        if (resizableCorner != nullptr)\r
+        {\r
+           resizableCorner->setVisible (! resizerHidden);\r
+\r
+            const int resizerSize = 18;\r
+            resizableCorner->setBounds (getWidth() - resizerSize,\r
+                                        getHeight() - resizerSize,\r
+                                        resizerSize, resizerSize);\r
+        }\r
+\r
+\r
+        if (! resizable)\r
+        {\r
+            if (getWidth() > 0 && getHeight() > 0)\r
+                defaultConstrainer.setSizeLimits (getWidth(), getHeight(),\r
+                                                  getWidth(), getHeight());\r
+        }\r
+    }\r
+}\r
+\r
+void AudioProcessorEditor::updatePeer()\r
+{\r
+    if (isOnDesktop())\r
+        if (ComponentPeer* const peer = getPeer())\r
+            peer->setConstrainer (constrainer);\r
+}\r
index e043c37beb7a7205aa5c22bf2ffa0d45efe75921..e28de0a348cca1aa9c70f8aec1a7b7262f9472bb 100644 (file)
@@ -25,7 +25,7 @@
 #ifndef JUCE_AUDIOPROCESSOREDITOR_H_INCLUDED\r
 #define JUCE_AUDIOPROCESSOREDITOR_H_INCLUDED\r
 \r
-\r
+class AudioProcessorEditorListener;\r
 //==============================================================================\r
 /**\r
     Base class for the component that acts as the GUI for an AudioProcessor.\r
@@ -84,7 +84,83 @@ public:
     */\r
     virtual int getControlParameterIndex (Component&);\r
 \r
+    //==============================================================================\r
+    /** Make the editor resizable or fixed.\r
+\r
+        @param shouldBeResizable   whether it's resizable at all\r
+        @see setResizeLimits, isResizable\r
+    */\r
+    void setResizable (bool shouldBeResizable, bool useBottomRightCornerResizer);\r
+\r
+    /** Returns true if resizing is enabled.\r
+\r
+        @see setResizable\r
+    */\r
+    bool isResizable() const noexcept      { return resizable; }\r
+\r
+    /** This sets the maximum and minimum sizes for the window.\r
+\r
+        If the window's current size is outside these limits, it will be resized to\r
+        make sure it's within them.\r
+\r
+        A direct call to setBounds() will bypass any constraint checks, but when the\r
+        window is dragged by the user or resized by other indirect means, the constrainer\r
+        will limit the numbers involved.\r
+\r
+        @see setResizable\r
+    */\r
+    void setResizeLimits (int newMinimumWidth,\r
+                          int newMinimumHeight,\r
+                          int newMaximumWidth,\r
+                          int newMaximumHeight) noexcept;\r
+\r
+\r
+    /** Returns the bounds constrainer object that this window is using.\r
+        You can access this to change its properties.\r
+    */\r
+    ComponentBoundsConstrainer* getConstrainer() noexcept           { return constrainer; }\r
+\r
+    /** Sets the bounds-constrainer object to use for resizing and dragging this window.\r
+\r
+        A pointer to the object you pass in will be kept, but it won't be deleted\r
+        by this object, so it's the caller's responsibility to manage it.\r
+\r
+        If you pass a nullptr, then no contraints will be placed on the positioning of the window.\r
+    */\r
+    void setConstrainer (ComponentBoundsConstrainer* newConstrainer);\r
+\r
+    /** Calls the window's setBounds method, after first checking these bounds\r
+        with the current constrainer.\r
+\r
+        @see setConstrainer\r
+     */\r
+    void setBoundsConstrained (Rectangle<int> newBounds);\r
+\r
+    ScopedPointer<ResizableCornerComponent> resizableCorner;\r
+\r
 private:\r
+    //==============================================================================\r
+    struct AudioProcessorEditorListener : ComponentListener\r
+    {\r
+        AudioProcessorEditorListener (AudioProcessorEditor* audioEditor) : e (audioEditor) {}\r
+\r
+        void componentMovedOrResized (Component&, bool, bool wasResized) override   { e->editorResized (wasResized); }\r
+        void componentParentHierarchyChanged (Component&) override                  { e->updatePeer(); }\r
+        AudioProcessorEditor* e;\r
+    };\r
+\r
+    //==============================================================================\r
+    void initialise();\r
+    void editorResized (bool wasResized);\r
+    void updatePeer();\r
+    void attachConstrainer (ComponentBoundsConstrainer* newConstrainer);\r
+\r
+    //==============================================================================\r
+    ScopedPointer<AudioProcessorEditorListener> resizeListener;\r
+    bool resizable;\r
+    ComponentBoundsConstrainer defaultConstrainer;\r
+    ComponentBoundsConstrainer* constrainer;\r
+\r
     JUCE_DECLARE_NON_COPYABLE (AudioProcessorEditor)\r
 };\r
 \r
index e1ba865af20978f34bce78d51d471e61d2997e5a..a8918a73184b09cdca9375a9952b601c0f7d9041 100644 (file)
@@ -105,6 +105,16 @@ private:
             }\r
         }\r
 \r
+        void startedDragging() override\r
+        {\r
+            owner.beginParameterChangeGesture(index);\r
+        }\r
+\r
+        void stoppedDragging() override\r
+        {\r
+            owner.endParameterChangeGesture(index);\r
+        }\r
+\r
         String getTextFromValue (double /*value*/) override\r
         {\r
             return owner.getParameterText (index) + " " + owner.getParameterLabel (index).trimEnd();\r
index b53aae35c3019fed28b5503804bf2eb11de0771d..5d45ac6ea931602291041024c835f2dba47dac4d 100644 (file)
@@ -27,6 +27,8 @@ KnownPluginList::~KnownPluginList() {}
 \r
 void KnownPluginList::clear()\r
 {\r
+    ScopedLock lock (typesArrayLock);\r
+\r
     if (types.size() > 0)\r
     {\r
         types.clear();\r
@@ -36,6 +38,8 @@ void KnownPluginList::clear()
 \r
 PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifier) const\r
 {\r
+    ScopedLock lock (typesArrayLock);\r
+\r
     for (int i = 0; i < types.size(); ++i)\r
         if (types.getUnchecked(i)->fileOrIdentifier == fileOrIdentifier)\r
             return types.getUnchecked(i);\r
@@ -45,6 +49,8 @@ PluginDescription* KnownPluginList::getTypeForFile (const String& fileOrIdentifi
 \r
 PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& identifierString) const\r
 {\r
+    ScopedLock lock (typesArrayLock);\r
+\r
     for (int i = 0; i < types.size(); ++i)\r
         if (types.getUnchecked(i)->matchesIdentifierString (identifierString))\r
             return types.getUnchecked(i);\r
@@ -54,27 +60,37 @@ PluginDescription* KnownPluginList::getTypeForIdentifierString (const String& id
 \r
 bool KnownPluginList::addType (const PluginDescription& type)\r
 {\r
-    for (int i = types.size(); --i >= 0;)\r
     {\r
-        if (types.getUnchecked(i)->isDuplicateOf (type))\r
+        ScopedLock lock (typesArrayLock);\r
+\r
+        for (int i = types.size(); --i >= 0;)\r
         {\r
-            // strange - found a duplicate plugin with different info..\r
-            jassert (types.getUnchecked(i)->name == type.name);\r
-            jassert (types.getUnchecked(i)->isInstrument == type.isInstrument);\r
+            if (types.getUnchecked(i)->isDuplicateOf (type))\r
+            {\r
+                // strange - found a duplicate plugin with different info..\r
+                jassert (types.getUnchecked(i)->name == type.name);\r
+                jassert (types.getUnchecked(i)->isInstrument == type.isInstrument);\r
 \r
-            *types.getUnchecked(i) = type;\r
-            return false;\r
+                *types.getUnchecked(i) = type;\r
+                return false;\r
+            }\r
         }\r
+\r
+        types.insert (0, new PluginDescription (type));\r
     }\r
 \r
-    types.insert (0, new PluginDescription (type));\r
     sendChangeMessage();\r
     return true;\r
 }\r
 \r
 void KnownPluginList::removeType (const int index)\r
 {\r
-    types.remove (index);\r
+    {\r
+        ScopedLock lock (typesArrayLock);\r
+\r
+        types.remove (index);\r
+    }\r
+\r
     sendChangeMessage();\r
 }\r
 \r
@@ -84,6 +100,8 @@ bool KnownPluginList::isListingUpToDate (const String& fileOrIdentifier,
     if (getTypeForFile (fileOrIdentifier) == nullptr)\r
         return false;\r
 \r
+    ScopedLock lock (typesArrayLock);\r
+\r
     for (int i = types.size(); --i >= 0;)\r
     {\r
         const PluginDescription* const d = types.getUnchecked(i);\r
@@ -113,6 +131,8 @@ bool KnownPluginList::scanAndAddFile (const String& fileOrIdentifier,
     {\r
         bool needsRescanning = false;\r
 \r
+        ScopedLock lock (typesArrayLock);\r
+\r
         for (int i = types.size(); --i >= 0;)\r
         {\r
             const PluginDescription* const d = types.getUnchecked(i);\r
@@ -298,12 +318,17 @@ void KnownPluginList::sort (const SortMethod method, bool forwards)
     if (method != defaultOrder)\r
     {\r
         Array<PluginDescription*> oldOrder, newOrder;\r
-        oldOrder.addArray (types);\r
 \r
-        PluginSorter sorter (method, forwards);\r
-        types.sort (sorter, true);\r
+        {\r
+            ScopedLock lock (typesArrayLock);\r
+\r
+            oldOrder.addArray (types);\r
+\r
+            PluginSorter sorter (method, forwards);\r
+            types.sort (sorter, true);\r
 \r
-        newOrder.addArray (types);\r
+            newOrder.addArray (types);\r
+        }\r
 \r
         if (oldOrder != newOrder)\r
             sendChangeMessage();\r
@@ -315,8 +340,12 @@ XmlElement* KnownPluginList::createXml() const
 {\r
     XmlElement* const e = new XmlElement ("KNOWNPLUGINS");\r
 \r
-    for (int i = types.size(); --i >= 0;)\r
-        e->prependChildElement (types.getUnchecked(i)->createXml());\r
+    {\r
+        ScopedLock lock (typesArrayLock);\r
+\r
+        for (int i = types.size(); --i >= 0;)\r
+            e->prependChildElement (types.getUnchecked(i)->createXml());\r
+    }\r
 \r
     for (int i = 0; i < blacklist.size(); ++i)\r
         e->createNewChildElement ("BLACKLISTED")->setAttribute ("id", blacklist[i]);\r
@@ -516,6 +545,7 @@ KnownPluginList::PluginTree* KnownPluginList::createTree (const SortMethod sortM
     Array<PluginDescription*> sorted;\r
 \r
     {\r
+        ScopedLock lock (typesArrayLock);\r
         PluginSorter sorter (sortMethod, true);\r
 \r
         for (int i = 0; i < types.size(); ++i)\r
index 252c5426ff6511ed2033815c2cff980ea323093c..7be3c7617d81e535681812216c22015968aae59d 100644 (file)
@@ -216,7 +216,7 @@ private:
     OwnedArray<PluginDescription> types;\r
     StringArray blacklist;\r
     ScopedPointer<CustomScanner> scanner;\r
-    CriticalSection scanLock;\r
+    CriticalSection scanLock, typesArrayLock;\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (KnownPluginList)\r
 };\r
index 37adaa376cae890db904343f21a22a0ec8f8d442..a321a5da3032307bca61433a829c26f666650ed4 100644 (file)
@@ -348,8 +348,10 @@ public:
 \r
         if (path.getNumPaths() > 0) // if the path is empty, then paths aren't used for this format.\r
         {\r
+           #if ! JUCE_IOS\r
             if (propertiesToUse != nullptr)\r
                 path = getLastSearchPath (*propertiesToUse, formatToScan);\r
+           #endif\r
 \r
             pathList.setSize (500, 300);\r
             pathList.setPath (path);\r
index 3d242df34422d59e5733c52816bd53bf722b9c3f..1cbbadd92cc9e07f3856fbf6a587ad07d844e62d 100644 (file)
@@ -25,7 +25,7 @@
 #if JUCE_COMPILER_SUPPORTS_LAMBDAS\r
 \r
 //==============================================================================\r
-struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParameter,\r
+struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParameterWithID,\r
                                                    private ValueTree::Listener\r
 {\r
     Parameter (AudioProcessorValueTreeState& s,\r
@@ -33,7 +33,8 @@ struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParamete
                NormalisableRange<float> r, float defaultVal,\r
                std::function<String (float)> valueToText,\r
                std::function<float (const String&)> textToValue)\r
-        : owner (s), paramID (parameterID), name (paramName), label (labelText),\r
+        : AudioProcessorParameterWithID (parameterID, paramName),\r
+          owner (s), label (labelText),\r
           valueToTextFunction (valueToText),\r
           textToValueFunction (textToValue),\r
           range (r), value (defaultVal), defaultValue (defaultVal),\r
@@ -51,7 +52,6 @@ struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParamete
 \r
     float getValue() const override                             { return range.convertTo0to1 (value); }\r
     float getDefaultValue() const override                      { return range.convertTo0to1 (defaultValue); }\r
-    String getName (int maximumStringLength) const override     { return name.substring (0, maximumStringLength); }\r
     String getLabel() const override                            { return label; }\r
 \r
     float getValueForText (const String& text) const override\r
@@ -141,7 +141,7 @@ struct AudioProcessorValueTreeState::Parameter   : public AudioProcessorParamete
 \r
     AudioProcessorValueTreeState& owner;\r
     ValueTree state;\r
-    String paramID, name, label;\r
+    String label;\r
     ListenerList<AudioProcessorValueTreeState::Listener> listeners;\r
     std::function<String (float)> valueToTextFunction;\r
     std::function<float (const String&)> textToValueFunction;\r
index 51812223eb36a31a63bb70b62d4ef19ca5fb0d43..2de78b5eb250a115c64177e77ba3bd9a23e55b05 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_audio_utils\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE extra audio utility classes\r
   description:      Classes for audio-related GUI and miscellaneous tasks.\r
   website:          http://www.juce.com/juce\r
index 00f209aee5bc90f38542feb81d343fee09d5c8c3..a5bde5b59c7b70140983e21d8936172344f77c21 100644 (file)
@@ -239,7 +239,7 @@ inline void b2Contact::SetEnabled(bool flag)
        }\r
        else\r
        {\r
-               m_flags &= ~e_enabledFlag;\r
+               m_flags &= ~((unsigned int) e_enabledFlag);\r
        }\r
 }\r
 \r
index 6d2128b682de95c1ebae55c75c24d489c30aa070..bf5f9da8b3764254066beef22a52484d50835319 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_box2d\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE wrapper for the Box2D physics engine\r
   description:      The Box2D physics engine and some utility classes.\r
   website:          http://www.juce.com/juce\r
index 30e6de896329cb3a922d35f083fd74a14b3ac60c..7b536e26b1ae1d3d210937f31dc451488969ab95 100644 (file)
@@ -540,13 +540,17 @@ public:
         will be done.\r
 \r
         @param newElement   the new object to add to the array\r
+        @return             true if the element was added to the array; false otherwise.\r
     */\r
-    void addIfNotAlreadyThere (ParameterType newElement)\r
+    bool addIfNotAlreadyThere (ParameterType newElement)\r
     {\r
         const ScopedLockType lock (getLock());\r
 \r
-        if (! contains (newElement))\r
-            add (newElement);\r
+        if (contains (newElement))\r
+            return false;\r
+\r
+        add (newElement);\r
+        return true;\r
     }\r
 \r
     /** Replaces an element with a new value.\r
index 9fdb61edd46d670f5d346fb10c5fce364e0d3a22..a64c9cbed72d13f594bebc01598b931f29bf6546 100644 (file)
@@ -378,16 +378,17 @@ public:
         If the array already contains a matching object, nothing will be done.\r
 \r
         @param newObject   the new object to add to the array\r
-        @returns           the new object that was added\r
+        @returns           true if the new object was added, false otherwise\r
     */\r
-    ObjectClass* addIfNotAlreadyThere (ObjectClass* newObject) noexcept\r
+    bool addIfNotAlreadyThere (ObjectClass* newObject) noexcept\r
     {\r
         const ScopedLockType lock (getLock());\r
 \r
-        if (contains (newObject))\r
-            add (newObject);\r
+        if (contains (newObject))\r
+            return false;\r
 \r
-        return newObject;\r
+        add (newObject);\r
+        return true;\r
     }\r
 \r
     /** Replaces an object in the array with a different one.\r
index 87d76391e207e4966c2b7d75ac4a21db4ffd41cf..e5dfe965e6e0dfe48982dcad3317a873a38c1136 100644 (file)
@@ -386,12 +386,17 @@ public:
         If the array already contains a matching object, nothing will be done.\r
 \r
         @param newObject   the new object to add to the array\r
+        @returns           true if the object has been added, false otherwise\r
     */\r
-    void addIfNotAlreadyThere (ObjectClass* const newObject) noexcept\r
+    bool addIfNotAlreadyThere (ObjectClass* const newObject) noexcept\r
     {\r
         const ScopedLockType lock (getLock());\r
-        if (! contains (newObject))\r
-            add (newObject);\r
+\r
+        if (contains (newObject))\r
+            return false;\r
+\r
+        add (newObject);\r
+        return true;\r
     }\r
 \r
     /** Replaces an object in the array with a different one.\r
index 9e3335df55b73e12de01073efb58057a1976fae5..01c65edf1894e356d6edb3802a1c72a5b9bfa344 100644 (file)
@@ -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; }\r
 var& var::operator= (const wchar_t* const v)     { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; }\r
 var& var::operator= (const String& v)            { type->cleanUp (value); type = &VariantType_String::instance; new (value.stringValue) String (v); return *this; }\r
+var& var::operator= (const MemoryBlock& v)       { type->cleanUp (value); type = &VariantType_Binary::instance; value.binaryValue = new MemoryBlock (v); return *this; }\r
 var& var::operator= (const Array<var>& v)        { var v2 (v); swapWith (v2); return *this; }\r
 var& var::operator= (ReferenceCountedObject* v)  { var v2 (v); swapWith (v2); return *this; }\r
 var& var::operator= (NativeFunction v)           { var v2 (v); swapWith (v2); return *this; }\r
index 8720a0d080820b49a11acf11ad68f1ba9ab85e42..4b57c6a3552746e586cdbf38740f4b706bbb99b1 100644 (file)
@@ -95,6 +95,7 @@ public:
     var& operator= (const char* value);\r
     var& operator= (const wchar_t* value);\r
     var& operator= (const String& value);\r
+    var& operator= (const MemoryBlock& value);\r
     var& operator= (const Array<var>& value);\r
     var& operator= (ReferenceCountedObject* object);\r
     var& operator= (NativeFunction method);\r
index 4463a04fdf22461ea138f99d2d321d2c8f37dba3..bebdeed5085b8899b1492cc5755daac746781ab8 100644 (file)
@@ -73,19 +73,40 @@ const File File::nonexistent;
 //==============================================================================\r
 static String removeEllipsis (const String& path)\r
 {\r
-    StringArray toks;\r
-    toks.addTokens (path, File::separatorString, StringRef());\r
-\r
-    for (int i = 1; i < toks.size(); ++i)\r
+    // This will quickly find both /../ and /./ at the expense of a minor\r
+    // false-positive performance hit when path elements end in a dot.\r
+   #if JUCE_WINDOWS\r
+    if (path.contains (".\\"))\r
+   #else\r
+    if (path.contains ("./"))\r
+   #endif\r
     {\r
-        if (toks[i] == ".." && toks[i - 1] != "..")\r
+        StringArray toks;\r
+        toks.addTokens (path, File::separatorString, StringRef());\r
+        bool anythingChanged = false;\r
+\r
+        for (int i = 1; i < toks.size(); ++i)\r
         {\r
-            toks.removeRange (i - 1, 2);\r
-            i = jmax (0, i - 2);\r
+            const String& t = toks[i];\r
+\r
+            if (t == ".." && toks[i - 1] != "..")\r
+            {\r
+                anythingChanged = true;\r
+                toks.removeRange (i - 1, 2);\r
+                i = jmax (0, i - 2);\r
+            }\r
+            else if (t == ".")\r
+            {\r
+                anythingChanged = true;\r
+                toks.remove (i--);\r
+            }\r
         }\r
+\r
+        if (anythingChanged)\r
+            return toks.joinIntoString (File::separatorString);\r
     }\r
 \r
-    return toks.joinIntoString (File::separatorString);\r
+    return path;\r
 }\r
 \r
 String File::parseAbsolutePath (const String& p)\r
@@ -95,10 +116,7 @@ String File::parseAbsolutePath (const String& p)
 \r
 #if JUCE_WINDOWS\r
     // Windows..\r
-    String path (p.replaceCharacter ('/', '\\'));\r
-\r
-    if (path.contains ("\\..\\"))\r
-        path = removeEllipsis (path);\r
+    String path (removeEllipsis (p.replaceCharacter ('/', '\\')));\r
 \r
     if (path.startsWithChar (separator))\r
     {\r
@@ -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.\r
     jassert ((! p.containsChar ('\\')) || (p.indexOfChar ('/') >= 0 && p.indexOfChar ('/') < p.indexOfChar ('\\')));\r
 \r
-    String path (p);\r
-\r
-    if (path.contains ("/../"))\r
-        path = removeEllipsis (path);\r
+    String path (removeEllipsis (p));\r
 \r
     if (path.startsWithChar ('~'))\r
     {\r
@@ -1058,7 +1073,9 @@ public:
         expect (home.getChildFile ("././xyz") == home.getChildFile ("xyz"));\r
         expect (home.getChildFile ("../xyz") == home.getParentDirectory().getChildFile ("xyz"));\r
         expect (home.getChildFile (".././xyz") == home.getParentDirectory().getChildFile ("xyz"));\r
+        expect (home.getChildFile (".././xyz/./abc") == home.getParentDirectory().getChildFile ("xyz/abc"));\r
         expect (home.getChildFile ("./../xyz") == home.getParentDirectory().getChildFile ("xyz"));\r
+        expect (home.getChildFile ("a1/a2/a3/./../../a4") == home.getChildFile ("a1/a4"));\r
 \r
         {\r
             FileOutputStream fo (tempFile);\r
index 5531c62a869472efcc07215b658b7e90f3997880..629ac60495023049e3ecaee6370118e7cee7173c 100644 (file)
@@ -87,13 +87,14 @@ void FileSearchPath::add (const File& dir, const int insertIndex)
     directories.insert (insertIndex, dir.getFullPathName());\r
 }\r
 \r
-void FileSearchPath::addIfNotAlreadyThere (const File& dir)\r
+bool FileSearchPath::addIfNotAlreadyThere (const File& dir)\r
 {\r
     for (int i = 0; i < directories.size(); ++i)\r
         if (File (directories[i]) == dir)\r
-            return;\r
+            return false;\r
 \r
     add (dir);\r
+    return true;\r
 }\r
 \r
 void FileSearchPath::remove (const int index)\r
index 3744a49b3a90a198d774062aa6a5918a41480c8f..1089c8b19569d608f27373a29f567a8f00e10f84 100644 (file)
@@ -92,8 +92,11 @@ public:
     void add (const File& directoryToAdd,\r
               int insertIndex = -1);\r
 \r
-    /** Adds a new directory to the search path if it's not already in there. */\r
-    void addIfNotAlreadyThere (const File& directoryToAdd);\r
+    /** Adds a new directory to the search path if it's not already in there.\r
+\r
+        @return true if the directory has been added, false otherwise.\r
+    */\r
+    bool addIfNotAlreadyThere (const File& directoryToAdd);\r
 \r
     /** Removes a directory from the search path. */\r
     void remove (int indexToRemove);\r
index 98762a6791dc5fc72abe1e07f1bb8785807a91ce..455412c417fc9ada228d0dad809506012b5fd725 100644 (file)
@@ -571,6 +571,19 @@ public:
         return CharPointer_ASCII (buffer);\r
     }\r
 \r
+    // (creates a random double that can be easily stringified, to avoid\r
+    // false failures when decimal places are rounded or truncated slightly)\r
+    static var createRandomDouble (Random& r)\r
+    {\r
+        for (;;)\r
+        {\r
+            var v (String (r.nextDouble() * 1000.0, 20).getDoubleValue());\r
+\r
+            if (v.toString() == String (static_cast<double> (v), 20))\r
+                return v;\r
+        }\r
+    }\r
+\r
     static var createRandomVar (Random& r, int depth)\r
     {\r
         switch (r.nextInt (depth > 3 ? 6 : 8))\r
@@ -579,7 +592,7 @@ public:
             case 1:     return r.nextInt();\r
             case 2:     return r.nextInt64();\r
             case 3:     return r.nextBool();\r
-            case 4:     return String (r.nextDouble(), 8).getDoubleValue();\r
+            case 4:     return createRandomDouble (r);\r
             case 5:     return createRandomWideCharString (r);\r
 \r
             case 6:\r
index 44bc7a6c1ca68cadfe12fdc1cffcd55f3bcbc841..2fa845fa8e1c901cef75199ad52d968a71d3d507 100644 (file)
@@ -67,12 +67,13 @@ struct JavascriptEngine::RootObject   : public DynamicObject
 {\r
     RootObject()\r
     {\r
-        setMethod ("exec",      exec);\r
-        setMethod ("eval",      eval);\r
-        setMethod ("trace",     trace);\r
-        setMethod ("charToInt", charToInt);\r
-        setMethod ("parseInt",  IntegerClass::parseInt);\r
-        setMethod ("typeof",    typeof_internal);\r
+        setMethod ("exec",       exec);\r
+        setMethod ("eval",       eval);\r
+        setMethod ("trace",      trace);\r
+        setMethod ("charToInt",  charToInt);\r
+        setMethod ("parseInt",   IntegerClass::parseInt);\r
+        setMethod ("typeof",     typeof_internal);\r
+        setMethod ("parseFloat", parseFloat);\r
     }\r
 \r
     Time timeout;\r
@@ -1505,6 +1506,8 @@ struct JavascriptEngine::RootObject   : public DynamicObject
             setMethod ("remove",   remove);\r
             setMethod ("join",     join);\r
             setMethod ("push",     push);\r
+            setMethod ("splice",   splice);\r
+            setMethod ("indexOf",  indexOf);\r
         }\r
 \r
         static Identifier getClassName()   { static const Identifier i ("Array"); return i; }\r
@@ -1548,6 +1551,52 @@ struct JavascriptEngine::RootObject   : public DynamicObject
 \r
             return var::undefined();\r
         }\r
+\r
+        static var splice (Args a)\r
+        {\r
+            if (Array<var>* array = a.thisObject.getArray())\r
+            {\r
+                const int arraySize = array->size();\r
+                int start = get (a, 0);\r
+\r
+                if (start < 0)\r
+                    start = jmax (0, arraySize + start);\r
+                else if (start > arraySize)\r
+                    start = arraySize;\r
+\r
+                const int num = a.numArguments > 1 ? jlimit (0, arraySize - start, getInt (a, 1))\r
+                                                   : arraySize - start;\r
+\r
+                Array<var> itemsRemoved;\r
+                itemsRemoved.ensureStorageAllocated (num);\r
+\r
+                for (int i = 0; i < num; ++i)\r
+                    itemsRemoved.add (array->getReference (start + i));\r
+\r
+                array->removeRange (start, num);\r
+\r
+                for (int i = 2; i < a.numArguments; ++i)\r
+                    array->insert (start++, get (a, i));\r
+\r
+                return itemsRemoved;\r
+            }\r
+\r
+            return var::undefined();\r
+        }\r
+\r
+        static var indexOf (Args a)\r
+        {\r
+            if (const Array<var>* array = a.thisObject.getArray())\r
+            {\r
+                const var target (get (a, 0));\r
+\r
+                for (int i = (a.numArguments > 1 ? getInt (a, 1) : 0); i < array->size(); ++i)\r
+                    if (array->getReference(i) == target)\r
+                        return i;\r
+            }\r
+\r
+            return -1;\r
+        }\r
     };\r
 \r
     //==============================================================================\r
@@ -1677,6 +1726,7 @@ struct JavascriptEngine::RootObject   : public DynamicObject
     //==============================================================================\r
     static var trace (Args a)      { Logger::outputDebugString (JSON::toString (a.thisObject)); return var::undefined(); }\r
     static var charToInt (Args a)  { return (int) (getString (a, 0)[0]); }\r
+    static var parseFloat (Args a) { return getDouble (a, 0); }\r
 \r
     static var typeof_internal (Args a)\r
     {\r
index 34d63a259bebbb9cd60a79cbe85c239a187f8536..370e7d75078a2f705d549042da2c751e624e9fd3 100644 (file)
@@ -82,6 +82,7 @@
  #endif\r
 \r
  #if JUCE_LINUX\r
+  #include <stdio.h>\r
   #include <langinfo.h>\r
   #include <ifaddrs.h>\r
   #include <sys/resource.h>\r
index bb073d77b5434062570833fa7c1cb1c449e91cd0..e27cdc89df400f1c97bd0049a7c41552e10fbd96 100644 (file)
@@ -38,7 +38,7 @@
 \r
   ID:               juce_core\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE core classes\r
   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.\r
   website:          http://www.juce.com/juce\r
index 81bcf61beba6d805e5fdba715b403304c5a3024b..d55124506fe5f19b63c5edff8e64806069e706e7 100644 (file)
@@ -385,12 +385,12 @@ BigInteger& BigInteger::operator+= (const BigInteger& other)
             BigInteger temp (*this);\r
             temp.negate();\r
             *this = other;\r
-            operator-= (temp);\r
+            *this -= temp;\r
         }\r
         else\r
         {\r
             negate();\r
-            operator-= (other);\r
+            *this -= other;\r
             negate();\r
         }\r
     }\r
@@ -436,7 +436,7 @@ BigInteger& BigInteger::operator-= (const BigInteger& other)
         {\r
             BigInteger temp (other);\r
             swapWith (temp);\r
-            operator-= (temp);\r
+            *this -= temp;\r
             negate();\r
             return *this;\r
         }\r
@@ -444,7 +444,7 @@ BigInteger& BigInteger::operator-= (const BigInteger& other)
     else\r
     {\r
         negate();\r
-        operator+= (other);\r
+        *this += other;\r
         negate();\r
         return *this;\r
     }\r
@@ -476,24 +476,40 @@ BigInteger& BigInteger::operator-= (const BigInteger& other)
 \r
 BigInteger& BigInteger::operator*= (const BigInteger& other)\r
 {\r
-    BigInteger total;\r
-    highestBit = getHighestBit();\r
+    int n = getHighestBit();\r
+    int t = other.getHighestBit();\r
+\r
     const bool wasNegative = isNegative();\r
     setNegative (false);\r
 \r
-    for (int i = 0; i <= highestBit; ++i)\r
+    BigInteger total;\r
+    total.highestBit = n + t + 1;\r
+\r
+    n >>= 5;\r
+    t >>= 5;\r
+\r
+    total.ensureSize ((size_t) (n + t + 2));\r
+\r
+    BigInteger m (other);\r
+    m.setNegative (false);\r
+\r
+    for (int i = 0; i <= t; ++i)\r
     {\r
-        if (operator[](i))\r
+        uint32 c = 0;\r
+\r
+        for (int j = 0; j <= n; ++j)\r
         {\r
-            BigInteger n (other);\r
-            n.setNegative (false);\r
-            n <<= i;\r
-            total += n;\r
+            uint64 uv = (uint64) total.values[i + j] + (uint64) values[j] * (uint64) m.values[i] + (uint64) c;\r
+            total.values[i + j] = (uint32) uv;\r
+            c = uv >> 32;\r
         }\r
+\r
+        total.values[i + n + 1] = c;\r
     }\r
 \r
     total.setNegative (wasNegative ^ other.isNegative());\r
     swapWith (total);\r
+\r
     return *this;\r
 }\r
 \r
@@ -683,7 +699,7 @@ void BigInteger::shiftLeft (int bits, const int startBit)
     if (startBit > 0)\r
     {\r
         for (int i = highestBit + 1; --i >= startBit;)\r
-            setBit (i + bits, operator[] (i));\r
+            setBit (i + bits, (*this) [i]);\r
 \r
         while (--bits >= 0)\r
             clearBit (bits + startBit);\r
@@ -726,7 +742,7 @@ void BigInteger::shiftRight (int bits, const int startBit)
     if (startBit > 0)\r
     {\r
         for (int i = startBit; i <= highestBit; ++i)\r
-            setBit (i, operator[] (i + bits));\r
+            setBit (i, (*this) [i + bits]);\r
 \r
         highestBit = getHighestBit();\r
     }\r
@@ -816,25 +832,128 @@ BigInteger BigInteger::findGreatestCommonDivisor (BigInteger n) const
 \r
 void BigInteger::exponentModulo (const BigInteger& exponent, const BigInteger& modulus)\r
 {\r
+    *this %= modulus;\r
     BigInteger exp (exponent);\r
     exp %= modulus;\r
 \r
-    BigInteger value (1);\r
-    swapWith (value);\r
-    value %= modulus;\r
+    if (modulus.getHighestBit() <= 32 || modulus % 2 == 0)\r
+    {\r
+        BigInteger a (*this);\r
+\r
+        const int n = exp.getHighestBit();\r
+\r
+        for (int i = n; --i >= 0;)\r
+        {\r
+            *this *= *this;\r
 \r
-    while (! exp.isZero())\r
+            if (exp[i])\r
+                *this *= a;\r
+\r
+            if (compareAbsolute (modulus) >= 0)\r
+                *this %= modulus;\r
+        }\r
+    }\r
+    else\r
     {\r
-        if (exp [0])\r
+        const int Rfactor = modulus.getHighestBit() + 1;\r
+        BigInteger R (1);\r
+        R.shiftLeft (Rfactor, 0);\r
+\r
+        BigInteger R1, m1, g;\r
+        g.extendedEuclidean (modulus, R, m1, R1);\r
+\r
+        if (! g.isOne())\r
         {\r
-            operator*= (value);\r
-            operator%= (modulus);\r
+            BigInteger a (*this);\r
+\r
+            for (int i = exp.getHighestBit(); --i >= 0;)\r
+            {\r
+                *this *= *this;\r
+\r
+                if (exp[i])\r
+                    *this *= a;\r
+\r
+                if (compareAbsolute (modulus) >= 0)\r
+                    *this %= modulus;\r
+            }\r
         }\r
+        else\r
+        {\r
+            BigInteger am (((*this) * R) % modulus);\r
+            BigInteger xm (am);\r
+            BigInteger um (R % modulus);\r
 \r
-        value *= value;\r
-        value %= modulus;\r
-        exp >>= 1;\r
+            for (int i = exp.getHighestBit(); --i >= 0;)\r
+            {\r
+                xm.montgomeryMultiplication (xm, modulus, m1, Rfactor);\r
+\r
+                if (exp[i])\r
+                    xm.montgomeryMultiplication (am, modulus, m1, Rfactor);\r
+            }\r
+\r
+            xm.montgomeryMultiplication (1, modulus, m1, Rfactor);\r
+            swapWith (xm);\r
+        }\r
+    }\r
+}\r
+\r
+void BigInteger::montgomeryMultiplication (const BigInteger& other, const BigInteger& modulus,\r
+                                           const BigInteger& modulusp, const int k)\r
+{\r
+    *this *= other;\r
+\r
+    BigInteger t (*this);\r
+\r
+    setRange (k, highestBit - k + 1, false);\r
+    *this *= modulusp;\r
+\r
+    setRange (k, highestBit - k + 1, false);\r
+    *this *= modulus;\r
+    *this += t;\r
+    shiftRight (k, 0);\r
+\r
+    if (compare (modulus) >= 0)\r
+        *this -= modulus;\r
+    else if (isNegative())\r
+        *this += modulus;\r
+}\r
+\r
+void BigInteger::extendedEuclidean (const BigInteger& a, const BigInteger& b,\r
+                                    BigInteger& x, BigInteger& y)\r
+{\r
+    BigInteger p(a), q(b), gcd(1);\r
+\r
+    Array<BigInteger> tempValues;\r
+\r
+    while (! q.isZero())\r
+    {\r
+        tempValues.add (p / q);\r
+        gcd = q;\r
+        q = p % q;\r
+        p = gcd;\r
+    }\r
+\r
+    x.clear();\r
+    y = 1;\r
+\r
+    for (int i = 1; i < tempValues.size(); ++i)\r
+    {\r
+        const BigInteger& v = tempValues.getReference (tempValues.size() - i - 1);\r
+\r
+        if ((i & 1) != 0)\r
+            x += y * v;\r
+        else\r
+            y += x * v;\r
     }\r
+\r
+    if (gcd.compareAbsolute (y * b - x * a) != 0)\r
+    {\r
+        x.negate();\r
+        x.swapWith (y);\r
+        x.negate();\r
+    }\r
+\r
+    swapWith (gcd);\r
 }\r
 \r
 void BigInteger::inverseModulo (const BigInteger& modulus)\r
@@ -846,7 +965,7 @@ void BigInteger::inverseModulo (const BigInteger& modulus)
     }\r
 \r
     if (isNegative() || compareAbsolute (modulus) >= 0)\r
-        operator%= (modulus);\r
+        *this %= modulus;\r
 \r
     if (isOne())\r
         return;\r
@@ -959,8 +1078,8 @@ void BigInteger::parseString (StringRef text, const int base)
 \r
             if (((uint32) digit) < (uint32) base)\r
             {\r
-                operator<<= (bits);\r
-                operator+= (digit);\r
+                *this <<= bits;\r
+                *this += digit;\r
             }\r
             else if (c == 0)\r
             {\r
@@ -978,8 +1097,8 @@ void BigInteger::parseString (StringRef text, const int base)
 \r
             if (c >= '0' && c <= '9')\r
             {\r
-                operator*= (ten);\r
-                operator+= ((int) (c - '0'));\r
+                *this *= ten;\r
+                *this += (int) (c - '0');\r
             }\r
             else if (c == 0)\r
             {\r
index 2f99424a3ba011d19e885281143a0ad27d16296a..ada0e89e5b890f6b8ae9cbef4e98ee48887e998d 100644 (file)
@@ -180,6 +180,22 @@ public:
     */\r
     int getHighestBit() const noexcept;\r
 \r
+    //==============================================================================\r
+    /** Returns true if the value is less than zero.\r
+        @see setNegative, negate\r
+    */\r
+    bool isNegative() const noexcept;\r
+\r
+    /** Changes the sign of the number to be positive or negative.\r
+        @see isNegative, negate\r
+    */\r
+    void setNegative (bool shouldBeNegative) noexcept;\r
+\r
+    /** Inverts the sign of the number.\r
+        @see isNegative, setNegative\r
+    */\r
+    void negate() noexcept;\r
+\r
     //==============================================================================\r
     // All the standard arithmetic ops...\r
 \r
@@ -236,6 +252,7 @@ public:
     */\r
     int compareAbsolute (const BigInteger& other) const noexcept;\r
 \r
+    //==============================================================================\r
     /** Divides this value by another one and returns the remainder.\r
 \r
         This number is divided by other, leaving the quotient in this number,\r
@@ -243,7 +260,7 @@ public:
     */\r
     void divideBy (const BigInteger& divisor, BigInteger& remainder);\r
 \r
-    /** Returns the largest value that will divide both this value and the one passed-in. */\r
+    /** Returns the largest value that will divide both this value and the argument. */\r
     BigInteger findGreatestCommonDivisor (BigInteger other) const;\r
 \r
     /** Performs a combined exponent and modulo operation.\r
@@ -256,21 +273,20 @@ public:
     */\r
     void inverseModulo (const BigInteger& modulus);\r
 \r
-    //==============================================================================\r
-    /** Returns true if the value is less than zero.\r
-        @see setNegative, negate\r
-    */\r
-    bool isNegative() const noexcept;\r
-\r
-    /** Changes the sign of the number to be positive or negative.\r
-        @see isNegative, negate\r
+    /** Performs the Montgomery Multiplication with modulo.\r
+        This object is left containing the result value: ((this * other) * R1) % modulus.\r
+        To get this result, we need modulus, modulusp and k such as R = 2^k, with\r
+        modulus * modulusp - R * R1 = GCD(modulus, R) = 1\r
     */\r
-    void setNegative (bool shouldBeNegative) noexcept;\r
+    void montgomeryMultiplication (const BigInteger& other, const BigInteger& modulus,\r
+                                   const BigInteger& modulusp, int k);\r
 \r
-    /** Inverts the sign of the number.\r
-        @see isNegative, setNegative\r
+    /** Performs the Extended Euclidean algorithm.\r
+        This method will set the xOut and yOut arguments such that (a * xOut) - (b * yOut) = GCD (a, b).\r
+        On return, this object is left containing the value of the GCD.\r
     */\r
-    void negate() noexcept;\r
+    void extendedEuclidean (const BigInteger& a, const BigInteger& b,\r
+                            BigInteger& xOut, BigInteger& yOut);\r
 \r
     //==============================================================================\r
     /** Converts the number to a string.\r
index 9a2e9c7fb9bad9b4ef48ccdfca9a629ce7d6134d..cf60756ff38c79aedb9934be6e16be7f334b410c 100644 (file)
@@ -246,6 +246,14 @@ public:
         incIfNotNull (refCountedObject);\r
     }\r
 \r
+   #if JUCE_COMPILER_SUPPORTS_NULLPTR\r
+    /** Creates a pointer to a null object. */\r
+    ReferenceCountedObjectPtr (decltype (nullptr)) noexcept\r
+        : referencedObject (nullptr)\r
+    {\r
+    }\r
+   #endif\r
+\r
     /** Copies another pointer.\r
         This will increment the object's reference-count.\r
     */\r
@@ -258,7 +266,7 @@ public:
     /** Copies another pointer.\r
         This will increment the object's reference-count (if it is non-null).\r
     */\r
-    template <class Convertible>\r
+    template <typename Convertible>\r
     ReferenceCountedObjectPtr (const ReferenceCountedObjectPtr<Convertible>& other) noexcept\r
         : referencedObject (static_cast<ReferencedType*> (other.get()))\r
     {\r
@@ -278,7 +286,7 @@ public:
         The reference count of the old object is decremented, and it might be\r
         deleted if it hits zero. The new object's count is incremented.\r
     */\r
-    template <class Convertible>\r
+    template <typename Convertible>\r
     ReferenceCountedObjectPtr& operator= (const ReferenceCountedObjectPtr<Convertible>& other)\r
     {\r
         return operator= (static_cast<ReferencedType*> (other.get()));\r
@@ -370,42 +378,42 @@ private:
 \r
 //==============================================================================\r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, ReferenceCountedObjectClass* const object2) noexcept\r
 {\r
     return object1.get() == object2;\r
 }\r
 \r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator== (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept\r
 {\r
     return object1.get() == object2.get();\r
 }\r
 \r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator== (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept\r
 {\r
     return object1 == object2.get();\r
 }\r
 \r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectClass* object2) noexcept\r
 {\r
     return object1.get() != object2;\r
 }\r
 \r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator!= (const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept\r
 {\r
     return object1.get() != object2.get();\r
 }\r
 \r
 /** Compares two ReferenceCountedObjectPtrs. */\r
-template <class ReferenceCountedObjectClass>\r
+template <typename ReferenceCountedObjectClass>\r
 bool operator!= (ReferenceCountedObjectClass* object1, const ReferenceCountedObjectPtr<ReferenceCountedObjectClass>& object2) noexcept\r
 {\r
     return object1 != object2.get();\r
index 6b4607728b4d09dad6ac8de6d08ca82f2d3f210e..3db0c1cfb21cfc38f6b059b264aa98a9d24d37ed 100644 (file)
@@ -76,6 +76,13 @@ public:
     {\r
     }\r
 \r
+   #if JUCE_COMPILER_SUPPORTS_NULLPTR\r
+    /** Creates a ScopedPointer containing a null pointer. */\r
+    inline ScopedPointer (decltype (nullptr)) noexcept   : object (nullptr)\r
+    {\r
+    }\r
+   #endif\r
+\r
     /** Creates a ScopedPointer that owns the specified object. */\r
     inline ScopedPointer (ObjectType* const objectToTakePossessionOf) noexcept\r
         : object (objectToTakePossessionOf)\r
index a05518c9a28c20cd91d4dffe6d2c3995e12811ad..6401ca070ab601fe754f01367dabc410e6cebab2 100644 (file)
@@ -429,14 +429,15 @@ private:
         writeValueIfNotPresent (header, userHeaders, "Connection:", "close");\r
 \r
         if (isPost)\r
-        {\r
             writeValueIfNotPresent (header, userHeaders, "Content-Length:", String ((int) postData.getSize()));\r
-            header << userHeaders << "\r\n" << postData;\r
-        }\r
-        else\r
-        {\r
-            header << "\r\n" << userHeaders << "\r\n";\r
-        }\r
+\r
+        if (userHeaders.isNotEmpty())\r
+            header << "\r\n" << userHeaders;\r
+\r
+        header << "\r\n";\r
+\r
+        if (isPost)\r
+            header << postData;\r
 \r
         return header.getMemoryBlock();\r
     }\r
index f14adc744ca115db827017f786d0e3c18f0f3f5c..afde564fe6692972703b774cff73e2161840b146 100644 (file)
@@ -35,6 +35,7 @@ void MACAddress::findAllAddresses (Array<MACAddress>& result)
         for (const ifaddrs* cursor = addrs; cursor != nullptr; cursor = cursor->ifa_next)\r
         {\r
             sockaddr_storage* sto = (sockaddr_storage*) cursor->ifa_addr;\r
+\r
             if (sto->ss_family == AF_LINK)\r
             {\r
                 const sockaddr_dl* const sadd = (const sockaddr_dl*) cursor->ifa_addr;\r
@@ -45,7 +46,7 @@ void MACAddress::findAllAddresses (Array<MACAddress>& result)
 \r
                 if (sadd->sdl_type == IFT_ETHER)\r
                 {\r
-                    MACAddress ma (MACAddress (((const uint8*) sadd->sdl_data) + sadd->sdl_nlen));\r
+                    MACAddress ma (((const uint8*) sadd->sdl_data) + sadd->sdl_nlen);\r
 \r
                     if (! ma.isNull())\r
                         result.addIfNotAlreadyThere (ma);\r
@@ -108,6 +109,253 @@ bool JUCE_CALLTYPE Process::openEmailWithAttachments (const String& targetEmailA
   #endif\r
 }\r
 \r
+//==============================================================================\r
+// Unfortunately, we need to have this ugly ifdef here as long as some older OS X versions do not support NSURLSession\r
+#if JUCE_IOS || (defined (__MAC_OS_X_VERSION_MIN_REQUIRED) && defined (__MAC_10_10) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_10)\r
+\r
+//==============================================================================\r
+class URLConnectionState   : private Thread\r
+{\r
+public:\r
+    URLConnectionState (NSURLRequest* req, const int maxRedirects)\r
+        : Thread ("http connection"),\r
+          request ([req retain]),\r
+          data ([[NSMutableData data] retain]),\r
+          numRedirectsToFollow (maxRedirects)\r
+    {\r
+        static DelegateClass cls;\r
+        delegate = [cls.createInstance() init];\r
+        DelegateClass::setState (delegate, this);\r
+    }\r
+\r
+    ~URLConnectionState()\r
+    {\r
+        stop();\r
+        [data release];\r
+        [request release];\r
+        [headers release];\r
+        [session release];\r
+        [delegate release];\r
+    }\r
+\r
+    bool start (URL::OpenStreamProgressCallback* callback, void* context)\r
+    {\r
+        startThread();\r
+\r
+        while (isThreadRunning() && ! initialised)\r
+        {\r
+            if (callback != nullptr)\r
+                callback (context, (int) latestTotalBytes, (int) [[request HTTPBody] length]);\r
+\r
+            Thread::sleep (1);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    void stop()\r
+    {\r
+        {\r
+            const ScopedLock sl (dataLock);\r
+            [task cancel];\r
+        }\r
+\r
+        stopThread (10000);\r
+        [task release];\r
+        task = nil;\r
+    }\r
+\r
+    int read (char* dest, int numBytes)\r
+    {\r
+        int numDone = 0;\r
+\r
+        while (numBytes > 0)\r
+        {\r
+            const int available = jmin (numBytes, (int) [data length]);\r
+\r
+            if (available > 0)\r
+            {\r
+                const ScopedLock sl (dataLock);\r
+                [data getBytes: dest length: (NSUInteger) available];\r
+                [data replaceBytesInRange: NSMakeRange (0, (NSUInteger) available) withBytes: nil length: 0];\r
+\r
+                numDone += available;\r
+                numBytes -= available;\r
+                dest += available;\r
+            }\r
+            else\r
+            {\r
+                if (hasFailed || hasFinished)\r
+                    break;\r
+\r
+                Thread::sleep (1);\r
+            }\r
+        }\r
+\r
+        return numDone;\r
+    }\r
+\r
+    void didReceiveResponse (NSURLResponse* response, id completionHandler)\r
+    {\r
+        {\r
+            const ScopedLock sl (dataLock);\r
+            [data setLength: 0];\r
+        }\r
+\r
+        contentLength = [response expectedContentLength];\r
+\r
+        [headers release];\r
+        headers = nil;\r
+\r
+        if ([response isKindOfClass: [NSHTTPURLResponse class]])\r
+        {\r
+            auto httpResponse = (NSHTTPURLResponse*) response;\r
+            headers = [[httpResponse allHeaderFields] retain];\r
+            statusCode = (int) [httpResponse statusCode];\r
+        }\r
+\r
+        initialised = true;\r
+\r
+        if (completionHandler != nil)\r
+        {\r
+            // Need to wrangle this parameter back into an obj-C block,\r
+            // and call it to allow the transfer to continue..\r
+            void (^callbackBlock)(NSURLSessionResponseDisposition) = completionHandler;\r
+            callbackBlock (NSURLSessionResponseAllow);\r
+        }\r
+    }\r
+\r
+    void didBecomeInvalidWithError (NSError* error)\r
+    {\r
+        DBG (nsStringToJuce ([error description])); ignoreUnused (error);\r
+        hasFailed = true;\r
+        initialised = true;\r
+        signalThreadShouldExit();\r
+    }\r
+\r
+    void didReceiveData (NSData* newData)\r
+    {\r
+        const ScopedLock sl (dataLock);\r
+        [data appendData: newData];\r
+        initialised = true;\r
+    }\r
+\r
+    void didSendBodyData (int64_t totalBytesWritten)\r
+    {\r
+        latestTotalBytes = static_cast<int> (totalBytesWritten);\r
+    }\r
+\r
+    void willPerformHTTPRedirection (NSURLRequest* aRequest, void (^completionHandler)(NSURLRequest *))\r
+    {\r
+        NSURLRequest* newRequest = (numRedirects++ < numRedirectsToFollow ? aRequest : nullptr);\r
+        completionHandler (newRequest);\r
+    }\r
+\r
+    void run() override\r
+    {\r
+        jassert (task == nil && session == nil);\r
+\r
+        session = [[NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration defaultSessionConfiguration]\r
+                                                 delegate: delegate\r
+                                            delegateQueue: [NSOperationQueue currentQueue]] retain];\r
+\r
+        task = [session dataTaskWithRequest: request];\r
+\r
+        if (task == nil)\r
+            return;\r
+\r
+        [task retain];\r
+        [task resume];\r
+\r
+        while (! threadShouldExit())\r
+        {\r
+            wait (5);\r
+\r
+            if (task.state != NSURLSessionTaskStateRunning)\r
+                break;\r
+        }\r
+\r
+        hasFinished = true;\r
+        initialised = true;\r
+    }\r
+\r
+    int64 contentLength = -1;\r
+    CriticalSection dataLock;\r
+    id delegate = nil;\r
+    NSURLRequest* request = nil;\r
+    NSURLSession* session = nil;\r
+    NSURLSessionTask* task = nil;\r
+    NSMutableData* data = nil;\r
+    NSDictionary* headers = nil;\r
+    int statusCode = 0;\r
+    bool initialised = false, hasFailed = false, hasFinished = false;\r
+    const int numRedirectsToFollow;\r
+    int numRedirects = 0;\r
+    int64 latestTotalBytes = 0;\r
+\r
+private:\r
+    //==============================================================================\r
+    struct DelegateClass  : public ObjCClass<NSObject>\r
+    {\r
+        DelegateClass()  : ObjCClass<NSObject> ("JUCE_URLDelegate_")\r
+        {\r
+            addIvar<URLConnectionState*> ("state");\r
+\r
+            addMethod (@selector (URLSession:dataTask:didReceiveResponse:completionHandler:),\r
+                                                                            didReceiveResponse,        "v@:@@@@");\r
+            addMethod (@selector (URLSession:didBecomeInvalidWithError:),   didBecomeInvalidWithError, "v@:@@");\r
+            addMethod (@selector (URLSession:dataTask:didReceiveData:),     didReceiveData,            "v@:@@@");\r
+            addMethod (@selector (URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:),\r
+                                                                            didSendBodyData,           "v@:@@qqq");\r
+            addMethod (@selector (URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:),\r
+                                                                            willPerformHTTPRedirection, "v@:@@@@@");\r
+            registerClass();\r
+        }\r
+\r
+        static void setState (id self, URLConnectionState* state)  { object_setInstanceVariable (self, "state", state); }\r
+        static URLConnectionState* getState (id self)              { return getIvar<URLConnectionState*> (self, "state"); }\r
+\r
+    private:\r
+        static void didReceiveResponse (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSURLResponse* response, id completionHandler)\r
+        {\r
+            getState (self)->didReceiveResponse (response, completionHandler);\r
+        }\r
+\r
+        static void didBecomeInvalidWithError (id self, SEL, NSURLSession*, NSError* error)\r
+        {\r
+            getState (self)->didBecomeInvalidWithError (error);\r
+        }\r
+\r
+        static void didReceiveData (id self, SEL, NSURLSession*, NSURLSessionDataTask*, NSData* newData)\r
+        {\r
+            getState (self)->didReceiveData (newData);\r
+        }\r
+\r
+        static void didSendBodyData (id self, SEL, NSURLSession*, NSURLSessionTask*, int64_t, int64_t totalBytesWritten, int64_t)\r
+        {\r
+            getState (self)->didSendBodyData (totalBytesWritten);\r
+        }\r
+\r
+        static void willPerformHTTPRedirection (id self, SEL, NSURLSession*, NSURLSessionTask*, NSHTTPURLResponse*,\r
+                                                NSURLRequest* request, void (^completionHandler)(NSURLRequest *))\r
+        {\r
+            getState (self)->willPerformHTTPRedirection (request, completionHandler);\r
+        }\r
+    };\r
+\r
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (URLConnectionState)\r
+};\r
+\r
+//==============================================================================\r
+#else\r
+\r
+// This version is only used for backwards-compatibility with older OSX targets,\r
+// so we'll turn off deprecation warnings. This code will be removed at some point\r
+// in the future.\r
+\r
+#pragma clang diagnostic push\r
+#pragma clang diagnostic ignored "-Wdeprecated"\r
+\r
 //==============================================================================\r
 class URLConnectionState   : public Thread\r
 {\r
@@ -160,7 +408,11 @@ public:
 \r
     void stop()\r
     {\r
-        [connection cancel];\r
+        {\r
+            const ScopedLock sl (dataLock);\r
+            [connection cancel];\r
+        }\r
+\r
         stopThread (10000);\r
     }\r
 \r
@@ -339,6 +591,10 @@ private:
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (URLConnectionState)\r
 };\r
 \r
+#pragma clang diagnostic pop\r
+\r
+#endif\r
+\r
 \r
 //==============================================================================\r
 class WebInputStream  : public InputStream\r
@@ -372,8 +628,13 @@ public:
         }\r
     }\r
 \r
+    ~WebInputStream()\r
+    {\r
+        connection = nullptr;\r
+    }\r
+\r
     //==============================================================================\r
-    bool isError() const                { return connection == nullptr; }\r
+    bool isError() const                { return (connection == nullptr || connection->headers == nullptr); }\r
     int64 getTotalLength() override     { return connection == nullptr ? -1 : connection->contentLength; }\r
     bool isExhausted() override         { return finished; }\r
     int64 getPosition() override        { return position; }\r
@@ -433,14 +694,11 @@ private:
     {\r
         jassert (connection == nullptr);\r
 \r
-        NSMutableURLRequest* req = [NSMutableURLRequest  requestWithURL: [NSURL URLWithString: juceStringToNS (address)]\r
-                                                            cachePolicy: NSURLRequestReloadIgnoringLocalCacheData\r
-                                                        timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)];\r
-\r
-        if (req != nil)\r
+        if (NSMutableURLRequest* req = [NSMutableURLRequest requestWithURL: [NSURL URLWithString: juceStringToNS (address)]\r
+                                                               cachePolicy: NSURLRequestReloadIgnoringLocalCacheData\r
+                                                           timeoutInterval: timeOutMs <= 0 ? 60.0 : (timeOutMs / 1000.0)])\r
         {\r
             [req setHTTPMethod: [NSString stringWithUTF8String: httpRequestCmd.toRawUTF8()]];\r
-            //[req setCachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData];\r
 \r
             StringArray headerLines;\r
             headerLines.addLines (headers);\r
@@ -448,8 +706,8 @@ private:
 \r
             for (int i = 0; i < headerLines.size(); ++i)\r
             {\r
-                const String key (headerLines[i].upToFirstOccurrenceOf (":", false, false).trim());\r
-                const String value (headerLines[i].fromFirstOccurrenceOf (":", false, false).trim());\r
+                String key   = headerLines[i].upToFirstOccurrenceOf (":", false, false).trim();\r
+                String value = headerLines[i].fromFirstOccurrenceOf (":", false, false).trim();\r
 \r
                 if (key.isNotEmpty() && value.isNotEmpty())\r
                     [req addValue: juceStringToNS (value) forHTTPHeaderField: juceStringToNS (key)];\r
index 412c36a3d447f17cb991a6bd66baa8aaafe0f7ae..033e4378b64e30b4377ba643417fced1fb68daad 100644 (file)
   ==============================================================================\r
 */\r
 \r
-#ifdef JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
- extern int* jucePlugInClientCurrentWrapperType;\r
-#endif\r
-\r
 CriticalSection::CriticalSection() noexcept\r
 {\r
     pthread_mutexattr_t atts;\r
@@ -336,11 +332,21 @@ uint64 File::getFileIdentifier() const
     return juce_stat (fullPath, info) ? (uint64) info.st_ino : 0;\r
 }\r
 \r
+static bool hasEffectiveRootFilePermissions()\r
+{\r
+   #if JUCE_LINUX\r
+    return (geteuid() == 0);\r
+   #else\r
+    return false;\r
+   #endif\r
+}\r
+\r
 //==============================================================================\r
 bool File::hasWriteAccess() const\r
 {\r
     if (exists())\r
-        return access (fullPath.toUTF8(), W_OK) == 0;\r
+        return (hasEffectiveRootFilePermissions()\r
+             || access (fullPath.toUTF8(), W_OK) == 0);\r
 \r
     if ((! isDirectory()) && fullPath.containsChar (separator))\r
         return getParentDirectory().hasWriteAccess();\r
@@ -634,12 +640,7 @@ File juce_getExecutableFile()
         {\r
             Dl_info exeInfo;\r
 \r
-          #ifdef JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
-            void* localSymbol = jucePlugInClientCurrentWrapperType != nullptr ? (void*) jucePlugInClientCurrentWrapperType\r
-                                                                              : (void*) juce_getExecutableFile;\r
-          #else\r
             void* localSymbol = (void*) juce_getExecutableFile;\r
-          #endif\r
             dladdr (localSymbol, &exeInfo);\r
             return CharPointer_UTF8 (exeInfo.dli_fname);\r
         }\r
@@ -1090,14 +1091,14 @@ public:
                 close (pipeHandles[0]);   // close the read handle\r
 \r
                 if ((streamFlags & wantStdOut) != 0)\r
-                    dup2 (pipeHandles[1], 1); // turns the pipe into stdout\r
+                    dup2 (pipeHandles[1], STDOUT_FILENO); // turns the pipe into stdout\r
                 else\r
-                    close (STDOUT_FILENO);\r
+                    dup2 (open ("/dev/null", O_WRONLY), STDOUT_FILENO);\r
 \r
                 if ((streamFlags & wantStdErr) != 0)\r
-                    dup2 (pipeHandles[1], 2);\r
+                    dup2 (pipeHandles[1], STDERR_FILENO);\r
                 else\r
-                    close (STDERR_FILENO);\r
+                    dup2 (open ("/dev/null", O_WRONLY), STDERR_FILENO);\r
 \r
                 close (pipeHandles[1]);\r
 \r
index dc80f7733809d10d806fade57c61cc73a36e92b3..3282a6009060c2b7f30776cf55446a01aa923681 100644 (file)
@@ -53,7 +53,7 @@ public:
             if (! isError())\r
             {\r
                 DWORD bufferSizeBytes = 4096;\r
-                StringPairArray dataHeaders (false);\r
+                StringPairArray dataHeaders;\r
 \r
                 for (;;)\r
                 {\r
index 027d06b0801f5e3e038cd1a95c1322ced7dc4ff8..e07e6a09fcfae1326c2d1f024ebe86dd45008fc6 100644 (file)
@@ -260,17 +260,6 @@ public:
     {\r
         LARGE_INTEGER ticks;\r
         QueryPerformanceCounter (&ticks);\r
-\r
-        const int64 mainCounterAsHiResTicks = (juce_millisecondsSinceStartup() * hiResTicksPerSecond) / 1000;\r
-        const int64 newOffset = mainCounterAsHiResTicks - ticks.QuadPart;\r
-\r
-        // fix for a very obscure PCI hardware bug that can make the counter\r
-        // sometimes jump forwards by a few seconds..\r
-        const int64 offsetDrift = abs64 (newOffset - hiResTicksOffset);\r
-\r
-        if (offsetDrift > (hiResTicksPerSecond >> 1))\r
-            hiResTicksOffset = newOffset;\r
-\r
         return ticks.QuadPart + hiResTicksOffset;\r
     }\r
 \r
index 9a0a3e66a655e62f92c4c8484121964315b7728a..2350e8a135ae83de9e4991b32fc36fff34d171ff 100644 (file)
@@ -136,7 +136,7 @@ namespace URLHelpers
                 || url[i] == '+' || url[i] == '-' || url[i] == '.')\r
             ++i;\r
 \r
-        return url[i] == ':' ? i + 1 : 0;\r
+        return url.substring (i).startsWith ("://") ? i + 1 : 0;\r
     }\r
 \r
     static int findStartOfNetLocation (const String& url)\r
index 9b903c8e1de40f74df768a08ca0ec76d237caebd..5169a3733613a89725aca3e1716e024328f36f93 100644 (file)
@@ -98,7 +98,7 @@
   #define JUCE_COMPILER_SUPPORTS_STATIC_ASSERT 1\r
  #endif\r
 \r
- #ifndef JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL\r
+ #if __has_feature (cxx_override_control) && (! defined (JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL))\r
   #define JUCE_COMPILER_SUPPORTS_OVERRIDE_AND_FINAL 1\r
  #endif\r
 \r
index d7cf6184980f8fe2d5cfd17288c1117f39a5a7d6..2234f27e041f0e2ea61ed53c307e3ec9c1e67914 100644 (file)
@@ -36,7 +36,7 @@
 */\r
 #define JUCE_MAJOR_VERSION      4\r
 #define JUCE_MINOR_VERSION      2\r
-#define JUCE_BUILDNUMBER        1\r
+#define JUCE_BUILDNUMBER        3\r
 \r
 /** Current Juce version number.\r
 \r
index dc331d8dd94910ee283298df58ca1df22613ae16..f31c8470b694661bf372f2a37df81052b9873167 100644 (file)
@@ -152,10 +152,13 @@ void StringArray::insert (const int index, const String& newString)
     strings.insert (index, newString);\r
 }\r
 \r
-void StringArray::addIfNotAlreadyThere (const String& newString, const bool ignoreCase)\r
+bool StringArray::addIfNotAlreadyThere (const String& newString, const bool ignoreCase)\r
 {\r
-    if (! contains (newString, ignoreCase))\r
-        add (newString);\r
+    if (contains (newString, ignoreCase))\r
+        return false;\r
+\r
+    add (newString);\r
+    return true;\r
 }\r
 \r
 void StringArray::addArray (const StringArray& otherArray, int startIndex, int numElementsToAdd)\r
index 9d96241eb9ac6037dfb666675daf93b0a465969b..d173a2c02222882ef8455e36e9e6e0ba327f98fa 100644 (file)
@@ -191,8 +191,10 @@ public:
 \r
     /** Adds a string to the array as long as it's not already in there.\r
         The search can optionally be case-insensitive.\r
+\r
+        @return true if the string has been added, false otherwise.\r
     */\r
-    void addIfNotAlreadyThere (const String& stringToAdd, bool ignoreCase = false);\r
+    bool addIfNotAlreadyThere (const String& stringToAdd, bool ignoreCase = false);\r
 \r
     /** Replaces one of the strings in the array with another one.\r
 \r
index d698c95aa047c32a0139900b69da04778c2f98e1..72a2896fa9e2d63deabc427e489f52eb3c6f4a95 100644 (file)
@@ -138,23 +138,78 @@ public:
     */\r
     void expect (bool testResult, const String& failureMessage = String());\r
 \r
-    /** Compares two values, and if they don't match, prints out a message containing the\r
-        expected and actual result values.\r
+    //==============================================================================\r
+    /** Compares a value to an expected value.\r
+        If they are not equal, prints out a message containing the expected and actual values.\r
     */\r
     template <class ValueType>\r
     void expectEquals (ValueType actual, ValueType expected, String failureMessage = String())\r
     {\r
-        const bool result = (actual == expected);\r
+        bool result = actual == expected;\r
+        expectResultAndPrint (actual, expected, result, "", failureMessage);\r
+    }\r
 \r
-        if (! result)\r
-        {\r
-            if (failureMessage.isNotEmpty())\r
-                failureMessage << " -- ";\r
+    /** Checks whether a value is not equal to a comparison value.\r
+        If this check fails, prints out a message containing the actual and comparison values.\r
+    */\r
+    template <class ValueType>\r
+    void expectNotEquals (ValueType value, ValueType valueToCompareTo, String failureMessage = String())\r
+    {\r
+        bool result = value != valueToCompareTo;\r
+        expectResultAndPrint (value, valueToCompareTo, result, "unequal to", failureMessage);\r
+    }\r
 \r
-            failureMessage << "Expected value: " << expected << ", Actual value: " << actual;\r
-        }\r
+    /** Checks whether a value is greater than a comparison value.\r
+        If this check fails, prints out a message containing the actual and comparison values.\r
+    */\r
+    template <class ValueType>\r
+    void expectGreaterThan (ValueType value, ValueType valueToCompareTo, String failureMessage = String())\r
+    {\r
+        bool result = value > valueToCompareTo;\r
+        expectResultAndPrint (value, valueToCompareTo, result, "greater than", failureMessage);\r
+    }\r
 \r
-        expect (result, failureMessage);\r
+    /** Checks whether a value is less than a comparison value.\r
+        If this check fails, prints out a message containing the actual and comparison values.\r
+    */\r
+    template <class ValueType>\r
+    void expectLessThan (ValueType value, ValueType valueToCompareTo, String failureMessage = String())\r
+    {\r
+        bool result = value < valueToCompareTo;\r
+        expectResultAndPrint (value, valueToCompareTo, result, "less than", failureMessage);\r
+    }\r
+\r
+    /** Checks whether a value is greater or equal to a comparison value.\r
+        If this check fails, prints out a message containing the actual and comparison values.\r
+    */\r
+    template <class ValueType>\r
+    void expectGreaterOrEqual (ValueType value, ValueType valueToCompareTo, String failureMessage = String())\r
+    {\r
+        bool result = value >= valueToCompareTo;\r
+        expectResultAndPrint (value, valueToCompareTo, result, "greater or equal to", failureMessage);\r
+    }\r
+\r
+    /** Checks whether a value is less or equal to a comparison value.\r
+        If this check fails, prints out a message containing the actual and comparison values.\r
+    */\r
+    template <class ValueType>\r
+    void expectLessOrEqual (ValueType value, ValueType valueToCompareTo, String failureMessage = String())\r
+    {\r
+        bool result = value <= valueToCompareTo;\r
+        expectResultAndPrint (value, valueToCompareTo, result, "less or equal to", failureMessage);\r
+    }\r
+\r
+    /** Computes the difference between a value and a comparison value, and if it is larger than a\r
+        specified maximum value, prints out a message containing the actual and comparison values\r
+        and the maximum allowed error.\r
+    */\r
+    template <class ValueType>\r
+    void expectWithinAbsoluteError (ValueType actual, ValueType expected, ValueType maxAbsoluteError, String failureMessage = String())\r
+    {\r
+        const ValueType diff = std::abs (actual - expected);\r
+        const bool result = diff <= maxAbsoluteError;\r
+\r
+        expectResultAndPrint (actual, expected, result, " within " + String (maxAbsoluteError) + " of" , failureMessage);\r
     }\r
 \r
     //==============================================================================\r
@@ -221,6 +276,24 @@ public:
     Random getRandom() const;\r
 \r
 private:\r
+    //==============================================================================\r
+    template <class ValueType>\r
+    void expectResultAndPrint (ValueType value, ValueType valueToCompareTo, bool result,\r
+                               String compDescription, String failureMessage)\r
+    {\r
+        if (! result)\r
+        {\r
+            if (failureMessage.isNotEmpty())\r
+                failureMessage << " -- ";\r
+\r
+            failureMessage << "Expected value" << (compDescription.isEmpty() ? "" : " ")\r
+                           << compDescription << ": " << valueToCompareTo\r
+                           << ", Actual value: " << value;\r
+        }\r
+\r
+        expect (result, failureMessage);\r
+    }\r
+\r
     //==============================================================================\r
     const String name;\r
     UnitTestRunner* runner;\r
index c0f016e3bb093c55dcab1f354362a66ae3dcd81f..bf56f4f63750f28b71106e7f6dd2a09c6559bbd1 100644 (file)
@@ -617,9 +617,17 @@ void XmlDocument::readChildElements (XmlElement& parent)
                 }\r
                 else\r
                 {\r
-                    for (;;)\r
+                    for (;; ++input)\r
                     {\r
-                        const juce_wchar nextChar = *input;\r
+                        juce_wchar nextChar = *input;\r
+\r
+                        if (nextChar == '\r')\r
+                        {\r
+                            nextChar = '\n';\r
+\r
+                            if (input[1] == '\n')\r
+                                continue;\r
+                        }\r
 \r
                         if (nextChar == '<' || nextChar == '&')\r
                             break;\r
@@ -633,7 +641,6 @@ void XmlDocument::readChildElements (XmlElement& parent)
 \r
                         textElementContent.appendUTF8Char (nextChar);\r
                         contentShouldBeUsed = contentShouldBeUsed || ! CharacterFunctions::isWhitespace (nextChar);\r
-                        ++input;\r
                     }\r
                 }\r
             }\r
index 2f7d422fca028052dd735c479731ca3af8cdb743..047172a45e721705e38324c4bc2e69710a1804bd 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_cryptography\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE cryptography classes\r
   description:      Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.\r
   website:          http://www.juce.com/juce\r
index e9b3922ad0909f049ddb3c2635ac89032b90e964..fd8b0c3260dd8937469af12d0b94f70899ec9928 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_data_structures\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE data model helper classes\r
   description:      Classes for undo/redo management, and smart data structures.\r
   website:          http://www.juce.com/juce\r
index b422a1cb67c86785e985bf9252b7d44a2e2d9187..3890f8a8b3507728e216d90724dd426c0b37ba69 100644 (file)
@@ -33,13 +33,13 @@ InterprocessConnectionServer::~InterprocessConnectionServer()
 }\r
 \r
 //==============================================================================\r
-bool InterprocessConnectionServer::beginWaitingForSocket (const int portNumber)\r
+bool InterprocessConnectionServer::beginWaitingForSocket (const int portNumber, const String& bindAddress)\r
 {\r
     stop();\r
 \r
     socket = new StreamingSocket();\r
 \r
-    if (socket->createListener (portNumber))\r
+    if (socket->createListener (portNumber, bindAddress))\r
     {\r
         startThread();\r
         return true;\r
index 32350837bccc9082c9cfcd601104f6f2516fe8dc..01bee327dca86b4faa038430bbe2b0cd1a92609d 100644 (file)
@@ -57,9 +57,16 @@ public:
 \r
         Use stop() to stop the thread running.\r
 \r
+        @param portNumber    The port on which the server will receive\r
+                             connections\r
+        @param bindAddress   The address on which the server will listen\r
+                             for connections. An empty string indicates\r
+                             that it should listen on all addresses\r
+                             assigned to this machine.\r
+\r
         @see createConnectionObject, stop\r
     */\r
-    bool beginWaitingForSocket (int portNumber);\r
+    bool beginWaitingForSocket (int portNumber, const String& bindAddress = String());\r
 \r
     /** Terminates the listener thread, if it's active.\r
 \r
index 2a0798db5c4f614e69c87b2e1705dd2ee1274d05..b2e6c5e467b31a7dc8d2527b48becd8f3f15e550 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_events\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE message and event handling classes\r
   description:      Classes for running an application's main event loop and sending/receiving messages, timers, etc.\r
   website:          http://www.juce.com/juce\r
index 66cd07f4b645682032997d398c2c63c0081e2888..f130bf41990e1b0e642cb4606bf1b927a5243808 100644 (file)
@@ -257,6 +257,16 @@ bool JUCEApplicationBase::initialiseApp()
     }\r
    #endif\r
 \r
+   #if JUCE_WINDOWS && JUCE_STANDALONE_APPLICATION && ! defined (_CONSOLE)\r
+    if (AttachConsole (ATTACH_PARENT_PROCESS) != 0)\r
+    {\r
+        // if we've launched a GUI app from cmd.exe or PowerShell, we need this to enable printf etc.\r
+        freopen("CON", "w", stdout);\r
+        freopen("CON", "w", stderr);\r
+        freopen("CON", "r", stdin);\r
+    }\r
+   #endif\r
+\r
     // let the app do its setting-up..\r
     initialise (getCommandLineParameters());\r
 \r
index 2efb3aa991faa3e62f03a91eef491f13fbcf5507..4f3df52454e730127e006393534ee8ba7abea24d 100644 (file)
@@ -25,7 +25,7 @@
 namespace\r
 {\r
     template <typename Type>\r
-    Rectangle<Type> coordsToRectangle (Type x, Type y, Type w, Type h)\r
+    Rectangle<Type> coordsToRectangle (Type x, Type y, Type w, Type h) noexcept\r
     {\r
        #if JUCE_DEBUG\r
         const int maxVal = 0x3fffffff;\r
@@ -77,7 +77,7 @@ bool Graphics::isVectorDevice() const
     return context.isVectorDevice();\r
 }\r
 \r
-bool Graphics::reduceClipRegion (const Rectangle<int>& area)\r
+bool Graphics::reduceClipRegion (Rectangle<int> area)\r
 {\r
     saveStateIfPending();\r
     return context.clipToRectangle (area);\r
@@ -85,7 +85,7 @@ bool Graphics::reduceClipRegion (const Rectangle<int>& area)
 \r
 bool Graphics::reduceClipRegion (const int x, const int y, const int w, const int h)\r
 {\r
-    return reduceClipRegion (Rectangle<int> (x, y, w, h));\r
+    return reduceClipRegion (coordsToRectangle (x, y, w, h));\r
 }\r
 \r
 bool Graphics::reduceClipRegion (const RectangleList<int>& clipRegion)\r
@@ -108,7 +108,7 @@ bool Graphics::reduceClipRegion (const Image& image, const AffineTransform& tran
     return ! context.isClipEmpty();\r
 }\r
 \r
-void Graphics::excludeClipRegion (const Rectangle<int>& rectangleToExclude)\r
+void Graphics::excludeClipRegion (Rectangle<int> rectangleToExclude)\r
 {\r
     saveStateIfPending();\r
     context.excludeClipRectangle (rectangleToExclude);\r
@@ -164,7 +164,7 @@ void Graphics::addTransform (const AffineTransform& transform)
     context.addTransform (transform);\r
 }\r
 \r
-bool Graphics::clipRegionIntersects (const Rectangle<int>& area) const\r
+bool Graphics::clipRegionIntersects (Rectangle<int> area) const\r
 {\r
     return context.clipRegionIntersects (area);\r
 }\r
@@ -281,7 +281,7 @@ void Graphics::drawMultiLineText (const String& text, const int startX,
     }\r
 }\r
 \r
-void Graphics::drawText (const String& text, const Rectangle<float>& area,\r
+void Graphics::drawText (const String& text, Rectangle<float> area,\r
                          Justification justificationType, bool useEllipsesIfTooBig) const\r
 {\r
     if (text.isNotEmpty() && context.clipRegionIntersects (area.getSmallestIntegerContainer()))\r
@@ -297,19 +297,19 @@ void Graphics::drawText (const String& text, const Rectangle<float>& area,
     }\r
 }\r
 \r
-void Graphics::drawText (const String& text, const Rectangle<int>& area,\r
+void Graphics::drawText (const String& text, Rectangle<int> area,\r
                          Justification justificationType, bool useEllipsesIfTooBig) const\r
 {\r
     drawText (text, area.toFloat(), justificationType, useEllipsesIfTooBig);\r
 }\r
 \r
-void Graphics::drawText (const String& text, const int x, const int y, const int width, const int height,\r
+void Graphics::drawText (const String& text, int x, int y, int width, int height,\r
                          Justification justificationType, const bool useEllipsesIfTooBig) const\r
 {\r
-    drawText (text, Rectangle<int> (x, y, width, height), justificationType, useEllipsesIfTooBig);\r
+    drawText (text, coordsToRectangle (x, y, width, height), justificationType, useEllipsesIfTooBig);\r
 }\r
 \r
-void Graphics::drawFittedText (const String& text, const Rectangle<int>& area,\r
+void Graphics::drawFittedText (const String& text, Rectangle<int> area,\r
                                Justification justification,\r
                                const int maximumNumberOfLines,\r
                                const float minimumHorizontalScale) const\r
@@ -328,7 +328,7 @@ void Graphics::drawFittedText (const String& text, const Rectangle<int>& area,
     }\r
 }\r
 \r
-void Graphics::drawFittedText (const String& text, const int x, const int y, const int width, const int height,\r
+void Graphics::drawFittedText (const String& text, int x, int y, int width, int height,\r
                                Justification justification,\r
                                const int maximumNumberOfLines,\r
                                const float minimumHorizontalScale) const\r
@@ -338,12 +338,12 @@ void Graphics::drawFittedText (const String& text, const int x, const int y, con
 }\r
 \r
 //==============================================================================\r
-void Graphics::fillRect (const Rectangle<int>& r) const\r
+void Graphics::fillRect (Rectangle<int> r) const\r
 {\r
     context.fillRect (r, false);\r
 }\r
 \r
-void Graphics::fillRect (const Rectangle<float>& r) const\r
+void Graphics::fillRect (Rectangle<float> r) const\r
 {\r
     context.fillRect (r);\r
 }\r
@@ -371,7 +371,7 @@ void Graphics::fillRectList (const RectangleList<int>& rects) const
 \r
 void Graphics::setPixel (int x, int y) const\r
 {\r
-    context.fillRect (Rectangle<int> (x, y, 1, 1), false);\r
+    context.fillRect (coordsToRectangle (x, y, 1, 1), false);\r
 }\r
 \r
 void Graphics::fillAll() const\r
@@ -426,7 +426,7 @@ void Graphics::drawRect (int x, int y, int width, int height, int lineThickness)
     drawRect (coordsToRectangle (x, y, width, height), lineThickness);\r
 }\r
 \r
-void Graphics::drawRect (const Rectangle<int>& r, int lineThickness) const\r
+void Graphics::drawRect (Rectangle<int> r, int lineThickness) const\r
 {\r
     drawRect (r.toFloat(), (float) lineThickness);\r
 }\r
@@ -444,7 +444,7 @@ void Graphics::drawRect (Rectangle<float> r, const float lineThickness) const
 }\r
 \r
 //==============================================================================\r
-void Graphics::fillEllipse (const Rectangle<float>& area) const\r
+void Graphics::fillEllipse (Rectangle<float> area) const\r
 {\r
     Path p;\r
     p.addEllipse (area);\r
@@ -453,19 +453,31 @@ void Graphics::fillEllipse (const Rectangle<float>& area) const
 \r
 void Graphics::fillEllipse (float x, float y, float w, float h) const\r
 {\r
-    fillEllipse (Rectangle<float> (x, y, w, h));\r
+    fillEllipse (coordsToRectangle (x, y, w, h));\r
 }\r
 \r
 void Graphics::drawEllipse (float x, float y, float width, float height, float lineThickness) const\r
 {\r
-    Path p;\r
-    p.addEllipse (x, y, width, height);\r
-    strokePath (p, PathStrokeType (lineThickness));\r
+    drawEllipse (coordsToRectangle (x, y, width, height), lineThickness);\r
 }\r
 \r
-void Graphics::drawEllipse (const Rectangle<float>& area, float lineThickness) const\r
+void Graphics::drawEllipse (Rectangle<float> area, float lineThickness) const\r
 {\r
-    drawEllipse (area.getX(), area.getY(), area.getWidth(), area.getHeight(), lineThickness);\r
+    Path p;\r
+\r
+    if (area.getWidth() == area.getHeight())\r
+    {\r
+        // For a circle, we can avoid having to generate a stroke\r
+        p.addEllipse (area.expanded (lineThickness * 0.5f));\r
+        p.addEllipse (area.reduced  (lineThickness * 0.5f));\r
+        p.setUsingNonZeroWinding (false);\r
+        fillPath (p);\r
+    }\r
+    else\r
+    {\r
+        p.addEllipse (area);\r
+        strokePath (p, PathStrokeType (lineThickness));\r
+    }\r
 }\r
 \r
 void Graphics::fillRoundedRectangle (float x, float y, float width, float height, float cornerSize) const\r
@@ -473,7 +485,7 @@ void Graphics::fillRoundedRectangle (float x, float y, float width, float height
     fillRoundedRectangle (coordsToRectangle (x, y, width, height), cornerSize);\r
 }\r
 \r
-void Graphics::fillRoundedRectangle (const Rectangle<float>& r, const float cornerSize) const\r
+void Graphics::fillRoundedRectangle (Rectangle<float> r, const float cornerSize) const\r
 {\r
     Path p;\r
     p.addRoundedRectangle (r, cornerSize);\r
@@ -486,7 +498,7 @@ void Graphics::drawRoundedRectangle (float x, float y, float width, float height
     drawRoundedRectangle (coordsToRectangle (x, y, width, height), cornerSize, lineThickness);\r
 }\r
 \r
-void Graphics::drawRoundedRectangle (const Rectangle<float>& r, float cornerSize, float lineThickness) const\r
+void Graphics::drawRoundedRectangle (Rectangle<float> r, float cornerSize, float lineThickness) const\r
 {\r
     Path p;\r
     p.addRoundedRectangle (r, cornerSize);\r
@@ -500,7 +512,7 @@ void Graphics::drawArrow (const Line<float>& line, float lineThickness, float ar
     fillPath (p);\r
 }\r
 \r
-void Graphics::fillCheckerBoard (const Rectangle<int>& area,\r
+void Graphics::fillCheckerBoard (Rectangle<int> area,\r
                                  const int checkWidth, const int checkHeight,\r
                                  Colour colour1, Colour colour2) const\r
 {\r
@@ -630,18 +642,22 @@ void Graphics::drawImageAt (const Image& imageToDraw, int x, int y, bool fillAlp
                           fillAlphaChannel);\r
 }\r
 \r
-void Graphics::drawImageWithin (const Image& imageToDraw,\r
-                                int dx, int dy, int dw, int dh,\r
-                                RectanglePlacement placementWithinTarget,\r
-                                const bool fillAlphaChannelWithCurrentBrush) const\r
+void Graphics::drawImage (const Image& imageToDraw, Rectangle<float> targetArea,\r
+                          RectanglePlacement placementWithinTarget, bool fillAlphaChannelWithCurrentBrush) const\r
 {\r
     if (imageToDraw.isValid())\r
         drawImageTransformed (imageToDraw,\r
-                              placementWithinTarget.getTransformToFit (imageToDraw.getBounds().toFloat(),\r
-                                                                       coordsToRectangle (dx, dy, dw, dh).toFloat()),\r
+                              placementWithinTarget.getTransformToFit (imageToDraw.getBounds().toFloat(), targetArea),\r
                               fillAlphaChannelWithCurrentBrush);\r
 }\r
 \r
+void Graphics::drawImageWithin (const Image& imageToDraw, int dx, int dy, int dw, int dh,\r
+                                RectanglePlacement placementWithinTarget, bool fillAlphaChannelWithCurrentBrush) const\r
+{\r
+    drawImage (imageToDraw, coordsToRectangle (dx, dy, dw, dh).toFloat(),\r
+               placementWithinTarget, fillAlphaChannelWithCurrentBrush);\r
+}\r
+\r
 void Graphics::drawImage (const Image& imageToDraw,\r
                           int dx, int dy, int dw, int dh,\r
                           int sx, int sy, int sw, int sh,\r
index 3cfcc8cf621645aa1cab009d480c3da8f87f5b27..98205394fd83527dbbd43252a68bb6416ba48aeb 100644 (file)
@@ -170,7 +170,7 @@ public:
         @see drawSingleLineText, drawFittedText, drawMultiLineText, GlyphArrangement::addJustifiedText\r
     */\r
     void drawText (const String& text,\r
-                   const Rectangle<int>& area,\r
+                   Rectangle<int> area,\r
                    Justification justificationType,\r
                    bool useEllipsesIfTooBig = true) const;\r
 \r
@@ -184,7 +184,7 @@ public:
         @see drawSingleLineText, drawFittedText, drawMultiLineText, GlyphArrangement::addJustifiedText\r
     */\r
     void drawText (const String& text,\r
-                   const Rectangle<float>& area,\r
+                   Rectangle<float> area,\r
                    Justification justificationType,\r
                    bool useEllipsesIfTooBig = true) const;\r
 \r
@@ -233,7 +233,7 @@ public:
         @see GlyphArrangement::addFittedText\r
     */\r
     void drawFittedText (const String& text,\r
-                         const Rectangle<int>& area,\r
+                         Rectangle<int> area,\r
                          Justification justificationFlags,\r
                          int maximumNumberOfLines,\r
                          float minimumHorizontalScale = 0.0f) const;\r
@@ -257,12 +257,12 @@ public:
     /** Fills a rectangle with the current colour or brush.\r
         @see drawRect, fillRoundedRectangle\r
     */\r
-    void fillRect (const Rectangle<int>& rectangle) const;\r
+    void fillRect (Rectangle<int> rectangle) const;\r
 \r
     /** Fills a rectangle with the current colour or brush.\r
         @see drawRect, fillRoundedRectangle\r
     */\r
-    void fillRect (const Rectangle<float>& rectangle) const;\r
+    void fillRect (Rectangle<float> rectangle) const;\r
 \r
     /** Fills a rectangle with the current colour or brush.\r
         @see drawRect, fillRoundedRectangle\r
@@ -297,11 +297,11 @@ public:
     /** Uses the current colour or brush to fill a rectangle with rounded corners.\r
         @see drawRoundedRectangle, Path::addRoundedRectangle\r
     */\r
-    void fillRoundedRectangle (const Rectangle<float>& rectangle,\r
+    void fillRoundedRectangle (Rectangle<float> rectangle,\r
                                float cornerSize) const;\r
 \r
     /** Fills a rectangle with a checkerboard pattern, alternating between two colours. */\r
-    void fillCheckerBoard (const Rectangle<int>& area,\r
+    void fillCheckerBoard (Rectangle<int> area,\r
                            int checkWidth, int checkHeight,\r
                            Colour colour1, Colour colour2) const;\r
 \r
@@ -321,7 +321,7 @@ public:
         The lines are drawn inside the given rectangle, and greater line thicknesses extend inwards.\r
         @see fillRect\r
     */\r
-    void drawRect (const Rectangle<int>& rectangle, int lineThickness = 1) const;\r
+    void drawRect (Rectangle<int> rectangle, int lineThickness = 1) const;\r
 \r
     /** Draws a rectangular outline, using the current colour or brush.\r
         The lines are drawn inside the given rectangle, and greater line thicknesses extend inwards.\r
@@ -338,7 +338,7 @@ public:
     /** Uses the current colour or brush to draw the outline of a rectangle with rounded corners.\r
         @see fillRoundedRectangle, Path::addRoundedRectangle\r
     */\r
-    void drawRoundedRectangle (const Rectangle<float>& rectangle,\r
+    void drawRoundedRectangle (Rectangle<float> rectangle,\r
                                float cornerSize, float lineThickness) const;\r
 \r
     /** Fills a 1x1 pixel using the current colour or brush.\r
@@ -358,7 +358,7 @@ public:
         The ellipse is drawn to fit inside the given rectangle.\r
         @see drawEllipse, Path::addEllipse\r
     */\r
-    void fillEllipse (const Rectangle<float>& area) const;\r
+    void fillEllipse (Rectangle<float> area) const;\r
 \r
     /** Draws an elliptical stroke using the current colour or brush.\r
         @see fillEllipse, Path::addEllipse\r
@@ -369,7 +369,7 @@ public:
     /** Draws an elliptical stroke using the current colour or brush.\r
         @see fillEllipse, Path::addEllipse\r
     */\r
-    void drawEllipse (const Rectangle<float>& area, float lineThickness) const;\r
+    void drawEllipse (Rectangle<float> area, float lineThickness) const;\r
 \r
     //==============================================================================\r
     /** Draws a line between two points.\r
@@ -542,6 +542,23 @@ public:
                                const AffineTransform& transform,\r
                                bool fillAlphaChannelWithCurrentBrush = false) const;\r
 \r
+    /** Draws an image to fit within a designated rectangle.\r
+\r
+        @param imageToDraw              the source image to draw\r
+        @param destArea                 the target rectangle to fit it into\r
+        @param placementWithinTarget    this specifies how the image should be positioned\r
+                                        within the target rectangle - see the RectanglePlacement\r
+                                        class for more details about this.\r
+        @param fillAlphaChannelWithCurrentBrush     if true, then instead of drawing the image, just its\r
+                                                    alpha channel will be used as a mask with which to\r
+                                                    draw with the current brush or colour. This is\r
+                                                    similar to fillAlphaMap(), and see also drawImage()\r
+        @see drawImage, drawImageTransformed, drawImageAt, RectanglePlacement\r
+    */\r
+    void drawImage (const Image& imageToDraw, Rectangle<float> targetArea,\r
+                    RectanglePlacement placementWithinTarget = RectanglePlacement::stretchToFit,\r
+                    bool fillAlphaChannelWithCurrentBrush = false) const;\r
+\r
     /** Draws an image to fit within a designated rectangle.\r
 \r
         If the image is too big or too small for the space, it will be rescaled\r
@@ -568,7 +585,6 @@ public:
                           RectanglePlacement placementWithinTarget,\r
                           bool fillAlphaChannelWithCurrentBrush = false) const;\r
 \r
-\r
     //==============================================================================\r
     /** Returns the position of the bounding box for the current clipping region.\r
         @see getClipRegion, clipRegionIntersects\r
@@ -581,7 +597,7 @@ public:
         method can be used to optimise a component's paint() method, by letting it\r
         avoid drawing complex objects that aren't within the region being repainted.\r
     */\r
-    bool clipRegionIntersects (const Rectangle<int>& area) const;\r
+    bool clipRegionIntersects (Rectangle<int> area) const;\r
 \r
     /** Intersects the current clipping region with another region.\r
 \r
@@ -595,7 +611,7 @@ public:
         @returns true if the resulting clipping region is non-zero in size\r
         @see setOrigin, clipRegionIntersects\r
     */\r
-    bool reduceClipRegion (const Rectangle<int>& area);\r
+    bool reduceClipRegion (Rectangle<int> area);\r
 \r
     /** Intersects the current clipping region with a rectangle list region.\r
 \r
@@ -625,7 +641,7 @@ public:
     bool reduceClipRegion (const Image& image, const AffineTransform& transform);\r
 \r
     /** Excludes a rectangle to stop it being drawn into. */\r
-    void excludeClipRegion (const Rectangle<int>& rectangleToExclude);\r
+    void excludeClipRegion (Rectangle<int> rectangleToExclude);\r
 \r
     /** Returns true if no drawing can be done because the clip region is zero. */\r
     bool isClipEmpty() const;\r
index c0dd87898350910aaf6642fa2755b07ebc517fab..9f55b039309fab6ec6dc93f47c858db16cc07df6 100644 (file)
@@ -449,7 +449,7 @@ namespace PathStrokeHelpers
         {\r
             destPath.startNewSubPath (firstLine.rx2, firstLine.ry2);\r
 \r
-            if (arrowhead != nullptr)\r
+            if (arrowhead != nullptr && arrowhead->startWidth > 0.0f)\r
                 addArrowhead (destPath, firstLine.rx2, firstLine.ry2, lastX1, lastY1, firstLine.x1, firstLine.y1,\r
                               width, arrowhead->startWidth);\r
             else\r
@@ -491,7 +491,7 @@ namespace PathStrokeHelpers
         {\r
             destPath.lineTo (lastX2, lastY2);\r
 \r
-            if (arrowhead != nullptr)\r
+            if (arrowhead != nullptr && arrowhead->endWidth > 0.0f)\r
                 addArrowhead (destPath, lastX2, lastY2, lastLine.rx1, lastLine.ry1, lastLine.x2, lastLine.y2,\r
                               width, arrowhead->endWidth);\r
             else\r
index cb51d5d881f246a8ac930496743f895fd5f61d70..2bf79eb8d6b1b18c0e30aa51b7c94035c14e9624 100644 (file)
@@ -102,7 +102,7 @@ public:
             sendDataChangeMessage();\r
     }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
         SoftwarePixelData* s = new SoftwarePixelData (pixelFormat, width, height, false);\r
         memcpy (s->imageData, imageData, (size_t) (lineStride * height));\r
@@ -153,13 +153,13 @@ class SubsectionPixelData  : public ImagePixelData
 public:\r
     SubsectionPixelData (ImagePixelData* const im, const Rectangle<int>& r)\r
         : ImagePixelData (im->pixelFormat, r.getWidth(), r.getHeight()),\r
-          image (im), area (r)\r
+          sourceImage (im), area (r)\r
     {\r
     }\r
 \r
     LowLevelGraphicsContext* createLowLevelContext() override\r
     {\r
-        LowLevelGraphicsContext* g = image->createLowLevelContext();\r
+        LowLevelGraphicsContext* g = sourceImage->createLowLevelContext();\r
         g->clipToRectangle (area);\r
         g->setOrigin (area.getPosition());\r
         return g;\r
@@ -167,16 +167,16 @@ public:
 \r
     void initialiseBitmapData (Image::BitmapData& bitmap, int x, int y, Image::BitmapData::ReadWriteMode mode) override\r
     {\r
-        image->initialiseBitmapData (bitmap, x + area.getX(), y + area.getY(), mode);\r
+        sourceImage->initialiseBitmapData (bitmap, x + area.getX(), y + area.getY(), mode);\r
 \r
         if (mode != Image::BitmapData::readOnly)\r
             sendDataChangeMessage();\r
     }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
         jassert (getReferenceCount() > 0); // (This method can't be used on an unowned pointer, as it will end up self-deleting)\r
-        const ScopedPointer<ImageType> type (image->createType());\r
+        const ScopedPointer<ImageType> type (createType());\r
 \r
         Image newImage (type->create (pixelFormat, area.getWidth(), area.getHeight(), pixelFormat != Image::RGB));\r
 \r
@@ -185,18 +185,17 @@ public:
             g.drawImageAt (Image (this), 0, 0);\r
         }\r
 \r
-        newImage.getPixelData()->incReferenceCount();\r
         return newImage.getPixelData();\r
     }\r
 \r
-    ImageType* createType() const override          { return image->createType(); }\r
+    ImageType* createType() const override          { return sourceImage->createType(); }\r
 \r
     /* as we always hold a reference to image, don't double count */\r
-    int getSharedCount() const noexcept override    { return getReferenceCount() + image->getSharedCount() - 1; }\r
+    int getSharedCount() const noexcept override    { return getReferenceCount() + sourceImage->getSharedCount() - 1; }\r
 \r
 private:\r
     friend class Image;\r
-    const ImagePixelData::Ptr image;\r
+    const ImagePixelData::Ptr sourceImage;\r
     const Rectangle<int> area;\r
 \r
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SubsectionPixelData)\r
index 189094c9fb6f03d12f32df40269f63e0bc473c3b..d246739c12e25a52093511185be68695ec6d7ab8 100644 (file)
@@ -435,10 +435,12 @@ public:
     ImagePixelData (Image::PixelFormat, int width, int height);\r
     ~ImagePixelData();\r
 \r
+    typedef ReferenceCountedObjectPtr<ImagePixelData> Ptr;\r
+\r
     /** Creates a context that will draw into this image. */\r
     virtual LowLevelGraphicsContext* createLowLevelContext() = 0;\r
     /** Creates a copy of this image. */\r
-    virtual ImagePixelData* clone() = 0;\r
+    virtual Ptr clone() = 0;\r
     /** Creates an instance of the type of this image. */\r
     virtual ImageType* createType() const = 0;\r
     /** Initialises a BitmapData object. */\r
@@ -458,8 +460,6 @@ public:
     */\r
     NamedValueSet userData;\r
 \r
-    typedef ReferenceCountedObjectPtr<ImagePixelData> Ptr;\r
-\r
     //==============================================================================\r
     struct Listener\r
     {\r
index 795b61bb1e0bbdc482723acd99f889f9624d3bcd..e367bde038f4be2570867b6c548fe76f61ae38f9 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_graphics\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE graphics classes\r
   description:      Classes for 2D vector graphics, image loading/saving, font handling, etc.\r
   website:          http://www.juce.com/juce\r
index 584e6e79451a580c45fb020de3072864dd96446d..90ff506bc2a8683cbe81ea78af38ea21071f04ba 100644 (file)
@@ -72,7 +72,7 @@ public:
         }\r
     }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
         CoreGraphicsImage* im = new CoreGraphicsImage (pixelFormat, width, height, false);\r
         memcpy (im->imageData, imageData, (size_t) (lineStride * height));\r
index 072cbbf74ebd226a788884a1eebedd8bd8ab0f09..7c142bcd7deb14ed1d5b9501591707f81de1a1e1 100644 (file)
@@ -73,19 +73,19 @@ public:
         The button will keep its own internal copies of these drawables.\r
 \r
         @param normalImage      the thing to draw for the button's 'normal' state. An internal copy\r
-                                will be made of the object passed-in if it is non-zero.\r
+                                will be made of the object passed-in if it is non-null.\r
         @param overImage        the thing to draw for the button's 'over' state - if this is\r
-                                zero, the button's normal image will be used when the mouse is\r
+                                null, the button's normal image will be used when the mouse is\r
                                 over it. An internal copy will be made of the object passed-in\r
-                                if it is non-zero.\r
+                                if it is non-null.\r
         @param downImage        the thing to draw for the button's 'down' state - if this is\r
-                                zero, the 'over' image will be used instead (or the normal image\r
+                                null, the 'over' image will be used instead (or the normal image\r
                                 as a last resort). An internal copy will be made of the object\r
-                                passed-in if it is non-zero.\r
-        @param disabledImage    an image to draw when the button is disabled. If this is zero,\r
+                                passed-in if it is non-null.\r
+        @param disabledImage    an image to draw when the button is disabled. If this is null,\r
                                 the normal image will be drawn with a reduced opacity instead.\r
                                 An internal copy will be made of the object passed-in if it is\r
-                                non-zero.\r
+                                non-null.\r
         @param normalImageOn    same as the normalImage, but this is used when the button's toggle\r
                                 state is 'on'. If this is nullptr, the normal image is used instead\r
         @param overImageOn      same as the overImage, but this is used when the button's toggle\r
index 23d7ab1ad5ac0f5a8a4e69a2e8f5e72d027632a4..f96dadccfcef1bfdfb02bd777e2451e9e881edff 100644 (file)
@@ -1712,7 +1712,7 @@ int Component::runModalLoop()
                                            ->callFunctionOnMessageThread (&ComponentHelpers::runModalLoopCallback, this);\r
     }\r
 \r
-    if (! isCurrentlyModal())\r
+    if (! isCurrentlyModal (false))\r
         enterModalState (true);\r
 \r
     return ModalComponentManager::getInstance()->runEventLoopForCurrentComponent();\r
@@ -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.\r
     ASSERT_MESSAGE_MANAGER_IS_LOCKED\r
 \r
-    if (! isCurrentlyModal())\r
+    if (! isCurrentlyModal (false))\r
     {\r
         ModalComponentManager& mcm = *ModalComponentManager::getInstance();\r
         mcm.startModal (this, deleteWhenDismissed);\r
@@ -1748,7 +1748,7 @@ void Component::enterModalState (const bool shouldTakeKeyboardFocus,
 \r
 void Component::exitModalState (const int returnValue)\r
 {\r
-    if (isCurrentlyModal())\r
+    if (isCurrentlyModal (false))\r
     {\r
         if (MessageManager::getInstance()->isThisTheMessageThread())\r
         {\r
@@ -1777,9 +1777,15 @@ void Component::exitModalState (const int returnValue)
     }\r
 }\r
 \r
-bool Component::isCurrentlyModal() const noexcept\r
+bool Component::isCurrentlyModal (bool onlyConsiderForemostModalComponent) const noexcept\r
 {\r
-    return getCurrentlyModalComponent() == this;\r
+    const int n = onlyConsiderForemostModalComponent ? 1 : getNumCurrentlyModalComponents();\r
+\r
+    for (int i = 0; i < n; ++i)\r
+        if (getCurrentlyModalComponent (i) == this)\r
+            return true;\r
+\r
+    return false;\r
 }\r
 \r
 bool Component::isCurrentlyBlockedByAnotherModalComponent() const\r
@@ -2679,7 +2685,7 @@ void Component::internalFocusLoss (const FocusChangeType cause)
 {\r
     const WeakReference<Component> safePointer (this);\r
 \r
-    focusLost (focusChangedDirectly);\r
+    focusLost (cause);\r
 \r
     if (safePointer != nullptr)\r
         internalChildFocusChange (cause, safePointer);\r
index 486066a17a34267cd7bd067d3e7644d6d7e54a53..4f7750f42db2d6e005a842059fd0127d2b452568 100644 (file)
@@ -1952,12 +1952,14 @@ public:
     /** Returns true if this component is the modal one.\r
 \r
         It's possible to have nested modal components, e.g. a pop-up dialog box\r
-        that launches another pop-up, but this will only return true for\r
-        the one at the top of the stack.\r
+        that launches another pop-up. If onlyConsiderForemostModalComponent is\r
+        true then isCurrentlyModal will only return true for the one at the top\r
+        of the stack. If onlyConsiderForemostModalComponent is false then\r
+        isCurrentlyModal will return true for any modal component in the stack.\r
 \r
         @see getCurrentlyModalComponent\r
     */\r
-    bool isCurrentlyModal() const noexcept;\r
+    bool isCurrentlyModal (bool onlyConsiderForemostModalComponent = true) const noexcept;\r
 \r
     /** Returns the number of components that are currently in a modal state.\r
         @see getCurrentlyModalComponent\r
index cc46ac0b94fbb87166417afaf2b583fc28679889..908c4d1f9cf6b6d8e2fda3d5027b04f4a2bb6e83 100644 (file)
@@ -245,13 +245,14 @@ bool ModalComponentManager::cancelAllModalComponents()
     return numModal > 0;\r
 }\r
 \r
+//==============================================================================\r
 #if JUCE_MODAL_LOOPS_PERMITTED\r
 class ModalComponentManager::ReturnValueRetriever     : public ModalComponentManager::Callback\r
 {\r
 public:\r
     ReturnValueRetriever (int& v, bool& done) : value (v), finished (done) {}\r
 \r
-    void modalStateFinished (int returnValue)\r
+    void modalStateFinished (int returnValue) override\r
     {\r
         finished = true;\r
         value = returnValue;\r
@@ -292,3 +293,21 @@ int ModalComponentManager::runEventLoopForCurrentComponent()
     return returnValue;\r
 }\r
 #endif\r
+\r
+//==============================================================================\r
+#if JUCE_COMPILER_SUPPORTS_LAMBDAS\r
+struct LambdaCallback  : public ModalComponentManager::Callback\r
+{\r
+    LambdaCallback (std::function<void(int)> fn) noexcept : function (fn) {}\r
+    void modalStateFinished (int result) override  { function (result); }\r
+\r
+    std::function<void(int)> function;\r
+\r
+    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LambdaCallback)\r
+};\r
+\r
+ModalComponentManager::Callback* ModalCallbackFunction::create (std::function<void(int)> f)\r
+{\r
+    return new LambdaCallback (f);\r
+}\r
+#endif\r
index b0817518a21fdfbfeccf4fd7bd2275c7a1a9709e..03b2990d935b17eb8e3244da7319b9f4bbefdad5 100644 (file)
@@ -184,9 +184,20 @@ public:
     static ModalComponentManager::Callback* create (void (*functionToCall) (int, ParamType),\r
                                                     ParamType parameterValue)\r
     {\r
-        return new FunctionCaller1 <ParamType> (functionToCall, parameterValue);\r
+        return new FunctionCaller1<ParamType> (functionToCall, parameterValue);\r
     }\r
 \r
+   #if JUCE_COMPILER_SUPPORTS_LAMBDAS\r
+    /** This is a utility function to create a ModalComponentManager::Callback that will\r
+        call a lambda function.\r
+        The lambda that you supply must take an integer parameter, which is the result code that\r
+        was returned when the modal component was dismissed.\r
+\r
+        @see ModalComponentManager::Callback\r
+    */\r
+    static ModalComponentManager::Callback* create (std::function<void(int)>);\r
+   #endif\r
+\r
     //==============================================================================\r
     /** This is a utility function to create a ModalComponentManager::Callback that will\r
         call a static function with two custom parameters.\r
@@ -214,7 +225,7 @@ public:
                                                        ParamType1 parameterValue1,\r
                                                        ParamType2 parameterValue2)\r
     {\r
-        return new FunctionCaller2 <ParamType1, ParamType2> (functionToCall, parameterValue1, parameterValue2);\r
+        return new FunctionCaller2<ParamType1, ParamType2> (functionToCall, parameterValue1, parameterValue2);\r
     }\r
 \r
     //==============================================================================\r
@@ -244,7 +255,7 @@ public:
     static ModalComponentManager::Callback* forComponent (void (*functionToCall) (int, ComponentType*),\r
                                                           ComponentType* component)\r
     {\r
-        return new ComponentCaller1 <ComponentType> (functionToCall, component);\r
+        return new ComponentCaller1<ComponentType> (functionToCall, component);\r
     }\r
 \r
     //==============================================================================\r
@@ -275,21 +286,20 @@ public:
                                                           ComponentType* component,\r
                                                           ParamType param)\r
     {\r
-        return new ComponentCaller2 <ComponentType, ParamType> (functionToCall, component, param);\r
+        return new ComponentCaller2<ComponentType, ParamType> (functionToCall, component, param);\r
     }\r
 \r
 private:\r
     //==============================================================================\r
     template <typename ParamType>\r
-    class FunctionCaller1  : public ModalComponentManager::Callback\r
+    struct FunctionCaller1  : public ModalComponentManager::Callback\r
     {\r
-    public:\r
         typedef void (*FunctionType) (int, ParamType);\r
 \r
         FunctionCaller1 (FunctionType& f, ParamType& p1)\r
             : function (f), param (p1) {}\r
 \r
-        void modalStateFinished (int returnValue)  { function (returnValue, param); }\r
+        void modalStateFinished (int returnValue) override  { function (returnValue, param); }\r
 \r
     private:\r
         const FunctionType function;\r
@@ -299,15 +309,14 @@ private:
     };\r
 \r
     template <typename ParamType1, typename ParamType2>\r
-    class FunctionCaller2  : public ModalComponentManager::Callback\r
+    struct FunctionCaller2  : public ModalComponentManager::Callback\r
     {\r
-    public:\r
         typedef void (*FunctionType) (int, ParamType1, ParamType2);\r
 \r
         FunctionCaller2 (FunctionType& f, ParamType1& p1, ParamType2& p2)\r
             : function (f), param1 (p1), param2 (p2) {}\r
 \r
-        void modalStateFinished (int returnValue)   { function (returnValue, param1, param2); }\r
+        void modalStateFinished (int returnValue) override  { function (returnValue, param1, param2); }\r
 \r
     private:\r
         const FunctionType function;\r
@@ -318,15 +327,14 @@ private:
     };\r
 \r
     template <typename ComponentType>\r
-    class ComponentCaller1  : public ModalComponentManager::Callback\r
+    struct ComponentCaller1  : public ModalComponentManager::Callback\r
     {\r
-    public:\r
         typedef void (*FunctionType) (int, ComponentType*);\r
 \r
         ComponentCaller1 (FunctionType& f, ComponentType* c)\r
             : function (f), comp (c) {}\r
 \r
-        void modalStateFinished (int returnValue)\r
+        void modalStateFinished (int returnValue) override\r
         {\r
             function (returnValue, static_cast<ComponentType*> (comp.get()));\r
         }\r
@@ -339,15 +347,14 @@ private:
     };\r
 \r
     template <typename ComponentType, typename ParamType1>\r
-    class ComponentCaller2  : public ModalComponentManager::Callback\r
+    struct ComponentCaller2  : public ModalComponentManager::Callback\r
     {\r
-    public:\r
         typedef void (*FunctionType) (int, ComponentType*, ParamType1);\r
 \r
         ComponentCaller2 (FunctionType& f, ComponentType* c, ParamType1 p1)\r
             : function (f), comp (c), param1 (p1) {}\r
 \r
-        void modalStateFinished (int returnValue)\r
+        void modalStateFinished (int returnValue) override\r
         {\r
             function (returnValue, static_cast<ComponentType*> (comp.get()), param1);\r
         }\r
index 513cf6b88c896e3e4dbe0a315a0b6ca5f87a0955..e819d3fc1a6411f2ae390b4ab2159a2ce89e0351 100644 (file)
@@ -66,6 +66,55 @@ public:
         const XmlPath* parent;\r
     };\r
 \r
+  //==============================================================================\r
+  struct UsePathOp\r
+  {\r
+    const SVGState* state;\r
+    Path* targetPath;\r
+\r
+    void operator() (const XmlPath& xmlPath)\r
+    {\r
+      state->parsePathElement (xmlPath, *targetPath);\r
+    }\r
+  };\r
+\r
+  struct GetClipPathOp\r
+  {\r
+    const SVGState* state;\r
+    Drawable* target;\r
+\r
+    void operator() (const XmlPath& xmlPath)\r
+    {\r
+      state->applyClipPath (*target, xmlPath);\r
+    }\r
+  };\r
+\r
+  struct SetGradientStopsOp\r
+  {\r
+    const SVGState* state;\r
+    ColourGradient* gradient;\r
+\r
+    void operator() (const XmlPath& xml)\r
+    {\r
+      state->addGradientStopsIn (*gradient, xml);\r
+    }\r
+  };\r
+\r
+  struct GetFillTypeOp\r
+  {\r
+    const SVGState* state;\r
+    const Path* path;\r
+    float opacity;\r
+    FillType fillType;\r
+\r
+    void operator() (const XmlPath& xml)\r
+    {\r
+      if (xml->hasTagNameIgnoringNamespace ("linearGradient")\r
+      || xml->hasTagNameIgnoringNamespace ("radialGradient"))\r
+    fillType = state->getGradientFillType (xml, *path, opacity);\r
+    }\r
+  };\r
+\r
     //==============================================================================\r
     Drawable* parseSVGElement (const XmlPath& xml)\r
     {\r
@@ -553,17 +602,6 @@ private:
         {\r
             const String linkedID = link.substring (1);\r
 \r
-            struct UsePathOp\r
-            {\r
-                const SVGState* state;\r
-                Path* targetPath;\r
-\r
-                void operator() (const XmlPath& xmlPath)\r
-                {\r
-                    state->parsePathElement (xmlPath, *targetPath);\r
-                }\r
-            };\r
-\r
             UsePathOp op = { this, &path };\r
             topLevelXml.applyOperationToChildWithID (linkedID, op);\r
         }\r
@@ -692,17 +730,6 @@ private:
 \r
             if (urlID.isNotEmpty())\r
             {\r
-                struct GetClipPathOp\r
-                {\r
-                    const SVGState* state;\r
-                    Drawable* target;\r
-\r
-                    void operator() (const XmlPath& xmlPath)\r
-                    {\r
-                        state->applyClipPath (*target, xmlPath);\r
-                    }\r
-                };\r
-\r
                 GetClipPathOp op = { this, &d };\r
                 topLevelXml.applyOperationToChildWithID (urlID, op);\r
             }\r
@@ -751,17 +778,6 @@ private:
 \r
             if (id.startsWithChar ('#'))\r
             {\r
-                struct SetGradientStopsOp\r
-                {\r
-                    const SVGState* state;\r
-                    ColourGradient* gradient;\r
-\r
-                    void operator() (const XmlPath& xml)\r
-                    {\r
-                        state->addGradientStopsIn (*gradient, xml);\r
-                    }\r
-                };\r
-\r
                 SetGradientStopsOp op = { this, &gradient, };\r
                 topLevelXml.applyOperationToChildWithID (id.substring (1), op);\r
             }\r
@@ -893,21 +909,6 @@ private:
 \r
         if (urlID.isNotEmpty())\r
         {\r
-            struct GetFillTypeOp\r
-            {\r
-                const SVGState* state;\r
-                const Path* path;\r
-                float opacity;\r
-                FillType fillType;\r
-\r
-                void operator() (const XmlPath& xml)\r
-                {\r
-                    if (xml->hasTagNameIgnoringNamespace ("linearGradient")\r
-                         || xml->hasTagNameIgnoringNamespace ("radialGradient"))\r
-                        fillType = state->getGradientFillType (xml, *path, opacity);\r
-                }\r
-            };\r
-\r
             GetFillTypeOp op = { this, &path, opacity, FillType() };\r
 \r
             if (topLevelXml.applyOperationToChildWithID (urlID, op))\r
index 97c3f3252570a1626d7e27e2e953bb8b16d506e6..7a6eb36054fa16b709574f5219cda929aa3727b1 100644 (file)
@@ -113,13 +113,15 @@ bool FileChooser::showDialog (const int flags, FilePreviewComponent* const previ
     }\r
     else\r
     {\r
-        WildcardFileFilter wildcard (selectsFiles ? filters : String::empty,\r
-                                     selectsDirectories ? "*" : String::empty,\r
-                                     String::empty);\r
+        ignoreUnused (selectMultiple);\r
+\r
+        WildcardFileFilter wildcard (selectsFiles ? filters : String(),\r
+                                     selectsDirectories ? "*" : String(),\r
+                                     String());\r
 \r
         FileBrowserComponent browserComponent (flags, startingFile, &wildcard, previewComp);\r
 \r
-        FileChooserDialogBox box (title, String::empty,\r
+        FileChooserDialogBox box (title, String(),\r
                                   browserComponent, warnAboutOverwrite,\r
                                   browserComponent.findColour (AlertWindow::backgroundColourId));\r
 \r
index 94f4729c2bc7c4f9b9dd19e151d7d47cc177ee74..b0e31ed6ab6fd61a40de2b7903b724d69e661a50 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_gui_basics\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE GUI core classes\r
   description:      Basic user-interface components and related classes.\r
   website:          http://www.juce.com/juce\r
index 29e2f4eff206117a8d05682342c7ab976527e738..22fc2c2490ca49821131c19048f71149d0781931 100644 (file)
@@ -250,7 +250,7 @@ String KeyPress::getTextDescription() const
     {\r
         // some keyboard layouts use a shift-key to get the slash, but in those cases, we\r
         // want to store it as being a slash, not shift+whatever.\r
-        if (textCharacter == '/')\r
+        if (textCharacter == '/' && keyCode != numberPadDivide)\r
             return "/";\r
 \r
         if (mods.isCtrlDown())      desc << "ctrl + ";\r
index a7d2d0bb1a9d528c4318ca04441812d989dd926c..718496c69909b080c0b1421199f9fcc09b2dd310 100644 (file)
@@ -1075,6 +1075,11 @@ void LookAndFeel_V2::drawMenuBarItem (Graphics& g, int width, int height,
     g.drawFittedText (itemText, 0, 0, width, height, Justification::centred, 1);\r
 }\r
 \r
+Component* LookAndFeel_V2::getParentComponentForMenuOptions (const PopupMenu::Options& options)\r
+{\r
+    return options.getParentComponent();\r
+}\r
+\r
 //==============================================================================\r
 void LookAndFeel_V2::fillTextEditorBackground (Graphics& g, int /*width*/, int /*height*/, TextEditor& textEditor)\r
 {\r
index aea453953a74ef68ce73dba2fe0f5916c8478b89..1633bfd03677deeeaa32466163a913a480565525 100644 (file)
@@ -173,6 +173,8 @@ public:
                           bool isMouseOverItem, bool isMenuOpen, bool isMouseOverBar,\r
                           MenuBarComponent&) override;\r
 \r
+    Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) override;\r
+\r
     //==============================================================================\r
     void drawComboBox (Graphics&, int width, int height, bool isButtonDown,\r
                        int buttonX, int buttonY, int buttonW, int buttonH,\r
index e81b1b0a24687bd8af28febd4f0e0c97e682522e..774830c0ac3427a1e5f5197d255e2dee184c1b83 100644 (file)
@@ -28,7 +28,7 @@ LookAndFeel_V3::LookAndFeel_V3()
 \r
     const Colour textButtonColour (0xffeeeeff);\r
     setColour (TextButton::buttonColourId, textButtonColour);\r
-    setColour (TextButton::buttonOnColourId, textButtonColour);\r
+    setColour (TextButton::buttonOnColourId, Colour (0xff000000));\r
     setColour (ComboBox::buttonColourId, textButtonColour);\r
     setColour (TextEditor::outlineColourId, Colours::transparentBlack);\r
     setColour (TabbedButtonBar::tabOutlineColourId, Colour (0x66000000));\r
index 04e437be2e2183863e430b754c97ef13fcc8ff66..004bfff33fd0a238af62215ca03a5d85ab03442a 100644 (file)
@@ -152,7 +152,9 @@ private:
 \r
     void updateShortcutKeyDescription()\r
     {\r
-        if (item.commandManager != nullptr && item.itemID != 0)\r
+        if (item.commandManager != nullptr\r
+             && item.itemID != 0\r
+             && item.shortcutKeyDescription.isEmpty())\r
         {\r
             String shortcutKey;\r
             const Array<KeyPress> keyPresses (item.commandManager->getKeyMappings()\r
@@ -198,6 +200,7 @@ public:
          options (opts),\r
          managerOfChosenCommand (manager),\r
          componentAttachedTo (options.targetComponent),\r
+         parentComponent (nullptr),\r
          hasBeenOver (false),\r
          needsToScroll (false),\r
          dismissOnMouseUp (shouldDismissOnMouseUp),\r
@@ -218,6 +221,8 @@ public:
         setLookAndFeel (parent != nullptr ? &(parent->getLookAndFeel())\r
                                           : menu.lookAndFeel.get());\r
 \r
+        parentComponent = getLookAndFeel().getParentComponentForMenuOptions (options);\r
+\r
         setOpaque (getLookAndFeel().findColour (PopupMenu::backgroundColourId).isOpaque()\r
                      || ! Desktop::canUseSemiTransparentWindows());\r
 \r
@@ -235,18 +240,30 @@ public:
 \r
         if (options.visibleItemID != 0)\r
         {\r
-            const int y = options.targetArea.getY() - windowPos.getY();\r
+            const Point<int> targetPosition =\r
+                (parentComponent != nullptr ? parentComponent->getLocalPoint (nullptr, options.targetArea.getTopLeft())\r
+                                            : options.targetArea.getTopLeft());\r
+\r
+            const int y = targetPosition.getY() - windowPos.getY();\r
             ensureItemIsVisible (options.visibleItemID,\r
                                  isPositiveAndBelow (y, windowPos.getHeight()) ? y : -1);\r
         }\r
 \r
         resizeToBestWindowPos();\r
-        addToDesktop (ComponentPeer::windowIsTemporary\r
-                       | ComponentPeer::windowIgnoresKeyPresses\r
-                       | getLookAndFeel().getMenuWindowFlags());\r
 \r
-        getActiveWindows().add (this);\r
-        Desktop::getInstance().addGlobalMouseListener (this);\r
+        if (parentComponent != nullptr)\r
+        {\r
+            parentComponent->addChildComponent (this);\r
+        }\r
+        else\r
+        {\r
+            addToDesktop (ComponentPeer::windowIsTemporary\r
+                          | ComponentPeer::windowIgnoresKeyPresses\r
+                          | getLookAndFeel().getMenuWindowFlags());\r
+\r
+            getActiveWindows().add (this);\r
+            Desktop::getInstance().addGlobalMouseListener (this);\r
+        }\r
     }\r
 \r
     ~MenuWindow()\r
@@ -268,10 +285,13 @@ public:
 \r
     void paintOverChildren (Graphics& g) override\r
     {\r
+        LookAndFeel& lf = getLookAndFeel();\r
+\r
+        if (parentComponent != nullptr)\r
+            lf.drawResizableFrame (g, getWidth(), getHeight(), BorderSize<int> (PopupMenuSettings::borderSize));\r
+\r
         if (canScroll())\r
         {\r
-            LookAndFeel& lf = getLookAndFeel();\r
-\r
             if (isTopScrollZoneActive())\r
                 lf.drawPopupMenuUpDownArrow (g, getWidth(), PopupMenuSettings::scrollZone, true);\r
 \r
@@ -551,27 +571,43 @@ public:
     }\r
 \r
     //==============================================================================\r
-    void calculateWindowPos (const Rectangle<int>& target, const bool alignToRectangle)\r
+    Rectangle<int> getParentArea (Point<int> targetPoint)\r
     {\r
-        const Rectangle<int> mon (Desktop::getInstance().getDisplays()\r
-                                     .getDisplayContaining (target.getCentre())\r
-                                                           #if JUCE_MAC\r
-                                                            .userArea);\r
-                                                           #else\r
-                                                            .totalArea); // on windows, don't stop the menu overlapping the taskbar\r
-                                                           #endif\r
+        Rectangle<int> parentArea (Desktop::getInstance().getDisplays()\r
+                                   .getDisplayContaining (targetPoint)\r
+                                  #if JUCE_MAC\r
+                                   .userArea);\r
+                                  #else\r
+                                   .totalArea); // on windows, don't stop the menu overlapping the taskbar\r
+                                  #endif\r
 \r
-        const int maxMenuHeight = mon.getHeight() - 24;\r
+        if (parentComponent == nullptr)\r
+            return parentArea;\r
+\r
+        return parentComponent->getLocalArea (nullptr,\r
+                                              parentComponent->getScreenBounds()\r
+                                                    .reduced (PopupMenuSettings::borderSize)\r
+                                                    .getIntersection (parentArea));\r
+    }\r
+\r
+    void calculateWindowPos (Rectangle<int> target, const bool alignToRectangle)\r
+    {\r
+        const Rectangle<int> parentArea = getParentArea (target.getCentre());\r
+\r
+        if (parentComponent != nullptr)\r
+            target = parentComponent->getLocalArea (nullptr, target).getIntersection (parentArea);\r
+\r
+        const int maxMenuHeight = parentArea.getHeight() - 24;\r
 \r
         int x, y, widthToUse, heightToUse;\r
-        layoutMenuItems (mon.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse);\r
+        layoutMenuItems (parentArea.getWidth() - 24, maxMenuHeight, widthToUse, heightToUse);\r
 \r
         if (alignToRectangle)\r
         {\r
             x = target.getX();\r
 \r
-            const int spaceUnder = mon.getHeight() - (target.getBottom() - mon.getY());\r
-            const int spaceOver = target.getY() - mon.getY();\r
+            const int spaceUnder = parentArea.getHeight() - (target.getBottom() - parentArea.getY());\r
+            const int spaceOver = target.getY() - parentArea.getY();\r
 \r
             if (heightToUse < spaceUnder - 30 || spaceUnder >= spaceOver)\r
                 y = target.getBottom();\r
@@ -580,7 +616,7 @@ public:
         }\r
         else\r
         {\r
-            bool tendTowardsRight = target.getCentreX() < mon.getCentreX();\r
+            bool tendTowardsRight = target.getCentreX() < parentArea.getCentreX();\r
 \r
             if (parent != nullptr)\r
             {\r
@@ -589,19 +625,19 @@ public:
                     const bool parentGoingRight = (parent->getX() + parent->getWidth() / 2\r
                                                     > parent->parent->getX() + parent->parent->getWidth() / 2);\r
 \r
-                    if (parentGoingRight && target.getRight() + widthToUse < mon.getRight() - 4)\r
+                    if (parentGoingRight && target.getRight() + widthToUse < parentArea.getRight() - 4)\r
                         tendTowardsRight = true;\r
                     else if ((! parentGoingRight) && target.getX() > widthToUse + 4)\r
                         tendTowardsRight = false;\r
                 }\r
-                else if (target.getRight() + widthToUse < mon.getRight() - 32)\r
+                else if (target.getRight() + widthToUse < parentArea.getRight() - 32)\r
                 {\r
                     tendTowardsRight = true;\r
                 }\r
             }\r
 \r
-            const int biggestSpace = jmax (mon.getRight() - target.getRight(),\r
-                                           target.getX() - mon.getX()) - 32;\r
+            const int biggestSpace = jmax (parentArea.getRight() - target.getRight(),\r
+                                           target.getX() - parentArea.getX()) - 32;\r
 \r
             if (biggestSpace < widthToUse)\r
             {\r
@@ -610,21 +646,21 @@ public:
                 if (numColumns > 1)\r
                     layoutMenuItems (biggestSpace - 4, maxMenuHeight, widthToUse, heightToUse);\r
 \r
-                tendTowardsRight = (mon.getRight() - target.getRight()) >= (target.getX() - mon.getX());\r
+                tendTowardsRight = (parentArea.getRight() - target.getRight()) >= (target.getX() - parentArea.getX());\r
             }\r
 \r
             if (tendTowardsRight)\r
-                x = jmin (mon.getRight() - widthToUse - 4, target.getRight());\r
+                x = jmin (parentArea.getRight() - widthToUse - 4, target.getRight());\r
             else\r
-                x = jmax (mon.getX() + 4, target.getX() - widthToUse);\r
+                x = jmax (parentArea.getX() + 4, target.getX() - widthToUse);\r
 \r
             y = target.getY();\r
-            if (target.getCentreY() > mon.getCentreY())\r
-                y = jmax (mon.getY(), target.getBottom() - heightToUse);\r
+            if (target.getCentreY() > parentArea.getCentreY())\r
+                y = jmax (parentArea.getY(), target.getBottom() - heightToUse);\r
         }\r
 \r
-        x = jmax (mon.getX() + 1, jmin (mon.getRight() - (widthToUse + 6), x));\r
-        y = jmax (mon.getY() + 1, jmin (mon.getBottom() - (heightToUse + 6), y));\r
+        x = jmax (parentArea.getX() + 1, jmin (parentArea.getRight() - (widthToUse + 6), x));\r
+        y = jmax (parentArea.getY() + 1, jmin (parentArea.getBottom() - (heightToUse + 6), y));\r
 \r
         windowPos.setBounds (x, y, widthToUse, heightToUse);\r
 \r
@@ -695,9 +731,12 @@ public:
             childNum += numChildren;\r
         }\r
 \r
-        if (totalW < options.minWidth)\r
+        // width must never be larger than the screen\r
+        const int minWidth = jmin (maxMenuW, options.minWidth);\r
+\r
+        if (totalW < minWidth)\r
         {\r
-            totalW = options.minWidth;\r
+            totalW = minWidth;\r
 \r
             for (int col = 0; col < numColumns; ++col)\r
                 columnWidths.set (0, totalW / numColumns);\r
@@ -727,16 +766,15 @@ public:
                                                     windowPos.getHeight() - (PopupMenuSettings::scrollZone + m->getHeight())),\r
                                               currentY);\r
 \r
-                        const Rectangle<int> mon (Desktop::getInstance().getDisplays()\r
-                                                    .getDisplayContaining (windowPos.getPosition()).userArea);\r
+                        const Rectangle<int> parantArea = getParentArea (windowPos.getPosition());\r
 \r
                         int deltaY = wantedY - currentY;\r
 \r
-                        windowPos.setSize (jmin (windowPos.getWidth(), mon.getWidth()),\r
-                                           jmin (windowPos.getHeight(), mon.getHeight()));\r
+                        windowPos.setSize (jmin (windowPos.getWidth(), parantArea.getWidth()),\r
+                                           jmin (windowPos.getHeight(), parantArea.getHeight()));\r
 \r
-                        const int newY = jlimit (mon.getY(),\r
-                                                 mon.getBottom() - windowPos.getHeight(),\r
+                        const int newY = jlimit (parantArea.getY(),\r
+                                                 parantArea.getBottom() - windowPos.getHeight(),\r
                                                  windowPos.getY() + deltaY);\r
 \r
                         deltaY -= newY - windowPos.getY();\r
@@ -912,6 +950,7 @@ public:
     OwnedArray<ItemComponent> items;\r
     ApplicationCommandManager** managerOfChosenCommand;\r
     WeakReference<Component> componentAttachedTo;\r
+    Component* parentComponent;\r
     Rectangle<int> windowPos;\r
     bool hasBeenOver, needsToScroll;\r
     bool dismissOnMouseUp, hideOnExit, disableMouseMoves, hasAnyJuceCompHadFocus;\r
@@ -1428,6 +1467,7 @@ void PopupMenu::addSectionHeader (const String& title)
 //==============================================================================\r
 PopupMenu::Options::Options()\r
     : targetComponent (nullptr),\r
+      parentComponent (nullptr),\r
       visibleItemID (0),\r
       minWidth (0),\r
       maxColumns (0),\r
@@ -1482,6 +1522,13 @@ PopupMenu::Options PopupMenu::Options::withItemThatMustBeVisible (int idOfItemTo
     return o;\r
 }\r
 \r
+PopupMenu::Options PopupMenu::Options::withParentComponent (Component* parent) const noexcept\r
+{\r
+    Options o (*this);\r
+    o.parentComponent = parent;\r
+    return o;\r
+}\r
+\r
 Component* PopupMenu::createWindow (const Options& options,\r
                                     ApplicationCommandManager** managerOfChosenCommand) const\r
 {\r
@@ -1506,7 +1553,7 @@ struct PopupMenuCompletionCallback  : public ModalComponentManager::Callback
         PopupMenuSettings::menuWasHiddenBecauseOfAppChange = false;\r
     }\r
 \r
-    void modalStateFinished (int result)\r
+    void modalStateFinished (int result) override\r
     {\r
         if (managerOfChosenCommand != nullptr && result != 0)\r
         {\r
index ac0a4d76729d67487e0aa89687075556c9072cbd..0a7f2778a6ebfcb4b921d2521e4b1978345250e9 100644 (file)
@@ -380,18 +380,31 @@ public:
     public:\r
         Options();\r
 \r
+        //==============================================================================\r
         Options withTargetComponent (Component* targetComponent) const noexcept;\r
         Options withTargetScreenArea (const Rectangle<int>& targetArea) const noexcept;\r
         Options withMinimumWidth (int minWidth) const noexcept;\r
         Options withMaximumNumColumns (int maxNumColumns) const noexcept;\r
         Options withStandardItemHeight (int standardHeight) const noexcept;\r
         Options withItemThatMustBeVisible (int idOfItemToBeVisible) const noexcept;\r
+        Options withParentComponent (Component* parentComponent) const noexcept;\r
+\r
+        //==============================================================================\r
+        Component* getParentComponent() const noexcept          { return parentComponent; }\r
+        Component* getTargetComponent() const noexcept          { return targetComponent; }\r
+        Rectangle<int> getTargetScreenArea() const noexcept     { return targetArea; }\r
+        int getMinimumWidth() const noexcept                    { return minWidth; }\r
+        int getMaximumNumColumns() const noexcept               { return maxColumns; }\r
+        int getStandardItemHeight() const noexcept              { return standardHeight; }\r
+        int getItemThatMustBeVisible() const noexcept           { return visibleItemID; }\r
 \r
     private:\r
+        //==============================================================================\r
         friend class PopupMenu;\r
         friend class PopupMenu::Window;\r
         Rectangle<int> targetArea;\r
         Component* targetComponent;\r
+        Component* parentComponent;\r
         int visibleItemID, minWidth, maxColumns, standardHeight;\r
     };\r
 \r
@@ -668,6 +681,8 @@ public:
                                       bool isMenuOpen,\r
                                       bool isMouseOverBar,\r
                                       MenuBarComponent&) = 0;\r
+\r
+        virtual Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) = 0;\r
     };\r
 \r
 private:\r
index 79f091e4f62bac4a9da9afb562482ff3875bb56d..09bc0674de22ebb1344ad2f1424ccbaa69b21a80 100644 (file)
@@ -572,9 +572,8 @@ private:
     int sizeAllocated;\r
     float scale;\r
 \r
-    class PreallocatedImage  : public ImagePixelData\r
+    struct PreallocatedImage  : public ImagePixelData\r
     {\r
-    public:\r
         PreallocatedImage (const int width_, const int height_, jint* data_, bool hasAlpha_)\r
             : ImagePixelData (Image::ARGB, width_, height_), data (data_), hasAlpha (hasAlpha_)\r
         {\r
@@ -607,7 +606,7 @@ private:
             bm.data = (uint8*) (data + x + y * width);\r
         }\r
 \r
-        ImagePixelData* clone()\r
+        ImagePixelData::Ptr clone()\r
         {\r
             PreallocatedImage* s = new PreallocatedImage (width, height, 0, hasAlpha);\r
             s->allocatedData.malloc (sizeof (jint) * width * height);\r
index e0a90b4aaf6c96a21067b2253364192ba3946a99..466c4ecf41f7dc19d1abf2b504c0b6eb430f1b40 100644 (file)
@@ -39,6 +39,7 @@ Array<AppInactivityCallback*> appBecomingInactiveCallbacks;
 {\r
 }\r
 \r
+@property (strong, nonatomic) UIWindow *window;\r
 - (void) applicationDidFinishLaunching: (UIApplication*) application;\r
 - (void) applicationWillTerminate: (UIApplication*) application;\r
 - (void) applicationDidEnterBackground: (UIApplication*) application;\r
index 180a0bfaadf3c4e730b9368d82dd6795aca4e010..05b23f6fcbd4abafb92b43c4418fb7ef689b6e30 100644 (file)
@@ -171,8 +171,6 @@ void FileChooser::showPlatformDialog (Array<File>& results,
     else\r
         addZenityArgs (args, separator, title, file, filters, isDirectory, isSave, selectMultipleFiles);\r
 \r
-    args.add ("2>/dev/null"); // (to avoid logging info ending up in the results)\r
-\r
     ChildProcess child;\r
 \r
     if (child.start (args, ChildProcess::wantStdOut))\r
index 752588d149642b862faa6a346cad915be441505d..5896787c9fe73503a212576a6867d27dca26bb98 100644 (file)
@@ -635,7 +635,7 @@ public:
             sendDataChangeMessage();\r
     }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
         jassertfalse;\r
         return nullptr;\r
@@ -1214,7 +1214,10 @@ private:
                                         e.dpi = ((static_cast<double> (crtc->width) * 25.4 * 0.5) / static_cast<double> (output->mm_width))\r
                                             + ((static_cast<double> (crtc->height) * 25.4 * 0.5) / static_cast<double> (output->mm_height));\r
 \r
-                                    e.scale = masterScale * getScaleForDisplay (output->name, e);\r
+                                    double scale = getScaleForDisplay (output->name, e);\r
+                                    scale = (scale <= 0.1 ? 1.0 : scale);\r
+\r
+                                    e.scale = masterScale * scale;\r
 \r
                                     infos.add (e);\r
                                 }\r
@@ -3959,9 +3962,8 @@ void* CustomMouseCursorInfo::create() const
             hotspotX = (hotspotX * (int) cursorW) / (int) imageW;\r
             hotspotY = (hotspotY * (int) cursorH) / (int) imageH;\r
 \r
-            g.drawImageWithin (image, 0, 0, (int) imageW, (int) imageH,\r
-                               RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize,\r
-                               false);\r
+            g.drawImage (image, Rectangle<float> ((float) imageW, (float) imageH),\r
+                         RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize);\r
         }\r
         else\r
         {\r
index 494958bfd17bec4912a4eb99a47d94351622f0fd..a4cea29ef20f1eb66ffe60484847c85216e5aa94 100644 (file)
@@ -2098,7 +2098,7 @@ const int KeyPress::F7Key           = NSF7FunctionKey;
 const int KeyPress::F8Key           = NSF8FunctionKey;\r
 const int KeyPress::F9Key           = NSF9FunctionKey;\r
 const int KeyPress::F10Key          = NSF10FunctionKey;\r
-const int KeyPress::F11Key          = NSF1FunctionKey;\r
+const int KeyPress::F11Key          = NSF11FunctionKey;\r
 const int KeyPress::F12Key          = NSF12FunctionKey;\r
 const int KeyPress::F13Key          = NSF13FunctionKey;\r
 const int KeyPress::F14Key          = NSF14FunctionKey;\r
index e382c9ae81bfb8c42540a40657ec708096c045aa..264b81bd7e19e40b5f26c9aa870828160b2a3ae1 100644 (file)
  #define WM_APPCOMMAND                     0x0319\r
 #endif\r
 \r
+#if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+ #include <juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h>\r
+#endif\r
+\r
 extern void juce_repeatLastProcessPriority();\r
 extern void juce_checkCurrentlyFocusedTopLevelWindow();  // in juce_TopLevelWindow.cpp\r
 extern bool juce_isRunningInWine();\r
@@ -381,7 +385,7 @@ public:
             sendDataChangeMessage();\r
     }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
         WindowsBitmapImage* im = new WindowsBitmapImage (pixelFormat, width, height, false);\r
 \r
@@ -561,6 +565,9 @@ namespace IconConverters
 \r
 //==============================================================================\r
 class HWNDComponentPeer  : public ComponentPeer\r
+   #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+    , public ModifierKeyReceiver\r
+   #endif\r
 {\r
 public:\r
     enum RenderingEngineType\r
@@ -585,6 +592,9 @@ public:
           currentWindowIcon (0),\r
           dropTarget (nullptr),\r
           updateLayeredWindowAlpha (255)\r
+         #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+        , modProvider (nullptr)\r
+         #endif\r
     {\r
         callFunctionIfNotLocked (&createWindowCallback, this);\r
 \r
@@ -1166,6 +1176,9 @@ private:
     JuceDropTarget* dropTarget;\r
     uint8 updateLayeredWindowAlpha;\r
     MultiTouchMapper<DWORD> currentTouches;\r
+   #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+    ModifierKeyProvider* modProvider;\r
+   #endif\r
 \r
     //==============================================================================\r
     class TemporaryImage    : public Timer\r
@@ -1752,6 +1765,11 @@ private:
 \r
             updateKeyModifiers();\r
 \r
+           #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+            if (modProvider != nullptr)\r
+                currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers());\r
+           #endif\r
+\r
             TRACKMOUSEEVENT tme;\r
             tme.cbSize = sizeof (tme);\r
             tme.dwFlags = TME_LEAVE;\r
@@ -1794,6 +1812,12 @@ private:
         if (isValidPeer (this))\r
         {\r
             updateModifiersFromWParam (wParam);\r
+\r
+          #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+            if (modProvider != nullptr)\r
+                currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers());\r
+          #endif\r
+\r
             isDragging = true;\r
 \r
             doMouseEvent (position, MouseInputSource::invalidPressure);\r
@@ -1807,6 +1831,12 @@ private:
             return;\r
 \r
         updateModifiersFromWParam (wParam);\r
+\r
+       #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+        if (modProvider != nullptr)\r
+            currentModifiers = currentModifiers.withFlags (modProvider->getWin32Modifiers());\r
+       #endif\r
+\r
         const bool wasDragging = isDragging;\r
         isDragging = false;\r
 \r
@@ -2392,6 +2422,19 @@ private:
     {\r
     }\r
 \r
+    //==============================================================================\r
+  #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client\r
+    void setModifierKeyProvider (ModifierKeyProvider* provider) override\r
+    {\r
+        modProvider = provider;\r
+    }\r
+\r
+    void removeModifierKeyProvider() override\r
+    {\r
+        modProvider = nullptr;\r
+    }\r
+   #endif\r
+\r
     //==============================================================================\r
 public:\r
     static LRESULT CALLBACK windowProc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)\r
index 86cb54870514ebafcf9cf81d648a62168566870d..9d75060852999491d03517e9f545044474f2cb35 100644 (file)
@@ -73,5 +73,5 @@ RectanglePlacement ImageComponent::getImagePlacement() const
 void ImageComponent::paint (Graphics& g)\r
 {\r
     g.setOpacity (1.0f);\r
-    g.drawImageWithin (image, 0, 0, getWidth(), getHeight(), placement, false);\r
+    g.drawImage (image, getLocalBounds().toFloat(), placement);\r
 }\r
index 458f0b5f0d4278c3f86f3c8adf8b28cf77d036af..c9362c23b5f39579b9bac1020071b2744b3e5aa2 100644 (file)
@@ -33,6 +33,7 @@ public:
           fixedSize (fixedSize_),\r
           drawBar (drawBar_)\r
     {\r
+        setWantsKeyboardFocus (false);\r
     }\r
 \r
     bool getToolbarItemSizes (int toolbarThickness, bool /*isToolbarVertical*/,\r
index 0594e5787ddc8aad9a248eebb9b728ddecf35783..20271150fba60b2d3d2375dc861c0696d29af520 100644 (file)
@@ -104,7 +104,7 @@ public:
 \r
         @see contentAreaChanged\r
     */\r
-    const Rectangle<int>& getContentArea() const noexcept           { return contentArea; }\r
+    Rectangle<int> getContentArea() const noexcept                  { return contentArea; }\r
 \r
     //==============================================================================\r
     /** This method must return the size criteria for this item, based on a given toolbar\r
index 8f970069eff8b61def5ddc51b0b26c8988dcc1b1..ef311e8e5b2ad4bdeb0c1ca6fd0c80b0a55b188e 100644 (file)
@@ -92,7 +92,8 @@ void TooltipWindow::displayTip (Point<int> screenPos, const String& tip)
 \r
             addToDesktop (ComponentPeer::windowHasDropShadow\r
                             | ComponentPeer::windowIsTemporary\r
-                            | ComponentPeer::windowIgnoresKeyPresses);\r
+                            | ComponentPeer::windowIgnoresKeyPresses\r
+                            | ComponentPeer::windowIgnoresMouseClicks);\r
         }\r
 \r
         toFront (false);\r
index c2719a94bde313524b829859f73398f2798d7a64..63d930522c5c3ffc02684e5b79a5cd2791327d3b 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_gui_extra\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE extended GUI classes\r
   description:      Miscellaneous GUI classes for specialised tasks.\r
   website:          http://www.juce.com/juce\r
index 40d697003618ca0f1ef87d8a2bf30b0758d92730..a5224830c8d83639e246fc11cc88de4b968784fa 100644 (file)
@@ -112,8 +112,8 @@ void SystemTrayIconComponent::setIconImage (const Image& newImage)
 void SystemTrayIconComponent::paint (Graphics& g)\r
 {\r
     if (pimpl != nullptr)\r
-        g.drawImageWithin (pimpl->image, 0, 0, getWidth(), getHeight(),\r
-                           RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize, false);\r
+        g.drawImage (pimpl->image, getLocalBounds().toFloat(),\r
+                     RectanglePlacement::xLeft | RectanglePlacement::yTop | RectanglePlacement::onlyReduceInSize);\r
 }\r
 \r
 void SystemTrayIconComponent::setIconTooltip (const String& /*tooltip*/)\r
index 208c678d9b861d843215371107f07cb4d668f474..da65fbb2f8984f61ae9dfb6fa382e5ed945508cb 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_opengl\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE OpenGL classes\r
   description:      Classes for rendering OpenGL in a JUCE window.\r
   website:          http://www.juce.com/juce\r
index 4a9dacc4ad315f97cd647f98e3a4c892630add3a..e0eae4fdd69891e4d06073905973aacf4d91bbb2 100644 (file)
@@ -46,19 +46,13 @@ public:
 \r
     ImageType* createType() const override     { return new OpenGLImageType(); }\r
 \r
-    ImagePixelData* clone() override\r
+    ImagePixelData::Ptr clone() override\r
     {\r
-        OpenGLFrameBufferImage* im = new OpenGLFrameBufferImage (context, width, height);\r
-        im->incReferenceCount();\r
+        Image newImage (new OpenGLFrameBufferImage (context, width, height));\r
+        Graphics g (newImage);\r
+        g.drawImageAt (Image (this), 0, 0, false);\r
 \r
-        {\r
-            Image newImage (im);\r
-            Graphics g (newImage);\r
-            g.drawImageAt (Image (this), 0, 0, false);\r
-        }\r
-\r
-        im->resetReferenceCount();\r
-        return im;\r
+        return newImage.getPixelData();\r
     }\r
 \r
     void initialiseBitmapData (Image::BitmapData& bitmapData, int x, int y, Image::BitmapData::ReadWriteMode mode) override\r
index 959a96533ff662731235b2c1f5cb87c43e96d7f4..98e895544aae017ccc224aa4cf9417702d307dcd 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_osc\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE OSC classes\r
   description:      Open Sound Control implementation.\r
   website:          http://www.juce.com/juce\r
index 377395375eb9998756bce1a7dd38f1632cea6f8a..e39c62541b90f916eee8fe9a1ec63c17213fd481 100644 (file)
@@ -33,7 +33,7 @@
 \r
   ID:               juce_tracktion_marketplace\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE Tracktion marketplace support\r
   description:      Classes for online product authentication via the Tracktion marketplace.\r
   website:          http://www.juce.com/juce\r
index 5b886d740e1e5dc15ffc8b9d99ccfd6b6dd0f4b5..770f977ff3432d8445b59552215761ec65aaa220 100644 (file)
@@ -34,7 +34,7 @@
 \r
   ID:               juce_video\r
   vendor:           juce\r
-  version:          4.2.1\r
+  version:          4.2.3\r
   name:             JUCE video playback and capture classes\r
   description:      Classes for playing video and capturing camera input.\r
   website:          http://www.juce.com/juce\r