From: IOhannes m zmölnig (Debian/GNU) Date: Wed, 14 Nov 2018 09:39:26 +0000 (+0100) Subject: New upstream version 5.4.1~repack X-Git-Tag: archive/raspbian/5.4.5_ds0-1+rpi1^2~17^2~5 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3cb0bb3cb508782265438675e795880732fba87a;p=juce.git New upstream version 5.4.1~repack --- diff --git a/BREAKING-CHANGES.txt b/BREAKING-CHANGES.txt index 937d8499..94086eef 100644 --- a/BREAKING-CHANGES.txt +++ b/BREAKING-CHANGES.txt @@ -5,6 +5,183 @@ Develop ======= +Version 5.4.0 +============= + +Change +------ +The use of WinRT MIDI functions has been disabled by default for any version +of Windows 10 before 1809 (October 2018 Update). + +Possible Issues +--------------- +If you were previously using WinRT MIDI functions on older versions of Windows +then the new behaviour is to revert to the old Win32 MIDI API. + +Workaround +---------- +Set the preprocessor macro JUCE_FORCE_WINRT_MIDI=1 (in addition to the +previously selected JUCE_USE_WINRT_MIDI=1) to allow the use of the WinRT API on +older versions of Windows. + +Rationale +--------- +Until now JUCE's support for the Windows 10 WinRT MIDI API was experimental, +due to longstanding issues within the API itself. These issues have been +addressed in the Windows 10 1809 (October 2018 Update) release. + + +Change +------ +The VST2 SDK embedded within JUCE has been removed. + +Possible Issues +--------------- +1. Building or hosting VST2 plug-ins requires header files from the VST2 SDK, + which is no longer part of JUCE. +2. Building a VST2-compatible VST3 plug-in (the previous default behaviour in + JUCE) requires header files from the VST2 SDK, which is no longer part of + JUCE. When a new JUCE plug-in project is created the option + JUCE_VST3_CAN_REPLACE_VST2 will be set to zero. + +Workaround +---------- +1. The VST2 SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or + older) VST3 SDK or JUCE version 5.3.2. You should put the VST2 SDK in your + header search paths or use the "VST (Legacy) SDK Folder" fields in the + Projucer. +2. For new plug-in projects where you will be releasing both a VST2 and VST3 + version, and you want the VST3 plug-in to replace the VST2 plug-in in + hosts that support it, then you should enable the JUCE_VST3_CAN_REPLACE_VST2 + option. + +Rationale +--------- +Distributing VST2 plug-ins requires a VST2 license from Steinberg. Following +Steinberg's removal of the VST2 SDK from their public SDKs we are also removing +the VST2 SDK from the JUCE codebase. + + +Change +------ +The AudioProcessorValueTreeState::createAndAddParameter function has been +deprecated. + +Possible Issues +--------------- +Deprecation warnings will be seen when compiling code which uses this function +and eventually builds will fail when it is later removed from the API. + +Workaround +---------- +Previous calls to + +createAndAddParameter (paramID, paramName, ...); + +can be directly replaced with + +using Parameter = AudioProcessorValueTreeState::Parameter; +createAndAddParameter (std::make_unique (paramID, paramName, ...)); + +but an even better approach is to use the new AudioProcessorValueTreeState +constructor where you can pass both RangedAudioParameters and +AudioProcessorParameterGroups of RangedAudioParameters to the +AudioProcessorValueTreeState and initialise the ValueTree simultaneously. + +Rationale +--------- +The new createAndAddParameter method is much more flexible and enables any +parameter types derived from RangedAudioParameter to be managed by the +AudioProcessorValueTreeState. + + +Change +------ +The Projucer's per-exporter Android SDK/NDK path options have been removed. + +Possible Issues +--------------- +Projects that previously used these fields may no longer build. + +Workaround +---------- +Use the Projucer's global paths settings to point to these directories, either +by opening the "Projucer/File->Global Paths..." menu item or using the +"--set-global-search-path" command-line option. + +Rationale +--------- +Having multiple places where the paths could be set was confusing and could +cause unexpected mismatches. + + +Change +------ +SystemStats::getDeviceDescription() will now return the device code on iOS e.g. +"iPhone7, 2" for an iPhone 6 instead of just "iPhone". + +Possible Issues +--------------- +Code that previously relied on this method returning either explicitly "iPhone" +or "iPad" may no longer work. + +Workaround +---------- +Modify this code to handle the new device code string e.g. by changing: +SystemStats::getDeviceDescription() == "iPhone"; +to +SystemStats::getDeviceDescription().contains ("iPhone");. + +Rationale +--------- +The exact device model can now be deduced from this information instead of just +the device family. + + +Change +------ +DragAndDropContainer::performExternalDragDropOfFiles() and +::performExternalDragDropOfText() are now asynchronous on Windows. + +Possible Issues +--------------- +Code that previously relied on these operations being synchronous and blocking +until completion will no longer work as the methods will return immediately and +run asynchronously. + +Workaround +---------- +Use the callback argument that has been added to these methods to register a +lambda that will be called when the operation has been completed. + +Rationale +--------- +The behaviour of these methods is now consistent across all platforms and the +method no longer blocks the message thread on Windows. + + +Change +------ +AudioProcessor::getTailLengthSeconds can now return infinity for +VST/VST3/AU/AUv3. + +Possible Issues +--------------- +If you are using the result of getTailLengthSeconds to allocate a buffer in +your host, then your host will now likely crash when loading a plug-in with an +infinite tail time. + +Workaround +---------- +Rewrite your code to not use the result of getTailLengthSeconds directly to +allocate a buffer. + +Rationale +--------- +Before this change there was no way for a JUCE plug-in to report an infinite +tail time. + + Version 5.3.2 ============= @@ -62,7 +239,7 @@ the Network Graphics Demo have been moved into the extras directory. Possible Issues --------------- -1. Due to the large number of changes that have occured in the JUCE Git +1. Due to the large number of changes that have occurred in the JUCE Git repository, pulling this version may result in a messy folder structure with empty directories that have been removed. 2. The JUCE Demo project is no longer in the JUCE repository. @@ -451,6 +628,25 @@ truncating those numbers. Version 5.1.0 ============= +Change +------ +The JUCE_COMPILER_SUPPORTS_LAMBDAS preprocessor macro has been removed. + +Possible Issues +--------------- +If your project is using JUCE_COMPILER_SUPPORTS_LAMBDAS in your source code +then it will likely evaluate to "false" and you could end up unnecessarily +using code paths which avoid lambda functions. + +Workaround +---------- +Remove the usage of JUCE_COMPILER_SUPPORTS_LAMBDAS from your code. + +Rationale +--------- +Lambda functions are now available on all platforms that JUCE supports. + + Change ------ The option to set the C++ language standard is now located in the project @@ -458,7 +654,7 @@ settings instead of the build configuration settings. Possible Issues --------------- -Projects that had a specific verison of the C++ language standard set for +Projects that had a specific version of the C++ language standard set for exporter build configurations will instead use the default (C++11) when re-saving with the new Projucer. diff --git a/ChangeList.txt b/ChangeList.txt index 54ae34b6..3594e821 100644 --- a/ChangeList.txt +++ b/ChangeList.txt @@ -1,9 +1,28 @@ - == Major JUCE features and updates == This file just lists the more notable headline features. For more detailed info about minor changes and bugfixes, please see the git log! +Version 5.4.1 + - Fixed a VST2 compilation error in VS2013 + - Projucer: Fixed some live-build compilation errors + - Fixed a bug in the Oversampling class + - MPE: Made MPESynthesiserVoice::noteOnTime public + - Fixed some bugs in the Unity plug-in wrapper + - Fixed some VS2015 compiler errors + +Version 5.4.0 + - macOS Mojave and iOS 12 support + - Windows hiDPI support + - Unity native plug-in support + - Microsoft BLE MIDI support + - Plug-in parameter groups + - Support for production-ready Android OBOE + - Video playback support on Android and iOS + - AudioProcessorValueTreeState improvements + - Support for Android Studio 3.2 + - Various bug-fixes, improvements and documentation updates + Version 5.3.2 - Removed the OSX 10.5 and 10.6 deployment target options from the Projucer and enabled more C++11 features across all platforms - Replaced all usage of ScopedPointer with std::unique_ptr @@ -96,7 +115,6 @@ Version 5.2.0 - Improved the performance of 3D rendering when multiple OpenGL contexts are used at the same time - Tweaked the rate at which EdgeTable grows its internal storage, to improve performance rendering large and complex paths - Version 5.1.2 - Fixed multiple plugin-resizing bugs - Added support for AUv3 MIDI and screen size negotiation @@ -334,4 +352,3 @@ Version 3.2.0 and valueTreeChildOrderChanged() methods to include more info about exactly what changed - Over 400 minor changes, bug-fixes, documentation improvements, etc. - diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..c60278be --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,43 @@ +# The JUCE 5 Library + +**BY DOWNLOADING, INSTALLING OR USING ANY PART OF THE JUCE LIBRARY, YOU AGREE +TO THE [JUCE 5 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-5-licence) +AND [JUCE 5 PRIVACY POLICY](https://www.juce.com/juce-5-privacy-policy), WHICH +ARE BINDING AGREEMENTS BETWEEN YOU AND ROLI, LTD. IF YOU DO NOT AGREE TO THE +TERMS, DO NOT USE THE JUCE LIBRARY.** + +We now have tier-leveled license terms for JUCE 5, with different terms for +each available license: JUCE Personal (for developers or startup businesses +with revenue under 50K USD "Revenue Limit"; free), JUCE Indie (for small +businesses with under 200K Revenue Limit; $35/month), JUCE Pro (no Revenue +Limit; $65/month), and JUCE Educational (no Revenue Limit; free for bona fide +educational institutes). All licenses allow you to commercially release +applications so long as you do not exceed the Revenue Limit and pay applicable +Fees. Once your business hits the Revenue Limit for your JUCE license, you will +either have to upgrade your JUCE license or release your Applications under the +[GNU General Public License v.3](https://www.gnu.org/licenses/gpl-3.0.en.html), +which means, among other things, that your code can be freely copied and +distributed. + +You agree to give notice to the end-users of your Applications that we may +track the IP addresses associated with their use of the Applications using JUCE +solely for our internal purposes in providing JUCE, unless you are a paying +JUCE customer and opt-out of such tracking. You agree to fully comply with all +laws, including relating to the collection of information from children and the +[Children’s Online Privacy Protection Act +(COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule). + +JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER +EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE, ARE DISCLAIMED. + +The juce_audio_basics, juce_audio_devices, juce_blocks_basics, juce_core and +juce_events modules are permissively licensed under the terms of the [ISC +license](http://www.isc.org/downloads/software-support-policy/isc-license). + +For more information, visit the website: +[www.juce.com](https://www.juce.com) + +FULL JUCE TERMS: +- [JUCE 5 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-5-licence) +- [JUCE 5 PRIVACY POLICY](https://www.juce.com/juce-5-privacy-policy) \ No newline at end of file diff --git a/README.md b/README.md index 2bfc4c7b..7cd17e04 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,63 @@ -# The JUCE 5 Library - -**BY DOWNLOADING, INSTALLING OR USING ANY PART OF THE JUCE LIBRARY, YOU AGREE -TO THE [JUCE 5 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-5-licence) -AND [JUCE 5 PRIVACY POLICY](https://www.juce.com/juce-5-privacy-policy), WHICH -ARE BINDING AGREEMENTS BETWEEN YOU AND ROLI, LTD. IF YOU DO NOT AGREE TO THE -TERMS, DO NOT USE THE JUCE LIBRARY.** - -JUCE is an all-encompassing C++ framework for developing cross-platform -software. JUCE is used by hundreds of companies to develop powerful, -cross-platform audio, interactive, embedded or graphic applications. - -We now have tier-leveled license terms for JUCE 5, with different terms for -each available license: JUCE Personal (for developers or startup businesses -with revenue under 50K USD "Revenue Limit"; free), JUCE Indie (for small -businesses with under 200K Revenue Limit; $35/month), JUCE Pro (no Revenue -Limit; $65/month), and JUCE Educational (no Revenue Limit; free for bona fide -educational institutes). All licenses allow you to commercially release -applications so long as you do not exceed the Revenue Limit and pay applicable -Fees. Once your business hits the Revenue Limit for your JUCE license, you will -either have to upgrade your JUCE license or release your Applications under the -[GNU General Public License v.3](https://www.gnu.org/licenses/gpl-3.0.en.html), -which means, among other things, that your code can be freely copied and -distributed. - -You agree to give notice to the end-users of your Applications that we may -track the IP addresses associated with their use of the Applications using JUCE -solely for our internal purposes in providing JUCE, unless you are a paying -JUCE customer and opt-out of such tracking. You agree to fully comply with all -laws, including relating to the collection of information from children and the -[Children’s Online Privacy Protection Act -(COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule). - -JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER -EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE, ARE DISCLAIMED. - -The juce_audio_basics, juce_audio_devices, juce_blocks_basics, juce_core and -juce_events modules are permissively licensed under the terms of the [ISC -license](http://www.isc.org/downloads/software-support-policy/isc-license). - -For more information, visit the website: -[www.juce.com](https://www.juce.com) - -FULL JUCE TERMS: -- [JUCE 5 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-5-licence) -- [JUCE 5 PRIVACY POLICY](https://www.juce.com/juce-5-privacy-policy) +![alt text](https://d30pueezughrda.cloudfront.net/juce/JUCE_banner.png "JUCE") + +JUCE is an open-source cross-platform C++ application framework used for rapidly +developing high quality desktop and mobile applications, including VST, AU (and AUv3), +RTAS and AAX audio plug-ins. JUCE can be easily integrated with existing projects or can +be used as a project generation tool via the [Projucer](https://juce.com/discover/projucer), +which supports exporting projects for Xcode (macOS and iOS), Visual Studio, Android Studio, +Code::Blocks, CLion and Linux Makefiles as well as containing a source code editor and +live-coding engine which can be used for rapid prototyping. + +## Getting Started +The JUCE repository contains a [master](https://github.com/weareroli/JUCE/tree/master) +and [develop](https://github.com/weareroli/JUCE/tree/develop) branch. The develop branch +contains the latest bugfixes and features and is periodically merged into the master +branch in stable [tagged releases](https://github.com/WeAreROLI/JUCE/releases) +(the latest release containing pre-built binaries can be also downloaded from the +[JUCE website](https://shop.juce.com/get-juce)). + +The repository doesn't contain a pre-built Projucer so you will need to build it +for your platform - Xcode, Visual Studio and Linux Makefile projects are located in +[extras/Projucer/Builds](/extras/Projucer/Builds) +(the minumum system requirements are listed in the __System Requirements__ section below). +The Projucer can then be used to create new JUCE projects, view tutorials and run examples. +It is also possible to include the JUCE modules source code in an existing project directly, +or build them into a static or dynamic library which can be linked into a project. + +For further help getting started, please refer to the JUCE +[documentation](https://juce.com/learn/documentation) and +[tutorials](https://juce.com/learn/tutorials). + +## System Requirements +#### Building JUCE Projects +- __macOS__: macOS 10.11 and Xcode 7.3.1 +- __Windows__: Windows 8.1 and Visual Studio 2013 64-bit +- __Linux__: GCC 5.0 + +#### Minimum Deployment Targets +- __macOS__: macOS 10.7 +- __Windows__: Windows Vista +- __Linux__: Mainstream Linux distributions + +## Contributing +For bug reports and features requests, please visit the [JUCE Forum](https://forum.juce.com/) - +the JUCE developers are active there and will read every post and respond accordingly. When +submitting a bug report, please ensure that it follows the +[issue template](/.github/ISSUE_TEMPLATE.txt). +We don't accept third party GitHub pull requests directly due to copyright restrictions +but if you would like to contribute any changes please contact us. + +## License +The core JUCE modules (juce_audio_basics, juce_audio_devices, juce_blocks_basics, juce_core +and juce_events) are permissively licensed under the terms of the +[ISC license](http://www.isc.org/downloads/software-support-policy/isc-license/). +Other modules are covered by a +[GPL/Commercial license](https://www.gnu.org/licenses/gpl-3.0.en.html). + +There are multiple commercial licensing tiers for JUCE 5, with different terms for each: +- JUCE Personal (developers or startup businesses with revenue under 50K USD) - free +- JUCE Indie (small businesses with revenue under 200K USD) - $35/month +- JUCE Pro (no revenue limit) - $65/month +- JUCE Eductational (no revenue limit) - free for bona fide educational institutes + +For full terms see [LICENSE.md](LICENSE.md). \ No newline at end of file diff --git a/doxygen/Doxyfile b/doxygen/Doxyfile index 84a0fb85..1c0b6796 100644 --- a/doxygen/Doxyfile +++ b/doxygen/Doxyfile @@ -228,7 +228,8 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = "topictag{1}=\1" \ +ALIASES = "tags{1}=" \ + "topictag{1}=\1" \ "box{1}=
\1
" \ "endbox=
" \ "c_void=@s_code{void}" \ diff --git a/examples/Assets/Box2DTests/Chain.h b/examples/Assets/Box2DTests/Chain.h index be4d5c9f..e98390aa 100644 --- a/examples/Assets/Box2DTests/Chain.h +++ b/examples/Assets/Box2DTests/Chain.h @@ -24,7 +24,7 @@ class Chain : public Test public: Chain() { - b2Body* ground = NULL; + b2Body* ground = {}; { b2BodyDef bd; ground = m_world->CreateBody(&bd); diff --git a/examples/Audio/AudioAppDemo.h b/examples/Audio/AudioAppDemo.h index d1db7ab1..f08e5750 100644 --- a/examples/Audio/AudioAppDemo.h +++ b/examples/Audio/AudioAppDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AudioAppDemo diff --git a/examples/Audio/AudioLatencyDemo.h b/examples/Audio/AudioLatencyDemo.h index 45733d37..45bc329d 100644 --- a/examples/Audio/AudioLatencyDemo.h +++ b/examples/Audio/AudioLatencyDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AudioLatencyDemo @@ -151,7 +153,7 @@ public: auto inputSamp = 0.0f; for (auto j = numInputChannels; --j >= 0;) - if (inputChannelData[j] != 0) + if (inputChannelData[j] != nullptr) inputSamp += inputChannelData[j][i]; recordingBuffer[recordedSampleNum] = inputSamp; @@ -162,7 +164,7 @@ public: auto outputSamp = (playingSampleNum < testSound.getNumSamples()) ? playBuffer[playingSampleNum] : 0.0f; for (auto j = numOutputChannels; --j >= 0;) - if (outputChannelData[j] != 0) + if (outputChannelData[j] != nullptr) outputChannelData[j][i] = outputSamp; ++playingSampleNum; @@ -172,7 +174,7 @@ public: { // We need to clear the output buffers, in case they're full of junk.. for (int i = 0; i < numOutputChannels; ++i) - if (outputChannelData[i] != 0) + if (outputChannelData[i] != nullptr) zeromem (outputChannelData[i], sizeof (float) * (size_t) numSamples); } } diff --git a/examples/Audio/AudioRecordingDemo.h b/examples/Audio/AudioRecordingDemo.h index 8266a0d1..159ee16f 100644 --- a/examples/Audio/AudioRecordingDemo.h +++ b/examples/Audio/AudioRecordingDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AudioRecordingDemo @@ -76,15 +78,13 @@ public: { // Create an OutputStream to write to our destination file... file.deleteFile(); - std::unique_ptr fileStream (file.createOutputStream()); - if (fileStream.get() != nullptr) + if (auto fileStream = std::unique_ptr (file.createOutputStream())) { // Now create a WAV writer object that writes to our output stream... WavAudioFormat wavFormat; - auto* writer = wavFormat.createWriterFor (fileStream.get(), sampleRate, 1, 16, {}, 0); - if (writer != nullptr) + if (auto writer = wavFormat.createWriterFor (fileStream.get(), sampleRate, 1, 16, {}, 0)) { fileStream.release(); // (passes responsibility for deleting the stream to the writer object that is now using it) diff --git a/examples/Audio/AudioSettingsDemo.h b/examples/Audio/AudioSettingsDemo.h index d93377bc..5118b6b6 100644 --- a/examples/Audio/AudioSettingsDemo.h +++ b/examples/Audio/AudioSettingsDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AudioSettingsDemo diff --git a/examples/Audio/AudioSynthesiserDemo.h b/examples/Audio/AudioSynthesiserDemo.h index 5e1e7cad..ddb90b1b 100644 --- a/examples/Audio/AudioSynthesiserDemo.h +++ b/examples/Audio/AudioSynthesiserDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AudioSynthesiserDemo diff --git a/examples/Audio/MPEDemo.h b/examples/Audio/MPEDemo.h index e1e2c5c4..d6c7fa3c 100644 --- a/examples/Audio/MPEDemo.h +++ b/examples/Audio/MPEDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MPEDemo diff --git a/examples/Audio/MidiDemo.h b/examples/Audio/MidiDemo.h index 4f576711..3d3df92c 100644 --- a/examples/Audio/MidiDemo.h +++ b/examples/Audio/MidiDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, xcode_iphone, androidstudio + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MidiDemo @@ -59,19 +61,13 @@ struct MidiDeviceListEntry : ReferenceCountedObject using Ptr = ReferenceCountedObjectPtr; }; -//============================================================================== -struct MidiCallbackMessage : public Message -{ - MidiCallbackMessage (const MidiMessage& msg) : message (msg) {} - MidiMessage message; -}; //============================================================================== class MidiDemo : public Component, private Timer, private MidiKeyboardStateListener, private MidiInputCallback, - private MessageListener + private AsyncUpdater { public: //============================================================================== @@ -152,21 +148,6 @@ public: sendToOutputs (m); } - void handleMessage (const Message& msg) override - { - // This is called on the message loop - - auto& mm = dynamic_cast (msg).message; - String midiString; - midiString << (mm.isNoteOn() ? String ("Note on: ") : String ("Note off: ")); - midiString << (MidiMessage::getMidiNoteName (mm.getNoteNumber(), true, true, true)); - midiString << (String (" vel = ")); - midiString << static_cast (mm.getVelocity()); - midiString << "\n"; - - midiMonitor.insertTextAtCaret (midiString); - } - void paint (Graphics&) override {} void resized() override @@ -260,11 +241,9 @@ public: private: //============================================================================== - class MidiDeviceListBox : public ListBox, - private ListBoxModel + struct MidiDeviceListBox : public ListBox, + private ListBoxModel { - public: - //============================================================================== MidiDeviceListBox (const String& name, MidiDemo& contentComponent, bool isInputDeviceList) @@ -284,7 +263,6 @@ private: : parent.getNumMidiOutputs(); } - //============================================================================== void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool rowIsSelected) override { @@ -359,12 +337,30 @@ private: void handleIncomingMidiMessage (MidiInput* /*source*/, const MidiMessage& message) override { // This is called on the MIDI thread + const ScopedLock sl (midiMonitorLock); + incomingMessages.add (message); + triggerAsyncUpdate(); + } + + void handleAsyncUpdate() override + { + // This is called on the message loop + Array messages; + + { + const ScopedLock sl (midiMonitorLock); + messages.swapWith (incomingMessages); + } + + String messageText; + + for (auto& m : messages) + messageText << m.getDescription() << "\n"; - if (message.isNoteOnOrOff()) - postMessage (new MidiCallbackMessage (message)); + midiMonitor.insertTextAtCaret (messageText); } - void sendToOutputs(const MidiMessage& msg) + void sendToOutputs (const MidiMessage& msg) { for (auto midiOutput : midiOutputs) if (midiOutput->outDevice.get() != nullptr) @@ -476,11 +472,11 @@ private: TextEditor midiMonitor { "MIDI Monitor" }; TextButton pairButton { "MIDI Bluetooth devices..." }; - std::unique_ptr midiInputSelector; - std::unique_ptr midiOutputSelector; + std::unique_ptr midiInputSelector, midiOutputSelector; + ReferenceCountedArray midiInputs, midiOutputs; - ReferenceCountedArray midiInputs; - ReferenceCountedArray midiOutputs; + CriticalSection midiMonitorLock; + Array incomingMessages; //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiDemo) diff --git a/examples/Audio/PluckedStringsDemo.h b/examples/Audio/PluckedStringsDemo.h index cf3b02b9..d53701a3 100644 --- a/examples/Audio/PluckedStringsDemo.h +++ b/examples/Audio/PluckedStringsDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: PluckedStringsDemo diff --git a/examples/Audio/SimpleFFTDemo.h b/examples/Audio/SimpleFFTDemo.h index 2f99a29c..4fa8d5d0 100644 --- a/examples/Audio/SimpleFFTDemo.h +++ b/examples/Audio/SimpleFFTDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: SimpleFFTDemo diff --git a/examples/BLOCKS/BlocksDrawingDemo.h b/examples/BLOCKS/BlocksDrawingDemo.h index 5ea9708c..b9d5d119 100644 --- a/examples/BLOCKS/BlocksDrawingDemo.h +++ b/examples/BLOCKS/BlocksDrawingDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: BlocksDrawingDemo @@ -311,6 +313,8 @@ public: #endif setSize (600, 600); + + topologyChanged(); } ~BlocksDrawingDemo() @@ -319,6 +323,7 @@ public: detachActiveBlock(); lightpadComponent.removeListener (this); + topologySource.removeListener (this); } void resized() override diff --git a/examples/BLOCKS/BlocksMonitorDemo.h b/examples/BLOCKS/BlocksMonitorDemo.h index 7c32040b..2f3d02ca 100644 --- a/examples/BLOCKS/BlocksMonitorDemo.h +++ b/examples/BLOCKS/BlocksMonitorDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: BlocksMonitorDemo @@ -603,6 +605,13 @@ public: #endif setSize (600, 600); + + topologyChanged(); + } + + ~BlocksMonitorDemo() + { + topologySource.removeListener (this); } void paint (Graphics&) override {} diff --git a/examples/BLOCKS/BlocksSynthDemo.h b/examples/BLOCKS/BlocksSynthDemo.h index 3476b759..0745c82c 100644 --- a/examples/BLOCKS/BlocksSynthDemo.h +++ b/examples/BLOCKS/BlocksSynthDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: BlocksSynthDemo @@ -352,7 +354,11 @@ public: } private: + #ifndef JUCE_DEMO_RUNNER AudioDeviceManager audioDeviceManager; + #else + AudioDeviceManager& audioDeviceManager { getSharedAudioDeviceManager (0, 2) }; + #endif Synthesiser synthesiser; //============================================================================== @@ -601,12 +607,16 @@ public: #endif setSize (600, 400); + + topologyChanged(); } ~BlocksSynthDemo() { if (activeBlock != nullptr) detachActiveBlock(); + + topologySource.removeListener (this); } void paint (Graphics& g) override diff --git a/examples/DSP/ConvolutionDemo.h b/examples/DSP/ConvolutionDemo.h index d9db0aef..2f99f3e0 100644 --- a/examples/DSP/ConvolutionDemo.h +++ b/examples/DSP/ConvolutionDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: ConvolutionDemo diff --git a/examples/DSP/FIRFilterDemo.h b/examples/DSP/FIRFilterDemo.h index bcb9ce55..3964271f 100644 --- a/examples/DSP/FIRFilterDemo.h +++ b/examples/DSP/FIRFilterDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: FIRFilterDemo diff --git a/examples/DSP/GainDemo.h b/examples/DSP/GainDemo.h index 72ee5eb3..cd4566f4 100644 --- a/examples/DSP/GainDemo.h +++ b/examples/DSP/GainDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: GainDemo diff --git a/examples/DSP/IIRFilterDemo.h b/examples/DSP/IIRFilterDemo.h index fe885fe3..2bad711f 100644 --- a/examples/DSP/IIRFilterDemo.h +++ b/examples/DSP/IIRFilterDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: IIRFilterDemo diff --git a/examples/DSP/OscillatorDemo.h b/examples/DSP/OscillatorDemo.h index 28945a3d..1199242b 100644 --- a/examples/DSP/OscillatorDemo.h +++ b/examples/DSP/OscillatorDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OscillatorDemo diff --git a/examples/DSP/OverdriveDemo.h b/examples/DSP/OverdriveDemo.h index 8b929c52..ba4f19e6 100644 --- a/examples/DSP/OverdriveDemo.h +++ b/examples/DSP/OverdriveDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OverdriveDemo diff --git a/examples/DSP/SIMDRegisterDemo.h b/examples/DSP/SIMDRegisterDemo.h index da338865..4b37b5b0 100644 --- a/examples/DSP/SIMDRegisterDemo.h +++ b/examples/DSP/SIMDRegisterDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: SIMDRegisterDemo diff --git a/examples/DSP/StateVariableFilterDemo.h b/examples/DSP/StateVariableFilterDemo.h index ac4d98f6..416a6748 100644 --- a/examples/DSP/StateVariableFilterDemo.h +++ b/examples/DSP/StateVariableFilterDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: StateVariableFilterDemo diff --git a/examples/DSP/WaveShaperTanhDemo.h b/examples/DSP/WaveShaperTanhDemo.h index 2da75a7a..46a62a21 100644 --- a/examples/DSP/WaveShaperTanhDemo.h +++ b/examples/DSP/WaveShaperTanhDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: WaveShaperTanhDemo diff --git a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt index e6ad817f..9a22d943 100644 --- a/examples/DemoRunner/Builds/Android/app/CMakeLists.txt +++ b/examples/DemoRunner/Builds/Android/app/CMakeLists.txt @@ -8,7 +8,7 @@ SET(BINARY_NAME "juce_jni") add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c") set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression") -add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_demorunner_DemoRunner" "-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/demorunner/DemoRunner\"" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSNAME=com_juce_demorunner_SharingContentProvider" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSPATH=\"com/juce/demorunner/SharingContentProvider\"" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.3.2" "-DJUCE_APP_VERSION_HEX=0x50302") +add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_juce_demorunner_DemoRunner" "-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/juce/demorunner/DemoRunner\"" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSNAME=com_juce_demorunner_SharingContentProvider" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSPATH=\"com/juce/demorunner/SharingContentProvider\"" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.1" "-DJUCE_APP_VERSION_HEX=0x50401") include_directories( AFTER "../../../JuceLibraryCode" @@ -56,6 +56,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" @@ -319,6 +321,91 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" @@ -330,7 +417,6 @@ add_library( ${BINARY_NAME} "../../../../../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_VSTCommon.h" - "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" @@ -344,6 +430,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" "../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" @@ -362,6 +450,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" + "../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" "../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" "../../../../../modules/juce_audio_processors/juce_audio_processors.mm" "../../../../../modules/juce_audio_processors/juce_audio_processors.h" @@ -531,6 +620,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_AbstractFifo.h" "../../../../../modules/juce_core/containers/juce_Array.h" "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" + "../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" + "../../../../../modules/juce_core/containers/juce_ArrayBase.h" "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" @@ -540,9 +631,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_ListenerList.h" "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" "../../../../../modules/juce_core/containers/juce_NamedValueSet.h" + "../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" "../../../../../modules/juce_core/containers/juce_OwnedArray.h" "../../../../../modules/juce_core/containers/juce_PropertySet.cpp" "../../../../../modules/juce_core/containers/juce_PropertySet.h" + "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" "../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" "../../../../../modules/juce_core/containers/juce_SortedSet.h" @@ -589,6 +682,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_ByteOrder.h" "../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" "../../../../../modules/juce_core/memory/juce_HeapBlock.h" + "../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_Memory.h" "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" @@ -599,6 +693,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" "../../../../../modules/juce_core/misc/juce_Result.cpp" "../../../../../modules/juce_core/misc/juce_Result.h" "../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" @@ -629,6 +725,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" "../../../../../modules/juce_core/native/juce_mac_Threads.mm" "../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" + "../../../../../modules/juce_core/native/juce_posix_IPAddress.h" "../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" "../../../../../modules/juce_core/native/juce_posix_SharedCode.h" "../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" @@ -862,6 +959,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" "../../../../../modules/juce_events/messages/juce_ApplicationBase.h" "../../../../../modules/juce_events/messages/juce_CallbackMessage.h" @@ -1091,10 +1190,12 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_basics/components/juce_Component.h" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.h" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" "../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" @@ -1355,6 +1456,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" + "../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" "../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" "../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" @@ -1467,6 +1569,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_video/capture/juce_CameraDevice.cpp" "../../../../../modules/juce_video/capture/juce_CameraDevice.h" "../../../../../modules/juce_video/native/juce_android_CameraDevice.h" + "../../../../../modules/juce_video/native/juce_android_Video.h" "../../../../../modules/juce_video/native/juce_ios_CameraDevice.h" "../../../../../modules/juce_video/native/juce_mac_CameraDevice.h" "../../../../../modules/juce_video/native/juce_mac_Video.h" @@ -1521,6 +1624,8 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/ju set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1784,6 +1889,91 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1795,7 +1985,6 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1809,6 +1998,8 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/proces set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1827,6 +2018,7 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/utilit set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1996,6 +2188,8 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Ab set_source_files_properties("../../../../../modules/juce_core/containers/juce_AbstractFifo.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_Array.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ElementComparator.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2005,9 +2199,11 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Li set_source_files_properties("../../../../../modules/juce_core/containers/juce_ListenerList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_SortedSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2054,6 +2250,7 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Atomic set_source_files_properties("../../../../../modules/juce_core/memory/juce_ByteOrder.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeapBlock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Memory.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2064,6 +2261,8 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Scoped set_source_files_properties("../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Singleton.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_WeakReference.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2094,6 +2293,7 @@ set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_St set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_Threads.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_IPAddress.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_SharedCode.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2327,6 +2527,8 @@ set_source_files_properties("../../../../../modules/juce_events/interprocess/juc set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_CallbackMessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2556,10 +2758,12 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/components/j set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Component.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2820,6 +3024,7 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/documents/juc set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2932,6 +3137,7 @@ set_source_files_properties("../../../../../modules/juce_product_unlocking/juce_ set_source_files_properties("../../../../../modules/juce_video/capture/juce_CameraDevice.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/capture/juce_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_android_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_video/native/juce_android_Video.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_ios_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_mac_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_mac_Video.h" PROPERTIES HEADER_FILE_ONLY TRUE) diff --git a/examples/DemoRunner/Builds/Android/app/build.gradle b/examples/DemoRunner/Builds/Android/app/build.gradle index b2250b3f..c384afbb 100644 --- a/examples/DemoRunner/Builds/Android/app/build.gradle +++ b/examples/DemoRunner/Builds/Android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.0" externalNativeBuild { cmake { path "CMakeLists.txt" @@ -25,8 +25,8 @@ android { externalNativeBuild { cmake { arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_static", "-DANDROID_CPP_FEATURES=exceptions rtti", "-DANDROID_ARM_MODE=arm", "-DANDROID_ARM_NEON=TRUE" - cFlags "-fsigned-char" - cppFlags "-fsigned-char", "-std=c++14" + cFlags "-fsigned-char", "-Wall", "-Wno-missing-field-initializers", "-Wshadow-all", "-Wstrict-aliasing", "-Wuninitialized", "-Wunused-parameter", "-Wsign-compare", "-Wint-conversion", "-Wconditional-uninitialized", "-Woverloaded-virtual", "-Wreorder", "-Wconstant-conversion", "-Wunused-private-field", "-Wbool-conversion", "-Wextra-semi", "-Wno-ignored-qualifiers", "-Wunreachable-code" + cppFlags "-fsigned-char", "-std=c++14", "-Wall", "-Wno-missing-field-initializers", "-Wshadow-all", "-Wstrict-aliasing", "-Wuninitialized", "-Wunused-parameter", "-Wsign-compare", "-Wint-conversion", "-Wconditional-uninitialized", "-Woverloaded-virtual", "-Wreorder", "-Wconstant-conversion", "-Wunused-private-field", "-Wbool-conversion", "-Wextra-semi", "-Wno-ignored-qualifiers", "-Wunreachable-code" } } } @@ -50,7 +50,7 @@ android { productFlavors { debug_ { ndk { - abiFilters "armeabi", "x86" + abiFilters "armeabi-v7a", "x86" } externalNativeBuild { cmake { diff --git a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml index 6d7c487a..f302ae11 100644 --- a/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml +++ b/examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml @@ -1,9 +1,8 @@ - - diff --git a/examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h b/examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h index be4d5c9f..e98390aa 100644 --- a/examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h +++ b/examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h @@ -24,7 +24,7 @@ class Chain : public Test public: Chain() { - b2Body* ground = NULL; + b2Body* ground = {}; { b2BodyDef bd; ground = m_world->CreateBody(&bd); diff --git a/examples/DemoRunner/Builds/Android/app/src/main/java/com/juce/demorunner/DemoRunner.java b/examples/DemoRunner/Builds/Android/app/src/main/java/com/juce/demorunner/DemoRunner.java index 6320a603..b5a9a062 100644 --- a/examples/DemoRunner/Builds/Android/app/src/main/java/com/juce/demorunner/DemoRunner.java +++ b/examples/DemoRunner/Builds/Android/app/src/main/java/com/juce/demorunner/DemoRunner.java @@ -31,6 +31,9 @@ import android.content.res.Configuration; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.hardware.camera2.*; +import android.database.ContentObserver; +import android.media.session.*; +import android.media.MediaMetadata; import android.net.http.SslError; import android.net.Uri; import android.os.Bundle; @@ -94,8 +97,11 @@ public class DemoRunner extends Activity //============================================================================== public boolean isPermissionDeclaredInManifest (int permissionID) { - String permissionToCheck = getAndroidPermissionName(permissionID); + return isPermissionDeclaredInManifest (getAndroidPermissionName (permissionID)); + } + public boolean isPermissionDeclaredInManifest (String permissionToCheck) + { try { PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); @@ -1488,7 +1494,9 @@ public class DemoRunner extends Activity public final String getClipboardContent() { ClipboardManager clipboard = (ClipboardManager) getSystemService (CLIPBOARD_SERVICE); - return clipboard.getText().toString(); + + CharSequence content = clipboard.getText(); + return content != null ? content.toString() : new String(); } public final void setClipboardContent (String newText) @@ -1997,11 +2005,13 @@ public class DemoRunner extends Activity implements SurfaceHolder.Callback { private long nativeContext = 0; + private boolean forVideo; - NativeSurfaceView (Context context, long nativeContextPtr) + NativeSurfaceView (Context context, long nativeContextPtr, boolean createdForVideo) { super (context); nativeContext = nativeContextPtr; + forVideo = createdForVideo; } public Surface getNativeSurface() @@ -2019,38 +2029,51 @@ public class DemoRunner extends Activity @Override public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { - surfaceChangedNative (nativeContext, holder, format, width, height); + if (forVideo) + surfaceChangedNativeVideo (nativeContext, holder, format, width, height); + else + surfaceChangedNative (nativeContext, holder, format, width, height); } @Override public void surfaceCreated (SurfaceHolder holder) { - surfaceCreatedNative (nativeContext, holder); + if (forVideo) + surfaceCreatedNativeVideo (nativeContext, holder); + else + surfaceCreatedNative (nativeContext, holder); } @Override public void surfaceDestroyed (SurfaceHolder holder) { - surfaceDestroyedNative (nativeContext, holder); + if (forVideo) + surfaceDestroyedNativeVideo (nativeContext, holder); + else + surfaceDestroyedNative (nativeContext, holder); } @Override protected void dispatchDraw (Canvas canvas) { super.dispatchDraw (canvas); - dispatchDrawNative (nativeContext, canvas); + + if (forVideo) + dispatchDrawNativeVideo (nativeContext, canvas); + else + dispatchDrawNative (nativeContext, canvas); } //============================================================================== @Override - protected void onAttachedToWindow () + protected void onAttachedToWindow() { super.onAttachedToWindow(); getHolder().addCallback (this); } @Override - protected void onDetachedFromWindow () + protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getHolder().removeCallback (this); @@ -2062,11 +2085,17 @@ public class DemoRunner extends Activity private native void surfaceDestroyedNative (long nativeContextptr, SurfaceHolder holder); private native void surfaceChangedNative (long nativeContextptr, SurfaceHolder holder, int format, int width, int height); + + private native void dispatchDrawNativeVideo (long nativeContextPtr, Canvas canvas); + private native void surfaceCreatedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceDestroyedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceChangedNativeVideo (long nativeContextptr, SurfaceHolder holder, + int format, int width, int height); } - public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr) + public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr, boolean forVideo) { - return new NativeSurfaceView (this, nativeSurfacePtr); + return new NativeSurfaceView (this, nativeSurfacePtr, forVideo); } //============================================================================== @@ -2826,6 +2855,151 @@ public class DemoRunner extends Activity } + //============================================================================== + public class MediaControllerCallback extends MediaController.Callback + { + private native void mediaControllerAudioInfoChanged (long host, MediaController.PlaybackInfo info); + private native void mediaControllerMetadataChanged (long host, MediaMetadata metadata); + private native void mediaControllerPlaybackStateChanged (long host, PlaybackState state); + private native void mediaControllerSessionDestroyed (long host); + + MediaControllerCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onAudioInfoChanged (MediaController.PlaybackInfo info) + { + mediaControllerAudioInfoChanged (host, info); + } + + @Override + public void onMetadataChanged (MediaMetadata metadata) + { + mediaControllerMetadataChanged (host, metadata); + } + + @Override + public void onPlaybackStateChanged (PlaybackState state) + { + mediaControllerPlaybackStateChanged (host, state); + } + + @Override + public void onQueueChanged (List queue) {} + + @Override + public void onSessionDestroyed() + { + mediaControllerSessionDestroyed (host); + } + + private long host; + } + + //============================================================================== + public class MediaSessionCallback extends MediaSession.Callback + { + private native void mediaSessionPause (long host); + private native void mediaSessionPlay (long host); + private native void mediaSessionPlayFromMediaId (long host, String mediaId, Bundle extras); + private native void mediaSessionSeekTo (long host, long pos); + private native void mediaSessionStop (long host); + + + MediaSessionCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onPause() + { + mediaSessionPause (host); + } + + @Override + public void onPlay() + { + mediaSessionPlay (host); + } + + @Override + public void onPlayFromMediaId (String mediaId, Bundle extras) + { + mediaSessionPlayFromMediaId (host, mediaId, extras); + } + + @Override + public void onSeekTo (long pos) + { + mediaSessionSeekTo (host, pos); + } + + @Override + public void onStop() + { + mediaSessionStop (host); + } + + @Override + public void onFastForward() {} + + @Override + public boolean onMediaButtonEvent (Intent mediaButtonIntent) + { + return true; + } + + @Override + public void onRewind() {} + + @Override + public void onSkipToNext() {} + + @Override + public void onSkipToPrevious() {} + + @Override + public void onSkipToQueueItem (long id) {} + + private long host; + } + + //============================================================================== + public class SystemVolumeObserver extends ContentObserver + { + private native void mediaSessionSystemVolumeChanged (long host); + + SystemVolumeObserver (Activity activityToUse, long hostToUse) + { + super (null); + + activity = activityToUse; + host = hostToUse; + } + + void setEnabled (boolean shouldBeEnabled) + { + if (shouldBeEnabled) + activity.getApplicationContext().getContentResolver().registerContentObserver (android.provider.Settings.System.CONTENT_URI, true, this); + else + activity.getApplicationContext().getContentResolver().unregisterContentObserver (this); + } + + @Override + public void onChange (boolean selfChange, Uri uri) + { + if (uri.toString().startsWith ("content://settings/system/volume_music")) + mediaSessionSystemVolumeChanged (host); + } + + private Activity activity; + private long host; + } + + //============================================================================== public static final String getLocaleValue (boolean isRegion) { diff --git a/examples/DemoRunner/Builds/Android/build.gradle b/examples/DemoRunner/Builds/Android/build.gradle index 651d63db..647f509e 100644 --- a/examples/DemoRunner/Builds/Android/build.gradle +++ b/examples/DemoRunner/Builds/Android/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.1.3' } } diff --git a/examples/DemoRunner/Builds/LinuxMakefile/Makefile b/examples/DemoRunner/Builds/LinuxMakefile/Makefile index 56a39c08..4922eb67 100644 --- a/examples/DemoRunner/Builds/LinuxMakefile/Makefile +++ b/examples/DemoRunner/Builds/LinuxMakefile/Makefile @@ -35,13 +35,13 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.3.2 -DJUCE_APP_VERSION_HEX=0x50302 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.1 -DJUCE_APP_VERSION_HEX=0x50401 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := DemoRunner JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -56,13 +56,13 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.3.2 -DJUCE_APP_VERSION_HEX=0x50302 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.1 -DJUCE_APP_VERSION_HEX=0x50401 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := DemoRunner JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -95,11 +95,13 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/include_juce_product_unlocking_8278fcdc.o \ $(JUCE_OBJDIR)/include_juce_video_be78589.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl @echo Linking "DemoRunner - App" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -236,10 +238,6 @@ $(JUCE_OBJDIR)/include_juce_video_be78589.o: ../../JuceLibraryCode/include_juce_ @echo "Compiling include_juce_video.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 - clean: @echo Cleaning DemoRunner $(V_AT)$(CLEANCMD) diff --git a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj index 9d9fc433..ab98fe59 100644 --- a/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj @@ -5,229 +5,896 @@ }; objectVersion = 46; objects = { - - 63A2F309E55DAC206E9B97E3 = {isa = PBXBuildFile; fileRef = CFF2BBEB242CC8B3B904B5F9; }; - 48CF0B02E1D06E5DA51E6270 = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; }; - 163B0CF2DD0990A63DF1D5A6 = {isa = PBXBuildFile; fileRef = 470C3E4553B513FFEF752779; }; - 7B4163348896EB1B86B15160 = {isa = PBXBuildFile; fileRef = DC192EFA899E6CBE6B5CD394; }; - 8C0AEA08A71075A6C765AEC9 = {isa = PBXBuildFile; fileRef = 3B99CF94C44E2EE04635A439; }; - 89BC6E2354102D975E08E918 = {isa = PBXBuildFile; fileRef = 440D507FD8F31DB62B1F95C7; }; - 9F15FD7A7CE83CFD98F07D59 = {isa = PBXBuildFile; fileRef = 02A2ED58B066B4D119F67913; }; - 1351A13E78F38741C6075600 = {isa = PBXBuildFile; fileRef = 4F0A137A4115946A346180E6; }; - 46071CE2B98B562B7BF27CB1 = {isa = PBXBuildFile; fileRef = 1CFE3935A3B810D5D68A2504; }; - 6A61CBB4E39BFD392D97528F = {isa = PBXBuildFile; fileRef = 61AE09C749B007B70A265D9B; }; - 9BEA1428416CE06BF72FBAB8 = {isa = PBXBuildFile; fileRef = 3DC90DA86565B0356B6E5E0B; }; - 8584640341100008744861A5 = {isa = PBXBuildFile; fileRef = 71A91516AFD980FEE694C0E1; }; - 028383D0577D0236899D8CA5 = {isa = PBXBuildFile; fileRef = 40BD06D4AB0D2C73E936A2F1; }; - B1981F62F6A91FD2F579A198 = {isa = PBXBuildFile; fileRef = 23CD1A3F9067C3A0ECE7BB67; }; - 89AD16514B1F4133FFEA1DF9 = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; }; - D3D8CDCE42E8BE31C7247E38 = {isa = PBXBuildFile; fileRef = 0ECB4FCD24794CE516792552; }; - 3B3952A9A14320312EF890A5 = {isa = PBXBuildFile; fileRef = 388A8209DBB1B08594266121; }; - 41BAB55E0D992708EF06E2C4 = {isa = PBXBuildFile; fileRef = 5CD17151385A69F1E07FE85B; }; - 1BA301E39E29966719B710A1 = {isa = PBXBuildFile; fileRef = 9EBAEBBD9093CB005D1692F2; }; - E33E8FE2E7F8EC8EB4279F1B = {isa = PBXBuildFile; fileRef = 7B3243C92248D379A0489AA4; }; - 91CD2BCE4CA07E18229EB436 = {isa = PBXBuildFile; fileRef = 9672FCE6167ADB567A9EB2F8; }; - 75DB074DBAE04408A0A917B7 = {isa = PBXBuildFile; fileRef = E0A3F113BC27B7B4D6F1D693; }; - E6F58FC3ACAE774DB4D06420 = {isa = PBXBuildFile; fileRef = 3AB62BFF806112585B54DDA3; }; - 36E115D98311F12AA06710E6 = {isa = PBXBuildFile; fileRef = 061AECBF1CC7056F4155812D; }; - B38728296BB32B7994CE28DF = {isa = PBXBuildFile; fileRef = 934ACDCB3FD9D223A3481D8F; }; - 71DF4F5EB4C8305688416725 = {isa = PBXBuildFile; fileRef = E5BFC17E682AB426D203B3E6; }; - 4FBBB55F4E347757F74F1F41 = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; }; - F619F3887CEC064441BB6EE6 = {isa = PBXBuildFile; fileRef = 260481E972425474BB8155B0; }; - C2BB2B6DA237FE0CB64C7EDA = {isa = PBXBuildFile; fileRef = 5965349393850F41DF76F350; }; - F28112945CEBEA4CE8975833 = {isa = PBXBuildFile; fileRef = 03B0F9318FD583525AB195A9; }; - 9EACEA6BE8D0ACC72C12C080 = {isa = PBXBuildFile; fileRef = 03A63C3CA6F24977F19C316D; }; - 26652AB1BB77C8A39434775F = {isa = PBXBuildFile; fileRef = E061A1C75FA5722167FC4997; }; - 2707968B431D83AC7E28E49B = {isa = PBXBuildFile; fileRef = E67AB94002886AF67437D6AE; }; - 712D81867EC698463252FA79 = {isa = PBXBuildFile; fileRef = EDDA01B246C6128CAF7A2914; }; - 49E7BBD46981F0035E4E9021 = {isa = PBXBuildFile; fileRef = 831A01C745C905F5715CD822; }; - 611298FAC1A543BDD10D4C41 = {isa = PBXBuildFile; fileRef = 4DF215D350FFE5E119CBA7E5; }; - D183F8140174ACCDDCD230A2 = {isa = PBXBuildFile; fileRef = 3BC9753E0CD75A36DC742EE0; }; - FF87532E62753EDFA3D29CAD = {isa = PBXBuildFile; fileRef = 6C5E26B4D28F8450435B8AE1; }; - 2F76CA28C8C0EFC7453D0EB8 = {isa = PBXBuildFile; fileRef = F5F2EA2238973488632FC322; }; - 6B5560283DEEBD6DD2D6C984 = {isa = PBXBuildFile; fileRef = C1E93FAF6C68A40A664422CD; }; - 1DBDFEDE359CFC84F8E3DE4C = {isa = PBXBuildFile; fileRef = FCD0D758C5767944BEC29730; }; - CDABEA6258EC70C65C9ACCFE = {isa = PBXBuildFile; fileRef = 3E4ED41C374261CFFD309743; }; - E2F44A968EC2598DAE33A997 = {isa = PBXBuildFile; fileRef = A1D6D36B96B6B37C31F32829; }; - 5CB78489F16E82144914972D = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; }; - BC6036F22423CA0AFF0385A7 = {isa = PBXBuildFile; fileRef = 94B6C88FE30861A47CD28709; }; - AEA090DAC5C747C50C7D3FA7 = {isa = PBXBuildFile; fileRef = CE38E6469D98462A2C22C915; }; - CDEB6BA5341494AF51D07C72 = {isa = PBXBuildFile; fileRef = 0AB68DBAB6B7DAEDDDD5B683; }; - 0140787C0118A95E37DE90B4 = {isa = PBXBuildFile; fileRef = 9144821E003E15E4042B57DB; }; - 02A2ED58B066B4D119F67913 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 03A63C3CA6F24977F19C316D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 03B0F9318FD583525AB195A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 061AECBF1CC7056F4155812D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs2.cpp; path = ../../Source/Demos/DemoPIPs2.cpp; sourceTree = "SOURCE_ROOT"; }; - 0AB68DBAB6B7DAEDDDD5B683 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_product_unlocking.mm"; path = "../../JuceLibraryCode/include_juce_product_unlocking.mm"; sourceTree = "SOURCE_ROOT"; }; - 0B36C013D9790568B481634C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - 0ECB4FCD24794CE516792552 = {isa = PBXFileReference; lastKnownFileType = folder; name = Audio; path = ../../../Audio; sourceTree = ""; }; - 112FFCB73597157E721BCDF2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_analytics"; path = "../../../../modules/juce_analytics"; sourceTree = "SOURCE_ROOT"; }; - 14CBD28B4887DAF89E27491C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - 1CFE3935A3B810D5D68A2504 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 1FCD2145DE3FCFCF4F55A8AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DemoContentComponent.h; path = ../../Source/UI/DemoContentComponent.h; sourceTree = "SOURCE_ROOT"; }; - 23CD1A3F9067C3A0ECE7BB67 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 25E5ED33876A2C752378C859 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/UI/MainComponent.cpp; sourceTree = "SOURCE_ROOT"; }; - 260481E972425474BB8155B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 346450C70C964FD9640B6086 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - 388A8209DBB1B08594266121 = {isa = PBXFileReference; lastKnownFileType = folder; name = BLOCKS; path = ../../../BLOCKS; sourceTree = ""; }; - 3AB62BFF806112585B54DDA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs1.cpp; path = ../../Source/Demos/DemoPIPs1.cpp; sourceTree = "SOURCE_ROOT"; }; - 3B99CF94C44E2EE04635A439 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; - 3BC9753E0CD75A36DC742EE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 3DC90DA86565B0356B6E5E0B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - 3E4ED41C374261CFFD309743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 40BD06D4AB0D2C73E936A2F1 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - 440D507FD8F31DB62B1F95C7 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - 470C3E4553B513FFEF752779 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 491641F7632BCC81BBA0ED85 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 4DF215D350FFE5E119CBA7E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_box2d.cpp"; path = "../../JuceLibraryCode/include_juce_box2d.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4E9AD0EAF3CA57B548622D9A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 4EC2782DE1779A130835B64D = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 4F0A137A4115946A346180E6 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 4FE6029FF76BCE9698595DC5 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_product_unlocking"; path = "../../../../modules/juce_product_unlocking"; sourceTree = "SOURCE_ROOT"; }; - 5965349393850F41DF76F350 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_analytics.cpp"; path = "../../JuceLibraryCode/include_juce_analytics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5A9F2000C66D24E8B01BE60B = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 5CD17151385A69F1E07FE85B = {isa = PBXFileReference; lastKnownFileType = folder; name = DSP; path = ../../../DSP; sourceTree = ""; }; - 60F2869DC345EAF2314D6C09 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 61AE09C749B007B70A265D9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 651ECE3C7BA845DDCFEE48F3 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_osc"; path = "../../../../modules/juce_osc"; sourceTree = "SOURCE_ROOT"; }; - 6847A9B2C5E3C2ED56D8D4E7 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 6C198AF93E1F6E682189E2F6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 6C2C1AC86623F457427965EF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_box2d"; path = "../../../../modules/juce_box2d"; sourceTree = "SOURCE_ROOT"; }; - 6C5E26B4D28F8450435B8AE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - 71A91516AFD980FEE694C0E1 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - 72129757D2A553B90A7157C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 7A5AAE9EE573FC6105CC4AAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = "SOURCE_ROOT"; }; - 7B3243C92248D379A0489AA4 = {isa = PBXFileReference; lastKnownFileType = folder; name = Utilities; path = ../../../Utilities; sourceTree = ""; }; - 831A01C745C905F5715CD822 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_blocks_basics.cpp"; path = "../../JuceLibraryCode/include_juce_blocks_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8CE533D611CD0984AD028D73 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 903CD4126C779884797EF915 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 9144821E003E15E4042B57DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_video.mm"; path = "../../JuceLibraryCode/include_juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; - 934ACDCB3FD9D223A3481D8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = JUCEDemos.cpp; path = ../../Source/Demos/JUCEDemos.cpp; sourceTree = "SOURCE_ROOT"; }; - 94B6C88FE30861A47CD28709 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 9672FCE6167ADB567A9EB2F8 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 96D99A08027CA35D6A4E5CFD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 979F23EA9E5E76131299E886 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - 9EBAEBBD9093CB005D1692F2 = {isa = PBXFileReference; lastKnownFileType = folder; name = GUI; path = ../../../GUI; sourceTree = ""; }; - A04E4408525F24F7DCBA000E = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - A1D6D36B96B6B37C31F32829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - A5256778E2EBD206B337B555 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_video"; path = "../../../../modules/juce_video"; sourceTree = "SOURCE_ROOT"; }; - A6F555BE0DDF01C285BD8BF5 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_dsp"; path = "../../../../modules/juce_dsp"; sourceTree = "SOURCE_ROOT"; }; - A9315F8368A5771EC39631CB = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - B2BC383CE102EECCF49C7AF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = "SOURCE_ROOT"; }; - C1E93FAF6C68A40A664422CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_dsp.mm"; path = "../../JuceLibraryCode/include_juce_dsp.mm"; sourceTree = "SOURCE_ROOT"; }; - CE38E6469D98462A2C22C915 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_osc.cpp"; path = "../../JuceLibraryCode/include_juce_osc.cpp"; sourceTree = "SOURCE_ROOT"; }; - CFF2BBEB242CC8B3B904B5F9 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - D018D636A4DC9BEA11720129 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_blocks_basics"; path = "../../../../modules/juce_blocks_basics"; sourceTree = "SOURCE_ROOT"; }; - DC192EFA899E6CBE6B5CD394 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - E061A1C75FA5722167FC4997 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - E0A3F113BC27B7B4D6F1D693 = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - E5BFC17E682AB426D203B3E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoContentComponent.cpp; path = ../../Source/UI/DemoContentComponent.cpp; sourceTree = "SOURCE_ROOT"; }; - E67AB94002886AF67437D6AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - EB68BD1224CD9748BFA332C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/UI/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; - ECE79F1433E92BB6213C86F5 = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = "SOURCE_ROOT"; }; - EDDA01B246C6128CAF7A2914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - EE6BDC78B539D27E65E92265 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JUCEDemos.h; path = ../../Source/Demos/JUCEDemos.h; sourceTree = "SOURCE_ROOT"; }; - F5F2EA2238973488632FC322 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - FB1FC613CE260140F1CFD21B = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - FCD0D758C5767944BEC29730 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - FDC3CA8D1403C169659F7D8C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - CD575607FAA297480EE95F13 = {isa = PBXGroup; children = ( - 3AB62BFF806112585B54DDA3, - 061AECBF1CC7056F4155812D, - B2BC383CE102EECCF49C7AF7, - 934ACDCB3FD9D223A3481D8F, - EE6BDC78B539D27E65E92265, ); name = Demos; sourceTree = ""; }; - BB12537403CC24C02622582C = {isa = PBXGroup; children = ( - E5BFC17E682AB426D203B3E6, - 1FCD2145DE3FCFCF4F55A8AD, - 25E5ED33876A2C752378C859, - EB68BD1224CD9748BFA332C0, - 7A5AAE9EE573FC6105CC4AAC, ); name = UI; sourceTree = ""; }; - 6F933968486D9AD9FE112622 = {isa = PBXGroup; children = ( - CD575607FAA297480EE95F13, - BB12537403CC24C02622582C, - 260481E972425474BB8155B0, - ECE79F1433E92BB6213C86F5, ); name = Source; sourceTree = ""; }; - 9683F931FA1B8B85FA8C4BD8 = {isa = PBXGroup; children = ( - 6F933968486D9AD9FE112622, ); name = DemoRunner; sourceTree = ""; }; - 5A0B2CEF393A25C6D4B1B76C = {isa = PBXGroup; children = ( - 112FFCB73597157E721BCDF2, - 6847A9B2C5E3C2ED56D8D4E7, - 60F2869DC345EAF2314D6C09, - 491641F7632BCC81BBA0ED85, - 346450C70C964FD9640B6086, - 0B36C013D9790568B481634C, - D018D636A4DC9BEA11720129, - 6C2C1AC86623F457427965EF, - 903CD4126C779884797EF915, - 14CBD28B4887DAF89E27491C, - FDC3CA8D1403C169659F7D8C, - A6F555BE0DDF01C285BD8BF5, - FB1FC613CE260140F1CFD21B, - 8CE533D611CD0984AD028D73, - 5A9F2000C66D24E8B01BE60B, - A9315F8368A5771EC39631CB, - 6C198AF93E1F6E682189E2F6, - 651ECE3C7BA845DDCFEE48F3, - 4FE6029FF76BCE9698595DC5, - A5256778E2EBD206B337B555, ); name = "JUCE Modules"; sourceTree = ""; }; - 61F3057D838D7DABB0FA3D34 = {isa = PBXGroup; children = ( - 72129757D2A553B90A7157C6, - 5965349393850F41DF76F350, - 03B0F9318FD583525AB195A9, - 03A63C3CA6F24977F19C316D, - E061A1C75FA5722167FC4997, - E67AB94002886AF67437D6AE, - EDDA01B246C6128CAF7A2914, - 831A01C745C905F5715CD822, - 4DF215D350FFE5E119CBA7E5, - 3BC9753E0CD75A36DC742EE0, - 6C5E26B4D28F8450435B8AE1, - F5F2EA2238973488632FC322, - C1E93FAF6C68A40A664422CD, - FCD0D758C5767944BEC29730, - 3E4ED41C374261CFFD309743, - A1D6D36B96B6B37C31F32829, - 979F23EA9E5E76131299E886, - 94B6C88FE30861A47CD28709, - CE38E6469D98462A2C22C915, - 0AB68DBAB6B7DAEDDDD5B683, - 9144821E003E15E4042B57DB, - 4E9AD0EAF3CA57B548622D9A, ); name = "JUCE Library Code"; sourceTree = ""; }; - D87DCD5DA4EC8D78DFF37FCC = {isa = PBXGroup; children = ( - 0ECB4FCD24794CE516792552, - 388A8209DBB1B08594266121, - 5CD17151385A69F1E07FE85B, - 9EBAEBBD9093CB005D1692F2, - 7B3243C92248D379A0489AA4, - 4EC2782DE1779A130835B64D, - 9672FCE6167ADB567A9EB2F8, - E0A3F113BC27B7B4D6F1D693, ); name = Resources; sourceTree = ""; }; - 4452EAA652B65A9AE648288C = {isa = PBXGroup; children = ( - A04E4408525F24F7DCBA000E, - 470C3E4553B513FFEF752779, - DC192EFA899E6CBE6B5CD394, - 3B99CF94C44E2EE04635A439, - 440D507FD8F31DB62B1F95C7, - 02A2ED58B066B4D119F67913, - 4F0A137A4115946A346180E6, - 1CFE3935A3B810D5D68A2504, - 61AE09C749B007B70A265D9B, - 3DC90DA86565B0356B6E5E0B, - 71A91516AFD980FEE694C0E1, - 40BD06D4AB0D2C73E936A2F1, - 23CD1A3F9067C3A0ECE7BB67, - 96D99A08027CA35D6A4E5CFD, ); name = Frameworks; sourceTree = ""; }; - BFDAF16175D03695EEB466BC = {isa = PBXGroup; children = ( - CFF2BBEB242CC8B3B904B5F9, ); name = Products; sourceTree = ""; }; - 91A9A0FE9DF4F4E10009EEC7 = {isa = PBXGroup; children = ( - 9683F931FA1B8B85FA8C4BD8, - 5A0B2CEF393A25C6D4B1B76C, - 61F3057D838D7DABB0FA3D34, - D87DCD5DA4EC8D78DFF37FCC, - 4452EAA652B65A9AE648288C, - BFDAF16175D03695EEB466BC, ); name = Source; sourceTree = ""; }; - B18D059E5616FA729F764229 = {isa = XCBuildConfiguration; buildSettings = { + 63A2F309E55DAC206E9B97E3 = { + isa = PBXBuildFile; + fileRef = CFF2BBEB242CC8B3B904B5F9; + }; + 48CF0B02E1D06E5DA51E6270 = { + isa = PBXBuildFile; + fileRef = A04E4408525F24F7DCBA000E; + }; + 163B0CF2DD0990A63DF1D5A6 = { + isa = PBXBuildFile; + fileRef = 470C3E4553B513FFEF752779; + }; + 7B4163348896EB1B86B15160 = { + isa = PBXBuildFile; + fileRef = DC192EFA899E6CBE6B5CD394; + }; + 8C0AEA08A71075A6C765AEC9 = { + isa = PBXBuildFile; + fileRef = 3B99CF94C44E2EE04635A439; + }; + 89BC6E2354102D975E08E918 = { + isa = PBXBuildFile; + fileRef = 440D507FD8F31DB62B1F95C7; + }; + 9F15FD7A7CE83CFD98F07D59 = { + isa = PBXBuildFile; + fileRef = 02A2ED58B066B4D119F67913; + }; + 1351A13E78F38741C6075600 = { + isa = PBXBuildFile; + fileRef = 4F0A137A4115946A346180E6; + }; + 46071CE2B98B562B7BF27CB1 = { + isa = PBXBuildFile; + fileRef = 1CFE3935A3B810D5D68A2504; + }; + 6A61CBB4E39BFD392D97528F = { + isa = PBXBuildFile; + fileRef = 61AE09C749B007B70A265D9B; + }; + 9BEA1428416CE06BF72FBAB8 = { + isa = PBXBuildFile; + fileRef = 3DC90DA86565B0356B6E5E0B; + }; + 8584640341100008744861A5 = { + isa = PBXBuildFile; + fileRef = 71A91516AFD980FEE694C0E1; + }; + 028383D0577D0236899D8CA5 = { + isa = PBXBuildFile; + fileRef = 40BD06D4AB0D2C73E936A2F1; + }; + B1981F62F6A91FD2F579A198 = { + isa = PBXBuildFile; + fileRef = 23CD1A3F9067C3A0ECE7BB67; + }; + 89AD16514B1F4133FFEA1DF9 = { + isa = PBXBuildFile; + fileRef = 96D99A08027CA35D6A4E5CFD; + }; + D3D8CDCE42E8BE31C7247E38 = { + isa = PBXBuildFile; + fileRef = 0ECB4FCD24794CE516792552; + }; + 3B3952A9A14320312EF890A5 = { + isa = PBXBuildFile; + fileRef = 388A8209DBB1B08594266121; + }; + 41BAB55E0D992708EF06E2C4 = { + isa = PBXBuildFile; + fileRef = 5CD17151385A69F1E07FE85B; + }; + 1BA301E39E29966719B710A1 = { + isa = PBXBuildFile; + fileRef = 9EBAEBBD9093CB005D1692F2; + }; + E33E8FE2E7F8EC8EB4279F1B = { + isa = PBXBuildFile; + fileRef = 7B3243C92248D379A0489AA4; + }; + 91CD2BCE4CA07E18229EB436 = { + isa = PBXBuildFile; + fileRef = 9672FCE6167ADB567A9EB2F8; + }; + 75DB074DBAE04408A0A917B7 = { + isa = PBXBuildFile; + fileRef = E0A3F113BC27B7B4D6F1D693; + }; + E6F58FC3ACAE774DB4D06420 = { + isa = PBXBuildFile; + fileRef = 3AB62BFF806112585B54DDA3; + }; + 36E115D98311F12AA06710E6 = { + isa = PBXBuildFile; + fileRef = 061AECBF1CC7056F4155812D; + }; + B38728296BB32B7994CE28DF = { + isa = PBXBuildFile; + fileRef = 934ACDCB3FD9D223A3481D8F; + }; + 71DF4F5EB4C8305688416725 = { + isa = PBXBuildFile; + fileRef = E5BFC17E682AB426D203B3E6; + }; + 4FBBB55F4E347757F74F1F41 = { + isa = PBXBuildFile; + fileRef = 25E5ED33876A2C752378C859; + }; + F619F3887CEC064441BB6EE6 = { + isa = PBXBuildFile; + fileRef = 260481E972425474BB8155B0; + }; + C2BB2B6DA237FE0CB64C7EDA = { + isa = PBXBuildFile; + fileRef = 5965349393850F41DF76F350; + }; + F28112945CEBEA4CE8975833 = { + isa = PBXBuildFile; + fileRef = 03B0F9318FD583525AB195A9; + }; + 9EACEA6BE8D0ACC72C12C080 = { + isa = PBXBuildFile; + fileRef = 03A63C3CA6F24977F19C316D; + }; + 26652AB1BB77C8A39434775F = { + isa = PBXBuildFile; + fileRef = E061A1C75FA5722167FC4997; + }; + 2707968B431D83AC7E28E49B = { + isa = PBXBuildFile; + fileRef = E67AB94002886AF67437D6AE; + }; + 712D81867EC698463252FA79 = { + isa = PBXBuildFile; + fileRef = EDDA01B246C6128CAF7A2914; + }; + 49E7BBD46981F0035E4E9021 = { + isa = PBXBuildFile; + fileRef = 831A01C745C905F5715CD822; + }; + 611298FAC1A543BDD10D4C41 = { + isa = PBXBuildFile; + fileRef = 4DF215D350FFE5E119CBA7E5; + }; + D183F8140174ACCDDCD230A2 = { + isa = PBXBuildFile; + fileRef = 3BC9753E0CD75A36DC742EE0; + }; + FF87532E62753EDFA3D29CAD = { + isa = PBXBuildFile; + fileRef = 6C5E26B4D28F8450435B8AE1; + }; + 2F76CA28C8C0EFC7453D0EB8 = { + isa = PBXBuildFile; + fileRef = F5F2EA2238973488632FC322; + }; + 6B5560283DEEBD6DD2D6C984 = { + isa = PBXBuildFile; + fileRef = C1E93FAF6C68A40A664422CD; + }; + 1DBDFEDE359CFC84F8E3DE4C = { + isa = PBXBuildFile; + fileRef = FCD0D758C5767944BEC29730; + }; + CDABEA6258EC70C65C9ACCFE = { + isa = PBXBuildFile; + fileRef = 3E4ED41C374261CFFD309743; + }; + E2F44A968EC2598DAE33A997 = { + isa = PBXBuildFile; + fileRef = A1D6D36B96B6B37C31F32829; + }; + 5CB78489F16E82144914972D = { + isa = PBXBuildFile; + fileRef = 979F23EA9E5E76131299E886; + }; + BC6036F22423CA0AFF0385A7 = { + isa = PBXBuildFile; + fileRef = 94B6C88FE30861A47CD28709; + }; + AEA090DAC5C747C50C7D3FA7 = { + isa = PBXBuildFile; + fileRef = CE38E6469D98462A2C22C915; + }; + CDEB6BA5341494AF51D07C72 = { + isa = PBXBuildFile; + fileRef = 0AB68DBAB6B7DAEDDDD5B683; + }; + 0140787C0118A95E37DE90B4 = { + isa = PBXBuildFile; + fileRef = 9144821E003E15E4042B57DB; + }; + 02A2ED58B066B4D119F67913 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + 03A63C3CA6F24977F19C316D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 03B0F9318FD583525AB195A9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 061AECBF1CC7056F4155812D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoPIPs2.cpp; + path = ../../Source/Demos/DemoPIPs2.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 0AB68DBAB6B7DAEDDDD5B683 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_product_unlocking.mm"; + path = "../../JuceLibraryCode/include_juce_product_unlocking.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 0B36C013D9790568B481634C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + 0ECB4FCD24794CE516792552 = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = Audio; + path = ../../../Audio; + sourceTree = ""; + }; + 112FFCB73597157E721BCDF2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_analytics"; + path = "../../../../modules/juce_analytics"; + sourceTree = "SOURCE_ROOT"; + }; + 14CBD28B4887DAF89E27491C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + 1CFE3935A3B810D5D68A2504 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMedia.framework; + path = System/Library/Frameworks/CoreMedia.framework; + sourceTree = SDKROOT; + }; + 1FCD2145DE3FCFCF4F55A8AD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = DemoContentComponent.h; + path = ../../Source/UI/DemoContentComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 23CD1A3F9067C3A0ECE7BB67 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 25E5ED33876A2C752378C859 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = MainComponent.cpp; + path = ../../Source/UI/MainComponent.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 260481E972425474BB8155B0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 346450C70C964FD9640B6086 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + 388A8209DBB1B08594266121 = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = BLOCKS; + path = ../../../BLOCKS; + sourceTree = ""; + }; + 3AB62BFF806112585B54DDA3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoPIPs1.cpp; + path = ../../Source/Demos/DemoPIPs1.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 3B99CF94C44E2EE04635A439 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVKit.framework; + path = System/Library/Frameworks/AVKit.framework; + sourceTree = SDKROOT; + }; + 3BC9753E0CD75A36DC742EE0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 3DC90DA86565B0356B6E5E0B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = DiscRecording.framework; + path = System/Library/Frameworks/DiscRecording.framework; + sourceTree = SDKROOT; + }; + 3E4ED41C374261CFFD309743 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 40BD06D4AB0D2C73E936A2F1 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGL.framework; + path = System/Library/Frameworks/OpenGL.framework; + sourceTree = SDKROOT; + }; + 440D507FD8F31DB62B1F95C7 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Carbon.framework; + path = System/Library/Frameworks/Carbon.framework; + sourceTree = SDKROOT; + }; + 470C3E4553B513FFEF752779 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + 491641F7632BCC81BBA0ED85 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 4DF215D350FFE5E119CBA7E5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_box2d.cpp"; + path = "../../JuceLibraryCode/include_juce_box2d.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4E9AD0EAF3CA57B548622D9A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + 4EC2782DE1779A130835B64D = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 4F0A137A4115946A346180E6 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + 4FE6029FF76BCE9698595DC5 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_product_unlocking"; + path = "../../../../modules/juce_product_unlocking"; + sourceTree = "SOURCE_ROOT"; + }; + 5965349393850F41DF76F350 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_analytics.cpp"; + path = "../../JuceLibraryCode/include_juce_analytics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 5A9F2000C66D24E8B01BE60B = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 5CD17151385A69F1E07FE85B = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = DSP; + path = ../../../DSP; + sourceTree = ""; + }; + 60F2869DC345EAF2314D6C09 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 61AE09C749B007B70A265D9B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 651ECE3C7BA845DDCFEE48F3 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_osc"; + path = "../../../../modules/juce_osc"; + sourceTree = "SOURCE_ROOT"; + }; + 6847A9B2C5E3C2ED56D8D4E7 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 6C198AF93E1F6E682189E2F6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 6C2C1AC86623F457427965EF = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_box2d"; + path = "../../../../modules/juce_box2d"; + sourceTree = "SOURCE_ROOT"; + }; + 6C5E26B4D28F8450435B8AE1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 71A91516AFD980FEE694C0E1 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + 72129757D2A553B90A7157C6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 7A5AAE9EE573FC6105CC4AAC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SettingsContent.h; + path = ../../Source/UI/SettingsContent.h; + sourceTree = "SOURCE_ROOT"; + }; + 7B3243C92248D379A0489AA4 = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = Utilities; + path = ../../../Utilities; + sourceTree = ""; + }; + 831A01C745C905F5715CD822 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_blocks_basics.cpp"; + path = "../../JuceLibraryCode/include_juce_blocks_basics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 8CE533D611CD0984AD028D73 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 903CD4126C779884797EF915 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 9144821E003E15E4042B57DB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_video.mm"; + path = "../../JuceLibraryCode/include_juce_video.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 934ACDCB3FD9D223A3481D8F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = JUCEDemos.cpp; + path = ../../Source/Demos/JUCEDemos.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 94B6C88FE30861A47CD28709 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 9672FCE6167ADB567A9EB2F8 = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 96D99A08027CA35D6A4E5CFD = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = WebKit.framework; + path = System/Library/Frameworks/WebKit.framework; + sourceTree = SDKROOT; + }; + 979F23EA9E5E76131299E886 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 9EBAEBBD9093CB005D1692F2 = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = GUI; + path = ../../../GUI; + sourceTree = ""; + }; + A04E4408525F24F7DCBA000E = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + A1D6D36B96B6B37C31F32829 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + A5256778E2EBD206B337B555 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_video"; + path = "../../../../modules/juce_video"; + sourceTree = "SOURCE_ROOT"; + }; + A6F555BE0DDF01C285BD8BF5 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_dsp"; + path = "../../../../modules/juce_dsp"; + sourceTree = "SOURCE_ROOT"; + }; + A9315F8368A5771EC39631CB = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + B2BC383CE102EECCF49C7AF7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IntroScreen.h; + path = ../../Source/Demos/IntroScreen.h; + sourceTree = "SOURCE_ROOT"; + }; + C1E93FAF6C68A40A664422CD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_dsp.mm"; + path = "../../JuceLibraryCode/include_juce_dsp.mm"; + sourceTree = "SOURCE_ROOT"; + }; + CE38E6469D98462A2C22C915 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_osc.cpp"; + path = "../../JuceLibraryCode/include_juce_osc.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + CFF2BBEB242CC8B3B904B5F9 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = DemoRunner.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + D018D636A4DC9BEA11720129 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_blocks_basics"; + path = "../../../../modules/juce_blocks_basics"; + sourceTree = "SOURCE_ROOT"; + }; + DC192EFA899E6CBE6B5CD394 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + E061A1C75FA5722167FC4997 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + E0A3F113BC27B7B4D6F1D693 = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + E5BFC17E682AB426D203B3E6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoContentComponent.cpp; + path = ../../Source/UI/DemoContentComponent.cpp; + sourceTree = "SOURCE_ROOT"; + }; + E67AB94002886AF67437D6AE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + EB68BD1224CD9748BFA332C0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainComponent.h; + path = ../../Source/UI/MainComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + ECE79F1433E92BB6213C86F5 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = JUCEAppIcon.png; + path = ../../Source/JUCEAppIcon.png; + sourceTree = "SOURCE_ROOT"; + }; + EDDA01B246C6128CAF7A2914 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + EE6BDC78B539D27E65E92265 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JUCEDemos.h; + path = ../../Source/Demos/JUCEDemos.h; + sourceTree = "SOURCE_ROOT"; + }; + F5F2EA2238973488632FC322 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + FB1FC613CE260140F1CFD21B = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + FCD0D758C5767944BEC29730 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + FDC3CA8D1403C169659F7D8C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + CD575607FAA297480EE95F13 = { + isa = PBXGroup; + children = ( + 3AB62BFF806112585B54DDA3, + 061AECBF1CC7056F4155812D, + B2BC383CE102EECCF49C7AF7, + 934ACDCB3FD9D223A3481D8F, + EE6BDC78B539D27E65E92265, + ); + name = Demos; + sourceTree = ""; + }; + BB12537403CC24C02622582C = { + isa = PBXGroup; + children = ( + E5BFC17E682AB426D203B3E6, + 1FCD2145DE3FCFCF4F55A8AD, + 25E5ED33876A2C752378C859, + EB68BD1224CD9748BFA332C0, + 7A5AAE9EE573FC6105CC4AAC, + ); + name = UI; + sourceTree = ""; + }; + 6F933968486D9AD9FE112622 = { + isa = PBXGroup; + children = ( + CD575607FAA297480EE95F13, + BB12537403CC24C02622582C, + 260481E972425474BB8155B0, + ECE79F1433E92BB6213C86F5, + ); + name = Source; + sourceTree = ""; + }; + 9683F931FA1B8B85FA8C4BD8 = { + isa = PBXGroup; + children = ( + 6F933968486D9AD9FE112622, + ); + name = DemoRunner; + sourceTree = ""; + }; + 5A0B2CEF393A25C6D4B1B76C = { + isa = PBXGroup; + children = ( + 112FFCB73597157E721BCDF2, + 6847A9B2C5E3C2ED56D8D4E7, + 60F2869DC345EAF2314D6C09, + 491641F7632BCC81BBA0ED85, + 346450C70C964FD9640B6086, + 0B36C013D9790568B481634C, + D018D636A4DC9BEA11720129, + 6C2C1AC86623F457427965EF, + 903CD4126C779884797EF915, + 14CBD28B4887DAF89E27491C, + FDC3CA8D1403C169659F7D8C, + A6F555BE0DDF01C285BD8BF5, + FB1FC613CE260140F1CFD21B, + 8CE533D611CD0984AD028D73, + 5A9F2000C66D24E8B01BE60B, + A9315F8368A5771EC39631CB, + 6C198AF93E1F6E682189E2F6, + 651ECE3C7BA845DDCFEE48F3, + 4FE6029FF76BCE9698595DC5, + A5256778E2EBD206B337B555, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 61F3057D838D7DABB0FA3D34 = { + isa = PBXGroup; + children = ( + 72129757D2A553B90A7157C6, + 5965349393850F41DF76F350, + 03B0F9318FD583525AB195A9, + 03A63C3CA6F24977F19C316D, + E061A1C75FA5722167FC4997, + E67AB94002886AF67437D6AE, + EDDA01B246C6128CAF7A2914, + 831A01C745C905F5715CD822, + 4DF215D350FFE5E119CBA7E5, + 3BC9753E0CD75A36DC742EE0, + 6C5E26B4D28F8450435B8AE1, + F5F2EA2238973488632FC322, + C1E93FAF6C68A40A664422CD, + FCD0D758C5767944BEC29730, + 3E4ED41C374261CFFD309743, + A1D6D36B96B6B37C31F32829, + 979F23EA9E5E76131299E886, + 94B6C88FE30861A47CD28709, + CE38E6469D98462A2C22C915, + 0AB68DBAB6B7DAEDDDD5B683, + 9144821E003E15E4042B57DB, + 4E9AD0EAF3CA57B548622D9A, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + D87DCD5DA4EC8D78DFF37FCC = { + isa = PBXGroup; + children = ( + 0ECB4FCD24794CE516792552, + 388A8209DBB1B08594266121, + 5CD17151385A69F1E07FE85B, + 9EBAEBBD9093CB005D1692F2, + 7B3243C92248D379A0489AA4, + 4EC2782DE1779A130835B64D, + 9672FCE6167ADB567A9EB2F8, + E0A3F113BC27B7B4D6F1D693, + ); + name = Resources; + sourceTree = ""; + }; + 4452EAA652B65A9AE648288C = { + isa = PBXGroup; + children = ( + A04E4408525F24F7DCBA000E, + 470C3E4553B513FFEF752779, + DC192EFA899E6CBE6B5CD394, + 3B99CF94C44E2EE04635A439, + 440D507FD8F31DB62B1F95C7, + 02A2ED58B066B4D119F67913, + 4F0A137A4115946A346180E6, + 1CFE3935A3B810D5D68A2504, + 61AE09C749B007B70A265D9B, + 3DC90DA86565B0356B6E5E0B, + 71A91516AFD980FEE694C0E1, + 40BD06D4AB0D2C73E936A2F1, + 23CD1A3F9067C3A0ECE7BB67, + 96D99A08027CA35D6A4E5CFD, + ); + name = Frameworks; + sourceTree = ""; + }; + BFDAF16175D03695EEB466BC = { + isa = PBXGroup; + children = ( + CFF2BBEB242CC8B3B904B5F9, + ); + name = Products; + sourceTree = ""; + }; + 91A9A0FE9DF4F4E10009EEC7 = { + isa = PBXGroup; + children = ( + 9683F931FA1B8B85FA8C4BD8, + 5A0B2CEF393A25C6D4B1B76C, + 61F3057D838D7DABB0FA3D34, + D87DCD5DA4EC8D78DFF37FCC, + 4452EAA652B65A9AE648288C, + BFDAF16175D03695EEB466BC, + ); + name = Source; + sourceTree = ""; + }; + B18D059E5616FA729F764229 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -242,27 +909,37 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wno-missing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.demorunner; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - 69330F27DD2C71609336C7D2 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "DemoRunner"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 69330F27DD2C71609336C7D2 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -277,39 +954,52 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wno-missing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.demorunner; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - C01EC82F42B640CA1E54AD53 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "DemoRunner"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + C01EC82F42B640CA1E54AD53 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -336,18 +1026,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "DemoRunner"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 07EA85D22270E8EA13CA0BBE = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 07EA85D22270E8EA13CA0BBE = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -372,69 +1070,126 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "DemoRunner"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - D87BAF6D1A7451B7A733B5F1 = {isa = PBXTargetDependency; target = 291E01DCBE746A376DBFA4D1; }; - 80E8AD1971F52B06F4D28891 = {isa = XCConfigurationList; buildConfigurations = ( - C01EC82F42B640CA1E54AD53, - 07EA85D22270E8EA13CA0BBE, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 413FBEAEC84DFEC41133C78B = {isa = XCConfigurationList; buildConfigurations = ( - B18D059E5616FA729F764229, - 69330F27DD2C71609336C7D2, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 57134FDD813875865F5B2057 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D3D8CDCE42E8BE31C7247E38, - 3B3952A9A14320312EF890A5, - 41BAB55E0D992708EF06E2C4, - 1BA301E39E29966719B710A1, - E33E8FE2E7F8EC8EB4279F1B, - 91CD2BCE4CA07E18229EB436, - 75DB074DBAE04408A0A917B7, ); runOnlyForDeploymentPostprocessing = 0; }; - ED916866997CA4F40C7C1016 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E6F58FC3ACAE774DB4D06420, - 36E115D98311F12AA06710E6, - B38728296BB32B7994CE28DF, - 71DF4F5EB4C8305688416725, - 4FBBB55F4E347757F74F1F41, - F619F3887CEC064441BB6EE6, - C2BB2B6DA237FE0CB64C7EDA, - F28112945CEBEA4CE8975833, - 9EACEA6BE8D0ACC72C12C080, - 26652AB1BB77C8A39434775F, - 2707968B431D83AC7E28E49B, - 712D81867EC698463252FA79, - 49E7BBD46981F0035E4E9021, - 611298FAC1A543BDD10D4C41, - D183F8140174ACCDDCD230A2, - FF87532E62753EDFA3D29CAD, - 2F76CA28C8C0EFC7453D0EB8, - 6B5560283DEEBD6DD2D6C984, - 1DBDFEDE359CFC84F8E3DE4C, - CDABEA6258EC70C65C9ACCFE, - E2F44A968EC2598DAE33A997, - 5CB78489F16E82144914972D, - BC6036F22423CA0AFF0385A7, - AEA090DAC5C747C50C7D3FA7, - CDEB6BA5341494AF51D07C72, - 0140787C0118A95E37DE90B4, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B1F6E32C9FC8D779B21C1AF = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48CF0B02E1D06E5DA51E6270, - 163B0CF2DD0990A63DF1D5A6, - 7B4163348896EB1B86B15160, - 8C0AEA08A71075A6C765AEC9, - 89BC6E2354102D975E08E918, - 9F15FD7A7CE83CFD98F07D59, - 1351A13E78F38741C6075600, - 46071CE2B98B562B7BF27CB1, - 6A61CBB4E39BFD392D97528F, - 9BEA1428416CE06BF72FBAB8, - 8584640341100008744861A5, - 028383D0577D0236899D8CA5, - B1981F62F6A91FD2F579A198, - 89AD16514B1F4133FFEA1DF9, ); runOnlyForDeploymentPostprocessing = 0; }; - 291E01DCBE746A376DBFA4D1 = {isa = PBXNativeTarget; buildConfigurationList = 413FBEAEC84DFEC41133C78B; buildPhases = ( - 57134FDD813875865F5B2057, - ED916866997CA4F40C7C1016, - 4B1F6E32C9FC8D779B21C1AF, ); buildRules = ( ); dependencies = ( ); name = "DemoRunner - App"; productName = DemoRunner; productReference = CFF2BBEB242CC8B3B904B5F9; productType = "com.apple.product-type.application"; }; - AC6F0E9A0809A184B2C2B7DE = {isa = PBXProject; buildConfigurationList = 80E8AD1971F52B06F4D28891; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 291E01DCBE746A376DBFA4D1 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 91A9A0FE9DF4F4E10009EEC7; projectDirPath = ""; projectRoot = ""; targets = (291E01DCBE746A376DBFA4D1); }; + ZERO_LINK = NO; + }; + name = Release; + }; + D87BAF6D1A7451B7A733B5F1 = { + isa = PBXTargetDependency; + target = 291E01DCBE746A376DBFA4D1; + }; + 80E8AD1971F52B06F4D28891 = { + isa = XCConfigurationList; + buildConfigurations = ( + C01EC82F42B640CA1E54AD53, + 07EA85D22270E8EA13CA0BBE, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 413FBEAEC84DFEC41133C78B = { + isa = XCConfigurationList; + buildConfigurations = ( + B18D059E5616FA729F764229, + 69330F27DD2C71609336C7D2, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 57134FDD813875865F5B2057 = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D3D8CDCE42E8BE31C7247E38, + 3B3952A9A14320312EF890A5, + 41BAB55E0D992708EF06E2C4, + 1BA301E39E29966719B710A1, + E33E8FE2E7F8EC8EB4279F1B, + 91CD2BCE4CA07E18229EB436, + 75DB074DBAE04408A0A917B7, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED916866997CA4F40C7C1016 = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6F58FC3ACAE774DB4D06420, + 36E115D98311F12AA06710E6, + B38728296BB32B7994CE28DF, + 71DF4F5EB4C8305688416725, + 4FBBB55F4E347757F74F1F41, + F619F3887CEC064441BB6EE6, + C2BB2B6DA237FE0CB64C7EDA, + F28112945CEBEA4CE8975833, + 9EACEA6BE8D0ACC72C12C080, + 26652AB1BB77C8A39434775F, + 2707968B431D83AC7E28E49B, + 712D81867EC698463252FA79, + 49E7BBD46981F0035E4E9021, + 611298FAC1A543BDD10D4C41, + D183F8140174ACCDDCD230A2, + FF87532E62753EDFA3D29CAD, + 2F76CA28C8C0EFC7453D0EB8, + 6B5560283DEEBD6DD2D6C984, + 1DBDFEDE359CFC84F8E3DE4C, + CDABEA6258EC70C65C9ACCFE, + E2F44A968EC2598DAE33A997, + 5CB78489F16E82144914972D, + BC6036F22423CA0AFF0385A7, + AEA090DAC5C747C50C7D3FA7, + CDEB6BA5341494AF51D07C72, + 0140787C0118A95E37DE90B4, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B1F6E32C9FC8D779B21C1AF = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 48CF0B02E1D06E5DA51E6270, + 163B0CF2DD0990A63DF1D5A6, + 7B4163348896EB1B86B15160, + 8C0AEA08A71075A6C765AEC9, + 89BC6E2354102D975E08E918, + 9F15FD7A7CE83CFD98F07D59, + 1351A13E78F38741C6075600, + 46071CE2B98B562B7BF27CB1, + 6A61CBB4E39BFD392D97528F, + 9BEA1428416CE06BF72FBAB8, + 8584640341100008744861A5, + 028383D0577D0236899D8CA5, + B1981F62F6A91FD2F579A198, + 89AD16514B1F4133FFEA1DF9, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 291E01DCBE746A376DBFA4D1 = { + isa = PBXNativeTarget; + buildConfigurationList = 413FBEAEC84DFEC41133C78B; + buildPhases = ( + 57134FDD813875865F5B2057, + ED916866997CA4F40C7C1016, + 4B1F6E32C9FC8D779B21C1AF, + ); + buildRules = ( ); + dependencies = ( ); + name = "DemoRunner - App"; + productName = DemoRunner; + productReference = CFF2BBEB242CC8B3B904B5F9; + productType = "com.apple.product-type.application"; + }; + AC6F0E9A0809A184B2C2B7DE = { + isa = PBXProject; + buildConfigurationList = 80E8AD1971F52B06F4D28891; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 291E01DCBE746A376DBFA4D1 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 91A9A0FE9DF4F4E10009EEC7; + projectDirPath = ""; + projectRoot = ""; + targets = (291E01DCBE746A376DBFA4D1); + }; }; rootObject = AC6F0E9A0809A184B2C2B7DE; } diff --git a/examples/DemoRunner/Builds/MacOSX/Info-App.plist b/examples/DemoRunner/Builds/MacOSX/Info-App.plist index bce688be..600c9f9b 100644 --- a/examples/DemoRunner/Builds/MacOSX/Info-App.plist +++ b/examples/DemoRunner/Builds/MacOSX/Info-App.plist @@ -3,6 +3,10 @@ + NSMicrophoneUsageDescription + This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone. + NSCameraUsageDescription + This app requires access to the camera to function correctly. CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile @@ -18,9 +22,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.3.2 + 5.4.1 CFBundleVersion - 5.3.2 + 5.4.1 NSHumanReadableCopyright Copyright (c) 2018 - ROLI Ltd. NSHighResolutionCapable diff --git a/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj index 3ec1daea..5a05bc53 100644 --- a/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj @@ -15,8 +15,6 @@ {882FE2E3-F4EF-9825-1908-F6FEE5366B5C} - v120 - 8.1 false false v120 - v120 8.1 false true v120 - v120 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v120 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ DemoRunner true - v120 - 8.1 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -172,6 +162,9 @@ true + + true + true @@ -502,6 +495,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -526,6 +585,9 @@ true + + true + true @@ -760,6 +822,9 @@ true + + true + true @@ -769,9 +834,15 @@ true + + true + true + + true + true @@ -826,6 +897,9 @@ true + + true + true @@ -1165,6 +1239,9 @@ true + + true + true @@ -1552,10 +1629,13 @@ true - + true - + + true + + true @@ -2112,6 +2192,7 @@ + @@ -2260,13 +2341,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2275,6 +2413,7 @@ + @@ -2286,6 +2425,7 @@ + @@ -2374,6 +2514,7 @@ + @@ -2411,6 +2552,7 @@ + @@ -2420,6 +2562,7 @@ + @@ -2429,6 +2572,7 @@ + @@ -2561,6 +2705,7 @@ + @@ -2653,8 +2798,9 @@ - + + @@ -2785,6 +2931,7 @@ + @@ -2840,6 +2987,7 @@ + @@ -2854,6 +3002,11 @@ + + + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj.filters index b1ec6a79..eab60e84 100644 --- a/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2013/DemoRunner_App.vcxproj.filters @@ -119,6 +119,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -362,6 +407,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -511,6 +559,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -850,6 +901,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -877,6 +994,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -1129,6 +1249,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1138,9 +1261,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1195,6 +1324,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1561,6 +1693,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1966,12 +2101,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2643,6 +2781,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -3087,6 +3228,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -3105,9 +3420,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -3132,6 +3444,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -3165,6 +3480,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -3429,6 +3747,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -3540,6 +3861,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -3567,6 +3891,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -3594,6 +3921,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3990,6 +4320,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -4266,12 +4599,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -4662,6 +4998,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4827,6 +5166,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4865,6 +5207,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_blocks_basics\littlefoot diff --git a/examples/DemoRunner/Builds/VisualStudio2013/resources.rc b/examples/DemoRunner/Builds/VisualStudio2013/resources.rc index 0bf34edc..0c739d38 100644 --- a/examples/DemoRunner/Builds/VisualStudio2013/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2013/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj index 6622326e..20fb0d41 100644 --- a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj @@ -15,8 +15,6 @@ {882FE2E3-F4EF-9825-1908-F6FEE5366B5C} - v140 - 8.1 false false v140 - v140 8.1 false true v140 - v140 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v140 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ DemoRunner true - v140 - 8.1 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -172,6 +162,9 @@ true + + true + true @@ -502,6 +495,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -526,6 +585,9 @@ true + + true + true @@ -760,6 +822,9 @@ true + + true + true @@ -769,9 +834,15 @@ true + + true + true + + true + true @@ -826,6 +897,9 @@ true + + true + true @@ -1165,6 +1239,9 @@ true + + true + true @@ -1552,10 +1629,13 @@ true - + true - + + true + + true @@ -2112,6 +2192,7 @@ + @@ -2260,13 +2341,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2275,6 +2413,7 @@ + @@ -2286,6 +2425,7 @@ + @@ -2374,6 +2514,7 @@ + @@ -2411,6 +2552,7 @@ + @@ -2420,6 +2562,7 @@ + @@ -2429,6 +2572,7 @@ + @@ -2561,6 +2705,7 @@ + @@ -2653,8 +2798,9 @@ - + + @@ -2785,6 +2931,7 @@ + @@ -2840,6 +2987,7 @@ + @@ -2854,6 +3002,11 @@ + + + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters index f2d69a69..a9d95373 100644 --- a/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters @@ -119,6 +119,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -362,6 +407,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -511,6 +559,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -850,6 +901,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -877,6 +994,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -1129,6 +1249,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1138,9 +1261,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1195,6 +1324,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1561,6 +1693,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1966,12 +2101,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2643,6 +2781,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -3087,6 +3228,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -3105,9 +3420,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -3132,6 +3444,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -3165,6 +3480,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -3429,6 +3747,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -3540,6 +3861,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -3567,6 +3891,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -3594,6 +3921,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3990,6 +4320,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -4266,12 +4599,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -4662,6 +4998,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4827,6 +5166,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4865,6 +5207,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_blocks_basics\littlefoot diff --git a/examples/DemoRunner/Builds/VisualStudio2015/resources.rc b/examples/DemoRunner/Builds/VisualStudio2015/resources.rc index 0bf34edc..0c739d38 100644 --- a/examples/DemoRunner/Builds/VisualStudio2015/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2015/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj index f6537a8a..ee10af15 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj @@ -15,8 +15,6 @@ {882FE2E3-F4EF-9825-1908-F6FEE5366B5C} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ DemoRunner true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -84,6 +74,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -115,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true @@ -125,6 +116,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -172,6 +164,9 @@ true + + true + true @@ -502,6 +497,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -526,6 +587,9 @@ true + + true + true @@ -760,6 +824,9 @@ true + + true + true @@ -769,9 +836,15 @@ true + + true + true + + true + true @@ -826,6 +899,9 @@ true + + true + true @@ -1165,6 +1241,9 @@ true + + true + true @@ -1552,10 +1631,13 @@ true - + true - + + true + + true @@ -2112,6 +2194,7 @@ + @@ -2260,13 +2343,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2275,6 +2415,7 @@ + @@ -2286,6 +2427,7 @@ + @@ -2374,6 +2516,7 @@ + @@ -2411,6 +2554,7 @@ + @@ -2420,6 +2564,7 @@ + @@ -2429,6 +2574,7 @@ + @@ -2561,6 +2707,7 @@ + @@ -2653,8 +2800,9 @@ - + + @@ -2785,6 +2933,7 @@ + @@ -2840,6 +2989,7 @@ + @@ -2854,6 +3004,11 @@ + + + + + diff --git a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters index 00170e09..219a2189 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters +++ b/examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters @@ -119,6 +119,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -362,6 +407,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -511,6 +559,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -850,6 +901,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -877,6 +994,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -1129,6 +1249,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1138,9 +1261,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1195,6 +1324,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1561,6 +1693,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1966,12 +2101,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2643,6 +2781,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -3087,6 +3228,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -3105,9 +3420,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -3132,6 +3444,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -3165,6 +3480,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -3429,6 +3747,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -3540,6 +3861,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -3567,6 +3891,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -3594,6 +3921,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3990,6 +4320,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -4266,12 +4599,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -4662,6 +4998,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4827,6 +5166,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4865,6 +5207,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_blocks_basics\littlefoot diff --git a/examples/DemoRunner/Builds/VisualStudio2017/resources.rc b/examples/DemoRunner/Builds/VisualStudio2017/resources.rc index 0bf34edc..0c739d38 100644 --- a/examples/DemoRunner/Builds/VisualStudio2017/resources.rc +++ b/examples/DemoRunner/Builds/VisualStudio2017/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0" VALUE "FileDescription", "DemoRunner\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "DemoRunner\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj index 9a62e890..7187cd88 100644 --- a/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj +++ b/examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj @@ -5,228 +5,892 @@ }; objectVersion = 46; objects = { - - 63A2F309E55DAC206E9B97E3 = {isa = PBXBuildFile; fileRef = CFF2BBEB242CC8B3B904B5F9; }; - 48CF0B02E1D06E5DA51E6270 = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; }; - 163B0CF2DD0990A63DF1D5A6 = {isa = PBXBuildFile; fileRef = 470C3E4553B513FFEF752779; }; - 7B4163348896EB1B86B15160 = {isa = PBXBuildFile; fileRef = DC192EFA899E6CBE6B5CD394; }; - 8C0AEA08A71075A6C765AEC9 = {isa = PBXBuildFile; fileRef = 3B99CF94C44E2EE04635A439; }; - 1351A13E78F38741C6075600 = {isa = PBXBuildFile; fileRef = 4F0A137A4115946A346180E6; }; - 527DA2E6827BAFDDD3E8E80F = {isa = PBXBuildFile; fileRef = B4389672DA4CC8E0A531062D; }; - 34A4931AF1DD424D3A400EEF = {isa = PBXBuildFile; fileRef = 76A157A111866670A4678F04; }; - 7F57DB52C3CEFDC26DDD38FC = {isa = PBXBuildFile; fileRef = B28EFB9D1DF0B6D6499A7DEF; }; - 46071CE2B98B562B7BF27CB1 = {isa = PBXBuildFile; fileRef = 1CFE3935A3B810D5D68A2504; }; - 6A61CBB4E39BFD392D97528F = {isa = PBXBuildFile; fileRef = 61AE09C749B007B70A265D9B; }; - 0B0CE6D5062E5C02A41F24BC = {isa = PBXBuildFile; fileRef = 873F9DD54978E601102353B4; }; - 5E4310B3F6BB639875D3E9B8 = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; }; - AE7FB2AC3885F4BF53A5DDA1 = {isa = PBXBuildFile; fileRef = 7983C452610C1638B7E78F12; }; - 1FB200F4AE3E4E7CDFF629BB = {isa = PBXBuildFile; fileRef = 24D74AF1C95BEF957DC4FA77; }; - AC783ECD84496E0B77911EEE = {isa = PBXBuildFile; fileRef = 34F1320BC5C23702C08DF9F0; }; - B1981F62F6A91FD2F579A198 = {isa = PBXBuildFile; fileRef = 23CD1A3F9067C3A0ECE7BB67; }; - ECA44A41DA8A935178C1A1F4 = {isa = PBXBuildFile; fileRef = F90C8B0233A54F1445343F67; }; - 47ED2C78B05B8A6A00E36C46 = {isa = PBXBuildFile; fileRef = 685A261BE78585293F3EAD36; }; - 8E63755144E29269FD82C897 = {isa = PBXBuildFile; fileRef = 8135645508EEFDBDCDF2ADC6; }; - 75DB074DBAE04408A0A917B7 = {isa = PBXBuildFile; fileRef = E0A3F113BC27B7B4D6F1D693; }; - E6F58FC3ACAE774DB4D06420 = {isa = PBXBuildFile; fileRef = 3AB62BFF806112585B54DDA3; }; - 36E115D98311F12AA06710E6 = {isa = PBXBuildFile; fileRef = 061AECBF1CC7056F4155812D; }; - B38728296BB32B7994CE28DF = {isa = PBXBuildFile; fileRef = 934ACDCB3FD9D223A3481D8F; }; - 71DF4F5EB4C8305688416725 = {isa = PBXBuildFile; fileRef = E5BFC17E682AB426D203B3E6; }; - 4FBBB55F4E347757F74F1F41 = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; }; - F619F3887CEC064441BB6EE6 = {isa = PBXBuildFile; fileRef = 260481E972425474BB8155B0; }; - C2BB2B6DA237FE0CB64C7EDA = {isa = PBXBuildFile; fileRef = 5965349393850F41DF76F350; }; - F28112945CEBEA4CE8975833 = {isa = PBXBuildFile; fileRef = 03B0F9318FD583525AB195A9; }; - 9EACEA6BE8D0ACC72C12C080 = {isa = PBXBuildFile; fileRef = 03A63C3CA6F24977F19C316D; }; - 26652AB1BB77C8A39434775F = {isa = PBXBuildFile; fileRef = E061A1C75FA5722167FC4997; }; - 2707968B431D83AC7E28E49B = {isa = PBXBuildFile; fileRef = E67AB94002886AF67437D6AE; }; - 712D81867EC698463252FA79 = {isa = PBXBuildFile; fileRef = EDDA01B246C6128CAF7A2914; }; - 49E7BBD46981F0035E4E9021 = {isa = PBXBuildFile; fileRef = 831A01C745C905F5715CD822; }; - 611298FAC1A543BDD10D4C41 = {isa = PBXBuildFile; fileRef = 4DF215D350FFE5E119CBA7E5; }; - D183F8140174ACCDDCD230A2 = {isa = PBXBuildFile; fileRef = 3BC9753E0CD75A36DC742EE0; }; - FF87532E62753EDFA3D29CAD = {isa = PBXBuildFile; fileRef = 6C5E26B4D28F8450435B8AE1; }; - 2F76CA28C8C0EFC7453D0EB8 = {isa = PBXBuildFile; fileRef = F5F2EA2238973488632FC322; }; - 6B5560283DEEBD6DD2D6C984 = {isa = PBXBuildFile; fileRef = C1E93FAF6C68A40A664422CD; }; - 1DBDFEDE359CFC84F8E3DE4C = {isa = PBXBuildFile; fileRef = FCD0D758C5767944BEC29730; }; - CDABEA6258EC70C65C9ACCFE = {isa = PBXBuildFile; fileRef = 3E4ED41C374261CFFD309743; }; - E2F44A968EC2598DAE33A997 = {isa = PBXBuildFile; fileRef = A1D6D36B96B6B37C31F32829; }; - 5CB78489F16E82144914972D = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; }; - BC6036F22423CA0AFF0385A7 = {isa = PBXBuildFile; fileRef = 94B6C88FE30861A47CD28709; }; - AEA090DAC5C747C50C7D3FA7 = {isa = PBXBuildFile; fileRef = CE38E6469D98462A2C22C915; }; - CDEB6BA5341494AF51D07C72 = {isa = PBXBuildFile; fileRef = 0AB68DBAB6B7DAEDDDD5B683; }; - 0140787C0118A95E37DE90B4 = {isa = PBXBuildFile; fileRef = 9144821E003E15E4042B57DB; }; - 03A63C3CA6F24977F19C316D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 03B0F9318FD583525AB195A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 061AECBF1CC7056F4155812D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs2.cpp; path = ../../Source/Demos/DemoPIPs2.cpp; sourceTree = "SOURCE_ROOT"; }; - 0AB68DBAB6B7DAEDDDD5B683 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_product_unlocking.mm"; path = "../../JuceLibraryCode/include_juce_product_unlocking.mm"; sourceTree = "SOURCE_ROOT"; }; - 0B36C013D9790568B481634C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - 0CCFDC1D1C7B8A12BF4822F1 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = DemoRunner.entitlements; path = DemoRunner.entitlements; sourceTree = "SOURCE_ROOT"; }; - 112FFCB73597157E721BCDF2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_analytics"; path = "../../../../modules/juce_analytics"; sourceTree = "SOURCE_ROOT"; }; - 14CBD28B4887DAF89E27491C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - 1CFE3935A3B810D5D68A2504 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 1FCD2145DE3FCFCF4F55A8AD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DemoContentComponent.h; path = ../../Source/UI/DemoContentComponent.h; sourceTree = "SOURCE_ROOT"; }; - 23CD1A3F9067C3A0ECE7BB67 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 24D74AF1C95BEF957DC4FA77 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 25E5ED33876A2C752378C859 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/UI/MainComponent.cpp; sourceTree = "SOURCE_ROOT"; }; - 260481E972425474BB8155B0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 346450C70C964FD9640B6086 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - 34F1320BC5C23702C08DF9F0 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - 3AB62BFF806112585B54DDA3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs1.cpp; path = ../../Source/Demos/DemoPIPs1.cpp; sourceTree = "SOURCE_ROOT"; }; - 3B99CF94C44E2EE04635A439 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; - 3BC9753E0CD75A36DC742EE0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 3E4ED41C374261CFFD309743 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 470C3E4553B513FFEF752779 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 491641F7632BCC81BBA0ED85 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 49ECA8B998B339A083674A22 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 4DF215D350FFE5E119CBA7E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_box2d.cpp"; path = "../../JuceLibraryCode/include_juce_box2d.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4E9AD0EAF3CA57B548622D9A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 4EC2782DE1779A130835B64D = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 4F0A137A4115946A346180E6 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 4FE6029FF76BCE9698595DC5 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_product_unlocking"; path = "../../../../modules/juce_product_unlocking"; sourceTree = "SOURCE_ROOT"; }; - 5965349393850F41DF76F350 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_analytics.cpp"; path = "../../JuceLibraryCode/include_juce_analytics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5A9F2000C66D24E8B01BE60B = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 60F2869DC345EAF2314D6C09 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 61AE09C749B007B70A265D9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 651ECE3C7BA845DDCFEE48F3 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_osc"; path = "../../../../modules/juce_osc"; sourceTree = "SOURCE_ROOT"; }; - 6847A9B2C5E3C2ED56D8D4E7 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 685A261BE78585293F3EAD36 = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../Assets; sourceTree = ""; }; - 6C198AF93E1F6E682189E2F6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 6C2C1AC86623F457427965EF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_box2d"; path = "../../../../modules/juce_box2d"; sourceTree = "SOURCE_ROOT"; }; - 6C5E26B4D28F8450435B8AE1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - 72129757D2A553B90A7157C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 76A157A111866670A4678F04 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 7983C452610C1638B7E78F12 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; }; - 7A5AAE9EE573FC6105CC4AAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = "SOURCE_ROOT"; }; - 8135645508EEFDBDCDF2ADC6 = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DemoRunner/Images.xcassets; sourceTree = "SOURCE_ROOT"; }; - 831A01C745C905F5715CD822 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_blocks_basics.cpp"; path = "../../JuceLibraryCode/include_juce_blocks_basics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 873F9DD54978E601102353B4 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 8CE533D611CD0984AD028D73 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 903CD4126C779884797EF915 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 9144821E003E15E4042B57DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_video.mm"; path = "../../JuceLibraryCode/include_juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; - 934ACDCB3FD9D223A3481D8F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = JUCEDemos.cpp; path = ../../Source/Demos/JUCEDemos.cpp; sourceTree = "SOURCE_ROOT"; }; - 94B6C88FE30861A47CD28709 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 979F23EA9E5E76131299E886 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - A04E4408525F24F7DCBA000E = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - A1D6D36B96B6B37C31F32829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - A5256778E2EBD206B337B555 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_video"; path = "../../../../modules/juce_video"; sourceTree = "SOURCE_ROOT"; }; - A6F555BE0DDF01C285BD8BF5 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_dsp"; path = "../../../../modules/juce_dsp"; sourceTree = "SOURCE_ROOT"; }; - A9315F8368A5771EC39631CB = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - B28EFB9D1DF0B6D6499A7DEF = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - B2BC383CE102EECCF49C7AF7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = "SOURCE_ROOT"; }; - B4389672DA4CC8E0A531062D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - C1E93FAF6C68A40A664422CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_dsp.mm"; path = "../../JuceLibraryCode/include_juce_dsp.mm"; sourceTree = "SOURCE_ROOT"; }; - CE38E6469D98462A2C22C915 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_osc.cpp"; path = "../../JuceLibraryCode/include_juce_osc.cpp"; sourceTree = "SOURCE_ROOT"; }; - CFF2BBEB242CC8B3B904B5F9 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - D018D636A4DC9BEA11720129 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_blocks_basics"; path = "../../../../modules/juce_blocks_basics"; sourceTree = "SOURCE_ROOT"; }; - DC192EFA899E6CBE6B5CD394 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - E061A1C75FA5722167FC4997 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - E0A3F113BC27B7B4D6F1D693 = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - E5BFC17E682AB426D203B3E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoContentComponent.cpp; path = ../../Source/UI/DemoContentComponent.cpp; sourceTree = "SOURCE_ROOT"; }; - E67AB94002886AF67437D6AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - EB68BD1224CD9748BFA332C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/UI/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; - ECE79F1433E92BB6213C86F5 = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = "SOURCE_ROOT"; }; - EDDA01B246C6128CAF7A2914 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - EE6BDC78B539D27E65E92265 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JUCEDemos.h; path = ../../Source/Demos/JUCEDemos.h; sourceTree = "SOURCE_ROOT"; }; - F5F2EA2238973488632FC322 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - F90C8B0233A54F1445343F67 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - FB1FC613CE260140F1CFD21B = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - FCD0D758C5767944BEC29730 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - FDC3CA8D1403C169659F7D8C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - CD575607FAA297480EE95F13 = {isa = PBXGroup; children = ( - 3AB62BFF806112585B54DDA3, - 061AECBF1CC7056F4155812D, - B2BC383CE102EECCF49C7AF7, - 934ACDCB3FD9D223A3481D8F, - EE6BDC78B539D27E65E92265, ); name = Demos; sourceTree = ""; }; - BB12537403CC24C02622582C = {isa = PBXGroup; children = ( - E5BFC17E682AB426D203B3E6, - 1FCD2145DE3FCFCF4F55A8AD, - 25E5ED33876A2C752378C859, - EB68BD1224CD9748BFA332C0, - 7A5AAE9EE573FC6105CC4AAC, ); name = UI; sourceTree = ""; }; - 6F933968486D9AD9FE112622 = {isa = PBXGroup; children = ( - CD575607FAA297480EE95F13, - BB12537403CC24C02622582C, - 260481E972425474BB8155B0, - ECE79F1433E92BB6213C86F5, ); name = Source; sourceTree = ""; }; - 9683F931FA1B8B85FA8C4BD8 = {isa = PBXGroup; children = ( - 6F933968486D9AD9FE112622, ); name = DemoRunner; sourceTree = ""; }; - 5A0B2CEF393A25C6D4B1B76C = {isa = PBXGroup; children = ( - 112FFCB73597157E721BCDF2, - 6847A9B2C5E3C2ED56D8D4E7, - 60F2869DC345EAF2314D6C09, - 491641F7632BCC81BBA0ED85, - 346450C70C964FD9640B6086, - 0B36C013D9790568B481634C, - D018D636A4DC9BEA11720129, - 6C2C1AC86623F457427965EF, - 903CD4126C779884797EF915, - 14CBD28B4887DAF89E27491C, - FDC3CA8D1403C169659F7D8C, - A6F555BE0DDF01C285BD8BF5, - FB1FC613CE260140F1CFD21B, - 8CE533D611CD0984AD028D73, - 5A9F2000C66D24E8B01BE60B, - A9315F8368A5771EC39631CB, - 6C198AF93E1F6E682189E2F6, - 651ECE3C7BA845DDCFEE48F3, - 4FE6029FF76BCE9698595DC5, - A5256778E2EBD206B337B555, ); name = "JUCE Modules"; sourceTree = ""; }; - 61F3057D838D7DABB0FA3D34 = {isa = PBXGroup; children = ( - 72129757D2A553B90A7157C6, - 5965349393850F41DF76F350, - 03B0F9318FD583525AB195A9, - 03A63C3CA6F24977F19C316D, - E061A1C75FA5722167FC4997, - E67AB94002886AF67437D6AE, - EDDA01B246C6128CAF7A2914, - 831A01C745C905F5715CD822, - 4DF215D350FFE5E119CBA7E5, - 3BC9753E0CD75A36DC742EE0, - 6C5E26B4D28F8450435B8AE1, - F5F2EA2238973488632FC322, - C1E93FAF6C68A40A664422CD, - FCD0D758C5767944BEC29730, - 3E4ED41C374261CFFD309743, - A1D6D36B96B6B37C31F32829, - 979F23EA9E5E76131299E886, - 94B6C88FE30861A47CD28709, - CE38E6469D98462A2C22C915, - 0AB68DBAB6B7DAEDDDD5B683, - 9144821E003E15E4042B57DB, - 4E9AD0EAF3CA57B548622D9A, ); name = "JUCE Library Code"; sourceTree = ""; }; - D87DCD5DA4EC8D78DFF37FCC = {isa = PBXGroup; children = ( - 685A261BE78585293F3EAD36, - 4EC2782DE1779A130835B64D, - 8135645508EEFDBDCDF2ADC6, - E0A3F113BC27B7B4D6F1D693, ); name = Resources; sourceTree = ""; }; - 4452EAA652B65A9AE648288C = {isa = PBXGroup; children = ( - A04E4408525F24F7DCBA000E, - 470C3E4553B513FFEF752779, - DC192EFA899E6CBE6B5CD394, - 3B99CF94C44E2EE04635A439, - 4F0A137A4115946A346180E6, - B4389672DA4CC8E0A531062D, - 76A157A111866670A4678F04, - B28EFB9D1DF0B6D6499A7DEF, - 1CFE3935A3B810D5D68A2504, - 61AE09C749B007B70A265D9B, - 873F9DD54978E601102353B4, - 49ECA8B998B339A083674A22, - 7983C452610C1638B7E78F12, - 24D74AF1C95BEF957DC4FA77, - 34F1320BC5C23702C08DF9F0, - 23CD1A3F9067C3A0ECE7BB67, - F90C8B0233A54F1445343F67, ); name = Frameworks; sourceTree = ""; }; - BFDAF16175D03695EEB466BC = {isa = PBXGroup; children = ( - CFF2BBEB242CC8B3B904B5F9, ); name = Products; sourceTree = ""; }; - 91A9A0FE9DF4F4E10009EEC7 = {isa = PBXGroup; children = ( - 0CCFDC1D1C7B8A12BF4822F1, - 9683F931FA1B8B85FA8C4BD8, - 5A0B2CEF393A25C6D4B1B76C, - 61F3057D838D7DABB0FA3D34, - D87DCD5DA4EC8D78DFF37FCC, - 4452EAA652B65A9AE648288C, - BFDAF16175D03695EEB466BC, ); name = Source; sourceTree = ""; }; - B18D059E5616FA729F764229 = {isa = XCBuildConfiguration; buildSettings = { + 63A2F309E55DAC206E9B97E3 = { + isa = PBXBuildFile; + fileRef = CFF2BBEB242CC8B3B904B5F9; + }; + 48CF0B02E1D06E5DA51E6270 = { + isa = PBXBuildFile; + fileRef = A04E4408525F24F7DCBA000E; + }; + 163B0CF2DD0990A63DF1D5A6 = { + isa = PBXBuildFile; + fileRef = 470C3E4553B513FFEF752779; + }; + 7B4163348896EB1B86B15160 = { + isa = PBXBuildFile; + fileRef = DC192EFA899E6CBE6B5CD394; + }; + 8C0AEA08A71075A6C765AEC9 = { + isa = PBXBuildFile; + fileRef = 3B99CF94C44E2EE04635A439; + }; + 1351A13E78F38741C6075600 = { + isa = PBXBuildFile; + fileRef = 4F0A137A4115946A346180E6; + }; + 527DA2E6827BAFDDD3E8E80F = { + isa = PBXBuildFile; + fileRef = B4389672DA4CC8E0A531062D; + }; + 34A4931AF1DD424D3A400EEF = { + isa = PBXBuildFile; + fileRef = 76A157A111866670A4678F04; + }; + 7F57DB52C3CEFDC26DDD38FC = { + isa = PBXBuildFile; + fileRef = B28EFB9D1DF0B6D6499A7DEF; + }; + 46071CE2B98B562B7BF27CB1 = { + isa = PBXBuildFile; + fileRef = 1CFE3935A3B810D5D68A2504; + }; + 6A61CBB4E39BFD392D97528F = { + isa = PBXBuildFile; + fileRef = 61AE09C749B007B70A265D9B; + }; + 0B0CE6D5062E5C02A41F24BC = { + isa = PBXBuildFile; + fileRef = 873F9DD54978E601102353B4; + }; + 5E4310B3F6BB639875D3E9B8 = { + isa = PBXBuildFile; + fileRef = 49ECA8B998B339A083674A22; + }; + AE7FB2AC3885F4BF53A5DDA1 = { + isa = PBXBuildFile; + fileRef = 7983C452610C1638B7E78F12; + }; + 1FB200F4AE3E4E7CDFF629BB = { + isa = PBXBuildFile; + fileRef = 24D74AF1C95BEF957DC4FA77; + }; + AC783ECD84496E0B77911EEE = { + isa = PBXBuildFile; + fileRef = 34F1320BC5C23702C08DF9F0; + }; + B1981F62F6A91FD2F579A198 = { + isa = PBXBuildFile; + fileRef = 23CD1A3F9067C3A0ECE7BB67; + }; + ECA44A41DA8A935178C1A1F4 = { + isa = PBXBuildFile; + fileRef = F90C8B0233A54F1445343F67; + }; + 47ED2C78B05B8A6A00E36C46 = { + isa = PBXBuildFile; + fileRef = 685A261BE78585293F3EAD36; + }; + 8E63755144E29269FD82C897 = { + isa = PBXBuildFile; + fileRef = 8135645508EEFDBDCDF2ADC6; + }; + 75DB074DBAE04408A0A917B7 = { + isa = PBXBuildFile; + fileRef = E0A3F113BC27B7B4D6F1D693; + }; + E6F58FC3ACAE774DB4D06420 = { + isa = PBXBuildFile; + fileRef = 3AB62BFF806112585B54DDA3; + }; + 36E115D98311F12AA06710E6 = { + isa = PBXBuildFile; + fileRef = 061AECBF1CC7056F4155812D; + }; + B38728296BB32B7994CE28DF = { + isa = PBXBuildFile; + fileRef = 934ACDCB3FD9D223A3481D8F; + }; + 71DF4F5EB4C8305688416725 = { + isa = PBXBuildFile; + fileRef = E5BFC17E682AB426D203B3E6; + }; + 4FBBB55F4E347757F74F1F41 = { + isa = PBXBuildFile; + fileRef = 25E5ED33876A2C752378C859; + }; + F619F3887CEC064441BB6EE6 = { + isa = PBXBuildFile; + fileRef = 260481E972425474BB8155B0; + }; + C2BB2B6DA237FE0CB64C7EDA = { + isa = PBXBuildFile; + fileRef = 5965349393850F41DF76F350; + }; + F28112945CEBEA4CE8975833 = { + isa = PBXBuildFile; + fileRef = 03B0F9318FD583525AB195A9; + }; + 9EACEA6BE8D0ACC72C12C080 = { + isa = PBXBuildFile; + fileRef = 03A63C3CA6F24977F19C316D; + }; + 26652AB1BB77C8A39434775F = { + isa = PBXBuildFile; + fileRef = E061A1C75FA5722167FC4997; + }; + 2707968B431D83AC7E28E49B = { + isa = PBXBuildFile; + fileRef = E67AB94002886AF67437D6AE; + }; + 712D81867EC698463252FA79 = { + isa = PBXBuildFile; + fileRef = EDDA01B246C6128CAF7A2914; + }; + 49E7BBD46981F0035E4E9021 = { + isa = PBXBuildFile; + fileRef = 831A01C745C905F5715CD822; + }; + 611298FAC1A543BDD10D4C41 = { + isa = PBXBuildFile; + fileRef = 4DF215D350FFE5E119CBA7E5; + }; + D183F8140174ACCDDCD230A2 = { + isa = PBXBuildFile; + fileRef = 3BC9753E0CD75A36DC742EE0; + }; + FF87532E62753EDFA3D29CAD = { + isa = PBXBuildFile; + fileRef = 6C5E26B4D28F8450435B8AE1; + }; + 2F76CA28C8C0EFC7453D0EB8 = { + isa = PBXBuildFile; + fileRef = F5F2EA2238973488632FC322; + }; + 6B5560283DEEBD6DD2D6C984 = { + isa = PBXBuildFile; + fileRef = C1E93FAF6C68A40A664422CD; + }; + 1DBDFEDE359CFC84F8E3DE4C = { + isa = PBXBuildFile; + fileRef = FCD0D758C5767944BEC29730; + }; + CDABEA6258EC70C65C9ACCFE = { + isa = PBXBuildFile; + fileRef = 3E4ED41C374261CFFD309743; + }; + E2F44A968EC2598DAE33A997 = { + isa = PBXBuildFile; + fileRef = A1D6D36B96B6B37C31F32829; + }; + 5CB78489F16E82144914972D = { + isa = PBXBuildFile; + fileRef = 979F23EA9E5E76131299E886; + }; + BC6036F22423CA0AFF0385A7 = { + isa = PBXBuildFile; + fileRef = 94B6C88FE30861A47CD28709; + }; + AEA090DAC5C747C50C7D3FA7 = { + isa = PBXBuildFile; + fileRef = CE38E6469D98462A2C22C915; + }; + CDEB6BA5341494AF51D07C72 = { + isa = PBXBuildFile; + fileRef = 0AB68DBAB6B7DAEDDDD5B683; + }; + 0140787C0118A95E37DE90B4 = { + isa = PBXBuildFile; + fileRef = 9144821E003E15E4042B57DB; + }; + 03A63C3CA6F24977F19C316D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 03B0F9318FD583525AB195A9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 061AECBF1CC7056F4155812D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoPIPs2.cpp; + path = ../../Source/Demos/DemoPIPs2.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 0AB68DBAB6B7DAEDDDD5B683 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_product_unlocking.mm"; + path = "../../JuceLibraryCode/include_juce_product_unlocking.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 0B36C013D9790568B481634C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + 0CCFDC1D1C7B8A12BF4822F1 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = DemoRunner.entitlements; + path = DemoRunner.entitlements; + sourceTree = "SOURCE_ROOT"; + }; + 112FFCB73597157E721BCDF2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_analytics"; + path = "../../../../modules/juce_analytics"; + sourceTree = "SOURCE_ROOT"; + }; + 14CBD28B4887DAF89E27491C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + 1CFE3935A3B810D5D68A2504 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMedia.framework; + path = System/Library/Frameworks/CoreMedia.framework; + sourceTree = SDKROOT; + }; + 1FCD2145DE3FCFCF4F55A8AD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = DemoContentComponent.h; + path = ../../Source/UI/DemoContentComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 23CD1A3F9067C3A0ECE7BB67 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 24D74AF1C95BEF957DC4FA77 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = MobileCoreServices.framework; + path = System/Library/Frameworks/MobileCoreServices.framework; + sourceTree = SDKROOT; + }; + 25E5ED33876A2C752378C859 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = MainComponent.cpp; + path = ../../Source/UI/MainComponent.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 260481E972425474BB8155B0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 346450C70C964FD9640B6086 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + 34F1320BC5C23702C08DF9F0 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGLES.framework; + path = System/Library/Frameworks/OpenGLES.framework; + sourceTree = SDKROOT; + }; + 3AB62BFF806112585B54DDA3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoPIPs1.cpp; + path = ../../Source/Demos/DemoPIPs1.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 3B99CF94C44E2EE04635A439 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVKit.framework; + path = System/Library/Frameworks/AVKit.framework; + sourceTree = SDKROOT; + }; + 3BC9753E0CD75A36DC742EE0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 3E4ED41C374261CFFD309743 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 470C3E4553B513FFEF752779 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + 491641F7632BCC81BBA0ED85 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 49ECA8B998B339A083674A22 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = System/Library/Frameworks/Foundation.framework; + sourceTree = SDKROOT; + }; + 4DF215D350FFE5E119CBA7E5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_box2d.cpp"; + path = "../../JuceLibraryCode/include_juce_box2d.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4E9AD0EAF3CA57B548622D9A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + 4EC2782DE1779A130835B64D = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 4F0A137A4115946A346180E6 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + 4FE6029FF76BCE9698595DC5 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_product_unlocking"; + path = "../../../../modules/juce_product_unlocking"; + sourceTree = "SOURCE_ROOT"; + }; + 5965349393850F41DF76F350 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_analytics.cpp"; + path = "../../JuceLibraryCode/include_juce_analytics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 5A9F2000C66D24E8B01BE60B = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 60F2869DC345EAF2314D6C09 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 61AE09C749B007B70A265D9B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 651ECE3C7BA845DDCFEE48F3 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_osc"; + path = "../../../../modules/juce_osc"; + sourceTree = "SOURCE_ROOT"; + }; + 6847A9B2C5E3C2ED56D8D4E7 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 685A261BE78585293F3EAD36 = { + isa = PBXFileReference; + lastKnownFileType = folder; + name = Assets; + path = ../../../Assets; + sourceTree = ""; + }; + 6C198AF93E1F6E682189E2F6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 6C2C1AC86623F457427965EF = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_box2d"; + path = "../../../../modules/juce_box2d"; + sourceTree = "SOURCE_ROOT"; + }; + 6C5E26B4D28F8450435B8AE1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 72129757D2A553B90A7157C6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 76A157A111866670A4678F04 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreGraphics.framework; + path = System/Library/Frameworks/CoreGraphics.framework; + sourceTree = SDKROOT; + }; + 7983C452610C1638B7E78F12 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = ImageIO.framework; + path = System/Library/Frameworks/ImageIO.framework; + sourceTree = SDKROOT; + }; + 7A5AAE9EE573FC6105CC4AAC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SettingsContent.h; + path = ../../Source/UI/SettingsContent.h; + sourceTree = "SOURCE_ROOT"; + }; + 8135645508EEFDBDCDF2ADC6 = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + name = Images.xcassets; + path = DemoRunner/Images.xcassets; + sourceTree = "SOURCE_ROOT"; + }; + 831A01C745C905F5715CD822 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_blocks_basics.cpp"; + path = "../../JuceLibraryCode/include_juce_blocks_basics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 873F9DD54978E601102353B4 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreText.framework; + path = System/Library/Frameworks/CoreText.framework; + sourceTree = SDKROOT; + }; + 8CE533D611CD0984AD028D73 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 903CD4126C779884797EF915 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 9144821E003E15E4042B57DB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_video.mm"; + path = "../../JuceLibraryCode/include_juce_video.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 934ACDCB3FD9D223A3481D8F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = JUCEDemos.cpp; + path = ../../Source/Demos/JUCEDemos.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 94B6C88FE30861A47CD28709 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 979F23EA9E5E76131299E886 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + A04E4408525F24F7DCBA000E = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + A1D6D36B96B6B37C31F32829 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + A5256778E2EBD206B337B555 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_video"; + path = "../../../../modules/juce_video"; + sourceTree = "SOURCE_ROOT"; + }; + A6F555BE0DDF01C285BD8BF5 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_dsp"; + path = "../../../../modules/juce_dsp"; + sourceTree = "SOURCE_ROOT"; + }; + A9315F8368A5771EC39631CB = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + B28EFB9D1DF0B6D6499A7DEF = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreImage.framework; + path = System/Library/Frameworks/CoreImage.framework; + sourceTree = SDKROOT; + }; + B2BC383CE102EECCF49C7AF7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = IntroScreen.h; + path = ../../Source/Demos/IntroScreen.h; + sourceTree = "SOURCE_ROOT"; + }; + B4389672DA4CC8E0A531062D = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + C1E93FAF6C68A40A664422CD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_dsp.mm"; + path = "../../JuceLibraryCode/include_juce_dsp.mm"; + sourceTree = "SOURCE_ROOT"; + }; + CE38E6469D98462A2C22C915 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_osc.cpp"; + path = "../../JuceLibraryCode/include_juce_osc.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + CFF2BBEB242CC8B3B904B5F9 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = DemoRunner.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + D018D636A4DC9BEA11720129 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_blocks_basics"; + path = "../../../../modules/juce_blocks_basics"; + sourceTree = "SOURCE_ROOT"; + }; + DC192EFA899E6CBE6B5CD394 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + E061A1C75FA5722167FC4997 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + E0A3F113BC27B7B4D6F1D693 = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + E5BFC17E682AB426D203B3E6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = DemoContentComponent.cpp; + path = ../../Source/UI/DemoContentComponent.cpp; + sourceTree = "SOURCE_ROOT"; + }; + E67AB94002886AF67437D6AE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + EB68BD1224CD9748BFA332C0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainComponent.h; + path = ../../Source/UI/MainComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + ECE79F1433E92BB6213C86F5 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = JUCEAppIcon.png; + path = ../../Source/JUCEAppIcon.png; + sourceTree = "SOURCE_ROOT"; + }; + EDDA01B246C6128CAF7A2914 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + EE6BDC78B539D27E65E92265 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JUCEDemos.h; + path = ../../Source/Demos/JUCEDemos.h; + sourceTree = "SOURCE_ROOT"; + }; + F5F2EA2238973488632FC322 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + F90C8B0233A54F1445343F67 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = UIKit.framework; + path = System/Library/Frameworks/UIKit.framework; + sourceTree = SDKROOT; + }; + FB1FC613CE260140F1CFD21B = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + FCD0D758C5767944BEC29730 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + FDC3CA8D1403C169659F7D8C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + CD575607FAA297480EE95F13 = { + isa = PBXGroup; + children = ( + 3AB62BFF806112585B54DDA3, + 061AECBF1CC7056F4155812D, + B2BC383CE102EECCF49C7AF7, + 934ACDCB3FD9D223A3481D8F, + EE6BDC78B539D27E65E92265, + ); + name = Demos; + sourceTree = ""; + }; + BB12537403CC24C02622582C = { + isa = PBXGroup; + children = ( + E5BFC17E682AB426D203B3E6, + 1FCD2145DE3FCFCF4F55A8AD, + 25E5ED33876A2C752378C859, + EB68BD1224CD9748BFA332C0, + 7A5AAE9EE573FC6105CC4AAC, + ); + name = UI; + sourceTree = ""; + }; + 6F933968486D9AD9FE112622 = { + isa = PBXGroup; + children = ( + CD575607FAA297480EE95F13, + BB12537403CC24C02622582C, + 260481E972425474BB8155B0, + ECE79F1433E92BB6213C86F5, + ); + name = Source; + sourceTree = ""; + }; + 9683F931FA1B8B85FA8C4BD8 = { + isa = PBXGroup; + children = ( + 6F933968486D9AD9FE112622, + ); + name = DemoRunner; + sourceTree = ""; + }; + 5A0B2CEF393A25C6D4B1B76C = { + isa = PBXGroup; + children = ( + 112FFCB73597157E721BCDF2, + 6847A9B2C5E3C2ED56D8D4E7, + 60F2869DC345EAF2314D6C09, + 491641F7632BCC81BBA0ED85, + 346450C70C964FD9640B6086, + 0B36C013D9790568B481634C, + D018D636A4DC9BEA11720129, + 6C2C1AC86623F457427965EF, + 903CD4126C779884797EF915, + 14CBD28B4887DAF89E27491C, + FDC3CA8D1403C169659F7D8C, + A6F555BE0DDF01C285BD8BF5, + FB1FC613CE260140F1CFD21B, + 8CE533D611CD0984AD028D73, + 5A9F2000C66D24E8B01BE60B, + A9315F8368A5771EC39631CB, + 6C198AF93E1F6E682189E2F6, + 651ECE3C7BA845DDCFEE48F3, + 4FE6029FF76BCE9698595DC5, + A5256778E2EBD206B337B555, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 61F3057D838D7DABB0FA3D34 = { + isa = PBXGroup; + children = ( + 72129757D2A553B90A7157C6, + 5965349393850F41DF76F350, + 03B0F9318FD583525AB195A9, + 03A63C3CA6F24977F19C316D, + E061A1C75FA5722167FC4997, + E67AB94002886AF67437D6AE, + EDDA01B246C6128CAF7A2914, + 831A01C745C905F5715CD822, + 4DF215D350FFE5E119CBA7E5, + 3BC9753E0CD75A36DC742EE0, + 6C5E26B4D28F8450435B8AE1, + F5F2EA2238973488632FC322, + C1E93FAF6C68A40A664422CD, + FCD0D758C5767944BEC29730, + 3E4ED41C374261CFFD309743, + A1D6D36B96B6B37C31F32829, + 979F23EA9E5E76131299E886, + 94B6C88FE30861A47CD28709, + CE38E6469D98462A2C22C915, + 0AB68DBAB6B7DAEDDDD5B683, + 9144821E003E15E4042B57DB, + 4E9AD0EAF3CA57B548622D9A, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + D87DCD5DA4EC8D78DFF37FCC = { + isa = PBXGroup; + children = ( + 685A261BE78585293F3EAD36, + 4EC2782DE1779A130835B64D, + 8135645508EEFDBDCDF2ADC6, + E0A3F113BC27B7B4D6F1D693, + ); + name = Resources; + sourceTree = ""; + }; + 4452EAA652B65A9AE648288C = { + isa = PBXGroup; + children = ( + A04E4408525F24F7DCBA000E, + 470C3E4553B513FFEF752779, + DC192EFA899E6CBE6B5CD394, + 3B99CF94C44E2EE04635A439, + 4F0A137A4115946A346180E6, + B4389672DA4CC8E0A531062D, + 76A157A111866670A4678F04, + B28EFB9D1DF0B6D6499A7DEF, + 1CFE3935A3B810D5D68A2504, + 61AE09C749B007B70A265D9B, + 873F9DD54978E601102353B4, + 49ECA8B998B339A083674A22, + 7983C452610C1638B7E78F12, + 24D74AF1C95BEF957DC4FA77, + 34F1320BC5C23702C08DF9F0, + 23CD1A3F9067C3A0ECE7BB67, + F90C8B0233A54F1445343F67, + ); + name = Frameworks; + sourceTree = ""; + }; + BFDAF16175D03695EEB466BC = { + isa = PBXGroup; + children = ( + CFF2BBEB242CC8B3B904B5F9, + ); + name = Products; + sourceTree = ""; + }; + 91A9A0FE9DF4F4E10009EEC7 = { + isa = PBXGroup; + children = ( + 0CCFDC1D1C7B8A12BF4822F1, + 9683F931FA1B8B85FA8C4BD8, + 5A0B2CEF393A25C6D4B1B76C, + 61F3057D838D7DABB0FA3D34, + D87DCD5DA4EC8D78DFF37FCC, + 4452EAA652B65A9AE648288C, + BFDAF16175D03695EEB466BC, + ); + name = Source; + sourceTree = ""; + }; + B18D059E5616FA729F764229 = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -244,24 +908,36 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_IPHONE_5BC26AE3=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.demorunner; - USE_HEADERMAP = NO; }; name = Debug; }; - 69330F27DD2C71609336C7D2 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "DemoRunner"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 69330F27DD2C71609336C7D2 = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -279,37 +955,52 @@ "JUCE_DEMO_RUNNER=1", "JUCE_UNIT_TESTS=1", "JUCER_XCODE_IPHONE_5BC26AE3=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.demorunner; - USE_HEADERMAP = NO; }; name = Release; }; - C01EC82F42B640CA1E54AD53 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "DemoRunner"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + C01EC82F42B640CA1E54AD53 = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -339,19 +1030,27 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 07EA85D22270E8EA13CA0BBE = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 07EA85D22270E8EA13CA0BBE = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -379,68 +1078,125 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - D87BAF6D1A7451B7A733B5F1 = {isa = PBXTargetDependency; target = 291E01DCBE746A376DBFA4D1; }; - 80E8AD1971F52B06F4D28891 = {isa = XCConfigurationList; buildConfigurations = ( - C01EC82F42B640CA1E54AD53, - 07EA85D22270E8EA13CA0BBE, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 413FBEAEC84DFEC41133C78B = {isa = XCConfigurationList; buildConfigurations = ( - B18D059E5616FA729F764229, - 69330F27DD2C71609336C7D2, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 57134FDD813875865F5B2057 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 47ED2C78B05B8A6A00E36C46, - 8E63755144E29269FD82C897, - 75DB074DBAE04408A0A917B7, ); runOnlyForDeploymentPostprocessing = 0; }; - ED916866997CA4F40C7C1016 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E6F58FC3ACAE774DB4D06420, - 36E115D98311F12AA06710E6, - B38728296BB32B7994CE28DF, - 71DF4F5EB4C8305688416725, - 4FBBB55F4E347757F74F1F41, - F619F3887CEC064441BB6EE6, - C2BB2B6DA237FE0CB64C7EDA, - F28112945CEBEA4CE8975833, - 9EACEA6BE8D0ACC72C12C080, - 26652AB1BB77C8A39434775F, - 2707968B431D83AC7E28E49B, - 712D81867EC698463252FA79, - 49E7BBD46981F0035E4E9021, - 611298FAC1A543BDD10D4C41, - D183F8140174ACCDDCD230A2, - FF87532E62753EDFA3D29CAD, - 2F76CA28C8C0EFC7453D0EB8, - 6B5560283DEEBD6DD2D6C984, - 1DBDFEDE359CFC84F8E3DE4C, - CDABEA6258EC70C65C9ACCFE, - E2F44A968EC2598DAE33A997, - 5CB78489F16E82144914972D, - BC6036F22423CA0AFF0385A7, - AEA090DAC5C747C50C7D3FA7, - CDEB6BA5341494AF51D07C72, - 0140787C0118A95E37DE90B4, ); runOnlyForDeploymentPostprocessing = 0; }; - 4B1F6E32C9FC8D779B21C1AF = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 48CF0B02E1D06E5DA51E6270, - 163B0CF2DD0990A63DF1D5A6, - 7B4163348896EB1B86B15160, - 8C0AEA08A71075A6C765AEC9, - 1351A13E78F38741C6075600, - 527DA2E6827BAFDDD3E8E80F, - 34A4931AF1DD424D3A400EEF, - 7F57DB52C3CEFDC26DDD38FC, - 46071CE2B98B562B7BF27CB1, - 6A61CBB4E39BFD392D97528F, - 0B0CE6D5062E5C02A41F24BC, - 5E4310B3F6BB639875D3E9B8, - AE7FB2AC3885F4BF53A5DDA1, - 1FB200F4AE3E4E7CDFF629BB, - AC783ECD84496E0B77911EEE, - B1981F62F6A91FD2F579A198, - ECA44A41DA8A935178C1A1F4, ); runOnlyForDeploymentPostprocessing = 0; }; - 291E01DCBE746A376DBFA4D1 = {isa = PBXNativeTarget; buildConfigurationList = 413FBEAEC84DFEC41133C78B; buildPhases = ( - 57134FDD813875865F5B2057, - ED916866997CA4F40C7C1016, - 4B1F6E32C9FC8D779B21C1AF, ); buildRules = ( ); dependencies = ( ); name = "DemoRunner - App"; productName = DemoRunner; productReference = CFF2BBEB242CC8B3B904B5F9; productType = "com.apple.product-type.application"; }; - AC6F0E9A0809A184B2C2B7DE = {isa = PBXProject; buildConfigurationList = 80E8AD1971F52B06F4D28891; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 291E01DCBE746A376DBFA4D1 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; com.apple.iCloud = { enabled = 1; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 91A9A0FE9DF4F4E10009EEC7; projectDirPath = ""; projectRoot = ""; targets = (291E01DCBE746A376DBFA4D1); }; + ZERO_LINK = NO; + }; + name = Release; + }; + D87BAF6D1A7451B7A733B5F1 = { + isa = PBXTargetDependency; + target = 291E01DCBE746A376DBFA4D1; + }; + 80E8AD1971F52B06F4D28891 = { + isa = XCConfigurationList; + buildConfigurations = ( + C01EC82F42B640CA1E54AD53, + 07EA85D22270E8EA13CA0BBE, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 413FBEAEC84DFEC41133C78B = { + isa = XCConfigurationList; + buildConfigurations = ( + B18D059E5616FA729F764229, + 69330F27DD2C71609336C7D2, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 57134FDD813875865F5B2057 = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 47ED2C78B05B8A6A00E36C46, + 8E63755144E29269FD82C897, + 75DB074DBAE04408A0A917B7, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ED916866997CA4F40C7C1016 = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E6F58FC3ACAE774DB4D06420, + 36E115D98311F12AA06710E6, + B38728296BB32B7994CE28DF, + 71DF4F5EB4C8305688416725, + 4FBBB55F4E347757F74F1F41, + F619F3887CEC064441BB6EE6, + C2BB2B6DA237FE0CB64C7EDA, + F28112945CEBEA4CE8975833, + 9EACEA6BE8D0ACC72C12C080, + 26652AB1BB77C8A39434775F, + 2707968B431D83AC7E28E49B, + 712D81867EC698463252FA79, + 49E7BBD46981F0035E4E9021, + 611298FAC1A543BDD10D4C41, + D183F8140174ACCDDCD230A2, + FF87532E62753EDFA3D29CAD, + 2F76CA28C8C0EFC7453D0EB8, + 6B5560283DEEBD6DD2D6C984, + 1DBDFEDE359CFC84F8E3DE4C, + CDABEA6258EC70C65C9ACCFE, + E2F44A968EC2598DAE33A997, + 5CB78489F16E82144914972D, + BC6036F22423CA0AFF0385A7, + AEA090DAC5C747C50C7D3FA7, + CDEB6BA5341494AF51D07C72, + 0140787C0118A95E37DE90B4, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4B1F6E32C9FC8D779B21C1AF = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 48CF0B02E1D06E5DA51E6270, + 163B0CF2DD0990A63DF1D5A6, + 7B4163348896EB1B86B15160, + 8C0AEA08A71075A6C765AEC9, + 1351A13E78F38741C6075600, + 527DA2E6827BAFDDD3E8E80F, + 34A4931AF1DD424D3A400EEF, + 7F57DB52C3CEFDC26DDD38FC, + 46071CE2B98B562B7BF27CB1, + 6A61CBB4E39BFD392D97528F, + 0B0CE6D5062E5C02A41F24BC, + 5E4310B3F6BB639875D3E9B8, + AE7FB2AC3885F4BF53A5DDA1, + 1FB200F4AE3E4E7CDFF629BB, + AC783ECD84496E0B77911EEE, + B1981F62F6A91FD2F579A198, + ECA44A41DA8A935178C1A1F4, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 291E01DCBE746A376DBFA4D1 = { + isa = PBXNativeTarget; + buildConfigurationList = 413FBEAEC84DFEC41133C78B; + buildPhases = ( + 57134FDD813875865F5B2057, + ED916866997CA4F40C7C1016, + 4B1F6E32C9FC8D779B21C1AF, + ); + buildRules = ( ); + dependencies = ( ); + name = "DemoRunner - App"; + productName = DemoRunner; + productReference = CFF2BBEB242CC8B3B904B5F9; + productType = "com.apple.product-type.application"; + }; + AC6F0E9A0809A184B2C2B7DE = { + isa = PBXProject; + buildConfigurationList = 80E8AD1971F52B06F4D28891; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 291E01DCBE746A376DBFA4D1 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; com.apple.iCloud = { enabled = 1; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 91A9A0FE9DF4F4E10009EEC7; + projectDirPath = ""; + projectRoot = ""; + targets = (291E01DCBE746A376DBFA4D1); + }; }; rootObject = AC6F0E9A0809A184B2C2B7DE; } diff --git a/examples/DemoRunner/Builds/iOS/Info-App.plist b/examples/DemoRunner/Builds/iOS/Info-App.plist index 72a50cf5..89280a4c 100644 --- a/examples/DemoRunner/Builds/iOS/Info-App.plist +++ b/examples/DemoRunner/Builds/iOS/Info-App.plist @@ -3,12 +3,12 @@ - LSRequiresIPhoneOS - NSMicrophoneUsageDescription - This is an audio app which requires audio input. If you do not have a USB audio interface connected it will use the microphone. + This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone. NSCameraUsageDescription - This app requires camera usage to function properly. + This app requires access to the camera to function correctly. + LSRequiresIPhoneOS + UIViewControllerBasedStatusBarAppearance CFBundleExecutable @@ -24,9 +24,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.3.2 + 5.4.1 CFBundleVersion - 5.3.2 + 5.4.1 NSHumanReadableCopyright Copyright (c) 2018 - ROLI Ltd. NSHighResolutionCapable diff --git a/examples/DemoRunner/DemoRunner.jucer b/examples/DemoRunner/DemoRunner.jucer index f4729cd8..e014c34e 100644 --- a/examples/DemoRunner/DemoRunner.jucer +++ b/examples/DemoRunner/DemoRunner.jucer @@ -1,7 +1,7 @@ - @@ -30,8 +30,9 @@ + extraCompilerFlags="-Wall -Wno-missing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code" + customXcodeResourceFolders="../Audio ../BLOCKS ../DSP ../GUI ../Utilities" + microphonePermissionNeeded="1" cameraPermissionNeeded="1"> @@ -91,9 +92,10 @@ androidMinimumSDK="23" microphonePermissionNeeded="1" androidBluetoothNeeded="1" androidExternalReadNeeded="1" androidExternalWriteNeeded="1" androidEnableContentSharing="1" androidExtraAssetsFolder="../Assets" - smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1"> + smallIcon="YyqWd2" bigIcon="YyqWd2" cameraPermissionNeeded="1" + extraCompilerFlags="-Wall -Wno-missing-field-initializers -Wshadow-all -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"> - + @@ -206,7 +208,8 @@ - + @@ -258,7 +261,8 @@ useGlobalPath="0"/> - + diff --git a/examples/DemoRunner/JuceLibraryCode/AppConfig.h b/examples/DemoRunner/JuceLibraryCode/AppConfig.h index de08905c..29504625 100644 --- a/examples/DemoRunner/JuceLibraryCode/AppConfig.h +++ b/examples/DemoRunner/JuceLibraryCode/AppConfig.h @@ -74,6 +74,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -110,10 +114,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -198,12 +198,20 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif #ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES - //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 + #define JUCE_ALLOW_STATIC_NULL_VARIABLES 0 +#endif + +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + #define JUCE_STRICT_REFCOUNTEDPOINTER 1 #endif //============================================================================== @@ -247,6 +255,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -274,6 +286,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -291,6 +307,11 @@ #ifndef JUCE_USE_CAMERA #define JUCE_USE_CAMERA 1 #endif + +#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 +#endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/examples/DemoRunner/JuceLibraryCode/JuceHeader.h b/examples/DemoRunner/JuceLibraryCode/JuceHeader.h index e3f1c698..f7084709 100644 --- a/examples/DemoRunner/JuceLibraryCode/JuceHeader.h +++ b/examples/DemoRunner/JuceLibraryCode/JuceHeader.h @@ -46,7 +46,8 @@ namespace ProjectInfo { const char* const projectName = "DemoRunner"; - const char* const versionString = "5.3.2"; - const int versionNumber = 0x50302; + const char* const companyName = "ROLI Ltd."; + const char* const versionString = "5.4.1"; + const int versionNumber = 0x50401; } #endif diff --git a/examples/DemoRunner/Source/Demos/DemoPIPs2.cpp b/examples/DemoRunner/Source/Demos/DemoPIPs2.cpp index 98ed9383..51074e13 100644 --- a/examples/DemoRunner/Source/Demos/DemoPIPs2.cpp +++ b/examples/DemoRunner/Source/Demos/DemoPIPs2.cpp @@ -61,7 +61,7 @@ #include "../../../GUI/OpenGLDemo2D.h" #endif #include "../../../GUI/PropertiesDemo.h" -#if JUCE_MAC || JUCE_WINDOWS +#if ! JUCE_LINUX #include "../../../GUI/VideoDemo.h" #endif #include "../../../GUI/WebBrowserDemo.h" @@ -100,7 +100,7 @@ void registerDemos_Two() noexcept REGISTER_DEMO_WITH_FILENAME (OpenGLDemoClasses::OpenGLDemo, GUI, OpenGLDemo, true) #endif REGISTER_DEMO (PropertiesDemo, GUI, false) - #if JUCE_MAC || JUCE_WINDOWS + #if ! JUCE_LINUX REGISTER_DEMO (VideoDemo, GUI, true) #endif REGISTER_DEMO (WebBrowserDemo, GUI, true) diff --git a/examples/DemoRunner/Source/Demos/JUCEDemos.cpp b/examples/DemoRunner/Source/Demos/JUCEDemos.cpp index 08a01f47..e6092216 100644 --- a/examples/DemoRunner/Source/Demos/JUCEDemos.cpp +++ b/examples/DemoRunner/Source/Demos/JUCEDemos.cpp @@ -53,7 +53,7 @@ void JUCEDemos::registerDemo (std::function constructorCallback, c { #if JUCE_MAC auto f = File::getSpecialLocation (File::currentExecutableFile) - .getParentDirectory().getParentDirectory().getChildFile ("Resources").getChildFile (filePath); + .getParentDirectory().getParentDirectory().getChildFile ("Resources"); #else auto f = findExamplesDirectoryFromExecutable (File::getSpecialLocation (File::currentApplicationFile)); #endif @@ -85,8 +85,6 @@ File JUCEDemos::findExamplesDirectoryFromExecutable (File exec) } //============================================================================== -std::unique_ptr sharedAudioDeviceManager; - static String getCurrentDefaultAudioDeviceName (AudioDeviceManager& deviceManager, bool isInput) { auto* deviceType = deviceManager.getCurrentDeviceTypeObject(); @@ -129,8 +127,7 @@ AudioDeviceManager& getSharedAudioDeviceManager (int numInputChannels, int numOu if (sharedAudioDeviceManager->getCurrentAudioDevice() != nullptr) { - AudioDeviceManager::AudioDeviceSetup setup; - sharedAudioDeviceManager->getAudioDeviceSetup (setup); + auto setup = sharedAudioDeviceManager->getAudioDeviceSetup(); auto numInputs = jmax (numInputChannels, setup.inputChannels.countNumberOfSetBits()); auto numOutputs = jmax (numOutputChannels, setup.outputChannels.countNumberOfSetBits()); diff --git a/examples/DemoRunner/Source/Main.cpp b/examples/DemoRunner/Source/Main.cpp index ad770d7e..4d8a120e 100644 --- a/examples/DemoRunner/Source/Main.cpp +++ b/examples/DemoRunner/Source/Main.cpp @@ -73,6 +73,8 @@ }; #endif +std::unique_ptr sharedAudioDeviceManager; + //============================================================================== class DemoRunnerApplication : public JUCEApplication { @@ -80,6 +82,11 @@ public: //============================================================================== DemoRunnerApplication() {} + ~DemoRunnerApplication() + { + sharedAudioDeviceManager.reset(); + } + const String getApplicationName() override { return ProjectInfo::projectName; } const String getApplicationVersion() override { return ProjectInfo::versionString; } bool moreThanOneInstanceAllowed() override { return true; } diff --git a/examples/DemoRunner/Source/UI/MainComponent.cpp b/examples/DemoRunner/Source/UI/MainComponent.cpp index a87daa9c..32244a2e 100644 --- a/examples/DemoRunner/Source/UI/MainComponent.cpp +++ b/examples/DemoRunner/Source/UI/MainComponent.cpp @@ -306,7 +306,6 @@ MainComponent::MainComponent() MainComponent::~MainComponent() { contentComponent->clearCurrentDemo(); - sharedAudioDeviceManager.reset(); } //============================================================================== diff --git a/examples/GUI/AnimationAppDemo.h b/examples/GUI/AnimationAppDemo.h index bb93d765..5217a9bc 100644 --- a/examples/GUI/AnimationAppDemo.h +++ b/examples/GUI/AnimationAppDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AnimationAppDemo diff --git a/examples/GUI/AnimationDemo.h b/examples/GUI/AnimationDemo.h index 8aa97a07..337d1905 100644 --- a/examples/GUI/AnimationDemo.h +++ b/examples/GUI/AnimationDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AnimationDemo diff --git a/examples/GUI/BouncingBallWavetableDemo.h b/examples/GUI/BouncingBallWavetableDemo.h index dea79050..9c553019 100644 --- a/examples/GUI/BouncingBallWavetableDemo.h +++ b/examples/GUI/BouncingBallWavetableDemo.h @@ -35,6 +35,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: BouncingBallWavetableDemo diff --git a/examples/GUI/CameraDemo.h b/examples/GUI/CameraDemo.h index 6c1ef609..dab3911f 100644 --- a/examples/GUI/CameraDemo.h +++ b/examples/GUI/CameraDemo.h @@ -29,11 +29,12 @@ website: http://juce.com description: Showcases camera features. - dependencies: juce_core, juce_cryptography, juce_data_structures, juce_events, - juce_graphics, juce_gui_basics, juce_gui_extra, juce_video + dependencies: juce_audio_basics, juce_audio_devices, juce_core, juce_cryptography, + juce_data_structures, juce_events, juce_graphics, juce_gui_basics, + juce_gui_extra, juce_video exporters: xcode_mac, vs2017, androidstudio, xcode_iphone - moduleFlags: JUCE_USE_CAMERA=1 + moduleFlags: JUCE_USE_CAMERA=1, JUCE_STRICT_REFCOUNTEDPOINTER=1 type: Component mainClass: CameraDemo @@ -244,7 +245,7 @@ private: { #if JUCE_ANDROID SafePointer safeThis (this); - cameraDevice->onErrorOccurred = [safeThis] (const String& error) mutable { if (safeThis) safeThis->errorOccurred (error); }; + cameraDevice->onErrorOccurred = [safeThis] (const String& cameraError) mutable { if (safeThis) safeThis->errorOccurred (cameraError); }; #endif cameraPreviewComp.reset (cameraDevice->createViewerComponent()); addAndMakeVisible (cameraPreviewComp.get()); @@ -339,25 +340,25 @@ private: #if JUCE_ANDROID || JUCE_IOS auto imageFile = File::getSpecialLocation (File::tempDirectory).getNonexistentChildFile ("JuceCameraPhotoDemo", ".jpg"); - if (auto stream = std::unique_ptr (imageFile.createOutputStream())) + FileOutputStream stream (imageFile); + + if (stream.openedOk() + && JPEGImageFormat().writeImageToStream (image, stream)) { - if (JPEGImageFormat().writeImageToStream (image, *stream)) - { - URL url (imageFile); + URL url (imageFile); - snapshotButton .setEnabled (false); - recordMovieButton.setEnabled (false); - contentSharingPending = true; + snapshotButton .setEnabled (false); + recordMovieButton.setEnabled (false); + contentSharingPending = true; - SafePointer safeThis (this); + SafePointer safeThis (this); - juce::ContentSharer::getInstance()->shareFiles ({url}, - [safeThis] (bool success, const String&) mutable - { - if (safeThis) - safeThis->sharingFinished (success, true); - }); - } + juce::ContentSharer::getInstance()->shareFiles ({url}, + [safeThis] (bool success, const String&) mutable + { + if (safeThis) + safeThis->sharingFinished (success, true); + }); } #endif } diff --git a/examples/GUI/CodeEditorDemo.h b/examples/GUI/CodeEditorDemo.h index 23993860..3ecc11a7 100644 --- a/examples/GUI/CodeEditorDemo.h +++ b/examples/GUI/CodeEditorDemo.h @@ -31,7 +31,9 @@ dependencies: juce_core, juce_data_structures, juce_events, juce_graphics, juce_gui_basics, juce_gui_extra - exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + exporters: xcode_mac, vs2017, linux_make, xcode_iphone + + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 type: Component mainClass: CodeEditorDemo @@ -46,6 +48,10 @@ #include "../Assets/DemoUtilities.h" +#if JUCE_ANDROID + #error "This demo is not supported on Android!" +#endif + //============================================================================== class CodeEditorDemo : public Component, private FilenameComponentListener diff --git a/examples/GUI/ComponentDemo.h b/examples/GUI/ComponentDemo.h index 7944d2be..86eae90e 100644 --- a/examples/GUI/ComponentDemo.h +++ b/examples/GUI/ComponentDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: ComponentDemo @@ -90,7 +92,7 @@ public: // Adds the child light components and makes them visible // within this component. // (they currently rely on having a default constructor - // so they dont have to be individually initialised) + // so they don't have to be individually initialised) for (auto i = 0; i < numX * numY; ++i) addAndMakeVisible (toggleLights[i]); } diff --git a/examples/GUI/ComponentTransformsDemo.h b/examples/GUI/ComponentTransformsDemo.h index f038de79..327cab77 100644 --- a/examples/GUI/ComponentTransformsDemo.h +++ b/examples/GUI/ComponentTransformsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: ComponentTransformsDemo diff --git a/examples/GUI/DialogsDemo.h b/examples/GUI/DialogsDemo.h index 1c27591f..a6b1178b 100644 --- a/examples/GUI/DialogsDemo.h +++ b/examples/GUI/DialogsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: DialogsDemo @@ -159,6 +161,18 @@ public: } setSize (500, 500); + + RuntimePermissions::request (RuntimePermissions::readExternalStorage, + [] (bool granted) + { + if (! granted) + { + AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, + "Permissions warning", + "External storage access permission not granted, some files" + " may be inaccessible."); + } + }); } //============================================================================== @@ -221,7 +235,8 @@ private: { AlertWindow::showOkCancelBox (AlertWindow::QuestionIcon, "This is an ok/cancel AlertWindow", "And this is the AlertWindow's message. Blah blah blah blah blah blah blah blah blah blah blah blah blah.", - {}, {}, 0, ModalCallbackFunction::forComponent (alertBoxResultChosen, this)); + {}, {}, {}, + ModalCallbackFunction::forComponent (alertBoxResultChosen, this)); } else if (type == calloutBoxWindow) { @@ -321,9 +336,11 @@ private: fileToSave = fileToSave.getChildFile ("JUCE.png"); fileToSave.deleteFile(); - std::unique_ptr outStream (fileToSave.createOutputStream()); - std::unique_ptr inStream (createAssetInputStream ("juce_icon.png")); - outStream->writeFromInputStream (*inStream, -1); + FileOutputStream outStream (fileToSave); + + if (outStream.openedOk()) + if (auto inStream = std::unique_ptr (createAssetInputStream ("juce_icon.png"))) + outStream.writeFromInputStream (*inStream, -1); } fc.reset (new FileChooser ("Choose a file to save...", diff --git a/examples/GUI/FlexBoxDemo.h b/examples/GUI/FlexBoxDemo.h index 8c4bafcc..e1008496 100644 --- a/examples/GUI/FlexBoxDemo.h +++ b/examples/GUI/FlexBoxDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: FlexBoxDemo diff --git a/examples/GUI/FontsDemo.h b/examples/GUI/FontsDemo.h index ab909267..61f94a80 100644 --- a/examples/GUI/FontsDemo.h +++ b/examples/GUI/FontsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: FontsDemo @@ -106,7 +108,7 @@ public: verticalDividerBar.reset (new StretchableLayoutResizerBar (&verticalLayout, 1, true)); addAndMakeVisible (verticalDividerBar.get()); - // ..and pick a random font to select intially + // ..and pick a random font to select initially listBox.selectRow (Random::getSystemRandom().nextInt (fonts.size())); demoTextBox.setMultiLine (true); diff --git a/examples/GUI/GraphicsDemo.h b/examples/GUI/GraphicsDemo.h index a5403242..d2a98aa6 100644 --- a/examples/GUI/GraphicsDemo.h +++ b/examples/GUI/GraphicsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: GraphicsDemo diff --git a/examples/GUI/GridDemo.h b/examples/GUI/GridDemo.h index 8b6a9f7e..00fb2125 100644 --- a/examples/GUI/GridDemo.h +++ b/examples/GUI/GridDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: GridDemo diff --git a/examples/GUI/HelloWorldDemo.h b/examples/GUI/HelloWorldDemo.h index 39886227..3b7dfb03 100644 --- a/examples/GUI/HelloWorldDemo.h +++ b/examples/GUI/HelloWorldDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: HelloWorldDemo diff --git a/examples/GUI/ImagesDemo.h b/examples/GUI/ImagesDemo.h index 707e8a2a..0cbedac8 100644 --- a/examples/GUI/ImagesDemo.h +++ b/examples/GUI/ImagesDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: ImagesDemo diff --git a/examples/GUI/KeyMappingsDemo.h b/examples/GUI/KeyMappingsDemo.h index b2a786f0..9fae26fd 100644 --- a/examples/GUI/KeyMappingsDemo.h +++ b/examples/GUI/KeyMappingsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: KeyMappingsDemo diff --git a/examples/GUI/LookAndFeelDemo.h b/examples/GUI/LookAndFeelDemo.h index 752a242e..29205c16 100644 --- a/examples/GUI/LookAndFeelDemo.h +++ b/examples/GUI/LookAndFeelDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: LookAndFeelDemo diff --git a/examples/GUI/MDIDemo.h b/examples/GUI/MDIDemo.h index 35dd02f4..5c0edbce 100644 --- a/examples/GUI/MDIDemo.h +++ b/examples/GUI/MDIDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MDIDemo diff --git a/examples/GUI/MenusDemo.h b/examples/GUI/MenusDemo.h index 35bc0742..1300fc28 100644 --- a/examples/GUI/MenusDemo.h +++ b/examples/GUI/MenusDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MenusDemo diff --git a/examples/GUI/MultiTouchDemo.h b/examples/GUI/MultiTouchDemo.h index b6a5ecc1..40441dd7 100644 --- a/examples/GUI/MultiTouchDemo.h +++ b/examples/GUI/MultiTouchDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MultiTouchDemo diff --git a/examples/GUI/OpenGLAppDemo.h b/examples/GUI/OpenGLAppDemo.h index 10cc2a89..e9aa5127 100644 --- a/examples/GUI/OpenGLAppDemo.h +++ b/examples/GUI/OpenGLAppDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra, juce_opengl exporters: xcode_mac, vs2017, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OpenGLAppDemo @@ -234,7 +236,7 @@ private: { if (position.get() != nullptr) { - glContext.extensions.glVertexAttribPointer (position->attributeID, 3, GL_FLOAT, GL_FALSE, sizeof (Vertex), 0); + glContext.extensions.glVertexAttribPointer (position->attributeID, 3, GL_FLOAT, GL_FALSE, sizeof (Vertex), nullptr); glContext.extensions.glEnableVertexAttribArray (position->attributeID); } @@ -323,7 +325,7 @@ private: vertexBuffer->bind(); glAttributes.enable (glContext); - glDrawElements (GL_TRIANGLES, vertexBuffer->numIndices, GL_UNSIGNED_INT, 0); + glDrawElements (GL_TRIANGLES, vertexBuffer->numIndices, GL_UNSIGNED_INT, nullptr); glAttributes.disable (glContext); } } diff --git a/examples/GUI/OpenGLDemo.h b/examples/GUI/OpenGLDemo.h index 9c6a87da..d8f3bf58 100644 --- a/examples/GUI/OpenGLDemo.h +++ b/examples/GUI/OpenGLDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra, juce_opengl exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OpenGLDemoClasses::OpenGLDemo @@ -79,7 +81,7 @@ struct OpenGLDemoClasses { if (position.get() != nullptr) { - openGLContext.extensions.glVertexAttribPointer (position->attributeID, 3, GL_FLOAT, GL_FALSE, sizeof (Vertex), 0); + openGLContext.extensions.glVertexAttribPointer (position->attributeID, 3, GL_FLOAT, GL_FALSE, sizeof (Vertex), nullptr); openGLContext.extensions.glEnableVertexAttribArray (position->attributeID); } @@ -171,7 +173,7 @@ struct OpenGLDemoClasses vertexBuffer->bind(); attributes.enable (openGLContext); - glDrawElements (GL_TRIANGLES, vertexBuffer->numIndices, GL_UNSIGNED_INT, 0); + glDrawElements (GL_TRIANGLES, vertexBuffer->numIndices, GL_UNSIGNED_INT, nullptr); attributes.disable (openGLContext); } } @@ -280,6 +282,11 @@ struct OpenGLDemoClasses g.setColour (Colours::black); g.setFont (40); + + const MessageManagerLock mml (ThreadPoolJob::getCurrentThreadPoolJob()); + if (! mml.lockWasGained()) + return false; + g.drawFittedText (String (Time::getCurrentTime().getMilliseconds()), image.getBounds(), Justification::centred, 1); } diff --git a/examples/GUI/OpenGLDemo2D.h b/examples/GUI/OpenGLDemo2D.h index 6452ecb6..cdfd3acd 100644 --- a/examples/GUI/OpenGLDemo2D.h +++ b/examples/GUI/OpenGLDemo2D.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra, juce_opengl exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OpenGLDemo2D diff --git a/examples/GUI/PropertiesDemo.h b/examples/GUI/PropertiesDemo.h index 01728864..439887d0 100644 --- a/examples/GUI/PropertiesDemo.h +++ b/examples/GUI/PropertiesDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: PropertiesDemo diff --git a/examples/GUI/VideoDemo.h b/examples/GUI/VideoDemo.h index a05e4c9c..d091e0ca 100644 --- a/examples/GUI/VideoDemo.h +++ b/examples/GUI/VideoDemo.h @@ -31,7 +31,9 @@ dependencies: juce_core, juce_data_structures, juce_events, juce_graphics, juce_gui_basics, juce_gui_extra, juce_video - exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + exporters: xcode_mac, vs2017, androidstudio, xcode_iphone + + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 type: Component mainClass: VideoDemo @@ -46,6 +48,7 @@ #include "../Assets/DemoUtilities.h" +#if JUCE_MAC || JUCE_WINDOWS //============================================================================== // so that we can easily have two video windows each with a file browser, wrap this up as a class.. class MovieComponentWithFileBrowser : public Component, @@ -54,6 +57,7 @@ class MovieComponentWithFileBrowser : public Component, { public: MovieComponentWithFileBrowser() + : videoComp (true) { addAndMakeVisible (videoComp); @@ -110,8 +114,16 @@ private: void filenameComponentChanged (FilenameComponent*) override { + auto url = URL (fileChooser.getCurrentFile()); + // this is called when the user changes the filename in the file chooser box - auto result = videoComp.load (fileChooser.getCurrentFile()); + auto result = videoComp.load (url); + videoLoadingFinished (url, result); + } + + void videoLoadingFinished (const URL& url, Result result) + { + ignoreUnused (url); if (result.wasOk()) { @@ -209,6 +221,7 @@ public: } private: + std::unique_ptr fileChooser; WildcardFileFilter moviesWildcardFilter { "*", "*", "Movies File Filter" }; TimeSliceThread directoryThread { "Movie File Scanner Thread" }; DirectoryContentsList movieList { &moviesWildcardFilter, directoryThread }; @@ -231,5 +244,464 @@ private: void fileDoubleClicked (const File&) override {} void browserRootChanged (const File&) override {} + void selectVideoFile() + { + fileChooser.reset (new FileChooser ("Choose a file to open...", File::getCurrentWorkingDirectory(), + "*", false)); + + fileChooser->launchAsync (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles, + [this] (const FileChooser& chooser) + { + String chosen; + auto results = chooser.getURLResults(); + + // TODO: support non local files too + if (results.size() > 0) + movieCompLeft.setFile (results[0].getLocalFile()); + }); + } + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VideoDemo) }; +#elif JUCE_IOS || JUCE_ANDROID +//============================================================================== +class VideoDemo : public Component, + private Timer +{ +public: + VideoDemo() + : videoCompWithNativeControls (true), + videoCompNoNativeControls (false) + { + loadLocalButton .onClick = [this] { selectVideoFile(); }; + loadUrlButton .onClick = [this] { showVideoUrlPrompt(); }; + seekToStartButton.onClick = [this] { seekVideoToStart(); }; + playButton .onClick = [this] { playVideo(); }; + pauseButton .onClick = [this] { pauseVideo(); }; + unloadButton .onClick = [this] { unloadVideoFile(); }; + + volumeLabel .setColour (Label::textColourId, Colours::white); + currentPositionLabel.setColour (Label::textColourId, Colours::white); + + volumeLabel .setJustificationType (Justification::right); + currentPositionLabel.setJustificationType (Justification::right); + + volumeSlider .setRange (0.0, 1.0); + positionSlider.setRange (0.0, 1.0); + + volumeSlider .setSliderSnapsToMousePosition (false); + positionSlider.setSliderSnapsToMousePosition (false); + + volumeSlider.setSkewFactor (1.5); + volumeSlider.setValue (1.0, dontSendNotification); + #if JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + curVideoComp->onGlobalMediaVolumeChanged = [this]() { volumeSlider.setValue (curVideoComp->getAudioVolume(), dontSendNotification); }; + #endif + + volumeSlider .onValueChange = [this]() { curVideoComp->setAudioVolume ((float) volumeSlider.getValue()); }; + positionSlider.onValueChange = [this]() { seekVideoToNormalisedPosition (positionSlider.getValue()); }; + + positionSlider.onDragStart = [this]() + { + positionSliderDragging = true; + wasPlayingBeforeDragStart = curVideoComp->isPlaying(); + + if (wasPlayingBeforeDragStart) + curVideoComp->stop(); + }; + + positionSlider.onDragEnd = [this]() + { + if (wasPlayingBeforeDragStart) + curVideoComp->play(); + + wasPlayingBeforeDragStart = false; + + // Ensure the slider does not temporarily jump back on consecutive timer callback. + Timer::callAfterDelay (500, [this]() { positionSliderDragging = false; }); + }; + + playSpeedComboBox.addItem ("25%", 25); + playSpeedComboBox.addItem ("50%", 50); + playSpeedComboBox.addItem ("100%", 100); + playSpeedComboBox.addItem ("200%", 200); + playSpeedComboBox.addItem ("400%", 400); + playSpeedComboBox.setSelectedId (100, dontSendNotification); + playSpeedComboBox.onChange = [this]() { curVideoComp->setPlaySpeed (playSpeedComboBox.getSelectedId() / 100.0); }; + + setTransportControlsEnabled (false); + + addAndMakeVisible (loadLocalButton); + addAndMakeVisible (loadUrlButton); + addAndMakeVisible (volumeLabel); + addAndMakeVisible (volumeSlider); + addChildComponent (videoCompWithNativeControls); + addChildComponent (videoCompNoNativeControls); + addAndMakeVisible (positionSlider); + addAndMakeVisible (currentPositionLabel); + + addAndMakeVisible (playSpeedComboBox); + addAndMakeVisible (seekToStartButton); + addAndMakeVisible (playButton); + addAndMakeVisible (unloadButton); + addChildComponent (pauseButton); + + setSize (500, 500); + + RuntimePermissions::request (RuntimePermissions::readExternalStorage, + [] (bool granted) + { + if (! granted) + { + AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, + "Permissions warning", + "External storage access permission not granted, some files" + " may be inaccessible."); + } + }); + + setPortraitOrientationEnabled (true); + } + + ~VideoDemo() + { + curVideoComp->onPlaybackStarted = nullptr; + curVideoComp->onPlaybackStopped = nullptr; + curVideoComp->onErrorOccurred = nullptr; + curVideoComp->onGlobalMediaVolumeChanged = nullptr; + + setPortraitOrientationEnabled (false); + } + + void paint (Graphics& g) override + { + g.fillAll (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::windowBackground)); + } + + void resized() override + { + auto area = getLocalBounds(); + + int marginSize = 5; + int buttonHeight = 20; + + area.reduce (0, marginSize); + + auto topArea = area.removeFromTop (buttonHeight); + loadLocalButton.setBounds (topArea.removeFromLeft (topArea.getWidth() / 6)); + loadUrlButton.setBounds (topArea.removeFromLeft (loadLocalButton.getWidth())); + volumeLabel.setBounds (topArea.removeFromLeft (loadLocalButton.getWidth())); + volumeSlider.setBounds (topArea.reduced (10, 0)); + + auto transportArea = area.removeFromBottom (buttonHeight); + auto positionArea = area.removeFromBottom (buttonHeight).reduced (marginSize, 0); + + playSpeedComboBox.setBounds (transportArea.removeFromLeft (jmax (50, transportArea.getWidth() / 5))); + + auto controlWidth = transportArea.getWidth() / 3; + + currentPositionLabel.setBounds (positionArea.removeFromRight (jmax (150, controlWidth))); + positionSlider.setBounds (positionArea); + + seekToStartButton.setBounds (transportArea.removeFromLeft (controlWidth)); + playButton .setBounds (transportArea.removeFromLeft (controlWidth)); + unloadButton .setBounds (transportArea.removeFromLeft (controlWidth)); + pauseButton.setBounds (playButton.getBounds()); + + area.removeFromTop (marginSize); + area.removeFromBottom (marginSize); + + videoCompWithNativeControls.setBounds (area); + videoCompNoNativeControls.setBounds (area); + + if (positionSlider.getWidth() > 0) + positionSlider.setMouseDragSensitivity (positionSlider.getWidth()); + } + +private: + TextButton loadLocalButton { "Load Local" }; + TextButton loadUrlButton { "Load URL" }; + Label volumeLabel { "volumeLabel", "Vol:" }; + Slider volumeSlider { Slider::LinearHorizontal, Slider::NoTextBox }; + + VideoComponent videoCompWithNativeControls; + VideoComponent videoCompNoNativeControls; + #if JUCE_IOS || JUCE_MAC + VideoComponent* curVideoComp = &videoCompWithNativeControls; + #else + VideoComponent* curVideoComp = &videoCompNoNativeControls; + #endif + bool isFirstSetup = true; + + Slider positionSlider { Slider::LinearHorizontal, Slider::NoTextBox }; + bool positionSliderDragging = false; + bool wasPlayingBeforeDragStart = false; + + Label currentPositionLabel { "currentPositionLabel", "-:- / -:-" }; + + ComboBox playSpeedComboBox { "playSpeedComboBox" }; + TextButton seekToStartButton { "|<" }; + TextButton playButton { "Play" }; + TextButton pauseButton { "Pause" }; + TextButton unloadButton { "Unload" }; + + std::unique_ptr fileChooser; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VideoDemo) + JUCE_DECLARE_WEAK_REFERENCEABLE (VideoDemo) + + //============================================================================== + void setPortraitOrientationEnabled (bool shouldBeEnabled) + { + auto allowedOrientations = Desktop::getInstance().getOrientationsEnabled(); + + if (shouldBeEnabled) + allowedOrientations |= Desktop::upright; + else + allowedOrientations &= ~Desktop::upright; + + Desktop::getInstance().setOrientationsEnabled (allowedOrientations); + } + + void setTransportControlsEnabled (bool shouldBeEnabled) + { + positionSlider .setEnabled (shouldBeEnabled); + playSpeedComboBox.setEnabled (shouldBeEnabled); + seekToStartButton.setEnabled (shouldBeEnabled); + playButton .setEnabled (shouldBeEnabled); + unloadButton .setEnabled (shouldBeEnabled); + pauseButton .setEnabled (shouldBeEnabled); + } + + void selectVideoFile() + { + fileChooser.reset (new FileChooser ("Choose a video file to open...", File::getCurrentWorkingDirectory(), + "*", true)); + + fileChooser->launchAsync (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles, + [this] (const FileChooser& chooser) + { + auto results = chooser.getURLResults(); + + if (results.size() > 0) + loadVideo (results[0]); + }); + } + + void loadVideo (const URL& url) + { + unloadVideoFile(); + + #if JUCE_IOS || JUCE_MAC + askIfUseNativeControls (url); + #else + loadUrl (url); + setupVideoComp (false); + #endif + } + + void askIfUseNativeControls (const URL& url) + { + auto* aw = new AlertWindow ("Choose viewer type", {}, AlertWindow::NoIcon); + + aw->addButton ("Yes", 1, KeyPress (KeyPress::returnKey)); + aw->addButton ("No", 0, KeyPress (KeyPress::escapeKey)); + aw->addTextBlock ("Do you want to use the viewer with native controls?"); + + auto callback = ModalCallbackFunction::forComponent (videoViewerTypeChosen, this, url); + aw->enterModalState (true, callback, true); + } + + static void videoViewerTypeChosen (int result, VideoDemo* owner, URL url) + { + if (owner != nullptr) + { + owner->setupVideoComp (result != 0); + owner->loadUrl (url); + } + } + + void setupVideoComp (bool useNativeViewerWithNativeControls) + { + auto* oldVideoComp = curVideoComp; + + if (useNativeViewerWithNativeControls) + curVideoComp = &videoCompWithNativeControls; + else + curVideoComp = &videoCompNoNativeControls; + + if (isFirstSetup || oldVideoComp != curVideoComp) + { + oldVideoComp->onPlaybackStarted = nullptr; + oldVideoComp->onPlaybackStopped = nullptr; + oldVideoComp->onErrorOccurred = nullptr; + oldVideoComp->setVisible (false); + + curVideoComp->onPlaybackStarted = [this]() { processPlaybackStarted(); }; + curVideoComp->onPlaybackStopped = [this]() { processPlaybackPaused(); }; + curVideoComp->onErrorOccurred = [this](const String& errorMessage) { errorOccurred (errorMessage); }; + curVideoComp->setVisible (true); + + #if JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + oldVideoComp->onGlobalMediaVolumeChanged = nullptr; + curVideoComp->onGlobalMediaVolumeChanged = [this]() { volumeSlider.setValue (curVideoComp->getAudioVolume(), dontSendNotification); }; + #endif + } + + isFirstSetup = false; + } + + void loadUrl (const URL& url) + { + curVideoComp->loadAsync (url, [this] (const URL& u, Result r) { videoLoadingFinished (u, r); }); + } + + void showVideoUrlPrompt() + { + auto* aw = new AlertWindow ("Enter URL for video to load", {}, AlertWindow::NoIcon); + + aw->addButton ("OK", 1, KeyPress (KeyPress::returnKey)); + aw->addButton ("Cancel", 0, KeyPress (KeyPress::escapeKey)); + aw->addTextEditor ("videoUrlTextEditor", "https://www.rmp-streaming.com/media/bbb-360p.mp4"); + + auto callback = ModalCallbackFunction::forComponent (videoUrlPromptClosed, this, Component::SafePointer (aw)); + aw->enterModalState (true, callback, true); + } + + static void videoUrlPromptClosed (int result, VideoDemo* owner, Component::SafePointer aw) + { + if (result != 0 && owner != nullptr && aw != nullptr) + { + auto url = aw->getTextEditorContents ("videoUrlTextEditor"); + + if (url.isNotEmpty()) + owner->loadVideo (url); + } + } + + void videoLoadingFinished (const URL& url, Result result) + { + ignoreUnused (url); + + if (result.wasOk()) + { + resized(); // update to reflect the video's aspect ratio + + setTransportControlsEnabled (true); + + currentPositionLabel.setText (getPositionString (0.0, curVideoComp->getVideoDuration()), sendNotification); + positionSlider.setValue (0.0, dontSendNotification); + playSpeedComboBox.setSelectedId (100, dontSendNotification); + } + else + { + AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, + "Couldn't load the file!", + result.getErrorMessage()); + } + } + + static String getPositionString (double playPositionSeconds, double durationSeconds) + { + auto positionMs = static_cast (1000 * playPositionSeconds); + int posMinutes = positionMs / 60000; + int posSeconds = (positionMs % 60000) / 1000; + int posMillis = positionMs % 1000; + + auto totalMs = static_cast (1000 * durationSeconds); + int totMinutes = totalMs / 60000; + int totSeconds = (totalMs % 60000) / 1000; + int totMillis = totalMs % 1000; + + return String::formatted ("%02d:%02d:%03d / %02d:%02d:%03d", + posMinutes, posSeconds, posMillis, + totMinutes, totSeconds, totMillis); + } + + void updatePositionSliderAndLabel() + { + auto position = curVideoComp->getPlayPosition(); + auto duration = curVideoComp->getVideoDuration(); + + currentPositionLabel.setText (getPositionString (position, duration), sendNotification); + + if (! positionSliderDragging) + positionSlider.setValue (duration != 0 ? (position / duration) : 0.0, dontSendNotification); + } + + void seekVideoToStart() + { + seekVideoToNormalisedPosition (0.0); + } + + void seekVideoToNormalisedPosition (double normalisedPos) + { + normalisedPos = jlimit (0.0, 1.0, normalisedPos); + + auto duration = curVideoComp->getVideoDuration(); + auto newPos = jlimit (0.0, duration, duration * normalisedPos); + + curVideoComp->setPlayPosition (newPos); + currentPositionLabel.setText (getPositionString (newPos, curVideoComp->getVideoDuration()), sendNotification); + positionSlider.setValue (normalisedPos, dontSendNotification); + } + + void playVideo() + { + curVideoComp->play(); + } + + void processPlaybackStarted() + { + playButton.setVisible (false); + pauseButton.setVisible (true); + + startTimer (20); + } + + void pauseVideo() + { + curVideoComp->stop(); + } + + void processPlaybackPaused() + { + // On seeking to a new pos, the playback may be temporarily paused. + if (positionSliderDragging) + return; + + pauseButton.setVisible (false); + playButton.setVisible (true); + } + + void errorOccurred (const String& errorMessage) + { + AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon, + "An error has occurred", + errorMessage + ", video will be unloaded."); + + unloadVideoFile(); + } + + void unloadVideoFile() + { + curVideoComp->closeVideo(); + + setTransportControlsEnabled (false); + stopTimer(); + + pauseButton.setVisible (false); + playButton.setVisible (true); + + currentPositionLabel.setText ("-:- / -:-", sendNotification); + positionSlider.setValue (0.0, dontSendNotification); + } + + void timerCallback() override + { + updatePositionSliderAndLabel(); + } +}; +#elif JUCE_LINUX + #error "This demo is not supported on Linux!" +#endif diff --git a/examples/GUI/WebBrowserDemo.h b/examples/GUI/WebBrowserDemo.h index 41a1ca1e..cc70a483 100644 --- a/examples/GUI/WebBrowserDemo.h +++ b/examples/GUI/WebBrowserDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: WebBrowserDemo diff --git a/examples/GUI/WidgetsDemo.h b/examples/GUI/WidgetsDemo.h index 70461e8a..a3dfe9db 100644 --- a/examples/GUI/WidgetsDemo.h +++ b/examples/GUI/WidgetsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: WidgetsDemo @@ -290,7 +292,7 @@ struct ButtonsPage : public Component over.setStrokeThickness (4.0f); auto* db = addToList (new DrawableButton (String (i + 5) + " points", DrawableButton::ImageAboveTextLabel)); - db->setImages (&normal, &over, 0); + db->setImages (&normal, &over, nullptr); db->setClickingTogglesState (true); db->setRadioGroupId (23456); @@ -389,7 +391,7 @@ struct ButtonsPage : public Component { // create an image-on-button-shape button from the same drawables.. auto db = addToList (new DrawableButton ("Button 3", DrawableButton::ImageOnButtonBackground)); - db->setImages (&normal, 0, 0); + db->setImages (&normal, nullptr, nullptr); db->setBounds (260, 160, 110, 25); db->setTooltip ("This is a DrawableButton on a standard button background"); db->onClick = popupMessageCallback; @@ -634,7 +636,7 @@ private: { auto* drawable = new DrawableImage(); drawable->setImage (getImageFromAssets ("juce_icon.png")); - return new ToolbarButton (itemId, "juce!", drawable, 0); + return new ToolbarButton (itemId, "juce!", drawable, nullptr); } case customComboBox: return new CustomToolbarComboBox (itemId); default: break; @@ -669,7 +671,7 @@ private: } auto* image = iconsFromZipFile[iconNames.indexOf (filename)]->createCopy(); - return new ToolbarButton (itemId, text, image, 0); + return new ToolbarButton (itemId, text, image, nullptr); } // Demonstrates how to put a custom component into a toolbar - this one contains @@ -1028,7 +1030,7 @@ private: // this loads the embedded database XML file into memory void loadData() { - demoData.reset (XmlDocument::parse (loadEntireAssetIntoString ("demo table data.xml"))); + demoData = parseXML (loadEntireAssetIntoString ("demo table data.xml")); dataList = demoData->getChildByName ("DATA"); columnList = demoData->getChildByName ("COLUMNS"); diff --git a/examples/GUI/WindowsDemo.h b/examples/GUI/WindowsDemo.h index e21d2537..3bd58bf0 100644 --- a/examples/GUI/WindowsDemo.h +++ b/examples/GUI/WindowsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: WindowsDemo @@ -178,7 +180,7 @@ public: void mouseDrag (const MouseEvent& e) override { // as there's no titlebar we have to manage the dragging ourselves - dragger.dragComponent (this, e, 0); + dragger.dragComponent (this, e, nullptr); } void paint (Graphics& g) override diff --git a/examples/Plugins/AUv3SynthPluginDemo.h b/examples/Plugins/AUv3SynthPluginDemo.h index 822c2d47..9d0dbae8 100644 --- a/examples/Plugins/AUv3SynthPluginDemo.h +++ b/examples/Plugins/AUv3SynthPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: AUv3SynthProcessor diff --git a/examples/Plugins/ArpeggiatorPluginDemo.h b/examples/Plugins/ArpeggiatorPluginDemo.h index 3765353b..9ad8996f 100644 --- a/examples/Plugins/ArpeggiatorPluginDemo.h +++ b/examples/Plugins/ArpeggiatorPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: Arpeggiator diff --git a/examples/Plugins/AudioPluginDemo.h b/examples/Plugins/AudioPluginDemo.h index 6d01d6ba..5d78c587 100644 --- a/examples/Plugins/AudioPluginDemo.h +++ b/examples/Plugins/AudioPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, xcode_iphone, androidstudio + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: JuceDemoPluginAudioProcessor @@ -172,15 +174,15 @@ class JuceDemoPluginAudioProcessor : public AudioProcessor public: //============================================================================== JuceDemoPluginAudioProcessor() - : AudioProcessor (getBusesProperties()) + : AudioProcessor (getBusesProperties()), + state (*this, nullptr, "state", + { std::make_unique ("gain", "Gain", NormalisableRange (0.0f, 1.0f), 0.9f), + std::make_unique ("delay", "Delay Feedback", NormalisableRange (0.0f, 1.0f), 0.5f) }) { lastPosInfo.resetToDefault(); - // This creates our parameters. We'll keep some raw pointers to them in this class, - // so that we can easily access them later, but the base class will take care of - // deleting them for us. - addParameter (gainParam = new AudioParameterFloat ("gain", "Gain", 0.0f, 1.0f, 0.9f)); - addParameter (delayParam = new AudioParameterFloat ("delay", "Delay Feedback", 0.0f, 1.0f, 0.5f)); + // Add a sub-tree to store the state of our UI + state.state.addChild ({ "uiState", { { "width", 400 }, { "height", 200 } }, {} }, -1, nullptr); initialiseSynth(); } @@ -282,48 +284,21 @@ public: //============================================================================== void getStateInformation (MemoryBlock& destData) override { - // You should use this method to store your parameters in the memory block. - // Here's an example of how you can use XML to make it easy and more robust: - - // Create an outer XML element.. - XmlElement xml ("MYPLUGINSETTINGS"); - - // add some attributes to it.. - xml.setAttribute ("uiWidth", lastUIWidth); - xml.setAttribute ("uiHeight", lastUIHeight); + // Store an xml representation of our state. + std::unique_ptr xmlState (state.copyState().createXml()); - // Store the values of all our parameters, using their param ID as the XML attribute - for (auto* param : getParameters()) - if (auto* p = dynamic_cast (param)) - xml.setAttribute (p->paramID, p->getValue()); - - // then use this helper function to stuff it into the binary blob and return it.. - copyXmlToBinary (xml, destData); + if (xmlState.get() != nullptr) + copyXmlToBinary (*xmlState, destData); } void setStateInformation (const void* data, int sizeInBytes) override { - // You should use this method to restore your parameters from this memory block, - // whose contents will have been created by the getStateInformation() call. - - // This getXmlFromBinary() helper function retrieves our XML from the binary blob.. + // Restore our plug-in's state from the xml representation stored in the above + // method. std::unique_ptr xmlState (getXmlFromBinary (data, sizeInBytes)); if (xmlState.get() != nullptr) - { - // make sure that it's actually our type of XML object.. - if (xmlState->hasTagName ("MYPLUGINSETTINGS")) - { - // ok, now pull out our last window size.. - lastUIWidth = jmax (xmlState->getIntAttribute ("uiWidth", lastUIWidth), 400); - lastUIHeight = jmax (xmlState->getIntAttribute ("uiHeight", lastUIHeight), 200); - - // Now reload our parameters.. - for (auto* param : getParameters()) - if (auto* p = dynamic_cast (param)) - p->setValue ((float) xmlState->getDoubleAttribute (p->paramID, p->getValue())); - } - } + state.replaceState (ValueTree::fromXml (*xmlState)); } //============================================================================== @@ -348,14 +323,8 @@ public: // callback - the UI component will read this and display it. AudioPlayHead::CurrentPositionInfo lastPosInfo; - // these are used to persist the UI's size - the values are stored along with the - // filter's other parameters, and the UI component will update them when it gets - // resized. - int lastUIWidth = 400, lastUIHeight = 200; - - // Our parameters - AudioParameterFloat* gainParam = nullptr; - AudioParameterFloat* delayParam = nullptr; + // Our plug-in's current state + AudioProcessorValueTreeState state; // Current track colour and name TrackProperties trackProperties; @@ -364,27 +333,28 @@ private: //============================================================================== /** This is the editor component that our filter will display. */ class JuceDemoPluginAudioProcessorEditor : public AudioProcessorEditor, - private Timer + private Timer, + private Value::Listener { public: JuceDemoPluginAudioProcessorEditor (JuceDemoPluginAudioProcessor& owner) : AudioProcessorEditor (owner), - midiKeyboard (owner.keyboardState, MidiKeyboardComponent::horizontalKeyboard) + midiKeyboard (owner.keyboardState, MidiKeyboardComponent::horizontalKeyboard), + gainAttachment (owner.state, "gain", gainSlider), + delayAttachment (owner.state, "delay", delaySlider) { // add some sliders.. - gainSlider.reset (new ParameterSlider (*owner.gainParam)); - addAndMakeVisible (gainSlider.get()); - gainSlider->setSliderStyle (Slider::Rotary); + addAndMakeVisible (gainSlider); + gainSlider.setSliderStyle (Slider::Rotary); - delaySlider.reset (new ParameterSlider (*owner.delayParam)); - addAndMakeVisible (delaySlider.get()); - delaySlider->setSliderStyle (Slider::Rotary); + addAndMakeVisible (delaySlider); + delaySlider.setSliderStyle (Slider::Rotary); // add some labels for the sliders.. - gainLabel.attachToComponent (gainSlider.get(), false); + gainLabel.attachToComponent (&gainSlider, false); gainLabel.setFont (Font (11.0f)); - delayLabel.attachToComponent (delaySlider.get(), false); + delayLabel.attachToComponent (&delaySlider, false); delayLabel.setFont (Font (11.0f)); // add the midi keyboard component.. @@ -397,9 +367,14 @@ private: // set resize limits for this plug-in setResizeLimits (400, 200, 1024, 700); + lastUIWidth .referTo (owner.state.state.getChildWithName ("uiState").getPropertyAsValue ("width", nullptr)); + lastUIHeight.referTo (owner.state.state.getChildWithName ("uiState").getPropertyAsValue ("height", nullptr)); + // set our component's initial size to be the last one that was stored in the filter's settings - setSize (owner.lastUIWidth, - owner.lastUIHeight); + setSize (lastUIWidth.getValue(), lastUIHeight.getValue()); + + lastUIWidth. addListener (this); + lastUIHeight.addListener (this); updateTrackProperties(); @@ -427,11 +402,11 @@ private: r.removeFromTop (20); auto sliderArea = r.removeFromTop (60); - gainSlider->setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth() / 2))); - delaySlider->setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth()))); + gainSlider.setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth() / 2))); + delaySlider.setBounds (sliderArea.removeFromLeft (jmin (180, sliderArea.getWidth()))); - getProcessor().lastUIWidth = getWidth(); - getProcessor().lastUIHeight = getHeight(); + lastUIWidth = getWidth(); + lastUIHeight = getHeight(); } void timerCallback() override @@ -444,6 +419,17 @@ private: midiKeyboard.setVisible (! controllerIsAvailable); } + int getControlParameterIndex (Component& control) override + { + if (&control == &gainSlider) + return 0; + + if (&control == &delaySlider) + return 1; + + return -1; + } + void updateTrackProperties() { auto trackColour = getProcessor().trackProperties.colour; @@ -455,53 +441,21 @@ private: } private: - //============================================================================== - // This is a handy slider subclass that controls an AudioProcessorParameter - // (may move this class into the library itself at some point in the future..) - class ParameterSlider : public Slider, - private Timer - { - public: - ParameterSlider (AudioProcessorParameter& p) - : Slider (p.getName (256)), param (p) - { - setRange (0.0, 1.0, 0.0); - startTimerHz (30); - updateSliderPos(); - } - - void valueChanged() override { param.setValueNotifyingHost ((float) Slider::getValue()); } - - void timerCallback() override { updateSliderPos(); } - - void startedDragging() override { param.beginChangeGesture(); } - void stoppedDragging() override { param.endChangeGesture(); } - - double getValueFromText (const String& text) override { return param.getValueForText (text); } - String getTextFromValue (double value) override { return param.getText ((float) value, 1024); } - - void updateSliderPos() - { - auto newValue = param.getValue(); - - if (newValue != (float) Slider::getValue() && ! isMouseButtonDown()) - Slider::setValue (newValue, NotificationType::dontSendNotification); - } - - AudioProcessorParameter& param; - - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParameterSlider) - }; - MidiKeyboardComponent midiKeyboard; Label timecodeDisplayLabel, gainLabel { {}, "Throughput level:" }, delayLabel { {}, "Delay:" }; - std::unique_ptr gainSlider, delaySlider; + Slider gainSlider, delaySlider; + AudioProcessorValueTreeState::SliderAttachment gainAttachment, delayAttachment; Colour backgroundColour; + // these are used to persist the UI's size - the values are stored along with the + // filter's other parameters, and the UI component will update them when it gets + // resized. + Value lastUIWidth, lastUIHeight; + //============================================================================== JuceDemoPluginAudioProcessor& getProcessor() const { @@ -558,12 +512,20 @@ private: timecodeDisplayLabel.setText (displayText.toString(), dontSendNotification); } + + // called when the stored window size changes + void valueChanged (Value&) override + { + setSize (lastUIWidth.getValue(), lastUIHeight.getValue()); + } }; //============================================================================== template void process (AudioBuffer& buffer, MidiBuffer& midiMessages, AudioBuffer& delayBuffer) { + auto gainParamValue = state.getParameter ("gain") ->getValue(); + auto delayParamValue = state.getParameter ("delay")->getValue(); auto numSamples = buffer.getNumSamples(); // In case we have more outputs than inputs, we'll clear any output @@ -580,29 +542,28 @@ private: synth.renderNextBlock (buffer, midiMessages, 0, numSamples); // Apply our delay effect to the new output.. - applyDelay (buffer, delayBuffer); + applyDelay (buffer, delayBuffer, delayParamValue); - applyGain (buffer, delayBuffer); // apply our gain-change to the outgoing data.. + // Apply our gain change to the outgoing data.. + applyGain (buffer, delayBuffer, gainParamValue); // Now ask the host for the current time so we can store it to be displayed later... updateCurrentTimeInfoFromHost(); } template - void applyGain (AudioBuffer& buffer, AudioBuffer& delayBuffer) + void applyGain (AudioBuffer& buffer, AudioBuffer& delayBuffer, float gainLevel) { ignoreUnused (delayBuffer); - auto gainLevel = gainParam->get(); for (auto channel = 0; channel < getTotalNumOutputChannels(); ++channel) buffer.applyGain (channel, 0, buffer.getNumSamples(), gainLevel); } template - void applyDelay (AudioBuffer& buffer, AudioBuffer& delayBuffer) + void applyDelay (AudioBuffer& buffer, AudioBuffer& delayBuffer, float delayLevel) { auto numSamples = buffer.getNumSamples(); - auto delayLevel = delayParam->get(); auto delayPos = 0; diff --git a/examples/Plugins/DSPModulePluginDemo.h b/examples/Plugins/DSPModulePluginDemo.h index ff2cd7ce..5282b779 100644 --- a/examples/Plugins/DSPModulePluginDemo.h +++ b/examples/Plugins/DSPModulePluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: DspModulePluginDemoAudioProcessor diff --git a/examples/Plugins/GainPluginDemo.h b/examples/Plugins/GainPluginDemo.h index f3eadbda..4d620e49 100644 --- a/examples/Plugins/GainPluginDemo.h +++ b/examples/Plugins/GainPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: GainProcessor diff --git a/examples/Plugins/InterAppAudioEffectPluginDemo.h b/examples/Plugins/InterAppAudioEffectPluginDemo.h index 429bff10..46e8af12 100644 --- a/examples/Plugins/InterAppAudioEffectPluginDemo.h +++ b/examples/Plugins/InterAppAudioEffectPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: IAAEffectProcessor @@ -150,17 +152,9 @@ public: : AudioProcessor (BusesProperties() .withInput ("Input", AudioChannelSet::stereo(), true) .withOutput ("Output", AudioChannelSet::stereo(), true)), - parameters (*this, nullptr) + parameters (*this, nullptr, "InterAppAudioEffect", + { std::make_unique ("gain", "Gain", NormalisableRange (0.0f, 1.0f), 1.0f / 3.14f) }) { - parameters.createAndAddParameter ("gain", - "Gain", - {}, - NormalisableRange (0.0f, 1.0f), - (float) (1.0 / 3.14), - nullptr, - nullptr); - - parameters.state = ValueTree (Identifier ("InterAppAudioEffect")); } ~IAAEffectProcessor() {} diff --git a/examples/Plugins/MultiOutSynthPluginDemo.h b/examples/Plugins/MultiOutSynthPluginDemo.h index db8a8a39..09668ae1 100644 --- a/examples/Plugins/MultiOutSynthPluginDemo.h +++ b/examples/Plugins/MultiOutSynthPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: MultiOutSynth diff --git a/examples/Plugins/NoiseGatePluginDemo.h b/examples/Plugins/NoiseGatePluginDemo.h index ea7f26ab..6925d0fc 100644 --- a/examples/Plugins/NoiseGatePluginDemo.h +++ b/examples/Plugins/NoiseGatePluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: NoiseGate diff --git a/examples/Plugins/SamplerPluginDemo.h b/examples/Plugins/SamplerPluginDemo.h index 4d677d87..ceca60b2 100644 --- a/examples/Plugins/SamplerPluginDemo.h +++ b/examples/Plugins/SamplerPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017 + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: SamplerAudioProcessor @@ -163,16 +165,14 @@ public: source.read (&data, 0, length + 4, 0, true, true); } - double getSampleRate() const { return sourceSampleRate; } - - int getLength() const { return length; } - - const AudioSampleBuffer& getBuffer() const { return data; } + double getSampleRate() const { return sourceSampleRate; } + int getLength() const { return length; } + const AudioBuffer& getBuffer() const { return data; } private: double sourceSampleRate; int length; - AudioSampleBuffer data; + AudioBuffer data; }; //============================================================================== diff --git a/examples/Plugins/SurroundPluginDemo.h b/examples/Plugins/SurroundPluginDemo.h index 91ed5bea..f98af7d4 100644 --- a/examples/Plugins/SurroundPluginDemo.h +++ b/examples/Plugins/SurroundPluginDemo.h @@ -35,6 +35,8 @@ juce_events, juce_graphics, juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: AudioProcessor mainClass: SurroundProcessor diff --git a/examples/Utilities/AnalyticsCollectionDemo.h b/examples/Utilities/AnalyticsCollectionDemo.h index 88837810..8cc8af70 100644 --- a/examples/Utilities/AnalyticsCollectionDemo.h +++ b/examples/Utilities/AnalyticsCollectionDemo.h @@ -33,6 +33,8 @@ juce_graphics, juce_gui_basics exporters: xcode_mac, vs2017, linux_make, xcode_iphone, androidstudio + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: AnalyticsCollectionDemo diff --git a/examples/Utilities/Box2DDemo.h b/examples/Utilities/Box2DDemo.h index 362543d2..2104b5f4 100644 --- a/examples/Utilities/Box2DDemo.h +++ b/examples/Utilities/Box2DDemo.h @@ -33,6 +33,8 @@ juce_graphics, juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: Box2DDemo diff --git a/examples/Utilities/ChildProcessDemo.h b/examples/Utilities/ChildProcessDemo.h index 50cc3796..fc70d4df 100644 --- a/examples/Utilities/ChildProcessDemo.h +++ b/examples/Utilities/ChildProcessDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Console mainClass: ChildProcessDemo diff --git a/examples/Utilities/CryptographyDemo.h b/examples/Utilities/CryptographyDemo.h index 3d5d9810..ed6c25ee 100644 --- a/examples/Utilities/CryptographyDemo.h +++ b/examples/Utilities/CryptographyDemo.h @@ -33,6 +33,8 @@ juce_graphics, juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: CryptographyDemo diff --git a/examples/Utilities/InAppPurchasesDemo.h b/examples/Utilities/InAppPurchasesDemo.h index 68f2783c..f726acbe 100644 --- a/examples/Utilities/InAppPurchasesDemo.h +++ b/examples/Utilities/InAppPurchasesDemo.h @@ -37,6 +37,8 @@ juce_product_unlocking exporters: xcode_mac, xcode_iphone, androidstudio + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: InAppPurchasesDemo diff --git a/examples/Utilities/JavaScriptDemo.h b/examples/Utilities/JavaScriptDemo.h index 47a1f6f1..e7682e39 100644 --- a/examples/Utilities/JavaScriptDemo.h +++ b/examples/Utilities/JavaScriptDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: JavaScriptDemo diff --git a/examples/Utilities/LiveConstantDemo.h b/examples/Utilities/LiveConstantDemo.h index 627b2244..df9e3737 100644 --- a/examples/Utilities/LiveConstantDemo.h +++ b/examples/Utilities/LiveConstantDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: LiveConstantDemo diff --git a/examples/Utilities/MultithreadingDemo.h b/examples/Utilities/MultithreadingDemo.h index 0d7bf6e4..3a335005 100644 --- a/examples/Utilities/MultithreadingDemo.h +++ b/examples/Utilities/MultithreadingDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: MultithreadingDemo @@ -120,7 +122,7 @@ private: parentWidth = 50.0f, parentHeight = 50.0f; Colour colour; - Thread::ThreadID threadId = 0; + Thread::ThreadID threadId = {}; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BouncingBallComp) }; diff --git a/examples/Utilities/NetworkingDemo.h b/examples/Utilities/NetworkingDemo.h index 8cd1fca1..83001104 100644 --- a/examples/Utilities/NetworkingDemo.h +++ b/examples/Utilities/NetworkingDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: NetworkingDemo @@ -101,15 +103,16 @@ public: StringPairArray responseHeaders; int statusCode = 0; - std::unique_ptr stream (url.createInputStream (false, nullptr, nullptr, {}, - 10000, // timeout in millisecs - &responseHeaders, &statusCode)); - if (stream.get() != nullptr) + if (auto stream = std::unique_ptr (url.createInputStream (false, nullptr, nullptr, {}, + 10000, // timeout in millisecs + &responseHeaders, &statusCode))) + { return (statusCode != 0 ? "Status code: " + String (statusCode) + newLine : String()) + "Response headers: " + newLine + responseHeaders.getDescription() + newLine + "----------------------------------------------------" + newLine + stream->readEntireStreamAsString(); + } if (statusCode != 0) return "Failed to connect, status code = " + String (statusCode); diff --git a/examples/Utilities/OSCDemo.h b/examples/Utilities/OSCDemo.h index d29cb552..827d8aa4 100644 --- a/examples/Utilities/OSCDemo.h +++ b/examples/Utilities/OSCDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_osc exporters: xcode_mac, vs2017, linux_make + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: OSCDemo @@ -412,7 +414,7 @@ private: { AlertWindow::showMessageBoxAsync (AlertWindow::WarningIcon, "Unknown error", - "An unknown error occured while trying to disconnect from UDP port.", + "An unknown error occurred while trying to disconnect from UDP port.", "OK"); } diff --git a/examples/Utilities/PushNotificationsDemo.h b/examples/Utilities/PushNotificationsDemo.h index 20cc2569..e035db54 100644 --- a/examples/Utilities/PushNotificationsDemo.h +++ b/examples/Utilities/PushNotificationsDemo.h @@ -36,6 +36,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, xcode_iphone, androidstudio + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: PushNotificationsDemo diff --git a/examples/Utilities/SystemInfoDemo.h b/examples/Utilities/SystemInfoDemo.h index 7c6dfb88..82307b08 100644 --- a/examples/Utilities/SystemInfoDemo.h +++ b/examples/Utilities/SystemInfoDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: SystemInfoDemo @@ -49,11 +51,9 @@ //============================================================================== static String getMacAddressList() { - Array macAddresses; - MACAddress::findAllAddresses (macAddresses); - String addressList; - for (auto& addr : macAddresses) + + for (auto& addr : MACAddress::getAllAddresses()) addressList << addr.toString() << newLine; return addressList; @@ -73,12 +73,9 @@ static String getFileSystemRoots() static String getIPAddressList() { - Array addresses; - IPAddress::findAllAddresses (addresses); - String addressList; - for (auto& addr : addresses) + for (auto& addr : IPAddress::getAllAddresses()) addressList << " " << addr.toString() << newLine; return addressList; @@ -147,21 +144,31 @@ static String getAllSystemInfo() systemInfo << "Number of logical CPUs: " << SystemStats::getNumCpus() << newLine << "Number of physical CPUs: " << SystemStats::getNumPhysicalCpus() << newLine - << "Memory size: " << SystemStats::getMemorySizeInMegabytes() << " MB" << newLine - << "CPU vendor: " << SystemStats::getCpuVendor() << newLine - << "CPU model: " << SystemStats::getCpuModel() << newLine - << "CPU speed: " << SystemStats::getCpuSpeedInMegaherz() << " MHz" << newLine - << "CPU has MMX: " << (SystemStats::hasMMX() ? "yes" : "no") << newLine - << "CPU has SSE: " << (SystemStats::hasSSE() ? "yes" : "no") << newLine - << "CPU has SSE2: " << (SystemStats::hasSSE2() ? "yes" : "no") << newLine - << "CPU has SSE3: " << (SystemStats::hasSSE3() ? "yes" : "no") << newLine - << "CPU has SSSE3: " << (SystemStats::hasSSSE3() ? "yes" : "no") << newLine - << "CPU has SSE4.1: " << (SystemStats::hasSSE41() ? "yes" : "no") << newLine - << "CPU has SSE4.2: " << (SystemStats::hasSSE42() ? "yes" : "no") << newLine - << "CPU has 3DNOW: " << (SystemStats::has3DNow() ? "yes" : "no") << newLine - << "CPU has AVX: " << (SystemStats::hasAVX() ? "yes" : "no") << newLine - << "CPU has AVX2: " << (SystemStats::hasAVX2() ? "yes" : "no") << newLine - << "CPU has Neon: " << (SystemStats::hasNeon() ? "yes" : "no") << newLine + << "Memory size: " << SystemStats::getMemorySizeInMegabytes() << " MB" << newLine + << "CPU vendor: " << SystemStats::getCpuVendor() << newLine + << "CPU model: " << SystemStats::getCpuModel() << newLine + << "CPU speed: " << SystemStats::getCpuSpeedInMegahertz() << " MHz" << newLine + << "CPU has MMX: " << (SystemStats::hasMMX() ? "yes" : "no") << newLine + << "CPU has SSE: " << (SystemStats::hasSSE() ? "yes" : "no") << newLine + << "CPU has SSE2: " << (SystemStats::hasSSE2() ? "yes" : "no") << newLine + << "CPU has SSE3: " << (SystemStats::hasSSE3() ? "yes" : "no") << newLine + << "CPU has SSSE3: " << (SystemStats::hasSSSE3() ? "yes" : "no") << newLine + << "CPU has SSE4.1: " << (SystemStats::hasSSE41() ? "yes" : "no") << newLine + << "CPU has SSE4.2: " << (SystemStats::hasSSE42() ? "yes" : "no") << newLine + << "CPU has 3DNOW: " << (SystemStats::has3DNow() ? "yes" : "no") << newLine + << "CPU has AVX: " << (SystemStats::hasAVX() ? "yes" : "no") << newLine + << "CPU has AVX2: " << (SystemStats::hasAVX2() ? "yes" : "no") << newLine + << "CPU has AVX512F: " << (SystemStats::hasAVX512F() ? "yes" : "no") << newLine + << "CPU has AVX512BW: " << (SystemStats::hasAVX512BW() ? "yes" : "no") << newLine + << "CPU has AVX512CD: " << (SystemStats::hasAVX512CD() ? "yes" : "no") << newLine + << "CPU has AVX512DQ: " << (SystemStats::hasAVX512DQ() ? "yes" : "no") << newLine + << "CPU has AVX512ER: " << (SystemStats::hasAVX512ER() ? "yes" : "no") << newLine + << "CPU has AVX512IFMA: " << (SystemStats::hasAVX512IFMA() ? "yes" : "no") << newLine + << "CPU has AVX512PF: " << (SystemStats::hasAVX512PF() ? "yes" : "no") << newLine + << "CPU has AVX512VBMI: " << (SystemStats::hasAVX512VBMI() ? "yes" : "no") << newLine + << "CPU has AVX512VL: " << (SystemStats::hasAVX512VL() ? "yes" : "no") << newLine + << "CPU has AVX512VPOPCNTDQ: " << (SystemStats::hasAVX512VPOPCNTDQ() ? "yes" : "no") << newLine + << "CPU has Neon: " << (SystemStats::hasNeon() ? "yes" : "no") << newLine << newLine; systemInfo diff --git a/examples/Utilities/TimersAndEventsDemo.h b/examples/Utilities/TimersAndEventsDemo.h index 4f34e78e..0707708f 100644 --- a/examples/Utilities/TimersAndEventsDemo.h +++ b/examples/Utilities/TimersAndEventsDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: TimersAndEventsDemo diff --git a/examples/Utilities/UnitTestsDemo.h b/examples/Utilities/UnitTestsDemo.h index 066d0c40..4c2f9c3d 100644 --- a/examples/Utilities/UnitTestsDemo.h +++ b/examples/Utilities/UnitTestsDemo.h @@ -36,6 +36,7 @@ juce_opengl, juce_osc, juce_product_unlocking, juce_video exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 defines: JUCE_UNIT_TESTS=1 type: Component diff --git a/examples/Utilities/ValueTreesDemo.h b/examples/Utilities/ValueTreesDemo.h index 7143bbaa..97455087 100644 --- a/examples/Utilities/ValueTreesDemo.h +++ b/examples/Utilities/ValueTreesDemo.h @@ -33,6 +33,8 @@ juce_gui_basics exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: ValueTreesDemo diff --git a/examples/Utilities/XMLandJSONDemo.h b/examples/Utilities/XMLandJSONDemo.h index f22235f9..8c5f7a34 100644 --- a/examples/Utilities/XMLandJSONDemo.h +++ b/examples/Utilities/XMLandJSONDemo.h @@ -33,6 +33,8 @@ juce_gui_basics, juce_gui_extra exporters: xcode_mac, vs2017, linux_make, androidstudio, xcode_iphone + moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 + type: Component mainClass: XMLandJSONDemo diff --git a/extras/AudioPerformanceTest/AudioPerformanceTest.jucer b/extras/AudioPerformanceTest/AudioPerformanceTest.jucer index 862fe1f2..e27f832a 100644 --- a/extras/AudioPerformanceTest/AudioPerformanceTest.jucer +++ b/extras/AudioPerformanceTest/AudioPerformanceTest.jucer @@ -1,7 +1,7 @@ diff --git a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt index f688f097..e7c72285 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt @@ -37,6 +37,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" @@ -300,6 +302,91 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" @@ -311,7 +398,6 @@ add_library( ${BINARY_NAME} "../../../../../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_VSTCommon.h" - "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" @@ -325,6 +411,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" "../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" @@ -343,6 +431,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" + "../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" "../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" "../../../../../modules/juce_audio_processors/juce_audio_processors.mm" "../../../../../modules/juce_audio_processors/juce_audio_processors.h" @@ -384,6 +473,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_AbstractFifo.h" "../../../../../modules/juce_core/containers/juce_Array.h" "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" + "../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" + "../../../../../modules/juce_core/containers/juce_ArrayBase.h" "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" @@ -393,9 +484,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_ListenerList.h" "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" "../../../../../modules/juce_core/containers/juce_NamedValueSet.h" + "../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" "../../../../../modules/juce_core/containers/juce_OwnedArray.h" "../../../../../modules/juce_core/containers/juce_PropertySet.cpp" "../../../../../modules/juce_core/containers/juce_PropertySet.h" + "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" "../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" "../../../../../modules/juce_core/containers/juce_SortedSet.h" @@ -442,6 +535,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_ByteOrder.h" "../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" "../../../../../modules/juce_core/memory/juce_HeapBlock.h" + "../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_Memory.h" "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" @@ -452,6 +546,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" "../../../../../modules/juce_core/misc/juce_Result.cpp" "../../../../../modules/juce_core/misc/juce_Result.h" "../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" @@ -482,6 +578,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" "../../../../../modules/juce_core/native/juce_mac_Threads.mm" "../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" + "../../../../../modules/juce_core/native/juce_posix_IPAddress.h" "../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" "../../../../../modules/juce_core/native/juce_posix_SharedCode.h" "../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" @@ -647,6 +744,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" "../../../../../modules/juce_events/messages/juce_ApplicationBase.h" "../../../../../modules/juce_events/messages/juce_CallbackMessage.h" @@ -876,10 +975,12 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_basics/components/juce_Component.h" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.h" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" "../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" @@ -1140,6 +1241,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" + "../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" "../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" "../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" @@ -1205,6 +1307,8 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/ju set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1468,6 +1572,91 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1479,7 +1668,6 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1493,6 +1681,8 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/proces set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1511,6 +1701,7 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/utilit set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1552,6 +1743,8 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Ab set_source_files_properties("../../../../../modules/juce_core/containers/juce_AbstractFifo.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_Array.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ElementComparator.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1561,9 +1754,11 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Li set_source_files_properties("../../../../../modules/juce_core/containers/juce_ListenerList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_SortedSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1610,6 +1805,7 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Atomic set_source_files_properties("../../../../../modules/juce_core/memory/juce_ByteOrder.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeapBlock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Memory.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1620,6 +1816,8 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Scoped set_source_files_properties("../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Singleton.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_WeakReference.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1650,6 +1848,7 @@ set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_St set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_Threads.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_IPAddress.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_SharedCode.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1815,6 +2014,8 @@ set_source_files_properties("../../../../../modules/juce_events/interprocess/juc set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_CallbackMessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2044,10 +2245,12 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/components/j set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Component.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2308,6 +2511,7 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/documents/juc set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) diff --git a/extras/AudioPerformanceTest/Builds/Android/app/build.gradle b/extras/AudioPerformanceTest/Builds/Android/app/build.gradle index a0ce9c2d..a9566718 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/build.gradle +++ b/extras/AudioPerformanceTest/Builds/Android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.0" externalNativeBuild { cmake { path "CMakeLists.txt" diff --git a/extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml b/extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml index af39d367..447fd462 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml +++ b/extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ - diff --git a/extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java b/extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java index 2ca9c6d9..3a402c1d 100644 --- a/extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java +++ b/extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java @@ -31,6 +31,9 @@ import android.content.res.Configuration; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.hardware.camera2.*; +import android.database.ContentObserver; +import android.media.session.*; +import android.media.MediaMetadata; import android.net.http.SslError; import android.net.Uri; import android.os.Bundle; @@ -94,8 +97,11 @@ public class AudioPerformanceTest extends Activity //============================================================================== public boolean isPermissionDeclaredInManifest (int permissionID) { - String permissionToCheck = getAndroidPermissionName(permissionID); + return isPermissionDeclaredInManifest (getAndroidPermissionName (permissionID)); + } + public boolean isPermissionDeclaredInManifest (String permissionToCheck) + { try { PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); @@ -1488,7 +1494,9 @@ public class AudioPerformanceTest extends Activity public final String getClipboardContent() { ClipboardManager clipboard = (ClipboardManager) getSystemService (CLIPBOARD_SERVICE); - return clipboard.getText().toString(); + + CharSequence content = clipboard.getText(); + return content != null ? content.toString() : new String(); } public final void setClipboardContent (String newText) @@ -1997,11 +2005,13 @@ public class AudioPerformanceTest extends Activity implements SurfaceHolder.Callback { private long nativeContext = 0; + private boolean forVideo; - NativeSurfaceView (Context context, long nativeContextPtr) + NativeSurfaceView (Context context, long nativeContextPtr, boolean createdForVideo) { super (context); nativeContext = nativeContextPtr; + forVideo = createdForVideo; } public Surface getNativeSurface() @@ -2019,38 +2029,51 @@ public class AudioPerformanceTest extends Activity @Override public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { - surfaceChangedNative (nativeContext, holder, format, width, height); + if (forVideo) + surfaceChangedNativeVideo (nativeContext, holder, format, width, height); + else + surfaceChangedNative (nativeContext, holder, format, width, height); } @Override public void surfaceCreated (SurfaceHolder holder) { - surfaceCreatedNative (nativeContext, holder); + if (forVideo) + surfaceCreatedNativeVideo (nativeContext, holder); + else + surfaceCreatedNative (nativeContext, holder); } @Override public void surfaceDestroyed (SurfaceHolder holder) { - surfaceDestroyedNative (nativeContext, holder); + if (forVideo) + surfaceDestroyedNativeVideo (nativeContext, holder); + else + surfaceDestroyedNative (nativeContext, holder); } @Override protected void dispatchDraw (Canvas canvas) { super.dispatchDraw (canvas); - dispatchDrawNative (nativeContext, canvas); + + if (forVideo) + dispatchDrawNativeVideo (nativeContext, canvas); + else + dispatchDrawNative (nativeContext, canvas); } //============================================================================== @Override - protected void onAttachedToWindow () + protected void onAttachedToWindow() { super.onAttachedToWindow(); getHolder().addCallback (this); } @Override - protected void onDetachedFromWindow () + protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getHolder().removeCallback (this); @@ -2062,11 +2085,17 @@ public class AudioPerformanceTest extends Activity private native void surfaceDestroyedNative (long nativeContextptr, SurfaceHolder holder); private native void surfaceChangedNative (long nativeContextptr, SurfaceHolder holder, int format, int width, int height); + + private native void dispatchDrawNativeVideo (long nativeContextPtr, Canvas canvas); + private native void surfaceCreatedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceDestroyedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceChangedNativeVideo (long nativeContextptr, SurfaceHolder holder, + int format, int width, int height); } - public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr) + public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr, boolean forVideo) { - return new NativeSurfaceView (this, nativeSurfacePtr); + return new NativeSurfaceView (this, nativeSurfacePtr, forVideo); } //============================================================================== @@ -2826,6 +2855,151 @@ public class AudioPerformanceTest extends Activity } + //============================================================================== + public class MediaControllerCallback extends MediaController.Callback + { + private native void mediaControllerAudioInfoChanged (long host, MediaController.PlaybackInfo info); + private native void mediaControllerMetadataChanged (long host, MediaMetadata metadata); + private native void mediaControllerPlaybackStateChanged (long host, PlaybackState state); + private native void mediaControllerSessionDestroyed (long host); + + MediaControllerCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onAudioInfoChanged (MediaController.PlaybackInfo info) + { + mediaControllerAudioInfoChanged (host, info); + } + + @Override + public void onMetadataChanged (MediaMetadata metadata) + { + mediaControllerMetadataChanged (host, metadata); + } + + @Override + public void onPlaybackStateChanged (PlaybackState state) + { + mediaControllerPlaybackStateChanged (host, state); + } + + @Override + public void onQueueChanged (List queue) {} + + @Override + public void onSessionDestroyed() + { + mediaControllerSessionDestroyed (host); + } + + private long host; + } + + //============================================================================== + public class MediaSessionCallback extends MediaSession.Callback + { + private native void mediaSessionPause (long host); + private native void mediaSessionPlay (long host); + private native void mediaSessionPlayFromMediaId (long host, String mediaId, Bundle extras); + private native void mediaSessionSeekTo (long host, long pos); + private native void mediaSessionStop (long host); + + + MediaSessionCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onPause() + { + mediaSessionPause (host); + } + + @Override + public void onPlay() + { + mediaSessionPlay (host); + } + + @Override + public void onPlayFromMediaId (String mediaId, Bundle extras) + { + mediaSessionPlayFromMediaId (host, mediaId, extras); + } + + @Override + public void onSeekTo (long pos) + { + mediaSessionSeekTo (host, pos); + } + + @Override + public void onStop() + { + mediaSessionStop (host); + } + + @Override + public void onFastForward() {} + + @Override + public boolean onMediaButtonEvent (Intent mediaButtonIntent) + { + return true; + } + + @Override + public void onRewind() {} + + @Override + public void onSkipToNext() {} + + @Override + public void onSkipToPrevious() {} + + @Override + public void onSkipToQueueItem (long id) {} + + private long host; + } + + //============================================================================== + public class SystemVolumeObserver extends ContentObserver + { + private native void mediaSessionSystemVolumeChanged (long host); + + SystemVolumeObserver (Activity activityToUse, long hostToUse) + { + super (null); + + activity = activityToUse; + host = hostToUse; + } + + void setEnabled (boolean shouldBeEnabled) + { + if (shouldBeEnabled) + activity.getApplicationContext().getContentResolver().registerContentObserver (android.provider.Settings.System.CONTENT_URI, true, this); + else + activity.getApplicationContext().getContentResolver().unregisterContentObserver (this); + } + + @Override + public void onChange (boolean selfChange, Uri uri) + { + if (uri.toString().startsWith ("content://settings/system/volume_music")) + mediaSessionSystemVolumeChanged (host); + } + + private Activity activity; + private long host; + } + + //============================================================================== public static final String getLocaleValue (boolean isRegion) { diff --git a/extras/AudioPerformanceTest/Builds/Android/build.gradle b/extras/AudioPerformanceTest/Builds/Android/build.gradle index 651d63db..647f509e 100644 --- a/extras/AudioPerformanceTest/Builds/Android/build.gradle +++ b/extras/AudioPerformanceTest/Builds/Android/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.1.3' } } diff --git a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile index c2ffab79..114cbfc4 100644 --- a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile +++ b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile @@ -35,13 +35,13 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - JUCE_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 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_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 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := AudioPerformanceTest JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -56,13 +56,13 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := AudioPerformanceTest JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -fvisibility=hidden -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -fvisibility=hidden -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -81,11 +81,13 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \ $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl @echo Linking "AudioPerformanceTest - App" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -152,10 +154,6 @@ $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o: ../../JuceLibraryCode/include_ @echo "Compiling include_juce_gui_extra.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 - clean: @echo Cleaning AudioPerformanceTest $(V_AT)$(CLEANCMD) diff --git a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj index 7f38502a..90094bdb 100644 --- a/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj +++ b/extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj @@ -5,125 +5,480 @@ }; objectVersion = 46; objects = { - - E1282ABB96DD2E7FA7F63559 = {isa = PBXBuildFile; fileRef = 614F2084407B35D62101F69F; }; - 8A0F71A4EEC7FE694352DD94 = {isa = PBXBuildFile; fileRef = 9EADBF913B7A454B6BE93A4A; }; - 30BE30F31D1AAED9FC893AA5 = {isa = PBXBuildFile; fileRef = 18C1CCE5684F9FA0478F27AD; }; - 9B19A6655FCC8086134C8656 = {isa = PBXBuildFile; fileRef = 1DA5C6A474916745AFEC6DA5; }; - 0319B40AD2FD96007FFA928B = {isa = PBXBuildFile; fileRef = 453777CEB7099A5D61901D13; }; - 5AFD011031C266431687C922 = {isa = PBXBuildFile; fileRef = 9F28F179EF6B90EB9F4DBEE9; }; - 5923A711C0020F2CDD598714 = {isa = PBXBuildFile; fileRef = 12C680C68A15B9A590264B18; }; - 3825E8984D8F6AA00DDC6BAC = {isa = PBXBuildFile; fileRef = EE758AD71415EB31BD3E82F3; }; - 9031C69145EE085B60904363 = {isa = PBXBuildFile; fileRef = 43775DC3D9F7917846EA5327; }; - F8099BB77DC0D01DCCC6AFB9 = {isa = PBXBuildFile; fileRef = 0A58FDDF6FB9253F51939A52; }; - 537E779F6008999191B2920A = {isa = PBXBuildFile; fileRef = 3058871156B921B9E5946C4F; }; - DA21A6E7A18555DCFC63B07C = {isa = PBXBuildFile; fileRef = FAAB4EAE4A57B642D3B9EC23; }; - 07451DA87757F9EF80E31BE8 = {isa = PBXBuildFile; fileRef = 0564535EEA7E4462926EA0C9; }; - 2BAED5B831BB736E77A718AE = {isa = PBXBuildFile; fileRef = 89B3243200BAA6BD72905DBB; }; - 01C9BC9A0A0F54B693CDA31A = {isa = PBXBuildFile; fileRef = 322D3066DCD98A8D0542236A; }; - 48ADBEF873A610909D727C97 = {isa = PBXBuildFile; fileRef = 9E05B63699A307598B66F829; }; - D145903EE5DBFD1BD98423F3 = {isa = PBXBuildFile; fileRef = 18E39207A0F5F9B8BC7EE94F; }; - C7B090C29D8DE4D2503204B1 = {isa = PBXBuildFile; fileRef = BAFDA8DE51E7A69E477439EB; }; - FFAF94080FF4A9995B33151E = {isa = PBXBuildFile; fileRef = 24425FFB0BCC7E54CADAA013; }; - D2CECF93178A1738DA02CA4A = {isa = PBXBuildFile; fileRef = EDD11E2CC0B18196ADA0C87B; }; - 7E870C094BAE67D7EB149F1C = {isa = PBXBuildFile; fileRef = 248FAA119A4FC24C522165EF; }; - 65FC2E13B65977FED63BDDE3 = {isa = PBXBuildFile; fileRef = 7E951216B6138C76653B1460; }; - 699954AF666E644C7B688381 = {isa = PBXBuildFile; fileRef = 0BC3C6A4F4FC1DD30DD8E17C; }; - 9D47995A33BBA693ED435B31 = {isa = PBXBuildFile; fileRef = B06AE97C86D27E7FEBCB4631; }; - 0564535EEA7E4462926EA0C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 0A58FDDF6FB9253F51939A52 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 0BC3C6A4F4FC1DD30DD8E17C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 12C680C68A15B9A590264B18 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 18C1CCE5684F9FA0478F27AD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 18E39207A0F5F9B8BC7EE94F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - 1DA5C6A474916745AFEC6DA5 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - 24425FFB0BCC7E54CADAA013 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 248FAA119A4FC24C522165EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 253CCF9514FE705169600047 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 26FE7BE182FBB9E7228A082D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 3058871156B921B9E5946C4F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - 322D3066DCD98A8D0542236A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 429C7CD0E88FC64E9A72514D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; - 43775DC3D9F7917846EA5327 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - 453777CEB7099A5D61901D13 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 50FEDCEF881CC99174035167 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 614F2084407B35D62101F69F = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPerformanceTest.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 77AA9722BAADD4108205501A = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - 7E951216B6138C76653B1460 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 81017699F857F5BBFCA6E055 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - 89B3243200BAA6BD72905DBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 920FF34D4A00A5AD433EE5F4 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 9516A19EE58DED8326DD0306 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 9E05B63699A307598B66F829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - 9EADBF913B7A454B6BE93A4A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 9F28F179EF6B90EB9F4DBEE9 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - A3B86BB7483BC5697B58E417 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - A65BB8D452A2A4859FA41F8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - AD134CACB71BED6A22743C18 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - B06AE97C86D27E7FEBCB4631 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - BAFDA8DE51E7A69E477439EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - C8EE61FDD1F06817A014B881 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - CBBC98B7CD350A07F5145FB4 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - D03C9A859FB4DBA8268D7FBA = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - E575FE2AD2F19FA6AEB536C2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - EDD11E2CC0B18196ADA0C87B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - EE758AD71415EB31BD3E82F3 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - FAAB4EAE4A57B642D3B9EC23 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 9F54D12C977843F8FEFCF041 = {isa = PBXGroup; children = ( - 0564535EEA7E4462926EA0C9, - 429C7CD0E88FC64E9A72514D, ); name = Source; sourceTree = ""; }; - 4E2981EC48DBFD725AD8E626 = {isa = PBXGroup; children = ( - 9F54D12C977843F8FEFCF041, ); name = AudioPerformanceTest; sourceTree = ""; }; - 90489A23F0DBAD5F1550CE20 = {isa = PBXGroup; children = ( - 920FF34D4A00A5AD433EE5F4, - A3B86BB7483BC5697B58E417, - 253CCF9514FE705169600047, - D03C9A859FB4DBA8268D7FBA, - CBBC98B7CD350A07F5145FB4, - E575FE2AD2F19FA6AEB536C2, - 77AA9722BAADD4108205501A, - 81017699F857F5BBFCA6E055, - C8EE61FDD1F06817A014B881, - 50FEDCEF881CC99174035167, - AD134CACB71BED6A22743C18, ); name = "JUCE Modules"; sourceTree = ""; }; - 0B8996A5E2671A4628476CFB = {isa = PBXGroup; children = ( - A65BB8D452A2A4859FA41F8B, - 89B3243200BAA6BD72905DBB, - 322D3066DCD98A8D0542236A, - 9E05B63699A307598B66F829, - 18E39207A0F5F9B8BC7EE94F, - BAFDA8DE51E7A69E477439EB, - 24425FFB0BCC7E54CADAA013, - EDD11E2CC0B18196ADA0C87B, - 248FAA119A4FC24C522165EF, - 7E951216B6138C76653B1460, - 0BC3C6A4F4FC1DD30DD8E17C, - B06AE97C86D27E7FEBCB4631, - 26FE7BE182FBB9E7228A082D, ); name = "JUCE Library Code"; sourceTree = ""; }; - ED3C55ACC14D6DE2BC3B8A1D = {isa = PBXGroup; children = ( - 9516A19EE58DED8326DD0306, - FAAB4EAE4A57B642D3B9EC23, ); name = Resources; sourceTree = ""; }; - 02A7F817D49F2BC1D70F4242 = {isa = PBXGroup; children = ( - 9EADBF913B7A454B6BE93A4A, - 18C1CCE5684F9FA0478F27AD, - 1DA5C6A474916745AFEC6DA5, - 453777CEB7099A5D61901D13, - 9F28F179EF6B90EB9F4DBEE9, - 12C680C68A15B9A590264B18, - EE758AD71415EB31BD3E82F3, - 43775DC3D9F7917846EA5327, - 0A58FDDF6FB9253F51939A52, - 3058871156B921B9E5946C4F, ); name = Frameworks; sourceTree = ""; }; - 1DFEAF972822E305E013CC06 = {isa = PBXGroup; children = ( - 614F2084407B35D62101F69F, ); name = Products; sourceTree = ""; }; - 3BA1BA0CAFE969E99950C06B = {isa = PBXGroup; children = ( - 4E2981EC48DBFD725AD8E626, - 90489A23F0DBAD5F1550CE20, - 0B8996A5E2671A4628476CFB, - ED3C55ACC14D6DE2BC3B8A1D, - 02A7F817D49F2BC1D70F4242, - 1DFEAF972822E305E013CC06, ); name = Source; sourceTree = ""; }; - 19B7C16D592FB25D09022191 = {isa = XCBuildConfiguration; buildSettings = { + E1282ABB96DD2E7FA7F63559 = { + isa = PBXBuildFile; + fileRef = 614F2084407B35D62101F69F; + }; + 8A0F71A4EEC7FE694352DD94 = { + isa = PBXBuildFile; + fileRef = 9EADBF913B7A454B6BE93A4A; + }; + 30BE30F31D1AAED9FC893AA5 = { + isa = PBXBuildFile; + fileRef = 18C1CCE5684F9FA0478F27AD; + }; + 9B19A6655FCC8086134C8656 = { + isa = PBXBuildFile; + fileRef = 1DA5C6A474916745AFEC6DA5; + }; + 0319B40AD2FD96007FFA928B = { + isa = PBXBuildFile; + fileRef = 453777CEB7099A5D61901D13; + }; + 5AFD011031C266431687C922 = { + isa = PBXBuildFile; + fileRef = 9F28F179EF6B90EB9F4DBEE9; + }; + 5923A711C0020F2CDD598714 = { + isa = PBXBuildFile; + fileRef = 12C680C68A15B9A590264B18; + }; + 3825E8984D8F6AA00DDC6BAC = { + isa = PBXBuildFile; + fileRef = EE758AD71415EB31BD3E82F3; + }; + 9031C69145EE085B60904363 = { + isa = PBXBuildFile; + fileRef = 43775DC3D9F7917846EA5327; + }; + F8099BB77DC0D01DCCC6AFB9 = { + isa = PBXBuildFile; + fileRef = 0A58FDDF6FB9253F51939A52; + }; + 537E779F6008999191B2920A = { + isa = PBXBuildFile; + fileRef = 3058871156B921B9E5946C4F; + }; + DA21A6E7A18555DCFC63B07C = { + isa = PBXBuildFile; + fileRef = FAAB4EAE4A57B642D3B9EC23; + }; + 07451DA87757F9EF80E31BE8 = { + isa = PBXBuildFile; + fileRef = 0564535EEA7E4462926EA0C9; + }; + 2BAED5B831BB736E77A718AE = { + isa = PBXBuildFile; + fileRef = 89B3243200BAA6BD72905DBB; + }; + 01C9BC9A0A0F54B693CDA31A = { + isa = PBXBuildFile; + fileRef = 322D3066DCD98A8D0542236A; + }; + 48ADBEF873A610909D727C97 = { + isa = PBXBuildFile; + fileRef = 9E05B63699A307598B66F829; + }; + D145903EE5DBFD1BD98423F3 = { + isa = PBXBuildFile; + fileRef = 18E39207A0F5F9B8BC7EE94F; + }; + C7B090C29D8DE4D2503204B1 = { + isa = PBXBuildFile; + fileRef = BAFDA8DE51E7A69E477439EB; + }; + FFAF94080FF4A9995B33151E = { + isa = PBXBuildFile; + fileRef = 24425FFB0BCC7E54CADAA013; + }; + D2CECF93178A1738DA02CA4A = { + isa = PBXBuildFile; + fileRef = EDD11E2CC0B18196ADA0C87B; + }; + 7E870C094BAE67D7EB149F1C = { + isa = PBXBuildFile; + fileRef = 248FAA119A4FC24C522165EF; + }; + 65FC2E13B65977FED63BDDE3 = { + isa = PBXBuildFile; + fileRef = 7E951216B6138C76653B1460; + }; + 699954AF666E644C7B688381 = { + isa = PBXBuildFile; + fileRef = 0BC3C6A4F4FC1DD30DD8E17C; + }; + 9D47995A33BBA693ED435B31 = { + isa = PBXBuildFile; + fileRef = B06AE97C86D27E7FEBCB4631; + }; + 0564535EEA7E4462926EA0C9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 0A58FDDF6FB9253F51939A52 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 0BC3C6A4F4FC1DD30DD8E17C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 12C680C68A15B9A590264B18 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 18C1CCE5684F9FA0478F27AD = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + 18E39207A0F5F9B8BC7EE94F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 1DA5C6A474916745AFEC6DA5 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Carbon.framework; + path = System/Library/Frameworks/Carbon.framework; + sourceTree = SDKROOT; + }; + 24425FFB0BCC7E54CADAA013 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 248FAA119A4FC24C522165EF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 253CCF9514FE705169600047 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 26FE7BE182FBB9E7228A082D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + 3058871156B921B9E5946C4F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = WebKit.framework; + path = System/Library/Frameworks/WebKit.framework; + sourceTree = SDKROOT; + }; + 322D3066DCD98A8D0542236A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 429C7CD0E88FC64E9A72514D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainComponent.h; + path = ../../Source/MainComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 43775DC3D9F7917846EA5327 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + 453777CEB7099A5D61901D13 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + 50FEDCEF881CC99174035167 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 614F2084407B35D62101F69F = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = AudioPerformanceTest.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 77AA9722BAADD4108205501A = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + 7E951216B6138C76653B1460 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 81017699F857F5BBFCA6E055 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + 89B3243200BAA6BD72905DBB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 920FF34D4A00A5AD433EE5F4 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 9516A19EE58DED8326DD0306 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 9E05B63699A307598B66F829 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 9EADBF913B7A454B6BE93A4A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 9F28F179EF6B90EB9F4DBEE9 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + A3B86BB7483BC5697B58E417 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + A65BB8D452A2A4859FA41F8B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + AD134CACB71BED6A22743C18 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + B06AE97C86D27E7FEBCB4631 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + BAFDA8DE51E7A69E477439EB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + C8EE61FDD1F06817A014B881 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + CBBC98B7CD350A07F5145FB4 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + D03C9A859FB4DBA8268D7FBA = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + E575FE2AD2F19FA6AEB536C2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + EDD11E2CC0B18196ADA0C87B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + EE758AD71415EB31BD3E82F3 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = DiscRecording.framework; + path = System/Library/Frameworks/DiscRecording.framework; + sourceTree = SDKROOT; + }; + FAAB4EAE4A57B642D3B9EC23 = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 9F54D12C977843F8FEFCF041 = { + isa = PBXGroup; + children = ( + 0564535EEA7E4462926EA0C9, + 429C7CD0E88FC64E9A72514D, + ); + name = Source; + sourceTree = ""; + }; + 4E2981EC48DBFD725AD8E626 = { + isa = PBXGroup; + children = ( + 9F54D12C977843F8FEFCF041, + ); + name = AudioPerformanceTest; + sourceTree = ""; + }; + 90489A23F0DBAD5F1550CE20 = { + isa = PBXGroup; + children = ( + 920FF34D4A00A5AD433EE5F4, + A3B86BB7483BC5697B58E417, + 253CCF9514FE705169600047, + D03C9A859FB4DBA8268D7FBA, + CBBC98B7CD350A07F5145FB4, + E575FE2AD2F19FA6AEB536C2, + 77AA9722BAADD4108205501A, + 81017699F857F5BBFCA6E055, + C8EE61FDD1F06817A014B881, + 50FEDCEF881CC99174035167, + AD134CACB71BED6A22743C18, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 0B8996A5E2671A4628476CFB = { + isa = PBXGroup; + children = ( + A65BB8D452A2A4859FA41F8B, + 89B3243200BAA6BD72905DBB, + 322D3066DCD98A8D0542236A, + 9E05B63699A307598B66F829, + 18E39207A0F5F9B8BC7EE94F, + BAFDA8DE51E7A69E477439EB, + 24425FFB0BCC7E54CADAA013, + EDD11E2CC0B18196ADA0C87B, + 248FAA119A4FC24C522165EF, + 7E951216B6138C76653B1460, + 0BC3C6A4F4FC1DD30DD8E17C, + B06AE97C86D27E7FEBCB4631, + 26FE7BE182FBB9E7228A082D, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + ED3C55ACC14D6DE2BC3B8A1D = { + isa = PBXGroup; + children = ( + 9516A19EE58DED8326DD0306, + FAAB4EAE4A57B642D3B9EC23, + ); + name = Resources; + sourceTree = ""; + }; + 02A7F817D49F2BC1D70F4242 = { + isa = PBXGroup; + children = ( + 9EADBF913B7A454B6BE93A4A, + 18C1CCE5684F9FA0478F27AD, + 1DA5C6A474916745AFEC6DA5, + 453777CEB7099A5D61901D13, + 9F28F179EF6B90EB9F4DBEE9, + 12C680C68A15B9A590264B18, + EE758AD71415EB31BD3E82F3, + 43775DC3D9F7917846EA5327, + 0A58FDDF6FB9253F51939A52, + 3058871156B921B9E5946C4F, + ); + name = Frameworks; + sourceTree = ""; + }; + 1DFEAF972822E305E013CC06 = { + isa = PBXGroup; + children = ( + 614F2084407B35D62101F69F, + ); + name = Products; + sourceTree = ""; + }; + 3BA1BA0CAFE969E99950C06B = { + isa = PBXGroup; + children = ( + 4E2981EC48DBFD725AD8E626, + 90489A23F0DBAD5F1550CE20, + 0B8996A5E2671A4628476CFB, + ED3C55ACC14D6DE2BC3B8A1D, + 02A7F817D49F2BC1D70F4242, + 1DFEAF972822E305E013CC06, + ); + name = Source; + sourceTree = ""; + }; + 19B7C16D592FB25D09022191 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -144,18 +499,28 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - B7A6988E30C0A68B01EDC53B = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPerformanceTest"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + B7A6988E30C0A68B01EDC53B = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -176,30 +541,43 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - B907CDF95622107F20CD7617 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPerformanceTest"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + B907CDF95622107F20CD7617 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -226,18 +604,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "AudioPerformanceTest"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - BF82CBDF63CC37CADC61A511 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + BF82CBDF63CC37CADC61A511 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -262,45 +648,102 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "AudioPerformanceTest"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - AA3837ADCB1CEB3B0E2D20B3 = {isa = PBXTargetDependency; target = E9FD2656EC625C9C8DE30219; }; - 7097CF6AC086DAC346ACCCD9 = {isa = XCConfigurationList; buildConfigurations = ( - B907CDF95622107F20CD7617, - BF82CBDF63CC37CADC61A511, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 674C2AF5989C06689C6065FC = {isa = XCConfigurationList; buildConfigurations = ( - 19B7C16D592FB25D09022191, - B7A6988E30C0A68B01EDC53B, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - C86DD529EC94922C2AB61742 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - DA21A6E7A18555DCFC63B07C, ); runOnlyForDeploymentPostprocessing = 0; }; - 6C2BE2DE2ECC96615ED827AB = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 07451DA87757F9EF80E31BE8, - 2BAED5B831BB736E77A718AE, - 01C9BC9A0A0F54B693CDA31A, - 48ADBEF873A610909D727C97, - D145903EE5DBFD1BD98423F3, - C7B090C29D8DE4D2503204B1, - FFAF94080FF4A9995B33151E, - D2CECF93178A1738DA02CA4A, - 7E870C094BAE67D7EB149F1C, - 65FC2E13B65977FED63BDDE3, - 699954AF666E644C7B688381, - 9D47995A33BBA693ED435B31, ); runOnlyForDeploymentPostprocessing = 0; }; - 409D569C572B6EF7F4F1702D = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8A0F71A4EEC7FE694352DD94, - 30BE30F31D1AAED9FC893AA5, - 9B19A6655FCC8086134C8656, - 0319B40AD2FD96007FFA928B, - 5AFD011031C266431687C922, - 5923A711C0020F2CDD598714, - 3825E8984D8F6AA00DDC6BAC, - 9031C69145EE085B60904363, - F8099BB77DC0D01DCCC6AFB9, - 537E779F6008999191B2920A, ); runOnlyForDeploymentPostprocessing = 0; }; - E9FD2656EC625C9C8DE30219 = {isa = PBXNativeTarget; buildConfigurationList = 674C2AF5989C06689C6065FC; buildPhases = ( - C86DD529EC94922C2AB61742, - 6C2BE2DE2ECC96615ED827AB, - 409D569C572B6EF7F4F1702D, ); buildRules = ( ); dependencies = ( ); name = "AudioPerformanceTest - App"; productName = AudioPerformanceTest; productReference = 614F2084407B35D62101F69F; productType = "com.apple.product-type.application"; }; - 9CE2A44801B5B4BE7A9667DA = {isa = PBXProject; buildConfigurationList = 7097CF6AC086DAC346ACCCD9; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { E9FD2656EC625C9C8DE30219 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 3BA1BA0CAFE969E99950C06B; projectDirPath = ""; projectRoot = ""; targets = (E9FD2656EC625C9C8DE30219); }; + ZERO_LINK = NO; + }; + name = Release; + }; + AA3837ADCB1CEB3B0E2D20B3 = { + isa = PBXTargetDependency; + target = E9FD2656EC625C9C8DE30219; + }; + 7097CF6AC086DAC346ACCCD9 = { + isa = XCConfigurationList; + buildConfigurations = ( + B907CDF95622107F20CD7617, + BF82CBDF63CC37CADC61A511, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 674C2AF5989C06689C6065FC = { + isa = XCConfigurationList; + buildConfigurations = ( + 19B7C16D592FB25D09022191, + B7A6988E30C0A68B01EDC53B, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C86DD529EC94922C2AB61742 = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DA21A6E7A18555DCFC63B07C, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6C2BE2DE2ECC96615ED827AB = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07451DA87757F9EF80E31BE8, + 2BAED5B831BB736E77A718AE, + 01C9BC9A0A0F54B693CDA31A, + 48ADBEF873A610909D727C97, + D145903EE5DBFD1BD98423F3, + C7B090C29D8DE4D2503204B1, + FFAF94080FF4A9995B33151E, + D2CECF93178A1738DA02CA4A, + 7E870C094BAE67D7EB149F1C, + 65FC2E13B65977FED63BDDE3, + 699954AF666E644C7B688381, + 9D47995A33BBA693ED435B31, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 409D569C572B6EF7F4F1702D = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A0F71A4EEC7FE694352DD94, + 30BE30F31D1AAED9FC893AA5, + 9B19A6655FCC8086134C8656, + 0319B40AD2FD96007FFA928B, + 5AFD011031C266431687C922, + 5923A711C0020F2CDD598714, + 3825E8984D8F6AA00DDC6BAC, + 9031C69145EE085B60904363, + F8099BB77DC0D01DCCC6AFB9, + 537E779F6008999191B2920A, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E9FD2656EC625C9C8DE30219 = { + isa = PBXNativeTarget; + buildConfigurationList = 674C2AF5989C06689C6065FC; + buildPhases = ( + C86DD529EC94922C2AB61742, + 6C2BE2DE2ECC96615ED827AB, + 409D569C572B6EF7F4F1702D, + ); + buildRules = ( ); + dependencies = ( ); + name = "AudioPerformanceTest - App"; + productName = AudioPerformanceTest; + productReference = 614F2084407B35D62101F69F; + productType = "com.apple.product-type.application"; + }; + 9CE2A44801B5B4BE7A9667DA = { + isa = PBXProject; + buildConfigurationList = 7097CF6AC086DAC346ACCCD9; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { E9FD2656EC625C9C8DE30219 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 3BA1BA0CAFE969E99950C06B; + projectDirPath = ""; + projectRoot = ""; + targets = (E9FD2656EC625C9C8DE30219); + }; }; rootObject = 9CE2A44801B5B4BE7A9667DA; } diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj b/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj index a7c1f197..3b78d984 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj @@ -15,8 +15,6 @@ {78607AE9-F43B-3DDB-0FE1-D745771AF527} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ AudioPerformanceTest true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -155,6 +145,9 @@ true + + true + true @@ -485,6 +478,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -509,6 +568,9 @@ true + + true + true @@ -584,6 +646,9 @@ true + + true + true @@ -593,9 +658,15 @@ true + + true + true + + true + true @@ -650,6 +721,9 @@ true + + true + true @@ -911,6 +985,9 @@ true + + true + true @@ -1298,10 +1375,13 @@ true - + true - + + true + + true @@ -1753,6 +1833,7 @@ + @@ -1901,13 +1982,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -1916,6 +2054,7 @@ + @@ -1927,6 +2066,7 @@ + @@ -1944,6 +2084,7 @@ + @@ -1981,6 +2122,7 @@ + @@ -1990,6 +2132,7 @@ + @@ -1999,6 +2142,7 @@ + @@ -2091,6 +2235,7 @@ + @@ -2183,8 +2328,9 @@ - + + @@ -2315,6 +2461,7 @@ + @@ -2337,6 +2484,11 @@ + + + + + diff --git a/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj.filters b/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj.filters index f5930652..1a923753 100644 --- a/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj.filters +++ b/extras/AudioPerformanceTest/Builds/VisualStudio2017/AudioPerformanceTest_App.vcxproj.filters @@ -104,6 +104,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -269,6 +314,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -346,6 +394,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -685,6 +736,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -712,6 +829,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -805,6 +925,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -814,9 +937,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -871,6 +1000,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1153,6 +1285,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1558,12 +1693,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2085,6 +2223,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2529,6 +2670,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2547,9 +2862,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2574,6 +2886,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2607,6 +2922,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2658,6 +2976,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2769,6 +3090,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2796,6 +3120,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2823,6 +3150,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3099,6 +3429,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3375,12 +3708,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3771,6 +4107,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -3833,6 +4172,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj index 6e39bf51..60e4b368 100644 --- a/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj +++ b/extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj @@ -5,134 +5,516 @@ }; objectVersion = 46; objects = { - - E1282ABB96DD2E7FA7F63559 = {isa = PBXBuildFile; fileRef = 614F2084407B35D62101F69F; }; - 8A0F71A4EEC7FE694352DD94 = {isa = PBXBuildFile; fileRef = 9EADBF913B7A454B6BE93A4A; }; - 30BE30F31D1AAED9FC893AA5 = {isa = PBXBuildFile; fileRef = 18C1CCE5684F9FA0478F27AD; }; - E74C8479F0E10EC28E1E2DE1 = {isa = PBXBuildFile; fileRef = C6030BFC7A19A5075AB0EC28; }; - 5AFD011031C266431687C922 = {isa = PBXBuildFile; fileRef = 9F28F179EF6B90EB9F4DBEE9; }; - 71863EE98034AB7C3CBCAA81 = {isa = PBXBuildFile; fileRef = 24D90B40648CC05A9B1AA55B; }; - BF3ECEF0623C9B67C4CEAAF2 = {isa = PBXBuildFile; fileRef = 6B887CEE009353C410AB4F63; }; - 893A86EF99F57B81286E58A1 = {isa = PBXBuildFile; fileRef = F40C1815F7E7E4FBAF3A3091; }; - 5923A711C0020F2CDD598714 = {isa = PBXBuildFile; fileRef = 12C680C68A15B9A590264B18; }; - F749F6DA494103257C9874CC = {isa = PBXBuildFile; fileRef = 6406C6755E61B1DC93071FF0; }; - CC782AABFA20787BABBCED90 = {isa = PBXBuildFile; fileRef = E1BB9D521BF6C055F5B88628; }; - FA27764C3CB8C061B1B787CC = {isa = PBXBuildFile; fileRef = 418405DCE48C1B4926143469; }; - F8099BB77DC0D01DCCC6AFB9 = {isa = PBXBuildFile; fileRef = 0A58FDDF6FB9253F51939A52; }; - AA0C9E035BB509F01A09310B = {isa = PBXBuildFile; fileRef = 60795BF638A7024B62C0DF09; }; - A783F6E198806332E7FB9744 = {isa = PBXBuildFile; fileRef = 8693552B5FA53C2003A66302; }; - 07451DA87757F9EF80E31BE8 = {isa = PBXBuildFile; fileRef = 0564535EEA7E4462926EA0C9; }; - 2BAED5B831BB736E77A718AE = {isa = PBXBuildFile; fileRef = 89B3243200BAA6BD72905DBB; }; - 01C9BC9A0A0F54B693CDA31A = {isa = PBXBuildFile; fileRef = 322D3066DCD98A8D0542236A; }; - 48ADBEF873A610909D727C97 = {isa = PBXBuildFile; fileRef = 9E05B63699A307598B66F829; }; - D145903EE5DBFD1BD98423F3 = {isa = PBXBuildFile; fileRef = 18E39207A0F5F9B8BC7EE94F; }; - C7B090C29D8DE4D2503204B1 = {isa = PBXBuildFile; fileRef = BAFDA8DE51E7A69E477439EB; }; - FFAF94080FF4A9995B33151E = {isa = PBXBuildFile; fileRef = 24425FFB0BCC7E54CADAA013; }; - D2CECF93178A1738DA02CA4A = {isa = PBXBuildFile; fileRef = EDD11E2CC0B18196ADA0C87B; }; - 7E870C094BAE67D7EB149F1C = {isa = PBXBuildFile; fileRef = 248FAA119A4FC24C522165EF; }; - 65FC2E13B65977FED63BDDE3 = {isa = PBXBuildFile; fileRef = 7E951216B6138C76653B1460; }; - 699954AF666E644C7B688381 = {isa = PBXBuildFile; fileRef = 0BC3C6A4F4FC1DD30DD8E17C; }; - 9D47995A33BBA693ED435B31 = {isa = PBXBuildFile; fileRef = B06AE97C86D27E7FEBCB4631; }; - 0564535EEA7E4462926EA0C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 0A58FDDF6FB9253F51939A52 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 0BC3C6A4F4FC1DD30DD8E17C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 12C680C68A15B9A590264B18 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 18C1CCE5684F9FA0478F27AD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 18E39207A0F5F9B8BC7EE94F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - 24425FFB0BCC7E54CADAA013 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 248FAA119A4FC24C522165EF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 24D90B40648CC05A9B1AA55B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - 253CCF9514FE705169600047 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 26FE7BE182FBB9E7228A082D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 322D3066DCD98A8D0542236A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 418405DCE48C1B4926143469 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 429C7CD0E88FC64E9A72514D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainComponent.h; path = ../../Source/MainComponent.h; sourceTree = "SOURCE_ROOT"; }; - 50FEDCEF881CC99174035167 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 60795BF638A7024B62C0DF09 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 614F2084407B35D62101F69F = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPerformanceTest.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 6406C6755E61B1DC93071FF0 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 6B887CEE009353C410AB4F63 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 77AA9722BAADD4108205501A = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - 7E951216B6138C76653B1460 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 81017699F857F5BBFCA6E055 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - 8693552B5FA53C2003A66302 = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AudioPerformanceTest/Images.xcassets; sourceTree = "SOURCE_ROOT"; }; - 89B3243200BAA6BD72905DBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 920FF34D4A00A5AD433EE5F4 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 9516A19EE58DED8326DD0306 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 9E05B63699A307598B66F829 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - 9EADBF913B7A454B6BE93A4A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 9F28F179EF6B90EB9F4DBEE9 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - A3B86BB7483BC5697B58E417 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - A65BB8D452A2A4859FA41F8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - AD134CACB71BED6A22743C18 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - B06AE97C86D27E7FEBCB4631 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - BAFDA8DE51E7A69E477439EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - C6030BFC7A19A5075AB0EC28 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - C8EE61FDD1F06817A014B881 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - CBBC98B7CD350A07F5145FB4 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - D03C9A859FB4DBA8268D7FBA = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - E1BB9D521BF6C055F5B88628 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - E575FE2AD2F19FA6AEB536C2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - EDD11E2CC0B18196ADA0C87B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - F40C1815F7E7E4FBAF3A3091 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - 9F54D12C977843F8FEFCF041 = {isa = PBXGroup; children = ( - 0564535EEA7E4462926EA0C9, - 429C7CD0E88FC64E9A72514D, ); name = Source; sourceTree = ""; }; - 4E2981EC48DBFD725AD8E626 = {isa = PBXGroup; children = ( - 9F54D12C977843F8FEFCF041, ); name = AudioPerformanceTest; sourceTree = ""; }; - 90489A23F0DBAD5F1550CE20 = {isa = PBXGroup; children = ( - 920FF34D4A00A5AD433EE5F4, - A3B86BB7483BC5697B58E417, - 253CCF9514FE705169600047, - D03C9A859FB4DBA8268D7FBA, - CBBC98B7CD350A07F5145FB4, - E575FE2AD2F19FA6AEB536C2, - 77AA9722BAADD4108205501A, - 81017699F857F5BBFCA6E055, - C8EE61FDD1F06817A014B881, - 50FEDCEF881CC99174035167, - AD134CACB71BED6A22743C18, ); name = "JUCE Modules"; sourceTree = ""; }; - 0B8996A5E2671A4628476CFB = {isa = PBXGroup; children = ( - A65BB8D452A2A4859FA41F8B, - 89B3243200BAA6BD72905DBB, - 322D3066DCD98A8D0542236A, - 9E05B63699A307598B66F829, - 18E39207A0F5F9B8BC7EE94F, - BAFDA8DE51E7A69E477439EB, - 24425FFB0BCC7E54CADAA013, - EDD11E2CC0B18196ADA0C87B, - 248FAA119A4FC24C522165EF, - 7E951216B6138C76653B1460, - 0BC3C6A4F4FC1DD30DD8E17C, - B06AE97C86D27E7FEBCB4631, - 26FE7BE182FBB9E7228A082D, ); name = "JUCE Library Code"; sourceTree = ""; }; - ED3C55ACC14D6DE2BC3B8A1D = {isa = PBXGroup; children = ( - 9516A19EE58DED8326DD0306, - 8693552B5FA53C2003A66302, ); name = Resources; sourceTree = ""; }; - 02A7F817D49F2BC1D70F4242 = {isa = PBXGroup; children = ( - 9EADBF913B7A454B6BE93A4A, - 18C1CCE5684F9FA0478F27AD, - C6030BFC7A19A5075AB0EC28, - 9F28F179EF6B90EB9F4DBEE9, - 24D90B40648CC05A9B1AA55B, - 6B887CEE009353C410AB4F63, - F40C1815F7E7E4FBAF3A3091, - 12C680C68A15B9A590264B18, - 6406C6755E61B1DC93071FF0, - E1BB9D521BF6C055F5B88628, - 418405DCE48C1B4926143469, - 0A58FDDF6FB9253F51939A52, - 60795BF638A7024B62C0DF09, ); name = Frameworks; sourceTree = ""; }; - 1DFEAF972822E305E013CC06 = {isa = PBXGroup; children = ( - 614F2084407B35D62101F69F, ); name = Products; sourceTree = ""; }; - 3BA1BA0CAFE969E99950C06B = {isa = PBXGroup; children = ( - 4E2981EC48DBFD725AD8E626, - 90489A23F0DBAD5F1550CE20, - 0B8996A5E2671A4628476CFB, - ED3C55ACC14D6DE2BC3B8A1D, - 02A7F817D49F2BC1D70F4242, - 1DFEAF972822E305E013CC06, ); name = Source; sourceTree = ""; }; - 19B7C16D592FB25D09022191 = {isa = XCBuildConfiguration; buildSettings = { + E1282ABB96DD2E7FA7F63559 = { + isa = PBXBuildFile; + fileRef = 614F2084407B35D62101F69F; + }; + 8A0F71A4EEC7FE694352DD94 = { + isa = PBXBuildFile; + fileRef = 9EADBF913B7A454B6BE93A4A; + }; + 30BE30F31D1AAED9FC893AA5 = { + isa = PBXBuildFile; + fileRef = 18C1CCE5684F9FA0478F27AD; + }; + E74C8479F0E10EC28E1E2DE1 = { + isa = PBXBuildFile; + fileRef = C6030BFC7A19A5075AB0EC28; + }; + 5AFD011031C266431687C922 = { + isa = PBXBuildFile; + fileRef = 9F28F179EF6B90EB9F4DBEE9; + }; + 71863EE98034AB7C3CBCAA81 = { + isa = PBXBuildFile; + fileRef = 24D90B40648CC05A9B1AA55B; + }; + BF3ECEF0623C9B67C4CEAAF2 = { + isa = PBXBuildFile; + fileRef = 6B887CEE009353C410AB4F63; + }; + 893A86EF99F57B81286E58A1 = { + isa = PBXBuildFile; + fileRef = F40C1815F7E7E4FBAF3A3091; + }; + 5923A711C0020F2CDD598714 = { + isa = PBXBuildFile; + fileRef = 12C680C68A15B9A590264B18; + }; + F749F6DA494103257C9874CC = { + isa = PBXBuildFile; + fileRef = 6406C6755E61B1DC93071FF0; + }; + CC782AABFA20787BABBCED90 = { + isa = PBXBuildFile; + fileRef = E1BB9D521BF6C055F5B88628; + }; + FA27764C3CB8C061B1B787CC = { + isa = PBXBuildFile; + fileRef = 418405DCE48C1B4926143469; + }; + F8099BB77DC0D01DCCC6AFB9 = { + isa = PBXBuildFile; + fileRef = 0A58FDDF6FB9253F51939A52; + }; + AA0C9E035BB509F01A09310B = { + isa = PBXBuildFile; + fileRef = 60795BF638A7024B62C0DF09; + }; + A783F6E198806332E7FB9744 = { + isa = PBXBuildFile; + fileRef = 8693552B5FA53C2003A66302; + }; + 07451DA87757F9EF80E31BE8 = { + isa = PBXBuildFile; + fileRef = 0564535EEA7E4462926EA0C9; + }; + 2BAED5B831BB736E77A718AE = { + isa = PBXBuildFile; + fileRef = 89B3243200BAA6BD72905DBB; + }; + 01C9BC9A0A0F54B693CDA31A = { + isa = PBXBuildFile; + fileRef = 322D3066DCD98A8D0542236A; + }; + 48ADBEF873A610909D727C97 = { + isa = PBXBuildFile; + fileRef = 9E05B63699A307598B66F829; + }; + D145903EE5DBFD1BD98423F3 = { + isa = PBXBuildFile; + fileRef = 18E39207A0F5F9B8BC7EE94F; + }; + C7B090C29D8DE4D2503204B1 = { + isa = PBXBuildFile; + fileRef = BAFDA8DE51E7A69E477439EB; + }; + FFAF94080FF4A9995B33151E = { + isa = PBXBuildFile; + fileRef = 24425FFB0BCC7E54CADAA013; + }; + D2CECF93178A1738DA02CA4A = { + isa = PBXBuildFile; + fileRef = EDD11E2CC0B18196ADA0C87B; + }; + 7E870C094BAE67D7EB149F1C = { + isa = PBXBuildFile; + fileRef = 248FAA119A4FC24C522165EF; + }; + 65FC2E13B65977FED63BDDE3 = { + isa = PBXBuildFile; + fileRef = 7E951216B6138C76653B1460; + }; + 699954AF666E644C7B688381 = { + isa = PBXBuildFile; + fileRef = 0BC3C6A4F4FC1DD30DD8E17C; + }; + 9D47995A33BBA693ED435B31 = { + isa = PBXBuildFile; + fileRef = B06AE97C86D27E7FEBCB4631; + }; + 0564535EEA7E4462926EA0C9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 0A58FDDF6FB9253F51939A52 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 0BC3C6A4F4FC1DD30DD8E17C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 12C680C68A15B9A590264B18 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 18C1CCE5684F9FA0478F27AD = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + 18E39207A0F5F9B8BC7EE94F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 24425FFB0BCC7E54CADAA013 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 248FAA119A4FC24C522165EF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 24D90B40648CC05A9B1AA55B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + 253CCF9514FE705169600047 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 26FE7BE182FBB9E7228A082D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + 322D3066DCD98A8D0542236A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 418405DCE48C1B4926143469 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = MobileCoreServices.framework; + path = System/Library/Frameworks/MobileCoreServices.framework; + sourceTree = SDKROOT; + }; + 429C7CD0E88FC64E9A72514D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainComponent.h; + path = ../../Source/MainComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 50FEDCEF881CC99174035167 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 60795BF638A7024B62C0DF09 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = UIKit.framework; + path = System/Library/Frameworks/UIKit.framework; + sourceTree = SDKROOT; + }; + 614F2084407B35D62101F69F = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = AudioPerformanceTest.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 6406C6755E61B1DC93071FF0 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreText.framework; + path = System/Library/Frameworks/CoreText.framework; + sourceTree = SDKROOT; + }; + 6B887CEE009353C410AB4F63 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreGraphics.framework; + path = System/Library/Frameworks/CoreGraphics.framework; + sourceTree = SDKROOT; + }; + 77AA9722BAADD4108205501A = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + 7E951216B6138C76653B1460 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 81017699F857F5BBFCA6E055 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + 8693552B5FA53C2003A66302 = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + name = Images.xcassets; + path = AudioPerformanceTest/Images.xcassets; + sourceTree = "SOURCE_ROOT"; + }; + 89B3243200BAA6BD72905DBB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 920FF34D4A00A5AD433EE5F4 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 9516A19EE58DED8326DD0306 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 9E05B63699A307598B66F829 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 9EADBF913B7A454B6BE93A4A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 9F28F179EF6B90EB9F4DBEE9 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + A3B86BB7483BC5697B58E417 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + A65BB8D452A2A4859FA41F8B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + AD134CACB71BED6A22743C18 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + B06AE97C86D27E7FEBCB4631 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + BAFDA8DE51E7A69E477439EB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + C6030BFC7A19A5075AB0EC28 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + C8EE61FDD1F06817A014B881 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + CBBC98B7CD350A07F5145FB4 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + D03C9A859FB4DBA8268D7FBA = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + E1BB9D521BF6C055F5B88628 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = System/Library/Frameworks/Foundation.framework; + sourceTree = SDKROOT; + }; + E575FE2AD2F19FA6AEB536C2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + EDD11E2CC0B18196ADA0C87B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + F40C1815F7E7E4FBAF3A3091 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreImage.framework; + path = System/Library/Frameworks/CoreImage.framework; + sourceTree = SDKROOT; + }; + 9F54D12C977843F8FEFCF041 = { + isa = PBXGroup; + children = ( + 0564535EEA7E4462926EA0C9, + 429C7CD0E88FC64E9A72514D, + ); + name = Source; + sourceTree = ""; + }; + 4E2981EC48DBFD725AD8E626 = { + isa = PBXGroup; + children = ( + 9F54D12C977843F8FEFCF041, + ); + name = AudioPerformanceTest; + sourceTree = ""; + }; + 90489A23F0DBAD5F1550CE20 = { + isa = PBXGroup; + children = ( + 920FF34D4A00A5AD433EE5F4, + A3B86BB7483BC5697B58E417, + 253CCF9514FE705169600047, + D03C9A859FB4DBA8268D7FBA, + CBBC98B7CD350A07F5145FB4, + E575FE2AD2F19FA6AEB536C2, + 77AA9722BAADD4108205501A, + 81017699F857F5BBFCA6E055, + C8EE61FDD1F06817A014B881, + 50FEDCEF881CC99174035167, + AD134CACB71BED6A22743C18, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 0B8996A5E2671A4628476CFB = { + isa = PBXGroup; + children = ( + A65BB8D452A2A4859FA41F8B, + 89B3243200BAA6BD72905DBB, + 322D3066DCD98A8D0542236A, + 9E05B63699A307598B66F829, + 18E39207A0F5F9B8BC7EE94F, + BAFDA8DE51E7A69E477439EB, + 24425FFB0BCC7E54CADAA013, + EDD11E2CC0B18196ADA0C87B, + 248FAA119A4FC24C522165EF, + 7E951216B6138C76653B1460, + 0BC3C6A4F4FC1DD30DD8E17C, + B06AE97C86D27E7FEBCB4631, + 26FE7BE182FBB9E7228A082D, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + ED3C55ACC14D6DE2BC3B8A1D = { + isa = PBXGroup; + children = ( + 9516A19EE58DED8326DD0306, + 8693552B5FA53C2003A66302, + ); + name = Resources; + sourceTree = ""; + }; + 02A7F817D49F2BC1D70F4242 = { + isa = PBXGroup; + children = ( + 9EADBF913B7A454B6BE93A4A, + 18C1CCE5684F9FA0478F27AD, + C6030BFC7A19A5075AB0EC28, + 9F28F179EF6B90EB9F4DBEE9, + 24D90B40648CC05A9B1AA55B, + 6B887CEE009353C410AB4F63, + F40C1815F7E7E4FBAF3A3091, + 12C680C68A15B9A590264B18, + 6406C6755E61B1DC93071FF0, + E1BB9D521BF6C055F5B88628, + 418405DCE48C1B4926143469, + 0A58FDDF6FB9253F51939A52, + 60795BF638A7024B62C0DF09, + ); + name = Frameworks; + sourceTree = ""; + }; + 1DFEAF972822E305E013CC06 = { + isa = PBXGroup; + children = ( + 614F2084407B35D62101F69F, + ); + name = Products; + sourceTree = ""; + }; + 3BA1BA0CAFE969E99950C06B = { + isa = PBXGroup; + children = ( + 4E2981EC48DBFD725AD8E626, + 90489A23F0DBAD5F1550CE20, + 0B8996A5E2671A4628476CFB, + ED3C55ACC14D6DE2BC3B8A1D, + 02A7F817D49F2BC1D70F4242, + 1DFEAF972822E305E013CC06, + ); + name = Source; + sourceTree = ""; + }; + 19B7C16D592FB25D09022191 = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -155,15 +537,27 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest; - USE_HEADERMAP = NO; }; name = Debug; }; - B7A6988E30C0A68B01EDC53B = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPerformanceTest"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + B7A6988E30C0A68B01EDC53B = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -186,28 +580,43 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.juce.AudioPerformanceTest; - USE_HEADERMAP = NO; }; name = Release; }; - B907CDF95622107F20CD7617 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPerformanceTest"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + B907CDF95622107F20CD7617 = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -237,19 +646,27 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - BF82CBDF63CC37CADC61A511 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + BF82CBDF63CC37CADC61A511 = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -277,48 +694,105 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - AA3837ADCB1CEB3B0E2D20B3 = {isa = PBXTargetDependency; target = E9FD2656EC625C9C8DE30219; }; - 7097CF6AC086DAC346ACCCD9 = {isa = XCConfigurationList; buildConfigurations = ( - B907CDF95622107F20CD7617, - BF82CBDF63CC37CADC61A511, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 674C2AF5989C06689C6065FC = {isa = XCConfigurationList; buildConfigurations = ( - 19B7C16D592FB25D09022191, - B7A6988E30C0A68B01EDC53B, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - C86DD529EC94922C2AB61742 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - A783F6E198806332E7FB9744, ); runOnlyForDeploymentPostprocessing = 0; }; - 6C2BE2DE2ECC96615ED827AB = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 07451DA87757F9EF80E31BE8, - 2BAED5B831BB736E77A718AE, - 01C9BC9A0A0F54B693CDA31A, - 48ADBEF873A610909D727C97, - D145903EE5DBFD1BD98423F3, - C7B090C29D8DE4D2503204B1, - FFAF94080FF4A9995B33151E, - D2CECF93178A1738DA02CA4A, - 7E870C094BAE67D7EB149F1C, - 65FC2E13B65977FED63BDDE3, - 699954AF666E644C7B688381, - 9D47995A33BBA693ED435B31, ); runOnlyForDeploymentPostprocessing = 0; }; - 409D569C572B6EF7F4F1702D = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8A0F71A4EEC7FE694352DD94, - 30BE30F31D1AAED9FC893AA5, - E74C8479F0E10EC28E1E2DE1, - 5AFD011031C266431687C922, - 71863EE98034AB7C3CBCAA81, - BF3ECEF0623C9B67C4CEAAF2, - 893A86EF99F57B81286E58A1, - 5923A711C0020F2CDD598714, - F749F6DA494103257C9874CC, - CC782AABFA20787BABBCED90, - FA27764C3CB8C061B1B787CC, - F8099BB77DC0D01DCCC6AFB9, - AA0C9E035BB509F01A09310B, ); runOnlyForDeploymentPostprocessing = 0; }; - E9FD2656EC625C9C8DE30219 = {isa = PBXNativeTarget; buildConfigurationList = 674C2AF5989C06689C6065FC; buildPhases = ( - C86DD529EC94922C2AB61742, - 6C2BE2DE2ECC96615ED827AB, - 409D569C572B6EF7F4F1702D, ); buildRules = ( ); dependencies = ( ); name = "AudioPerformanceTest - App"; productName = AudioPerformanceTest; productReference = 614F2084407B35D62101F69F; productType = "com.apple.product-type.application"; }; - 9CE2A44801B5B4BE7A9667DA = {isa = PBXProject; buildConfigurationList = 7097CF6AC086DAC346ACCCD9; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { E9FD2656EC625C9C8DE30219 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 3BA1BA0CAFE969E99950C06B; projectDirPath = ""; projectRoot = ""; targets = (E9FD2656EC625C9C8DE30219); }; + ZERO_LINK = NO; + }; + name = Release; + }; + AA3837ADCB1CEB3B0E2D20B3 = { + isa = PBXTargetDependency; + target = E9FD2656EC625C9C8DE30219; + }; + 7097CF6AC086DAC346ACCCD9 = { + isa = XCConfigurationList; + buildConfigurations = ( + B907CDF95622107F20CD7617, + BF82CBDF63CC37CADC61A511, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 674C2AF5989C06689C6065FC = { + isa = XCConfigurationList; + buildConfigurations = ( + 19B7C16D592FB25D09022191, + B7A6988E30C0A68B01EDC53B, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C86DD529EC94922C2AB61742 = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A783F6E198806332E7FB9744, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6C2BE2DE2ECC96615ED827AB = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 07451DA87757F9EF80E31BE8, + 2BAED5B831BB736E77A718AE, + 01C9BC9A0A0F54B693CDA31A, + 48ADBEF873A610909D727C97, + D145903EE5DBFD1BD98423F3, + C7B090C29D8DE4D2503204B1, + FFAF94080FF4A9995B33151E, + D2CECF93178A1738DA02CA4A, + 7E870C094BAE67D7EB149F1C, + 65FC2E13B65977FED63BDDE3, + 699954AF666E644C7B688381, + 9D47995A33BBA693ED435B31, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 409D569C572B6EF7F4F1702D = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8A0F71A4EEC7FE694352DD94, + 30BE30F31D1AAED9FC893AA5, + E74C8479F0E10EC28E1E2DE1, + 5AFD011031C266431687C922, + 71863EE98034AB7C3CBCAA81, + BF3ECEF0623C9B67C4CEAAF2, + 893A86EF99F57B81286E58A1, + 5923A711C0020F2CDD598714, + F749F6DA494103257C9874CC, + CC782AABFA20787BABBCED90, + FA27764C3CB8C061B1B787CC, + F8099BB77DC0D01DCCC6AFB9, + AA0C9E035BB509F01A09310B, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E9FD2656EC625C9C8DE30219 = { + isa = PBXNativeTarget; + buildConfigurationList = 674C2AF5989C06689C6065FC; + buildPhases = ( + C86DD529EC94922C2AB61742, + 6C2BE2DE2ECC96615ED827AB, + 409D569C572B6EF7F4F1702D, + ); + buildRules = ( ); + dependencies = ( ); + name = "AudioPerformanceTest - App"; + productName = AudioPerformanceTest; + productReference = 614F2084407B35D62101F69F; + productType = "com.apple.product-type.application"; + }; + 9CE2A44801B5B4BE7A9667DA = { + isa = PBXProject; + buildConfigurationList = 7097CF6AC086DAC346ACCCD9; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { E9FD2656EC625C9C8DE30219 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 3BA1BA0CAFE969E99950C06B; + projectDirPath = ""; + projectRoot = ""; + targets = (E9FD2656EC625C9C8DE30219); + }; }; rootObject = 9CE2A44801B5B4BE7A9667DA; } diff --git a/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h b/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h index 29b0ea00..79b8844d 100644 --- a/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h +++ b/extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h @@ -65,6 +65,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -101,10 +105,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -189,6 +189,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -197,6 +201,10 @@ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + //#define JUCE_STRICT_REFCOUNTEDPOINTER 0 +#endif + //============================================================================== // juce_events flags: @@ -215,6 +223,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -242,6 +254,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -252,6 +268,7 @@ #ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR //#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR 0 #endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h b/extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h index b4ce63a8..82feea7c 100644 --- a/extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h +++ b/extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h @@ -37,6 +37,7 @@ namespace ProjectInfo { const char* const projectName = "AudioPerformanceTest"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/AudioPluginHost/AudioPluginHost.jucer b/extras/AudioPluginHost/AudioPluginHost.jucer index 074a4754..c1f30a99 100644 --- a/extras/AudioPluginHost/AudioPluginHost.jucer +++ b/extras/AudioPluginHost/AudioPluginHost.jucer @@ -2,13 +2,13 @@ + objCExtraSuffix="M73TRi" extraCompilerFlags="-Wall -Wshadow -Wstrict-aliasing -Wconversion -Wsign-compare -Woverloaded-virtual -Wextra-semi" + smallIcon="c97aUr" bigIcon="c97aUr" microphonePermissionNeeded="1"> @@ -54,8 +54,8 @@ - + @@ -79,8 +79,8 @@ - + @@ -102,8 +102,8 @@ - + @@ -127,8 +127,8 @@ + microphonePermissionNeeded="1" iosBackgroundAudio="1" iosBackgroundBle="1" + smallIcon="c97aUr" bigIcon="c97aUr"> @@ -156,8 +156,8 @@ androidMinimumSDK="23" androidInternetNeeded="1" microphonePermissionNeeded="1" androidBluetoothNeeded="1" smallIcon="c97aUr" bigIcon="c97aUr"> - + @@ -210,9 +210,8 @@ + JUCE_USE_CDREADER="0" JUCE_USE_CAMERA="0" JUCE_PLUGINHOST_AU="1" + JUCE_WEB_BROWSER="0" JUCE_PLUGINHOST_VST3="1" JUCE_PLUGINHOST_LADSPA="1"/> diff --git a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt index 3b05e76a..937852bf 100644 --- a/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt +++ b/extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt @@ -11,6 +11,7 @@ set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-feat add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_roli_juce_pluginhost_AudioPluginHost" "-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/roli/juce/pluginhost/AudioPluginHost\"" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSNAME=com_roli_juce_pluginhost_SharingContentProvider" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSPATH=\"com/roli/juce/pluginhost/SharingContentProvider\"" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000") include_directories( AFTER + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK" "../../../JuceLibraryCode" "../../../../../modules" "${ANDROID_NDK}/sources/android/cpufeatures" @@ -53,6 +54,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" @@ -316,6 +319,91 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" @@ -327,7 +415,6 @@ add_library( ${BINARY_NAME} "../../../../../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_VSTCommon.h" - "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" @@ -341,6 +428,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" "../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" @@ -359,6 +448,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" + "../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" "../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" "../../../../../modules/juce_audio_processors/juce_audio_processors.mm" "../../../../../modules/juce_audio_processors/juce_audio_processors.h" @@ -400,6 +490,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_AbstractFifo.h" "../../../../../modules/juce_core/containers/juce_Array.h" "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" + "../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" + "../../../../../modules/juce_core/containers/juce_ArrayBase.h" "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" @@ -409,9 +501,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_ListenerList.h" "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" "../../../../../modules/juce_core/containers/juce_NamedValueSet.h" + "../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" "../../../../../modules/juce_core/containers/juce_OwnedArray.h" "../../../../../modules/juce_core/containers/juce_PropertySet.cpp" "../../../../../modules/juce_core/containers/juce_PropertySet.h" + "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" "../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" "../../../../../modules/juce_core/containers/juce_SortedSet.h" @@ -458,6 +552,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_ByteOrder.h" "../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" "../../../../../modules/juce_core/memory/juce_HeapBlock.h" + "../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_Memory.h" "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" @@ -468,6 +563,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" "../../../../../modules/juce_core/misc/juce_Result.cpp" "../../../../../modules/juce_core/misc/juce_Result.h" "../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" @@ -498,6 +595,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" "../../../../../modules/juce_core/native/juce_mac_Threads.mm" "../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" + "../../../../../modules/juce_core/native/juce_posix_IPAddress.h" "../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" "../../../../../modules/juce_core/native/juce_posix_SharedCode.h" "../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" @@ -678,6 +776,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" "../../../../../modules/juce_events/messages/juce_ApplicationBase.h" "../../../../../modules/juce_events/messages/juce_CallbackMessage.h" @@ -907,10 +1007,12 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_basics/components/juce_Component.h" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.h" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" "../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" @@ -1171,6 +1273,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" + "../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" "../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" "../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" @@ -1251,6 +1354,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_video/capture/juce_CameraDevice.cpp" "../../../../../modules/juce_video/capture/juce_CameraDevice.h" "../../../../../modules/juce_video/native/juce_android_CameraDevice.h" + "../../../../../modules/juce_video/native/juce_android_Video.h" "../../../../../modules/juce_video/native/juce_ios_CameraDevice.h" "../../../../../modules/juce_video/native/juce_mac_CameraDevice.h" "../../../../../modules/juce_video/native/juce_mac_Video.h" @@ -1293,6 +1397,8 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/ju set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1556,6 +1662,91 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1567,7 +1758,6 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1581,6 +1771,8 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/proces set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1599,6 +1791,7 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/utilit set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1640,6 +1833,8 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Ab set_source_files_properties("../../../../../modules/juce_core/containers/juce_AbstractFifo.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_Array.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ElementComparator.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1649,9 +1844,11 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Li set_source_files_properties("../../../../../modules/juce_core/containers/juce_ListenerList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_SortedSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1698,6 +1895,7 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Atomic set_source_files_properties("../../../../../modules/juce_core/memory/juce_ByteOrder.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeapBlock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Memory.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1708,6 +1906,8 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Scoped set_source_files_properties("../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Singleton.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_WeakReference.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1738,6 +1938,7 @@ set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_St set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_Threads.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_IPAddress.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_SharedCode.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1918,6 +2119,8 @@ set_source_files_properties("../../../../../modules/juce_events/interprocess/juc set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_CallbackMessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2147,10 +2350,12 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/components/j set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Component.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2411,6 +2616,7 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/documents/juc set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2491,6 +2697,7 @@ set_source_files_properties("../../../../../modules/juce_opengl/juce_opengl.h" P set_source_files_properties("../../../../../modules/juce_video/capture/juce_CameraDevice.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/capture/juce_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_android_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_video/native/juce_android_Video.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_ios_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_mac_CameraDevice.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_video/native/juce_mac_Video.h" PROPERTIES HEADER_FILE_ONLY TRUE) diff --git a/extras/AudioPluginHost/Builds/Android/app/build.gradle b/extras/AudioPluginHost/Builds/Android/app/build.gradle index e6e07fc1..31fc97b3 100644 --- a/extras/AudioPluginHost/Builds/Android/app/build.gradle +++ b/extras/AudioPluginHost/Builds/Android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 23 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.0" externalNativeBuild { cmake { path "CMakeLists.txt" @@ -50,7 +50,7 @@ android { productFlavors { debug_ { ndk { - abiFilters "armeabi", "x86" + abiFilters "armeabi-v7a", "x86" } externalNativeBuild { cmake { diff --git a/extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml b/extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml index df2ca3d5..7a68c4f7 100644 --- a/extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml +++ b/extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ - diff --git a/extras/AudioPluginHost/Builds/Android/app/src/main/java/com/roli/juce/pluginhost/AudioPluginHost.java b/extras/AudioPluginHost/Builds/Android/app/src/main/java/com/roli/juce/pluginhost/AudioPluginHost.java index 2b62f5a5..64ef7164 100644 --- a/extras/AudioPluginHost/Builds/Android/app/src/main/java/com/roli/juce/pluginhost/AudioPluginHost.java +++ b/extras/AudioPluginHost/Builds/Android/app/src/main/java/com/roli/juce/pluginhost/AudioPluginHost.java @@ -31,6 +31,9 @@ import android.content.res.Configuration; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.hardware.camera2.*; +import android.database.ContentObserver; +import android.media.session.*; +import android.media.MediaMetadata; import android.net.http.SslError; import android.net.Uri; import android.os.Bundle; @@ -94,8 +97,11 @@ public class AudioPluginHost extends Activity //============================================================================== public boolean isPermissionDeclaredInManifest (int permissionID) { - String permissionToCheck = getAndroidPermissionName(permissionID); + return isPermissionDeclaredInManifest (getAndroidPermissionName (permissionID)); + } + public boolean isPermissionDeclaredInManifest (String permissionToCheck) + { try { PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); @@ -1488,7 +1494,9 @@ public class AudioPluginHost extends Activity public final String getClipboardContent() { ClipboardManager clipboard = (ClipboardManager) getSystemService (CLIPBOARD_SERVICE); - return clipboard.getText().toString(); + + CharSequence content = clipboard.getText(); + return content != null ? content.toString() : new String(); } public final void setClipboardContent (String newText) @@ -1997,11 +2005,13 @@ public class AudioPluginHost extends Activity implements SurfaceHolder.Callback { private long nativeContext = 0; + private boolean forVideo; - NativeSurfaceView (Context context, long nativeContextPtr) + NativeSurfaceView (Context context, long nativeContextPtr, boolean createdForVideo) { super (context); nativeContext = nativeContextPtr; + forVideo = createdForVideo; } public Surface getNativeSurface() @@ -2019,38 +2029,51 @@ public class AudioPluginHost extends Activity @Override public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { - surfaceChangedNative (nativeContext, holder, format, width, height); + if (forVideo) + surfaceChangedNativeVideo (nativeContext, holder, format, width, height); + else + surfaceChangedNative (nativeContext, holder, format, width, height); } @Override public void surfaceCreated (SurfaceHolder holder) { - surfaceCreatedNative (nativeContext, holder); + if (forVideo) + surfaceCreatedNativeVideo (nativeContext, holder); + else + surfaceCreatedNative (nativeContext, holder); } @Override public void surfaceDestroyed (SurfaceHolder holder) { - surfaceDestroyedNative (nativeContext, holder); + if (forVideo) + surfaceDestroyedNativeVideo (nativeContext, holder); + else + surfaceDestroyedNative (nativeContext, holder); } @Override protected void dispatchDraw (Canvas canvas) { super.dispatchDraw (canvas); - dispatchDrawNative (nativeContext, canvas); + + if (forVideo) + dispatchDrawNativeVideo (nativeContext, canvas); + else + dispatchDrawNative (nativeContext, canvas); } //============================================================================== @Override - protected void onAttachedToWindow () + protected void onAttachedToWindow() { super.onAttachedToWindow(); getHolder().addCallback (this); } @Override - protected void onDetachedFromWindow () + protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getHolder().removeCallback (this); @@ -2062,11 +2085,17 @@ public class AudioPluginHost extends Activity private native void surfaceDestroyedNative (long nativeContextptr, SurfaceHolder holder); private native void surfaceChangedNative (long nativeContextptr, SurfaceHolder holder, int format, int width, int height); + + private native void dispatchDrawNativeVideo (long nativeContextPtr, Canvas canvas); + private native void surfaceCreatedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceDestroyedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceChangedNativeVideo (long nativeContextptr, SurfaceHolder holder, + int format, int width, int height); } - public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr) + public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr, boolean forVideo) { - return new NativeSurfaceView (this, nativeSurfacePtr); + return new NativeSurfaceView (this, nativeSurfacePtr, forVideo); } //============================================================================== @@ -2826,6 +2855,151 @@ public class AudioPluginHost extends Activity } + //============================================================================== + public class MediaControllerCallback extends MediaController.Callback + { + private native void mediaControllerAudioInfoChanged (long host, MediaController.PlaybackInfo info); + private native void mediaControllerMetadataChanged (long host, MediaMetadata metadata); + private native void mediaControllerPlaybackStateChanged (long host, PlaybackState state); + private native void mediaControllerSessionDestroyed (long host); + + MediaControllerCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onAudioInfoChanged (MediaController.PlaybackInfo info) + { + mediaControllerAudioInfoChanged (host, info); + } + + @Override + public void onMetadataChanged (MediaMetadata metadata) + { + mediaControllerMetadataChanged (host, metadata); + } + + @Override + public void onPlaybackStateChanged (PlaybackState state) + { + mediaControllerPlaybackStateChanged (host, state); + } + + @Override + public void onQueueChanged (List queue) {} + + @Override + public void onSessionDestroyed() + { + mediaControllerSessionDestroyed (host); + } + + private long host; + } + + //============================================================================== + public class MediaSessionCallback extends MediaSession.Callback + { + private native void mediaSessionPause (long host); + private native void mediaSessionPlay (long host); + private native void mediaSessionPlayFromMediaId (long host, String mediaId, Bundle extras); + private native void mediaSessionSeekTo (long host, long pos); + private native void mediaSessionStop (long host); + + + MediaSessionCallback (long hostToUse) + { + host = hostToUse; + } + + @Override + public void onPause() + { + mediaSessionPause (host); + } + + @Override + public void onPlay() + { + mediaSessionPlay (host); + } + + @Override + public void onPlayFromMediaId (String mediaId, Bundle extras) + { + mediaSessionPlayFromMediaId (host, mediaId, extras); + } + + @Override + public void onSeekTo (long pos) + { + mediaSessionSeekTo (host, pos); + } + + @Override + public void onStop() + { + mediaSessionStop (host); + } + + @Override + public void onFastForward() {} + + @Override + public boolean onMediaButtonEvent (Intent mediaButtonIntent) + { + return true; + } + + @Override + public void onRewind() {} + + @Override + public void onSkipToNext() {} + + @Override + public void onSkipToPrevious() {} + + @Override + public void onSkipToQueueItem (long id) {} + + private long host; + } + + //============================================================================== + public class SystemVolumeObserver extends ContentObserver + { + private native void mediaSessionSystemVolumeChanged (long host); + + SystemVolumeObserver (Activity activityToUse, long hostToUse) + { + super (null); + + activity = activityToUse; + host = hostToUse; + } + + void setEnabled (boolean shouldBeEnabled) + { + if (shouldBeEnabled) + activity.getApplicationContext().getContentResolver().registerContentObserver (android.provider.Settings.System.CONTENT_URI, true, this); + else + activity.getApplicationContext().getContentResolver().unregisterContentObserver (this); + } + + @Override + public void onChange (boolean selfChange, Uri uri) + { + if (uri.toString().startsWith ("content://settings/system/volume_music")) + mediaSessionSystemVolumeChanged (host); + } + + private Activity activity; + private long host; + } + + //============================================================================== public static final String getLocaleValue (boolean isRegion) { diff --git a/extras/AudioPluginHost/Builds/Android/build.gradle b/extras/AudioPluginHost/Builds/Android/build.gradle index 651d63db..647f509e 100644 --- a/extras/AudioPluginHost/Builds/Android/build.gradle +++ b/extras/AudioPluginHost/Builds/Android/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.1.3' } } diff --git a/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile b/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile index 2d619282..a43b4166 100644 --- a/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile +++ b/extras/AudioPluginHost/Builds/LinuxMakefile/Makefile @@ -35,13 +35,13 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - JUCE_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 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_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 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := AudioPluginHost JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama libcurl) -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -56,13 +56,13 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := AudioPluginHost JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama libcurl) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -90,11 +90,13 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o \ $(JUCE_OBJDIR)/include_juce_video_be78589.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 x11 xext xinerama libcurl @echo Linking "AudioPluginHost - App" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -206,10 +208,6 @@ $(JUCE_OBJDIR)/include_juce_video_be78589.o: ../../JuceLibraryCode/include_juce_ @echo "Compiling include_juce_video.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama - clean: @echo Cleaning AudioPluginHost $(V_AT)$(CLEANCMD) diff --git a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj index 58f02ecb..7b2e79b6 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj @@ -5,197 +5,768 @@ }; objectVersion = 46; objects = { - - FCDB1F8A93F59E0F97821456 = {isa = PBXBuildFile; fileRef = 8D8BBC353637DA442C5575DA; }; - 73E371F1B912FCCAE0CD7E5D = {isa = PBXBuildFile; fileRef = 86CA337014D3F67E906FFD28; }; - 21D330A5B13178B12BEAFC3C = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; }; - B288A89F96704F142ED8E939 = {isa = PBXBuildFile; fileRef = 5ACC21AA45BBF48C3C64D56D; }; - 851C1165C9E4ACDD19C56A96 = {isa = PBXBuildFile; fileRef = 942A0F04EFB8D0B2FF9780BA; }; - AF42316D915057E930A5624E = {isa = PBXBuildFile; fileRef = A4B568E26157FC282214976F; }; - 2B4B9CF71F94BDD1E3AC89AE = {isa = PBXBuildFile; fileRef = B0935EBBA4F6E2B05F3D1C0A; }; - AC3BED74AC7C6D9F5739F38B = {isa = PBXBuildFile; fileRef = 9794142D24966F93FFDE51A1; }; - E3CB85BA817BC9E3942A8AB0 = {isa = PBXBuildFile; fileRef = 9F9B445E6755CAA19E4344ED; }; - 70580743C3D5695F065FF698 = {isa = PBXBuildFile; fileRef = E68018DE199135B7F738FB17; }; - 3470F40DA5D68EC217872906 = {isa = PBXBuildFile; fileRef = 31D55A751C790CB81F58DDB7; }; - E092A70431B046BF1F50A482 = {isa = PBXBuildFile; fileRef = 5AF0CA7CDFCA90B4DE1F55C3; }; - E2BAA7CFC729809530FD71EE = {isa = PBXBuildFile; fileRef = B8774D8AD307D798831C0DF7; }; - 68FBFDA1FE637B3EDA09A592 = {isa = PBXBuildFile; fileRef = 4DF6E6E41E10965AD169143B; }; - BBA1733CF8B064A5FD0B4CF4 = {isa = PBXBuildFile; fileRef = D313CF37B25D7FD313C4F336; }; - A02C9F4C4B840C27B6CAFEBD = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; }; - 4DB15177DDC357F4503F88CF = {isa = PBXBuildFile; fileRef = B457EE687507BF1DEEA7581F; }; - D92C7BF86C9CCF6B4D14F809 = {isa = PBXBuildFile; fileRef = 7DA35787B5F6F7440D667CC8; }; - 443244451A0F2064D4767337 = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; }; - 2E74188531792924F0C73142 = {isa = PBXBuildFile; fileRef = 05863BDFC582C9552A86DF49; }; - C8423A9611C8AAF27468847D = {isa = PBXBuildFile; fileRef = 336FD30C38BD0A176161B8AE; }; - 786AF545C1C1E4D11140C3DF = {isa = PBXBuildFile; fileRef = 43647951ECC7F030B9953965; }; - 3E1689E23B9C85F03209DCEF = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; }; - F635D974599DEC2ED91E6A88 = {isa = PBXBuildFile; fileRef = 04AABCD3491318FB32E844B4; }; - A1B0416DA378BB0C3AD6F74B = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415; }; - A0144A682BF4843C8CF53FE4 = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; }; - 15CCE43D7DCFC649638919D4 = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; }; - 5C4D406B924230F83E3580AD = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58; }; - F4DD98B9310B679D50A2C8A6 = {isa = PBXBuildFile; fileRef = 5D250A57C7DEA80248F30EED; }; - CAF0DE157C8F7D9F168AA3B6 = {isa = PBXBuildFile; fileRef = 5FBD6C402617272052BB4D81; }; - 0F20A4AE04736634F097F5A6 = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C; }; - 76A80851698FC773D2479B4E = {isa = PBXBuildFile; fileRef = 683CEE986A2467C850FE99E6; }; - E4A926EF695823F0F13268FF = {isa = PBXBuildFile; fileRef = B8E24A5CEE6B7055537725CF; }; - A09E93F1B354E1FF8B3E9ABE = {isa = PBXBuildFile; fileRef = 5EF1D381F42AA8764597F189; }; - 7DE202DC1D876F49266D9E7D = {isa = PBXBuildFile; fileRef = 8290D7BAC160B3A56B66891A; }; - 075C54DDDBDEA5AAD2F60154 = {isa = PBXBuildFile; fileRef = 82800DBA287EF4BAB13B42FB; }; - 2C3D221D2AA87F07B3F1044D = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; }; - C38D14DC58F1941DD5E4BF60 = {isa = PBXBuildFile; fileRef = 2BE6C2DFD6EBB9A89109AEB5; }; - 2727A191DB1BAAC9C04B9081 = {isa = PBXBuildFile; fileRef = 37E4D5C341406B7072120006; }; - 84BAFE82A102D9C350672689 = {isa = PBXBuildFile; fileRef = 29D746FC68F69751796671A2; }; - 04AABCD3491318FB32E844B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/UI/MainHostWindow.cpp; sourceTree = "SOURCE_ROOT"; }; - 04DB9A49969ECC740CC25665 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphEditorPanel.h; path = ../../Source/UI/GraphEditorPanel.h; sourceTree = "SOURCE_ROOT"; }; - 05863BDFC582C9552A86DF49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterGraph.cpp; path = ../../Source/Filters/FilterGraph.cpp; sourceTree = "SOURCE_ROOT"; }; - 1DADAD8E34AAF4AFF1C69DC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; - 29D746FC68F69751796671A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_video.mm"; path = "../../JuceLibraryCode/include_juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; - 2A6983F82B13F9E8B10299AE = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - 2BE6C2DFD6EBB9A89109AEB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - 30F22843EFEBF7AA841EB4D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 31D55A751C790CB81F58DDB7 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 336FD30C38BD0A176161B8AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterIOConfiguration.cpp; path = ../../Source/Filters/FilterIOConfiguration.cpp; sourceTree = "SOURCE_ROOT"; }; - 37E4D5C341406B7072120006 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 3C070DD522CDD11FFC87425D = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - 3D57FE2A8877F12A61054726 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 3D78A731234A833CA112AE45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphEditorPanel.cpp; path = ../../Source/UI/GraphEditorPanel.cpp; sourceTree = "SOURCE_ROOT"; }; - 43647951ECC7F030B9953965 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InternalFilters.cpp; path = ../../Source/Filters/InternalFilters.cpp; sourceTree = "SOURCE_ROOT"; }; - 4C7D82F9274A4F9DBF11235C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 4DF6E6E41E10965AD169143B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - 5313EB852E41EE58B199B9A2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 545D57A6AA801B38548B0CAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterGraph.h; path = ../../Source/Filters/FilterGraph.h; sourceTree = "SOURCE_ROOT"; }; - 57DF618F1DE781556B7AFC32 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 59842A98E5EBBC54B50C04CD = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - 5ACC21AA45BBF48C3C64D56D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; - 5AF0CA7CDFCA90B4DE1F55C3 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 5D250A57C7DEA80248F30EED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - 5EF1D381F42AA8764597F189 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - 5FBD6C402617272052BB4D81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - 65968EA1B476D71F14DE1D58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 683CEE986A2467C850FE99E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 6A71B2BCAC4239072BC2BD7E = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 6D107D7946DC5976B766345B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; - 725D0D9C8C7FF7B3FB3020ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterIOConfiguration.h; path = ../../Source/Filters/FilterIOConfiguration.h; sourceTree = "SOURCE_ROOT"; }; - 7DA35787B5F6F7440D667CC8 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 81C1A7770E082F56FE5A90A7 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 82800DBA287EF4BAB13B42FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 8290D7BAC160B3A56B66891A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 86CA337014D3F67E906FFD28 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 89309C0C5F3269BD06BE7F27 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 8D8BBC353637DA442C5575DA = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AudioPluginHost.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 8FE7B37CDE0818DB27BDDEBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 938AE72315C6C93949F6220E = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 942A0F04EFB8D0B2FF9780BA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 94CB96C8E4B51F52776C2638 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 97918AB43AD460AFA8FA2FFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = ../../Source/UI/PluginWindow.h; sourceTree = "SOURCE_ROOT"; }; - 9794142D24966F93FFDE51A1 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 9EBEE3AE5856E877478607C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalFilters.h; path = ../../Source/Filters/InternalFilters.h; sourceTree = "SOURCE_ROOT"; }; - 9F9B445E6755CAA19E4344ED = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - A4B568E26157FC282214976F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; - A5DFC13E4F09134B0D226A3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/UI/MainHostWindow.h; sourceTree = "SOURCE_ROOT"; }; - A5E7CA8A71D049BE2BD33861 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - A66EFAC64B1B67B536C73415 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = "SOURCE_ROOT"; }; - B0935EBBA4F6E2B05F3D1C0A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - B285CAB91AE928C476CA4F9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - B2A1E626CC120982805754F6 = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = "SOURCE_ROOT"; }; - B457EE687507BF1DEEA7581F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - B86B918291E1090C6A720971 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - B8774D8AD307D798831C0DF7 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - B8E24A5CEE6B7055537725CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - D313CF37B25D7FD313C4F336 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - D4EBC17BDB7F88CCBC76730B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - DDE115D3084ACA6DD6AA4471 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_video"; path = "../../../../modules/juce_video"; sourceTree = "SOURCE_ROOT"; }; - E68018DE199135B7F738FB17 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - F299BECFB2AEA6105F014848 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - F9AC862E9A3583B6C1488EE0 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - FA21631C5536EA3DF55C7FA6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - FAF867E9E731D0880D40511F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - AA37F82D57C9BB4BE78FCCB9 = {isa = PBXGroup; children = ( - 05863BDFC582C9552A86DF49, - 545D57A6AA801B38548B0CAC, - 336FD30C38BD0A176161B8AE, - 725D0D9C8C7FF7B3FB3020ED, - 43647951ECC7F030B9953965, - 9EBEE3AE5856E877478607C7, ); name = Filters; sourceTree = ""; }; - DE7B77306553B1204071B39A = {isa = PBXGroup; children = ( - 3D78A731234A833CA112AE45, - 04DB9A49969ECC740CC25665, - 04AABCD3491318FB32E844B4, - A5DFC13E4F09134B0D226A3E, - 97918AB43AD460AFA8FA2FFE, ); name = UI; sourceTree = ""; }; - B225B7F2CAABD28A41E7C339 = {isa = PBXGroup; children = ( - AA37F82D57C9BB4BE78FCCB9, - DE7B77306553B1204071B39A, - A66EFAC64B1B67B536C73415, - B2A1E626CC120982805754F6, ); name = Source; sourceTree = ""; }; - 97790EAEA01CFA5C3CA9737A = {isa = PBXGroup; children = ( - B225B7F2CAABD28A41E7C339, ); name = AudioPluginHost; sourceTree = ""; }; - 9D8FE1F65CAD416AA606C47A = {isa = PBXGroup; children = ( - 6A71B2BCAC4239072BC2BD7E, - 5313EB852E41EE58B199B9A2, - F9AC862E9A3583B6C1488EE0, - FAF867E9E731D0880D40511F, - 3C070DD522CDD11FFC87425D, - 3D57FE2A8877F12A61054726, - FA21631C5536EA3DF55C7FA6, - B86B918291E1090C6A720971, - 59842A98E5EBBC54B50C04CD, - 94CB96C8E4B51F52776C2638, - 938AE72315C6C93949F6220E, - F299BECFB2AEA6105F014848, - 81C1A7770E082F56FE5A90A7, - DDE115D3084ACA6DD6AA4471, ); name = "JUCE Modules"; sourceTree = ""; }; - 7E30376DDAD775FEFE64944C = {isa = PBXGroup; children = ( - 30F22843EFEBF7AA841EB4D6, - 6D107D7946DC5976B766345B, - 1DADAD8E34AAF4AFF1C69DC4, - 4C7D82F9274A4F9DBF11235C, - 65968EA1B476D71F14DE1D58, - 5D250A57C7DEA80248F30EED, - 5FBD6C402617272052BB4D81, - B285CAB91AE928C476CA4F9C, - 683CEE986A2467C850FE99E6, - B8E24A5CEE6B7055537725CF, - 5EF1D381F42AA8764597F189, - 8290D7BAC160B3A56B66891A, - 82800DBA287EF4BAB13B42FB, - 8FE7B37CDE0818DB27BDDEBD, - 2BE6C2DFD6EBB9A89109AEB5, - 37E4D5C341406B7072120006, - 29D746FC68F69751796671A2, - A5E7CA8A71D049BE2BD33861, ); name = "JUCE Library Code"; sourceTree = ""; }; - A97EE73C79DA3F729D46AF48 = {isa = PBXGroup; children = ( - 57DF618F1DE781556B7AFC32, - 7DA35787B5F6F7440D667CC8, - 2A6983F82B13F9E8B10299AE, ); name = Resources; sourceTree = ""; }; - D1C4804CD275CB57A5C89A2D = {isa = PBXGroup; children = ( - 86CA337014D3F67E906FFD28, - D4EBC17BDB7F88CCBC76730B, - 5ACC21AA45BBF48C3C64D56D, - 942A0F04EFB8D0B2FF9780BA, - A4B568E26157FC282214976F, - B0935EBBA4F6E2B05F3D1C0A, - 9794142D24966F93FFDE51A1, - 9F9B445E6755CAA19E4344ED, - E68018DE199135B7F738FB17, - 31D55A751C790CB81F58DDB7, - 5AF0CA7CDFCA90B4DE1F55C3, - B8774D8AD307D798831C0DF7, - 4DF6E6E41E10965AD169143B, - D313CF37B25D7FD313C4F336, - 89309C0C5F3269BD06BE7F27, - B457EE687507BF1DEEA7581F, ); name = Frameworks; sourceTree = ""; }; - D85C0D11EE4F6C73B9EB5BCD = {isa = PBXGroup; children = ( - 8D8BBC353637DA442C5575DA, ); name = Products; sourceTree = ""; }; - 65BEFC705A89E5C8A9E35C97 = {isa = PBXGroup; children = ( - 97790EAEA01CFA5C3CA9737A, - 9D8FE1F65CAD416AA606C47A, - 7E30376DDAD775FEFE64944C, - A97EE73C79DA3F729D46AF48, - D1C4804CD275CB57A5C89A2D, - D85C0D11EE4F6C73B9EB5BCD, ); name = Source; sourceTree = ""; }; - C8B793AC1BEFBE7A99BE8352 = {isa = XCBuildConfiguration; buildSettings = { + FCDB1F8A93F59E0F97821456 = { + isa = PBXBuildFile; + fileRef = 8D8BBC353637DA442C5575DA; + }; + 73E371F1B912FCCAE0CD7E5D = { + isa = PBXBuildFile; + fileRef = 86CA337014D3F67E906FFD28; + }; + 21D330A5B13178B12BEAFC3C = { + isa = PBXBuildFile; + fileRef = D4EBC17BDB7F88CCBC76730B; + }; + B288A89F96704F142ED8E939 = { + isa = PBXBuildFile; + fileRef = 5ACC21AA45BBF48C3C64D56D; + }; + 851C1165C9E4ACDD19C56A96 = { + isa = PBXBuildFile; + fileRef = 942A0F04EFB8D0B2FF9780BA; + }; + AF42316D915057E930A5624E = { + isa = PBXBuildFile; + fileRef = A4B568E26157FC282214976F; + }; + 2B4B9CF71F94BDD1E3AC89AE = { + isa = PBXBuildFile; + fileRef = B0935EBBA4F6E2B05F3D1C0A; + }; + AC3BED74AC7C6D9F5739F38B = { + isa = PBXBuildFile; + fileRef = 9794142D24966F93FFDE51A1; + }; + E3CB85BA817BC9E3942A8AB0 = { + isa = PBXBuildFile; + fileRef = 9F9B445E6755CAA19E4344ED; + }; + 70580743C3D5695F065FF698 = { + isa = PBXBuildFile; + fileRef = E68018DE199135B7F738FB17; + }; + 3470F40DA5D68EC217872906 = { + isa = PBXBuildFile; + fileRef = 31D55A751C790CB81F58DDB7; + }; + E092A70431B046BF1F50A482 = { + isa = PBXBuildFile; + fileRef = 5AF0CA7CDFCA90B4DE1F55C3; + }; + E2BAA7CFC729809530FD71EE = { + isa = PBXBuildFile; + fileRef = B8774D8AD307D798831C0DF7; + }; + 68FBFDA1FE637B3EDA09A592 = { + isa = PBXBuildFile; + fileRef = 4DF6E6E41E10965AD169143B; + }; + BBA1733CF8B064A5FD0B4CF4 = { + isa = PBXBuildFile; + fileRef = D313CF37B25D7FD313C4F336; + }; + A02C9F4C4B840C27B6CAFEBD = { + isa = PBXBuildFile; + fileRef = 89309C0C5F3269BD06BE7F27; + }; + 4DB15177DDC357F4503F88CF = { + isa = PBXBuildFile; + fileRef = B457EE687507BF1DEEA7581F; + }; + D92C7BF86C9CCF6B4D14F809 = { + isa = PBXBuildFile; + fileRef = 7DA35787B5F6F7440D667CC8; + }; + 443244451A0F2064D4767337 = { + isa = PBXBuildFile; + fileRef = 2A6983F82B13F9E8B10299AE; + }; + 2E74188531792924F0C73142 = { + isa = PBXBuildFile; + fileRef = 05863BDFC582C9552A86DF49; + }; + C8423A9611C8AAF27468847D = { + isa = PBXBuildFile; + fileRef = 336FD30C38BD0A176161B8AE; + }; + 786AF545C1C1E4D11140C3DF = { + isa = PBXBuildFile; + fileRef = 43647951ECC7F030B9953965; + }; + 3E1689E23B9C85F03209DCEF = { + isa = PBXBuildFile; + fileRef = 3D78A731234A833CA112AE45; + }; + F635D974599DEC2ED91E6A88 = { + isa = PBXBuildFile; + fileRef = 04AABCD3491318FB32E844B4; + }; + A1B0416DA378BB0C3AD6F74B = { + isa = PBXBuildFile; + fileRef = A66EFAC64B1B67B536C73415; + }; + A0144A682BF4843C8CF53FE4 = { + isa = PBXBuildFile; + fileRef = 6D107D7946DC5976B766345B; + }; + 15CCE43D7DCFC649638919D4 = { + isa = PBXBuildFile; + fileRef = 4C7D82F9274A4F9DBF11235C; + }; + 5C4D406B924230F83E3580AD = { + isa = PBXBuildFile; + fileRef = 65968EA1B476D71F14DE1D58; + }; + F4DD98B9310B679D50A2C8A6 = { + isa = PBXBuildFile; + fileRef = 5D250A57C7DEA80248F30EED; + }; + CAF0DE157C8F7D9F168AA3B6 = { + isa = PBXBuildFile; + fileRef = 5FBD6C402617272052BB4D81; + }; + 0F20A4AE04736634F097F5A6 = { + isa = PBXBuildFile; + fileRef = B285CAB91AE928C476CA4F9C; + }; + 76A80851698FC773D2479B4E = { + isa = PBXBuildFile; + fileRef = 683CEE986A2467C850FE99E6; + }; + E4A926EF695823F0F13268FF = { + isa = PBXBuildFile; + fileRef = B8E24A5CEE6B7055537725CF; + }; + A09E93F1B354E1FF8B3E9ABE = { + isa = PBXBuildFile; + fileRef = 5EF1D381F42AA8764597F189; + }; + 7DE202DC1D876F49266D9E7D = { + isa = PBXBuildFile; + fileRef = 8290D7BAC160B3A56B66891A; + }; + 075C54DDDBDEA5AAD2F60154 = { + isa = PBXBuildFile; + fileRef = 82800DBA287EF4BAB13B42FB; + }; + 2C3D221D2AA87F07B3F1044D = { + isa = PBXBuildFile; + fileRef = 8FE7B37CDE0818DB27BDDEBD; + }; + C38D14DC58F1941DD5E4BF60 = { + isa = PBXBuildFile; + fileRef = 2BE6C2DFD6EBB9A89109AEB5; + }; + 2727A191DB1BAAC9C04B9081 = { + isa = PBXBuildFile; + fileRef = 37E4D5C341406B7072120006; + }; + 84BAFE82A102D9C350672689 = { + isa = PBXBuildFile; + fileRef = 29D746FC68F69751796671A2; + }; + 04AABCD3491318FB32E844B4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = MainHostWindow.cpp; + path = ../../Source/UI/MainHostWindow.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 04DB9A49969ECC740CC25665 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = GraphEditorPanel.h; + path = ../../Source/UI/GraphEditorPanel.h; + sourceTree = "SOURCE_ROOT"; + }; + 05863BDFC582C9552A86DF49 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = FilterGraph.cpp; + path = ../../Source/Filters/FilterGraph.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 1DADAD8E34AAF4AFF1C69DC4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = BinaryData.h; + path = ../../JuceLibraryCode/BinaryData.h; + sourceTree = "SOURCE_ROOT"; + }; + 29D746FC68F69751796671A2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_video.mm"; + path = "../../JuceLibraryCode/include_juce_video.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 2A6983F82B13F9E8B10299AE = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + 2BE6C2DFD6EBB9A89109AEB5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 30F22843EFEBF7AA841EB4D6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 31D55A751C790CB81F58DDB7 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMedia.framework; + path = System/Library/Frameworks/CoreMedia.framework; + sourceTree = SDKROOT; + }; + 336FD30C38BD0A176161B8AE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = FilterIOConfiguration.cpp; + path = ../../Source/Filters/FilterIOConfiguration.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 37E4D5C341406B7072120006 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 3C070DD522CDD11FFC87425D = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + 3D57FE2A8877F12A61054726 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 3D78A731234A833CA112AE45 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = GraphEditorPanel.cpp; + path = ../../Source/UI/GraphEditorPanel.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 43647951ECC7F030B9953965 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = InternalFilters.cpp; + path = ../../Source/Filters/InternalFilters.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 4C7D82F9274A4F9DBF11235C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 4DF6E6E41E10965AD169143B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + 5313EB852E41EE58B199B9A2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 545D57A6AA801B38548B0CAC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = FilterGraph.h; + path = ../../Source/Filters/FilterGraph.h; + sourceTree = "SOURCE_ROOT"; + }; + 57DF618F1DE781556B7AFC32 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 59842A98E5EBBC54B50C04CD = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + 5ACC21AA45BBF48C3C64D56D = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioUnit.framework; + path = System/Library/Frameworks/AudioUnit.framework; + sourceTree = SDKROOT; + }; + 5AF0CA7CDFCA90B4DE1F55C3 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 5D250A57C7DEA80248F30EED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5EF1D381F42AA8764597F189 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5FBD6C402617272052BB4D81 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 65968EA1B476D71F14DE1D58 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 683CEE986A2467C850FE99E6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 6A71B2BCAC4239072BC2BD7E = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 6D107D7946DC5976B766345B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = BinaryData.cpp; + path = ../../JuceLibraryCode/BinaryData.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 725D0D9C8C7FF7B3FB3020ED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = FilterIOConfiguration.h; + path = ../../Source/Filters/FilterIOConfiguration.h; + sourceTree = "SOURCE_ROOT"; + }; + 7DA35787B5F6F7440D667CC8 = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 81C1A7770E082F56FE5A90A7 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 82800DBA287EF4BAB13B42FB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 8290D7BAC160B3A56B66891A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 86CA337014D3F67E906FFD28 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 89309C0C5F3269BD06BE7F27 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 8D8BBC353637DA442C5575DA = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = AudioPluginHost.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 8FE7B37CDE0818DB27BDDEBD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 938AE72315C6C93949F6220E = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 942A0F04EFB8D0B2FF9780BA = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + 94CB96C8E4B51F52776C2638 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 97918AB43AD460AFA8FA2FFE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = PluginWindow.h; + path = ../../Source/UI/PluginWindow.h; + sourceTree = "SOURCE_ROOT"; + }; + 9794142D24966F93FFDE51A1 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + 9EBEE3AE5856E877478607C7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = InternalFilters.h; + path = ../../Source/Filters/InternalFilters.h; + sourceTree = "SOURCE_ROOT"; + }; + 9F9B445E6755CAA19E4344ED = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + A4B568E26157FC282214976F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVKit.framework; + path = System/Library/Frameworks/AVKit.framework; + sourceTree = SDKROOT; + }; + A5DFC13E4F09134B0D226A3E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainHostWindow.h; + path = ../../Source/UI/MainHostWindow.h; + sourceTree = "SOURCE_ROOT"; + }; + A5E7CA8A71D049BE2BD33861 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + A66EFAC64B1B67B536C73415 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = HostStartup.cpp; + path = ../../Source/HostStartup.cpp; + sourceTree = "SOURCE_ROOT"; + }; + B0935EBBA4F6E2B05F3D1C0A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Carbon.framework; + path = System/Library/Frameworks/Carbon.framework; + sourceTree = SDKROOT; + }; + B285CAB91AE928C476CA4F9C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + B2A1E626CC120982805754F6 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = JUCEAppIcon.png; + path = ../../Source/JUCEAppIcon.png; + sourceTree = "SOURCE_ROOT"; + }; + B457EE687507BF1DEEA7581F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = WebKit.framework; + path = System/Library/Frameworks/WebKit.framework; + sourceTree = SDKROOT; + }; + B86B918291E1090C6A720971 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + B8774D8AD307D798831C0DF7 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = DiscRecording.framework; + path = System/Library/Frameworks/DiscRecording.framework; + sourceTree = SDKROOT; + }; + B8E24A5CEE6B7055537725CF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + D313CF37B25D7FD313C4F336 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGL.framework; + path = System/Library/Frameworks/OpenGL.framework; + sourceTree = SDKROOT; + }; + D4EBC17BDB7F88CCBC76730B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + DDE115D3084ACA6DD6AA4471 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_video"; + path = "../../../../modules/juce_video"; + sourceTree = "SOURCE_ROOT"; + }; + E68018DE199135B7F738FB17 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + F299BECFB2AEA6105F014848 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + F9AC862E9A3583B6C1488EE0 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + FA21631C5536EA3DF55C7FA6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + FAF867E9E731D0880D40511F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + AA37F82D57C9BB4BE78FCCB9 = { + isa = PBXGroup; + children = ( + 05863BDFC582C9552A86DF49, + 545D57A6AA801B38548B0CAC, + 336FD30C38BD0A176161B8AE, + 725D0D9C8C7FF7B3FB3020ED, + 43647951ECC7F030B9953965, + 9EBEE3AE5856E877478607C7, + ); + name = Filters; + sourceTree = ""; + }; + DE7B77306553B1204071B39A = { + isa = PBXGroup; + children = ( + 3D78A731234A833CA112AE45, + 04DB9A49969ECC740CC25665, + 04AABCD3491318FB32E844B4, + A5DFC13E4F09134B0D226A3E, + 97918AB43AD460AFA8FA2FFE, + ); + name = UI; + sourceTree = ""; + }; + B225B7F2CAABD28A41E7C339 = { + isa = PBXGroup; + children = ( + AA37F82D57C9BB4BE78FCCB9, + DE7B77306553B1204071B39A, + A66EFAC64B1B67B536C73415, + B2A1E626CC120982805754F6, + ); + name = Source; + sourceTree = ""; + }; + 97790EAEA01CFA5C3CA9737A = { + isa = PBXGroup; + children = ( + B225B7F2CAABD28A41E7C339, + ); + name = AudioPluginHost; + sourceTree = ""; + }; + 9D8FE1F65CAD416AA606C47A = { + isa = PBXGroup; + children = ( + 6A71B2BCAC4239072BC2BD7E, + 5313EB852E41EE58B199B9A2, + F9AC862E9A3583B6C1488EE0, + FAF867E9E731D0880D40511F, + 3C070DD522CDD11FFC87425D, + 3D57FE2A8877F12A61054726, + FA21631C5536EA3DF55C7FA6, + B86B918291E1090C6A720971, + 59842A98E5EBBC54B50C04CD, + 94CB96C8E4B51F52776C2638, + 938AE72315C6C93949F6220E, + F299BECFB2AEA6105F014848, + 81C1A7770E082F56FE5A90A7, + DDE115D3084ACA6DD6AA4471, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 7E30376DDAD775FEFE64944C = { + isa = PBXGroup; + children = ( + 30F22843EFEBF7AA841EB4D6, + 6D107D7946DC5976B766345B, + 1DADAD8E34AAF4AFF1C69DC4, + 4C7D82F9274A4F9DBF11235C, + 65968EA1B476D71F14DE1D58, + 5D250A57C7DEA80248F30EED, + 5FBD6C402617272052BB4D81, + B285CAB91AE928C476CA4F9C, + 683CEE986A2467C850FE99E6, + B8E24A5CEE6B7055537725CF, + 5EF1D381F42AA8764597F189, + 8290D7BAC160B3A56B66891A, + 82800DBA287EF4BAB13B42FB, + 8FE7B37CDE0818DB27BDDEBD, + 2BE6C2DFD6EBB9A89109AEB5, + 37E4D5C341406B7072120006, + 29D746FC68F69751796671A2, + A5E7CA8A71D049BE2BD33861, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + A97EE73C79DA3F729D46AF48 = { + isa = PBXGroup; + children = ( + 57DF618F1DE781556B7AFC32, + 7DA35787B5F6F7440D667CC8, + 2A6983F82B13F9E8B10299AE, + ); + name = Resources; + sourceTree = ""; + }; + D1C4804CD275CB57A5C89A2D = { + isa = PBXGroup; + children = ( + 86CA337014D3F67E906FFD28, + D4EBC17BDB7F88CCBC76730B, + 5ACC21AA45BBF48C3C64D56D, + 942A0F04EFB8D0B2FF9780BA, + A4B568E26157FC282214976F, + B0935EBBA4F6E2B05F3D1C0A, + 9794142D24966F93FFDE51A1, + 9F9B445E6755CAA19E4344ED, + E68018DE199135B7F738FB17, + 31D55A751C790CB81F58DDB7, + 5AF0CA7CDFCA90B4DE1F55C3, + B8774D8AD307D798831C0DF7, + 4DF6E6E41E10965AD169143B, + D313CF37B25D7FD313C4F336, + 89309C0C5F3269BD06BE7F27, + B457EE687507BF1DEEA7581F, + ); + name = Frameworks; + sourceTree = ""; + }; + D85C0D11EE4F6C73B9EB5BCD = { + isa = PBXGroup; + children = ( + 8D8BBC353637DA442C5575DA, + ); + name = Products; + sourceTree = ""; + }; + 65BEFC705A89E5C8A9E35C97 = { + isa = PBXGroup; + children = ( + 97790EAEA01CFA5C3CA9737A, + 9D8FE1F65CAD416AA606C47A, + 7E30376DDAD775FEFE64944C, + A97EE73C79DA3F729D46AF48, + D1C4804CD275CB57A5C89A2D, + D85C0D11EE4F6C73B9EB5BCD, + ); + name = Source; + sourceTree = ""; + }; + C8B793AC1BEFBE7A99BE8352 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -216,19 +787,30 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("~/SDKs/VST_SDK/VST3_SDK", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wstrict-aliasing -Wconversion -Wsign-compare -Woverloaded-virtual -Wextra-semi"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.juce.pluginhost; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - 49453CC5AD9F08D2738464AC = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPluginHost"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 49453CC5AD9F08D2738464AC = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -249,31 +831,45 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("~/SDKs/VST_SDK/VST3_SDK", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wstrict-aliasing -Wconversion -Wsign-compare -Woverloaded-virtual -Wextra-semi"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.juce.pluginhost; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - 8D1CA827F1EFD443BDCF198A = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "AudioPluginHost"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + 8D1CA827F1EFD443BDCF198A = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -300,18 +896,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "AudioPluginHost"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - C9295196717FABE454A210B7 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + C9295196717FABE454A210B7 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -336,61 +940,118 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "AudioPluginHost"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - B9D79D85AC7DE5BED1B6547C = {isa = PBXTargetDependency; target = DE12B7643D374BFF7E4FEB1C; }; - 493C2C5E457692E5149C5525 = {isa = XCConfigurationList; buildConfigurations = ( - 8D1CA827F1EFD443BDCF198A, - C9295196717FABE454A210B7, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - E4ECAE24A646A7D1585F776C = {isa = XCConfigurationList; buildConfigurations = ( - C8B793AC1BEFBE7A99BE8352, - 49453CC5AD9F08D2738464AC, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 2429BB4D705CC57F49418CFB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D92C7BF86C9CCF6B4D14F809, - 443244451A0F2064D4767337, ); runOnlyForDeploymentPostprocessing = 0; }; - E8E94B3C187DA578BFCBDA98 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2E74188531792924F0C73142, - C8423A9611C8AAF27468847D, - 786AF545C1C1E4D11140C3DF, - 3E1689E23B9C85F03209DCEF, - F635D974599DEC2ED91E6A88, - A1B0416DA378BB0C3AD6F74B, - A0144A682BF4843C8CF53FE4, - 15CCE43D7DCFC649638919D4, - 5C4D406B924230F83E3580AD, - F4DD98B9310B679D50A2C8A6, - CAF0DE157C8F7D9F168AA3B6, - 0F20A4AE04736634F097F5A6, - 76A80851698FC773D2479B4E, - E4A926EF695823F0F13268FF, - A09E93F1B354E1FF8B3E9ABE, - 7DE202DC1D876F49266D9E7D, - 075C54DDDBDEA5AAD2F60154, - 2C3D221D2AA87F07B3F1044D, - C38D14DC58F1941DD5E4BF60, - 2727A191DB1BAAC9C04B9081, - 84BAFE82A102D9C350672689, ); runOnlyForDeploymentPostprocessing = 0; }; - C515A1FE1A53D3968C22FAEF = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 73E371F1B912FCCAE0CD7E5D, - 21D330A5B13178B12BEAFC3C, - B288A89F96704F142ED8E939, - 851C1165C9E4ACDD19C56A96, - AF42316D915057E930A5624E, - 2B4B9CF71F94BDD1E3AC89AE, - AC3BED74AC7C6D9F5739F38B, - E3CB85BA817BC9E3942A8AB0, - 70580743C3D5695F065FF698, - 3470F40DA5D68EC217872906, - E092A70431B046BF1F50A482, - E2BAA7CFC729809530FD71EE, - 68FBFDA1FE637B3EDA09A592, - BBA1733CF8B064A5FD0B4CF4, - A02C9F4C4B840C27B6CAFEBD, - 4DB15177DDC357F4503F88CF, ); runOnlyForDeploymentPostprocessing = 0; }; - DE12B7643D374BFF7E4FEB1C = {isa = PBXNativeTarget; buildConfigurationList = E4ECAE24A646A7D1585F776C; buildPhases = ( - 2429BB4D705CC57F49418CFB, - E8E94B3C187DA578BFCBDA98, - C515A1FE1A53D3968C22FAEF, ); buildRules = ( ); dependencies = ( ); name = "AudioPluginHost - App"; productName = AudioPluginHost; productReference = 8D8BBC353637DA442C5575DA; productType = "com.apple.product-type.application"; }; - ADE6E539DB98A302483A82D0 = {isa = PBXProject; buildConfigurationList = 493C2C5E457692E5149C5525; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { DE12B7643D374BFF7E4FEB1C = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 65BEFC705A89E5C8A9E35C97; projectDirPath = ""; projectRoot = ""; targets = (DE12B7643D374BFF7E4FEB1C); }; + ZERO_LINK = NO; + }; + name = Release; + }; + B9D79D85AC7DE5BED1B6547C = { + isa = PBXTargetDependency; + target = DE12B7643D374BFF7E4FEB1C; + }; + 493C2C5E457692E5149C5525 = { + isa = XCConfigurationList; + buildConfigurations = ( + 8D1CA827F1EFD443BDCF198A, + C9295196717FABE454A210B7, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + E4ECAE24A646A7D1585F776C = { + isa = XCConfigurationList; + buildConfigurations = ( + C8B793AC1BEFBE7A99BE8352, + 49453CC5AD9F08D2738464AC, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 2429BB4D705CC57F49418CFB = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D92C7BF86C9CCF6B4D14F809, + 443244451A0F2064D4767337, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8E94B3C187DA578BFCBDA98 = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E74188531792924F0C73142, + C8423A9611C8AAF27468847D, + 786AF545C1C1E4D11140C3DF, + 3E1689E23B9C85F03209DCEF, + F635D974599DEC2ED91E6A88, + A1B0416DA378BB0C3AD6F74B, + A0144A682BF4843C8CF53FE4, + 15CCE43D7DCFC649638919D4, + 5C4D406B924230F83E3580AD, + F4DD98B9310B679D50A2C8A6, + CAF0DE157C8F7D9F168AA3B6, + 0F20A4AE04736634F097F5A6, + 76A80851698FC773D2479B4E, + E4A926EF695823F0F13268FF, + A09E93F1B354E1FF8B3E9ABE, + 7DE202DC1D876F49266D9E7D, + 075C54DDDBDEA5AAD2F60154, + 2C3D221D2AA87F07B3F1044D, + C38D14DC58F1941DD5E4BF60, + 2727A191DB1BAAC9C04B9081, + 84BAFE82A102D9C350672689, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C515A1FE1A53D3968C22FAEF = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 73E371F1B912FCCAE0CD7E5D, + 21D330A5B13178B12BEAFC3C, + B288A89F96704F142ED8E939, + 851C1165C9E4ACDD19C56A96, + AF42316D915057E930A5624E, + 2B4B9CF71F94BDD1E3AC89AE, + AC3BED74AC7C6D9F5739F38B, + E3CB85BA817BC9E3942A8AB0, + 70580743C3D5695F065FF698, + 3470F40DA5D68EC217872906, + E092A70431B046BF1F50A482, + E2BAA7CFC729809530FD71EE, + 68FBFDA1FE637B3EDA09A592, + BBA1733CF8B064A5FD0B4CF4, + A02C9F4C4B840C27B6CAFEBD, + 4DB15177DDC357F4503F88CF, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DE12B7643D374BFF7E4FEB1C = { + isa = PBXNativeTarget; + buildConfigurationList = E4ECAE24A646A7D1585F776C; + buildPhases = ( + 2429BB4D705CC57F49418CFB, + E8E94B3C187DA578BFCBDA98, + C515A1FE1A53D3968C22FAEF, + ); + buildRules = ( ); + dependencies = ( ); + name = "AudioPluginHost - App"; + productName = AudioPluginHost; + productReference = 8D8BBC353637DA442C5575DA; + productType = "com.apple.product-type.application"; + }; + ADE6E539DB98A302483A82D0 = { + isa = PBXProject; + buildConfigurationList = 493C2C5E457692E5149C5525; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { DE12B7643D374BFF7E4FEB1C = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 65BEFC705A89E5C8A9E35C97; + projectDirPath = ""; + projectRoot = ""; + targets = (DE12B7643D374BFF7E4FEB1C); + }; }; rootObject = ADE6E539DB98A302483A82D0; } diff --git a/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist b/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist index bc0a8928..ef1b5254 100644 --- a/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist +++ b/extras/AudioPluginHost/Builds/MacOSX/Info-App.plist @@ -3,6 +3,8 @@ + NSMicrophoneUsageDescription + This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone. CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile diff --git a/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj index 5a140583..d7353969 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj @@ -15,8 +15,6 @@ {5666EAA2-C82B-D06A-5228-D0E810428536} - v120 - 8.1 - - v120 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -57,8 +51,6 @@ $(Platform)\$(Configuration)\App\ AudioPluginHost true - v120 - 8.1 @@ -71,8 +63,8 @@ Disabled ProgramDatabase - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -113,8 +105,8 @@ Full - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -160,6 +152,9 @@ true + + true + true @@ -490,6 +485,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -514,6 +575,9 @@ true + + true + true @@ -589,6 +653,9 @@ true + + true + true @@ -598,9 +665,15 @@ true + + true + true + + true + true @@ -655,6 +728,9 @@ true + + true + true @@ -937,6 +1013,9 @@ true + + true + true @@ -1324,10 +1403,13 @@ true - + true - + + true + + true @@ -1827,6 +1909,7 @@ + @@ -1975,13 +2058,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -1990,6 +2130,7 @@ + @@ -2001,6 +2142,7 @@ + @@ -2018,6 +2160,7 @@ + @@ -2055,6 +2198,7 @@ + @@ -2064,6 +2208,7 @@ + @@ -2073,6 +2218,7 @@ + @@ -2172,6 +2318,7 @@ + @@ -2264,8 +2411,9 @@ - + + @@ -2396,6 +2544,7 @@ + @@ -2436,6 +2585,7 @@ + @@ -2451,6 +2601,11 @@ + + + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj.filters index d73bb1e3..7afc1bca 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2013/AudioPluginHost_App.vcxproj.filters @@ -110,6 +110,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -284,6 +329,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -403,6 +451,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -742,6 +793,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -769,6 +886,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -862,6 +982,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -871,9 +994,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -928,6 +1057,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1234,6 +1366,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1639,12 +1774,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2238,6 +2376,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2682,6 +2823,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2700,9 +3015,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2727,6 +3039,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2760,6 +3075,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2811,6 +3129,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2922,6 +3243,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2949,6 +3273,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2976,6 +3303,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3273,6 +3603,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3549,12 +3882,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3945,6 +4281,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4065,6 +4404,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4106,6 +4448,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj index 03cea25f..61878faa 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj @@ -15,8 +15,6 @@ {5666EAA2-C82B-D06A-5228-D0E810428536} - v140 - 8.1 false false v140 - v140 8.1 false true v140 - v140 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v140 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ AudioPluginHost true - v140 - 8.1 @@ -73,8 +63,8 @@ Disabled ProgramDatabase - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -114,8 +104,8 @@ Full - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -160,6 +150,9 @@ true + + true + true @@ -490,6 +483,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -514,6 +573,9 @@ true + + true + true @@ -589,6 +651,9 @@ true + + true + true @@ -598,9 +663,15 @@ true + + true + true + + true + true @@ -655,6 +726,9 @@ true + + true + true @@ -937,6 +1011,9 @@ true + + true + true @@ -1324,10 +1401,13 @@ true - + true - + + true + + true @@ -1827,6 +1907,7 @@ + @@ -1975,13 +2056,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -1990,6 +2128,7 @@ + @@ -2001,6 +2140,7 @@ + @@ -2018,6 +2158,7 @@ + @@ -2055,6 +2196,7 @@ + @@ -2064,6 +2206,7 @@ + @@ -2073,6 +2216,7 @@ + @@ -2172,6 +2316,7 @@ + @@ -2264,8 +2409,9 @@ - + + @@ -2396,6 +2542,7 @@ + @@ -2436,6 +2583,7 @@ + @@ -2451,6 +2599,11 @@ + + + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters index 3425cca7..e1bf89e0 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters @@ -110,6 +110,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -284,6 +329,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -403,6 +451,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -742,6 +793,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -769,6 +886,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -862,6 +982,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -871,9 +994,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -928,6 +1057,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1234,6 +1366,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1639,12 +1774,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2238,6 +2376,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2682,6 +2823,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2700,9 +3015,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2727,6 +3039,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2760,6 +3075,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2811,6 +3129,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2922,6 +3243,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2949,6 +3273,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2976,6 +3303,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3273,6 +3603,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3549,12 +3882,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3945,6 +4281,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4065,6 +4404,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4106,6 +4448,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj index 5d76b059..f6645ecc 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj @@ -15,8 +15,6 @@ {5666EAA2-C82B-D06A-5228-D0E810428536} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ AudioPluginHost true - v141 - 10.0.16299.0 @@ -73,8 +63,8 @@ Disabled ProgramDatabase - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -84,6 +74,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -114,8 +105,8 @@ Full - C:\SDKs\VST_SDK\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + ..\..\..\..\modules\juce_audio_processors\format_types\VST3_SDK;..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -125,6 +116,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -160,6 +152,9 @@ true + + true + true @@ -490,6 +485,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -514,6 +575,9 @@ true + + true + true @@ -589,6 +653,9 @@ true + + true + true @@ -598,9 +665,15 @@ true + + true + true + + true + true @@ -655,6 +728,9 @@ true + + true + true @@ -937,6 +1013,9 @@ true + + true + true @@ -1324,10 +1403,13 @@ true - + true - + + true + + true @@ -1827,6 +1909,7 @@ + @@ -1975,13 +2058,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -1990,6 +2130,7 @@ + @@ -2001,6 +2142,7 @@ + @@ -2018,6 +2160,7 @@ + @@ -2055,6 +2198,7 @@ + @@ -2064,6 +2208,7 @@ + @@ -2073,6 +2218,7 @@ + @@ -2172,6 +2318,7 @@ + @@ -2264,8 +2411,9 @@ - + + @@ -2396,6 +2544,7 @@ + @@ -2436,6 +2585,7 @@ + @@ -2451,6 +2601,11 @@ + + + + + diff --git a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters index 33384a78..f61d76de 100644 --- a/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters +++ b/extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters @@ -110,6 +110,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -284,6 +329,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -403,6 +451,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -742,6 +793,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -769,6 +886,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -862,6 +982,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -871,9 +994,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -928,6 +1057,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1234,6 +1366,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1639,12 +1774,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2238,6 +2376,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2682,6 +2823,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2700,9 +3015,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2727,6 +3039,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2760,6 +3075,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2811,6 +3129,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2922,6 +3243,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2949,6 +3273,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2976,6 +3303,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3273,6 +3603,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3549,12 +3882,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3945,6 +4281,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4065,6 +4404,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4106,6 +4448,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj index a3452b3e..349d1ce3 100644 --- a/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj +++ b/extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj @@ -5,197 +5,768 @@ }; objectVersion = 46; objects = { - - FCDB1F8A93F59E0F97821456 = {isa = PBXBuildFile; fileRef = 8D8BBC353637DA442C5575DA; }; - 73E371F1B912FCCAE0CD7E5D = {isa = PBXBuildFile; fileRef = 86CA337014D3F67E906FFD28; }; - 21D330A5B13178B12BEAFC3C = {isa = PBXBuildFile; fileRef = D4EBC17BDB7F88CCBC76730B; }; - 851C1165C9E4ACDD19C56A96 = {isa = PBXBuildFile; fileRef = 942A0F04EFB8D0B2FF9780BA; }; - AF42316D915057E930A5624E = {isa = PBXBuildFile; fileRef = A4B568E26157FC282214976F; }; - E3CB85BA817BC9E3942A8AB0 = {isa = PBXBuildFile; fileRef = 9F9B445E6755CAA19E4344ED; }; - 70580743C3D5695F065FF698 = {isa = PBXBuildFile; fileRef = E68018DE199135B7F738FB17; }; - 1570FCC5CDB7A44DF0077E39 = {isa = PBXBuildFile; fileRef = 2F7D965A1284CEF0B20EB657; }; - B0D5475F716126465FCE1586 = {isa = PBXBuildFile; fileRef = CFFA8E9A7820C5A27B4393C9; }; - 3470F40DA5D68EC217872906 = {isa = PBXBuildFile; fileRef = 31D55A751C790CB81F58DDB7; }; - E092A70431B046BF1F50A482 = {isa = PBXBuildFile; fileRef = 5AF0CA7CDFCA90B4DE1F55C3; }; - 92EE84159C7027A137F06204 = {isa = PBXBuildFile; fileRef = 66643EDF46AE8C5B7956B91D; }; - 9056B642BEF870098DE344E5 = {isa = PBXBuildFile; fileRef = 03FA420AACDD03D50AA16E4A; }; - 7DE81C004B0FBC563040CC5F = {isa = PBXBuildFile; fileRef = B1CD9599EB12D77E8AF9241D; }; - 2AB9A26C9359C40CA0A937ED = {isa = PBXBuildFile; fileRef = D0026F0A29B486D87E92BB8B; }; - A02C9F4C4B840C27B6CAFEBD = {isa = PBXBuildFile; fileRef = 89309C0C5F3269BD06BE7F27; }; - 50AFD116DCA6EC228EFB322D = {isa = PBXBuildFile; fileRef = F9EDC54DFBCF3A63E0AA5D73; }; - 59F4F23BFFDAB414B4801F85 = {isa = PBXBuildFile; fileRef = 29E0972229FB44D969035B4E; }; - 443244451A0F2064D4767337 = {isa = PBXBuildFile; fileRef = 2A6983F82B13F9E8B10299AE; }; - 2E74188531792924F0C73142 = {isa = PBXBuildFile; fileRef = 05863BDFC582C9552A86DF49; }; - C8423A9611C8AAF27468847D = {isa = PBXBuildFile; fileRef = 336FD30C38BD0A176161B8AE; }; - 786AF545C1C1E4D11140C3DF = {isa = PBXBuildFile; fileRef = 43647951ECC7F030B9953965; }; - 3E1689E23B9C85F03209DCEF = {isa = PBXBuildFile; fileRef = 3D78A731234A833CA112AE45; }; - F635D974599DEC2ED91E6A88 = {isa = PBXBuildFile; fileRef = 04AABCD3491318FB32E844B4; }; - A1B0416DA378BB0C3AD6F74B = {isa = PBXBuildFile; fileRef = A66EFAC64B1B67B536C73415; }; - A0144A682BF4843C8CF53FE4 = {isa = PBXBuildFile; fileRef = 6D107D7946DC5976B766345B; }; - 15CCE43D7DCFC649638919D4 = {isa = PBXBuildFile; fileRef = 4C7D82F9274A4F9DBF11235C; }; - 5C4D406B924230F83E3580AD = {isa = PBXBuildFile; fileRef = 65968EA1B476D71F14DE1D58; }; - F4DD98B9310B679D50A2C8A6 = {isa = PBXBuildFile; fileRef = 5D250A57C7DEA80248F30EED; }; - CAF0DE157C8F7D9F168AA3B6 = {isa = PBXBuildFile; fileRef = 5FBD6C402617272052BB4D81; }; - 0F20A4AE04736634F097F5A6 = {isa = PBXBuildFile; fileRef = B285CAB91AE928C476CA4F9C; }; - 76A80851698FC773D2479B4E = {isa = PBXBuildFile; fileRef = 683CEE986A2467C850FE99E6; }; - E4A926EF695823F0F13268FF = {isa = PBXBuildFile; fileRef = B8E24A5CEE6B7055537725CF; }; - A09E93F1B354E1FF8B3E9ABE = {isa = PBXBuildFile; fileRef = 5EF1D381F42AA8764597F189; }; - 7DE202DC1D876F49266D9E7D = {isa = PBXBuildFile; fileRef = 8290D7BAC160B3A56B66891A; }; - 075C54DDDBDEA5AAD2F60154 = {isa = PBXBuildFile; fileRef = 82800DBA287EF4BAB13B42FB; }; - 2C3D221D2AA87F07B3F1044D = {isa = PBXBuildFile; fileRef = 8FE7B37CDE0818DB27BDDEBD; }; - C38D14DC58F1941DD5E4BF60 = {isa = PBXBuildFile; fileRef = 2BE6C2DFD6EBB9A89109AEB5; }; - 2727A191DB1BAAC9C04B9081 = {isa = PBXBuildFile; fileRef = 37E4D5C341406B7072120006; }; - 84BAFE82A102D9C350672689 = {isa = PBXBuildFile; fileRef = 29D746FC68F69751796671A2; }; - 03FA420AACDD03D50AA16E4A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 04AABCD3491318FB32E844B4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainHostWindow.cpp; path = ../../Source/UI/MainHostWindow.cpp; sourceTree = "SOURCE_ROOT"; }; - 04DB9A49969ECC740CC25665 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = GraphEditorPanel.h; path = ../../Source/UI/GraphEditorPanel.h; sourceTree = "SOURCE_ROOT"; }; - 05863BDFC582C9552A86DF49 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterGraph.cpp; path = ../../Source/Filters/FilterGraph.cpp; sourceTree = "SOURCE_ROOT"; }; - 1DADAD8E34AAF4AFF1C69DC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; - 29D746FC68F69751796671A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_video.mm"; path = "../../JuceLibraryCode/include_juce_video.mm"; sourceTree = "SOURCE_ROOT"; }; - 29E0972229FB44D969035B4E = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = AudioPluginHost/Images.xcassets; sourceTree = "SOURCE_ROOT"; }; - 2A6983F82B13F9E8B10299AE = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - 2BE6C2DFD6EBB9A89109AEB5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - 2F7D965A1284CEF0B20EB657 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 30F22843EFEBF7AA841EB4D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 31D55A751C790CB81F58DDB7 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 336FD30C38BD0A176161B8AE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = FilterIOConfiguration.cpp; path = ../../Source/Filters/FilterIOConfiguration.cpp; sourceTree = "SOURCE_ROOT"; }; - 37E4D5C341406B7072120006 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 3C070DD522CDD11FFC87425D = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - 3D57FE2A8877F12A61054726 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 3D78A731234A833CA112AE45 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = GraphEditorPanel.cpp; path = ../../Source/UI/GraphEditorPanel.cpp; sourceTree = "SOURCE_ROOT"; }; - 43647951ECC7F030B9953965 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = InternalFilters.cpp; path = ../../Source/Filters/InternalFilters.cpp; sourceTree = "SOURCE_ROOT"; }; - 4C7D82F9274A4F9DBF11235C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 5313EB852E41EE58B199B9A2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 545D57A6AA801B38548B0CAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterGraph.h; path = ../../Source/Filters/FilterGraph.h; sourceTree = "SOURCE_ROOT"; }; - 57DF618F1DE781556B7AFC32 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 59842A98E5EBBC54B50C04CD = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - 5AF0CA7CDFCA90B4DE1F55C3 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 5D250A57C7DEA80248F30EED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - 5EF1D381F42AA8764597F189 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - 5FBD6C402617272052BB4D81 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - 65968EA1B476D71F14DE1D58 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - 66643EDF46AE8C5B7956B91D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 683CEE986A2467C850FE99E6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 6A71B2BCAC4239072BC2BD7E = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - 6D107D7946DC5976B766345B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; - 725D0D9C8C7FF7B3FB3020ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FilterIOConfiguration.h; path = ../../Source/Filters/FilterIOConfiguration.h; sourceTree = "SOURCE_ROOT"; }; - 81C1A7770E082F56FE5A90A7 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 82800DBA287EF4BAB13B42FB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 8290D7BAC160B3A56B66891A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 86CA337014D3F67E906FFD28 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 89309C0C5F3269BD06BE7F27 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 8D8BBC353637DA442C5575DA = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plugin Host.app"; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 8FE7B37CDE0818DB27BDDEBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 938AE72315C6C93949F6220E = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 942A0F04EFB8D0B2FF9780BA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 94CB96C8E4B51F52776C2638 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 97918AB43AD460AFA8FA2FFE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = ../../Source/UI/PluginWindow.h; sourceTree = "SOURCE_ROOT"; }; - 9EBEE3AE5856E877478607C7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = InternalFilters.h; path = ../../Source/Filters/InternalFilters.h; sourceTree = "SOURCE_ROOT"; }; - 9F9B445E6755CAA19E4344ED = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - A4B568E26157FC282214976F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; - A5DFC13E4F09134B0D226A3E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MainHostWindow.h; path = ../../Source/UI/MainHostWindow.h; sourceTree = "SOURCE_ROOT"; }; - A5E7CA8A71D049BE2BD33861 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - A66EFAC64B1B67B536C73415 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = HostStartup.cpp; path = ../../Source/HostStartup.cpp; sourceTree = "SOURCE_ROOT"; }; - B1CD9599EB12D77E8AF9241D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - B285CAB91AE928C476CA4F9C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - B2A1E626CC120982805754F6 = {isa = PBXFileReference; lastKnownFileType = image.png; name = JUCEAppIcon.png; path = ../../Source/JUCEAppIcon.png; sourceTree = "SOURCE_ROOT"; }; - B86B918291E1090C6A720971 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - B8E24A5CEE6B7055537725CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - CFFA8E9A7820C5A27B4393C9 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - D0026F0A29B486D87E92BB8B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - D4EBC17BDB7F88CCBC76730B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - DDE115D3084ACA6DD6AA4471 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_video"; path = "../../../../modules/juce_video"; sourceTree = "SOURCE_ROOT"; }; - E68018DE199135B7F738FB17 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - F299BECFB2AEA6105F014848 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - F9AC862E9A3583B6C1488EE0 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - F9EDC54DFBCF3A63E0AA5D73 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - FA21631C5536EA3DF55C7FA6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - FAF867E9E731D0880D40511F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - AA37F82D57C9BB4BE78FCCB9 = {isa = PBXGroup; children = ( - 05863BDFC582C9552A86DF49, - 545D57A6AA801B38548B0CAC, - 336FD30C38BD0A176161B8AE, - 725D0D9C8C7FF7B3FB3020ED, - 43647951ECC7F030B9953965, - 9EBEE3AE5856E877478607C7, ); name = Filters; sourceTree = ""; }; - DE7B77306553B1204071B39A = {isa = PBXGroup; children = ( - 3D78A731234A833CA112AE45, - 04DB9A49969ECC740CC25665, - 04AABCD3491318FB32E844B4, - A5DFC13E4F09134B0D226A3E, - 97918AB43AD460AFA8FA2FFE, ); name = UI; sourceTree = ""; }; - B225B7F2CAABD28A41E7C339 = {isa = PBXGroup; children = ( - AA37F82D57C9BB4BE78FCCB9, - DE7B77306553B1204071B39A, - A66EFAC64B1B67B536C73415, - B2A1E626CC120982805754F6, ); name = Source; sourceTree = ""; }; - 97790EAEA01CFA5C3CA9737A = {isa = PBXGroup; children = ( - B225B7F2CAABD28A41E7C339, ); name = AudioPluginHost; sourceTree = ""; }; - 9D8FE1F65CAD416AA606C47A = {isa = PBXGroup; children = ( - 6A71B2BCAC4239072BC2BD7E, - 5313EB852E41EE58B199B9A2, - F9AC862E9A3583B6C1488EE0, - FAF867E9E731D0880D40511F, - 3C070DD522CDD11FFC87425D, - 3D57FE2A8877F12A61054726, - FA21631C5536EA3DF55C7FA6, - B86B918291E1090C6A720971, - 59842A98E5EBBC54B50C04CD, - 94CB96C8E4B51F52776C2638, - 938AE72315C6C93949F6220E, - F299BECFB2AEA6105F014848, - 81C1A7770E082F56FE5A90A7, - DDE115D3084ACA6DD6AA4471, ); name = "JUCE Modules"; sourceTree = ""; }; - 7E30376DDAD775FEFE64944C = {isa = PBXGroup; children = ( - 30F22843EFEBF7AA841EB4D6, - 6D107D7946DC5976B766345B, - 1DADAD8E34AAF4AFF1C69DC4, - 4C7D82F9274A4F9DBF11235C, - 65968EA1B476D71F14DE1D58, - 5D250A57C7DEA80248F30EED, - 5FBD6C402617272052BB4D81, - B285CAB91AE928C476CA4F9C, - 683CEE986A2467C850FE99E6, - B8E24A5CEE6B7055537725CF, - 5EF1D381F42AA8764597F189, - 8290D7BAC160B3A56B66891A, - 82800DBA287EF4BAB13B42FB, - 8FE7B37CDE0818DB27BDDEBD, - 2BE6C2DFD6EBB9A89109AEB5, - 37E4D5C341406B7072120006, - 29D746FC68F69751796671A2, - A5E7CA8A71D049BE2BD33861, ); name = "JUCE Library Code"; sourceTree = ""; }; - A97EE73C79DA3F729D46AF48 = {isa = PBXGroup; children = ( - 57DF618F1DE781556B7AFC32, - 29E0972229FB44D969035B4E, - 2A6983F82B13F9E8B10299AE, ); name = Resources; sourceTree = ""; }; - D1C4804CD275CB57A5C89A2D = {isa = PBXGroup; children = ( - 86CA337014D3F67E906FFD28, - D4EBC17BDB7F88CCBC76730B, - 942A0F04EFB8D0B2FF9780BA, - A4B568E26157FC282214976F, - 9F9B445E6755CAA19E4344ED, - E68018DE199135B7F738FB17, - 2F7D965A1284CEF0B20EB657, - CFFA8E9A7820C5A27B4393C9, - 31D55A751C790CB81F58DDB7, - 5AF0CA7CDFCA90B4DE1F55C3, - 66643EDF46AE8C5B7956B91D, - 03FA420AACDD03D50AA16E4A, - B1CD9599EB12D77E8AF9241D, - D0026F0A29B486D87E92BB8B, - 89309C0C5F3269BD06BE7F27, - F9EDC54DFBCF3A63E0AA5D73, ); name = Frameworks; sourceTree = ""; }; - D85C0D11EE4F6C73B9EB5BCD = {isa = PBXGroup; children = ( - 8D8BBC353637DA442C5575DA, ); name = Products; sourceTree = ""; }; - 65BEFC705A89E5C8A9E35C97 = {isa = PBXGroup; children = ( - 97790EAEA01CFA5C3CA9737A, - 9D8FE1F65CAD416AA606C47A, - 7E30376DDAD775FEFE64944C, - A97EE73C79DA3F729D46AF48, - D1C4804CD275CB57A5C89A2D, - D85C0D11EE4F6C73B9EB5BCD, ); name = Source; sourceTree = ""; }; - C8B793AC1BEFBE7A99BE8352 = {isa = XCBuildConfiguration; buildSettings = { + FCDB1F8A93F59E0F97821456 = { + isa = PBXBuildFile; + fileRef = 8D8BBC353637DA442C5575DA; + }; + 73E371F1B912FCCAE0CD7E5D = { + isa = PBXBuildFile; + fileRef = 86CA337014D3F67E906FFD28; + }; + 21D330A5B13178B12BEAFC3C = { + isa = PBXBuildFile; + fileRef = D4EBC17BDB7F88CCBC76730B; + }; + 851C1165C9E4ACDD19C56A96 = { + isa = PBXBuildFile; + fileRef = 942A0F04EFB8D0B2FF9780BA; + }; + AF42316D915057E930A5624E = { + isa = PBXBuildFile; + fileRef = A4B568E26157FC282214976F; + }; + E3CB85BA817BC9E3942A8AB0 = { + isa = PBXBuildFile; + fileRef = 9F9B445E6755CAA19E4344ED; + }; + 70580743C3D5695F065FF698 = { + isa = PBXBuildFile; + fileRef = E68018DE199135B7F738FB17; + }; + 1570FCC5CDB7A44DF0077E39 = { + isa = PBXBuildFile; + fileRef = 2F7D965A1284CEF0B20EB657; + }; + B0D5475F716126465FCE1586 = { + isa = PBXBuildFile; + fileRef = CFFA8E9A7820C5A27B4393C9; + }; + 3470F40DA5D68EC217872906 = { + isa = PBXBuildFile; + fileRef = 31D55A751C790CB81F58DDB7; + }; + E092A70431B046BF1F50A482 = { + isa = PBXBuildFile; + fileRef = 5AF0CA7CDFCA90B4DE1F55C3; + }; + 92EE84159C7027A137F06204 = { + isa = PBXBuildFile; + fileRef = 66643EDF46AE8C5B7956B91D; + }; + 9056B642BEF870098DE344E5 = { + isa = PBXBuildFile; + fileRef = 03FA420AACDD03D50AA16E4A; + }; + 7DE81C004B0FBC563040CC5F = { + isa = PBXBuildFile; + fileRef = B1CD9599EB12D77E8AF9241D; + }; + 2AB9A26C9359C40CA0A937ED = { + isa = PBXBuildFile; + fileRef = D0026F0A29B486D87E92BB8B; + }; + A02C9F4C4B840C27B6CAFEBD = { + isa = PBXBuildFile; + fileRef = 89309C0C5F3269BD06BE7F27; + }; + 50AFD116DCA6EC228EFB322D = { + isa = PBXBuildFile; + fileRef = F9EDC54DFBCF3A63E0AA5D73; + }; + 59F4F23BFFDAB414B4801F85 = { + isa = PBXBuildFile; + fileRef = 29E0972229FB44D969035B4E; + }; + 443244451A0F2064D4767337 = { + isa = PBXBuildFile; + fileRef = 2A6983F82B13F9E8B10299AE; + }; + 2E74188531792924F0C73142 = { + isa = PBXBuildFile; + fileRef = 05863BDFC582C9552A86DF49; + }; + C8423A9611C8AAF27468847D = { + isa = PBXBuildFile; + fileRef = 336FD30C38BD0A176161B8AE; + }; + 786AF545C1C1E4D11140C3DF = { + isa = PBXBuildFile; + fileRef = 43647951ECC7F030B9953965; + }; + 3E1689E23B9C85F03209DCEF = { + isa = PBXBuildFile; + fileRef = 3D78A731234A833CA112AE45; + }; + F635D974599DEC2ED91E6A88 = { + isa = PBXBuildFile; + fileRef = 04AABCD3491318FB32E844B4; + }; + A1B0416DA378BB0C3AD6F74B = { + isa = PBXBuildFile; + fileRef = A66EFAC64B1B67B536C73415; + }; + A0144A682BF4843C8CF53FE4 = { + isa = PBXBuildFile; + fileRef = 6D107D7946DC5976B766345B; + }; + 15CCE43D7DCFC649638919D4 = { + isa = PBXBuildFile; + fileRef = 4C7D82F9274A4F9DBF11235C; + }; + 5C4D406B924230F83E3580AD = { + isa = PBXBuildFile; + fileRef = 65968EA1B476D71F14DE1D58; + }; + F4DD98B9310B679D50A2C8A6 = { + isa = PBXBuildFile; + fileRef = 5D250A57C7DEA80248F30EED; + }; + CAF0DE157C8F7D9F168AA3B6 = { + isa = PBXBuildFile; + fileRef = 5FBD6C402617272052BB4D81; + }; + 0F20A4AE04736634F097F5A6 = { + isa = PBXBuildFile; + fileRef = B285CAB91AE928C476CA4F9C; + }; + 76A80851698FC773D2479B4E = { + isa = PBXBuildFile; + fileRef = 683CEE986A2467C850FE99E6; + }; + E4A926EF695823F0F13268FF = { + isa = PBXBuildFile; + fileRef = B8E24A5CEE6B7055537725CF; + }; + A09E93F1B354E1FF8B3E9ABE = { + isa = PBXBuildFile; + fileRef = 5EF1D381F42AA8764597F189; + }; + 7DE202DC1D876F49266D9E7D = { + isa = PBXBuildFile; + fileRef = 8290D7BAC160B3A56B66891A; + }; + 075C54DDDBDEA5AAD2F60154 = { + isa = PBXBuildFile; + fileRef = 82800DBA287EF4BAB13B42FB; + }; + 2C3D221D2AA87F07B3F1044D = { + isa = PBXBuildFile; + fileRef = 8FE7B37CDE0818DB27BDDEBD; + }; + C38D14DC58F1941DD5E4BF60 = { + isa = PBXBuildFile; + fileRef = 2BE6C2DFD6EBB9A89109AEB5; + }; + 2727A191DB1BAAC9C04B9081 = { + isa = PBXBuildFile; + fileRef = 37E4D5C341406B7072120006; + }; + 84BAFE82A102D9C350672689 = { + isa = PBXBuildFile; + fileRef = 29D746FC68F69751796671A2; + }; + 03FA420AACDD03D50AA16E4A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = System/Library/Frameworks/Foundation.framework; + sourceTree = SDKROOT; + }; + 04AABCD3491318FB32E844B4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = MainHostWindow.cpp; + path = ../../Source/UI/MainHostWindow.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 04DB9A49969ECC740CC25665 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = GraphEditorPanel.h; + path = ../../Source/UI/GraphEditorPanel.h; + sourceTree = "SOURCE_ROOT"; + }; + 05863BDFC582C9552A86DF49 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = FilterGraph.cpp; + path = ../../Source/Filters/FilterGraph.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 1DADAD8E34AAF4AFF1C69DC4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = BinaryData.h; + path = ../../JuceLibraryCode/BinaryData.h; + sourceTree = "SOURCE_ROOT"; + }; + 29D746FC68F69751796671A2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_video.mm"; + path = "../../JuceLibraryCode/include_juce_video.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 29E0972229FB44D969035B4E = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + name = Images.xcassets; + path = AudioPluginHost/Images.xcassets; + sourceTree = "SOURCE_ROOT"; + }; + 2A6983F82B13F9E8B10299AE = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + 2BE6C2DFD6EBB9A89109AEB5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 2F7D965A1284CEF0B20EB657 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreGraphics.framework; + path = System/Library/Frameworks/CoreGraphics.framework; + sourceTree = SDKROOT; + }; + 30F22843EFEBF7AA841EB4D6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 31D55A751C790CB81F58DDB7 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMedia.framework; + path = System/Library/Frameworks/CoreMedia.framework; + sourceTree = SDKROOT; + }; + 336FD30C38BD0A176161B8AE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = FilterIOConfiguration.cpp; + path = ../../Source/Filters/FilterIOConfiguration.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 37E4D5C341406B7072120006 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 3C070DD522CDD11FFC87425D = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + 3D57FE2A8877F12A61054726 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 3D78A731234A833CA112AE45 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = GraphEditorPanel.cpp; + path = ../../Source/UI/GraphEditorPanel.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 43647951ECC7F030B9953965 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = InternalFilters.cpp; + path = ../../Source/Filters/InternalFilters.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 4C7D82F9274A4F9DBF11235C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5313EB852E41EE58B199B9A2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 545D57A6AA801B38548B0CAC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = FilterGraph.h; + path = ../../Source/Filters/FilterGraph.h; + sourceTree = "SOURCE_ROOT"; + }; + 57DF618F1DE781556B7AFC32 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 59842A98E5EBBC54B50C04CD = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + 5AF0CA7CDFCA90B4DE1F55C3 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 5D250A57C7DEA80248F30EED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5EF1D381F42AA8764597F189 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5FBD6C402617272052BB4D81 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 65968EA1B476D71F14DE1D58 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 66643EDF46AE8C5B7956B91D = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreText.framework; + path = System/Library/Frameworks/CoreText.framework; + sourceTree = SDKROOT; + }; + 683CEE986A2467C850FE99E6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 6A71B2BCAC4239072BC2BD7E = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 6D107D7946DC5976B766345B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = BinaryData.cpp; + path = ../../JuceLibraryCode/BinaryData.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 725D0D9C8C7FF7B3FB3020ED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = FilterIOConfiguration.h; + path = ../../Source/Filters/FilterIOConfiguration.h; + sourceTree = "SOURCE_ROOT"; + }; + 81C1A7770E082F56FE5A90A7 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 82800DBA287EF4BAB13B42FB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 8290D7BAC160B3A56B66891A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 86CA337014D3F67E906FFD28 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 89309C0C5F3269BD06BE7F27 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 8D8BBC353637DA442C5575DA = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = "Plugin Host.app"; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 8FE7B37CDE0818DB27BDDEBD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 938AE72315C6C93949F6220E = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 942A0F04EFB8D0B2FF9780BA = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + 94CB96C8E4B51F52776C2638 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 97918AB43AD460AFA8FA2FFE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = PluginWindow.h; + path = ../../Source/UI/PluginWindow.h; + sourceTree = "SOURCE_ROOT"; + }; + 9EBEE3AE5856E877478607C7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = InternalFilters.h; + path = ../../Source/Filters/InternalFilters.h; + sourceTree = "SOURCE_ROOT"; + }; + 9F9B445E6755CAA19E4344ED = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + A4B568E26157FC282214976F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVKit.framework; + path = System/Library/Frameworks/AVKit.framework; + sourceTree = SDKROOT; + }; + A5DFC13E4F09134B0D226A3E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MainHostWindow.h; + path = ../../Source/UI/MainHostWindow.h; + sourceTree = "SOURCE_ROOT"; + }; + A5E7CA8A71D049BE2BD33861 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + A66EFAC64B1B67B536C73415 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = HostStartup.cpp; + path = ../../Source/HostStartup.cpp; + sourceTree = "SOURCE_ROOT"; + }; + B1CD9599EB12D77E8AF9241D = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = MobileCoreServices.framework; + path = System/Library/Frameworks/MobileCoreServices.framework; + sourceTree = SDKROOT; + }; + B285CAB91AE928C476CA4F9C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + B2A1E626CC120982805754F6 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = JUCEAppIcon.png; + path = ../../Source/JUCEAppIcon.png; + sourceTree = "SOURCE_ROOT"; + }; + B86B918291E1090C6A720971 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + B8E24A5CEE6B7055537725CF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + CFFA8E9A7820C5A27B4393C9 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreImage.framework; + path = System/Library/Frameworks/CoreImage.framework; + sourceTree = SDKROOT; + }; + D0026F0A29B486D87E92BB8B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGLES.framework; + path = System/Library/Frameworks/OpenGLES.framework; + sourceTree = SDKROOT; + }; + D4EBC17BDB7F88CCBC76730B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + DDE115D3084ACA6DD6AA4471 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_video"; + path = "../../../../modules/juce_video"; + sourceTree = "SOURCE_ROOT"; + }; + E68018DE199135B7F738FB17 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + F299BECFB2AEA6105F014848 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + F9AC862E9A3583B6C1488EE0 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + F9EDC54DFBCF3A63E0AA5D73 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = UIKit.framework; + path = System/Library/Frameworks/UIKit.framework; + sourceTree = SDKROOT; + }; + FA21631C5536EA3DF55C7FA6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + FAF867E9E731D0880D40511F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + AA37F82D57C9BB4BE78FCCB9 = { + isa = PBXGroup; + children = ( + 05863BDFC582C9552A86DF49, + 545D57A6AA801B38548B0CAC, + 336FD30C38BD0A176161B8AE, + 725D0D9C8C7FF7B3FB3020ED, + 43647951ECC7F030B9953965, + 9EBEE3AE5856E877478607C7, + ); + name = Filters; + sourceTree = ""; + }; + DE7B77306553B1204071B39A = { + isa = PBXGroup; + children = ( + 3D78A731234A833CA112AE45, + 04DB9A49969ECC740CC25665, + 04AABCD3491318FB32E844B4, + A5DFC13E4F09134B0D226A3E, + 97918AB43AD460AFA8FA2FFE, + ); + name = UI; + sourceTree = ""; + }; + B225B7F2CAABD28A41E7C339 = { + isa = PBXGroup; + children = ( + AA37F82D57C9BB4BE78FCCB9, + DE7B77306553B1204071B39A, + A66EFAC64B1B67B536C73415, + B2A1E626CC120982805754F6, + ); + name = Source; + sourceTree = ""; + }; + 97790EAEA01CFA5C3CA9737A = { + isa = PBXGroup; + children = ( + B225B7F2CAABD28A41E7C339, + ); + name = AudioPluginHost; + sourceTree = ""; + }; + 9D8FE1F65CAD416AA606C47A = { + isa = PBXGroup; + children = ( + 6A71B2BCAC4239072BC2BD7E, + 5313EB852E41EE58B199B9A2, + F9AC862E9A3583B6C1488EE0, + FAF867E9E731D0880D40511F, + 3C070DD522CDD11FFC87425D, + 3D57FE2A8877F12A61054726, + FA21631C5536EA3DF55C7FA6, + B86B918291E1090C6A720971, + 59842A98E5EBBC54B50C04CD, + 94CB96C8E4B51F52776C2638, + 938AE72315C6C93949F6220E, + F299BECFB2AEA6105F014848, + 81C1A7770E082F56FE5A90A7, + DDE115D3084ACA6DD6AA4471, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 7E30376DDAD775FEFE64944C = { + isa = PBXGroup; + children = ( + 30F22843EFEBF7AA841EB4D6, + 6D107D7946DC5976B766345B, + 1DADAD8E34AAF4AFF1C69DC4, + 4C7D82F9274A4F9DBF11235C, + 65968EA1B476D71F14DE1D58, + 5D250A57C7DEA80248F30EED, + 5FBD6C402617272052BB4D81, + B285CAB91AE928C476CA4F9C, + 683CEE986A2467C850FE99E6, + B8E24A5CEE6B7055537725CF, + 5EF1D381F42AA8764597F189, + 8290D7BAC160B3A56B66891A, + 82800DBA287EF4BAB13B42FB, + 8FE7B37CDE0818DB27BDDEBD, + 2BE6C2DFD6EBB9A89109AEB5, + 37E4D5C341406B7072120006, + 29D746FC68F69751796671A2, + A5E7CA8A71D049BE2BD33861, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + A97EE73C79DA3F729D46AF48 = { + isa = PBXGroup; + children = ( + 57DF618F1DE781556B7AFC32, + 29E0972229FB44D969035B4E, + 2A6983F82B13F9E8B10299AE, + ); + name = Resources; + sourceTree = ""; + }; + D1C4804CD275CB57A5C89A2D = { + isa = PBXGroup; + children = ( + 86CA337014D3F67E906FFD28, + D4EBC17BDB7F88CCBC76730B, + 942A0F04EFB8D0B2FF9780BA, + A4B568E26157FC282214976F, + 9F9B445E6755CAA19E4344ED, + E68018DE199135B7F738FB17, + 2F7D965A1284CEF0B20EB657, + CFFA8E9A7820C5A27B4393C9, + 31D55A751C790CB81F58DDB7, + 5AF0CA7CDFCA90B4DE1F55C3, + 66643EDF46AE8C5B7956B91D, + 03FA420AACDD03D50AA16E4A, + B1CD9599EB12D77E8AF9241D, + D0026F0A29B486D87E92BB8B, + 89309C0C5F3269BD06BE7F27, + F9EDC54DFBCF3A63E0AA5D73, + ); + name = Frameworks; + sourceTree = ""; + }; + D85C0D11EE4F6C73B9EB5BCD = { + isa = PBXGroup; + children = ( + 8D8BBC353637DA442C5575DA, + ); + name = Products; + sourceTree = ""; + }; + 65BEFC705A89E5C8A9E35C97 = { + isa = PBXGroup; + children = ( + 97790EAEA01CFA5C3CA9737A, + 9D8FE1F65CAD416AA606C47A, + 7E30376DDAD775FEFE64944C, + A97EE73C79DA3F729D46AF48, + D1C4804CD275CB57A5C89A2D, + D85C0D11EE4F6C73B9EB5BCD, + ); + name = Source; + sourceTree = ""; + }; + C8B793AC1BEFBE7A99BE8352 = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -218,15 +789,28 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("~/SDKs/VST_SDK/VST3_SDK", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = com.roli.juce.pluginhost; - USE_HEADERMAP = NO; }; name = Debug; }; - 49453CC5AD9F08D2738464AC = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "Plugin Host"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 49453CC5AD9F08D2738464AC = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -249,28 +833,44 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("~/SDKs/VST_SDK/VST3_SDK", "../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../../../modules/juce_audio_processors/format_types/VST3_SDK", + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.roli.juce.pluginhost; - USE_HEADERMAP = NO; }; name = Release; }; - 8D1CA827F1EFD443BDCF198A = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "Plugin Host"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + 8D1CA827F1EFD443BDCF198A = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -300,19 +900,27 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - C9295196717FABE454A210B7 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + C9295196717FABE454A210B7 = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -340,61 +948,118 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - B9D79D85AC7DE5BED1B6547C = {isa = PBXTargetDependency; target = DE12B7643D374BFF7E4FEB1C; }; - 493C2C5E457692E5149C5525 = {isa = XCConfigurationList; buildConfigurations = ( - 8D1CA827F1EFD443BDCF198A, - C9295196717FABE454A210B7, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - E4ECAE24A646A7D1585F776C = {isa = XCConfigurationList; buildConfigurations = ( - C8B793AC1BEFBE7A99BE8352, - 49453CC5AD9F08D2738464AC, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 2429BB4D705CC57F49418CFB = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 59F4F23BFFDAB414B4801F85, - 443244451A0F2064D4767337, ); runOnlyForDeploymentPostprocessing = 0; }; - E8E94B3C187DA578BFCBDA98 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2E74188531792924F0C73142, - C8423A9611C8AAF27468847D, - 786AF545C1C1E4D11140C3DF, - 3E1689E23B9C85F03209DCEF, - F635D974599DEC2ED91E6A88, - A1B0416DA378BB0C3AD6F74B, - A0144A682BF4843C8CF53FE4, - 15CCE43D7DCFC649638919D4, - 5C4D406B924230F83E3580AD, - F4DD98B9310B679D50A2C8A6, - CAF0DE157C8F7D9F168AA3B6, - 0F20A4AE04736634F097F5A6, - 76A80851698FC773D2479B4E, - E4A926EF695823F0F13268FF, - A09E93F1B354E1FF8B3E9ABE, - 7DE202DC1D876F49266D9E7D, - 075C54DDDBDEA5AAD2F60154, - 2C3D221D2AA87F07B3F1044D, - C38D14DC58F1941DD5E4BF60, - 2727A191DB1BAAC9C04B9081, - 84BAFE82A102D9C350672689, ); runOnlyForDeploymentPostprocessing = 0; }; - C515A1FE1A53D3968C22FAEF = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 73E371F1B912FCCAE0CD7E5D, - 21D330A5B13178B12BEAFC3C, - 851C1165C9E4ACDD19C56A96, - AF42316D915057E930A5624E, - E3CB85BA817BC9E3942A8AB0, - 70580743C3D5695F065FF698, - 1570FCC5CDB7A44DF0077E39, - B0D5475F716126465FCE1586, - 3470F40DA5D68EC217872906, - E092A70431B046BF1F50A482, - 92EE84159C7027A137F06204, - 9056B642BEF870098DE344E5, - 7DE81C004B0FBC563040CC5F, - 2AB9A26C9359C40CA0A937ED, - A02C9F4C4B840C27B6CAFEBD, - 50AFD116DCA6EC228EFB322D, ); runOnlyForDeploymentPostprocessing = 0; }; - DE12B7643D374BFF7E4FEB1C = {isa = PBXNativeTarget; buildConfigurationList = E4ECAE24A646A7D1585F776C; buildPhases = ( - 2429BB4D705CC57F49418CFB, - E8E94B3C187DA578BFCBDA98, - C515A1FE1A53D3968C22FAEF, ); buildRules = ( ); dependencies = ( ); name = "AudioPluginHost - App"; productName = AudioPluginHost; productReference = 8D8BBC353637DA442C5575DA; productType = "com.apple.product-type.application"; }; - ADE6E539DB98A302483A82D0 = {isa = PBXProject; buildConfigurationList = 493C2C5E457692E5149C5525; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { DE12B7643D374BFF7E4FEB1C = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 65BEFC705A89E5C8A9E35C97; projectDirPath = ""; projectRoot = ""; targets = (DE12B7643D374BFF7E4FEB1C); }; + ZERO_LINK = NO; + }; + name = Release; + }; + B9D79D85AC7DE5BED1B6547C = { + isa = PBXTargetDependency; + target = DE12B7643D374BFF7E4FEB1C; + }; + 493C2C5E457692E5149C5525 = { + isa = XCConfigurationList; + buildConfigurations = ( + 8D1CA827F1EFD443BDCF198A, + C9295196717FABE454A210B7, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + E4ECAE24A646A7D1585F776C = { + isa = XCConfigurationList; + buildConfigurations = ( + C8B793AC1BEFBE7A99BE8352, + 49453CC5AD9F08D2738464AC, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 2429BB4D705CC57F49418CFB = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 59F4F23BFFDAB414B4801F85, + 443244451A0F2064D4767337, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E8E94B3C187DA578BFCBDA98 = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2E74188531792924F0C73142, + C8423A9611C8AAF27468847D, + 786AF545C1C1E4D11140C3DF, + 3E1689E23B9C85F03209DCEF, + F635D974599DEC2ED91E6A88, + A1B0416DA378BB0C3AD6F74B, + A0144A682BF4843C8CF53FE4, + 15CCE43D7DCFC649638919D4, + 5C4D406B924230F83E3580AD, + F4DD98B9310B679D50A2C8A6, + CAF0DE157C8F7D9F168AA3B6, + 0F20A4AE04736634F097F5A6, + 76A80851698FC773D2479B4E, + E4A926EF695823F0F13268FF, + A09E93F1B354E1FF8B3E9ABE, + 7DE202DC1D876F49266D9E7D, + 075C54DDDBDEA5AAD2F60154, + 2C3D221D2AA87F07B3F1044D, + C38D14DC58F1941DD5E4BF60, + 2727A191DB1BAAC9C04B9081, + 84BAFE82A102D9C350672689, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C515A1FE1A53D3968C22FAEF = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 73E371F1B912FCCAE0CD7E5D, + 21D330A5B13178B12BEAFC3C, + 851C1165C9E4ACDD19C56A96, + AF42316D915057E930A5624E, + E3CB85BA817BC9E3942A8AB0, + 70580743C3D5695F065FF698, + 1570FCC5CDB7A44DF0077E39, + B0D5475F716126465FCE1586, + 3470F40DA5D68EC217872906, + E092A70431B046BF1F50A482, + 92EE84159C7027A137F06204, + 9056B642BEF870098DE344E5, + 7DE81C004B0FBC563040CC5F, + 2AB9A26C9359C40CA0A937ED, + A02C9F4C4B840C27B6CAFEBD, + 50AFD116DCA6EC228EFB322D, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DE12B7643D374BFF7E4FEB1C = { + isa = PBXNativeTarget; + buildConfigurationList = E4ECAE24A646A7D1585F776C; + buildPhases = ( + 2429BB4D705CC57F49418CFB, + E8E94B3C187DA578BFCBDA98, + C515A1FE1A53D3968C22FAEF, + ); + buildRules = ( ); + dependencies = ( ); + name = "AudioPluginHost - App"; + productName = AudioPluginHost; + productReference = 8D8BBC353637DA442C5575DA; + productType = "com.apple.product-type.application"; + }; + ADE6E539DB98A302483A82D0 = { + isa = PBXProject; + buildConfigurationList = 493C2C5E457692E5149C5525; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { DE12B7643D374BFF7E4FEB1C = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 65BEFC705A89E5C8A9E35C97; + projectDirPath = ""; + projectRoot = ""; + targets = (DE12B7643D374BFF7E4FEB1C); + }; }; rootObject = ADE6E539DB98A302483A82D0; } diff --git a/extras/AudioPluginHost/Builds/iOS/Info-App.plist b/extras/AudioPluginHost/Builds/iOS/Info-App.plist index 209e253f..5cc40c08 100644 --- a/extras/AudioPluginHost/Builds/iOS/Info-App.plist +++ b/extras/AudioPluginHost/Builds/iOS/Info-App.plist @@ -3,10 +3,10 @@ + NSMicrophoneUsageDescription + This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone. LSRequiresIPhoneOS - NSMicrophoneUsageDescription - This is an audio app which requires audio input. If you do not have a USB audio interface connected it will use the microphone. UIViewControllerBasedStatusBarAppearance CFBundleExecutable diff --git a/extras/AudioPluginHost/JuceLibraryCode/AppConfig.h b/extras/AudioPluginHost/JuceLibraryCode/AppConfig.h index 6b8cbf5e..2b5f6944 100644 --- a/extras/AudioPluginHost/JuceLibraryCode/AppConfig.h +++ b/extras/AudioPluginHost/JuceLibraryCode/AppConfig.h @@ -70,6 +70,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -106,10 +110,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -141,7 +141,7 @@ // juce_audio_processors flags: #ifndef JUCE_PLUGINHOST_VST - #define JUCE_PLUGINHOST_VST 1 + //#define JUCE_PLUGINHOST_VST 0 #endif #ifndef JUCE_PLUGINHOST_VST3 @@ -194,6 +194,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -202,6 +206,10 @@ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + //#define JUCE_STRICT_REFCOUNTEDPOINTER 0 +#endif + //============================================================================== // juce_events flags: @@ -220,6 +228,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -247,6 +259,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -264,6 +280,11 @@ #ifndef JUCE_USE_CAMERA #define JUCE_USE_CAMERA 0 #endif + +#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 +#endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp b/extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp index 07ae322a..de10104f 100644 --- a/extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp +++ b/extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp @@ -660,7 +660,8 @@ const char* JUCEAppIcon_png = (const char*) temp_binary_data_0; const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) { unsigned int hash = 0; - if (resourceNameUTF8 != 0) + + if (resourceNameUTF8 != nullptr) while (*resourceNameUTF8 != 0) hash = 31 * hash + (unsigned int) *resourceNameUTF8++; diff --git a/extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h b/extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h index 9d236c74..01d36b3b 100644 --- a/extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h +++ b/extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h @@ -41,6 +41,7 @@ namespace ProjectInfo { const char* const projectName = "AudioPluginHost"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp b/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp index 47a32237..07ee7c67 100644 --- a/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp +++ b/extras/AudioPluginHost/Source/Filters/FilterGraph.cpp @@ -40,11 +40,7 @@ FilterGraph::FilterGraph (AudioPluginFormatManager& fm) formatManager (fm) { newDocument(); - graph.addListener (this); - graph.addChangeListener (this); - - setChangedFlag (false); } FilterGraph::~FilterGraph() @@ -56,7 +52,7 @@ FilterGraph::~FilterGraph() FilterGraph::NodeID FilterGraph::getNextUID() noexcept { - return ++lastUID; + return FilterGraph::NodeID (++(lastUID.uid)); } //============================================================================== @@ -156,7 +152,7 @@ PluginWindow* FilterGraph::getOrCreateWindowFor (AudioProcessorGraph::Node* node closeAnyOpenPluginWindows(); #else for (auto* w : activePluginWindows) - if (w->node == node && w->type == type) + if (w->node.get() == node && w->type == type) return w; #endif @@ -173,6 +169,15 @@ PluginWindow* FilterGraph::getOrCreateWindowFor (AudioProcessorGraph::Node* node } } + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + if (! node->properties["DPIAware"] + && ! node->getProcessor()->getName().contains ("Kontakt")) // Kontakt doesn't behave correctly in DPI unaware mode... + { + ScopedDPIAwarenessDisabler disableDPIAwareness; + return activePluginWindows.add (new PluginWindow (node, type, activePluginWindows)); + } + #endif + return activePluginWindows.add (new PluginWindow (node, type, activePluginWindows)); } @@ -200,13 +205,18 @@ void FilterGraph::newDocument() clear(); setFile ({}); + graph.removeChangeListener (this); + InternalPluginFormat internalFormat; addPlugin (internalFormat.audioInDesc, { 0.5, 0.1 }); addPlugin (internalFormat.midiInDesc, { 0.25, 0.1 }); addPlugin (internalFormat.audioOutDesc, { 0.5, 0.9 }); - setChangedFlag (false); + MessageManager::callAsync ([this] () { + setChangedFlag (false); + graph.addChangeListener (this); + } ); } Result FilterGraph::loadDocument (const File& file) @@ -217,7 +227,14 @@ Result FilterGraph::loadDocument (const File& file) if (xml == nullptr || ! xml->hasTagName ("FILTERGRAPH")) return Result::fail ("Not a valid filter graph file"); + graph.removeChangeListener (this); restoreFromXml (*xml); + + MessageManager::callAsync ([this] () { + setChangedFlag (false); + graph.addChangeListener (this); + } ); + return Result::ok(); } @@ -318,7 +335,7 @@ static XmlElement* createNodeXml (AudioProcessorGraph::Node* const node) noexcep if (auto* plugin = dynamic_cast (node->getProcessor())) { auto e = new XmlElement ("FILTER"); - e->setAttribute ("uid", (int) node->nodeID); + e->setAttribute ("uid", (int) node->nodeID.uid); e->setAttribute ("x", node->properties ["x"].toString()); e->setAttribute ("y", node->properties ["y"].toString()); @@ -384,7 +401,7 @@ void FilterGraph::createNodeFromXml (const XmlElement& xml) instance->setBusesLayout (layout); } - if (auto node = graph.addNode (instance, (NodeID) xml.getIntAttribute ("uid"))) + if (auto node = graph.addNode (instance, NodeID ((uint32) xml.getIntAttribute ("uid")))) { if (auto* state = xml.getChildByName ("STATE")) { @@ -431,9 +448,9 @@ XmlElement* FilterGraph::createXml() const { auto e = xml->createNewChildElement ("CONNECTION"); - e->setAttribute ("srcFilter", (int) connection.source.nodeID); + e->setAttribute ("srcFilter", (int) connection.source.nodeID.uid); e->setAttribute ("srcChannel", connection.source.channelIndex); - e->setAttribute ("dstFilter", (int) connection.destination.nodeID); + e->setAttribute ("dstFilter", (int) connection.destination.nodeID.uid); e->setAttribute ("dstChannel", connection.destination.channelIndex); } @@ -452,8 +469,8 @@ void FilterGraph::restoreFromXml (const XmlElement& xml) forEachXmlChildElementWithTagName (xml, e, "CONNECTION") { - graph.addConnection ({ { (NodeID) e->getIntAttribute ("srcFilter"), e->getIntAttribute ("srcChannel") }, - { (NodeID) e->getIntAttribute ("dstFilter"), e->getIntAttribute ("dstChannel") } }); + graph.addConnection ({ { NodeID ((uint32) e->getIntAttribute ("srcFilter")), e->getIntAttribute ("srcChannel") }, + { NodeID ((uint32) e->getIntAttribute ("dstFilter")), e->getIntAttribute ("dstChannel") } }); } graph.removeIllegalConnections(); diff --git a/extras/AudioPluginHost/Source/Filters/FilterGraph.h b/extras/AudioPluginHost/Source/Filters/FilterGraph.h index 62661b52..592642d4 100644 --- a/extras/AudioPluginHost/Source/Filters/FilterGraph.h +++ b/extras/AudioPluginHost/Source/Filters/FilterGraph.h @@ -43,7 +43,7 @@ public: ~FilterGraph(); //============================================================================== - typedef AudioProcessorGraph::NodeID NodeID; + using NodeID = AudioProcessorGraph::NodeID; void addPlugin (const PluginDescription&, Point); @@ -88,7 +88,7 @@ private: AudioPluginFormatManager& formatManager; OwnedArray activePluginWindows; - NodeID lastUID = 0; + NodeID lastUID; NodeID getNextUID() noexcept; void createNodeFromXml (const XmlElement& xml); diff --git a/extras/AudioPluginHost/Source/Filters/FilterIOConfiguration.cpp b/extras/AudioPluginHost/Source/Filters/FilterIOConfiguration.cpp index db17db82..f5dc0b16 100644 --- a/extras/AudioPluginHost/Source/Filters/FilterIOConfiguration.cpp +++ b/extras/AudioPluginHost/Source/Filters/FilterIOConfiguration.cpp @@ -507,7 +507,7 @@ void FilterIOConfigurationWindow::update() auto nodeID = getNodeID(); if (auto* graph = getGraph()) - if (nodeID != 0) + if (nodeID != AudioProcessorGraph::NodeID()) graph->disconnectNode (nodeID); if (auto* graphEditor = getGraphEditor()) @@ -522,7 +522,7 @@ AudioProcessorGraph::NodeID FilterIOConfigurationWindow::getNodeID() const if (node->getProcessor() == getAudioProcessor()) return node->nodeID; - return 0; + return {}; } MainHostWindow* FilterIOConfigurationWindow::getMainWindow() const diff --git a/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp b/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp index 0b1f2c8d..c024e13c 100644 --- a/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp +++ b/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp @@ -377,7 +377,7 @@ void InternalPluginFormat::createPluginInstance (const PluginDescription& desc, double /*initialSampleRate*/, int /*initialBufferSize*/, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) + PluginCreationCallback callback) { auto* p = createInstance (desc.name); diff --git a/extras/AudioPluginHost/Source/Filters/InternalFilters.h b/extras/AudioPluginHost/Source/Filters/InternalFilters.h index cdcde6dc..4432ff08 100644 --- a/extras/AudioPluginHost/Source/Filters/InternalFilters.h +++ b/extras/AudioPluginHost/Source/Filters/InternalFilters.h @@ -59,7 +59,7 @@ public: private: //============================================================================== void createPluginInstance (const PluginDescription&, double initialSampleRate, int initialBufferSize, - void* userData, void (*callback) (void*, AudioPluginInstance*, const String&)) override; + void* userData, PluginCreationCallback) override; AudioPluginInstance* createInstance (const String& name); bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override; diff --git a/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp b/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp index cd51a8bb..2b7b8d04 100644 --- a/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp +++ b/extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp @@ -146,7 +146,7 @@ struct GraphEditorPanel::PinComponent : public Component, void mouseDown (const MouseEvent& e) override { - AudioProcessorGraph::NodeAndChannel dummy { 0, 0 }; + AudioProcessorGraph::NodeAndChannel dummy { {}, 0 }; panel.beginConnectorDrag (isInput ? dummy : pin, isInput ? pin : dummy, @@ -177,7 +177,7 @@ struct GraphEditorPanel::FilterComponent : public Component, public Timer, private AudioProcessorParameter::Listener { - FilterComponent (GraphEditorPanel& p, uint32 id) : panel (p), graph (p.graph), pluginID (id) + FilterComponent (GraphEditorPanel& p, AudioProcessorGraph::NodeID id) : panel (p), graph (p.graph), pluginID (id) { shadow.setShadowProperties (DropShadow (Colours::black.withAlpha (0.5f), 3, { 0, 1 })); setComponentEffect (&shadow); @@ -410,6 +410,13 @@ struct GraphEditorPanel::FilterComponent : public Component, menu->addItem (10, "Show plugin GUI"); menu->addItem (11, "Show all programs"); menu->addItem (12, "Show all parameters"); + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + auto isTicked = false; + if (auto* node = graph.graph.getNodeForId (pluginID)) + isTicked = node->properties["DPIAware"]; + + menu->addItem (13, "Enable DPI awareness", true, isTicked); + #endif } menu->addSeparator(); @@ -433,7 +440,13 @@ struct GraphEditorPanel::FilterComponent : public Component, } case 10: showWindow (PluginWindow::Type::normal); break; case 11: showWindow (PluginWindow::Type::programs); break; - case 12: showWindow (PluginWindow::Type::generic); break; + case 12: showWindow (PluginWindow::Type::generic) ; break; + case 13: + { + if (auto* node = graph.graph.getNodeForId (pluginID)) + node->properties.set ("DPIAware", ! node->properties ["DPIAware"]); + break; + } case 20: showWindow (PluginWindow::Type::audioIO); break; case 21: testStateSaveLoad(); break; @@ -611,7 +624,7 @@ struct GraphEditorPanel::ConnectorComponent : public Component, getDistancesFromEnds (getPosition().toFloat() + e.position, distanceFromStart, distanceFromEnd); const bool isNearerSource = (distanceFromStart < distanceFromEnd); - AudioProcessorGraph::NodeAndChannel dummy { 0, 0 }; + AudioProcessorGraph::NodeAndChannel dummy { {}, 0 }; panel.beginConnectorDrag (isNearerSource ? dummy : connection.source, isNearerSource ? connection.destination : dummy, @@ -675,7 +688,7 @@ struct GraphEditorPanel::ConnectorComponent : public Component, GraphEditorPanel& panel; FilterGraph& graph; - AudioProcessorGraph::Connection connection { { 0, 0 }, { 0, 0 } }; + AudioProcessorGraph::Connection connection { { {}, 0 }, { {}, 0 } }; Point lastInputPos, lastOutputPos; Path linePath, hitPath; bool dragging = false; @@ -736,10 +749,10 @@ void GraphEditorPanel::createNewPlugin (const PluginDescription& desc, Point ((double) getWidth(), (double) getHeight())); } -GraphEditorPanel::FilterComponent* GraphEditorPanel::getComponentForFilter (const uint32 filterID) const +GraphEditorPanel::FilterComponent* GraphEditorPanel::getComponentForFilter (AudioProcessorGraph::NodeID nodeID) const { for (auto* fc : nodes) - if (fc->pluginID == filterID) + if (fc->pluginID == nodeID) return fc; return nullptr; @@ -870,11 +883,11 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) { auto connection = draggingConnector->connection; - if (connection.source.nodeID == 0 && ! pin->isInput) + if (connection.source.nodeID == AudioProcessorGraph::NodeID() && ! pin->isInput) { connection.source = pin->pin; } - else if (connection.destination.nodeID == 0 && pin->isInput) + else if (connection.destination.nodeID == AudioProcessorGraph::NodeID() && pin->isInput) { connection.destination = pin->pin; } @@ -886,7 +899,7 @@ void GraphEditorPanel::dragConnector (const MouseEvent& e) } } - if (draggingConnector->connection.source.nodeID == 0) + if (draggingConnector->connection.source.nodeID == AudioProcessorGraph::NodeID()) draggingConnector->dragStart (pos); else draggingConnector->dragEnd (pos); @@ -907,7 +920,7 @@ void GraphEditorPanel::endDraggingConnector (const MouseEvent& e) if (auto* pin = findPinAt (e2.position)) { - if (connection.source.nodeID == 0) + if (connection.source.nodeID == AudioProcessorGraph::NodeID()) { if (pin->isInput) return; diff --git a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp index 9abd73a3..e3956674 100644 --- a/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp +++ b/extras/AudioPluginHost/Source/UI/MainHostWindow.cpp @@ -81,8 +81,9 @@ MainHostWindow::MainHostWindow() formatManager.addDefaultFormats(); formatManager.addFormat (new InternalPluginFormat()); + auto safeThis = SafePointer (this); RuntimePermissions::request (RuntimePermissions::recordAudio, - [safeThis = SafePointer (this)] (bool granted) mutable + [safeThis] (bool granted) mutable { std::unique_ptr savedAudioState (getAppProperties().getUserSettings() ->getXmlValue ("audioDeviceState")); @@ -573,9 +574,11 @@ void MainHostWindow::showAudioSettings() o.resizable = false; auto* w = o.create(); + auto safeThis = SafePointer (this); + w->enterModalState (true, ModalCallbackFunction::create - ([safeThis = SafePointer (this)] (int) + ([safeThis] (int) { std::unique_ptr audioState (safeThis->deviceManager.createStateXml()); diff --git a/extras/BinaryBuilder/BinaryBuilder.jucer b/extras/BinaryBuilder/BinaryBuilder.jucer index bbbbf3cb..53fdfb18 100644 --- a/extras/BinaryBuilder/BinaryBuilder.jucer +++ b/extras/BinaryBuilder/BinaryBuilder.jucer @@ -1,7 +1,7 @@ diff --git a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile index 4650f638..da7f2587 100644 --- a/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile +++ b/extras/BinaryBuilder/Builds/LinuxMakefile/Makefile @@ -36,7 +36,7 @@ ifeq ($(CONFIG),Debug) endif JUCE_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 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_CONSOLEAPP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS_CONSOLEAPP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_CONSOLEAPP := BinaryBuilder JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) @@ -57,7 +57,7 @@ ifeq ($(CONFIG),Release) endif JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_CONSOLEAPP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS_CONSOLEAPP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_CONSOLEAPP := BinaryBuilder JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os $(CFLAGS) @@ -71,11 +71,13 @@ OBJECTS_CONSOLEAPP := \ $(JUCE_OBJDIR)/Main_90ebc5c2.o \ $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) : check-pkg-config $(OBJECTS_CONSOLEAPP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_CONSOLEAPP) : $(OBJECTS_CONSOLEAPP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors libcurl @echo Linking "BinaryBuilder - ConsoleApp" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -92,10 +94,6 @@ $(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_ @echo "Compiling include_juce_core.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_CONSOLEAPP) $(JUCE_CFLAGS_CONSOLEAPP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors libcurl - clean: @echo Cleaning BinaryBuilder $(V_AT)$(CLEANCMD) diff --git a/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj b/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj index a88b2269..a49dd354 100644 --- a/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj +++ b/extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj @@ -5,47 +5,168 @@ }; objectVersion = 46; objects = { - - 281394C38788919D523BE021 = {isa = PBXBuildFile; fileRef = 799073185F72F5FAD05253C3; }; - 4B72EFB0E9D74CA7227F6CAB = {isa = PBXBuildFile; fileRef = 57DDB771ED96A256F190ADF8; }; - 0D53D8B0AEE37C02C147344B = {isa = PBXBuildFile; fileRef = F769CD634476C91F4C9D0596; }; - 542006E949BB022F198DF0F2 = {isa = PBXBuildFile; fileRef = 1A71A586C0F50B6B328D877B; }; - 3C6FF7689E2FD827A48E2303 = {isa = PBXBuildFile; fileRef = 50B7C64414A3E778021F5EC4; }; - 9E4D85A3D54739A0FA80A446 = {isa = PBXBuildFile; fileRef = D186E2D509765FAE0758F17D; }; - 1A71A586C0F50B6B328D877B = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 50B7C64414A3E778021F5EC4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 57DDB771ED96A256F190ADF8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 799073185F72F5FAD05253C3 = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = BinaryBuilder; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 7E86227B01E504302C234A04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 8702176D2368B6F785546D2B = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - D186E2D509765FAE0758F17D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - D6C3594C8BEC94040AF108FE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - F769CD634476C91F4C9D0596 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - AF0451FEC95312712E8145CD = {isa = PBXGroup; children = ( - 50B7C64414A3E778021F5EC4, ); name = Source; sourceTree = ""; }; - 9DC13797237D190C48A242C9 = {isa = PBXGroup; children = ( - AF0451FEC95312712E8145CD, ); name = BinaryBuilder; sourceTree = ""; }; - 5D4B80BC67BBCEDCC3B6BAB8 = {isa = PBXGroup; children = ( - 8702176D2368B6F785546D2B, ); name = "JUCE Modules"; sourceTree = ""; }; - 8905BD956C24F83087634C3A = {isa = PBXGroup; children = ( - 7E86227B01E504302C234A04, - D186E2D509765FAE0758F17D, - D6C3594C8BEC94040AF108FE, ); name = "JUCE Library Code"; sourceTree = ""; }; - 87ECE820BF4D73DD50D614CB = {isa = PBXGroup; children = ( - 1A71A586C0F50B6B328D877B, ); name = Resources; sourceTree = ""; }; - E28F51A0038F01E08E22F853 = {isa = PBXGroup; children = ( - 57DDB771ED96A256F190ADF8, - F769CD634476C91F4C9D0596, ); name = Frameworks; sourceTree = ""; }; - 70A875922C34E55D4F48A196 = {isa = PBXGroup; children = ( - 799073185F72F5FAD05253C3, ); name = Products; sourceTree = ""; }; - C18D022743CF5BD14D6A6A9E = {isa = PBXGroup; children = ( - 9DC13797237D190C48A242C9, - 5D4B80BC67BBCEDCC3B6BAB8, - 8905BD956C24F83087634C3A, - 87ECE820BF4D73DD50D614CB, - E28F51A0038F01E08E22F853, - 70A875922C34E55D4F48A196, ); name = Source; sourceTree = ""; }; - 00F18709927DE6070FBA7BD0 = {isa = XCBuildConfiguration; buildSettings = { + 281394C38788919D523BE021 = { + isa = PBXBuildFile; + fileRef = 799073185F72F5FAD05253C3; + }; + 4B72EFB0E9D74CA7227F6CAB = { + isa = PBXBuildFile; + fileRef = 57DDB771ED96A256F190ADF8; + }; + 0D53D8B0AEE37C02C147344B = { + isa = PBXBuildFile; + fileRef = F769CD634476C91F4C9D0596; + }; + 542006E949BB022F198DF0F2 = { + isa = PBXBuildFile; + fileRef = 1A71A586C0F50B6B328D877B; + }; + 3C6FF7689E2FD827A48E2303 = { + isa = PBXBuildFile; + fileRef = 50B7C64414A3E778021F5EC4; + }; + 9E4D85A3D54739A0FA80A446 = { + isa = PBXBuildFile; + fileRef = D186E2D509765FAE0758F17D; + }; + 1A71A586C0F50B6B328D877B = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 50B7C64414A3E778021F5EC4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 57DDB771ED96A256F190ADF8 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + 799073185F72F5FAD05253C3 = { + isa = PBXFileReference; + explicitFileType = "compiled.mach-o.executable"; + includeInIndex = 0; + path = BinaryBuilder; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 7E86227B01E504302C234A04 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 8702176D2368B6F785546D2B = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + D186E2D509765FAE0758F17D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + D6C3594C8BEC94040AF108FE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + F769CD634476C91F4C9D0596 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + AF0451FEC95312712E8145CD = { + isa = PBXGroup; + children = ( + 50B7C64414A3E778021F5EC4, + ); + name = Source; + sourceTree = ""; + }; + 9DC13797237D190C48A242C9 = { + isa = PBXGroup; + children = ( + AF0451FEC95312712E8145CD, + ); + name = BinaryBuilder; + sourceTree = ""; + }; + 5D4B80BC67BBCEDCC3B6BAB8 = { + isa = PBXGroup; + children = ( + 8702176D2368B6F785546D2B, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 8905BD956C24F83087634C3A = { + isa = PBXGroup; + children = ( + 7E86227B01E504302C234A04, + D186E2D509765FAE0758F17D, + D6C3594C8BEC94040AF108FE, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + 87ECE820BF4D73DD50D614CB = { + isa = PBXGroup; + children = ( + 1A71A586C0F50B6B328D877B, + ); + name = Resources; + sourceTree = ""; + }; + E28F51A0038F01E08E22F853 = { + isa = PBXGroup; + children = ( + 57DDB771ED96A256F190ADF8, + F769CD634476C91F4C9D0596, + ); + name = Frameworks; + sourceTree = ""; + }; + 70A875922C34E55D4F48A196 = { + isa = PBXGroup; + children = ( + 799073185F72F5FAD05253C3, + ); + name = Products; + sourceTree = ""; + }; + C18D022743CF5BD14D6A6A9E = { + isa = PBXGroup; + children = ( + 9DC13797237D190C48A242C9, + 5D4B80BC67BBCEDCC3B6BAB8, + 8905BD956C24F83087634C3A, + 87ECE820BF4D73DD50D614CB, + E28F51A0038F01E08E22F853, + 70A875922C34E55D4F48A196, + ); + name = Source; + sourceTree = ""; + }; + 00F18709927DE6070FBA7BD0 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -66,16 +187,26 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INSTALL_PATH = "/usr/bin"; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.roli.binarybuilder; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - 8A190EF24B99F557190320DA = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "BinaryBuilder"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 8A190EF24B99F557190320DA = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -96,28 +227,41 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INSTALL_PATH = "/usr/bin"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.roli.binarybuilder; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - D9552CAECBA3D7D5725848E5 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "BinaryBuilder"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + D9552CAECBA3D7D5725848E5 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -144,18 +288,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "BinaryBuilder"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 7545BE591FD462C37E44B903 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 7545BE591FD462C37E44B903 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -180,27 +332,84 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "BinaryBuilder"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - 78C9910DF129FD687A56D083 = {isa = PBXTargetDependency; target = 80B70DE094998C267F152DD5; }; - E4C85B0464A93027D035AA1F = {isa = XCConfigurationList; buildConfigurations = ( - D9552CAECBA3D7D5725848E5, - 7545BE591FD462C37E44B903, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - A88E30959D785F48A594450E = {isa = XCConfigurationList; buildConfigurations = ( - 00F18709927DE6070FBA7BD0, - 8A190EF24B99F557190320DA, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 4F5C64675AD3AC67829798FF = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 542006E949BB022F198DF0F2, ); runOnlyForDeploymentPostprocessing = 0; }; - A69CF4AD8F7015A8D3228FDE = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3C6FF7689E2FD827A48E2303, - 9E4D85A3D54739A0FA80A446, ); runOnlyForDeploymentPostprocessing = 0; }; - 2722C90F3B5DAD661891FDF4 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4B72EFB0E9D74CA7227F6CAB, - 0D53D8B0AEE37C02C147344B, ); runOnlyForDeploymentPostprocessing = 0; }; - 80B70DE094998C267F152DD5 = {isa = PBXNativeTarget; buildConfigurationList = A88E30959D785F48A594450E; buildPhases = ( - 4F5C64675AD3AC67829798FF, - A69CF4AD8F7015A8D3228FDE, - 2722C90F3B5DAD661891FDF4, ); buildRules = ( ); dependencies = ( ); name = "BinaryBuilder - ConsoleApp"; productName = BinaryBuilder; productReference = 799073185F72F5FAD05253C3; productType = "com.apple.product-type.tool"; }; - 36B6F402BC83F21646259DEF = {isa = PBXProject; buildConfigurationList = E4C85B0464A93027D035AA1F; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = C18D022743CF5BD14D6A6A9E; projectDirPath = ""; projectRoot = ""; targets = (80B70DE094998C267F152DD5); }; + ZERO_LINK = NO; + }; + name = Release; + }; + 78C9910DF129FD687A56D083 = { + isa = PBXTargetDependency; + target = 80B70DE094998C267F152DD5; + }; + E4C85B0464A93027D035AA1F = { + isa = XCConfigurationList; + buildConfigurations = ( + D9552CAECBA3D7D5725848E5, + 7545BE591FD462C37E44B903, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + A88E30959D785F48A594450E = { + isa = XCConfigurationList; + buildConfigurations = ( + 00F18709927DE6070FBA7BD0, + 8A190EF24B99F557190320DA, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 4F5C64675AD3AC67829798FF = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 542006E949BB022F198DF0F2, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A69CF4AD8F7015A8D3228FDE = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3C6FF7689E2FD827A48E2303, + 9E4D85A3D54739A0FA80A446, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2722C90F3B5DAD661891FDF4 = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B72EFB0E9D74CA7227F6CAB, + 0D53D8B0AEE37C02C147344B, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 80B70DE094998C267F152DD5 = { + isa = PBXNativeTarget; + buildConfigurationList = A88E30959D785F48A594450E; + buildPhases = ( + 4F5C64675AD3AC67829798FF, + A69CF4AD8F7015A8D3228FDE, + 2722C90F3B5DAD661891FDF4, + ); + buildRules = ( ); + dependencies = ( ); + name = "BinaryBuilder - ConsoleApp"; + productName = BinaryBuilder; + productReference = 799073185F72F5FAD05253C3; + productType = "com.apple.product-type.tool"; + }; + 36B6F402BC83F21646259DEF = { + isa = PBXProject; + buildConfigurationList = E4C85B0464A93027D035AA1F; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = C18D022743CF5BD14D6A6A9E; + projectDirPath = ""; + projectRoot = ""; + targets = (80B70DE094998C267F152DD5); + }; }; rootObject = 36B6F402BC83F21646259DEF; } diff --git a/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj b/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj index 151ce86a..baa54a83 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj +++ b/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj @@ -15,8 +15,6 @@ {88983F7C-DB65-9E04-84E7-05F8979E0383} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\ConsoleApp\ BinaryBuilder true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -152,6 +142,9 @@ true + + true + true @@ -161,9 +154,15 @@ true + + true + true + + true + true @@ -218,6 +217,9 @@ true + + true + true @@ -443,6 +445,7 @@ + @@ -480,6 +483,7 @@ + @@ -489,6 +493,7 @@ + @@ -498,6 +503,7 @@ + diff --git a/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj.filters b/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj.filters index 1150273d..0173574e 100644 --- a/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj.filters +++ b/extras/BinaryBuilder/Builds/VisualStudio2017/BinaryBuilder_ConsoleApp.vcxproj.filters @@ -79,6 +79,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -88,9 +91,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -145,6 +154,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -396,6 +408,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -507,6 +522,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -534,6 +552,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -561,6 +582,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native diff --git a/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h b/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h index 06101222..f2408918 100644 --- a/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h +++ b/extras/BinaryBuilder/JuceLibraryCode/AppConfig.h @@ -79,6 +79,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -86,6 +90,11 @@ #ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif + +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + //#define JUCE_STRICT_REFCOUNTEDPOINTER 0 +#endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h b/extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h index 100a8e1b..ce4d6d90 100644 --- a/extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h +++ b/extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h @@ -27,6 +27,7 @@ namespace ProjectInfo { const char* const projectName = "BinaryBuilder"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt index 0b94bf62..5a8da270 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt @@ -41,6 +41,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" + "../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" "../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" "../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" @@ -304,6 +306,91 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" "../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" + "../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" "../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" "../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" @@ -315,7 +402,6 @@ add_library( ${BINARY_NAME} "../../../../../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_VSTCommon.h" - "../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" "../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" @@ -329,6 +415,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" + "../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" "../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" "../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" @@ -347,6 +435,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" "../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" + "../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" "../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" "../../../../../modules/juce_audio_processors/juce_audio_processors.mm" "../../../../../modules/juce_audio_processors/juce_audio_processors.h" @@ -388,6 +477,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_AbstractFifo.h" "../../../../../modules/juce_core/containers/juce_Array.h" "../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" + "../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" + "../../../../../modules/juce_core/containers/juce_ArrayBase.h" "../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" "../../../../../modules/juce_core/containers/juce_DynamicObject.h" "../../../../../modules/juce_core/containers/juce_ElementComparator.h" @@ -397,9 +488,11 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/containers/juce_ListenerList.h" "../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" "../../../../../modules/juce_core/containers/juce_NamedValueSet.h" + "../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" "../../../../../modules/juce_core/containers/juce_OwnedArray.h" "../../../../../modules/juce_core/containers/juce_PropertySet.cpp" "../../../../../modules/juce_core/containers/juce_PropertySet.h" + "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" "../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" "../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" "../../../../../modules/juce_core/containers/juce_SortedSet.h" @@ -446,6 +539,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_ByteOrder.h" "../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" "../../../../../modules/juce_core/memory/juce_HeapBlock.h" + "../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" "../../../../../modules/juce_core/memory/juce_Memory.h" "../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" @@ -456,6 +550,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" "../../../../../modules/juce_core/memory/juce_Singleton.h" "../../../../../modules/juce_core/memory/juce_WeakReference.h" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" + "../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" "../../../../../modules/juce_core/misc/juce_Result.cpp" "../../../../../modules/juce_core/misc/juce_Result.h" "../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" @@ -486,6 +582,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" "../../../../../modules/juce_core/native/juce_mac_Threads.mm" "../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" + "../../../../../modules/juce_core/native/juce_posix_IPAddress.h" "../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" "../../../../../modules/juce_core/native/juce_posix_SharedCode.h" "../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" @@ -666,6 +763,8 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" "../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" + "../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" "../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" "../../../../../modules/juce_events/messages/juce_ApplicationBase.h" "../../../../../modules/juce_events/messages/juce_CallbackMessage.h" @@ -895,10 +994,12 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_basics/components/juce_Component.h" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" "../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" - "../../../../../modules/juce_gui_basics/components/juce_Desktop.h" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" "../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" + "../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" "../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" "../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" @@ -1159,6 +1260,7 @@ add_library( ${BINARY_NAME} "../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" + "../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" "../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" "../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" "../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" @@ -1284,6 +1386,8 @@ set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/ju set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioChannelSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioDataConverters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1547,6 +1651,91 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/VST3_SDK/README.md" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AU_Shared.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1558,7 +1747,6 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/format set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTCommon.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTInterface.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1572,6 +1760,8 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/proces set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/processors/juce_PluginDescription.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1590,6 +1780,7 @@ set_source_files_properties("../../../../../modules/juce_audio_processors/utilit set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_audio_processors/juce_audio_processors.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1631,6 +1822,8 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Ab set_source_files_properties("../../../../../modules/juce_core/containers/juce_AbstractFifo.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_Array.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayAllocationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ArrayBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_DynamicObject.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ElementComparator.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1640,9 +1833,11 @@ set_source_files_properties("../../../../../modules/juce_core/containers/juce_Li set_source_files_properties("../../../../../modules/juce_core/containers/juce_ListenerList.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_NamedValueSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_OwnedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_PropertySet.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ReferenceCountedArray.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_ScopedValueSetter.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/containers/juce_SortedSet.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1689,6 +1884,7 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Atomic set_source_files_properties("../../../../../modules/juce_core/memory/juce_ByteOrder.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_ContainerDeletePolicy.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeapBlock.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_LeakedObjectDetector.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Memory.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_MemoryBlock.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1699,6 +1895,8 @@ set_source_files_properties("../../../../../modules/juce_core/memory/juce_Scoped set_source_files_properties("../../../../../modules/juce_core/memory/juce_SharedResourcePointer.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_Singleton.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/memory/juce_WeakReference.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/misc/juce_ConsoleApplication.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_Result.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/misc/juce_RuntimePermissions.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1729,6 +1927,7 @@ set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_St set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_SystemStats.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_mac_Threads.mm" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_osx_ObjCHelpers.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_IPAddress.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_NamedPipe.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_posix_SharedCode.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_core/native/juce_win32_ComSmartPtr.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -1909,6 +2108,8 @@ set_source_files_properties("../../../../../modules/juce_events/interprocess/juc set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnection.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_InterprocessConnectionServer.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_ApplicationBase.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_events/messages/juce_CallbackMessage.h" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2138,10 +2339,12 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/components/j set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Component.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ComponentListener.h" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) -set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/components/juce_ModalComponentManager.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Desktop.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_basics/desktop/juce_Displays.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_Drawable.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) @@ -2402,6 +2605,7 @@ set_source_files_properties("../../../../../modules/juce_gui_extra/documents/juc set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_NSViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) +set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_UIViewComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/embedding/juce_XEmbedComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE) set_source_files_properties("../../../../../modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE) diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle b/extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle index d438cc28..98a8bc1a 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 10 - buildToolsVersion "27.0.3" + buildToolsVersion "28.0.0" externalNativeBuild { cmake { path "CMakeLists.txt" @@ -50,7 +50,7 @@ android { productFlavors { debug_ { ndk { - abiFilters "armeabi", "armeabi-v7a", "x86" + abiFilters "armeabi-v7a", "x86" } externalNativeBuild { cmake { diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml b/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml index 1fbb144a..4c8c56ab 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml @@ -3,7 +3,6 @@ - diff --git a/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java b/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java index fb24cf73..40223e01 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java +++ b/extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java @@ -87,8 +87,11 @@ public class JUCENetworkGraphicsDemo extends Activity //============================================================================== public boolean isPermissionDeclaredInManifest (int permissionID) { - String permissionToCheck = getAndroidPermissionName(permissionID); + return isPermissionDeclaredInManifest (getAndroidPermissionName (permissionID)); + } + public boolean isPermissionDeclaredInManifest (String permissionToCheck) + { try { PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS); @@ -555,7 +558,9 @@ public class JUCENetworkGraphicsDemo extends Activity public final String getClipboardContent() { ClipboardManager clipboard = (ClipboardManager) getSystemService (CLIPBOARD_SERVICE); - return clipboard.getText().toString(); + + CharSequence content = clipboard.getText(); + return content != null ? content.toString() : new String(); } public final void setClipboardContent (String newText) @@ -1064,11 +1069,13 @@ public class JUCENetworkGraphicsDemo extends Activity implements SurfaceHolder.Callback { private long nativeContext = 0; + private boolean forVideo; - NativeSurfaceView (Context context, long nativeContextPtr) + NativeSurfaceView (Context context, long nativeContextPtr, boolean createdForVideo) { super (context); nativeContext = nativeContextPtr; + forVideo = createdForVideo; } public Surface getNativeSurface() @@ -1086,38 +1093,51 @@ public class JUCENetworkGraphicsDemo extends Activity @Override public void surfaceChanged (SurfaceHolder holder, int format, int width, int height) { - surfaceChangedNative (nativeContext, holder, format, width, height); + if (forVideo) + surfaceChangedNativeVideo (nativeContext, holder, format, width, height); + else + surfaceChangedNative (nativeContext, holder, format, width, height); } @Override public void surfaceCreated (SurfaceHolder holder) { - surfaceCreatedNative (nativeContext, holder); + if (forVideo) + surfaceCreatedNativeVideo (nativeContext, holder); + else + surfaceCreatedNative (nativeContext, holder); } @Override public void surfaceDestroyed (SurfaceHolder holder) { - surfaceDestroyedNative (nativeContext, holder); + if (forVideo) + surfaceDestroyedNativeVideo (nativeContext, holder); + else + surfaceDestroyedNative (nativeContext, holder); } @Override protected void dispatchDraw (Canvas canvas) { super.dispatchDraw (canvas); - dispatchDrawNative (nativeContext, canvas); + + if (forVideo) + dispatchDrawNativeVideo (nativeContext, canvas); + else + dispatchDrawNative (nativeContext, canvas); } //============================================================================== @Override - protected void onAttachedToWindow () + protected void onAttachedToWindow() { super.onAttachedToWindow(); getHolder().addCallback (this); } @Override - protected void onDetachedFromWindow () + protected void onDetachedFromWindow() { super.onDetachedFromWindow(); getHolder().removeCallback (this); @@ -1129,11 +1149,17 @@ public class JUCENetworkGraphicsDemo extends Activity private native void surfaceDestroyedNative (long nativeContextptr, SurfaceHolder holder); private native void surfaceChangedNative (long nativeContextptr, SurfaceHolder holder, int format, int width, int height); + + private native void dispatchDrawNativeVideo (long nativeContextPtr, Canvas canvas); + private native void surfaceCreatedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceDestroyedNativeVideo (long nativeContextptr, SurfaceHolder holder); + private native void surfaceChangedNativeVideo (long nativeContextptr, SurfaceHolder holder, + int format, int width, int height); } - public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr) + public NativeSurfaceView createNativeSurfaceView (long nativeSurfacePtr, boolean forVideo) { - return new NativeSurfaceView (this, nativeSurfacePtr); + return new NativeSurfaceView (this, nativeSurfacePtr, forVideo); } //============================================================================== diff --git a/extras/NetworkGraphicsDemo/Builds/Android/build.gradle b/extras/NetworkGraphicsDemo/Builds/Android/build.gradle index 651d63db..647f509e 100644 --- a/extras/NetworkGraphicsDemo/Builds/Android/build.gradle +++ b/extras/NetworkGraphicsDemo/Builds/Android/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.1' + classpath 'com.android.tools.build:gradle:3.1.3' } } diff --git a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile index 4a7e4bcc..849e181c 100644 --- a/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile +++ b/extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile @@ -35,13 +35,13 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - JUCE_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 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_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 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -56,13 +56,13 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := JUCE\ Network\ Graphics\ Demo JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++14 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -85,11 +85,13 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o \ $(JUCE_OBJDIR)/include_juce_osc_f3df604d.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl @echo Linking "NetworkGraphicsDemo - App" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -176,10 +178,6 @@ $(JUCE_OBJDIR)/include_juce_osc_f3df604d.o: ../../JuceLibraryCode/include_juce_o @echo "Compiling include_juce_osc.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 - clean: @echo Cleaning NetworkGraphicsDemo $(V_AT)$(CLEANCMD) diff --git a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj index c783ae58..4691d844 100644 --- a/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj +++ b/extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj @@ -5,159 +5,616 @@ }; objectVersion = 46; objects = { - - F468E8C7B02DFD4D53911277 = {isa = PBXBuildFile; fileRef = E4162459ED4C829EF7B19691; }; - 80EE2C27B466BAFD83881D3F = {isa = PBXBuildFile; fileRef = 2E13A899F4E3C99054A3656F; }; - C4D6C466C41173D6970553D2 = {isa = PBXBuildFile; fileRef = 9E8129263CD42C6029FC2CAD; }; - BED88ADEA4DC91AA8C810FA8 = {isa = PBXBuildFile; fileRef = 398A945EFD9ED923162982B1; }; - 3C30D7C28C86F4054257DCD5 = {isa = PBXBuildFile; fileRef = C78806A6727F44EACFDED4A5; }; - 67DF295E93E54432043126DF = {isa = PBXBuildFile; fileRef = 6799B056504F9F017998B9E2; }; - CA694B2A73FCF12D7F9E7E49 = {isa = PBXBuildFile; fileRef = 448838BE6E937D450A3C84CE; }; - 80B9F7ED2009922C693B7DD4 = {isa = PBXBuildFile; fileRef = CB82A14817C3E2ABBBBC3864; }; - 77745BF98931B91341FE17F6 = {isa = PBXBuildFile; fileRef = F3292E3563DB7ABB076DB400; }; - B323E5E5FBD5663B21A8E623 = {isa = PBXBuildFile; fileRef = 996E743A20FC78671766BF59; }; - EC14DA30C090DDC62084DB4C = {isa = PBXBuildFile; fileRef = 935CA85EF98714D3A17AE737; }; - 8ECB0767EE340DD83869E37D = {isa = PBXBuildFile; fileRef = EC794872987FEA2E129C589A; }; - 65B2C4ED19229E0EDC8EF993 = {isa = PBXBuildFile; fileRef = 696F7896036B652369517438; }; - 006DF460F8DF66EFFA80D968 = {isa = PBXBuildFile; fileRef = 70F1CAF3C4C561DD81E6AFC1; }; - 987CBD5330E76B404F0D966C = {isa = PBXBuildFile; fileRef = 77C0AC21C1028911123844FC; }; - 9F618C008A503063D10076C4 = {isa = PBXBuildFile; fileRef = 74711D7544168CCAC4969A07; }; - BB9A9692D99DD0DDB1047B60 = {isa = PBXBuildFile; fileRef = 6D1F9E505D20C09647124F0A; }; - 6C2200C52B65E1BE80544E50 = {isa = PBXBuildFile; fileRef = AF330F41D1A4865108690E3C; }; - A1F34D09F4E4338775917ED1 = {isa = PBXBuildFile; fileRef = C6E2284D86D93F1D9D5C7666; }; - 2E28F61A64DEF942FE7B94C4 = {isa = PBXBuildFile; fileRef = AED58461CE961C62A0E0A552; }; - EA487FA4116517A8DFEE85B0 = {isa = PBXBuildFile; fileRef = FCEBB157FB526741DB6791D1; }; - 0977FEC02DAF29438583198A = {isa = PBXBuildFile; fileRef = 01E0EEF68A11C1CAF180E173; }; - 0FA2A3321630EBE83E439D99 = {isa = PBXBuildFile; fileRef = AFF729977947528F3E4AAA96; }; - 9EFD2AA2FFF3C125FDAA4279 = {isa = PBXBuildFile; fileRef = 7525879E73E8AF32FFA0CDDE; }; - C5E7BAD864E02CF37F7BD707 = {isa = PBXBuildFile; fileRef = 33AA348465F512DBA8778DAF; }; - CBC8F7E5225C73CEDFB3B72E = {isa = PBXBuildFile; fileRef = A7FF2B353C8568B5A7A80117; }; - CADEA83EAAC94E0011C07908 = {isa = PBXBuildFile; fileRef = 84B287BB2AD252B7D69AC47E; }; - 3717B9F9A0F7C9CB95F1BE7F = {isa = PBXBuildFile; fileRef = 7BE6330821794919A88ED8ED; }; - 61B523C52EBA17F738FFE31A = {isa = PBXBuildFile; fileRef = 660F1970CF687A7AE8371C6D; }; - C6348C6B1D0312580E97EA19 = {isa = PBXBuildFile; fileRef = 3BF06B70407FFDBE9534F942; }; - 01E0EEF68A11C1CAF180E173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 0555BAE6156EAF15CA77A2D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 0ADF0DECFCB1DB4D3A847EB5 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; - 18BFEBD944DDE4809C89F27A = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 1FD6DBAC73414DD4C152E34E = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 25DEDA8C9F94A6C8DFC8E53E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SharedCanvas.h; path = ../../Source/SharedCanvas.h; sourceTree = "SOURCE_ROOT"; }; - 2E13A899F4E3C99054A3656F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 33AA348465F512DBA8778DAF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 398A945EFD9ED923162982B1 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - 3BF06B70407FFDBE9534F942 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_osc.cpp"; path = "../../JuceLibraryCode/include_juce_osc.cpp"; sourceTree = "SOURCE_ROOT"; }; - 448838BE6E937D450A3C84CE = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 4FF648D72D6F1A78956CDA1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Demos.h; path = ../../Source/Demos.h; sourceTree = "SOURCE_ROOT"; }; - 55CB060922ABCBC105FE38D2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_osc"; path = "../../../../modules/juce_osc"; sourceTree = "SOURCE_ROOT"; }; - 660F1970CF687A7AE8371C6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 6799B056504F9F017998B9E2 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 68EBC0BF5F01E05FDCB3EEAF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 696F7896036B652369517438 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 6D1F9E505D20C09647124F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 70F1CAF3C4C561DD81E6AFC1 = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - 74711D7544168CCAC4969A07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; - 7525879E73E8AF32FFA0CDDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - 77C0AC21C1028911123844FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 7BE6330821794919A88ED8ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - 84B287BB2AD252B7D69AC47E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 89583CD42AD218E9753DF11C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 8E2F72AFA0CDA64F0C07F105 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SlaveComponent.h; path = ../../Source/SlaveComponent.h; sourceTree = "SOURCE_ROOT"; }; - 8EACAADD3A23DED3E252C92F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 92800676AF753D1A60108F11 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; - 935CA85EF98714D3A17AE737 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 996E743A20FC78671766BF59 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - 9982F39121710EFFD5FEEAEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MasterComponent.h; path = ../../Source/MasterComponent.h; sourceTree = "SOURCE_ROOT"; }; - 9C67BD1915C7FD5747C2BA8F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 9C689AFBF364CB167C422D29 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - 9E8129263CD42C6029FC2CAD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - A505E1DABB2ED630EFBA96DB = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - A7FF2B353C8568B5A7A80117 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - AED58461CE961C62A0E0A552 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - AF330F41D1A4865108690E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - AFF729977947528F3E4AAA96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - B5433B00F012AD87AADBFCD6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - B76F10A7778664E164A01934 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - BA2E40409255F1B078406221 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - C6E2284D86D93F1D9D5C7666 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - C78806A6727F44EACFDED4A5 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - CB82A14817C3E2ABBBBC3864 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - D12A0DFFE18728E84D9AB739 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - E4162459ED4C829EF7B19691 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "JUCE Network Graphics Demo.app"; sourceTree = "BUILT_PRODUCTS_DIR"; }; - E4EA870A22A0C6649E55DD30 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - EC794872987FEA2E129C589A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - F3292E3563DB7ABB076DB400 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - F98A4DAA0502EE9252EBE06F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - FA0A789443FD480003E40435 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - FCEBB157FB526741DB6791D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - 5A58AF0A052C539F0E342A88 = {isa = PBXGroup; children = ( - 4FF648D72D6F1A78956CDA1B, - 77C0AC21C1028911123844FC, - 9982F39121710EFFD5FEEAEF, - 8E2F72AFA0CDA64F0C07F105, - 25DEDA8C9F94A6C8DFC8E53E, ); name = Source; sourceTree = ""; }; - 856518502A948813C90E6761 = {isa = PBXGroup; children = ( - 5A58AF0A052C539F0E342A88, - 0ADF0DECFCB1DB4D3A847EB5, ); name = NetworkGraphicsDemo; sourceTree = ""; }; - EF0AACA84F1CEE7F45F56339 = {isa = PBXGroup; children = ( - B76F10A7778664E164A01934, - 89583CD42AD218E9753DF11C, - 9C67BD1915C7FD5747C2BA8F, - A505E1DABB2ED630EFBA96DB, - E4EA870A22A0C6649E55DD30, - 8EACAADD3A23DED3E252C92F, - B5433B00F012AD87AADBFCD6, - BA2E40409255F1B078406221, - F98A4DAA0502EE9252EBE06F, - 18BFEBD944DDE4809C89F27A, - FA0A789443FD480003E40435, - 9C689AFBF364CB167C422D29, - 68EBC0BF5F01E05FDCB3EEAF, - 55CB060922ABCBC105FE38D2, ); name = "JUCE Modules"; sourceTree = ""; }; - C20D4DECE1291BF6AF8711DC = {isa = PBXGroup; children = ( - 0555BAE6156EAF15CA77A2D8, - 74711D7544168CCAC4969A07, - 92800676AF753D1A60108F11, - 6D1F9E505D20C09647124F0A, - AF330F41D1A4865108690E3C, - C6E2284D86D93F1D9D5C7666, - AED58461CE961C62A0E0A552, - FCEBB157FB526741DB6791D1, - 01E0EEF68A11C1CAF180E173, - AFF729977947528F3E4AAA96, - 7525879E73E8AF32FFA0CDDE, - 33AA348465F512DBA8778DAF, - A7FF2B353C8568B5A7A80117, - 84B287BB2AD252B7D69AC47E, - 7BE6330821794919A88ED8ED, - 660F1970CF687A7AE8371C6D, - 3BF06B70407FFDBE9534F942, - D12A0DFFE18728E84D9AB739, ); name = "JUCE Library Code"; sourceTree = ""; }; - 4AA57E2B5FD5374D348EEF7F = {isa = PBXGroup; children = ( - 1FD6DBAC73414DD4C152E34E, - 696F7896036B652369517438, - 70F1CAF3C4C561DD81E6AFC1, ); name = Resources; sourceTree = ""; }; - 71F5560BE0EE3A17A9CE44F6 = {isa = PBXGroup; children = ( - 2E13A899F4E3C99054A3656F, - 9E8129263CD42C6029FC2CAD, - 398A945EFD9ED923162982B1, - C78806A6727F44EACFDED4A5, - 6799B056504F9F017998B9E2, - 448838BE6E937D450A3C84CE, - CB82A14817C3E2ABBBBC3864, - F3292E3563DB7ABB076DB400, - 996E743A20FC78671766BF59, - 935CA85EF98714D3A17AE737, - EC794872987FEA2E129C589A, ); name = Frameworks; sourceTree = ""; }; - 8B59A884C62D960EE9DFEF47 = {isa = PBXGroup; children = ( - E4162459ED4C829EF7B19691, ); name = Products; sourceTree = ""; }; - D2EB65517396C974F0415A7F = {isa = PBXGroup; children = ( - 856518502A948813C90E6761, - EF0AACA84F1CEE7F45F56339, - C20D4DECE1291BF6AF8711DC, - 4AA57E2B5FD5374D348EEF7F, - 71F5560BE0EE3A17A9CE44F6, - 8B59A884C62D960EE9DFEF47, ); name = Source; sourceTree = ""; }; - EE7498599191DDC73ECB55B0 = {isa = XCBuildConfiguration; buildSettings = { + F468E8C7B02DFD4D53911277 = { + isa = PBXBuildFile; + fileRef = E4162459ED4C829EF7B19691; + }; + 80EE2C27B466BAFD83881D3F = { + isa = PBXBuildFile; + fileRef = 2E13A899F4E3C99054A3656F; + }; + C4D6C466C41173D6970553D2 = { + isa = PBXBuildFile; + fileRef = 9E8129263CD42C6029FC2CAD; + }; + BED88ADEA4DC91AA8C810FA8 = { + isa = PBXBuildFile; + fileRef = 398A945EFD9ED923162982B1; + }; + 3C30D7C28C86F4054257DCD5 = { + isa = PBXBuildFile; + fileRef = C78806A6727F44EACFDED4A5; + }; + 67DF295E93E54432043126DF = { + isa = PBXBuildFile; + fileRef = 6799B056504F9F017998B9E2; + }; + CA694B2A73FCF12D7F9E7E49 = { + isa = PBXBuildFile; + fileRef = 448838BE6E937D450A3C84CE; + }; + 80B9F7ED2009922C693B7DD4 = { + isa = PBXBuildFile; + fileRef = CB82A14817C3E2ABBBBC3864; + }; + 77745BF98931B91341FE17F6 = { + isa = PBXBuildFile; + fileRef = F3292E3563DB7ABB076DB400; + }; + B323E5E5FBD5663B21A8E623 = { + isa = PBXBuildFile; + fileRef = 996E743A20FC78671766BF59; + }; + EC14DA30C090DDC62084DB4C = { + isa = PBXBuildFile; + fileRef = 935CA85EF98714D3A17AE737; + }; + 8ECB0767EE340DD83869E37D = { + isa = PBXBuildFile; + fileRef = EC794872987FEA2E129C589A; + }; + 65B2C4ED19229E0EDC8EF993 = { + isa = PBXBuildFile; + fileRef = 696F7896036B652369517438; + }; + 006DF460F8DF66EFFA80D968 = { + isa = PBXBuildFile; + fileRef = 70F1CAF3C4C561DD81E6AFC1; + }; + 987CBD5330E76B404F0D966C = { + isa = PBXBuildFile; + fileRef = 77C0AC21C1028911123844FC; + }; + 9F618C008A503063D10076C4 = { + isa = PBXBuildFile; + fileRef = 74711D7544168CCAC4969A07; + }; + BB9A9692D99DD0DDB1047B60 = { + isa = PBXBuildFile; + fileRef = 6D1F9E505D20C09647124F0A; + }; + 6C2200C52B65E1BE80544E50 = { + isa = PBXBuildFile; + fileRef = AF330F41D1A4865108690E3C; + }; + A1F34D09F4E4338775917ED1 = { + isa = PBXBuildFile; + fileRef = C6E2284D86D93F1D9D5C7666; + }; + 2E28F61A64DEF942FE7B94C4 = { + isa = PBXBuildFile; + fileRef = AED58461CE961C62A0E0A552; + }; + EA487FA4116517A8DFEE85B0 = { + isa = PBXBuildFile; + fileRef = FCEBB157FB526741DB6791D1; + }; + 0977FEC02DAF29438583198A = { + isa = PBXBuildFile; + fileRef = 01E0EEF68A11C1CAF180E173; + }; + 0FA2A3321630EBE83E439D99 = { + isa = PBXBuildFile; + fileRef = AFF729977947528F3E4AAA96; + }; + 9EFD2AA2FFF3C125FDAA4279 = { + isa = PBXBuildFile; + fileRef = 7525879E73E8AF32FFA0CDDE; + }; + C5E7BAD864E02CF37F7BD707 = { + isa = PBXBuildFile; + fileRef = 33AA348465F512DBA8778DAF; + }; + CBC8F7E5225C73CEDFB3B72E = { + isa = PBXBuildFile; + fileRef = A7FF2B353C8568B5A7A80117; + }; + CADEA83EAAC94E0011C07908 = { + isa = PBXBuildFile; + fileRef = 84B287BB2AD252B7D69AC47E; + }; + 3717B9F9A0F7C9CB95F1BE7F = { + isa = PBXBuildFile; + fileRef = 7BE6330821794919A88ED8ED; + }; + 61B523C52EBA17F738FFE31A = { + isa = PBXBuildFile; + fileRef = 660F1970CF687A7AE8371C6D; + }; + C6348C6B1D0312580E97EA19 = { + isa = PBXBuildFile; + fileRef = 3BF06B70407FFDBE9534F942; + }; + 01E0EEF68A11C1CAF180E173 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 0555BAE6156EAF15CA77A2D8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 0ADF0DECFCB1DB4D3A847EB5 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = "juce_icon.png"; + path = "../../Source/juce_icon.png"; + sourceTree = "SOURCE_ROOT"; + }; + 18BFEBD944DDE4809C89F27A = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 1FD6DBAC73414DD4C152E34E = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 25DEDA8C9F94A6C8DFC8E53E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SharedCanvas.h; + path = ../../Source/SharedCanvas.h; + sourceTree = "SOURCE_ROOT"; + }; + 2E13A899F4E3C99054A3656F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 33AA348465F512DBA8778DAF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 398A945EFD9ED923162982B1 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Carbon.framework; + path = System/Library/Frameworks/Carbon.framework; + sourceTree = SDKROOT; + }; + 3BF06B70407FFDBE9534F942 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_osc.cpp"; + path = "../../JuceLibraryCode/include_juce_osc.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 448838BE6E937D450A3C84CE = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 4FF648D72D6F1A78956CDA1B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = Demos.h; + path = ../../Source/Demos.h; + sourceTree = "SOURCE_ROOT"; + }; + 55CB060922ABCBC105FE38D2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_osc"; + path = "../../../../modules/juce_osc"; + sourceTree = "SOURCE_ROOT"; + }; + 660F1970CF687A7AE8371C6D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 6799B056504F9F017998B9E2 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + 68EBC0BF5F01E05FDCB3EEAF = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 696F7896036B652369517438 = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 6D1F9E505D20C09647124F0A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 70F1CAF3C4C561DD81E6AFC1 = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + 74711D7544168CCAC4969A07 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = BinaryData.cpp; + path = ../../JuceLibraryCode/BinaryData.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 7525879E73E8AF32FFA0CDDE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 77C0AC21C1028911123844FC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 7BE6330821794919A88ED8ED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 84B287BB2AD252B7D69AC47E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 89583CD42AD218E9753DF11C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 8E2F72AFA0CDA64F0C07F105 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SlaveComponent.h; + path = ../../Source/SlaveComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 8EACAADD3A23DED3E252C92F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 92800676AF753D1A60108F11 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = BinaryData.h; + path = ../../JuceLibraryCode/BinaryData.h; + sourceTree = "SOURCE_ROOT"; + }; + 935CA85EF98714D3A17AE737 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 996E743A20FC78671766BF59 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGL.framework; + path = System/Library/Frameworks/OpenGL.framework; + sourceTree = SDKROOT; + }; + 9982F39121710EFFD5FEEAEF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MasterComponent.h; + path = ../../Source/MasterComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 9C67BD1915C7FD5747C2BA8F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 9C689AFBF364CB167C422D29 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + 9E8129263CD42C6029FC2CAD = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + A505E1DABB2ED630EFBA96DB = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + A7FF2B353C8568B5A7A80117 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AED58461CE961C62A0E0A552 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AF330F41D1A4865108690E3C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AFF729977947528F3E4AAA96 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + B5433B00F012AD87AADBFCD6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + B76F10A7778664E164A01934 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + BA2E40409255F1B078406221 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + C6E2284D86D93F1D9D5C7666 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + C78806A6727F44EACFDED4A5 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + CB82A14817C3E2ABBBBC3864 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = DiscRecording.framework; + path = System/Library/Frameworks/DiscRecording.framework; + sourceTree = SDKROOT; + }; + D12A0DFFE18728E84D9AB739 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + E4162459ED4C829EF7B19691 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = "JUCE Network Graphics Demo.app"; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + E4EA870A22A0C6649E55DD30 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + EC794872987FEA2E129C589A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = WebKit.framework; + path = System/Library/Frameworks/WebKit.framework; + sourceTree = SDKROOT; + }; + F3292E3563DB7ABB076DB400 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + F98A4DAA0502EE9252EBE06F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + FA0A789443FD480003E40435 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + FCEBB157FB526741DB6791D1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5A58AF0A052C539F0E342A88 = { + isa = PBXGroup; + children = ( + 4FF648D72D6F1A78956CDA1B, + 77C0AC21C1028911123844FC, + 9982F39121710EFFD5FEEAEF, + 8E2F72AFA0CDA64F0C07F105, + 25DEDA8C9F94A6C8DFC8E53E, + ); + name = Source; + sourceTree = ""; + }; + 856518502A948813C90E6761 = { + isa = PBXGroup; + children = ( + 5A58AF0A052C539F0E342A88, + 0ADF0DECFCB1DB4D3A847EB5, + ); + name = NetworkGraphicsDemo; + sourceTree = ""; + }; + EF0AACA84F1CEE7F45F56339 = { + isa = PBXGroup; + children = ( + B76F10A7778664E164A01934, + 89583CD42AD218E9753DF11C, + 9C67BD1915C7FD5747C2BA8F, + A505E1DABB2ED630EFBA96DB, + E4EA870A22A0C6649E55DD30, + 8EACAADD3A23DED3E252C92F, + B5433B00F012AD87AADBFCD6, + BA2E40409255F1B078406221, + F98A4DAA0502EE9252EBE06F, + 18BFEBD944DDE4809C89F27A, + FA0A789443FD480003E40435, + 9C689AFBF364CB167C422D29, + 68EBC0BF5F01E05FDCB3EEAF, + 55CB060922ABCBC105FE38D2, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + C20D4DECE1291BF6AF8711DC = { + isa = PBXGroup; + children = ( + 0555BAE6156EAF15CA77A2D8, + 74711D7544168CCAC4969A07, + 92800676AF753D1A60108F11, + 6D1F9E505D20C09647124F0A, + AF330F41D1A4865108690E3C, + C6E2284D86D93F1D9D5C7666, + AED58461CE961C62A0E0A552, + FCEBB157FB526741DB6791D1, + 01E0EEF68A11C1CAF180E173, + AFF729977947528F3E4AAA96, + 7525879E73E8AF32FFA0CDDE, + 33AA348465F512DBA8778DAF, + A7FF2B353C8568B5A7A80117, + 84B287BB2AD252B7D69AC47E, + 7BE6330821794919A88ED8ED, + 660F1970CF687A7AE8371C6D, + 3BF06B70407FFDBE9534F942, + D12A0DFFE18728E84D9AB739, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + 4AA57E2B5FD5374D348EEF7F = { + isa = PBXGroup; + children = ( + 1FD6DBAC73414DD4C152E34E, + 696F7896036B652369517438, + 70F1CAF3C4C561DD81E6AFC1, + ); + name = Resources; + sourceTree = ""; + }; + 71F5560BE0EE3A17A9CE44F6 = { + isa = PBXGroup; + children = ( + 2E13A899F4E3C99054A3656F, + 9E8129263CD42C6029FC2CAD, + 398A945EFD9ED923162982B1, + C78806A6727F44EACFDED4A5, + 6799B056504F9F017998B9E2, + 448838BE6E937D450A3C84CE, + CB82A14817C3E2ABBBBC3864, + F3292E3563DB7ABB076DB400, + 996E743A20FC78671766BF59, + 935CA85EF98714D3A17AE737, + EC794872987FEA2E129C589A, + ); + name = Frameworks; + sourceTree = ""; + }; + 8B59A884C62D960EE9DFEF47 = { + isa = PBXGroup; + children = ( + E4162459ED4C829EF7B19691, + ); + name = Products; + sourceTree = ""; + }; + D2EB65517396C974F0415A7F = { + isa = PBXGroup; + children = ( + 856518502A948813C90E6761, + EF0AACA84F1CEE7F45F56339, + C20D4DECE1291BF6AF8711DC, + 4AA57E2B5FD5374D348EEF7F, + 71F5560BE0EE3A17A9CE44F6, + 8B59A884C62D960EE9DFEF47, + ); + name = Source; + sourceTree = ""; + }; + EE7498599191DDC73ECB55B0 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -178,18 +635,28 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - 2E06386CE7CCA5FF76819BFF = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "JUCE Network Graphics Demo"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 2E06386CE7CCA5FF76819BFF = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -210,30 +677,43 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - 3BF0365A560ACD4FD24D40CE = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "JUCE Network Graphics Demo"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + 3BF0365A560ACD4FD24D40CE = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -260,18 +740,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "JUCE Network Graphics Demo"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 9C6D2FD441D79104734762A5 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 9C6D2FD441D79104734762A5 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -296,51 +784,108 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "JUCE Network Graphics Demo"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - 80BE97CC38B01FABC0E73204 = {isa = PBXTargetDependency; target = 4311FBCBD02948A0ED96C7DD; }; - 02715337C584F3C721251428 = {isa = XCConfigurationList; buildConfigurations = ( - 3BF0365A560ACD4FD24D40CE, - 9C6D2FD441D79104734762A5, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - B73863F5D180C23D3EC40C38 = {isa = XCConfigurationList; buildConfigurations = ( - EE7498599191DDC73ECB55B0, - 2E06386CE7CCA5FF76819BFF, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 714944DB86A4D402E7FA269E = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 65B2C4ED19229E0EDC8EF993, - 006DF460F8DF66EFFA80D968, ); runOnlyForDeploymentPostprocessing = 0; }; - C2977559BF9148DB70CA10AE = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 987CBD5330E76B404F0D966C, - 9F618C008A503063D10076C4, - BB9A9692D99DD0DDB1047B60, - 6C2200C52B65E1BE80544E50, - A1F34D09F4E4338775917ED1, - 2E28F61A64DEF942FE7B94C4, - EA487FA4116517A8DFEE85B0, - 0977FEC02DAF29438583198A, - 0FA2A3321630EBE83E439D99, - 9EFD2AA2FFF3C125FDAA4279, - C5E7BAD864E02CF37F7BD707, - CBC8F7E5225C73CEDFB3B72E, - CADEA83EAAC94E0011C07908, - 3717B9F9A0F7C9CB95F1BE7F, - 61B523C52EBA17F738FFE31A, - C6348C6B1D0312580E97EA19, ); runOnlyForDeploymentPostprocessing = 0; }; - 865E89B94B41EB14C202CBB0 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 80EE2C27B466BAFD83881D3F, - C4D6C466C41173D6970553D2, - BED88ADEA4DC91AA8C810FA8, - 3C30D7C28C86F4054257DCD5, - 67DF295E93E54432043126DF, - CA694B2A73FCF12D7F9E7E49, - 80B9F7ED2009922C693B7DD4, - 77745BF98931B91341FE17F6, - B323E5E5FBD5663B21A8E623, - EC14DA30C090DDC62084DB4C, - 8ECB0767EE340DD83869E37D, ); runOnlyForDeploymentPostprocessing = 0; }; - 4311FBCBD02948A0ED96C7DD = {isa = PBXNativeTarget; buildConfigurationList = B73863F5D180C23D3EC40C38; buildPhases = ( - 714944DB86A4D402E7FA269E, - C2977559BF9148DB70CA10AE, - 865E89B94B41EB14C202CBB0, ); buildRules = ( ); dependencies = ( ); name = "NetworkGraphicsDemo - App"; productName = NetworkGraphicsDemo; productReference = E4162459ED4C829EF7B19691; productType = "com.apple.product-type.application"; }; - A5398ADB6F5B128C00EB935C = {isa = PBXProject; buildConfigurationList = 02715337C584F3C721251428; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 4311FBCBD02948A0ED96C7DD = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = D2EB65517396C974F0415A7F; projectDirPath = ""; projectRoot = ""; targets = (4311FBCBD02948A0ED96C7DD); }; + ZERO_LINK = NO; + }; + name = Release; + }; + 80BE97CC38B01FABC0E73204 = { + isa = PBXTargetDependency; + target = 4311FBCBD02948A0ED96C7DD; + }; + 02715337C584F3C721251428 = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BF0365A560ACD4FD24D40CE, + 9C6D2FD441D79104734762A5, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + B73863F5D180C23D3EC40C38 = { + isa = XCConfigurationList; + buildConfigurations = ( + EE7498599191DDC73ECB55B0, + 2E06386CE7CCA5FF76819BFF, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 714944DB86A4D402E7FA269E = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 65B2C4ED19229E0EDC8EF993, + 006DF460F8DF66EFFA80D968, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C2977559BF9148DB70CA10AE = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 987CBD5330E76B404F0D966C, + 9F618C008A503063D10076C4, + BB9A9692D99DD0DDB1047B60, + 6C2200C52B65E1BE80544E50, + A1F34D09F4E4338775917ED1, + 2E28F61A64DEF942FE7B94C4, + EA487FA4116517A8DFEE85B0, + 0977FEC02DAF29438583198A, + 0FA2A3321630EBE83E439D99, + 9EFD2AA2FFF3C125FDAA4279, + C5E7BAD864E02CF37F7BD707, + CBC8F7E5225C73CEDFB3B72E, + CADEA83EAAC94E0011C07908, + 3717B9F9A0F7C9CB95F1BE7F, + 61B523C52EBA17F738FFE31A, + C6348C6B1D0312580E97EA19, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 865E89B94B41EB14C202CBB0 = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 80EE2C27B466BAFD83881D3F, + C4D6C466C41173D6970553D2, + BED88ADEA4DC91AA8C810FA8, + 3C30D7C28C86F4054257DCD5, + 67DF295E93E54432043126DF, + CA694B2A73FCF12D7F9E7E49, + 80B9F7ED2009922C693B7DD4, + 77745BF98931B91341FE17F6, + B323E5E5FBD5663B21A8E623, + EC14DA30C090DDC62084DB4C, + 8ECB0767EE340DD83869E37D, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4311FBCBD02948A0ED96C7DD = { + isa = PBXNativeTarget; + buildConfigurationList = B73863F5D180C23D3EC40C38; + buildPhases = ( + 714944DB86A4D402E7FA269E, + C2977559BF9148DB70CA10AE, + 865E89B94B41EB14C202CBB0, + ); + buildRules = ( ); + dependencies = ( ); + name = "NetworkGraphicsDemo - App"; + productName = NetworkGraphicsDemo; + productReference = E4162459ED4C829EF7B19691; + productType = "com.apple.product-type.application"; + }; + A5398ADB6F5B128C00EB935C = { + isa = PBXProject; + buildConfigurationList = 02715337C584F3C721251428; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 4311FBCBD02948A0ED96C7DD = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = D2EB65517396C974F0415A7F; + projectDirPath = ""; + projectRoot = ""; + targets = (4311FBCBD02948A0ED96C7DD); + }; }; rootObject = A5398ADB6F5B128C00EB935C; } diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj index deec8db8..005ce490 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj @@ -15,8 +15,6 @@ {2F8ABED0-7428-13A5-07CD-EF1F3B43B926} - v120 - 8.1 false false v120 - v120 8.1 false true v120 - v120 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v120 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ JUCE Network Graphics Demo true - v120 - 8.1 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -155,6 +145,9 @@ true + + true + true @@ -485,6 +478,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -509,6 +568,9 @@ true + + true + true @@ -584,6 +646,9 @@ true + + true + true @@ -593,9 +658,15 @@ true + + true + true + + true + true @@ -650,6 +721,9 @@ true + + true + true @@ -932,6 +1006,9 @@ true + + true + true @@ -1319,10 +1396,13 @@ true - + true - + + true + + true @@ -1838,6 +1918,7 @@ + @@ -1986,13 +2067,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2001,6 +2139,7 @@ + @@ -2012,6 +2151,7 @@ + @@ -2029,6 +2169,7 @@ + @@ -2066,6 +2207,7 @@ + @@ -2075,6 +2217,7 @@ + @@ -2084,6 +2227,7 @@ + @@ -2183,6 +2327,7 @@ + @@ -2275,8 +2420,9 @@ - + + @@ -2407,6 +2553,7 @@ + @@ -2462,6 +2609,11 @@ + + + + + diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj.filters index fdeb11f1..438ae13e 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2013/NetworkGraphicsDemo_App.vcxproj.filters @@ -104,6 +104,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -278,6 +323,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -376,6 +424,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -715,6 +766,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -742,6 +859,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -835,6 +955,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -844,9 +967,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -901,6 +1030,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1207,6 +1339,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1612,12 +1747,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2220,6 +2358,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2664,6 +2805,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2682,9 +2997,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2709,6 +3021,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2742,6 +3057,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2793,6 +3111,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2904,6 +3225,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2931,6 +3255,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2958,6 +3285,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3255,6 +3585,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3531,12 +3864,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3927,6 +4263,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4088,6 +4427,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj b/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj index 2eaf232c..8b3cbb1c 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj @@ -15,8 +15,6 @@ {2F8ABED0-7428-13A5-07CD-EF1F3B43B926} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ JUCE Network Graphics Demo true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -155,6 +145,9 @@ true + + true + true @@ -485,6 +478,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -509,6 +568,9 @@ true + + true + true @@ -584,6 +646,9 @@ true + + true + true @@ -593,9 +658,15 @@ true + + true + true + + true + true @@ -650,6 +721,9 @@ true + + true + true @@ -932,6 +1006,9 @@ true + + true + true @@ -1319,10 +1396,13 @@ true - + true - + + true + + true @@ -1838,6 +1918,7 @@ + @@ -1986,13 +2067,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2001,6 +2139,7 @@ + @@ -2012,6 +2151,7 @@ + @@ -2029,6 +2169,7 @@ + @@ -2066,6 +2207,7 @@ + @@ -2075,6 +2217,7 @@ + @@ -2084,6 +2227,7 @@ + @@ -2183,6 +2327,7 @@ + @@ -2275,8 +2420,9 @@ - + + @@ -2407,6 +2553,7 @@ + @@ -2462,6 +2609,11 @@ + + + + + diff --git a/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj.filters b/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj.filters index 70136663..256331ba 100644 --- a/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj.filters +++ b/extras/NetworkGraphicsDemo/Builds/VisualStudio2017/NetworkGraphicsDemo_App.vcxproj.filters @@ -104,6 +104,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -278,6 +323,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -376,6 +424,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -715,6 +766,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -742,6 +859,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -835,6 +955,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -844,9 +967,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -901,6 +1030,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1207,6 +1339,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1612,12 +1747,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2220,6 +2358,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2664,6 +2805,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2682,9 +2997,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2709,6 +3021,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2742,6 +3057,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2793,6 +3111,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2904,6 +3225,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2931,6 +3255,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2958,6 +3285,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3255,6 +3585,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3531,12 +3864,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3927,6 +4263,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4088,6 +4427,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj index 590ad901..20747ce3 100644 --- a/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj +++ b/extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj @@ -5,168 +5,652 @@ }; objectVersion = 46; objects = { - - F468E8C7B02DFD4D53911277 = {isa = PBXBuildFile; fileRef = E4162459ED4C829EF7B19691; }; - 80EE2C27B466BAFD83881D3F = {isa = PBXBuildFile; fileRef = 2E13A899F4E3C99054A3656F; }; - C4D6C466C41173D6970553D2 = {isa = PBXBuildFile; fileRef = 9E8129263CD42C6029FC2CAD; }; - 3CC6DC6E223415B506D0CB75 = {isa = PBXBuildFile; fileRef = 080961C54C58ECF2346B4C23; }; - 67DF295E93E54432043126DF = {isa = PBXBuildFile; fileRef = 6799B056504F9F017998B9E2; }; - 770AB74B1D3A0108F764DD47 = {isa = PBXBuildFile; fileRef = 4D1DB6D77B6F3DE7A569780B; }; - 366A216FDEBD7BDDC1BA12D9 = {isa = PBXBuildFile; fileRef = DA40ED39AF4B56000E5A2743; }; - 1F7A8BD2B43B3D191132301D = {isa = PBXBuildFile; fileRef = E51ABCA80B75F33848F28184; }; - CA694B2A73FCF12D7F9E7E49 = {isa = PBXBuildFile; fileRef = 448838BE6E937D450A3C84CE; }; - 5A64B64E5B45AEA1A0EECC4B = {isa = PBXBuildFile; fileRef = 9193D2A3C463BEAA07FD424D; }; - F918FB5901F09EA77DB32022 = {isa = PBXBuildFile; fileRef = F7D557738137CA1A370BAA27; }; - 1006E2E5DFA26D7DD20BC438 = {isa = PBXBuildFile; fileRef = 855850D3F44F120C46DE82EC; }; - A6AA70BD9364BB974CDEB337 = {isa = PBXBuildFile; fileRef = C821C5805007FFDC2636BBE6; }; - EC14DA30C090DDC62084DB4C = {isa = PBXBuildFile; fileRef = 935CA85EF98714D3A17AE737; }; - F714F0C84F5945BF3539239E = {isa = PBXBuildFile; fileRef = 379F77D23BFAE3795282CEB3; }; - 1282A62308CD1AC3F88A5D03 = {isa = PBXBuildFile; fileRef = 5273768FBB55D0DD57A5E70C; }; - 006DF460F8DF66EFFA80D968 = {isa = PBXBuildFile; fileRef = 70F1CAF3C4C561DD81E6AFC1; }; - 987CBD5330E76B404F0D966C = {isa = PBXBuildFile; fileRef = 77C0AC21C1028911123844FC; }; - 9F618C008A503063D10076C4 = {isa = PBXBuildFile; fileRef = 74711D7544168CCAC4969A07; }; - BB9A9692D99DD0DDB1047B60 = {isa = PBXBuildFile; fileRef = 6D1F9E505D20C09647124F0A; }; - 6C2200C52B65E1BE80544E50 = {isa = PBXBuildFile; fileRef = AF330F41D1A4865108690E3C; }; - A1F34D09F4E4338775917ED1 = {isa = PBXBuildFile; fileRef = C6E2284D86D93F1D9D5C7666; }; - 2E28F61A64DEF942FE7B94C4 = {isa = PBXBuildFile; fileRef = AED58461CE961C62A0E0A552; }; - EA487FA4116517A8DFEE85B0 = {isa = PBXBuildFile; fileRef = FCEBB157FB526741DB6791D1; }; - 0977FEC02DAF29438583198A = {isa = PBXBuildFile; fileRef = 01E0EEF68A11C1CAF180E173; }; - 0FA2A3321630EBE83E439D99 = {isa = PBXBuildFile; fileRef = AFF729977947528F3E4AAA96; }; - 9EFD2AA2FFF3C125FDAA4279 = {isa = PBXBuildFile; fileRef = 7525879E73E8AF32FFA0CDDE; }; - C5E7BAD864E02CF37F7BD707 = {isa = PBXBuildFile; fileRef = 33AA348465F512DBA8778DAF; }; - CBC8F7E5225C73CEDFB3B72E = {isa = PBXBuildFile; fileRef = A7FF2B353C8568B5A7A80117; }; - CADEA83EAAC94E0011C07908 = {isa = PBXBuildFile; fileRef = 84B287BB2AD252B7D69AC47E; }; - 3717B9F9A0F7C9CB95F1BE7F = {isa = PBXBuildFile; fileRef = 7BE6330821794919A88ED8ED; }; - 61B523C52EBA17F738FFE31A = {isa = PBXBuildFile; fileRef = 660F1970CF687A7AE8371C6D; }; - C6348C6B1D0312580E97EA19 = {isa = PBXBuildFile; fileRef = 3BF06B70407FFDBE9534F942; }; - 01E0EEF68A11C1CAF180E173 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - 0555BAE6156EAF15CA77A2D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 080961C54C58ECF2346B4C23 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 0ADF0DECFCB1DB4D3A847EB5 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; - 18BFEBD944DDE4809C89F27A = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - 1FD6DBAC73414DD4C152E34E = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - 25DEDA8C9F94A6C8DFC8E53E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SharedCanvas.h; path = ../../Source/SharedCanvas.h; sourceTree = "SOURCE_ROOT"; }; - 2E13A899F4E3C99054A3656F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 33AA348465F512DBA8778DAF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 379F77D23BFAE3795282CEB3 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 3BF06B70407FFDBE9534F942 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_osc.cpp"; path = "../../JuceLibraryCode/include_juce_osc.cpp"; sourceTree = "SOURCE_ROOT"; }; - 448838BE6E937D450A3C84CE = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 4D1DB6D77B6F3DE7A569780B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - 4FF648D72D6F1A78956CDA1B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Demos.h; path = ../../Source/Demos.h; sourceTree = "SOURCE_ROOT"; }; - 5273768FBB55D0DD57A5E70C = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = NetworkGraphicsDemo/Images.xcassets; sourceTree = "SOURCE_ROOT"; }; - 55CB060922ABCBC105FE38D2 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_osc"; path = "../../../../modules/juce_osc"; sourceTree = "SOURCE_ROOT"; }; - 660F1970CF687A7AE8371C6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_opengl.mm"; path = "../../JuceLibraryCode/include_juce_opengl.mm"; sourceTree = "SOURCE_ROOT"; }; - 6799B056504F9F017998B9E2 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 68EBC0BF5F01E05FDCB3EEAF = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_opengl"; path = "../../../../modules/juce_opengl"; sourceTree = "SOURCE_ROOT"; }; - 6D1F9E505D20C09647124F0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_basics.mm"; path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 70F1CAF3C4C561DD81E6AFC1 = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - 74711D7544168CCAC4969A07 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; - 7525879E73E8AF32FFA0CDDE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - 77C0AC21C1028911123844FC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = "SOURCE_ROOT"; }; - 7BE6330821794919A88ED8ED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - 84B287BB2AD252B7D69AC47E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 855850D3F44F120C46DE82EC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 89583CD42AD218E9753DF11C = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_devices"; path = "../../../../modules/juce_audio_devices"; sourceTree = "SOURCE_ROOT"; }; - 8E2F72AFA0CDA64F0C07F105 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SlaveComponent.h; path = ../../Source/SlaveComponent.h; sourceTree = "SOURCE_ROOT"; }; - 8EACAADD3A23DED3E252C92F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - 9193D2A3C463BEAA07FD424D = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 92800676AF753D1A60108F11 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; - 935CA85EF98714D3A17AE737 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 9982F39121710EFFD5FEEAEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = MasterComponent.h; path = ../../Source/MasterComponent.h; sourceTree = "SOURCE_ROOT"; }; - 9C67BD1915C7FD5747C2BA8F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_formats"; path = "../../../../modules/juce_audio_formats"; sourceTree = "SOURCE_ROOT"; }; - 9C689AFBF364CB167C422D29 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - 9E8129263CD42C6029FC2CAD = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - A505E1DABB2ED630EFBA96DB = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_processors"; path = "../../../../modules/juce_audio_processors"; sourceTree = "SOURCE_ROOT"; }; - A7FF2B353C8568B5A7A80117 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - AED58461CE961C62A0E0A552 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_processors.mm"; path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; sourceTree = "SOURCE_ROOT"; }; - AF330F41D1A4865108690E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_devices.mm"; path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; sourceTree = "SOURCE_ROOT"; }; - AFF729977947528F3E4AAA96 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - B5433B00F012AD87AADBFCD6 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - B76F10A7778664E164A01934 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_basics"; path = "../../../../modules/juce_audio_basics"; sourceTree = "SOURCE_ROOT"; }; - BA2E40409255F1B078406221 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - C6E2284D86D93F1D9D5C7666 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_formats.mm"; path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; sourceTree = "SOURCE_ROOT"; }; - C821C5805007FFDC2636BBE6 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - D12A0DFFE18728E84D9AB739 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - DA40ED39AF4B56000E5A2743 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - E4162459ED4C829EF7B19691 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "JUCE Network Graphics Demo.app"; sourceTree = "BUILT_PRODUCTS_DIR"; }; - E4EA870A22A0C6649E55DD30 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_audio_utils"; path = "../../../../modules/juce_audio_utils"; sourceTree = "SOURCE_ROOT"; }; - E51ABCA80B75F33848F28184 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - F7D557738137CA1A370BAA27 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - F98A4DAA0502EE9252EBE06F = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - FA0A789443FD480003E40435 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - FCEBB157FB526741DB6791D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_audio_utils.mm"; path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; sourceTree = "SOURCE_ROOT"; }; - 5A58AF0A052C539F0E342A88 = {isa = PBXGroup; children = ( - 4FF648D72D6F1A78956CDA1B, - 77C0AC21C1028911123844FC, - 9982F39121710EFFD5FEEAEF, - 8E2F72AFA0CDA64F0C07F105, - 25DEDA8C9F94A6C8DFC8E53E, ); name = Source; sourceTree = ""; }; - 856518502A948813C90E6761 = {isa = PBXGroup; children = ( - 5A58AF0A052C539F0E342A88, - 0ADF0DECFCB1DB4D3A847EB5, ); name = NetworkGraphicsDemo; sourceTree = ""; }; - EF0AACA84F1CEE7F45F56339 = {isa = PBXGroup; children = ( - B76F10A7778664E164A01934, - 89583CD42AD218E9753DF11C, - 9C67BD1915C7FD5747C2BA8F, - A505E1DABB2ED630EFBA96DB, - E4EA870A22A0C6649E55DD30, - 8EACAADD3A23DED3E252C92F, - B5433B00F012AD87AADBFCD6, - BA2E40409255F1B078406221, - F98A4DAA0502EE9252EBE06F, - 18BFEBD944DDE4809C89F27A, - FA0A789443FD480003E40435, - 9C689AFBF364CB167C422D29, - 68EBC0BF5F01E05FDCB3EEAF, - 55CB060922ABCBC105FE38D2, ); name = "JUCE Modules"; sourceTree = ""; }; - C20D4DECE1291BF6AF8711DC = {isa = PBXGroup; children = ( - 0555BAE6156EAF15CA77A2D8, - 74711D7544168CCAC4969A07, - 92800676AF753D1A60108F11, - 6D1F9E505D20C09647124F0A, - AF330F41D1A4865108690E3C, - C6E2284D86D93F1D9D5C7666, - AED58461CE961C62A0E0A552, - FCEBB157FB526741DB6791D1, - 01E0EEF68A11C1CAF180E173, - AFF729977947528F3E4AAA96, - 7525879E73E8AF32FFA0CDDE, - 33AA348465F512DBA8778DAF, - A7FF2B353C8568B5A7A80117, - 84B287BB2AD252B7D69AC47E, - 7BE6330821794919A88ED8ED, - 660F1970CF687A7AE8371C6D, - 3BF06B70407FFDBE9534F942, - D12A0DFFE18728E84D9AB739, ); name = "JUCE Library Code"; sourceTree = ""; }; - 4AA57E2B5FD5374D348EEF7F = {isa = PBXGroup; children = ( - 1FD6DBAC73414DD4C152E34E, - 5273768FBB55D0DD57A5E70C, - 70F1CAF3C4C561DD81E6AFC1, ); name = Resources; sourceTree = ""; }; - 71F5560BE0EE3A17A9CE44F6 = {isa = PBXGroup; children = ( - 2E13A899F4E3C99054A3656F, - 9E8129263CD42C6029FC2CAD, - 080961C54C58ECF2346B4C23, - 6799B056504F9F017998B9E2, - 4D1DB6D77B6F3DE7A569780B, - DA40ED39AF4B56000E5A2743, - E51ABCA80B75F33848F28184, - 448838BE6E937D450A3C84CE, - 9193D2A3C463BEAA07FD424D, - F7D557738137CA1A370BAA27, - 855850D3F44F120C46DE82EC, - C821C5805007FFDC2636BBE6, - 935CA85EF98714D3A17AE737, - 379F77D23BFAE3795282CEB3, ); name = Frameworks; sourceTree = ""; }; - 8B59A884C62D960EE9DFEF47 = {isa = PBXGroup; children = ( - E4162459ED4C829EF7B19691, ); name = Products; sourceTree = ""; }; - D2EB65517396C974F0415A7F = {isa = PBXGroup; children = ( - 856518502A948813C90E6761, - EF0AACA84F1CEE7F45F56339, - C20D4DECE1291BF6AF8711DC, - 4AA57E2B5FD5374D348EEF7F, - 71F5560BE0EE3A17A9CE44F6, - 8B59A884C62D960EE9DFEF47, ); name = Source; sourceTree = ""; }; - EE7498599191DDC73ECB55B0 = {isa = XCBuildConfiguration; buildSettings = { + F468E8C7B02DFD4D53911277 = { + isa = PBXBuildFile; + fileRef = E4162459ED4C829EF7B19691; + }; + 80EE2C27B466BAFD83881D3F = { + isa = PBXBuildFile; + fileRef = 2E13A899F4E3C99054A3656F; + }; + C4D6C466C41173D6970553D2 = { + isa = PBXBuildFile; + fileRef = 9E8129263CD42C6029FC2CAD; + }; + 3CC6DC6E223415B506D0CB75 = { + isa = PBXBuildFile; + fileRef = 080961C54C58ECF2346B4C23; + }; + 67DF295E93E54432043126DF = { + isa = PBXBuildFile; + fileRef = 6799B056504F9F017998B9E2; + }; + 770AB74B1D3A0108F764DD47 = { + isa = PBXBuildFile; + fileRef = 4D1DB6D77B6F3DE7A569780B; + }; + 366A216FDEBD7BDDC1BA12D9 = { + isa = PBXBuildFile; + fileRef = DA40ED39AF4B56000E5A2743; + }; + 1F7A8BD2B43B3D191132301D = { + isa = PBXBuildFile; + fileRef = E51ABCA80B75F33848F28184; + }; + CA694B2A73FCF12D7F9E7E49 = { + isa = PBXBuildFile; + fileRef = 448838BE6E937D450A3C84CE; + }; + 5A64B64E5B45AEA1A0EECC4B = { + isa = PBXBuildFile; + fileRef = 9193D2A3C463BEAA07FD424D; + }; + F918FB5901F09EA77DB32022 = { + isa = PBXBuildFile; + fileRef = F7D557738137CA1A370BAA27; + }; + 1006E2E5DFA26D7DD20BC438 = { + isa = PBXBuildFile; + fileRef = 855850D3F44F120C46DE82EC; + }; + A6AA70BD9364BB974CDEB337 = { + isa = PBXBuildFile; + fileRef = C821C5805007FFDC2636BBE6; + }; + EC14DA30C090DDC62084DB4C = { + isa = PBXBuildFile; + fileRef = 935CA85EF98714D3A17AE737; + }; + F714F0C84F5945BF3539239E = { + isa = PBXBuildFile; + fileRef = 379F77D23BFAE3795282CEB3; + }; + 1282A62308CD1AC3F88A5D03 = { + isa = PBXBuildFile; + fileRef = 5273768FBB55D0DD57A5E70C; + }; + 006DF460F8DF66EFFA80D968 = { + isa = PBXBuildFile; + fileRef = 70F1CAF3C4C561DD81E6AFC1; + }; + 987CBD5330E76B404F0D966C = { + isa = PBXBuildFile; + fileRef = 77C0AC21C1028911123844FC; + }; + 9F618C008A503063D10076C4 = { + isa = PBXBuildFile; + fileRef = 74711D7544168CCAC4969A07; + }; + BB9A9692D99DD0DDB1047B60 = { + isa = PBXBuildFile; + fileRef = 6D1F9E505D20C09647124F0A; + }; + 6C2200C52B65E1BE80544E50 = { + isa = PBXBuildFile; + fileRef = AF330F41D1A4865108690E3C; + }; + A1F34D09F4E4338775917ED1 = { + isa = PBXBuildFile; + fileRef = C6E2284D86D93F1D9D5C7666; + }; + 2E28F61A64DEF942FE7B94C4 = { + isa = PBXBuildFile; + fileRef = AED58461CE961C62A0E0A552; + }; + EA487FA4116517A8DFEE85B0 = { + isa = PBXBuildFile; + fileRef = FCEBB157FB526741DB6791D1; + }; + 0977FEC02DAF29438583198A = { + isa = PBXBuildFile; + fileRef = 01E0EEF68A11C1CAF180E173; + }; + 0FA2A3321630EBE83E439D99 = { + isa = PBXBuildFile; + fileRef = AFF729977947528F3E4AAA96; + }; + 9EFD2AA2FFF3C125FDAA4279 = { + isa = PBXBuildFile; + fileRef = 7525879E73E8AF32FFA0CDDE; + }; + C5E7BAD864E02CF37F7BD707 = { + isa = PBXBuildFile; + fileRef = 33AA348465F512DBA8778DAF; + }; + CBC8F7E5225C73CEDFB3B72E = { + isa = PBXBuildFile; + fileRef = A7FF2B353C8568B5A7A80117; + }; + CADEA83EAAC94E0011C07908 = { + isa = PBXBuildFile; + fileRef = 84B287BB2AD252B7D69AC47E; + }; + 3717B9F9A0F7C9CB95F1BE7F = { + isa = PBXBuildFile; + fileRef = 7BE6330821794919A88ED8ED; + }; + 61B523C52EBA17F738FFE31A = { + isa = PBXBuildFile; + fileRef = 660F1970CF687A7AE8371C6D; + }; + C6348C6B1D0312580E97EA19 = { + isa = PBXBuildFile; + fileRef = 3BF06B70407FFDBE9534F942; + }; + 01E0EEF68A11C1CAF180E173 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 0555BAE6156EAF15CA77A2D8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 080961C54C58ECF2346B4C23 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + 0ADF0DECFCB1DB4D3A847EB5 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = "juce_icon.png"; + path = "../../Source/juce_icon.png"; + sourceTree = "SOURCE_ROOT"; + }; + 18BFEBD944DDE4809C89F27A = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + 1FD6DBAC73414DD4C152E34E = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + 25DEDA8C9F94A6C8DFC8E53E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SharedCanvas.h; + path = ../../Source/SharedCanvas.h; + sourceTree = "SOURCE_ROOT"; + }; + 2E13A899F4E3C99054A3656F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 33AA348465F512DBA8778DAF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 379F77D23BFAE3795282CEB3 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = UIKit.framework; + path = System/Library/Frameworks/UIKit.framework; + sourceTree = SDKROOT; + }; + 3BF06B70407FFDBE9534F942 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_osc.cpp"; + path = "../../JuceLibraryCode/include_juce_osc.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 448838BE6E937D450A3C84CE = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 4D1DB6D77B6F3DE7A569780B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + 4FF648D72D6F1A78956CDA1B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = Demos.h; + path = ../../Source/Demos.h; + sourceTree = "SOURCE_ROOT"; + }; + 5273768FBB55D0DD57A5E70C = { + isa = PBXFileReference; + lastKnownFileType = folder.assetcatalog; + name = Images.xcassets; + path = NetworkGraphicsDemo/Images.xcassets; + sourceTree = "SOURCE_ROOT"; + }; + 55CB060922ABCBC105FE38D2 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_osc"; + path = "../../../../modules/juce_osc"; + sourceTree = "SOURCE_ROOT"; + }; + 660F1970CF687A7AE8371C6D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_opengl.mm"; + path = "../../JuceLibraryCode/include_juce_opengl.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 6799B056504F9F017998B9E2 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + 68EBC0BF5F01E05FDCB3EEAF = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_opengl"; + path = "../../../../modules/juce_opengl"; + sourceTree = "SOURCE_ROOT"; + }; + 6D1F9E505D20C09647124F0A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_basics.mm"; + path = "../../JuceLibraryCode/include_juce_audio_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 70F1CAF3C4C561DD81E6AFC1 = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + 74711D7544168CCAC4969A07 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = BinaryData.cpp; + path = ../../JuceLibraryCode/BinaryData.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 7525879E73E8AF32FFA0CDDE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 77C0AC21C1028911123844FC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = Main.cpp; + path = ../../Source/Main.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 7BE6330821794919A88ED8ED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 84B287BB2AD252B7D69AC47E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 855850D3F44F120C46DE82EC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = MobileCoreServices.framework; + path = System/Library/Frameworks/MobileCoreServices.framework; + sourceTree = SDKROOT; + }; + 89583CD42AD218E9753DF11C = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_devices"; + path = "../../../../modules/juce_audio_devices"; + sourceTree = "SOURCE_ROOT"; + }; + 8E2F72AFA0CDA64F0C07F105 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = SlaveComponent.h; + path = ../../Source/SlaveComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 8EACAADD3A23DED3E252C92F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + 9193D2A3C463BEAA07FD424D = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreText.framework; + path = System/Library/Frameworks/CoreText.framework; + sourceTree = SDKROOT; + }; + 92800676AF753D1A60108F11 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = BinaryData.h; + path = ../../JuceLibraryCode/BinaryData.h; + sourceTree = "SOURCE_ROOT"; + }; + 935CA85EF98714D3A17AE737 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + 9982F39121710EFFD5FEEAEF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = MasterComponent.h; + path = ../../Source/MasterComponent.h; + sourceTree = "SOURCE_ROOT"; + }; + 9C67BD1915C7FD5747C2BA8F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_formats"; + path = "../../../../modules/juce_audio_formats"; + sourceTree = "SOURCE_ROOT"; + }; + 9C689AFBF364CB167C422D29 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + 9E8129263CD42C6029FC2CAD = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + A505E1DABB2ED630EFBA96DB = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_processors"; + path = "../../../../modules/juce_audio_processors"; + sourceTree = "SOURCE_ROOT"; + }; + A7FF2B353C8568B5A7A80117 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AED58461CE961C62A0E0A552 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_processors.mm"; + path = "../../JuceLibraryCode/include_juce_audio_processors.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AF330F41D1A4865108690E3C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_devices.mm"; + path = "../../JuceLibraryCode/include_juce_audio_devices.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AFF729977947528F3E4AAA96 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + B5433B00F012AD87AADBFCD6 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + B76F10A7778664E164A01934 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_basics"; + path = "../../../../modules/juce_audio_basics"; + sourceTree = "SOURCE_ROOT"; + }; + BA2E40409255F1B078406221 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + C6E2284D86D93F1D9D5C7666 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_formats.mm"; + path = "../../JuceLibraryCode/include_juce_audio_formats.mm"; + sourceTree = "SOURCE_ROOT"; + }; + C821C5805007FFDC2636BBE6 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGLES.framework; + path = System/Library/Frameworks/OpenGLES.framework; + sourceTree = SDKROOT; + }; + D12A0DFFE18728E84D9AB739 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + DA40ED39AF4B56000E5A2743 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreGraphics.framework; + path = System/Library/Frameworks/CoreGraphics.framework; + sourceTree = SDKROOT; + }; + E4162459ED4C829EF7B19691 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = "JUCE Network Graphics Demo.app"; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + E4EA870A22A0C6649E55DD30 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_audio_utils"; + path = "../../../../modules/juce_audio_utils"; + sourceTree = "SOURCE_ROOT"; + }; + E51ABCA80B75F33848F28184 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreImage.framework; + path = System/Library/Frameworks/CoreImage.framework; + sourceTree = SDKROOT; + }; + F7D557738137CA1A370BAA27 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Foundation.framework; + path = System/Library/Frameworks/Foundation.framework; + sourceTree = SDKROOT; + }; + F98A4DAA0502EE9252EBE06F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + FA0A789443FD480003E40435 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + FCEBB157FB526741DB6791D1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_audio_utils.mm"; + path = "../../JuceLibraryCode/include_juce_audio_utils.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 5A58AF0A052C539F0E342A88 = { + isa = PBXGroup; + children = ( + 4FF648D72D6F1A78956CDA1B, + 77C0AC21C1028911123844FC, + 9982F39121710EFFD5FEEAEF, + 8E2F72AFA0CDA64F0C07F105, + 25DEDA8C9F94A6C8DFC8E53E, + ); + name = Source; + sourceTree = ""; + }; + 856518502A948813C90E6761 = { + isa = PBXGroup; + children = ( + 5A58AF0A052C539F0E342A88, + 0ADF0DECFCB1DB4D3A847EB5, + ); + name = NetworkGraphicsDemo; + sourceTree = ""; + }; + EF0AACA84F1CEE7F45F56339 = { + isa = PBXGroup; + children = ( + B76F10A7778664E164A01934, + 89583CD42AD218E9753DF11C, + 9C67BD1915C7FD5747C2BA8F, + A505E1DABB2ED630EFBA96DB, + E4EA870A22A0C6649E55DD30, + 8EACAADD3A23DED3E252C92F, + B5433B00F012AD87AADBFCD6, + BA2E40409255F1B078406221, + F98A4DAA0502EE9252EBE06F, + 18BFEBD944DDE4809C89F27A, + FA0A789443FD480003E40435, + 9C689AFBF364CB167C422D29, + 68EBC0BF5F01E05FDCB3EEAF, + 55CB060922ABCBC105FE38D2, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + C20D4DECE1291BF6AF8711DC = { + isa = PBXGroup; + children = ( + 0555BAE6156EAF15CA77A2D8, + 74711D7544168CCAC4969A07, + 92800676AF753D1A60108F11, + 6D1F9E505D20C09647124F0A, + AF330F41D1A4865108690E3C, + C6E2284D86D93F1D9D5C7666, + AED58461CE961C62A0E0A552, + FCEBB157FB526741DB6791D1, + 01E0EEF68A11C1CAF180E173, + AFF729977947528F3E4AAA96, + 7525879E73E8AF32FFA0CDDE, + 33AA348465F512DBA8778DAF, + A7FF2B353C8568B5A7A80117, + 84B287BB2AD252B7D69AC47E, + 7BE6330821794919A88ED8ED, + 660F1970CF687A7AE8371C6D, + 3BF06B70407FFDBE9534F942, + D12A0DFFE18728E84D9AB739, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + 4AA57E2B5FD5374D348EEF7F = { + isa = PBXGroup; + children = ( + 1FD6DBAC73414DD4C152E34E, + 5273768FBB55D0DD57A5E70C, + 70F1CAF3C4C561DD81E6AFC1, + ); + name = Resources; + sourceTree = ""; + }; + 71F5560BE0EE3A17A9CE44F6 = { + isa = PBXGroup; + children = ( + 2E13A899F4E3C99054A3656F, + 9E8129263CD42C6029FC2CAD, + 080961C54C58ECF2346B4C23, + 6799B056504F9F017998B9E2, + 4D1DB6D77B6F3DE7A569780B, + DA40ED39AF4B56000E5A2743, + E51ABCA80B75F33848F28184, + 448838BE6E937D450A3C84CE, + 9193D2A3C463BEAA07FD424D, + F7D557738137CA1A370BAA27, + 855850D3F44F120C46DE82EC, + C821C5805007FFDC2636BBE6, + 935CA85EF98714D3A17AE737, + 379F77D23BFAE3795282CEB3, + ); + name = Frameworks; + sourceTree = ""; + }; + 8B59A884C62D960EE9DFEF47 = { + isa = PBXGroup; + children = ( + E4162459ED4C829EF7B19691, + ); + name = Products; + sourceTree = ""; + }; + D2EB65517396C974F0415A7F = { + isa = PBXGroup; + children = ( + 856518502A948813C90E6761, + EF0AACA84F1CEE7F45F56339, + C20D4DECE1291BF6AF8711DC, + 4AA57E2B5FD5374D348EEF7F, + 71F5560BE0EE3A17A9CE44F6, + 8B59A884C62D960EE9DFEF47, + ); + name = Source; + sourceTree = ""; + }; + EE7498599191DDC73ECB55B0 = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -189,15 +673,27 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo; - USE_HEADERMAP = NO; }; name = Debug; }; - 2E06386CE7CCA5FF76819BFF = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "JUCE Network Graphics Demo"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 2E06386CE7CCA5FF76819BFF = { + isa = XCBuildConfiguration; + buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; CLANG_CXX_LANGUAGE_STANDARD = "c++14"; @@ -220,28 +716,43 @@ "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.juce.NetworkGraphicsDemo; - USE_HEADERMAP = NO; }; name = Release; }; - 3BF0365A560ACD4FD24D40CE = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "JUCE Network Graphics Demo"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + 3BF0365A560ACD4FD24D40CE = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -271,19 +782,27 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 9C6D2FD441D79104734762A5 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 9C6D2FD441D79104734762A5 = { + isa = XCBuildConfiguration; + buildSettings = { "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -311,54 +830,111 @@ SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - 80BE97CC38B01FABC0E73204 = {isa = PBXTargetDependency; target = 4311FBCBD02948A0ED96C7DD; }; - 02715337C584F3C721251428 = {isa = XCConfigurationList; buildConfigurations = ( - 3BF0365A560ACD4FD24D40CE, - 9C6D2FD441D79104734762A5, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - B73863F5D180C23D3EC40C38 = {isa = XCConfigurationList; buildConfigurations = ( - EE7498599191DDC73ECB55B0, - 2E06386CE7CCA5FF76819BFF, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 714944DB86A4D402E7FA269E = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1282A62308CD1AC3F88A5D03, - 006DF460F8DF66EFFA80D968, ); runOnlyForDeploymentPostprocessing = 0; }; - C2977559BF9148DB70CA10AE = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 987CBD5330E76B404F0D966C, - 9F618C008A503063D10076C4, - BB9A9692D99DD0DDB1047B60, - 6C2200C52B65E1BE80544E50, - A1F34D09F4E4338775917ED1, - 2E28F61A64DEF942FE7B94C4, - EA487FA4116517A8DFEE85B0, - 0977FEC02DAF29438583198A, - 0FA2A3321630EBE83E439D99, - 9EFD2AA2FFF3C125FDAA4279, - C5E7BAD864E02CF37F7BD707, - CBC8F7E5225C73CEDFB3B72E, - CADEA83EAAC94E0011C07908, - 3717B9F9A0F7C9CB95F1BE7F, - 61B523C52EBA17F738FFE31A, - C6348C6B1D0312580E97EA19, ); runOnlyForDeploymentPostprocessing = 0; }; - 865E89B94B41EB14C202CBB0 = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 80EE2C27B466BAFD83881D3F, - C4D6C466C41173D6970553D2, - 3CC6DC6E223415B506D0CB75, - 67DF295E93E54432043126DF, - 770AB74B1D3A0108F764DD47, - 366A216FDEBD7BDDC1BA12D9, - 1F7A8BD2B43B3D191132301D, - CA694B2A73FCF12D7F9E7E49, - 5A64B64E5B45AEA1A0EECC4B, - F918FB5901F09EA77DB32022, - 1006E2E5DFA26D7DD20BC438, - A6AA70BD9364BB974CDEB337, - EC14DA30C090DDC62084DB4C, - F714F0C84F5945BF3539239E, ); runOnlyForDeploymentPostprocessing = 0; }; - 4311FBCBD02948A0ED96C7DD = {isa = PBXNativeTarget; buildConfigurationList = B73863F5D180C23D3EC40C38; buildPhases = ( - 714944DB86A4D402E7FA269E, - C2977559BF9148DB70CA10AE, - 865E89B94B41EB14C202CBB0, ); buildRules = ( ); dependencies = ( ); name = "NetworkGraphicsDemo - App"; productName = NetworkGraphicsDemo; productReference = E4162459ED4C829EF7B19691; productType = "com.apple.product-type.application"; }; - A5398ADB6F5B128C00EB935C = {isa = PBXProject; buildConfigurationList = 02715337C584F3C721251428; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 4311FBCBD02948A0ED96C7DD = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = D2EB65517396C974F0415A7F; projectDirPath = ""; projectRoot = ""; targets = (4311FBCBD02948A0ED96C7DD); }; + ZERO_LINK = NO; + }; + name = Release; + }; + 80BE97CC38B01FABC0E73204 = { + isa = PBXTargetDependency; + target = 4311FBCBD02948A0ED96C7DD; + }; + 02715337C584F3C721251428 = { + isa = XCConfigurationList; + buildConfigurations = ( + 3BF0365A560ACD4FD24D40CE, + 9C6D2FD441D79104734762A5, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + B73863F5D180C23D3EC40C38 = { + isa = XCConfigurationList; + buildConfigurations = ( + EE7498599191DDC73ECB55B0, + 2E06386CE7CCA5FF76819BFF, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 714944DB86A4D402E7FA269E = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1282A62308CD1AC3F88A5D03, + 006DF460F8DF66EFFA80D968, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C2977559BF9148DB70CA10AE = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 987CBD5330E76B404F0D966C, + 9F618C008A503063D10076C4, + BB9A9692D99DD0DDB1047B60, + 6C2200C52B65E1BE80544E50, + A1F34D09F4E4338775917ED1, + 2E28F61A64DEF942FE7B94C4, + EA487FA4116517A8DFEE85B0, + 0977FEC02DAF29438583198A, + 0FA2A3321630EBE83E439D99, + 9EFD2AA2FFF3C125FDAA4279, + C5E7BAD864E02CF37F7BD707, + CBC8F7E5225C73CEDFB3B72E, + CADEA83EAAC94E0011C07908, + 3717B9F9A0F7C9CB95F1BE7F, + 61B523C52EBA17F738FFE31A, + C6348C6B1D0312580E97EA19, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 865E89B94B41EB14C202CBB0 = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 80EE2C27B466BAFD83881D3F, + C4D6C466C41173D6970553D2, + 3CC6DC6E223415B506D0CB75, + 67DF295E93E54432043126DF, + 770AB74B1D3A0108F764DD47, + 366A216FDEBD7BDDC1BA12D9, + 1F7A8BD2B43B3D191132301D, + CA694B2A73FCF12D7F9E7E49, + 5A64B64E5B45AEA1A0EECC4B, + F918FB5901F09EA77DB32022, + 1006E2E5DFA26D7DD20BC438, + A6AA70BD9364BB974CDEB337, + EC14DA30C090DDC62084DB4C, + F714F0C84F5945BF3539239E, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4311FBCBD02948A0ED96C7DD = { + isa = PBXNativeTarget; + buildConfigurationList = B73863F5D180C23D3EC40C38; + buildPhases = ( + 714944DB86A4D402E7FA269E, + C2977559BF9148DB70CA10AE, + 865E89B94B41EB14C202CBB0, + ); + buildRules = ( ); + dependencies = ( ); + name = "NetworkGraphicsDemo - App"; + productName = NetworkGraphicsDemo; + productReference = E4162459ED4C829EF7B19691; + productType = "com.apple.product-type.application"; + }; + A5398ADB6F5B128C00EB935C = { + isa = PBXProject; + buildConfigurationList = 02715337C584F3C721251428; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 4311FBCBD02948A0ED96C7DD = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = D2EB65517396C974F0415A7F; + projectDirPath = ""; + projectRoot = ""; + targets = (4311FBCBD02948A0ED96C7DD); + }; }; rootObject = A5398ADB6F5B128C00EB935C; } diff --git a/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h b/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h index 4efb82c6..ac4e6435 100644 --- a/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h +++ b/extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h @@ -68,6 +68,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -104,10 +108,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -192,6 +192,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -200,6 +204,10 @@ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + //#define JUCE_STRICT_REFCOUNTEDPOINTER 0 +#endif + //============================================================================== // juce_events flags: @@ -218,6 +226,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -245,6 +257,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -255,6 +271,7 @@ #ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR //#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR 0 #endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp b/extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp index b2aadd3b..40913a3d 100644 --- a/extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp +++ b/extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp @@ -660,7 +660,8 @@ const char* juce_icon_png = (const char*) temp_binary_data_0; const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) { unsigned int hash = 0; - if (resourceNameUTF8 != 0) + + if (resourceNameUTF8 != nullptr) while (*resourceNameUTF8 != 0) hash = 31 * hash + (unsigned int) *resourceNameUTF8++; diff --git a/extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h b/extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h index 96ce9a8e..b72437d2 100644 --- a/extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h +++ b/extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h @@ -41,6 +41,7 @@ namespace ProjectInfo { const char* const projectName = "NetworkGraphicsDemo"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer b/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer index 8eeee6b7..f36f7308 100644 --- a/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer +++ b/extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer @@ -1,7 +1,7 @@ @@ -130,7 +130,7 @@ androidCpp11="1" targetFolder="Builds/Android" androidSDKPath="" androidNDKPath="" bigIcon="Ww6bQw" gradleToolchainVersion="3.6"> - diff --git a/extras/NetworkGraphicsDemo/README.txt b/extras/NetworkGraphicsDemo/README.txt index f42ec3d0..14485880 100644 --- a/extras/NetworkGraphicsDemo/README.txt +++ b/extras/NetworkGraphicsDemo/README.txt @@ -5,7 +5,7 @@ This example is an app that we threw together to run as a demo of JUCE on our booth at CES 2016. -It allows a collection of heterogenous devices on a local network to collectively +It allows a collection of heterogeneous devices on a local network to collectively draw parts of a large animated vector graphic image that is being generated and broadcast by one of the machines (the 'master'). diff --git a/extras/NetworkGraphicsDemo/Source/Demos.h b/extras/NetworkGraphicsDemo/Source/Demos.h index 24517755..505e50f1 100644 --- a/extras/NetworkGraphicsDemo/Source/Demos.h +++ b/extras/NetworkGraphicsDemo/Source/Demos.h @@ -84,8 +84,7 @@ struct BackgroundLogo : public AnimatedContent )blahblah"; - std::unique_ptr svg (XmlDocument::parse (logoData)); - logo.reset (Drawable::createFromSVG (*svg)); + logo.reset (Drawable::createFromSVG (*parseXML (logoData))); } String getName() const override { return "Background Image"; } diff --git a/extras/NetworkGraphicsDemo/Source/Main.cpp b/extras/NetworkGraphicsDemo/Source/Main.cpp index 3a352b6f..40c0597b 100644 --- a/extras/NetworkGraphicsDemo/Source/Main.cpp +++ b/extras/NetworkGraphicsDemo/Source/Main.cpp @@ -28,16 +28,9 @@ namespace { - String getIPAddress() - { - Array addresses; - IPAddress::findAllAddresses (addresses); - return addresses[1].toString(); - } - String getBroadcastIPAddress() { - return getIPAddress().upToLastOccurrenceOf (".", false, false) + ".255"; + return IPAddress::getLocalAddress().toString().upToLastOccurrenceOf (".", false, false) + ".255"; } static const int masterPortNumber = 9001; // the UDP port the master sends on / the clients receive. diff --git a/extras/NetworkGraphicsDemo/Source/SlaveComponent.h b/extras/NetworkGraphicsDemo/Source/SlaveComponent.h index f3729534..be00993b 100644 --- a/extras/NetworkGraphicsDemo/Source/SlaveComponent.h +++ b/extras/NetworkGraphicsDemo/Source/SlaveComponent.h @@ -126,8 +126,8 @@ private: //============================================================================== String getMachineInfoToDisplay() const { - //auto display = Desktop::getInstance().getDisplays().getDisplayContaining (getScreenBounds().getCentre()); - return getOSName();// + " " + String (display.dpi) + " " + String (display.scale); + auto display = Desktop::getInstance().getDisplays().findDisplayForPoint (getScreenBounds().getCentre()); + return getOSName() + " " + String (display.dpi) + " " + String (display.scale); } static String getOSName() @@ -181,7 +181,7 @@ private: if (auto client = canvas.findClient (clientName)) { auto screenBounds = getScreenBounds(); - auto display = Desktop::getInstance().getDisplays().getDisplayContaining (screenBounds.getCentre()); + auto display = Desktop::getInstance().getDisplays().findDisplayForPoint (screenBounds.getCentre()); return ((screenBounds - display.userArea.getCentre()).toFloat() / (client->scaleFactor * display.dpi / display.scale)) + client->centre; } @@ -192,7 +192,7 @@ private: { if (auto client = canvas.findClient (clientName)) { - auto display = Desktop::getInstance().getDisplays().getDisplayContaining (getScreenBounds().getCentre()); + auto display = Desktop::getInstance().getDisplays().findDisplayForPoint (getScreenBounds().getCentre()); return (display.userArea.toFloat() / (client->scaleFactor * display.dpi / display.scale)).withCentre (client->centre); } @@ -201,7 +201,7 @@ private: void timerCallback() override { - send (newClientOSCAddress, clientName + ":" + getIPAddress() + send (newClientOSCAddress, clientName + ":" + IPAddress::getLocalAddress().toString() + ":" + getScreenAreaInGlobalSpace().toString()); } diff --git a/extras/Projucer/Builds/LinuxMakefile/Makefile b/extras/Projucer/Builds/LinuxMakefile/Makefile index 18739e54..e6ccf207 100644 --- a/extras/Projucer/Builds/LinuxMakefile/Makefile +++ b/extras/Projucer/Builds/LinuxMakefile/Makefile @@ -35,13 +35,13 @@ ifeq ($(CONFIG),Debug) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.3.2 -DJUCE_APP_VERSION_HEX=0x50302 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.1 -DJUCE_APP_VERSION_HEX=0x50401 $(shell pkg-config --cflags freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := Projucer JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++11 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -56,13 +56,13 @@ ifeq ($(CONFIG),Release) TARGET_ARCH := -march=native endif - JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.3.2 -DJUCE_APP_VERSION_HEX=0x50302 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) - JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.1 -DJUCE_APP_VERSION_HEX=0x50401 $(shell pkg-config --cflags freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) + JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 JUCE_TARGET_APP := Projucer JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS) JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++11 $(CXXFLAGS) - JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -fvisibility=hidden -ldl -lpthread -lrt $(LDFLAGS) + JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -fvisibility=hidden -ldl -lpthread -lrt $(LDFLAGS) CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif @@ -114,7 +114,6 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/jucer_FileHelpers_54f12f83.o \ $(JUCE_OBJDIR)/jucer_MiscUtilities_31fc8dd8.o \ $(JUCE_OBJDIR)/jucer_PIPGenerator_fd3402c7.o \ - $(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_5d68c773.o \ $(JUCE_OBJDIR)/jucer_Icons_d02d18f1.o \ $(JUCE_OBJDIR)/jucer_JucerTreeViewBase_9b9f2ff0.o \ $(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_3b20291d.o \ @@ -131,11 +130,13 @@ OBJECTS_APP := \ $(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \ $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o \ -.PHONY: clean all +.PHONY: clean all strip all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) -$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : check-pkg-config $(OBJECTS_APP) $(RESOURCES) +$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES) + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors freetype2 x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 libcurl @echo Linking "Projucer - App" -$(V_AT)mkdir -p $(JUCE_BINDIR) -$(V_AT)mkdir -p $(JUCE_LIBDIR) @@ -372,11 +373,6 @@ $(JUCE_OBJDIR)/jucer_PIPGenerator_fd3402c7.o: ../../Source/Utility/PIPs/jucer_PI @echo "Compiling jucer_PIPGenerator.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -$(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_5d68c773.o: ../../Source/Utility/UI/PropertyComponents/jucer_DependencyPathPropertyComponent.cpp - -$(V_AT)mkdir -p $(JUCE_OBJDIR) - @echo "Compiling jucer_DependencyPathPropertyComponent.cpp" - $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" - $(JUCE_OBJDIR)/jucer_Icons_d02d18f1.o: ../../Source/Utility/UI/jucer_Icons.cpp -$(V_AT)mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_Icons.cpp" @@ -452,10 +448,6 @@ $(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o: ../../JuceLibraryCode/include_ @echo "Compiling include_juce_gui_extra.cpp" $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" -check-pkg-config: - @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } - @pkg-config --print-errors freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0 - clean: @echo Cleaning Projucer $(V_AT)$(CLEANCMD) diff --git a/extras/Projucer/Builds/MacOSX/Info-App.plist b/extras/Projucer/Builds/MacOSX/Info-App.plist index 34a5755c..549d2dd3 100644 --- a/extras/Projucer/Builds/MacOSX/Info-App.plist +++ b/extras/Projucer/Builds/MacOSX/Info-App.plist @@ -33,9 +33,9 @@ CFBundleSignature ???? CFBundleShortVersionString - 5.3.2 + 5.4.1 CFBundleVersion - 5.3.2 + 5.4.1 NSHumanReadableCopyright ROLI Ltd. NSHighResolutionCapable diff --git a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj index 27a8ec62..1ba4455c 100644 --- a/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj +++ b/extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj @@ -5,803 +5,3196 @@ }; objectVersion = 46; objects = { - - A6A9D7624D002544ECB81D82 = {isa = PBXBuildFile; fileRef = 09DE066936CF037E9709ADB1; }; - A578EAD4BB55680E8097BE0F = {isa = PBXBuildFile; fileRef = 80D62B907248523E6943298B; }; - C1B9334AE849F93FB3C56B34 = {isa = PBXBuildFile; fileRef = 5A75806B34E4EA6598A6024A; }; - 8B4A593B3869815BBAC3EF93 = {isa = PBXBuildFile; fileRef = 7B3F7ECF6DBF8C8EE5C2CB86; }; - A14C2C2725DA3CA7995D2815 = {isa = PBXBuildFile; fileRef = 210CD22F25F2C22F9CEEB025; }; - 1E76E36772355E2A43CF4961 = {isa = PBXBuildFile; fileRef = D00F311BFC3C2625C457CB9B; }; - 241F29FCBB7A17BB44A0B10C = {isa = PBXBuildFile; fileRef = D1F9B0E9F5D54FE48BEB46EA; }; - 9359F9401D59B4517F75C39C = {isa = PBXBuildFile; fileRef = 728FE25157E9874D50BBECB2; }; - 091A57B4B9CE623E75E9A756 = {isa = PBXBuildFile; fileRef = E983E6DDE3318B872EBE347F; }; - FAB47E69F7D9DCE1F906AA07 = {isa = PBXBuildFile; fileRef = 8F7BE18698ADCEF51CDE4A5C; }; - 0E884E47A637D6C65154699A = {isa = PBXBuildFile; fileRef = 842427CFE565F3FCE5B99174; }; - 49C22786B54C5DC94E4654B8 = {isa = PBXBuildFile; fileRef = E96597BBC6A98255B51B94DC; }; - CDEF9FF2D119476D707305DF = {isa = PBXBuildFile; fileRef = 431D30038CBF67F80E8B3A13; }; - 96EC6315E1B3F1A109F84BAF = {isa = PBXBuildFile; fileRef = 9F01BA9942D038EA8B5289A8; }; - 11D42F7EC6E6539D79A7F4B1 = {isa = PBXBuildFile; fileRef = E5D6C36496F5BC84D7213BE8; }; - B980464FA2761CCD64B1FAD6 = {isa = PBXBuildFile; fileRef = CF6C8BD0DA3D8CD4E99EBADA; }; - 2610F357881240ACBF612F48 = {isa = PBXBuildFile; fileRef = 6678E9B3EEACAD47F438B264; }; - 1321E6C1C6170B6C898AD09D = {isa = PBXBuildFile; fileRef = 951128CA33CCDEF570436B1C; }; - 6DD9DA1677A6CF789CDAB478 = {isa = PBXBuildFile; fileRef = 0D4D508C638BC74943B9976D; }; - 954A036F5DDB375DB23FFB3E = {isa = PBXBuildFile; fileRef = 0400CB0E056A1D840304D2DE; }; - 95B44E6C74B1DED31DBE37EB = {isa = PBXBuildFile; fileRef = 8C52A3DDA62A746AA7A68535; }; - AA9D0B8E23F3D87A23DE9F8A = {isa = PBXBuildFile; fileRef = 9069981E414A631B036CC9AC; }; - 98F9BB4612E82EE59689E15C = {isa = PBXBuildFile; fileRef = B6496F16ACE80CACC5721570; }; - 09C4EDDF7F8B6E75EA3CE3A9 = {isa = PBXBuildFile; fileRef = BC3B310D42C489E8B8D93327; }; - 71713DE4716DCEDB45A206E2 = {isa = PBXBuildFile; fileRef = F9111E150CFF155329D44853; }; - 940CE4E081E9E685243C07AA = {isa = PBXBuildFile; fileRef = 332AF94C3275FEA8B878D603; }; - 49EEEA5B74D38F3C5A8794F1 = {isa = PBXBuildFile; fileRef = 8F731F1F98BAB42F1C3B96AA; }; - 6FD9428439B572B558EF64EA = {isa = PBXBuildFile; fileRef = BF301C2E545AEB4AC112C176; }; - 6EAAAAB0C2B2DA259B26D63C = {isa = PBXBuildFile; fileRef = 1DCA18E935A35D29D2D9B6A0; }; - 4C0F95265A230E5A8717A0A9 = {isa = PBXBuildFile; fileRef = D6390A40B3279E0E626C78D3; }; - FFA8B18CDF2D2AA500698A96 = {isa = PBXBuildFile; fileRef = 512D80BE12634967A085A1DC; }; - EE26A1C2DAAB609362F407EA = {isa = PBXBuildFile; fileRef = 988F5C1E40DED02D8B064253; }; - 4FAAB649E846BA2764C02ACE = {isa = PBXBuildFile; fileRef = 72ED72174F9DBD0ABD8AFCED; }; - 7D750EF5FCE1E1A461D435BE = {isa = PBXBuildFile; fileRef = 4AE72953E3B3DF06D3B9BA86; }; - 537ABF1DB09DDBD1542A2B0C = {isa = PBXBuildFile; fileRef = EF25A29A2194FC107B40F65F; }; - 290F2CD930097091B8DB122E = {isa = PBXBuildFile; fileRef = 00E6B87A43453B51850550E1; }; - 4B2F2DAA45060D3F250D0AE4 = {isa = PBXBuildFile; fileRef = 6F02C3B7FEA3B50692A70DE5; }; - BDD30804C9424526A1122A28 = {isa = PBXBuildFile; fileRef = 351AF80A004D766E314AB76D; }; - 37D582DA2227E004BFA237EC = {isa = PBXBuildFile; fileRef = 6E70C1FA80F02D4C310F63AA; }; - 9B8ED9D50406E5D75DEE57F5 = {isa = PBXBuildFile; fileRef = FFE01768CF1C8DBDAA894F76; }; - 89116B0BD882B51C63A84425 = {isa = PBXBuildFile; fileRef = 0EE17BE4154CF1B2EE683894; }; - 63D97E01F2C4C91037CB65BD = {isa = PBXBuildFile; fileRef = 24EB4C2412821B8019D6F754; }; - 45A53AF13B0D663050632E8C = {isa = PBXBuildFile; fileRef = 9EF583A6201DBC813C2F63C4; }; - C2A85091A28C907A4E1E1687 = {isa = PBXBuildFile; fileRef = 133F1E428260C5ADDF496DF9; }; - 83431B7234A78ECFB3C15F63 = {isa = PBXBuildFile; fileRef = 78D0DBC4798FF040FDB90F6D; }; - 209FCCC2155A1FCB7E11E20D = {isa = PBXBuildFile; fileRef = 269A454F1FF081DA67FFD578; }; - C93569F47B4AC1A8E37992ED = {isa = PBXBuildFile; fileRef = 9D7689451732AF8333402B3A; }; - 1B988E139004D8E2850EB656 = {isa = PBXBuildFile; fileRef = C187718F7B9EBA88584B43F3; }; - 6FD0752A5CADCF60D79FDBB7 = {isa = PBXBuildFile; fileRef = 51CBE59779A36D1B80B26974; }; - D25EBE02B55DB244BE0D5635 = {isa = PBXBuildFile; fileRef = DE3E6B2614229FAD56D50770; }; - 85E7FCB0516EFF853FA7B380 = {isa = PBXBuildFile; fileRef = D2FE76E4CF003856278343CC; }; - CC6C4D351BA9B473E5F95791 = {isa = PBXBuildFile; fileRef = ADA538034910F52FDD2DC88D; }; - 05A08E366EBF8D650974E695 = {isa = PBXBuildFile; fileRef = 516D6D7C564DD5DF5C15CB06; }; - 3FCA61C401007B243E2E9035 = {isa = PBXBuildFile; fileRef = F797071D88542C813CF7222A; }; - 30B921C38DCEE787B294B746 = {isa = PBXBuildFile; fileRef = BAC43B20E14A340CCF14119C; }; - 244567D3AE2E417A8CB2B95E = {isa = PBXBuildFile; fileRef = C3BB9F92B02B06D04A73794C; }; - 26D6AEA321E80ABCC3CCCCD1 = {isa = PBXBuildFile; fileRef = 4FF81FC167C924C47BD8C1C9; }; - 4E6DC4778D583C48C3CCD4DC = {isa = PBXBuildFile; fileRef = E13A54A6D3A1895EACE53E51; }; - EE722B47BC36CC8A87E0FB76 = {isa = PBXBuildFile; fileRef = BE618CE21C794BDEE319E328; }; - 2DF375B40A64BB3778F7ABD1 = {isa = PBXBuildFile; fileRef = F5DD97B45B8EA60C1ED0DD80; }; - 8BE478303CDF061B72F219E2 = {isa = PBXBuildFile; fileRef = F2E4998FB2C7221587A79F8B; }; - BF913199032B4CE970E82AA3 = {isa = PBXBuildFile; fileRef = B403AF75EAF361ED74EE476E; }; - 25EF9B3FECB4C9F0F522DCAA = {isa = PBXBuildFile; fileRef = 486E8D02DAD2A0BF54A901C0; }; - 638C7247B6DBA67EFE46E124 = {isa = PBXBuildFile; fileRef = 191330B20DAC08B890656EA0; }; - 2BEC1197D981951D8A897F01 = {isa = PBXBuildFile; fileRef = D859E9EA11A71BD6E85DC649; }; - D0E26EB54B0087C8BE3D541E = {isa = PBXBuildFile; fileRef = 846B2A670C5A19DE0039E11A; }; - 468548FB21D264DC12321327 = {isa = PBXBuildFile; fileRef = 4D5F0CA8D1273144681A1D48; }; - 6ECB2F11D2F593FACCCF99DB = {isa = PBXBuildFile; fileRef = 0F8C000E5FF4A2DAC1FEF8EB; }; - 95F56FB44C669F93AE77E465 = {isa = PBXBuildFile; fileRef = 0CECD562059DFD7FBFB37E3C; }; - 518DD443B6F17A5AFD707263 = {isa = PBXBuildFile; fileRef = A69024A225F2AC31F17B1314; }; - B7EBA1A83575F48CD08140B9 = {isa = PBXBuildFile; fileRef = 4B083E951ECB62217C46CB01; }; - 3C5267E06A897B0DC0F7EA50 = {isa = PBXBuildFile; fileRef = 472F9A90F685220D730EBF6C; }; - 202DC8CF15ACBE096CC327EA = {isa = PBXBuildFile; fileRef = 805A3A5FBA3B9E28363DD77B; }; - 5DD883699B85E4C492CAD065 = {isa = PBXBuildFile; fileRef = DB9C8E35DF815B803CB4A9CF; }; - D5C9125F65493CA481F18E53 = {isa = PBXBuildFile; fileRef = D766BB9D8C32B5560F0493F3; }; - 02E8F35A8E0D4A0DF6F38D60 = {isa = PBXBuildFile; fileRef = 1DE5BBC777FB64798D823002; }; - 234B6BA2952CBC7C61EF70EF = {isa = PBXBuildFile; fileRef = 5867DC4E39DF8539B54C0D59; }; - 254A7C08594A152C2C646334 = {isa = PBXBuildFile; fileRef = 1B9B5A37F079FE3B3CF8FAB6; }; - F15F0512666FF8CDC0D08905 = {isa = PBXBuildFile; fileRef = 0462692BAA9CD1BE6DFBCC33; }; - B18248959DDC44EF4E85320A = {isa = PBXBuildFile; fileRef = AECE3914F5119A3D586A5635; }; - 00515BA4EC5A7D4DC078ED37 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ValueSourceHelpers.h"; path = "../../Source/Utility/Helpers/jucer_ValueSourceHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 00841B7EDDE9C19890F03267 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerTreeViewBase.h"; path = "../../Source/Utility/UI/jucer_JucerTreeViewBase.h"; sourceTree = "SOURCE_ROOT"; }; - 00E6B87A43453B51850550E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentOverlayComponent.cpp"; path = "../../Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 016A6C52B0B93DE29197FF64 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AnimatedComponentTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 01A37DF94E98D991FEF43628 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ButtonHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 023B92AC0340305762412E90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_OpenGLComponentTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0400CB0E056A1D840304D2DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CommandLine.cpp"; path = "../../Source/Application/jucer_CommandLine.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0462692BAA9CD1BE6DFBCC33 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_basics.mm"; path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; sourceTree = "SOURCE_ROOT"; }; - 0543E83BF7D7D9234C396E82 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentUndoableAction.h"; path = "../../Source/ComponentEditor/Components/jucer_ComponentUndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; - 055636565C2F512E40114582 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ViewportHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ViewportHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 05D67B5A8D64947C067C0945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_GUIApp.h"; path = "../../Source/Wizards/jucer_ProjectWizard_GUIApp.h"; sourceTree = "SOURCE_ROOT"; }; - 0640E34282A97BF73CC8F1EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentListComponent.h"; path = "../../Source/LiveBuildEngine/UI/jucer_ComponentListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 079802C6AEE7646010766FE8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioPluginFilterTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 087CB3A961CD3C7434D660A4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewProjectWizard.h"; path = "../../Source/Wizards/jucer_NewProjectWizard.h"; sourceTree = "SOURCE_ROOT"; }; - 09DE066936CF037E9709ADB1 = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Projucer.app; sourceTree = "BUILT_PRODUCTS_DIR"; }; - 0AE75B0ACD368A4C0FBC2CD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TabbedComponentHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 0B24F292A357ABFD9BCC6D7F = {isa = PBXFileReference; lastKnownFileType = file; name = gradlew; path = ../../Source/BinaryData/gradle/gradlew; sourceTree = "SOURCE_ROOT"; }; - 0CECD562059DFD7FBFB37E3C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SlidingPanelComponent.cpp"; path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0D4D508C638BC74943B9976D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AutoUpdater.cpp"; path = "../../Source/Application/jucer_AutoUpdater.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0EE17BE4154CF1B2EE683894 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceEditorPanel.cpp"; path = "../../Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 0F01067432AC314EAC213C1C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_Blank.h"; path = "../../Source/Wizards/jucer_ProjectWizard_Blank.h"; sourceTree = "SOURCE_ROOT"; }; - 0F8C000E5FF4A2DAC1FEF8EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjucerLookAndFeel.cpp"; path = "../../Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp"; sourceTree = "SOURCE_ROOT"; }; - 11DC04468BC6023671017EBF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewFileWizard.h"; path = "../../Source/Wizards/jucer_NewFileWizard.h"; sourceTree = "SOURCE_ROOT"; }; - 11DEED05110D3D1D02FCFFB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTypeHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ComponentTypeHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 124232706D1C8A3CA49E70CD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PIPCreatorWindowComponent.h"; path = "../../Source/Application/Windows/jucer_PIPCreatorWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 129F2DE0FEF154F8F8C7A74E = {isa = PBXFileReference; lastKnownFileType = file.jar; name = "gradle-wrapper.jar"; path = "../../Source/BinaryData/gradle/gradle-wrapper.jar"; sourceTree = "SOURCE_ROOT"; }; - 133F1E428260C5ADDF496DF9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentLayout.cpp"; path = "../../Source/ComponentEditor/jucer_ComponentLayout.cpp"; sourceTree = "SOURCE_ROOT"; }; - 159DE1FEE2099398983CDDF0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ErrorList.h"; path = "../../Source/LiveBuildEngine/jucer_ErrorList.h"; sourceTree = "SOURCE_ROOT"; }; - 16751E04B0F3737BDF52CEB4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_HeaderComponent.h"; path = "../../Source/Project/UI/jucer_HeaderComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 169DD91232C070C4D6470B31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_IconButton.h"; path = "../../Source/Utility/UI/jucer_IconButton.h"; sourceTree = "SOURCE_ROOT"; }; - 182CB1F96890620A202C6524 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SourceCodeRange.h"; path = "../../Source/LiveBuildEngine/jucer_SourceCodeRange.h"; sourceTree = "SOURCE_ROOT"; }; - 191330B20DAC08B890656EA0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PIPGenerator.cpp"; path = "../../Source/Utility/PIPs/jucer_PIPGenerator.cpp"; sourceTree = "SOURCE_ROOT"; }; - 194457D806A26E793584AC0C = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "huckleberry_icon.svg"; path = "../../Source/BinaryData/Icons/huckleberry_icon.svg"; sourceTree = "SOURCE_ROOT"; }; - 1B0F18E1D96F727C062B05FA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectContentComponent.cpp"; path = "../../Source/Project/UI/jucer_ProjectContentComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1B5BCD4899A9E295786EB642 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenDocumentManager.h"; path = "../../Source/CodeEditor/jucer_OpenDocumentManager.h"; sourceTree = "SOURCE_ROOT"; }; - 1B9B5A37F079FE3B3CF8FAB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_graphics.mm"; path = "../../JuceLibraryCode/include_juce_graphics.mm"; sourceTree = "SOURCE_ROOT"; }; - 1C80C7672975C1FF9AAC4A4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTab.h"; path = "../../Source/Project/UI/Sidebar/jucer_ProjectTab.h"; sourceTree = "SOURCE_ROOT"; }; - 1DCA18E935A35D29D2D9B6A0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentDocument.cpp"; path = "../../Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - 1DE5BBC777FB64798D823002 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_data_structures.mm"; path = "../../JuceLibraryCode/include_juce_data_structures.mm"; sourceTree = "SOURCE_ROOT"; }; - 20075A86A4D0E8A5B973D9DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Xcode.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_Xcode.h"; sourceTree = "SOURCE_ROOT"; }; - 203FA6AD7EDDF1F9C338CC2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioComponentTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 2072D6BAE744B53B6FBBDDD8 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_AudioPlugin.svg"; path = "../../Source/BinaryData/Icons/wizard_AudioPlugin.svg"; sourceTree = "SOURCE_ROOT"; }; - 210CD22F25F2C22F9CEEB025 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 21F4833C5B5C17B159B956F3 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_events"; path = "../../../../modules/juce_events"; sourceTree = "SOURCE_ROOT"; }; - 23A8DE16C0CDB8EED18B008B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandIDs.h"; path = "../../Source/Application/jucer_CommandIDs.h"; sourceTree = "SOURCE_ROOT"; }; - 23D79A22569BEDF63B57DD36 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CodeHelpers.h"; path = "../../Source/Utility/Helpers/jucer_CodeHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 245C81599FB53865A74FC65B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ActivityList.h"; path = "../../Source/LiveBuildEngine/jucer_ActivityList.h"; sourceTree = "SOURCE_ROOT"; }; - 24EB4C2412821B8019D6F754 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_TestComponent.cpp"; path = "../../Source/ComponentEditor/UI/jucer_TestComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 25BE1265FE6C6EA3473A3A0A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceFile.h"; path = "../../Source/ProjectSaving/jucer_ResourceFile.h"; sourceTree = "SOURCE_ROOT"; }; - 269A454F1FF081DA67FFD578 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerDocument.cpp"; path = "../../Source/ComponentEditor/jucer_JucerDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - 28D0199327887FFABF9C3F20 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_UserSettingsPopup.h"; path = "../../Source/Utility/UI/jucer_UserSettingsPopup.h"; sourceTree = "SOURCE_ROOT"; }; - 2BD9B4556479A8A41740BCAE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_ComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 2CD34A70B4032C0426F7AA10 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_MainWindow.h"; path = "../../Source/Application/jucer_MainWindow.h"; sourceTree = "SOURCE_ROOT"; }; - 2DF5A61F3C497537634773DF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ActivityListComponent.h"; path = "../../Source/LiveBuildEngine/UI/jucer_ActivityListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 2EEB1C074162F363C6599282 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommandLine.h"; path = "../../Source/Application/jucer_CommandLine.h"; sourceTree = "SOURCE_ROOT"; }; - 2F373F97E30AC1A0BFC1FC61 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePropertyComponent.h"; path = "../../Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 308084CBEE9F7D405D72A5E1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CompileEngineClient.h"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineClient.h"; sourceTree = "SOURCE_ROOT"; }; - 32C4B61AD995877956B7FA66 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_InlineComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_InlineComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 32ECBC08D903418CA0825870 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ContentViewComponents.h"; path = "../../Source/Project/UI/jucer_ContentViewComponents.h"; sourceTree = "SOURCE_ROOT"; }; - 332AF94C3275FEA8B878D603 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_SourceCodeEditor.cpp"; path = "../../Source/CodeEditor/jucer_SourceCodeEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 33B258726F29360D64FD1451 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerComponentHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_JucerComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 351AF80A004D766E314AB76D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerDocumentEditor.cpp"; path = "../../Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 355379844A5E6A097038C280 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementRectangle.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 35CAE8930F2885F9322D22D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ItemPreviewComponent.h"; path = "../../Source/CodeEditor/jucer_ItemPreviewComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 35CFCC15CBA46F4513940A2A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextButtonHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_TextButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 364D1A9B113320407A7E57B9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = JuceHeader.h; path = ../../JuceLibraryCode/JuceHeader.h; sourceTree = "SOURCE_ROOT"; }; - 36E5FBF64A89D5F2A266A5A7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementUndoableAction.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementUndoableAction.h"; sourceTree = "SOURCE_ROOT"; }; - 39597BD78897CB711AFA945A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_EditingPanelBase.h"; path = "../../Source/ComponentEditor/UI/jucer_EditingPanelBase.h"; sourceTree = "SOURCE_ROOT"; }; - 3BBFA655E129C2D817EA47C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ErrorListComponent.h"; path = "../../Source/LiveBuildEngine/UI/jucer_ErrorListComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 3C95FA2AA91EBA19ADDD5C29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_Animated.h"; path = "../../Source/Wizards/jucer_ProjectWizard_Animated.h"; sourceTree = "SOURCE_ROOT"; }; - 3D6FD9C0065BF16568EC0AB7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SlidingPanelComponent.h"; path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 3DC2ED15A9DFAAEF3D2ACDDF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PIPMain.cpp"; path = "../../Source/BinaryData/Templates/jucer_PIPMain.cpp"; sourceTree = "SOURCE_ROOT"; }; - 3EA27F52A254912218F4DE94 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectBuildInfo.h"; path = "../../Source/LiveBuildEngine/jucer_ProjectBuildInfo.h"; sourceTree = "SOURCE_ROOT"; }; - 3F7C5B53347A487C7FBD2223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenGLComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 3F8EC008960DBEB2A5D3C3F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Headers.h"; path = "../../Source/Application/jucer_Headers.h"; sourceTree = "SOURCE_ROOT"; }; - 3F9D4C7F6E5779D4E4AE655D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayout.h"; path = "../../Source/ComponentEditor/jucer_ComponentLayout.h"; sourceTree = "SOURCE_ROOT"; }; - 4073A12E196BDDADE211E19F = {isa = PBXFileReference; lastKnownFileType = text.txt; name = "projucer_EULA.txt"; path = "../../Source/BinaryData/projucer_EULA.txt"; sourceTree = "SOURCE_ROOT"; }; - 409C636B96A9AC1D732B96F8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComboBoxHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ComboBoxHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 41105E536155E394E54BDD35 = {isa = PBXFileReference; lastKnownFileType = file.xml; name = "colourscheme_dark.xml"; path = "../../Source/BinaryData/colourscheme_dark.xml"; sourceTree = "SOURCE_ROOT"; }; - 42F4AA3EF0883D506987CA99 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_codeBlocks.svg"; path = "../../Source/BinaryData/Icons/export_codeBlocks.svg"; sourceTree = "SOURCE_ROOT"; }; - 431D30038CBF67F80E8B3A13 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - 432EC251A122071809471804 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "juce-logo-with-text.svg"; path = "../../Source/BinaryData/Icons/juce-logo-with-text.svg"; sourceTree = "SOURCE_ROOT"; }; - 471C7B0A8B92320AF0C80839 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_StaticLibrary.h"; path = "../../Source/Wizards/jucer_ProjectWizard_StaticLibrary.h"; sourceTree = "SOURCE_ROOT"; }; - 472F9A90F685220D730EBF6C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = BinaryData.cpp; path = ../../JuceLibraryCode/BinaryData.cpp; sourceTree = "SOURCE_ROOT"; }; - 4818A05DE44ADA03D85E1083 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjucerAnalytics.h"; path = "../../Source/Application/jucer_ProjucerAnalytics.h"; sourceTree = "SOURCE_ROOT"; }; - 486E8D02DAD2A0BF54A901C0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MiscUtilities.cpp"; path = "../../Source/Utility/Helpers/jucer_MiscUtilities.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4974E7808F9B57E9A627F878 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FileTreeItems.h"; path = "../../Source/Project/UI/Sidebar/jucer_FileTreeItems.h"; sourceTree = "SOURCE_ROOT"; }; - 4A4EBDAD8D098F72CE053235 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_AudioPlugin.h"; path = "../../Source/Wizards/jucer_ProjectWizard_AudioPlugin.h"; sourceTree = "SOURCE_ROOT"; }; - 4AE469CD40BDAD634135785E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElement.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElement.h"; sourceTree = "SOURCE_ROOT"; }; - 4AE72953E3B3DF06D3B9BA86 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElementPath.cpp"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4B083E951ECB62217C46CB01 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewProjectWizardClasses.cpp"; path = "../../Source/Wizards/jucer_NewProjectWizardClasses.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4D5F0CA8D1273144681A1D48 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_JucerTreeViewBase.cpp"; path = "../../Source/Utility/UI/jucer_JucerTreeViewBase.cpp"; sourceTree = "SOURCE_ROOT"; }; - 4D698BF12BCD6B0896BCDF17 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AutoUpdater.h"; path = "../../Source/Application/jucer_AutoUpdater.h"; sourceTree = "SOURCE_ROOT"; }; - 4E671236FDBD5AD4699740C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerCommandIDs.h"; path = "../../Source/ComponentEditor/UI/jucer_JucerCommandIDs.h"; sourceTree = "SOURCE_ROOT"; }; - 4ECF029E3A69BF42FED1503D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PIPAudioProcessorTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 4F687965FBE86EAFDB3ACFEC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BinaryData.h; path = ../../JuceLibraryCode/BinaryData.h; sourceTree = "SOURCE_ROOT"; }; - 4FF81FC167C924C47BD8C1C9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectSaver.cpp"; path = "../../Source/ProjectSaving/jucer_ProjectSaver.cpp"; sourceTree = "SOURCE_ROOT"; }; - 50498FF6EA3901CBD58223B3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ObjectTypes.h"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; sourceTree = "SOURCE_ROOT"; }; - 512D80BE12634967A085A1DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElement.cpp"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElement.cpp"; sourceTree = "SOURCE_ROOT"; }; - 514F2FAFDBF535AC03FA2E6C = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "background_logo.svg"; path = "../../Source/BinaryData/Icons/background_logo.svg"; sourceTree = "SOURCE_ROOT"; }; - 516D6D7C564DD5DF5C15CB06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_HeaderComponent.cpp"; path = "../../Source/Project/UI/jucer_HeaderComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - 51BC758EF5D33197CF543E67 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DocumentEditorComponent.h"; path = "../../Source/CodeEditor/jucer_DocumentEditorComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 51CBE59779A36D1B80B26974 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_LicenseController.cpp"; path = "../../Source/Licenses/jucer_LicenseController.cpp"; sourceTree = "SOURCE_ROOT"; }; - 5432B7B9B2CF2EAEC8B66D5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_UtilityFunctions.h"; path = "../../Source/ComponentEditor/jucer_UtilityFunctions.h"; sourceTree = "SOURCE_ROOT"; }; - 5524B5C9FC6AEAA670B92AA9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayoutEditor.h"; path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h"; sourceTree = "SOURCE_ROOT"; }; - 55DEDCEB35AA1FB54C74B375 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_MessageIDs.h"; path = "../../Source/LiveBuildEngine/jucer_MessageIDs.h"; sourceTree = "SOURCE_ROOT"; }; - 56177921580A4855917E0205 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginEditorTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 56749E4C72A8F51ACA8F2330 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_clion.svg"; path = "../../Source/BinaryData/Icons/export_clion.svg"; sourceTree = "SOURCE_ROOT"; }; - 576A92E1E0D8F453EC0FEB34 = {isa = PBXFileReference; lastKnownFileType = file.bat; name = gradlew.bat; path = ../../Source/BinaryData/gradle/gradlew.bat; sourceTree = "SOURCE_ROOT"; }; - 5783563E39E48ADFC68EB84A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentTextProperty.h"; path = "../../Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h"; sourceTree = "SOURCE_ROOT"; }; - 58139D8D454051C59E77609B = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 5867DC4E39DF8539B54C0D59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_events.mm"; path = "../../JuceLibraryCode/include_juce_events.mm"; sourceTree = "SOURCE_ROOT"; }; - 58DE91CE6B05AFBACADDB251 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_analytics"; path = "../../../../modules/juce_analytics"; sourceTree = "SOURCE_ROOT"; }; - 58F1FF52E887887A93E84FC2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PresetIDs.h"; path = "../../Source/Utility/Helpers/jucer_PresetIDs.h"; sourceTree = "SOURCE_ROOT"; }; - 59203884BC48D3B7F8DEABA8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ContentCompTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_ContentCompTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 59520B8137E6A2E483074399 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Make.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_Make.h"; sourceTree = "SOURCE_ROOT"; }; - 59B08C7B13B8EA5137ACA77A = {isa = PBXFileReference; lastKnownFileType = text.txt; name = nothingtoseehere.txt; path = ../../Source/BinaryData/nothingtoseehere.txt; sourceTree = "SOURCE_ROOT"; }; - 59F8A47C0020D62C8836A1E7 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PropertyComponentsWithEnablement.h"; path = "../../Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h"; sourceTree = "SOURCE_ROOT"; }; - 5A75806B34E4EA6598A6024A = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 5B3532C5F103DAC87B4A5675 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_GUI.svg"; path = "../../Source/BinaryData/Icons/wizard_GUI.svg"; sourceTree = "SOURCE_ROOT"; }; - 5BF0374EB908F0476BD8ED42 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AudioComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 5E4EB84A7983AB31366A3490 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ModuleTreeItems.h"; path = "../../Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h"; sourceTree = "SOURCE_ROOT"; }; - 5F6584B675E30761521A9F42 = {isa = PBXFileReference; lastKnownFileType = file.xml; name = "colourscheme_light.xml"; path = "../../Source/BinaryData/colourscheme_light.xml"; sourceTree = "SOURCE_ROOT"; }; - 62922B3C0620368D1799A653 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_OpenGL.svg"; path = "../../Source/BinaryData/Icons/wizard_OpenGL.svg"; sourceTree = "SOURCE_ROOT"; }; - 630DC5EAA31D3EE60B2D989F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GenericComponentHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_GenericComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 6574A50A8997799705B23465 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AudioPluginEditorTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 65FAD7F6DF65A72B741C2913 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutinePanel.h"; path = "../../Source/ComponentEditor/UI/jucer_PaintRoutinePanel.h"; sourceTree = "SOURCE_ROOT"; }; - 6678E9B3EEACAD47F438B264 = {isa = PBXFileReference; lastKnownFileType = file.nib; name = RecentFilesMenuTemplate.nib; path = RecentFilesMenuTemplate.nib; sourceTree = "SOURCE_ROOT"; }; - 66B49F08C5EC3E4974825FF8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutine.h"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.h"; sourceTree = "SOURCE_ROOT"; }; - 68C1949F56295D5871C1F223 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LiveBuildTab.h"; path = "../../Source/Project/UI/Sidebar/jucer_LiveBuildTab.h"; sourceTree = "SOURCE_ROOT"; }; - 68F41A216E7454E7442AB1F4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeItemTypes.h"; path = "../../Source/Project/UI/Sidebar/jucer_TreeItemTypes.h"; sourceTree = "SOURCE_ROOT"; }; - 69555CEFC6ED613AA3949298 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_data_structures"; path = "../../../../modules/juce_data_structures"; sourceTree = "SOURCE_ROOT"; }; - 69B478C992FA0B8C885946A6 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_linux.svg"; path = "../../Source/BinaryData/Icons/export_linux.svg"; sourceTree = "SOURCE_ROOT"; }; - 6AC88EFC247C225CC5C11A43 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_BinaryResources.h"; path = "../../Source/ComponentEditor/jucer_BinaryResources.h"; sourceTree = "SOURCE_ROOT"; }; - 6E6140969908E7619F858740 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CommonHeaders.h"; path = "../../Source/Application/jucer_CommonHeaders.h"; sourceTree = "SOURCE_ROOT"; }; - 6E70C1FA80F02D4C310F63AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutineEditor.cpp"; path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6F02C3B7FEA3B50692A70DE5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_EditingPanelBase.cpp"; path = "../../Source/ComponentEditor/UI/jucer_EditingPanelBase.cpp"; sourceTree = "SOURCE_ROOT"; }; - 6FD8DBC0FF42C87D8BEE2452 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationHelpers.h"; path = "../../Source/Utility/Helpers/jucer_TranslationHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - 7031E8CB6D4D84BD980A0BD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementImage.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementImage.h"; sourceTree = "SOURCE_ROOT"; }; - 705DE88C5C4CC6C871E951B1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GroupComponentHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_GroupComponentHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 714267352CE5C4357ADBC231 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StartPageComponent.h"; path = "../../Source/Wizards/jucer_StartPageComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 719B56C8587863D7AE9B69C6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePositionedRectangle.h"; path = "../../Source/ComponentEditor/UI/jucer_RelativePositionedRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 7211101FFA28400ADBB1D47A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Module.h"; path = "../../Source/Project/jucer_Module.h"; sourceTree = "SOURCE_ROOT"; }; - 728FE25157E9874D50BBECB2 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 72ED72174F9DBD0ABD8AFCED = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElementImage.cpp"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementImage.cpp"; sourceTree = "SOURCE_ROOT"; }; - 73DE14CEAD25D3445457013E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SliderHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_SliderHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 75BE2887C6F324B818D80A21 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SnapGridPainter.h"; path = "../../Source/ComponentEditor/UI/jucer_SnapGridPainter.h"; sourceTree = "SOURCE_ROOT"; }; - 7687A1374C60A025BDBE98DE = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PointComponent.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PointComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 77EA01E7D04BF889930BFF54 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementRoundedRectangle.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h"; sourceTree = "SOURCE_ROOT"; }; - 78D0DBC4798FF040FDB90F6D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_GeneratedCode.cpp"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.cpp"; sourceTree = "SOURCE_ROOT"; }; - 790F6302B9A0620F23F8A6C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseThread.h"; path = "../../Source/Licenses/jucer_LicenseThread.h"; sourceTree = "SOURCE_ROOT"; }; - 7AB7640968FAAC73072FBD10 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_basics"; path = "../../../../modules/juce_gui_basics"; sourceTree = "SOURCE_ROOT"; }; - 7B3F7ECF6DBF8C8EE5C2CB86 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; - 7CA44FF0BA319517C6E39651 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Application.cpp"; path = "../../Source/Application/jucer_Application.cpp"; sourceTree = "SOURCE_ROOT"; }; - 7E2013F425E231C6D865DDD0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentChoiceProperty.h"; path = "../../Source/ComponentEditor/Properties/jucer_ComponentChoiceProperty.h"; sourceTree = "SOURCE_ROOT"; }; - 7F0A5319912991615FC57945 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColourPropertyComponent.h"; path = "../../Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 805A3A5FBA3B9E28363DD77B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "include_juce_analytics.cpp"; path = "../../JuceLibraryCode/include_juce_analytics.cpp"; sourceTree = "SOURCE_ROOT"; }; - 807049CA2D5B6DE18EA078F2 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_android.svg"; path = "../../Source/BinaryData/Icons/export_android.svg"; sourceTree = "SOURCE_ROOT"; }; - 80D62B907248523E6943298B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 8336A43CE1C3C26D7C7B53D8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewComponentTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 842427CFE565F3FCE5B99174 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; }; - 846B2A670C5A19DE0039E11A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Icons.cpp"; path = "../../Source/Utility/UI/jucer_Icons.cpp"; sourceTree = "SOURCE_ROOT"; }; - 85A5E3E71BED93B9A3E07681 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PositionPropertyBase.h"; path = "../../Source/ComponentEditor/Properties/jucer_PositionPropertyBase.h"; sourceTree = "SOURCE_ROOT"; }; - 861E52D9AFECADF079BB1F2C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ExporterTreeItems.h"; path = "../../Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h"; sourceTree = "SOURCE_ROOT"; }; - 868B459E02F0877EBE3D56F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TextEditorHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_TextEditorHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 8702F43110E4CCA5E5F827F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = AppConfig.h; path = ../../JuceLibraryCode/AppConfig.h; sourceTree = "SOURCE_ROOT"; }; - 8A82061A978B03745485C3AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LiveBuildCodeEditor.h"; path = "../../Source/CodeEditor/jucer_LiveBuildCodeEditor.h"; sourceTree = "SOURCE_ROOT"; }; - 8A825FDDC00DD253F44D2C3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_AudioApp.h"; path = "../../Source/Wizards/jucer_ProjectWizard_AudioApp.h"; sourceTree = "SOURCE_ROOT"; }; - 8BD8E9DA627D6EF9BA10FB9E = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewProjectWizardComponent.h"; path = "../../Source/Wizards/jucer_NewProjectWizardComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8C281F2F8EA3AD614ADF7955 = {isa = PBXFileReference; lastKnownFileType = text.html; name = offlinepage.html; path = ../../Source/BinaryData/offlinepage.html; sourceTree = "SOURCE_ROOT"; }; - 8C52A3DDA62A746AA7A68535 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Main.cpp"; path = "../../Source/Application/jucer_Main.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8D178CAEE6D89DE33233313F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ElementSiblingComponent.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 8D9A9A373E4621F7CBFCCCEF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ContentCompTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8DBB36126CD144A8364F1F19 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExporter.h"; path = "../../Source/ProjectSaving/jucer_ProjectExporter.h"; sourceTree = "SOURCE_ROOT"; }; - 8DFE6D8AFB8057790041300B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ToggleButtonHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ToggleButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; - 8F30A53C7FE4BC65171FB3E2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocument.h"; path = "../../Source/ComponentEditor/jucer_JucerDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 8F4D281E98808204E2846A7D = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_xcode.svg"; path = "../../Source/BinaryData/Icons/export_xcode.svg"; sourceTree = "SOURCE_ROOT"; }; - 8F67F3C0492EAFEBDBBC12DB = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewCppFileTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F685EFEFD6EE399058DE842 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DownloadCompileEngineThread.h"; path = "../../Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.h"; sourceTree = "SOURCE_ROOT"; }; - 8F731F1F98BAB42F1C3B96AA = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTypeHandler.cpp"; path = "../../Source/ComponentEditor/Components/jucer_ComponentTypeHandler.cpp"; sourceTree = "SOURCE_ROOT"; }; - 8F7BE18698ADCEF51CDE4A5C = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; }; - 8FEF6F5EA676B824C021EB6F = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_AnimatedApp.svg"; path = "../../Source/BinaryData/Icons/wizard_AnimatedApp.svg"; sourceTree = "SOURCE_ROOT"; }; - 8FF26BF72A522FBEAAFDDF54 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_AudioApp.svg"; path = "../../Source/BinaryData/Icons/wizard_AudioApp.svg"; sourceTree = "SOURCE_ROOT"; }; - 9069981E414A631B036CC9AC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainWindow.cpp"; path = "../../Source/Application/jucer_MainWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 92926A4D3CC4BB2A9D35EB0B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_UTF8WindowComponent.h"; path = "../../Source/Application/Windows/jucer_UTF8WindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 92A66A8BD87F98EB6B4FB6D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectContentComponent.h"; path = "../../Source/Project/UI/jucer_ProjectContentComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 951128CA33CCDEF570436B1C = {isa = PBXFileReference; lastKnownFileType = file.icns; name = Icon.icns; path = Icon.icns; sourceTree = "SOURCE_ROOT"; }; - 95EAB6EC9B724538B93910D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TabComponents.h"; path = "../../Source/Project/UI/Sidebar/jucer_TabComponents.h"; sourceTree = "SOURCE_ROOT"; }; - 97A847B59EE04483E8850E4B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_SimpleWindow.cpp"; path = "../../Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - 983CFBA01CA8811F30FA7F4C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_MiscUtilities.h"; path = "../../Source/Utility/Helpers/jucer_MiscUtilities.h"; sourceTree = "SOURCE_ROOT"; }; - 988F5C1E40DED02D8B064253 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintElementGroup.cpp"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.cpp"; sourceTree = "SOURCE_ROOT"; }; - 98E6D61BFF7D85F0E00F0FBF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseWebview.h"; path = "../../Source/Licenses/jucer_LicenseWebview.h"; sourceTree = "SOURCE_ROOT"; }; - 9914F905BFCFBE5F76619670 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColouredElement.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_ColouredElement.h"; sourceTree = "SOURCE_ROOT"; }; - 996E472B82A75531875A5E38 = {isa = PBXFileReference; lastKnownFileType = file; name = LICENSE; path = ../../Source/BinaryData/gradle/LICENSE; sourceTree = "SOURCE_ROOT"; }; - 9992E6950C64322A11E39ADF = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_DLL.h"; path = "../../Source/Wizards/jucer_ProjectWizard_DLL.h"; sourceTree = "SOURCE_ROOT"; }; - 9A3B8BBDA8E144A3DF6B9349 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AnimatedComponentSimpleTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 9B6FD3FEDB6D91AD0A80EF97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageResourceProperty.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_ImageResourceProperty.h"; sourceTree = "SOURCE_ROOT"; }; - 9BDF2D6255C1CB2CFF376186 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentOverlayComponent.h"; path = "../../Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 9D7689451732AF8333402B3A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ObjectTypes.cpp"; path = "../../Source/ComponentEditor/jucer_ObjectTypes.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9E0BA495286388EBF929D578 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ContentCompSimpleTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 9E2B1506AC3FDB7863766D59 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewInlineComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - 9E62EC342665C27BA01AFC1A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentNameProperty.h"; path = "../../Source/ComponentEditor/Components/jucer_ComponentNameProperty.h"; sourceTree = "SOURCE_ROOT"; }; - 9EB33734D0DBD0370AB1247B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ColourPropertyComponent.h"; path = "../../Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - 9EE3141E20C9CE3EA182FA04 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectSaver.h"; path = "../../Source/ProjectSaving/jucer_ProjectSaver.h"; sourceTree = "SOURCE_ROOT"; }; - 9EF583A6201DBC813C2F63C4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_BinaryResources.cpp"; path = "../../Source/ComponentEditor/jucer_BinaryResources.cpp"; sourceTree = "SOURCE_ROOT"; }; - 9F01BA9942D038EA8B5289A8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; }; - 9F2D3E5FC10F7C3270908E97 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ButtonDocument.h"; path = "../../Source/ComponentEditor/Documents/jucer_ButtonDocument.h"; sourceTree = "SOURCE_ROOT"; }; - 9F959ECF8CD9B7314AE604A9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LabelHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_LabelHandler.h"; sourceTree = "SOURCE_ROOT"; }; - A081306A9E95CA114B81910F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CompileEngineSettings.h"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineSettings.h"; sourceTree = "SOURCE_ROOT"; }; - A085174413736ACC8D7D42A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_openGL.h"; path = "../../Source/Wizards/jucer_ProjectWizard_openGL.h"; sourceTree = "SOURCE_ROOT"; }; - A0BBBFBA13A1308B3CD725D5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentLayoutPanel.h"; path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h"; sourceTree = "SOURCE_ROOT"; }; - A160AEF56553A658E6EA6A8E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_Window.cpp"; path = "../../Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp"; sourceTree = "SOURCE_ROOT"; }; - A22F64D1E4BD4B8FA366DAAD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TreeViewHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_TreeViewHandler.h"; sourceTree = "SOURCE_ROOT"; }; - A44A774EFC020D3D046A9249 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectWizard_Console.h"; path = "../../Source/Wizards/jucer_ProjectWizard_Console.h"; sourceTree = "SOURCE_ROOT"; }; - A49503B646A7BD2BEEFC5CBD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_HyperlinkButtonHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_HyperlinkButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; - A509BC22854D50E4C786EB32 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FileGroupInformationComponent.h"; path = "../../Source/Project/UI/jucer_FileGroupInformationComponent.h"; sourceTree = "SOURCE_ROOT"; }; - A66F17E7472E5C19AFE98E46 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainConsoleAppTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - A69024A225F2AC31F17B1314 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_NewFileWizard.cpp"; path = "../../Source/Wizards/jucer_NewFileWizard.cpp"; sourceTree = "SOURCE_ROOT"; }; - A6C4AE13FB409DE414094CFA = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_RelativePath.h"; path = "../../Source/Utility/Helpers/jucer_RelativePath.h"; sourceTree = "SOURCE_ROOT"; }; - A978DFE87D9BB5EFE5B3DAAC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CompileEngineDLL.h"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineDLL.h"; sourceTree = "SOURCE_ROOT"; }; - A9954DC7F876A7006743ACB6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DiagnosticMessage.h"; path = "../../Source/LiveBuildEngine/jucer_DiagnosticMessage.h"; sourceTree = "SOURCE_ROOT"; }; - AA1C44E89D792DDC4867B2C8 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_cryptography"; path = "../../../../modules/juce_cryptography"; sourceTree = "SOURCE_ROOT"; }; - ADA538034910F52FDD2DC88D = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_DownloadCompileEngineThread.cpp"; path = "../../Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.cpp"; sourceTree = "SOURCE_ROOT"; }; - ADD6A3CF5D7DE55E57E8E38B = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CppHelpers.h"; path = "../../Source/LiveBuildEngine/jucer_CppHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - AECE3914F5119A3D586A5635 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_gui_extra.mm"; path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; sourceTree = "SOURCE_ROOT"; }; - AEFE3BA0C31EC78A5767A10E = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_DLL.svg"; path = "../../Source/BinaryData/Icons/wizard_DLL.svg"; sourceTree = "SOURCE_ROOT"; }; - B1C2F8ED14BF914CD1882708 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_Openfile.svg"; path = "../../Source/BinaryData/Icons/wizard_Openfile.svg"; sourceTree = "SOURCE_ROOT"; }; - B24E3F34C3C4EE54A60C35CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LiveCodeBuilderDLL.h"; path = "../../Source/LiveBuildEngine/jucer_LiveCodeBuilderDLL.h"; sourceTree = "SOURCE_ROOT"; }; - B2CB95B3F44C3CC5735051A3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JustificationProperty.h"; path = "../../Source/ComponentEditor/Properties/jucer_JustificationProperty.h"; sourceTree = "SOURCE_ROOT"; }; - B3528C08B84CBC950252EA69 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ModulesInformationComponent.h"; path = "../../Source/Project/UI/jucer_ModulesInformationComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B403AF75EAF361ED74EE476E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_FileHelpers.cpp"; path = "../../Source/Utility/Helpers/jucer_FileHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6496F16ACE80CACC5721570 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjucerAnalytics.cpp"; path = "../../Source/Application/jucer_ProjucerAnalytics.cpp"; sourceTree = "SOURCE_ROOT"; }; - B6F2905330EA5C560D527209 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_graphics"; path = "../../../../modules/juce_graphics"; sourceTree = "SOURCE_ROOT"; }; - B8385E9A644BD3CD94876448 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectType.h"; path = "../../Source/Project/jucer_ProjectType.h"; sourceTree = "SOURCE_ROOT"; }; - B83C9BD89F31EA9E5E12A3C6 = {isa = PBXFileReference; lastKnownFileType = image.png; name = "juce_icon.png"; path = "../../Source/BinaryData/Icons/juce_icon.png"; sourceTree = "SOURCE_ROOT"; }; - B83DAADA1A871F21582FFB23 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ApplicationUsageDataWindowComponent.h"; path = "../../Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - B97D60D2531CFD0D8555BA5C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementText.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementText.h"; sourceTree = "SOURCE_ROOT"; }; - B9B130F596953116393138DC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SourceCodeEditor.h"; path = "../../Source/CodeEditor/jucer_SourceCodeEditor.h"; sourceTree = "SOURCE_ROOT"; }; - BA159A3B7D129771F5C15EA3 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_core"; path = "../../../../modules/juce_core"; sourceTree = "SOURCE_ROOT"; }; - BA186B51EE4884CD8E3F2741 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_CompileEngineServer.h"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineServer.h"; sourceTree = "SOURCE_ROOT"; }; - BAC43B20E14A340CCF14119C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Project.cpp"; path = "../../Source/Project/jucer_Project.cpp"; sourceTree = "SOURCE_ROOT"; }; - BB187CD608EB6368B29EC335 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_LicenseController.h"; path = "../../Source/Licenses/jucer_LicenseController.h"; sourceTree = "SOURCE_ROOT"; }; - BC3B310D42C489E8B8D93327 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_DocumentEditorComponent.cpp"; path = "../../Source/CodeEditor/jucer_DocumentEditorComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - BC623CC67AC58297BF6B4C70 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TestComponent.h"; path = "../../Source/ComponentEditor/UI/jucer_TestComponent.h"; sourceTree = "SOURCE_ROOT"; }; - BCB6C87E3992930674E54D16 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementGroup.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.h"; sourceTree = "SOURCE_ROOT"; }; - BDF6AFC5F88581AE395F1DC9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ResourceEditorPanel.h"; path = "../../Source/ComponentEditor/UI/jucer_ResourceEditorPanel.h"; sourceTree = "SOURCE_ROOT"; }; - BE618CE21C794BDEE319E328 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_AppearanceSettings.cpp"; path = "../../Source/Settings/jucer_AppearanceSettings.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF301C2E545AEB4AC112C176 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ButtonDocument.cpp"; path = "../../Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp"; sourceTree = "SOURCE_ROOT"; }; - BF3CEF080FA013E2778DCE90 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Project.h"; path = "../../Source/Project/jucer_Project.h"; sourceTree = "SOURCE_ROOT"; }; - C09BBB58CA45B66D693E8C31 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TemplateThumbnailsComponent.h"; path = "../../Source/Wizards/jucer_TemplateThumbnailsComponent.h"; sourceTree = "SOURCE_ROOT"; }; - C187718F7B9EBA88584B43F3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutine.cpp"; path = "../../Source/ComponentEditor/jucer_PaintRoutine.cpp"; sourceTree = "SOURCE_ROOT"; }; - C2990A8D054BC230E7C637C3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewProjectWizardClasses.h"; path = "../../Source/Wizards/jucer_NewProjectWizardClasses.h"; sourceTree = "SOURCE_ROOT"; }; - C3BB9F92B02B06D04A73794C = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ProjectExporter.cpp"; path = "../../Source/ProjectSaving/jucer_ProjectExporter.cpp"; sourceTree = "SOURCE_ROOT"; }; - C3E04CD5A93A45154894E624 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Colours.h"; path = "../../Source/Utility/Helpers/jucer_Colours.h"; sourceTree = "SOURCE_ROOT"; }; - C402C21DFAC1F8BF121144F1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FillType.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_FillType.h"; sourceTree = "SOURCE_ROOT"; }; - C59E624F099CC785F27429EB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Icons.h"; path = "../../Source/Utility/UI/jucer_Icons.h"; sourceTree = "SOURCE_ROOT"; }; - C607639897ED2538CBB860D0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_OpenGLComponentSimpleTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - C7245390C6C44E89F7526CFC = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_NewComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - C736264708F3F68BA745BA29 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FloatingToolWindow.h"; path = "../../Source/Application/Windows/jucer_FloatingToolWindow.h"; sourceTree = "SOURCE_ROOT"; }; - C76271530EB4458B6146D463 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PIPGenerator.h"; path = "../../Source/Utility/PIPs/jucer_PIPGenerator.h"; sourceTree = "SOURCE_ROOT"; }; - CC1C5F8E5DE34223FEC59673 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioPluginFilterTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - CCD62DB0A19A985A4B9D7F32 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_Android.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_Android.h"; sourceTree = "SOURCE_ROOT"; }; - CCEA34A55813C7C4E58254F5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_BuildTabStatusComponent.h"; path = "../../Source/LiveBuildEngine/UI/jucer_BuildTabStatusComponent.h"; sourceTree = "SOURCE_ROOT"; }; - CF6C8BD0DA3D8CD4E99EBADA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; - D00F311BFC3C2625C457CB9B = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; }; - D045BD5943BD38F2720FF5F0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FontPropertyComponent.h"; path = "../../Source/ComponentEditor/Properties/jucer_FontPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D05BD91B6105827B010E1C20 = {isa = PBXFileReference; lastKnownFileType = file; name = "juce_gui_extra"; path = "../../../../modules/juce_gui_extra"; sourceTree = "SOURCE_ROOT"; }; - D1739728A79A2062418B8EF0 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_StaticLibrary.svg"; path = "../../Source/BinaryData/Icons/wizard_StaticLibrary.svg"; sourceTree = "SOURCE_ROOT"; }; - D1F9B0E9F5D54FE48BEB46EA = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - D251114072E67CA86D9913D6 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ClassDatabase.h"; path = "../../Source/LiveBuildEngine/jucer_ClassDatabase.h"; sourceTree = "SOURCE_ROOT"; }; - D2FE76E4CF003856278343CC = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CompileEngineServer.cpp"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineServer.cpp"; sourceTree = "SOURCE_ROOT"; }; - D4EB334E5186D1584EC63CA4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AudioComponentSimpleTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - D5795F8CAC5876714DAB355F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AnimatedComponentTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - D5EF5961B1F0E3FAED32E30A = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CLion.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_CLion.h"; sourceTree = "SOURCE_ROOT"; }; - D6390A40B3279E0E626C78D3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ColouredElement.cpp"; path = "../../Source/ComponentEditor/PaintElements/jucer_ColouredElement.cpp"; sourceTree = "SOURCE_ROOT"; }; - D766BB9D8C32B5560F0493F3 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_cryptography.mm"; path = "../../JuceLibraryCode/include_juce_cryptography.mm"; sourceTree = "SOURCE_ROOT"; }; - D859E9EA11A71BD6E85DC649 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_DependencyPathPropertyComponent.cpp"; path = "../../Source/Utility/UI/PropertyComponents/jucer_DependencyPathPropertyComponent.cpp"; sourceTree = "SOURCE_ROOT"; }; - D91E7F8FEF9290195D56782C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_EditorColourSchemeWindowComponent.h"; path = "../../Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - D93E2F2468003DD333371F06 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StrokeType.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_StrokeType.h"; sourceTree = "SOURCE_ROOT"; }; - DA345D5B9DABD049F90DC96F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GeneratedCode.h"; path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; sourceTree = "SOURCE_ROOT"; }; - DA4D0CC5149F7C0FBDAF34A2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementPath.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementPath.h"; sourceTree = "SOURCE_ROOT"; }; - DB9C8E35DF815B803CB4A9CF = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = "include_juce_core.mm"; path = "../../JuceLibraryCode/include_juce_core.mm"; sourceTree = "SOURCE_ROOT"; }; - DDC382008FFD9F9E0B2B0EDD = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_SVGPathDataWindowComponent.h"; path = "../../Source/Application/Windows/jucer_SVGPathDataWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - DE3E6B2614229FAD56D50770 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CompileEngineClient.cpp"; path = "../../Source/LiveBuildEngine/jucer_CompileEngineClient.cpp"; sourceTree = "SOURCE_ROOT"; }; - DE4A987B2D5529990A6AA9D4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AboutWindowComponent.h"; path = "../../Source/Application/Windows/jucer_AboutWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - DFBEB8E086832AEB0FBEADF0 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_StoredSettings.h"; path = "../../Source/Settings/jucer_StoredSettings.h"; sourceTree = "SOURCE_ROOT"; }; - E111A336FE13C033EAA0A1D1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_NewCppFileTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_NewCppFileTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - E13A54A6D3A1895EACE53E51 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ResourceFile.cpp"; path = "../../Source/ProjectSaving/jucer_ResourceFile.cpp"; sourceTree = "SOURCE_ROOT"; }; - E1535CDF4258E7D4AB70B5E5 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ClientServerMessages.h"; path = "../../Source/LiveBuildEngine/jucer_ClientServerMessages.h"; sourceTree = "SOURCE_ROOT"; }; - E1577F8617C75B91D7399812 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ImageButtonHandler.h"; path = "../../Source/ComponentEditor/Components/jucer_ImageButtonHandler.h"; sourceTree = "SOURCE_ROOT"; }; - E186BC01A1B1529937A46485 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FileHelpers.h"; path = "../../Source/Utility/Helpers/jucer_FileHelpers.h"; sourceTree = "SOURCE_ROOT"; }; - E266DE67FF319D56F63193A6 = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Info-App.plist"; path = "Info-App.plist"; sourceTree = "SOURCE_ROOT"; }; - E2B668E2A65AEE8F07B406C8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_AppearanceSettings.h"; path = "../../Source/Settings/jucer_AppearanceSettings.h"; sourceTree = "SOURCE_ROOT"; }; - E367FC2BDAF5EBA48D767FBB = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_FilePathPropertyComponent.h"; path = "../../Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - E3BADF21095BC23DE2CB454F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectTreeItemBase.h"; path = "../../Source/Project/UI/Sidebar/jucer_ProjectTreeItemBase.h"; sourceTree = "SOURCE_ROOT"; }; - E468FDB5504C5D9315B2D04F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentDocument.h"; path = "../../Source/ComponentEditor/Documents/jucer_ComponentDocument.h"; sourceTree = "SOURCE_ROOT"; }; - E5D6C36496F5BC84D7213BE8 = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - E67999BF57B139E00207A374 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PIPTemplate.h"; path = "../../Source/BinaryData/Templates/jucer_PIPTemplate.h"; sourceTree = "SOURCE_ROOT"; }; - E96597BBC6A98255B51B94DC = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; - E983E6DDE3318B872EBE347F = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; }; - EAC1731150A7F79D59BAA0B6 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "export_visualStudio.svg"; path = "../../Source/BinaryData/Icons/export_visualStudio.svg"; sourceTree = "SOURCE_ROOT"; }; - EB2E723DC3DB150A8A644D08 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GlobalPathsWindowComponent.h"; path = "../../Source/Application/Windows/jucer_GlobalPathsWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - ED5EAC91D8A0A1911BE9F482 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_ConsoleApp.svg"; path = "../../Source/BinaryData/Icons/wizard_ConsoleApp.svg"; sourceTree = "SOURCE_ROOT"; }; - ED69863B3D591FB3F0CA50E4 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintRoutineEditor.h"; path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h"; sourceTree = "SOURCE_ROOT"; }; - EE690110171E1648FF2118B8 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_Application.h"; path = "../../Source/Application/jucer_Application.h"; sourceTree = "SOURCE_ROOT"; }; - EF25A29A2194FC107B40F65F = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentLayoutEditor.cpp"; path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.cpp"; sourceTree = "SOURCE_ROOT"; }; - EFF38AE74E7267CCC47E8AD1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_JucerDocumentEditor.h"; path = "../../Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h"; sourceTree = "SOURCE_ROOT"; }; - F073B54B36D845915CD6D2C1 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_PaintElementEllipse.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementEllipse.h"; sourceTree = "SOURCE_ROOT"; }; - F159C1B99ACF1D91E12D978E = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_MainTemplate_NoWindow.cpp"; path = "../../Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp"; sourceTree = "SOURCE_ROOT"; }; - F2E4998FB2C7221587A79F8B = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_CodeHelpers.cpp"; path = "../../Source/Utility/Helpers/jucer_CodeHelpers.cpp"; sourceTree = "SOURCE_ROOT"; }; - F3CC8F26ECCDA6DCD8A284D2 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_GradientPointComponent.h"; path = "../../Source/ComponentEditor/PaintElements/jucer_GradientPointComponent.h"; sourceTree = "SOURCE_ROOT"; }; - F4FD9BD16ED2700F45A68C4F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentBooleanProperty.h"; path = "../../Source/ComponentEditor/Properties/jucer_ComponentBooleanProperty.h"; sourceTree = "SOURCE_ROOT"; }; - F5DD97B45B8EA60C1ED0DD80 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_StoredSettings.cpp"; path = "../../Source/Settings/jucer_StoredSettings.cpp"; sourceTree = "SOURCE_ROOT"; }; - F797071D88542C813CF7222A = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_Module.cpp"; path = "../../Source/Project/jucer_Module.cpp"; sourceTree = "SOURCE_ROOT"; }; - F7C74E934C954F6F1A3BE4F9 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_TranslationToolWindowComponent.h"; path = "../../Source/Application/Windows/jucer_TranslationToolWindowComponent.h"; sourceTree = "SOURCE_ROOT"; }; - F8A38C0C7C45F2DB6A5FB812 = {isa = PBXFileReference; lastKnownFileType = file.svg; name = "wizard_Highlight.svg"; path = "../../Source/BinaryData/Icons/wizard_Highlight.svg"; sourceTree = "SOURCE_ROOT"; }; - F8F94093A0963D86BD27A95D = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_DependencyPathPropertyComponent.h"; path = "../../Source/Utility/UI/PropertyComponents/jucer_DependencyPathPropertyComponent.h"; sourceTree = "SOURCE_ROOT"; }; - F9111E150CFF155329D44853 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_OpenDocumentManager.cpp"; path = "../../Source/CodeEditor/jucer_OpenDocumentManager.cpp"; sourceTree = "SOURCE_ROOT"; }; - FA790C59A304579F660F112F = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_CodeBlocks.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h"; sourceTree = "SOURCE_ROOT"; }; - FB80347407261BF6CCEFDE91 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_ComponentTemplate.cpp"; path = "../../Source/BinaryData/Templates/jucer_ComponentTemplate.cpp"; sourceTree = "SOURCE_ROOT"; }; - FCEBE24EA79A13713D7CBF26 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ComponentColourProperty.h"; path = "../../Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h"; sourceTree = "SOURCE_ROOT"; }; - FE20FE5805A02A4843048200 = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjucerLookAndFeel.h"; path = "../../Source/Utility/UI/jucer_ProjucerLookAndFeel.h"; sourceTree = "SOURCE_ROOT"; }; - FF68231DE2B395461009116C = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "jucer_ProjectExport_MSVC.h"; path = "../../Source/ProjectSaving/jucer_ProjectExport_MSVC.h"; sourceTree = "SOURCE_ROOT"; }; - FFE01768CF1C8DBDAA894F76 = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = "jucer_PaintRoutinePanel.cpp"; path = "../../Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp"; sourceTree = "SOURCE_ROOT"; }; - EB1D55A76652399EB81CC1F0 = {isa = PBXGroup; children = ( - DE4A987B2D5529990A6AA9D4, - B83DAADA1A871F21582FFB23, - D91E7F8FEF9290195D56782C, - C736264708F3F68BA745BA29, - EB2E723DC3DB150A8A644D08, - 124232706D1C8A3CA49E70CD, - DDC382008FFD9F9E0B2B0EDD, - F7C74E934C954F6F1A3BE4F9, - 92926A4D3CC4BB2A9D35EB0B, ); name = Windows; sourceTree = ""; }; - BC67FD952A6F210A11A1ECB8 = {isa = PBXGroup; children = ( - EB1D55A76652399EB81CC1F0, - 7CA44FF0BA319517C6E39651, - EE690110171E1648FF2118B8, - 0D4D508C638BC74943B9976D, - 4D698BF12BCD6B0896BCDF17, - 23A8DE16C0CDB8EED18B008B, - 0400CB0E056A1D840304D2DE, - 2EEB1C074162F363C6599282, - 6E6140969908E7619F858740, - 3F8EC008960DBEB2A5D3C3F4, - 8C52A3DDA62A746AA7A68535, - 9069981E414A631B036CC9AC, - 2CD34A70B4032C0426F7AA10, - B6496F16ACE80CACC5721570, - 4818A05DE44ADA03D85E1083, ); name = Application; sourceTree = ""; }; - 8CF70DA9AB4725126B9F55BE = {isa = PBXGroup; children = ( - 129F2DE0FEF154F8F8C7A74E, - 0B24F292A357ABFD9BCC6D7F, - 576A92E1E0D8F453EC0FEB34, - 996E472B82A75531875A5E38, ); name = gradle; sourceTree = ""; }; - F0F189518721D46C0F94FD56 = {isa = PBXGroup; children = ( - 514F2FAFDBF535AC03FA2E6C, - 807049CA2D5B6DE18EA078F2, - 56749E4C72A8F51ACA8F2330, - 42F4AA3EF0883D506987CA99, - 69B478C992FA0B8C885946A6, - EAC1731150A7F79D59BAA0B6, - 8F4D281E98808204E2846A7D, - 194457D806A26E793584AC0C, - 432EC251A122071809471804, - B83C9BD89F31EA9E5E12A3C6, - 8FEF6F5EA676B824C021EB6F, - 8FF26BF72A522FBEAAFDDF54, - 2072D6BAE744B53B6FBBDDD8, - ED5EAC91D8A0A1911BE9F482, - AEFE3BA0C31EC78A5767A10E, - 5B3532C5F103DAC87B4A5675, - F8A38C0C7C45F2DB6A5FB812, - B1C2F8ED14BF914CD1882708, - 62922B3C0620368D1799A653, - D1739728A79A2062418B8EF0, ); name = Icons; sourceTree = ""; }; - E59ABA0D11CBAAD77179E9C6 = {isa = PBXGroup; children = ( - 9A3B8BBDA8E144A3DF6B9349, - 016A6C52B0B93DE29197FF64, - D5795F8CAC5876714DAB355F, - D4EB334E5186D1584EC63CA4, - 203FA6AD7EDDF1F9C338CC2A, - 5BF0374EB908F0476BD8ED42, - 6574A50A8997799705B23465, - 56177921580A4855917E0205, - 079802C6AEE7646010766FE8, - CC1C5F8E5DE34223FEC59673, - FB80347407261BF6CCEFDE91, - 2BD9B4556479A8A41740BCAE, - 9E0BA495286388EBF929D578, - 8D9A9A373E4621F7CBFCCCEF, - 59203884BC48D3B7F8DEABA8, - 32C4B61AD995877956B7FA66, - A66F17E7472E5C19AFE98E46, - F159C1B99ACF1D91E12D978E, - 97A847B59EE04483E8850E4B, - A160AEF56553A658E6EA6A8E, - 8336A43CE1C3C26D7C7B53D8, - C7245390C6C44E89F7526CFC, - 8F67F3C0492EAFEBDBBC12DB, - E111A336FE13C033EAA0A1D1, - 9E2B1506AC3FDB7863766D59, - C607639897ED2538CBB860D0, - 023B92AC0340305762412E90, - 3F7C5B53347A487C7FBD2223, - 4ECF029E3A69BF42FED1503D, - 3DC2ED15A9DFAAEF3D2ACDDF, - E67999BF57B139E00207A374, ); name = Templates; sourceTree = ""; }; - A9399733CAA07BDAB958242C = {isa = PBXGroup; children = ( - 8CF70DA9AB4725126B9F55BE, - F0F189518721D46C0F94FD56, - E59ABA0D11CBAAD77179E9C6, - 41105E536155E394E54BDD35, - 5F6584B675E30761521A9F42, - 59B08C7B13B8EA5137ACA77A, - 8C281F2F8EA3AD614ADF7955, - 4073A12E196BDDADE211E19F, - 58139D8D454051C59E77609B, ); name = BinaryData; sourceTree = ""; }; - F1B44F007A02A0FAE4DC8D79 = {isa = PBXGroup; children = ( - BC3B310D42C489E8B8D93327, - 51BC758EF5D33197CF543E67, - 35CAE8930F2885F9322D22D5, - 8A82061A978B03745485C3AC, - F9111E150CFF155329D44853, - 1B5BCD4899A9E295786EB642, - 332AF94C3275FEA8B878D603, - B9B130F596953116393138DC, ); name = CodeEditor; sourceTree = ""; }; - 2A1D5A24E950E00CDF969502 = {isa = PBXGroup; children = ( - 01A37DF94E98D991FEF43628, - 409C636B96A9AC1D732B96F8, - 9E62EC342665C27BA01AFC1A, - 8F731F1F98BAB42F1C3B96AA, - 11DEED05110D3D1D02FCFFB6, - 0543E83BF7D7D9234C396E82, - 630DC5EAA31D3EE60B2D989F, - 705DE88C5C4CC6C871E951B1, - A49503B646A7BD2BEEFC5CBD, - E1577F8617C75B91D7399812, - 33B258726F29360D64FD1451, - 9F959ECF8CD9B7314AE604A9, - 73DE14CEAD25D3445457013E, - 0AE75B0ACD368A4C0FBC2CD0, - 35CFCC15CBA46F4513940A2A, - 868B459E02F0877EBE3D56F1, - 8DFE6D8AFB8057790041300B, - A22F64D1E4BD4B8FA366DAAD, - 055636565C2F512E40114582, ); name = Components; sourceTree = ""; }; - 18139A4BCB7C14043C72B9E1 = {isa = PBXGroup; children = ( - BF301C2E545AEB4AC112C176, - 9F2D3E5FC10F7C3270908E97, - 1DCA18E935A35D29D2D9B6A0, - E468FDB5504C5D9315B2D04F, ); name = Documents; sourceTree = ""; }; - 497FD8DD8175790E4885736B = {isa = PBXGroup; children = ( - D6390A40B3279E0E626C78D3, - 9914F905BFCFBE5F76619670, - 8D178CAEE6D89DE33233313F, - C402C21DFAC1F8BF121144F1, - F3CC8F26ECCDA6DCD8A284D2, - 9B6FD3FEDB6D91AD0A80EF97, - 512D80BE12634967A085A1DC, - 4AE469CD40BDAD634135785E, - F073B54B36D845915CD6D2C1, - 988F5C1E40DED02D8B064253, - BCB6C87E3992930674E54D16, - 72ED72174F9DBD0ABD8AFCED, - 7031E8CB6D4D84BD980A0BD0, - 4AE72953E3B3DF06D3B9BA86, - DA4D0CC5149F7C0FBDAF34A2, - 355379844A5E6A097038C280, - 77EA01E7D04BF889930BFF54, - B97D60D2531CFD0D8555BA5C, - 36E5FBF64A89D5F2A266A5A7, - 7687A1374C60A025BDBE98DE, - D93E2F2468003DD333371F06, ); name = PaintElements; sourceTree = ""; }; - 172E2F5D29A894D0BA9231A9 = {isa = PBXGroup; children = ( - 7F0A5319912991615FC57945, - F4FD9BD16ED2700F45A68C4F, - 7E2013F425E231C6D865DDD0, - FCEBE24EA79A13713D7CBF26, - 5783563E39E48ADFC68EB84A, - 2F373F97E30AC1A0BFC1FC61, - D045BD5943BD38F2720FF5F0, - B2CB95B3F44C3CC5735051A3, - 85A5E3E71BED93B9A3E07681, ); name = Properties; sourceTree = ""; }; - 0565E54C3060E29ED38B65AB = {isa = PBXGroup; children = ( - EF25A29A2194FC107B40F65F, - 5524B5C9FC6AEAA670B92AA9, - A0BBBFBA13A1308B3CD725D5, - 00E6B87A43453B51850550E1, - 9BDF2D6255C1CB2CFF376186, - 6F02C3B7FEA3B50692A70DE5, - 39597BD78897CB711AFA945A, - 4E671236FDBD5AD4699740C6, - 351AF80A004D766E314AB76D, - EFF38AE74E7267CCC47E8AD1, - 6E70C1FA80F02D4C310F63AA, - ED69863B3D591FB3F0CA50E4, - FFE01768CF1C8DBDAA894F76, - 65FAD7F6DF65A72B741C2913, - 719B56C8587863D7AE9B69C6, - 0EE17BE4154CF1B2EE683894, - BDF6AFC5F88581AE395F1DC9, - 75BE2887C6F324B818D80A21, - 24EB4C2412821B8019D6F754, - BC623CC67AC58297BF6B4C70, ); name = UI; sourceTree = ""; }; - F6BD840F9A06F2DA891E2CB8 = {isa = PBXGroup; children = ( - 2A1D5A24E950E00CDF969502, - 18139A4BCB7C14043C72B9E1, - 497FD8DD8175790E4885736B, - 172E2F5D29A894D0BA9231A9, - 0565E54C3060E29ED38B65AB, - 9EF583A6201DBC813C2F63C4, - 6AC88EFC247C225CC5C11A43, - 133F1E428260C5ADDF496DF9, - 3F9D4C7F6E5779D4E4AE655D, - 78D0DBC4798FF040FDB90F6D, - DA345D5B9DABD049F90DC96F, - 269A454F1FF081DA67FFD578, - 8F30A53C7FE4BC65171FB3E2, - 9D7689451732AF8333402B3A, - 50498FF6EA3901CBD58223B3, - C187718F7B9EBA88584B43F3, - 66B49F08C5EC3E4974825FF8, - 5432B7B9B2CF2EAEC8B66D5C, ); name = ComponentEditor; sourceTree = ""; }; - 144B649D98AE8316058B8281 = {isa = PBXGroup; children = ( - 51CBE59779A36D1B80B26974, - BB187CD608EB6368B29EC335, - 790F6302B9A0620F23F8A6C1, - 98E6D61BFF7D85F0E00F0FBF, ); name = Licenses; sourceTree = ""; }; - 9014CA5F3B8D23E883D6975E = {isa = PBXGroup; children = ( - 2DF5A61F3C497537634773DF, - CCEA34A55813C7C4E58254F5, - 0640E34282A97BF73CC8F1EB, - 3BBFA655E129C2D817EA47C9, ); name = UI; sourceTree = ""; }; - 20B39D53B7DAAB53C7533532 = {isa = PBXGroup; children = ( - 9014CA5F3B8D23E883D6975E, - 245C81599FB53865A74FC65B, - D251114072E67CA86D9913D6, - E1535CDF4258E7D4AB70B5E5, - DE3E6B2614229FAD56D50770, - 308084CBEE9F7D405D72A5E1, - A978DFE87D9BB5EFE5B3DAAC, - D2FE76E4CF003856278343CC, - BA186B51EE4884CD8E3F2741, - A081306A9E95CA114B81910F, - ADD6A3CF5D7DE55E57E8E38B, - A9954DC7F876A7006743ACB6, - ADA538034910F52FDD2DC88D, - 8F685EFEFD6EE399058DE842, - 159DE1FEE2099398983CDDF0, - B24E3F34C3C4EE54A60C35CC, - 55DEDCEB35AA1FB54C74B375, - 3EA27F52A254912218F4DE94, - 182CB1F96890620A202C6524, ); name = LiveBuildEngine; sourceTree = ""; }; - 236D186F5A6536C59D6E751C = {isa = PBXGroup; children = ( - 861E52D9AFECADF079BB1F2C, - 4974E7808F9B57E9A627F878, - 68C1949F56295D5871C1F223, - 5E4EB84A7983AB31366A3490, - 1C80C7672975C1FF9AAC4A4F, - E3BADF21095BC23DE2CB454F, - 95EAB6EC9B724538B93910D4, - 68F41A216E7454E7442AB1F4, ); name = Sidebar; sourceTree = ""; }; - EBC037ECAAC8156B8B19DC69 = {isa = PBXGroup; children = ( - 236D186F5A6536C59D6E751C, - 32ECBC08D903418CA0825870, - A509BC22854D50E4C786EB32, - 516D6D7C564DD5DF5C15CB06, - 16751E04B0F3737BDF52CEB4, - B3528C08B84CBC950252EA69, - 1B0F18E1D96F727C062B05FA, - 92A66A8BD87F98EB6B4FB6D0, ); name = UI; sourceTree = ""; }; - 89E9055A179B4C2019B4E1AE = {isa = PBXGroup; children = ( - EBC037ECAAC8156B8B19DC69, - F797071D88542C813CF7222A, - 7211101FFA28400ADBB1D47A, - BAC43B20E14A340CCF14119C, - BF3CEF080FA013E2778DCE90, - B8385E9A644BD3CD94876448, ); name = Project; sourceTree = ""; }; - 4DCC5D64BBE8DE85360A3D57 = {isa = PBXGroup; children = ( - CCD62DB0A19A985A4B9D7F32, - D5EF5961B1F0E3FAED32E30A, - FA790C59A304579F660F112F, - 59520B8137E6A2E483074399, - FF68231DE2B395461009116C, - 20075A86A4D0E8A5B973D9DB, - C3BB9F92B02B06D04A73794C, - 8DBB36126CD144A8364F1F19, - 4FF81FC167C924C47BD8C1C9, - 9EE3141E20C9CE3EA182FA04, - E13A54A6D3A1895EACE53E51, - 25BE1265FE6C6EA3473A3A0A, ); name = ProjectSaving; sourceTree = ""; }; - EC535A977A1A114BC5DAE7B3 = {isa = PBXGroup; children = ( - BE618CE21C794BDEE319E328, - E2B668E2A65AEE8F07B406C8, - F5DD97B45B8EA60C1ED0DD80, - DFBEB8E086832AEB0FBEADF0, ); name = Settings; sourceTree = ""; }; - AA2CBF47682AE479C1A387BE = {isa = PBXGroup; children = ( - F2E4998FB2C7221587A79F8B, - 23D79A22569BEDF63B57DD36, - C3E04CD5A93A45154894E624, - B403AF75EAF361ED74EE476E, - E186BC01A1B1529937A46485, - 486E8D02DAD2A0BF54A901C0, - 983CFBA01CA8811F30FA7F4C, - 58F1FF52E887887A93E84FC2, - A6C4AE13FB409DE414094CFA, - 6FD8DBC0FF42C87D8BEE2452, - 00515BA4EC5A7D4DC078ED37, ); name = Helpers; sourceTree = ""; }; - B4972C4048154E5E783D3934 = {isa = PBXGroup; children = ( - 191330B20DAC08B890656EA0, - C76271530EB4458B6146D463, ); name = PIPs; sourceTree = ""; }; - 15F56361B9CF3E0BE705E64D = {isa = PBXGroup; children = ( - 9EB33734D0DBD0370AB1247B, - D859E9EA11A71BD6E85DC649, - F8F94093A0963D86BD27A95D, - E367FC2BDAF5EBA48D767FBB, - 59F8A47C0020D62C8836A1E7, ); name = PropertyComponents; sourceTree = ""; }; - DD068F16F341D15E150CE6F1 = {isa = PBXGroup; children = ( - 15F56361B9CF3E0BE705E64D, - 169DD91232C070C4D6470B31, - 846B2A670C5A19DE0039E11A, - C59E624F099CC785F27429EB, - 4D5F0CA8D1273144681A1D48, - 00841B7EDDE9C19890F03267, - 0F8C000E5FF4A2DAC1FEF8EB, - FE20FE5805A02A4843048200, - 0CECD562059DFD7FBFB37E3C, - 3D6FD9C0065BF16568EC0AB7, - 28D0199327887FFABF9C3F20, ); name = UI; sourceTree = ""; }; - 2B1F885AA027E1A76A1C32E3 = {isa = PBXGroup; children = ( - AA2CBF47682AE479C1A387BE, - B4972C4048154E5E783D3934, - DD068F16F341D15E150CE6F1, ); name = Utility; sourceTree = ""; }; - 73BAA89A783BBDD79AA27964 = {isa = PBXGroup; children = ( - A69024A225F2AC31F17B1314, - 11DC04468BC6023671017EBF, - 087CB3A961CD3C7434D660A4, - 4B083E951ECB62217C46CB01, - C2990A8D054BC230E7C637C3, - 8BD8E9DA627D6EF9BA10FB9E, - 3C95FA2AA91EBA19ADDD5C29, - 8A825FDDC00DD253F44D2C3A, - 4A4EBDAD8D098F72CE053235, - 0F01067432AC314EAC213C1C, - A44A774EFC020D3D046A9249, - 9992E6950C64322A11E39ADF, - 05D67B5A8D64947C067C0945, - A085174413736ACC8D7D42A2, - 471C7B0A8B92320AF0C80839, - 714267352CE5C4357ADBC231, - C09BBB58CA45B66D693E8C31, ); name = Wizards; sourceTree = ""; }; - D3109994DA6AD871BE85C4E2 = {isa = PBXGroup; children = ( - BC67FD952A6F210A11A1ECB8, - A9399733CAA07BDAB958242C, - F1B44F007A02A0FAE4DC8D79, - F6BD840F9A06F2DA891E2CB8, - 144B649D98AE8316058B8281, - 20B39D53B7DAAB53C7533532, - 89E9055A179B4C2019B4E1AE, - 4DCC5D64BBE8DE85360A3D57, - EC535A977A1A114BC5DAE7B3, - 2B1F885AA027E1A76A1C32E3, - 73BAA89A783BBDD79AA27964, ); name = Projucer; sourceTree = ""; }; - 8A24D1B6925535A868974986 = {isa = PBXGroup; children = ( - 58DE91CE6B05AFBACADDB251, - BA159A3B7D129771F5C15EA3, - AA1C44E89D792DDC4867B2C8, - 69555CEFC6ED613AA3949298, - 21F4833C5B5C17B159B956F3, - B6F2905330EA5C560D527209, - 7AB7640968FAAC73072FBD10, - D05BD91B6105827B010E1C20, ); name = "JUCE Modules"; sourceTree = ""; }; - 2C6746F66EF4444F53B3221F = {isa = PBXGroup; children = ( - 8702F43110E4CCA5E5F827F5, - 472F9A90F685220D730EBF6C, - 4F687965FBE86EAFDB3ACFEC, - 805A3A5FBA3B9E28363DD77B, - DB9C8E35DF815B803CB4A9CF, - D766BB9D8C32B5560F0493F3, - 1DE5BBC777FB64798D823002, - 5867DC4E39DF8539B54C0D59, - 1B9B5A37F079FE3B3CF8FAB6, - 0462692BAA9CD1BE6DFBCC33, - AECE3914F5119A3D586A5635, - 364D1A9B113320407A7E57B9, ); name = "JUCE Library Code"; sourceTree = ""; }; - 8180B5894A78501084B8F133 = {isa = PBXGroup; children = ( - E266DE67FF319D56F63193A6, - 6678E9B3EEACAD47F438B264, - 951128CA33CCDEF570436B1C, ); name = Resources; sourceTree = ""; }; - 0FFEF043CA89142B18C79ABE = {isa = PBXGroup; children = ( - 80D62B907248523E6943298B, - 5A75806B34E4EA6598A6024A, - 7B3F7ECF6DBF8C8EE5C2CB86, - 210CD22F25F2C22F9CEEB025, - D00F311BFC3C2625C457CB9B, - D1F9B0E9F5D54FE48BEB46EA, - 728FE25157E9874D50BBECB2, - E983E6DDE3318B872EBE347F, - 8F7BE18698ADCEF51CDE4A5C, - 842427CFE565F3FCE5B99174, - E96597BBC6A98255B51B94DC, - 431D30038CBF67F80E8B3A13, - 9F01BA9942D038EA8B5289A8, - E5D6C36496F5BC84D7213BE8, - CF6C8BD0DA3D8CD4E99EBADA, ); name = Frameworks; sourceTree = ""; }; - 92ABB8016546F41128399E9D = {isa = PBXGroup; children = ( - 09DE066936CF037E9709ADB1, ); name = Products; sourceTree = ""; }; - 3CC531922CC2D398E283A845 = {isa = PBXGroup; children = ( - D3109994DA6AD871BE85C4E2, - 8A24D1B6925535A868974986, - 2C6746F66EF4444F53B3221F, - 8180B5894A78501084B8F133, - 0FFEF043CA89142B18C79ABE, - 92ABB8016546F41128399E9D, ); name = Source; sourceTree = ""; }; - 0CC6C439D038EDA0D7F10DF0 = {isa = XCBuildConfiguration; buildSettings = { + A6A9D7624D002544ECB81D82 = { + isa = PBXBuildFile; + fileRef = 09DE066936CF037E9709ADB1; + }; + A578EAD4BB55680E8097BE0F = { + isa = PBXBuildFile; + fileRef = 80D62B907248523E6943298B; + }; + C1B9334AE849F93FB3C56B34 = { + isa = PBXBuildFile; + fileRef = 5A75806B34E4EA6598A6024A; + }; + 8B4A593B3869815BBAC3EF93 = { + isa = PBXBuildFile; + fileRef = 7B3F7ECF6DBF8C8EE5C2CB86; + }; + A14C2C2725DA3CA7995D2815 = { + isa = PBXBuildFile; + fileRef = 210CD22F25F2C22F9CEEB025; + }; + 1E76E36772355E2A43CF4961 = { + isa = PBXBuildFile; + fileRef = D00F311BFC3C2625C457CB9B; + }; + 241F29FCBB7A17BB44A0B10C = { + isa = PBXBuildFile; + fileRef = D1F9B0E9F5D54FE48BEB46EA; + }; + 9359F9401D59B4517F75C39C = { + isa = PBXBuildFile; + fileRef = 728FE25157E9874D50BBECB2; + }; + 091A57B4B9CE623E75E9A756 = { + isa = PBXBuildFile; + fileRef = E983E6DDE3318B872EBE347F; + }; + FAB47E69F7D9DCE1F906AA07 = { + isa = PBXBuildFile; + fileRef = 8F7BE18698ADCEF51CDE4A5C; + }; + 0E884E47A637D6C65154699A = { + isa = PBXBuildFile; + fileRef = 842427CFE565F3FCE5B99174; + }; + 49C22786B54C5DC94E4654B8 = { + isa = PBXBuildFile; + fileRef = E96597BBC6A98255B51B94DC; + }; + CDEF9FF2D119476D707305DF = { + isa = PBXBuildFile; + fileRef = 431D30038CBF67F80E8B3A13; + }; + 96EC6315E1B3F1A109F84BAF = { + isa = PBXBuildFile; + fileRef = 9F01BA9942D038EA8B5289A8; + }; + 11D42F7EC6E6539D79A7F4B1 = { + isa = PBXBuildFile; + fileRef = E5D6C36496F5BC84D7213BE8; + }; + B980464FA2761CCD64B1FAD6 = { + isa = PBXBuildFile; + fileRef = CF6C8BD0DA3D8CD4E99EBADA; + }; + 2610F357881240ACBF612F48 = { + isa = PBXBuildFile; + fileRef = 6678E9B3EEACAD47F438B264; + }; + 1321E6C1C6170B6C898AD09D = { + isa = PBXBuildFile; + fileRef = 951128CA33CCDEF570436B1C; + }; + 6DD9DA1677A6CF789CDAB478 = { + isa = PBXBuildFile; + fileRef = 0D4D508C638BC74943B9976D; + }; + 954A036F5DDB375DB23FFB3E = { + isa = PBXBuildFile; + fileRef = 0400CB0E056A1D840304D2DE; + }; + 95B44E6C74B1DED31DBE37EB = { + isa = PBXBuildFile; + fileRef = 8C52A3DDA62A746AA7A68535; + }; + AA9D0B8E23F3D87A23DE9F8A = { + isa = PBXBuildFile; + fileRef = 9069981E414A631B036CC9AC; + }; + 98F9BB4612E82EE59689E15C = { + isa = PBXBuildFile; + fileRef = B6496F16ACE80CACC5721570; + }; + 09C4EDDF7F8B6E75EA3CE3A9 = { + isa = PBXBuildFile; + fileRef = BC3B310D42C489E8B8D93327; + }; + 71713DE4716DCEDB45A206E2 = { + isa = PBXBuildFile; + fileRef = F9111E150CFF155329D44853; + }; + 940CE4E081E9E685243C07AA = { + isa = PBXBuildFile; + fileRef = 332AF94C3275FEA8B878D603; + }; + 49EEEA5B74D38F3C5A8794F1 = { + isa = PBXBuildFile; + fileRef = 8F731F1F98BAB42F1C3B96AA; + }; + 6FD9428439B572B558EF64EA = { + isa = PBXBuildFile; + fileRef = BF301C2E545AEB4AC112C176; + }; + 6EAAAAB0C2B2DA259B26D63C = { + isa = PBXBuildFile; + fileRef = 1DCA18E935A35D29D2D9B6A0; + }; + 4C0F95265A230E5A8717A0A9 = { + isa = PBXBuildFile; + fileRef = D6390A40B3279E0E626C78D3; + }; + FFA8B18CDF2D2AA500698A96 = { + isa = PBXBuildFile; + fileRef = 512D80BE12634967A085A1DC; + }; + EE26A1C2DAAB609362F407EA = { + isa = PBXBuildFile; + fileRef = 988F5C1E40DED02D8B064253; + }; + 4FAAB649E846BA2764C02ACE = { + isa = PBXBuildFile; + fileRef = 72ED72174F9DBD0ABD8AFCED; + }; + 7D750EF5FCE1E1A461D435BE = { + isa = PBXBuildFile; + fileRef = 4AE72953E3B3DF06D3B9BA86; + }; + 537ABF1DB09DDBD1542A2B0C = { + isa = PBXBuildFile; + fileRef = EF25A29A2194FC107B40F65F; + }; + 290F2CD930097091B8DB122E = { + isa = PBXBuildFile; + fileRef = 00E6B87A43453B51850550E1; + }; + 4B2F2DAA45060D3F250D0AE4 = { + isa = PBXBuildFile; + fileRef = 6F02C3B7FEA3B50692A70DE5; + }; + BDD30804C9424526A1122A28 = { + isa = PBXBuildFile; + fileRef = 351AF80A004D766E314AB76D; + }; + 37D582DA2227E004BFA237EC = { + isa = PBXBuildFile; + fileRef = 6E70C1FA80F02D4C310F63AA; + }; + 9B8ED9D50406E5D75DEE57F5 = { + isa = PBXBuildFile; + fileRef = FFE01768CF1C8DBDAA894F76; + }; + 89116B0BD882B51C63A84425 = { + isa = PBXBuildFile; + fileRef = 0EE17BE4154CF1B2EE683894; + }; + 63D97E01F2C4C91037CB65BD = { + isa = PBXBuildFile; + fileRef = 24EB4C2412821B8019D6F754; + }; + 45A53AF13B0D663050632E8C = { + isa = PBXBuildFile; + fileRef = 9EF583A6201DBC813C2F63C4; + }; + C2A85091A28C907A4E1E1687 = { + isa = PBXBuildFile; + fileRef = 133F1E428260C5ADDF496DF9; + }; + 83431B7234A78ECFB3C15F63 = { + isa = PBXBuildFile; + fileRef = 78D0DBC4798FF040FDB90F6D; + }; + 209FCCC2155A1FCB7E11E20D = { + isa = PBXBuildFile; + fileRef = 269A454F1FF081DA67FFD578; + }; + C93569F47B4AC1A8E37992ED = { + isa = PBXBuildFile; + fileRef = 9D7689451732AF8333402B3A; + }; + 1B988E139004D8E2850EB656 = { + isa = PBXBuildFile; + fileRef = C187718F7B9EBA88584B43F3; + }; + 6FD0752A5CADCF60D79FDBB7 = { + isa = PBXBuildFile; + fileRef = 51CBE59779A36D1B80B26974; + }; + D25EBE02B55DB244BE0D5635 = { + isa = PBXBuildFile; + fileRef = DE3E6B2614229FAD56D50770; + }; + 85E7FCB0516EFF853FA7B380 = { + isa = PBXBuildFile; + fileRef = D2FE76E4CF003856278343CC; + }; + CC6C4D351BA9B473E5F95791 = { + isa = PBXBuildFile; + fileRef = ADA538034910F52FDD2DC88D; + }; + 05A08E366EBF8D650974E695 = { + isa = PBXBuildFile; + fileRef = 516D6D7C564DD5DF5C15CB06; + }; + 3FCA61C401007B243E2E9035 = { + isa = PBXBuildFile; + fileRef = F797071D88542C813CF7222A; + }; + 30B921C38DCEE787B294B746 = { + isa = PBXBuildFile; + fileRef = BAC43B20E14A340CCF14119C; + }; + 244567D3AE2E417A8CB2B95E = { + isa = PBXBuildFile; + fileRef = C3BB9F92B02B06D04A73794C; + }; + 26D6AEA321E80ABCC3CCCCD1 = { + isa = PBXBuildFile; + fileRef = 4FF81FC167C924C47BD8C1C9; + }; + 4E6DC4778D583C48C3CCD4DC = { + isa = PBXBuildFile; + fileRef = E13A54A6D3A1895EACE53E51; + }; + EE722B47BC36CC8A87E0FB76 = { + isa = PBXBuildFile; + fileRef = BE618CE21C794BDEE319E328; + }; + 2DF375B40A64BB3778F7ABD1 = { + isa = PBXBuildFile; + fileRef = F5DD97B45B8EA60C1ED0DD80; + }; + 8BE478303CDF061B72F219E2 = { + isa = PBXBuildFile; + fileRef = F2E4998FB2C7221587A79F8B; + }; + BF913199032B4CE970E82AA3 = { + isa = PBXBuildFile; + fileRef = B403AF75EAF361ED74EE476E; + }; + 25EF9B3FECB4C9F0F522DCAA = { + isa = PBXBuildFile; + fileRef = 486E8D02DAD2A0BF54A901C0; + }; + 638C7247B6DBA67EFE46E124 = { + isa = PBXBuildFile; + fileRef = 191330B20DAC08B890656EA0; + }; + D0E26EB54B0087C8BE3D541E = { + isa = PBXBuildFile; + fileRef = 846B2A670C5A19DE0039E11A; + }; + 468548FB21D264DC12321327 = { + isa = PBXBuildFile; + fileRef = 4D5F0CA8D1273144681A1D48; + }; + 6ECB2F11D2F593FACCCF99DB = { + isa = PBXBuildFile; + fileRef = 0F8C000E5FF4A2DAC1FEF8EB; + }; + 95F56FB44C669F93AE77E465 = { + isa = PBXBuildFile; + fileRef = 0CECD562059DFD7FBFB37E3C; + }; + 518DD443B6F17A5AFD707263 = { + isa = PBXBuildFile; + fileRef = A69024A225F2AC31F17B1314; + }; + B7EBA1A83575F48CD08140B9 = { + isa = PBXBuildFile; + fileRef = 4B083E951ECB62217C46CB01; + }; + 3C5267E06A897B0DC0F7EA50 = { + isa = PBXBuildFile; + fileRef = 472F9A90F685220D730EBF6C; + }; + 202DC8CF15ACBE096CC327EA = { + isa = PBXBuildFile; + fileRef = 805A3A5FBA3B9E28363DD77B; + }; + 5DD883699B85E4C492CAD065 = { + isa = PBXBuildFile; + fileRef = DB9C8E35DF815B803CB4A9CF; + }; + D5C9125F65493CA481F18E53 = { + isa = PBXBuildFile; + fileRef = D766BB9D8C32B5560F0493F3; + }; + 02E8F35A8E0D4A0DF6F38D60 = { + isa = PBXBuildFile; + fileRef = 1DE5BBC777FB64798D823002; + }; + 234B6BA2952CBC7C61EF70EF = { + isa = PBXBuildFile; + fileRef = 5867DC4E39DF8539B54C0D59; + }; + 254A7C08594A152C2C646334 = { + isa = PBXBuildFile; + fileRef = 1B9B5A37F079FE3B3CF8FAB6; + }; + F15F0512666FF8CDC0D08905 = { + isa = PBXBuildFile; + fileRef = 0462692BAA9CD1BE6DFBCC33; + }; + B18248959DDC44EF4E85320A = { + isa = PBXBuildFile; + fileRef = AECE3914F5119A3D586A5635; + }; + 00515BA4EC5A7D4DC078ED37 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ValueSourceHelpers.h"; + path = "../../Source/Utility/Helpers/jucer_ValueSourceHelpers.h"; + sourceTree = "SOURCE_ROOT"; + }; + 00841B7EDDE9C19890F03267 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JucerTreeViewBase.h"; + path = "../../Source/Utility/UI/jucer_JucerTreeViewBase.h"; + sourceTree = "SOURCE_ROOT"; + }; + 00E6B87A43453B51850550E1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentOverlayComponent.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 016A6C52B0B93DE29197FF64 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AnimatedComponentTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 01A37DF94E98D991FEF43628 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ButtonHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ButtonHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 023B92AC0340305762412E90 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_OpenGLComponentTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 0400CB0E056A1D840304D2DE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_CommandLine.cpp"; + path = "../../Source/Application/jucer_CommandLine.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 044478BB994878E35D30154A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_XcodeProjectParser.h"; + path = "../../Source/ProjectSaving/jucer_XcodeProjectParser.h"; + sourceTree = "SOURCE_ROOT"; + }; + 0462692BAA9CD1BE6DFBCC33 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_basics.mm"; + path = "../../JuceLibraryCode/include_juce_gui_basics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 0543E83BF7D7D9234C396E82 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentUndoableAction.h"; + path = "../../Source/ComponentEditor/Components/jucer_ComponentUndoableAction.h"; + sourceTree = "SOURCE_ROOT"; + }; + 055636565C2F512E40114582 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ViewportHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ViewportHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 05D67B5A8D64947C067C0945 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_GUIApp.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_GUIApp.h"; + sourceTree = "SOURCE_ROOT"; + }; + 0640E34282A97BF73CC8F1EB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentListComponent.h"; + path = "../../Source/LiveBuildEngine/UI/jucer_ComponentListComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 079802C6AEE7646010766FE8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AudioPluginFilterTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 087CB3A961CD3C7434D660A4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewProjectWizard.h"; + path = "../../Source/Wizards/jucer_NewProjectWizard.h"; + sourceTree = "SOURCE_ROOT"; + }; + 09DE066936CF037E9709ADB1 = { + isa = PBXFileReference; + explicitFileType = wrapper.application; + includeInIndex = 0; + path = Projucer.app; + sourceTree = "BUILT_PRODUCTS_DIR"; + }; + 0AE75B0ACD368A4C0FBC2CD0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TabbedComponentHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 0B24F292A357ABFD9BCC6D7F = { + isa = PBXFileReference; + lastKnownFileType = file; + name = gradlew; + path = ../../Source/BinaryData/gradle/gradlew; + sourceTree = "SOURCE_ROOT"; + }; + 0CECD562059DFD7FBFB37E3C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_SlidingPanelComponent.cpp"; + path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 0D4D508C638BC74943B9976D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AutoUpdater.cpp"; + path = "../../Source/Application/jucer_AutoUpdater.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 0EE17BE4154CF1B2EE683894 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ResourceEditorPanel.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 0F01067432AC314EAC213C1C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_Blank.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_Blank.h"; + sourceTree = "SOURCE_ROOT"; + }; + 0F8C000E5FF4A2DAC1FEF8EB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ProjucerLookAndFeel.cpp"; + path = "../../Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 11DC04468BC6023671017EBF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewFileWizard.h"; + path = "../../Source/Wizards/jucer_NewFileWizard.h"; + sourceTree = "SOURCE_ROOT"; + }; + 11DEED05110D3D1D02FCFFB6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentTypeHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ComponentTypeHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 124232706D1C8A3CA49E70CD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PIPCreatorWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_PIPCreatorWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 129F2DE0FEF154F8F8C7A74E = { + isa = PBXFileReference; + lastKnownFileType = file.jar; + name = "gradle-wrapper.jar"; + path = "../../Source/BinaryData/gradle/gradle-wrapper.jar"; + sourceTree = "SOURCE_ROOT"; + }; + 133F1E428260C5ADDF496DF9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentLayout.cpp"; + path = "../../Source/ComponentEditor/jucer_ComponentLayout.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 159DE1FEE2099398983CDDF0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ErrorList.h"; + path = "../../Source/LiveBuildEngine/jucer_ErrorList.h"; + sourceTree = "SOURCE_ROOT"; + }; + 16751E04B0F3737BDF52CEB4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_HeaderComponent.h"; + path = "../../Source/Project/UI/jucer_HeaderComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 169DD91232C070C4D6470B31 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_IconButton.h"; + path = "../../Source/Utility/UI/jucer_IconButton.h"; + sourceTree = "SOURCE_ROOT"; + }; + 182CB1F96890620A202C6524 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SourceCodeRange.h"; + path = "../../Source/LiveBuildEngine/jucer_SourceCodeRange.h"; + sourceTree = "SOURCE_ROOT"; + }; + 191330B20DAC08B890656EA0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PIPGenerator.cpp"; + path = "../../Source/Utility/PIPs/jucer_PIPGenerator.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 194457D806A26E793584AC0C = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "huckleberry_icon.svg"; + path = "../../Source/BinaryData/Icons/huckleberry_icon.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 1B0F18E1D96F727C062B05FA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ProjectContentComponent.cpp"; + path = "../../Source/Project/UI/jucer_ProjectContentComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 1B5BCD4899A9E295786EB642 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_OpenDocumentManager.h"; + path = "../../Source/CodeEditor/jucer_OpenDocumentManager.h"; + sourceTree = "SOURCE_ROOT"; + }; + 1B9B5A37F079FE3B3CF8FAB6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_graphics.mm"; + path = "../../JuceLibraryCode/include_juce_graphics.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 1C80C7672975C1FF9AAC4A4F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectTab.h"; + path = "../../Source/Project/UI/Sidebar/jucer_ProjectTab.h"; + sourceTree = "SOURCE_ROOT"; + }; + 1DCA18E935A35D29D2D9B6A0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentDocument.cpp"; + path = "../../Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 1DE5BBC777FB64798D823002 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_data_structures.mm"; + path = "../../JuceLibraryCode/include_juce_data_structures.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 20075A86A4D0E8A5B973D9DB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_Xcode.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_Xcode.h"; + sourceTree = "SOURCE_ROOT"; + }; + 203FA6AD7EDDF1F9C338CC2A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AudioComponentTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 2072D6BAE744B53B6FBBDDD8 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_AudioPlugin.svg"; + path = "../../Source/BinaryData/Icons/wizard_AudioPlugin.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 210CD22F25F2C22F9CEEB025 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AVFoundation.framework; + path = System/Library/Frameworks/AVFoundation.framework; + sourceTree = SDKROOT; + }; + 21F4833C5B5C17B159B956F3 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_events"; + path = "../../../../modules/juce_events"; + sourceTree = "SOURCE_ROOT"; + }; + 23A8DE16C0CDB8EED18B008B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CommandIDs.h"; + path = "../../Source/Application/jucer_CommandIDs.h"; + sourceTree = "SOURCE_ROOT"; + }; + 23D79A22569BEDF63B57DD36 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CodeHelpers.h"; + path = "../../Source/Utility/Helpers/jucer_CodeHelpers.h"; + sourceTree = "SOURCE_ROOT"; + }; + 245C81599FB53865A74FC65B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ActivityList.h"; + path = "../../Source/LiveBuildEngine/jucer_ActivityList.h"; + sourceTree = "SOURCE_ROOT"; + }; + 24EB4C2412821B8019D6F754 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_TestComponent.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_TestComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 25BE1265FE6C6EA3473A3A0A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ResourceFile.h"; + path = "../../Source/ProjectSaving/jucer_ResourceFile.h"; + sourceTree = "SOURCE_ROOT"; + }; + 269A454F1FF081DA67FFD578 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_JucerDocument.cpp"; + path = "../../Source/ComponentEditor/jucer_JucerDocument.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 28D0199327887FFABF9C3F20 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_UserSettingsPopup.h"; + path = "../../Source/Utility/UI/jucer_UserSettingsPopup.h"; + sourceTree = "SOURCE_ROOT"; + }; + 2BD9B4556479A8A41740BCAE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_ComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 2CD34A70B4032C0426F7AA10 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_MainWindow.h"; + path = "../../Source/Application/jucer_MainWindow.h"; + sourceTree = "SOURCE_ROOT"; + }; + 2DF5A61F3C497537634773DF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ActivityListComponent.h"; + path = "../../Source/LiveBuildEngine/UI/jucer_ActivityListComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 2EEB1C074162F363C6599282 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CommandLine.h"; + path = "../../Source/Application/jucer_CommandLine.h"; + sourceTree = "SOURCE_ROOT"; + }; + 2F373F97E30AC1A0BFC1FC61 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FilePropertyComponent.h"; + path = "../../Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 308084CBEE9F7D405D72A5E1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CompileEngineClient.h"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineClient.h"; + sourceTree = "SOURCE_ROOT"; + }; + 32C4B61AD995877956B7FA66 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_InlineComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_InlineComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 32ECBC08D903418CA0825870 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ContentViewComponents.h"; + path = "../../Source/Project/UI/jucer_ContentViewComponents.h"; + sourceTree = "SOURCE_ROOT"; + }; + 332AF94C3275FEA8B878D603 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_SourceCodeEditor.cpp"; + path = "../../Source/CodeEditor/jucer_SourceCodeEditor.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 33B258726F29360D64FD1451 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JucerComponentHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_JucerComponentHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 351AF80A004D766E314AB76D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_JucerDocumentEditor.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 355379844A5E6A097038C280 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementRectangle.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementRectangle.h"; + sourceTree = "SOURCE_ROOT"; + }; + 35CAE8930F2885F9322D22D5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ItemPreviewComponent.h"; + path = "../../Source/CodeEditor/jucer_ItemPreviewComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 35CFCC15CBA46F4513940A2A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TextButtonHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_TextButtonHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 364D1A9B113320407A7E57B9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = JuceHeader.h; + path = ../../JuceLibraryCode/JuceHeader.h; + sourceTree = "SOURCE_ROOT"; + }; + 36E5FBF64A89D5F2A266A5A7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementUndoableAction.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementUndoableAction.h"; + sourceTree = "SOURCE_ROOT"; + }; + 39597BD78897CB711AFA945A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_EditingPanelBase.h"; + path = "../../Source/ComponentEditor/UI/jucer_EditingPanelBase.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3BBFA655E129C2D817EA47C9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ErrorListComponent.h"; + path = "../../Source/LiveBuildEngine/UI/jucer_ErrorListComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3C95FA2AA91EBA19ADDD5C29 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_Animated.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_Animated.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3D36F0CEB84B27BD02FC461A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LabelPropertyComponent.h"; + path = "../../Source/Utility/UI/PropertyComponents/jucer_LabelPropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3D6FD9C0065BF16568EC0AB7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SlidingPanelComponent.h"; + path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3DC2ED15A9DFAAEF3D2ACDDF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PIPMain.cpp"; + path = "../../Source/BinaryData/Templates/jucer_PIPMain.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 3EA27F52A254912218F4DE94 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectBuildInfo.h"; + path = "../../Source/LiveBuildEngine/jucer_ProjectBuildInfo.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3F7C5B53347A487C7FBD2223 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_OpenGLComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3F8EC008960DBEB2A5D3C3F4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Headers.h"; + path = "../../Source/Application/jucer_Headers.h"; + sourceTree = "SOURCE_ROOT"; + }; + 3F9D4C7F6E5779D4E4AE655D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentLayout.h"; + path = "../../Source/ComponentEditor/jucer_ComponentLayout.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4073A12E196BDDADE211E19F = { + isa = PBXFileReference; + lastKnownFileType = text.txt; + name = "projucer_EULA.txt"; + path = "../../Source/BinaryData/projucer_EULA.txt"; + sourceTree = "SOURCE_ROOT"; + }; + 409C636B96A9AC1D732B96F8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComboBoxHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ComboBoxHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 41105E536155E394E54BDD35 = { + isa = PBXFileReference; + lastKnownFileType = file.xml; + name = "colourscheme_dark.xml"; + path = "../../Source/BinaryData/colourscheme_dark.xml"; + sourceTree = "SOURCE_ROOT"; + }; + 42F4AA3EF0883D506987CA99 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_codeBlocks.svg"; + path = "../../Source/BinaryData/Icons/export_codeBlocks.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 431D30038CBF67F80E8B3A13 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = OpenGL.framework; + path = System/Library/Frameworks/OpenGL.framework; + sourceTree = SDKROOT; + }; + 432EC251A122071809471804 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "juce-logo-with-text.svg"; + path = "../../Source/BinaryData/Icons/juce-logo-with-text.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 471C7B0A8B92320AF0C80839 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_StaticLibrary.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_StaticLibrary.h"; + sourceTree = "SOURCE_ROOT"; + }; + 472F9A90F685220D730EBF6C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = BinaryData.cpp; + path = ../../JuceLibraryCode/BinaryData.cpp; + sourceTree = "SOURCE_ROOT"; + }; + 4818A05DE44ADA03D85E1083 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjucerAnalytics.h"; + path = "../../Source/Application/jucer_ProjucerAnalytics.h"; + sourceTree = "SOURCE_ROOT"; + }; + 486E8D02DAD2A0BF54A901C0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MiscUtilities.cpp"; + path = "../../Source/Utility/Helpers/jucer_MiscUtilities.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4974E7808F9B57E9A627F878 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FileTreeItems.h"; + path = "../../Source/Project/UI/Sidebar/jucer_FileTreeItems.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4A4EBDAD8D098F72CE053235 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_AudioPlugin.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_AudioPlugin.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4AE469CD40BDAD634135785E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElement.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElement.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4AE72953E3B3DF06D3B9BA86 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintElementPath.cpp"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4B083E951ECB62217C46CB01 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_NewProjectWizardClasses.cpp"; + path = "../../Source/Wizards/jucer_NewProjectWizardClasses.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4D5F0CA8D1273144681A1D48 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_JucerTreeViewBase.cpp"; + path = "../../Source/Utility/UI/jucer_JucerTreeViewBase.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 4D698BF12BCD6B0896BCDF17 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AutoUpdater.h"; + path = "../../Source/Application/jucer_AutoUpdater.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4E671236FDBD5AD4699740C6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JucerCommandIDs.h"; + path = "../../Source/ComponentEditor/UI/jucer_JucerCommandIDs.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4ECF029E3A69BF42FED1503D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PIPAudioProcessorTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 4F687965FBE86EAFDB3ACFEC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = BinaryData.h; + path = ../../JuceLibraryCode/BinaryData.h; + sourceTree = "SOURCE_ROOT"; + }; + 4FF81FC167C924C47BD8C1C9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ProjectSaver.cpp"; + path = "../../Source/ProjectSaving/jucer_ProjectSaver.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 50498FF6EA3901CBD58223B3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ObjectTypes.h"; + path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; + sourceTree = "SOURCE_ROOT"; + }; + 512D80BE12634967A085A1DC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintElement.cpp"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElement.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 514F2FAFDBF535AC03FA2E6C = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "background_logo.svg"; + path = "../../Source/BinaryData/Icons/background_logo.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 516D6D7C564DD5DF5C15CB06 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_HeaderComponent.cpp"; + path = "../../Source/Project/UI/jucer_HeaderComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 51BC758EF5D33197CF543E67 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_DocumentEditorComponent.h"; + path = "../../Source/CodeEditor/jucer_DocumentEditorComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 51CBE59779A36D1B80B26974 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_LicenseController.cpp"; + path = "../../Source/Licenses/jucer_LicenseController.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 5432B7B9B2CF2EAEC8B66D5C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_UtilityFunctions.h"; + path = "../../Source/ComponentEditor/jucer_UtilityFunctions.h"; + sourceTree = "SOURCE_ROOT"; + }; + 5524B5C9FC6AEAA670B92AA9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentLayoutEditor.h"; + path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h"; + sourceTree = "SOURCE_ROOT"; + }; + 55DEDCEB35AA1FB54C74B375 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_MessageIDs.h"; + path = "../../Source/LiveBuildEngine/jucer_MessageIDs.h"; + sourceTree = "SOURCE_ROOT"; + }; + 56177921580A4855917E0205 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AudioPluginEditorTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 56749E4C72A8F51ACA8F2330 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_clion.svg"; + path = "../../Source/BinaryData/Icons/export_clion.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 576A92E1E0D8F453EC0FEB34 = { + isa = PBXFileReference; + lastKnownFileType = file.bat; + name = gradlew.bat; + path = ../../Source/BinaryData/gradle/gradlew.bat; + sourceTree = "SOURCE_ROOT"; + }; + 5783563E39E48ADFC68EB84A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentTextProperty.h"; + path = "../../Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + 58139D8D454051C59E77609B = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 5867DC4E39DF8539B54C0D59 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_events.mm"; + path = "../../JuceLibraryCode/include_juce_events.mm"; + sourceTree = "SOURCE_ROOT"; + }; + 58DE91CE6B05AFBACADDB251 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_analytics"; + path = "../../../../modules/juce_analytics"; + sourceTree = "SOURCE_ROOT"; + }; + 58F1FF52E887887A93E84FC2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PresetIDs.h"; + path = "../../Source/Utility/Helpers/jucer_PresetIDs.h"; + sourceTree = "SOURCE_ROOT"; + }; + 59203884BC48D3B7F8DEABA8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ContentCompTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_ContentCompTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 59520B8137E6A2E483074399 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_Make.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_Make.h"; + sourceTree = "SOURCE_ROOT"; + }; + 59B08C7B13B8EA5137ACA77A = { + isa = PBXFileReference; + lastKnownFileType = text.txt; + name = nothingtoseehere.txt; + path = ../../Source/BinaryData/nothingtoseehere.txt; + sourceTree = "SOURCE_ROOT"; + }; + 59F8A47C0020D62C8836A1E7 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PropertyComponentsWithEnablement.h"; + path = "../../Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h"; + sourceTree = "SOURCE_ROOT"; + }; + 5A75806B34E4EA6598A6024A = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioToolbox.framework; + path = System/Library/Frameworks/AudioToolbox.framework; + sourceTree = SDKROOT; + }; + 5B3532C5F103DAC87B4A5675 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_GUI.svg"; + path = "../../Source/BinaryData/Icons/wizard_GUI.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 5BF0374EB908F0476BD8ED42 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AudioComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AudioComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 5E4EB84A7983AB31366A3490 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ModuleTreeItems.h"; + path = "../../Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h"; + sourceTree = "SOURCE_ROOT"; + }; + 5F6584B675E30761521A9F42 = { + isa = PBXFileReference; + lastKnownFileType = file.xml; + name = "colourscheme_light.xml"; + path = "../../Source/BinaryData/colourscheme_light.xml"; + sourceTree = "SOURCE_ROOT"; + }; + 62922B3C0620368D1799A653 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_OpenGL.svg"; + path = "../../Source/BinaryData/Icons/wizard_OpenGL.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 630DC5EAA31D3EE60B2D989F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_GenericComponentHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_GenericComponentHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 6574A50A8997799705B23465 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AudioPluginEditorTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 65FAD7F6DF65A72B741C2913 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintRoutinePanel.h"; + path = "../../Source/ComponentEditor/UI/jucer_PaintRoutinePanel.h"; + sourceTree = "SOURCE_ROOT"; + }; + 6678E9B3EEACAD47F438B264 = { + isa = PBXFileReference; + lastKnownFileType = file.nib; + name = RecentFilesMenuTemplate.nib; + path = RecentFilesMenuTemplate.nib; + sourceTree = "SOURCE_ROOT"; + }; + 66B49F08C5EC3E4974825FF8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintRoutine.h"; + path = "../../Source/ComponentEditor/jucer_PaintRoutine.h"; + sourceTree = "SOURCE_ROOT"; + }; + 68C1949F56295D5871C1F223 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LiveBuildTab.h"; + path = "../../Source/Project/UI/Sidebar/jucer_LiveBuildTab.h"; + sourceTree = "SOURCE_ROOT"; + }; + 68F41A216E7454E7442AB1F4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TreeItemTypes.h"; + path = "../../Source/Project/UI/Sidebar/jucer_TreeItemTypes.h"; + sourceTree = "SOURCE_ROOT"; + }; + 69555CEFC6ED613AA3949298 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_data_structures"; + path = "../../../../modules/juce_data_structures"; + sourceTree = "SOURCE_ROOT"; + }; + 69B478C992FA0B8C885946A6 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_linux.svg"; + path = "../../Source/BinaryData/Icons/export_linux.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 6AC88EFC247C225CC5C11A43 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_BinaryResources.h"; + path = "../../Source/ComponentEditor/jucer_BinaryResources.h"; + sourceTree = "SOURCE_ROOT"; + }; + 6E6140969908E7619F858740 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CommonHeaders.h"; + path = "../../Source/Application/jucer_CommonHeaders.h"; + sourceTree = "SOURCE_ROOT"; + }; + 6E70C1FA80F02D4C310F63AA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintRoutineEditor.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 6F02C3B7FEA3B50692A70DE5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_EditingPanelBase.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_EditingPanelBase.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 6FD8DBC0FF42C87D8BEE2452 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TranslationHelpers.h"; + path = "../../Source/Utility/Helpers/jucer_TranslationHelpers.h"; + sourceTree = "SOURCE_ROOT"; + }; + 7031E8CB6D4D84BD980A0BD0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementImage.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementImage.h"; + sourceTree = "SOURCE_ROOT"; + }; + 705DE88C5C4CC6C871E951B1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_GroupComponentHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_GroupComponentHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 714267352CE5C4357ADBC231 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_StartPageComponent.h"; + path = "../../Source/Wizards/jucer_StartPageComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 719B56C8587863D7AE9B69C6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_RelativePositionedRectangle.h"; + path = "../../Source/ComponentEditor/UI/jucer_RelativePositionedRectangle.h"; + sourceTree = "SOURCE_ROOT"; + }; + 7211101FFA28400ADBB1D47A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Module.h"; + path = "../../Source/Project/jucer_Module.h"; + sourceTree = "SOURCE_ROOT"; + }; + 728FE25157E9874D50BBECB2 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudio.framework; + path = System/Library/Frameworks/CoreAudio.framework; + sourceTree = SDKROOT; + }; + 72ED72174F9DBD0ABD8AFCED = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintElementImage.cpp"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementImage.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 73DE14CEAD25D3445457013E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SliderHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_SliderHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 75BE2887C6F324B818D80A21 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SnapGridPainter.h"; + path = "../../Source/ComponentEditor/UI/jucer_SnapGridPainter.h"; + sourceTree = "SOURCE_ROOT"; + }; + 763A63E75AC802F17D11FE8B = { + isa = PBXFileReference; + lastKnownFileType = file.cs; + name = "jucer_UnityPluginGUIScript.cs"; + path = "../../Source/BinaryData/Templates/jucer_UnityPluginGUIScript.cs"; + sourceTree = "SOURCE_ROOT"; + }; + 7687A1374C60A025BDBE98DE = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PointComponent.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PointComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 77EA01E7D04BF889930BFF54 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementRoundedRectangle.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h"; + sourceTree = "SOURCE_ROOT"; + }; + 78D0DBC4798FF040FDB90F6D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_GeneratedCode.cpp"; + path = "../../Source/ComponentEditor/jucer_GeneratedCode.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 790F6302B9A0620F23F8A6C1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LicenseThread.h"; + path = "../../Source/Licenses/jucer_LicenseThread.h"; + sourceTree = "SOURCE_ROOT"; + }; + 7AB7640968FAAC73072FBD10 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_basics"; + path = "../../../../modules/juce_gui_basics"; + sourceTree = "SOURCE_ROOT"; + }; + 7B3F7ECF6DBF8C8EE5C2CB86 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = AudioUnit.framework; + path = System/Library/Frameworks/AudioUnit.framework; + sourceTree = SDKROOT; + }; + 7CA44FF0BA319517C6E39651 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_Application.cpp"; + path = "../../Source/Application/jucer_Application.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 7E2013F425E231C6D865DDD0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentChoiceProperty.h"; + path = "../../Source/ComponentEditor/Properties/jucer_ComponentChoiceProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + 7F0A5319912991615FC57945 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ColourPropertyComponent.h"; + path = "../../Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 805A3A5FBA3B9E28363DD77B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "include_juce_analytics.cpp"; + path = "../../JuceLibraryCode/include_juce_analytics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 807049CA2D5B6DE18EA078F2 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_android.svg"; + path = "../../Source/BinaryData/Icons/export_android.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 80D62B907248523E6943298B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Accelerate.framework; + path = System/Library/Frameworks/Accelerate.framework; + sourceTree = SDKROOT; + }; + 8336A43CE1C3C26D7C7B53D8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_NewComponentTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 842427CFE565F3FCE5B99174 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = DiscRecording.framework; + path = System/Library/Frameworks/DiscRecording.framework; + sourceTree = SDKROOT; + }; + 846B2A670C5A19DE0039E11A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_Icons.cpp"; + path = "../../Source/Utility/UI/jucer_Icons.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 85A5E3E71BED93B9A3E07681 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PositionPropertyBase.h"; + path = "../../Source/ComponentEditor/Properties/jucer_PositionPropertyBase.h"; + sourceTree = "SOURCE_ROOT"; + }; + 861E52D9AFECADF079BB1F2C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ExporterTreeItems.h"; + path = "../../Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h"; + sourceTree = "SOURCE_ROOT"; + }; + 868B459E02F0877EBE3D56F1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TextEditorHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_TextEditorHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8702F43110E4CCA5E5F827F5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = AppConfig.h; + path = ../../JuceLibraryCode/AppConfig.h; + sourceTree = "SOURCE_ROOT"; + }; + 8A82061A978B03745485C3AC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LiveBuildCodeEditor.h"; + path = "../../Source/CodeEditor/jucer_LiveBuildCodeEditor.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8A825FDDC00DD253F44D2C3A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_AudioApp.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_AudioApp.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8BD8E9DA627D6EF9BA10FB9E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewProjectWizardComponent.h"; + path = "../../Source/Wizards/jucer_NewProjectWizardComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8C281F2F8EA3AD614ADF7955 = { + isa = PBXFileReference; + lastKnownFileType = text.html; + name = offlinepage.html; + path = ../../Source/BinaryData/offlinepage.html; + sourceTree = "SOURCE_ROOT"; + }; + 8C52A3DDA62A746AA7A68535 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_Main.cpp"; + path = "../../Source/Application/jucer_Main.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 8D178CAEE6D89DE33233313F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ElementSiblingComponent.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8D9A9A373E4621F7CBFCCCEF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ContentCompTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 8DBB36126CD144A8364F1F19 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExporter.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExporter.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8DFE6D8AFB8057790041300B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ToggleButtonHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ToggleButtonHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8F30A53C7FE4BC65171FB3E2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JucerDocument.h"; + path = "../../Source/ComponentEditor/jucer_JucerDocument.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8F4D281E98808204E2846A7D = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_xcode.svg"; + path = "../../Source/BinaryData/Icons/export_xcode.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 8F67F3C0492EAFEBDBBC12DB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_NewCppFileTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 8F685EFEFD6EE399058DE842 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_DownloadCompileEngineThread.h"; + path = "../../Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.h"; + sourceTree = "SOURCE_ROOT"; + }; + 8F731F1F98BAB42F1C3B96AA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentTypeHandler.cpp"; + path = "../../Source/ComponentEditor/Components/jucer_ComponentTypeHandler.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 8F7BE18698ADCEF51CDE4A5C = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreMIDI.framework; + path = System/Library/Frameworks/CoreMIDI.framework; + sourceTree = SDKROOT; + }; + 8FEF6F5EA676B824C021EB6F = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_AnimatedApp.svg"; + path = "../../Source/BinaryData/Icons/wizard_AnimatedApp.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 8FF26BF72A522FBEAAFDDF54 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_AudioApp.svg"; + path = "../../Source/BinaryData/Icons/wizard_AudioApp.svg"; + sourceTree = "SOURCE_ROOT"; + }; + 9069981E414A631B036CC9AC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MainWindow.cpp"; + path = "../../Source/Application/jucer_MainWindow.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 92926A4D3CC4BB2A9D35EB0B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_UTF8WindowComponent.h"; + path = "../../Source/Application/Windows/jucer_UTF8WindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 92A66A8BD87F98EB6B4FB6D0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectContentComponent.h"; + path = "../../Source/Project/UI/jucer_ProjectContentComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 951128CA33CCDEF570436B1C = { + isa = PBXFileReference; + lastKnownFileType = file.icns; + name = Icon.icns; + path = Icon.icns; + sourceTree = "SOURCE_ROOT"; + }; + 95EAB6EC9B724538B93910D4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TabComponents.h"; + path = "../../Source/Project/UI/Sidebar/jucer_TabComponents.h"; + sourceTree = "SOURCE_ROOT"; + }; + 97A847B59EE04483E8850E4B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MainTemplate_SimpleWindow.cpp"; + path = "../../Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 983CFBA01CA8811F30FA7F4C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_MiscUtilities.h"; + path = "../../Source/Utility/Helpers/jucer_MiscUtilities.h"; + sourceTree = "SOURCE_ROOT"; + }; + 988F5C1E40DED02D8B064253 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintElementGroup.cpp"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 98E6D61BFF7D85F0E00F0FBF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LicenseWebview.h"; + path = "../../Source/Licenses/jucer_LicenseWebview.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9914F905BFCFBE5F76619670 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ColouredElement.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_ColouredElement.h"; + sourceTree = "SOURCE_ROOT"; + }; + 996E472B82A75531875A5E38 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = LICENSE; + path = ../../Source/BinaryData/gradle/LICENSE; + sourceTree = "SOURCE_ROOT"; + }; + 9992E6950C64322A11E39ADF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_DLL.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_DLL.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9A3B8BBDA8E144A3DF6B9349 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AnimatedComponentSimpleTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9B6FD3FEDB6D91AD0A80EF97 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ImageResourceProperty.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_ImageResourceProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9BDF2D6255C1CB2CFF376186 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentOverlayComponent.h"; + path = "../../Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9D7689451732AF8333402B3A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ObjectTypes.cpp"; + path = "../../Source/ComponentEditor/jucer_ObjectTypes.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 9E0BA495286388EBF929D578 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ContentCompSimpleTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9E2B1506AC3FDB7863766D59 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewInlineComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9E62EC342665C27BA01AFC1A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentNameProperty.h"; + path = "../../Source/ComponentEditor/Components/jucer_ComponentNameProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9EB33734D0DBD0370AB1247B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ColourPropertyComponent.h"; + path = "../../Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9EE3141E20C9CE3EA182FA04 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectSaver.h"; + path = "../../Source/ProjectSaving/jucer_ProjectSaver.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9EF583A6201DBC813C2F63C4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_BinaryResources.cpp"; + path = "../../Source/ComponentEditor/jucer_BinaryResources.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + 9F01BA9942D038EA8B5289A8 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QTKit.framework; + path = System/Library/Frameworks/QTKit.framework; + sourceTree = SDKROOT; + }; + 9F2D3E5FC10F7C3270908E97 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ButtonDocument.h"; + path = "../../Source/ComponentEditor/Documents/jucer_ButtonDocument.h"; + sourceTree = "SOURCE_ROOT"; + }; + 9F959ECF8CD9B7314AE604A9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LabelHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_LabelHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + A081306A9E95CA114B81910F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CompileEngineSettings.h"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineSettings.h"; + sourceTree = "SOURCE_ROOT"; + }; + A085174413736ACC8D7D42A2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_openGL.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_openGL.h"; + sourceTree = "SOURCE_ROOT"; + }; + A0BBBFBA13A1308B3CD725D5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentLayoutPanel.h"; + path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h"; + sourceTree = "SOURCE_ROOT"; + }; + A160AEF56553A658E6EA6A8E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MainTemplate_Window.cpp"; + path = "../../Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + A22F64D1E4BD4B8FA366DAAD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TreeViewHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_TreeViewHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + A44A774EFC020D3D046A9249 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectWizard_Console.h"; + path = "../../Source/Wizards/jucer_ProjectWizard_Console.h"; + sourceTree = "SOURCE_ROOT"; + }; + A49503B646A7BD2BEEFC5CBD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_HyperlinkButtonHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_HyperlinkButtonHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + A509BC22854D50E4C786EB32 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FileGroupInformationComponent.h"; + path = "../../Source/Project/UI/jucer_FileGroupInformationComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + A66F17E7472E5C19AFE98E46 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MainConsoleAppTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + A69024A225F2AC31F17B1314 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_NewFileWizard.cpp"; + path = "../../Source/Wizards/jucer_NewFileWizard.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + A6C4AE13FB409DE414094CFA = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_RelativePath.h"; + path = "../../Source/Utility/Helpers/jucer_RelativePath.h"; + sourceTree = "SOURCE_ROOT"; + }; + A978DFE87D9BB5EFE5B3DAAC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CompileEngineDLL.h"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineDLL.h"; + sourceTree = "SOURCE_ROOT"; + }; + A9954DC7F876A7006743ACB6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_DiagnosticMessage.h"; + path = "../../Source/LiveBuildEngine/jucer_DiagnosticMessage.h"; + sourceTree = "SOURCE_ROOT"; + }; + AA1C44E89D792DDC4867B2C8 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_cryptography"; + path = "../../../../modules/juce_cryptography"; + sourceTree = "SOURCE_ROOT"; + }; + ADA538034910F52FDD2DC88D = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_DownloadCompileEngineThread.cpp"; + path = "../../Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + ADD6A3CF5D7DE55E57E8E38B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CppHelpers.h"; + path = "../../Source/LiveBuildEngine/jucer_CppHelpers.h"; + sourceTree = "SOURCE_ROOT"; + }; + AECE3914F5119A3D586A5635 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_gui_extra.mm"; + path = "../../JuceLibraryCode/include_juce_gui_extra.mm"; + sourceTree = "SOURCE_ROOT"; + }; + AEFE3BA0C31EC78A5767A10E = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_DLL.svg"; + path = "../../Source/BinaryData/Icons/wizard_DLL.svg"; + sourceTree = "SOURCE_ROOT"; + }; + B1C2F8ED14BF914CD1882708 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_Openfile.svg"; + path = "../../Source/BinaryData/Icons/wizard_Openfile.svg"; + sourceTree = "SOURCE_ROOT"; + }; + B24E3F34C3C4EE54A60C35CC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LiveCodeBuilderDLL.h"; + path = "../../Source/LiveBuildEngine/jucer_LiveCodeBuilderDLL.h"; + sourceTree = "SOURCE_ROOT"; + }; + B2CB95B3F44C3CC5735051A3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JustificationProperty.h"; + path = "../../Source/ComponentEditor/Properties/jucer_JustificationProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + B3528C08B84CBC950252EA69 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ModulesInformationComponent.h"; + path = "../../Source/Project/UI/jucer_ModulesInformationComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + B403AF75EAF361ED74EE476E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_FileHelpers.cpp"; + path = "../../Source/Utility/Helpers/jucer_FileHelpers.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + B6496F16ACE80CACC5721570 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ProjucerAnalytics.cpp"; + path = "../../Source/Application/jucer_ProjucerAnalytics.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + B6F2905330EA5C560D527209 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_graphics"; + path = "../../../../modules/juce_graphics"; + sourceTree = "SOURCE_ROOT"; + }; + B8385E9A644BD3CD94876448 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectType.h"; + path = "../../Source/Project/jucer_ProjectType.h"; + sourceTree = "SOURCE_ROOT"; + }; + B83C9BD89F31EA9E5E12A3C6 = { + isa = PBXFileReference; + lastKnownFileType = image.png; + name = "juce_icon.png"; + path = "../../Source/BinaryData/Icons/juce_icon.png"; + sourceTree = "SOURCE_ROOT"; + }; + B83DAADA1A871F21582FFB23 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ApplicationUsageDataWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + B97D60D2531CFD0D8555BA5C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementText.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementText.h"; + sourceTree = "SOURCE_ROOT"; + }; + B9B130F596953116393138DC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SourceCodeEditor.h"; + path = "../../Source/CodeEditor/jucer_SourceCodeEditor.h"; + sourceTree = "SOURCE_ROOT"; + }; + BA159A3B7D129771F5C15EA3 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_core"; + path = "../../../../modules/juce_core"; + sourceTree = "SOURCE_ROOT"; + }; + BA186B51EE4884CD8E3F2741 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_CompileEngineServer.h"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineServer.h"; + sourceTree = "SOURCE_ROOT"; + }; + BAC43B20E14A340CCF14119C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_Project.cpp"; + path = "../../Source/Project/jucer_Project.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + BB187CD608EB6368B29EC335 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_LicenseController.h"; + path = "../../Source/Licenses/jucer_LicenseController.h"; + sourceTree = "SOURCE_ROOT"; + }; + BC3B310D42C489E8B8D93327 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_DocumentEditorComponent.cpp"; + path = "../../Source/CodeEditor/jucer_DocumentEditorComponent.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + BC623CC67AC58297BF6B4C70 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TestComponent.h"; + path = "../../Source/ComponentEditor/UI/jucer_TestComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + BCB6C87E3992930674E54D16 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementGroup.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.h"; + sourceTree = "SOURCE_ROOT"; + }; + BDF6AFC5F88581AE395F1DC9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ResourceEditorPanel.h"; + path = "../../Source/ComponentEditor/UI/jucer_ResourceEditorPanel.h"; + sourceTree = "SOURCE_ROOT"; + }; + BE618CE21C794BDEE319E328 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_AppearanceSettings.cpp"; + path = "../../Source/Settings/jucer_AppearanceSettings.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + BF301C2E545AEB4AC112C176 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ButtonDocument.cpp"; + path = "../../Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + BF3CEF080FA013E2778DCE90 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Project.h"; + path = "../../Source/Project/jucer_Project.h"; + sourceTree = "SOURCE_ROOT"; + }; + C09BBB58CA45B66D693E8C31 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TemplateThumbnailsComponent.h"; + path = "../../Source/Wizards/jucer_TemplateThumbnailsComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + C187718F7B9EBA88584B43F3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintRoutine.cpp"; + path = "../../Source/ComponentEditor/jucer_PaintRoutine.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + C2990A8D054BC230E7C637C3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewProjectWizardClasses.h"; + path = "../../Source/Wizards/jucer_NewProjectWizardClasses.h"; + sourceTree = "SOURCE_ROOT"; + }; + C3BB9F92B02B06D04A73794C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ProjectExporter.cpp"; + path = "../../Source/ProjectSaving/jucer_ProjectExporter.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + C3E04CD5A93A45154894E624 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Colours.h"; + path = "../../Source/Utility/Helpers/jucer_Colours.h"; + sourceTree = "SOURCE_ROOT"; + }; + C402C21DFAC1F8BF121144F1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FillType.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_FillType.h"; + sourceTree = "SOURCE_ROOT"; + }; + C59E624F099CC785F27429EB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Icons.h"; + path = "../../Source/Utility/UI/jucer_Icons.h"; + sourceTree = "SOURCE_ROOT"; + }; + C607639897ED2538CBB860D0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_OpenGLComponentSimpleTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + C7245390C6C44E89F7526CFC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_NewComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + C736264708F3F68BA745BA29 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FloatingToolWindow.h"; + path = "../../Source/Application/Windows/jucer_FloatingToolWindow.h"; + sourceTree = "SOURCE_ROOT"; + }; + C76271530EB4458B6146D463 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PIPGenerator.h"; + path = "../../Source/Utility/PIPs/jucer_PIPGenerator.h"; + sourceTree = "SOURCE_ROOT"; + }; + CC1C5F8E5DE34223FEC59673 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AudioPluginFilterTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + CCD62DB0A19A985A4B9D7F32 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_Android.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_Android.h"; + sourceTree = "SOURCE_ROOT"; + }; + CCEA34A55813C7C4E58254F5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_BuildTabStatusComponent.h"; + path = "../../Source/LiveBuildEngine/UI/jucer_BuildTabStatusComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + CF6C8BD0DA3D8CD4E99EBADA = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = WebKit.framework; + path = System/Library/Frameworks/WebKit.framework; + sourceTree = SDKROOT; + }; + D00F311BFC3C2625C457CB9B = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Carbon.framework; + path = System/Library/Frameworks/Carbon.framework; + sourceTree = SDKROOT; + }; + D045BD5943BD38F2720FF5F0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FontPropertyComponent.h"; + path = "../../Source/ComponentEditor/Properties/jucer_FontPropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + D05BD91B6105827B010E1C20 = { + isa = PBXFileReference; + lastKnownFileType = file; + name = "juce_gui_extra"; + path = "../../../../modules/juce_gui_extra"; + sourceTree = "SOURCE_ROOT"; + }; + D1739728A79A2062418B8EF0 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_StaticLibrary.svg"; + path = "../../Source/BinaryData/Icons/wizard_StaticLibrary.svg"; + sourceTree = "SOURCE_ROOT"; + }; + D1F9B0E9F5D54FE48BEB46EA = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = Cocoa.framework; + path = System/Library/Frameworks/Cocoa.framework; + sourceTree = SDKROOT; + }; + D251114072E67CA86D9913D6 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ClassDatabase.h"; + path = "../../Source/LiveBuildEngine/jucer_ClassDatabase.h"; + sourceTree = "SOURCE_ROOT"; + }; + D2FE76E4CF003856278343CC = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_CompileEngineServer.cpp"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineServer.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + D4EB334E5186D1584EC63CA4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AudioComponentSimpleTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + D5795F8CAC5876714DAB355F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AnimatedComponentTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + D5EF5961B1F0E3FAED32E30A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_CLion.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_CLion.h"; + sourceTree = "SOURCE_ROOT"; + }; + D6390A40B3279E0E626C78D3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ColouredElement.cpp"; + path = "../../Source/ComponentEditor/PaintElements/jucer_ColouredElement.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + D766BB9D8C32B5560F0493F3 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_cryptography.mm"; + path = "../../JuceLibraryCode/include_juce_cryptography.mm"; + sourceTree = "SOURCE_ROOT"; + }; + D91E7F8FEF9290195D56782C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_EditorColourSchemeWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + D93E2F2468003DD333371F06 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_StrokeType.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_StrokeType.h"; + sourceTree = "SOURCE_ROOT"; + }; + DA345D5B9DABD049F90DC96F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_GeneratedCode.h"; + path = "../../Source/ComponentEditor/jucer_GeneratedCode.h"; + sourceTree = "SOURCE_ROOT"; + }; + DA4D0CC5149F7C0FBDAF34A2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementPath.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementPath.h"; + sourceTree = "SOURCE_ROOT"; + }; + DB9C8E35DF815B803CB4A9CF = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.objcpp; + name = "include_juce_core.mm"; + path = "../../JuceLibraryCode/include_juce_core.mm"; + sourceTree = "SOURCE_ROOT"; + }; + DDC382008FFD9F9E0B2B0EDD = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_SVGPathDataWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_SVGPathDataWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + DE3E6B2614229FAD56D50770 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_CompileEngineClient.cpp"; + path = "../../Source/LiveBuildEngine/jucer_CompileEngineClient.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + DE4A987B2D5529990A6AA9D4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AboutWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_AboutWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + DFBEB8E086832AEB0FBEADF0 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_StoredSettings.h"; + path = "../../Source/Settings/jucer_StoredSettings.h"; + sourceTree = "SOURCE_ROOT"; + }; + E111A336FE13C033EAA0A1D1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_NewCppFileTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_NewCppFileTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + E13A54A6D3A1895EACE53E51 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ResourceFile.cpp"; + path = "../../Source/ProjectSaving/jucer_ResourceFile.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + E1535CDF4258E7D4AB70B5E5 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ClientServerMessages.h"; + path = "../../Source/LiveBuildEngine/jucer_ClientServerMessages.h"; + sourceTree = "SOURCE_ROOT"; + }; + E1577F8617C75B91D7399812 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ImageButtonHandler.h"; + path = "../../Source/ComponentEditor/Components/jucer_ImageButtonHandler.h"; + sourceTree = "SOURCE_ROOT"; + }; + E186BC01A1B1529937A46485 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FileHelpers.h"; + path = "../../Source/Utility/Helpers/jucer_FileHelpers.h"; + sourceTree = "SOURCE_ROOT"; + }; + E266DE67FF319D56F63193A6 = { + isa = PBXFileReference; + lastKnownFileType = text.plist.xml; + name = "Info-App.plist"; + path = "Info-App.plist"; + sourceTree = "SOURCE_ROOT"; + }; + E2B668E2A65AEE8F07B406C8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_AppearanceSettings.h"; + path = "../../Source/Settings/jucer_AppearanceSettings.h"; + sourceTree = "SOURCE_ROOT"; + }; + E367FC2BDAF5EBA48D767FBB = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_FilePathPropertyComponent.h"; + path = "../../Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + E3BADF21095BC23DE2CB454F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectTreeItemBase.h"; + path = "../../Source/Project/UI/Sidebar/jucer_ProjectTreeItemBase.h"; + sourceTree = "SOURCE_ROOT"; + }; + E468FDB5504C5D9315B2D04F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentDocument.h"; + path = "../../Source/ComponentEditor/Documents/jucer_ComponentDocument.h"; + sourceTree = "SOURCE_ROOT"; + }; + E5D6C36496F5BC84D7213BE8 = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = QuartzCore.framework; + path = System/Library/Frameworks/QuartzCore.framework; + sourceTree = SDKROOT; + }; + E67999BF57B139E00207A374 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PIPTemplate.h"; + path = "../../Source/BinaryData/Templates/jucer_PIPTemplate.h"; + sourceTree = "SOURCE_ROOT"; + }; + E96597BBC6A98255B51B94DC = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = IOKit.framework; + path = System/Library/Frameworks/IOKit.framework; + sourceTree = SDKROOT; + }; + E983E6DDE3318B872EBE347F = { + isa = PBXFileReference; + lastKnownFileType = wrapper.framework; + name = CoreAudioKit.framework; + path = System/Library/Frameworks/CoreAudioKit.framework; + sourceTree = SDKROOT; + }; + EAC1731150A7F79D59BAA0B6 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "export_visualStudio.svg"; + path = "../../Source/BinaryData/Icons/export_visualStudio.svg"; + sourceTree = "SOURCE_ROOT"; + }; + EB2E723DC3DB150A8A644D08 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_GlobalPathsWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_GlobalPathsWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + ED5EAC91D8A0A1911BE9F482 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_ConsoleApp.svg"; + path = "../../Source/BinaryData/Icons/wizard_ConsoleApp.svg"; + sourceTree = "SOURCE_ROOT"; + }; + ED69863B3D591FB3F0CA50E4 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintRoutineEditor.h"; + path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h"; + sourceTree = "SOURCE_ROOT"; + }; + EE690110171E1648FF2118B8 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_Application.h"; + path = "../../Source/Application/jucer_Application.h"; + sourceTree = "SOURCE_ROOT"; + }; + EF25A29A2194FC107B40F65F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentLayoutEditor.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + EFF38AE74E7267CCC47E8AD1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_JucerDocumentEditor.h"; + path = "../../Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h"; + sourceTree = "SOURCE_ROOT"; + }; + F073B54B36D845915CD6D2C1 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_PaintElementEllipse.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_PaintElementEllipse.h"; + sourceTree = "SOURCE_ROOT"; + }; + F159C1B99ACF1D91E12D978E = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_MainTemplate_NoWindow.cpp"; + path = "../../Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + F2E4998FB2C7221587A79F8B = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_CodeHelpers.cpp"; + path = "../../Source/Utility/Helpers/jucer_CodeHelpers.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + F3CC8F26ECCDA6DCD8A284D2 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_GradientPointComponent.h"; + path = "../../Source/ComponentEditor/PaintElements/jucer_GradientPointComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + F4FD9BD16ED2700F45A68C4F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentBooleanProperty.h"; + path = "../../Source/ComponentEditor/Properties/jucer_ComponentBooleanProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + F5DD97B45B8EA60C1ED0DD80 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_StoredSettings.cpp"; + path = "../../Source/Settings/jucer_StoredSettings.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + F797071D88542C813CF7222A = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_Module.cpp"; + path = "../../Source/Project/jucer_Module.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + F7C74E934C954F6F1A3BE4F9 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_TranslationToolWindowComponent.h"; + path = "../../Source/Application/Windows/jucer_TranslationToolWindowComponent.h"; + sourceTree = "SOURCE_ROOT"; + }; + F8A38C0C7C45F2DB6A5FB812 = { + isa = PBXFileReference; + lastKnownFileType = file.svg; + name = "wizard_Highlight.svg"; + path = "../../Source/BinaryData/Icons/wizard_Highlight.svg"; + sourceTree = "SOURCE_ROOT"; + }; + F9111E150CFF155329D44853 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_OpenDocumentManager.cpp"; + path = "../../Source/CodeEditor/jucer_OpenDocumentManager.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + FA790C59A304579F660F112F = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_CodeBlocks.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h"; + sourceTree = "SOURCE_ROOT"; + }; + FB80347407261BF6CCEFDE91 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_ComponentTemplate.cpp"; + path = "../../Source/BinaryData/Templates/jucer_ComponentTemplate.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + FCEBE24EA79A13713D7CBF26 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ComponentColourProperty.h"; + path = "../../Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h"; + sourceTree = "SOURCE_ROOT"; + }; + FE20FE5805A02A4843048200 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjucerLookAndFeel.h"; + path = "../../Source/Utility/UI/jucer_ProjucerLookAndFeel.h"; + sourceTree = "SOURCE_ROOT"; + }; + FF68231DE2B395461009116C = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.c.h; + name = "jucer_ProjectExport_MSVC.h"; + path = "../../Source/ProjectSaving/jucer_ProjectExport_MSVC.h"; + sourceTree = "SOURCE_ROOT"; + }; + FFE01768CF1C8DBDAA894F76 = { + isa = PBXFileReference; + lastKnownFileType = sourcecode.cpp.cpp; + name = "jucer_PaintRoutinePanel.cpp"; + path = "../../Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp"; + sourceTree = "SOURCE_ROOT"; + }; + EB1D55A76652399EB81CC1F0 = { + isa = PBXGroup; + children = ( + DE4A987B2D5529990A6AA9D4, + B83DAADA1A871F21582FFB23, + D91E7F8FEF9290195D56782C, + C736264708F3F68BA745BA29, + EB2E723DC3DB150A8A644D08, + 124232706D1C8A3CA49E70CD, + DDC382008FFD9F9E0B2B0EDD, + F7C74E934C954F6F1A3BE4F9, + 92926A4D3CC4BB2A9D35EB0B, + ); + name = Windows; + sourceTree = ""; + }; + BC67FD952A6F210A11A1ECB8 = { + isa = PBXGroup; + children = ( + EB1D55A76652399EB81CC1F0, + 7CA44FF0BA319517C6E39651, + EE690110171E1648FF2118B8, + 0D4D508C638BC74943B9976D, + 4D698BF12BCD6B0896BCDF17, + 23A8DE16C0CDB8EED18B008B, + 0400CB0E056A1D840304D2DE, + 2EEB1C074162F363C6599282, + 6E6140969908E7619F858740, + 3F8EC008960DBEB2A5D3C3F4, + 8C52A3DDA62A746AA7A68535, + 9069981E414A631B036CC9AC, + 2CD34A70B4032C0426F7AA10, + B6496F16ACE80CACC5721570, + 4818A05DE44ADA03D85E1083, + ); + name = Application; + sourceTree = ""; + }; + 8CF70DA9AB4725126B9F55BE = { + isa = PBXGroup; + children = ( + 129F2DE0FEF154F8F8C7A74E, + 0B24F292A357ABFD9BCC6D7F, + 576A92E1E0D8F453EC0FEB34, + 996E472B82A75531875A5E38, + ); + name = gradle; + sourceTree = ""; + }; + F0F189518721D46C0F94FD56 = { + isa = PBXGroup; + children = ( + 514F2FAFDBF535AC03FA2E6C, + 807049CA2D5B6DE18EA078F2, + 56749E4C72A8F51ACA8F2330, + 42F4AA3EF0883D506987CA99, + 69B478C992FA0B8C885946A6, + EAC1731150A7F79D59BAA0B6, + 8F4D281E98808204E2846A7D, + 194457D806A26E793584AC0C, + 432EC251A122071809471804, + B83C9BD89F31EA9E5E12A3C6, + 8FEF6F5EA676B824C021EB6F, + 8FF26BF72A522FBEAAFDDF54, + 2072D6BAE744B53B6FBBDDD8, + ED5EAC91D8A0A1911BE9F482, + AEFE3BA0C31EC78A5767A10E, + 5B3532C5F103DAC87B4A5675, + F8A38C0C7C45F2DB6A5FB812, + B1C2F8ED14BF914CD1882708, + 62922B3C0620368D1799A653, + D1739728A79A2062418B8EF0, + ); + name = Icons; + sourceTree = ""; + }; + E59ABA0D11CBAAD77179E9C6 = { + isa = PBXGroup; + children = ( + 9A3B8BBDA8E144A3DF6B9349, + 016A6C52B0B93DE29197FF64, + D5795F8CAC5876714DAB355F, + D4EB334E5186D1584EC63CA4, + 203FA6AD7EDDF1F9C338CC2A, + 5BF0374EB908F0476BD8ED42, + 6574A50A8997799705B23465, + 56177921580A4855917E0205, + 079802C6AEE7646010766FE8, + CC1C5F8E5DE34223FEC59673, + FB80347407261BF6CCEFDE91, + 2BD9B4556479A8A41740BCAE, + 9E0BA495286388EBF929D578, + 8D9A9A373E4621F7CBFCCCEF, + 59203884BC48D3B7F8DEABA8, + 32C4B61AD995877956B7FA66, + A66F17E7472E5C19AFE98E46, + F159C1B99ACF1D91E12D978E, + 97A847B59EE04483E8850E4B, + A160AEF56553A658E6EA6A8E, + 8336A43CE1C3C26D7C7B53D8, + C7245390C6C44E89F7526CFC, + 8F67F3C0492EAFEBDBBC12DB, + E111A336FE13C033EAA0A1D1, + 9E2B1506AC3FDB7863766D59, + C607639897ED2538CBB860D0, + 023B92AC0340305762412E90, + 3F7C5B53347A487C7FBD2223, + 4ECF029E3A69BF42FED1503D, + 3DC2ED15A9DFAAEF3D2ACDDF, + E67999BF57B139E00207A374, + 763A63E75AC802F17D11FE8B, + ); + name = Templates; + sourceTree = ""; + }; + A9399733CAA07BDAB958242C = { + isa = PBXGroup; + children = ( + 8CF70DA9AB4725126B9F55BE, + F0F189518721D46C0F94FD56, + E59ABA0D11CBAAD77179E9C6, + 41105E536155E394E54BDD35, + 5F6584B675E30761521A9F42, + 59B08C7B13B8EA5137ACA77A, + 8C281F2F8EA3AD614ADF7955, + 4073A12E196BDDADE211E19F, + 58139D8D454051C59E77609B, + ); + name = BinaryData; + sourceTree = ""; + }; + F1B44F007A02A0FAE4DC8D79 = { + isa = PBXGroup; + children = ( + BC3B310D42C489E8B8D93327, + 51BC758EF5D33197CF543E67, + 35CAE8930F2885F9322D22D5, + 8A82061A978B03745485C3AC, + F9111E150CFF155329D44853, + 1B5BCD4899A9E295786EB642, + 332AF94C3275FEA8B878D603, + B9B130F596953116393138DC, + ); + name = CodeEditor; + sourceTree = ""; + }; + 2A1D5A24E950E00CDF969502 = { + isa = PBXGroup; + children = ( + 01A37DF94E98D991FEF43628, + 409C636B96A9AC1D732B96F8, + 9E62EC342665C27BA01AFC1A, + 8F731F1F98BAB42F1C3B96AA, + 11DEED05110D3D1D02FCFFB6, + 0543E83BF7D7D9234C396E82, + 630DC5EAA31D3EE60B2D989F, + 705DE88C5C4CC6C871E951B1, + A49503B646A7BD2BEEFC5CBD, + E1577F8617C75B91D7399812, + 33B258726F29360D64FD1451, + 9F959ECF8CD9B7314AE604A9, + 73DE14CEAD25D3445457013E, + 0AE75B0ACD368A4C0FBC2CD0, + 35CFCC15CBA46F4513940A2A, + 868B459E02F0877EBE3D56F1, + 8DFE6D8AFB8057790041300B, + A22F64D1E4BD4B8FA366DAAD, + 055636565C2F512E40114582, + ); + name = Components; + sourceTree = ""; + }; + 18139A4BCB7C14043C72B9E1 = { + isa = PBXGroup; + children = ( + BF301C2E545AEB4AC112C176, + 9F2D3E5FC10F7C3270908E97, + 1DCA18E935A35D29D2D9B6A0, + E468FDB5504C5D9315B2D04F, + ); + name = Documents; + sourceTree = ""; + }; + 497FD8DD8175790E4885736B = { + isa = PBXGroup; + children = ( + D6390A40B3279E0E626C78D3, + 9914F905BFCFBE5F76619670, + 8D178CAEE6D89DE33233313F, + C402C21DFAC1F8BF121144F1, + F3CC8F26ECCDA6DCD8A284D2, + 9B6FD3FEDB6D91AD0A80EF97, + 512D80BE12634967A085A1DC, + 4AE469CD40BDAD634135785E, + F073B54B36D845915CD6D2C1, + 988F5C1E40DED02D8B064253, + BCB6C87E3992930674E54D16, + 72ED72174F9DBD0ABD8AFCED, + 7031E8CB6D4D84BD980A0BD0, + 4AE72953E3B3DF06D3B9BA86, + DA4D0CC5149F7C0FBDAF34A2, + 355379844A5E6A097038C280, + 77EA01E7D04BF889930BFF54, + B97D60D2531CFD0D8555BA5C, + 36E5FBF64A89D5F2A266A5A7, + 7687A1374C60A025BDBE98DE, + D93E2F2468003DD333371F06, + ); + name = PaintElements; + sourceTree = ""; + }; + 172E2F5D29A894D0BA9231A9 = { + isa = PBXGroup; + children = ( + 7F0A5319912991615FC57945, + F4FD9BD16ED2700F45A68C4F, + 7E2013F425E231C6D865DDD0, + FCEBE24EA79A13713D7CBF26, + 5783563E39E48ADFC68EB84A, + 2F373F97E30AC1A0BFC1FC61, + D045BD5943BD38F2720FF5F0, + B2CB95B3F44C3CC5735051A3, + 85A5E3E71BED93B9A3E07681, + ); + name = Properties; + sourceTree = ""; + }; + 0565E54C3060E29ED38B65AB = { + isa = PBXGroup; + children = ( + EF25A29A2194FC107B40F65F, + 5524B5C9FC6AEAA670B92AA9, + A0BBBFBA13A1308B3CD725D5, + 00E6B87A43453B51850550E1, + 9BDF2D6255C1CB2CFF376186, + 6F02C3B7FEA3B50692A70DE5, + 39597BD78897CB711AFA945A, + 4E671236FDBD5AD4699740C6, + 351AF80A004D766E314AB76D, + EFF38AE74E7267CCC47E8AD1, + 6E70C1FA80F02D4C310F63AA, + ED69863B3D591FB3F0CA50E4, + FFE01768CF1C8DBDAA894F76, + 65FAD7F6DF65A72B741C2913, + 719B56C8587863D7AE9B69C6, + 0EE17BE4154CF1B2EE683894, + BDF6AFC5F88581AE395F1DC9, + 75BE2887C6F324B818D80A21, + 24EB4C2412821B8019D6F754, + BC623CC67AC58297BF6B4C70, + ); + name = UI; + sourceTree = ""; + }; + F6BD840F9A06F2DA891E2CB8 = { + isa = PBXGroup; + children = ( + 2A1D5A24E950E00CDF969502, + 18139A4BCB7C14043C72B9E1, + 497FD8DD8175790E4885736B, + 172E2F5D29A894D0BA9231A9, + 0565E54C3060E29ED38B65AB, + 9EF583A6201DBC813C2F63C4, + 6AC88EFC247C225CC5C11A43, + 133F1E428260C5ADDF496DF9, + 3F9D4C7F6E5779D4E4AE655D, + 78D0DBC4798FF040FDB90F6D, + DA345D5B9DABD049F90DC96F, + 269A454F1FF081DA67FFD578, + 8F30A53C7FE4BC65171FB3E2, + 9D7689451732AF8333402B3A, + 50498FF6EA3901CBD58223B3, + C187718F7B9EBA88584B43F3, + 66B49F08C5EC3E4974825FF8, + 5432B7B9B2CF2EAEC8B66D5C, + ); + name = ComponentEditor; + sourceTree = ""; + }; + 144B649D98AE8316058B8281 = { + isa = PBXGroup; + children = ( + 51CBE59779A36D1B80B26974, + BB187CD608EB6368B29EC335, + 790F6302B9A0620F23F8A6C1, + 98E6D61BFF7D85F0E00F0FBF, + ); + name = Licenses; + sourceTree = ""; + }; + 9014CA5F3B8D23E883D6975E = { + isa = PBXGroup; + children = ( + 2DF5A61F3C497537634773DF, + CCEA34A55813C7C4E58254F5, + 0640E34282A97BF73CC8F1EB, + 3BBFA655E129C2D817EA47C9, + ); + name = UI; + sourceTree = ""; + }; + 20B39D53B7DAAB53C7533532 = { + isa = PBXGroup; + children = ( + 9014CA5F3B8D23E883D6975E, + 245C81599FB53865A74FC65B, + D251114072E67CA86D9913D6, + E1535CDF4258E7D4AB70B5E5, + DE3E6B2614229FAD56D50770, + 308084CBEE9F7D405D72A5E1, + A978DFE87D9BB5EFE5B3DAAC, + D2FE76E4CF003856278343CC, + BA186B51EE4884CD8E3F2741, + A081306A9E95CA114B81910F, + ADD6A3CF5D7DE55E57E8E38B, + A9954DC7F876A7006743ACB6, + ADA538034910F52FDD2DC88D, + 8F685EFEFD6EE399058DE842, + 159DE1FEE2099398983CDDF0, + B24E3F34C3C4EE54A60C35CC, + 55DEDCEB35AA1FB54C74B375, + 3EA27F52A254912218F4DE94, + 182CB1F96890620A202C6524, + ); + name = LiveBuildEngine; + sourceTree = ""; + }; + 236D186F5A6536C59D6E751C = { + isa = PBXGroup; + children = ( + 861E52D9AFECADF079BB1F2C, + 4974E7808F9B57E9A627F878, + 68C1949F56295D5871C1F223, + 5E4EB84A7983AB31366A3490, + 1C80C7672975C1FF9AAC4A4F, + E3BADF21095BC23DE2CB454F, + 95EAB6EC9B724538B93910D4, + 68F41A216E7454E7442AB1F4, + ); + name = Sidebar; + sourceTree = ""; + }; + EBC037ECAAC8156B8B19DC69 = { + isa = PBXGroup; + children = ( + 236D186F5A6536C59D6E751C, + 32ECBC08D903418CA0825870, + A509BC22854D50E4C786EB32, + 516D6D7C564DD5DF5C15CB06, + 16751E04B0F3737BDF52CEB4, + B3528C08B84CBC950252EA69, + 1B0F18E1D96F727C062B05FA, + 92A66A8BD87F98EB6B4FB6D0, + ); + name = UI; + sourceTree = ""; + }; + 89E9055A179B4C2019B4E1AE = { + isa = PBXGroup; + children = ( + EBC037ECAAC8156B8B19DC69, + F797071D88542C813CF7222A, + 7211101FFA28400ADBB1D47A, + BAC43B20E14A340CCF14119C, + BF3CEF080FA013E2778DCE90, + B8385E9A644BD3CD94876448, + ); + name = Project; + sourceTree = ""; + }; + 4DCC5D64BBE8DE85360A3D57 = { + isa = PBXGroup; + children = ( + CCD62DB0A19A985A4B9D7F32, + D5EF5961B1F0E3FAED32E30A, + FA790C59A304579F660F112F, + 59520B8137E6A2E483074399, + FF68231DE2B395461009116C, + 20075A86A4D0E8A5B973D9DB, + C3BB9F92B02B06D04A73794C, + 8DBB36126CD144A8364F1F19, + 4FF81FC167C924C47BD8C1C9, + 9EE3141E20C9CE3EA182FA04, + E13A54A6D3A1895EACE53E51, + 25BE1265FE6C6EA3473A3A0A, + 044478BB994878E35D30154A, + ); + name = ProjectSaving; + sourceTree = ""; + }; + EC535A977A1A114BC5DAE7B3 = { + isa = PBXGroup; + children = ( + BE618CE21C794BDEE319E328, + E2B668E2A65AEE8F07B406C8, + F5DD97B45B8EA60C1ED0DD80, + DFBEB8E086832AEB0FBEADF0, + ); + name = Settings; + sourceTree = ""; + }; + AA2CBF47682AE479C1A387BE = { + isa = PBXGroup; + children = ( + F2E4998FB2C7221587A79F8B, + 23D79A22569BEDF63B57DD36, + C3E04CD5A93A45154894E624, + B403AF75EAF361ED74EE476E, + E186BC01A1B1529937A46485, + 486E8D02DAD2A0BF54A901C0, + 983CFBA01CA8811F30FA7F4C, + 58F1FF52E887887A93E84FC2, + A6C4AE13FB409DE414094CFA, + 6FD8DBC0FF42C87D8BEE2452, + 00515BA4EC5A7D4DC078ED37, + ); + name = Helpers; + sourceTree = ""; + }; + B4972C4048154E5E783D3934 = { + isa = PBXGroup; + children = ( + 191330B20DAC08B890656EA0, + C76271530EB4458B6146D463, + ); + name = PIPs; + sourceTree = ""; + }; + 15F56361B9CF3E0BE705E64D = { + isa = PBXGroup; + children = ( + 9EB33734D0DBD0370AB1247B, + E367FC2BDAF5EBA48D767FBB, + 3D36F0CEB84B27BD02FC461A, + 59F8A47C0020D62C8836A1E7, + ); + name = PropertyComponents; + sourceTree = ""; + }; + DD068F16F341D15E150CE6F1 = { + isa = PBXGroup; + children = ( + 15F56361B9CF3E0BE705E64D, + 169DD91232C070C4D6470B31, + 846B2A670C5A19DE0039E11A, + C59E624F099CC785F27429EB, + 4D5F0CA8D1273144681A1D48, + 00841B7EDDE9C19890F03267, + 0F8C000E5FF4A2DAC1FEF8EB, + FE20FE5805A02A4843048200, + 0CECD562059DFD7FBFB37E3C, + 3D6FD9C0065BF16568EC0AB7, + 28D0199327887FFABF9C3F20, + ); + name = UI; + sourceTree = ""; + }; + 2B1F885AA027E1A76A1C32E3 = { + isa = PBXGroup; + children = ( + AA2CBF47682AE479C1A387BE, + B4972C4048154E5E783D3934, + DD068F16F341D15E150CE6F1, + ); + name = Utility; + sourceTree = ""; + }; + 73BAA89A783BBDD79AA27964 = { + isa = PBXGroup; + children = ( + A69024A225F2AC31F17B1314, + 11DC04468BC6023671017EBF, + 087CB3A961CD3C7434D660A4, + 4B083E951ECB62217C46CB01, + C2990A8D054BC230E7C637C3, + 8BD8E9DA627D6EF9BA10FB9E, + 3C95FA2AA91EBA19ADDD5C29, + 8A825FDDC00DD253F44D2C3A, + 4A4EBDAD8D098F72CE053235, + 0F01067432AC314EAC213C1C, + A44A774EFC020D3D046A9249, + 9992E6950C64322A11E39ADF, + 05D67B5A8D64947C067C0945, + A085174413736ACC8D7D42A2, + 471C7B0A8B92320AF0C80839, + 714267352CE5C4357ADBC231, + C09BBB58CA45B66D693E8C31, + ); + name = Wizards; + sourceTree = ""; + }; + D3109994DA6AD871BE85C4E2 = { + isa = PBXGroup; + children = ( + BC67FD952A6F210A11A1ECB8, + A9399733CAA07BDAB958242C, + F1B44F007A02A0FAE4DC8D79, + F6BD840F9A06F2DA891E2CB8, + 144B649D98AE8316058B8281, + 20B39D53B7DAAB53C7533532, + 89E9055A179B4C2019B4E1AE, + 4DCC5D64BBE8DE85360A3D57, + EC535A977A1A114BC5DAE7B3, + 2B1F885AA027E1A76A1C32E3, + 73BAA89A783BBDD79AA27964, + ); + name = Projucer; + sourceTree = ""; + }; + 8A24D1B6925535A868974986 = { + isa = PBXGroup; + children = ( + 58DE91CE6B05AFBACADDB251, + BA159A3B7D129771F5C15EA3, + AA1C44E89D792DDC4867B2C8, + 69555CEFC6ED613AA3949298, + 21F4833C5B5C17B159B956F3, + B6F2905330EA5C560D527209, + 7AB7640968FAAC73072FBD10, + D05BD91B6105827B010E1C20, + ); + name = "JUCE Modules"; + sourceTree = ""; + }; + 2C6746F66EF4444F53B3221F = { + isa = PBXGroup; + children = ( + 8702F43110E4CCA5E5F827F5, + 472F9A90F685220D730EBF6C, + 4F687965FBE86EAFDB3ACFEC, + 805A3A5FBA3B9E28363DD77B, + DB9C8E35DF815B803CB4A9CF, + D766BB9D8C32B5560F0493F3, + 1DE5BBC777FB64798D823002, + 5867DC4E39DF8539B54C0D59, + 1B9B5A37F079FE3B3CF8FAB6, + 0462692BAA9CD1BE6DFBCC33, + AECE3914F5119A3D586A5635, + 364D1A9B113320407A7E57B9, + ); + name = "JUCE Library Code"; + sourceTree = ""; + }; + 8180B5894A78501084B8F133 = { + isa = PBXGroup; + children = ( + E266DE67FF319D56F63193A6, + 6678E9B3EEACAD47F438B264, + 951128CA33CCDEF570436B1C, + ); + name = Resources; + sourceTree = ""; + }; + 0FFEF043CA89142B18C79ABE = { + isa = PBXGroup; + children = ( + 80D62B907248523E6943298B, + 5A75806B34E4EA6598A6024A, + 7B3F7ECF6DBF8C8EE5C2CB86, + 210CD22F25F2C22F9CEEB025, + D00F311BFC3C2625C457CB9B, + D1F9B0E9F5D54FE48BEB46EA, + 728FE25157E9874D50BBECB2, + E983E6DDE3318B872EBE347F, + 8F7BE18698ADCEF51CDE4A5C, + 842427CFE565F3FCE5B99174, + E96597BBC6A98255B51B94DC, + 431D30038CBF67F80E8B3A13, + 9F01BA9942D038EA8B5289A8, + E5D6C36496F5BC84D7213BE8, + CF6C8BD0DA3D8CD4E99EBADA, + ); + name = Frameworks; + sourceTree = ""; + }; + 92ABB8016546F41128399E9D = { + isa = PBXGroup; + children = ( + 09DE066936CF037E9709ADB1, + ); + name = Products; + sourceTree = ""; + }; + 3CC531922CC2D398E283A845 = { + isa = PBXGroup; + children = ( + D3109994DA6AD871BE85C4E2, + 8A24D1B6925535A868974986, + 2C6746F66EF4444F53B3221F, + 8180B5894A78501084B8F133, + 0FFEF043CA89142B18C79ABE, + 92ABB8016546F41128399E9D, + ); + name = Source; + sourceTree = ""; + }; + 0CC6C439D038EDA0D7F10DF0 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++11"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -814,27 +3207,37 @@ "_DEBUG=1", "DEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wno-missing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code -Wzero-as-null-pointer-constant"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Debug; }; - 0BC15DC2E5FE5ECFFB398D49 = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "Projucer"; + USE_HEADERMAP = NO; + }; + name = Debug; + }; + 0BC15DC2E5FE5ECFFB398D49 = { + isa = XCBuildConfiguration; + buildSettings = { CLANG_CXX_LANGUAGE_STANDARD = "c++11"; CLANG_CXX_LIBRARY = "libc++"; CLANG_LINK_OBJC_RUNTIME = NO; @@ -847,39 +3250,52 @@ "_NDEBUG=1", "NDEBUG=1", "JUCER_XCODE_MAC_F6D2F4CF=1", - "JUCE_APP_VERSION=5.3.2", - "JUCE_APP_VERSION_HEX=0x50302", + "JUCE_APP_VERSION=5.4.1", + "JUCE_APP_VERSION_HEX=0x50401", "JucePlugin_Build_VST=0", "JucePlugin_Build_VST3=0", "JucePlugin_Build_AU=0", "JucePlugin_Build_AUv3=0", "JucePlugin_Build_RTAS=0", "JucePlugin_Build_AAX=0", - "JucePlugin_Build_Standalone=0", ); + "JucePlugin_Build_Standalone=0", + "JucePlugin_Build_Unity=0", + ); GCC_SYMBOLS_PRIVATE_EXTERN = YES; GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - HEADER_SEARCH_PATHS = ("../../JuceLibraryCode", "../../../../modules", "$(inherited)"); + HEADER_SEARCH_PATHS = ( + "../../JuceLibraryCode", + "../../../../modules", + "$(inherited)", + ); INFOPLIST_FILE = Info-App.plist; INFOPLIST_PREPROCESS = NO; INSTALL_PATH = "$(HOME)/Applications"; LLVM_LTO = YES; MACOSX_DEPLOYMENT_TARGET = 10.11; - MACOSX_DEPLOYMENT_TARGET_ppc = 10.4; - OTHER_CPLUSPLUSFLAGS = "-Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code"; + OTHER_CPLUSPLUSFLAGS = "-Wall -Wno-missing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Wconditional-uninitialized -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion -Wunused-private-field -Wbool-conversion -Wextra-semi -Wno-ignored-qualifiers -Wunreachable-code -Wzero-as-null-pointer-constant"; PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; - SDKROOT_ppc = macosx10.5; - USE_HEADERMAP = NO; }; name = Release; }; - C42924A24AB55E6A940423EA = {isa = XCBuildConfiguration; buildSettings = { + PRODUCT_NAME = "Projucer"; + USE_HEADERMAP = NO; + }; + name = Release; + }; + C42924A24AB55E6A940423EA = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -906,18 +3322,26 @@ ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "Projucer"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Debug; }; - 70135D15D7E0D8410C42BBA3 = {isa = XCBuildConfiguration; buildSettings = { + ZERO_LINK = NO; + }; + name = Debug; + }; + 70135D15D7E0D8410C42BBA3 = { + isa = XCBuildConfiguration; + buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -942,101 +3366,157 @@ GCC_WARN_UNUSED_VARIABLE = YES; PRODUCT_NAME = "Projucer"; WARNING_CFLAGS = -Wreorder; - ZERO_LINK = NO; }; name = Release; }; - 50E3FDD15B8D8C9793DFABF9 = {isa = PBXTargetDependency; target = 0039FE1A254FE518518BF8B8; }; - F90407F24422C589DA251604 = {isa = XCConfigurationList; buildConfigurations = ( - C42924A24AB55E6A940423EA, - 70135D15D7E0D8410C42BBA3, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - 0655A4A348F7F91F77583ADC = {isa = XCConfigurationList; buildConfigurations = ( - 0CC6C439D038EDA0D7F10DF0, - 0BC15DC2E5FE5ECFFB398D49, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - C262D0F297DDE25326F5AC81 = {isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2610F357881240ACBF612F48, - 1321E6C1C6170B6C898AD09D, ); runOnlyForDeploymentPostprocessing = 0; }; - 5CB869A8DA78BE6FA2757034 = {isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 6DD9DA1677A6CF789CDAB478, - 954A036F5DDB375DB23FFB3E, - 95B44E6C74B1DED31DBE37EB, - AA9D0B8E23F3D87A23DE9F8A, - 98F9BB4612E82EE59689E15C, - 09C4EDDF7F8B6E75EA3CE3A9, - 71713DE4716DCEDB45A206E2, - 940CE4E081E9E685243C07AA, - 49EEEA5B74D38F3C5A8794F1, - 6FD9428439B572B558EF64EA, - 6EAAAAB0C2B2DA259B26D63C, - 4C0F95265A230E5A8717A0A9, - FFA8B18CDF2D2AA500698A96, - EE26A1C2DAAB609362F407EA, - 4FAAB649E846BA2764C02ACE, - 7D750EF5FCE1E1A461D435BE, - 537ABF1DB09DDBD1542A2B0C, - 290F2CD930097091B8DB122E, - 4B2F2DAA45060D3F250D0AE4, - BDD30804C9424526A1122A28, - 37D582DA2227E004BFA237EC, - 9B8ED9D50406E5D75DEE57F5, - 89116B0BD882B51C63A84425, - 63D97E01F2C4C91037CB65BD, - 45A53AF13B0D663050632E8C, - C2A85091A28C907A4E1E1687, - 83431B7234A78ECFB3C15F63, - 209FCCC2155A1FCB7E11E20D, - C93569F47B4AC1A8E37992ED, - 1B988E139004D8E2850EB656, - 6FD0752A5CADCF60D79FDBB7, - D25EBE02B55DB244BE0D5635, - 85E7FCB0516EFF853FA7B380, - CC6C4D351BA9B473E5F95791, - 05A08E366EBF8D650974E695, - 3FCA61C401007B243E2E9035, - 30B921C38DCEE787B294B746, - 244567D3AE2E417A8CB2B95E, - 26D6AEA321E80ABCC3CCCCD1, - 4E6DC4778D583C48C3CCD4DC, - EE722B47BC36CC8A87E0FB76, - 2DF375B40A64BB3778F7ABD1, - 8BE478303CDF061B72F219E2, - BF913199032B4CE970E82AA3, - 25EF9B3FECB4C9F0F522DCAA, - 638C7247B6DBA67EFE46E124, - 2BEC1197D981951D8A897F01, - D0E26EB54B0087C8BE3D541E, - 468548FB21D264DC12321327, - 6ECB2F11D2F593FACCCF99DB, - 95F56FB44C669F93AE77E465, - 518DD443B6F17A5AFD707263, - B7EBA1A83575F48CD08140B9, - 3C5267E06A897B0DC0F7EA50, - 202DC8CF15ACBE096CC327EA, - 5DD883699B85E4C492CAD065, - D5C9125F65493CA481F18E53, - 02E8F35A8E0D4A0DF6F38D60, - 234B6BA2952CBC7C61EF70EF, - 254A7C08594A152C2C646334, - F15F0512666FF8CDC0D08905, - B18248959DDC44EF4E85320A, ); runOnlyForDeploymentPostprocessing = 0; }; - D150288A32EE596408C2B99F = {isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A578EAD4BB55680E8097BE0F, - C1B9334AE849F93FB3C56B34, - 8B4A593B3869815BBAC3EF93, - A14C2C2725DA3CA7995D2815, - 1E76E36772355E2A43CF4961, - 241F29FCBB7A17BB44A0B10C, - 9359F9401D59B4517F75C39C, - 091A57B4B9CE623E75E9A756, - FAB47E69F7D9DCE1F906AA07, - 0E884E47A637D6C65154699A, - 49C22786B54C5DC94E4654B8, - CDEF9FF2D119476D707305DF, - 96EC6315E1B3F1A109F84BAF, - 11D42F7EC6E6539D79A7F4B1, - B980464FA2761CCD64B1FAD6, ); runOnlyForDeploymentPostprocessing = 0; }; - 0039FE1A254FE518518BF8B8 = {isa = PBXNativeTarget; buildConfigurationList = 0655A4A348F7F91F77583ADC; buildPhases = ( - C262D0F297DDE25326F5AC81, - 5CB869A8DA78BE6FA2757034, - D150288A32EE596408C2B99F, ); buildRules = ( ); dependencies = ( ); name = "Projucer - App"; productName = Projucer; productReference = 09DE066936CF037E9709ADB1; productType = "com.apple.product-type.application"; }; - 74EA481348A24104E6ACE009 = {isa = PBXProject; buildConfigurationList = F90407F24422C589DA251604; attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 0039FE1A254FE518518BF8B8 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; compatibilityVersion = "Xcode 3.2"; hasScannedForEncodings = 0; mainGroup = 3CC531922CC2D398E283A845; projectDirPath = ""; projectRoot = ""; targets = (0039FE1A254FE518518BF8B8); }; + ZERO_LINK = NO; + }; + name = Release; + }; + 50E3FDD15B8D8C9793DFABF9 = { + isa = PBXTargetDependency; + target = 0039FE1A254FE518518BF8B8; + }; + F90407F24422C589DA251604 = { + isa = XCConfigurationList; + buildConfigurations = ( + C42924A24AB55E6A940423EA, + 70135D15D7E0D8410C42BBA3, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 0655A4A348F7F91F77583ADC = { + isa = XCConfigurationList; + buildConfigurations = ( + 0CC6C439D038EDA0D7F10DF0, + 0BC15DC2E5FE5ECFFB398D49, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C262D0F297DDE25326F5AC81 = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2610F357881240ACBF612F48, + 1321E6C1C6170B6C898AD09D, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5CB869A8DA78BE6FA2757034 = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6DD9DA1677A6CF789CDAB478, + 954A036F5DDB375DB23FFB3E, + 95B44E6C74B1DED31DBE37EB, + AA9D0B8E23F3D87A23DE9F8A, + 98F9BB4612E82EE59689E15C, + 09C4EDDF7F8B6E75EA3CE3A9, + 71713DE4716DCEDB45A206E2, + 940CE4E081E9E685243C07AA, + 49EEEA5B74D38F3C5A8794F1, + 6FD9428439B572B558EF64EA, + 6EAAAAB0C2B2DA259B26D63C, + 4C0F95265A230E5A8717A0A9, + FFA8B18CDF2D2AA500698A96, + EE26A1C2DAAB609362F407EA, + 4FAAB649E846BA2764C02ACE, + 7D750EF5FCE1E1A461D435BE, + 537ABF1DB09DDBD1542A2B0C, + 290F2CD930097091B8DB122E, + 4B2F2DAA45060D3F250D0AE4, + BDD30804C9424526A1122A28, + 37D582DA2227E004BFA237EC, + 9B8ED9D50406E5D75DEE57F5, + 89116B0BD882B51C63A84425, + 63D97E01F2C4C91037CB65BD, + 45A53AF13B0D663050632E8C, + C2A85091A28C907A4E1E1687, + 83431B7234A78ECFB3C15F63, + 209FCCC2155A1FCB7E11E20D, + C93569F47B4AC1A8E37992ED, + 1B988E139004D8E2850EB656, + 6FD0752A5CADCF60D79FDBB7, + D25EBE02B55DB244BE0D5635, + 85E7FCB0516EFF853FA7B380, + CC6C4D351BA9B473E5F95791, + 05A08E366EBF8D650974E695, + 3FCA61C401007B243E2E9035, + 30B921C38DCEE787B294B746, + 244567D3AE2E417A8CB2B95E, + 26D6AEA321E80ABCC3CCCCD1, + 4E6DC4778D583C48C3CCD4DC, + EE722B47BC36CC8A87E0FB76, + 2DF375B40A64BB3778F7ABD1, + 8BE478303CDF061B72F219E2, + BF913199032B4CE970E82AA3, + 25EF9B3FECB4C9F0F522DCAA, + 638C7247B6DBA67EFE46E124, + D0E26EB54B0087C8BE3D541E, + 468548FB21D264DC12321327, + 6ECB2F11D2F593FACCCF99DB, + 95F56FB44C669F93AE77E465, + 518DD443B6F17A5AFD707263, + B7EBA1A83575F48CD08140B9, + 3C5267E06A897B0DC0F7EA50, + 202DC8CF15ACBE096CC327EA, + 5DD883699B85E4C492CAD065, + D5C9125F65493CA481F18E53, + 02E8F35A8E0D4A0DF6F38D60, + 234B6BA2952CBC7C61EF70EF, + 254A7C08594A152C2C646334, + F15F0512666FF8CDC0D08905, + B18248959DDC44EF4E85320A, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D150288A32EE596408C2B99F = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A578EAD4BB55680E8097BE0F, + C1B9334AE849F93FB3C56B34, + 8B4A593B3869815BBAC3EF93, + A14C2C2725DA3CA7995D2815, + 1E76E36772355E2A43CF4961, + 241F29FCBB7A17BB44A0B10C, + 9359F9401D59B4517F75C39C, + 091A57B4B9CE623E75E9A756, + FAB47E69F7D9DCE1F906AA07, + 0E884E47A637D6C65154699A, + 49C22786B54C5DC94E4654B8, + CDEF9FF2D119476D707305DF, + 96EC6315E1B3F1A109F84BAF, + 11D42F7EC6E6539D79A7F4B1, + B980464FA2761CCD64B1FAD6, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0039FE1A254FE518518BF8B8 = { + isa = PBXNativeTarget; + buildConfigurationList = 0655A4A348F7F91F77583ADC; + buildPhases = ( + C262D0F297DDE25326F5AC81, + 5CB869A8DA78BE6FA2757034, + D150288A32EE596408C2B99F, + ); + buildRules = ( ); + dependencies = ( ); + name = "Projucer - App"; + productName = Projucer; + productReference = 09DE066936CF037E9709ADB1; + productType = "com.apple.product-type.application"; + }; + 74EA481348A24104E6ACE009 = { + isa = PBXProject; + buildConfigurationList = F90407F24422C589DA251604; + attributes = { LastUpgradeCheck = 0930; ORGANIZATIONNAME = "ROLI Ltd."; TargetAttributes = { 0039FE1A254FE518518BF8B8 = { SystemCapabilities = {com.apple.ApplicationGroups.iOS = { enabled = 0; }; com.apple.InAppPurchase = { enabled = 0; }; com.apple.InterAppAudio = { enabled = 0; }; com.apple.Push = { enabled = 0; }; com.apple.Sandbox = { enabled = 0; }; }; }; }; }; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 0; + mainGroup = 3CC531922CC2D398E283A845; + projectDirPath = ""; + projectRoot = ""; + targets = (0039FE1A254FE518518BF8B8); + }; }; rootObject = 74EA481348A24104E6ACE009; } diff --git a/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj index 2f2992ca..e799256f 100644 --- a/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj @@ -15,8 +15,6 @@ {E4CFCE31-1AF5-C360-751D-9682E333BE4D} - v120 - 8.1 false false v120 - v120 8.1 false true v120 - v120 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v120 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ Projucer true - v120 - 8.1 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2013_78A5020=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true @@ -242,7 +232,6 @@ - @@ -264,6 +253,9 @@ true + + true + true @@ -273,9 +265,15 @@ true + + true + true + + true + true @@ -330,6 +328,9 @@ true + + true + true @@ -612,6 +613,9 @@ true + + true + true @@ -999,10 +1003,13 @@ true - + true - + + true + + true @@ -1598,6 +1605,7 @@ + @@ -1610,8 +1618,8 @@ - + @@ -1642,6 +1650,7 @@ + @@ -1679,6 +1688,7 @@ + @@ -1688,6 +1698,7 @@ + @@ -1697,6 +1708,7 @@ + @@ -1796,6 +1808,7 @@ + @@ -1888,8 +1901,9 @@ - + + @@ -2020,6 +2034,7 @@ + @@ -2065,6 +2080,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj.filters index 4163efab..80e1150c 100644 --- a/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2013/Projucer_App.vcxproj.filters @@ -239,6 +239,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -493,9 +496,6 @@ Projucer\Utility\PIPs - - Projucer\Utility\UI\PropertyComponents - Projucer\Utility\UI @@ -529,6 +529,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -538,9 +541,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -595,6 +604,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -901,6 +913,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1306,12 +1321,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2265,6 +2283,9 @@ Projucer\ProjectSaving + + Projucer\ProjectSaving + Projucer\Settings @@ -2301,10 +2322,10 @@ Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents @@ -2397,6 +2418,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2508,6 +2532,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2535,6 +2562,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2562,6 +2592,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -2859,6 +2892,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3135,12 +3171,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3531,6 +3570,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -3662,6 +3704,9 @@ Projucer\BinaryData\Icons + + Projucer\BinaryData\Templates + Projucer\BinaryData diff --git a/extras/Projucer/Builds/VisualStudio2013/resources.rc b/extras/Projucer/Builds/VisualStudio2013/resources.rc index 1c354c76..7b50854b 100644 --- a/extras/Projucer/Builds/VisualStudio2013/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2013/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj index a7039ba2..c8c28467 100644 --- a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj @@ -15,8 +15,6 @@ {E4CFCE31-1AF5-C360-751D-9682E333BE4D} - v140 - 8.1 false false v140 - v140 8.1 false true v140 - v140 8.1 @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v140 - 8.1 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ Projucer true - v140 - 8.1 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true @@ -242,7 +232,6 @@ - @@ -264,6 +253,9 @@ true + + true + true @@ -273,9 +265,15 @@ true + + true + true + + true + true @@ -330,6 +328,9 @@ true + + true + true @@ -612,6 +613,9 @@ true + + true + true @@ -999,10 +1003,13 @@ true - + true - + + true + + true @@ -1598,6 +1605,7 @@ + @@ -1610,8 +1618,8 @@ - + @@ -1642,6 +1650,7 @@ + @@ -1679,6 +1688,7 @@ + @@ -1688,6 +1698,7 @@ + @@ -1697,6 +1708,7 @@ + @@ -1796,6 +1808,7 @@ + @@ -1888,8 +1901,9 @@ - + + @@ -2020,6 +2034,7 @@ + @@ -2065,6 +2080,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters index 8d2da9e4..99cfe492 100644 --- a/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters @@ -239,6 +239,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -493,9 +496,6 @@ Projucer\Utility\PIPs - - Projucer\Utility\UI\PropertyComponents - Projucer\Utility\UI @@ -529,6 +529,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -538,9 +541,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -595,6 +604,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -901,6 +913,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1306,12 +1321,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2265,6 +2283,9 @@ Projucer\ProjectSaving + + Projucer\ProjectSaving + Projucer\Settings @@ -2301,10 +2322,10 @@ Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents @@ -2397,6 +2418,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2508,6 +2532,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2535,6 +2562,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2562,6 +2592,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -2859,6 +2892,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3135,12 +3171,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3531,6 +3570,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -3662,6 +3704,9 @@ Projucer\BinaryData\Icons + + Projucer\BinaryData\Templates + Projucer\BinaryData diff --git a/extras/Projucer/Builds/VisualStudio2015/resources.rc b/extras/Projucer/Builds/VisualStudio2015/resources.rc index 1c354c76..7b50854b 100644 --- a/extras/Projucer/Builds/VisualStudio2015/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2015/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj index cd8b1d4a..ee6af073 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj @@ -15,8 +15,6 @@ {E4CFCE31-1AF5-C360-751D-9682E333BE4D} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .exe @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\App\ Projucer true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDebug true @@ -84,6 +74,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -115,7 +106,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.3.2;JUCE_APP_VERSION_HEX=0x50302;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.1;JUCE_APP_VERSION_HEX=0x50401;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreaded true @@ -125,6 +116,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) stdcpp14 @@ -242,7 +234,6 @@ - @@ -264,6 +255,9 @@ true + + true + true @@ -273,9 +267,15 @@ true + + true + true + + true + true @@ -330,6 +330,9 @@ true + + true + true @@ -612,6 +615,9 @@ true + + true + true @@ -999,10 +1005,13 @@ true - + true - + + true + + true @@ -1598,6 +1607,7 @@ + @@ -1610,8 +1620,8 @@ - + @@ -1642,6 +1652,7 @@ + @@ -1679,6 +1690,7 @@ + @@ -1688,6 +1700,7 @@ + @@ -1697,6 +1710,7 @@ + @@ -1796,6 +1810,7 @@ + @@ -1888,8 +1903,9 @@ - + + @@ -2020,6 +2036,7 @@ + @@ -2065,6 +2082,7 @@ + diff --git a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters index 42313cdb..db33f63e 100644 --- a/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters +++ b/extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters @@ -239,6 +239,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -493,9 +496,6 @@ Projucer\Utility\PIPs - - Projucer\Utility\UI\PropertyComponents - Projucer\Utility\UI @@ -529,6 +529,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -538,9 +541,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -595,6 +604,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -901,6 +913,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1306,12 +1321,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2265,6 +2283,9 @@ Projucer\ProjectSaving + + Projucer\ProjectSaving + Projucer\Settings @@ -2301,10 +2322,10 @@ Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents - + Projucer\Utility\UI\PropertyComponents @@ -2397,6 +2418,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2508,6 +2532,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2535,6 +2562,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2562,6 +2592,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -2859,6 +2892,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3135,12 +3171,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3531,6 +3570,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -3662,6 +3704,9 @@ Projucer\BinaryData\Icons + + Projucer\BinaryData\Templates + Projucer\BinaryData diff --git a/extras/Projucer/Builds/VisualStudio2017/resources.rc b/extras/Projucer/Builds/VisualStudio2017/resources.rc index 1c354c76..7b50854b 100644 --- a/extras/Projucer/Builds/VisualStudio2017/resources.rc +++ b/extras/Projucer/Builds/VisualStudio2017/resources.rc @@ -7,7 +7,7 @@ #include VS_VERSION_INFO VERSIONINFO -FILEVERSION 5,3,2,0 +FILEVERSION 5,4,1,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -16,9 +16,9 @@ BEGIN VALUE "CompanyName", "ROLI Ltd.\0" VALUE "LegalCopyright", "ROLI Ltd.\0" VALUE "FileDescription", "Projucer\0" - VALUE "FileVersion", "5.3.2\0" + VALUE "FileVersion", "5.4.1\0" VALUE "ProductName", "Projucer\0" - VALUE "ProductVersion", "5.3.2\0" + VALUE "ProductVersion", "5.4.1\0" END END diff --git a/extras/Projucer/JuceLibraryCode/AppConfig.h b/extras/Projucer/JuceLibraryCode/AppConfig.h index 1846127f..f4ba9f5b 100644 --- a/extras/Projucer/JuceLibraryCode/AppConfig.h +++ b/extras/Projucer/JuceLibraryCode/AppConfig.h @@ -31,7 +31,9 @@ // BEGIN SECTION A -#define JUCER_ENABLE_GPL_MODE 0 +#ifndef JUCER_ENABLE_GPL_MODE + #define JUCER_ENABLE_GPL_MODE 0 +#endif // END SECTION A @@ -103,12 +105,20 @@ #define JUCE_USE_CURL 1 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif #ifndef JUCE_ALLOW_STATIC_NULL_VARIABLES - //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 + #define JUCE_ALLOW_STATIC_NULL_VARIABLES 0 +#endif + +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + #define JUCE_STRICT_REFCOUNTEDPOINTER 1 #endif //============================================================================== @@ -129,6 +139,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -156,6 +170,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -166,6 +184,7 @@ #ifndef JUCE_ENABLE_LIVE_CONSTANT_EDITOR //#define JUCE_ENABLE_LIVE_CONSTANT_EDITOR 0 #endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.cpp b/extras/Projucer/JuceLibraryCode/BinaryData.cpp index ff35bfd9..0f576564 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.cpp +++ b/extras/Projucer/JuceLibraryCode/BinaryData.cpp @@ -6538,9 +6538,14 @@ static const unsigned char temp_binary_data_42[] = " {\r\n" " setUsingNativeTitleBar (true);\r\n" " setContentOwned (new %%content_component_class%%(), true);\r\n" -" setResizable (true, true);\r\n" "\r\n" +" #if JUCE_IOS || JUCE_ANDROID\r\n" +" setFullScreen (true);\r\n" +" #else\r\n" +" setResizable (true, true);\r\n" " centreWithSize (getWidth(), getHeight());\r\n" +" #endif\r\n" +"\r\n" " setVisible (true);\r\n" " }\r\n" "\r\n" @@ -6644,7 +6649,13 @@ static const unsigned char temp_binary_data_43[] = " setUsingNativeTitleBar (true);\r\n" " setContentOwned (new %%content_component_class%%(), true);\r\n" "\r\n" +" #if JUCE_IOS || JUCE_ANDROID\r\n" +" setFullScreen (true);\r\n" +" #else\r\n" +" setResizable (true, true);\r\n" " centreWithSize (getWidth(), getHeight());\r\n" +" #endif\r\n" +"\r\n" " setVisible (true);\r\n" " }\r\n" "\r\n" @@ -7267,8 +7278,194 @@ static const unsigned char temp_binary_data_54[] = const char* jucer_PIPTemplate_h = (const char*) temp_binary_data_54; -//================== colourscheme_dark.xml ================== +//================== jucer_UnityPluginGUIScript.cs ================== static const unsigned char temp_binary_data_55[] = +"#if UNITY_EDITOR\n" +"\n" +"using UnityEditor;\n" +"using UnityEngine;\n" +"\n" +"using System.Collections.Generic;\n" +"using System.Runtime.InteropServices;\n" +"\n" +"public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI\n" +"{\n" +" public override string Name { get { return \"%%plugin_name%%\"; } }\n" +" public override string Description { get { return \"%%plugin_description%%\"; } }\n" +" public override string Vendor { get { return \"%%plugin_vendor%%\"; } }\n" +"\n" +" //==============================================================================\n" +"\t[DllImport(\"%%plugin_name%%\")] static extern System.IntPtr getRenderCallback();\n" +"\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unityInitialiseTexture (int id, System.IntPtr texture, int width, int height);\n" +"\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unityMouseDown (int id, float x, float y, EventModifiers mods, int button);\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unityMouseDrag (int id, float x, float y, EventModifiers mods, int button);\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unityMouseUp (int id, float x, float y, EventModifiers mods);\n" +"\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unityKeyEvent (int id, KeyCode code, EventModifiers mods, string name);\n" +"\n" +" [DllImport(\"%%plugin_name%%\")] static extern void unitySetScreenBounds (int id, float x, float y, float w, float h);\n" +"\n" +" //==============================================================================\n" +" private class PluginGUIInstance\n" +" {\n" +" public PluginGUIInstance (ref IAudioEffectPlugin plugin, int id)\n" +" {\n" +" instanceID = id;\n" +"\n" +" float[] arr;\n" +" plugin.GetFloatBuffer (\"Editor\", out arr, 1);\n" +" hasEditor = (arr[0] > 0.0f);\n" +" }\n" +"\n" +" public void repaint (Rect r)\n" +" { \n" +" Vector2 newScreenPosition = GUIUtility.GUIToScreenPoint (r.position);\n" +"\n" +" if (bounds != r \n" +" || screenPosition != newScreenPosition)\n" +" {\n" +" screenPosition = newScreenPosition;\n" +" bounds = r;\n" +"\n" +" unitySetScreenBounds (instanceID, screenPosition.x, screenPosition.y, bounds.width, bounds.height);\n" +" setupTexture();\n" +" }\n" +"\n" +"\t\t\tGL.IssuePluginEvent (getRenderCallback(), instanceID);\n" +"\n" +" texture.SetPixels32 (pixels);\n" +" texture.Apply();\n" +"\n" +" EditorGUI.DrawPreviewTexture (bounds, texture);\n" +" }\n" +"\n" +" public bool handleMouseEvent (EventType eventType)\n" +" {\n" +" Vector2 mousePos = Event.current.mousePosition;\n" +" EventModifiers mods = Event.current.modifiers;\n" +"\n" +" if (! bounds.Contains (mousePos))\n" +" return false;\n" +"\n" +" Vector2 relativePos = new Vector2 (mousePos.x - bounds.x, mousePos.y - bounds.y);\n" +"\n" +" if (eventType == EventType.MouseDown) \n" +" {\n" +" unityMouseDown (instanceID, relativePos.x, relativePos.y, mods, Event.current.button);\n" +" GUIUtility.hotControl = GUIUtility.GetControlID (FocusType.Passive);\n" +" }\n" +" else if (eventType == EventType.MouseUp)\n" +" {\n" +" unityMouseUp (instanceID, relativePos.x, relativePos.y, mods);\n" +" GUIUtility.hotControl = 0;\n" +" }\n" +" else if (eventType == EventType.MouseDrag) \n" +" {\n" +" unityMouseDrag (instanceID, relativePos.x, relativePos.y, mods, Event.current.button);\n" +" }\n" +"\n" +" Event.current.Use();\n" +"\n" +" return true;\n" +" }\n" +"\n" +" public void handleKeyEvent (EventType eventType)\n" +" {\n" +" if (eventType == EventType.KeyDown)\n" +" {\n" +" KeyCode code = Event.current.keyCode;\n" +"\n" +" if (code == KeyCode.None)\n" +" return;\n" +"\n" +" EventModifiers mods = Event.current.modifiers;\n" +"\n" +" unityKeyEvent (instanceID, code, mods, code.ToString());\n" +" }\n" +" }\n" +"\n" +" private void setupTexture()\n" +" {\n" +" if (pixelHandle.IsAllocated)\n" +" pixelHandle.Free();\n" +"\n" +" texture = new Texture2D ((int) bounds.width, (int) bounds.height, TextureFormat.ARGB32, false);\n" +"\n" +" pixels = texture.GetPixels32();\n" +" pixelHandle = GCHandle.Alloc (pixels, GCHandleType.Pinned);\n" +"\n" +" unityInitialiseTexture (instanceID, pixelHandle.AddrOfPinnedObject(), texture.width, texture.height);\n" +" }\n" +"\n" +" public int instanceID = -1;\n" +" public bool hasEditor;\n" +"\n" +" private Vector2 screenPosition;\n" +" private Rect bounds;\n" +"\n" +" private Texture2D texture;\n" +" private Color32[] pixels;\n" +" private GCHandle pixelHandle;\n" +" }\n" +" List guis = new List();\n" +"\n" +" private PluginGUIInstance getGUIInstanceForPlugin (ref IAudioEffectPlugin plugin)\n" +" {\n" +" float[] idArray;\n" +" plugin.GetFloatBuffer (\"ID\", out idArray, 1);\n" +"\n" +" int id = (int) idArray[0];\n" +"\n" +" for (int i = 0; i < guis.Count; ++i)\n" +" {\n" +" if (guis[i].instanceID == id)\n" +" return guis[i];\n" +" }\n" +"\n" +" PluginGUIInstance newInstance = new PluginGUIInstance (ref plugin, id);\n" +" guis.Add (newInstance);\n" +"\n" +" return guis[guis.Count - 1];\n" +" }\n" +"\n" +" //==============================================================================\n" +" public override bool OnGUI (IAudioEffectPlugin plugin)\n" +" {\n" +" PluginGUIInstance guiInstance = getGUIInstanceForPlugin (ref plugin);\n" +"\n" +" if (! guiInstance.hasEditor)\n" +" return true;\n" +"\n" +" float[] arr;\n" +" plugin.GetFloatBuffer (\"Size\", out arr, 6);\n" +"\n" +" Rect r = GUILayoutUtility.GetRect (arr[0], arr[1],\n" +" new GUILayoutOption[] { GUILayout.MinWidth (arr[2]), GUILayout.MinHeight (arr[3]),\n" +" GUILayout.MaxWidth (arr[4]), GUILayout.MaxHeight (arr[5]) });\n" +"\n" +" int controlID = GUIUtility.GetControlID (FocusType.Passive);\n" +" Event currentEvent = Event.current;\n" +" EventType currentEventType = currentEvent.GetTypeForControl (controlID);\n" +"\n" +" if (currentEventType == EventType.Repaint)\n" +" guiInstance.repaint (r);\n" +" else if (currentEvent.isMouse)\n" +" guiInstance.handleMouseEvent (currentEventType);\n" +" else if (currentEvent.isKey)\n" +" guiInstance.handleKeyEvent (currentEventType);\n" +"\n" +" return false;\n" +" }\n" +"}\n" +"\n" +"#endif\n"; + +const char* jucer_UnityPluginGUIScript_cs = (const char*) temp_binary_data_55; + +//================== colourscheme_dark.xml ================== +static const unsigned char temp_binary_data_56[] = "\r\n" "\r\n" "\r\n" @@ -7293,10 +7490,10 @@ static const unsigned char temp_binary_data_55[] = " \r\n" "\r\n"; -const char* colourscheme_dark_xml = (const char*) temp_binary_data_55; +const char* colourscheme_dark_xml = (const char*) temp_binary_data_56; //================== colourscheme_light.xml ================== -static const unsigned char temp_binary_data_56[] = +static const unsigned char temp_binary_data_57[] = "\r\n" "\r\n" "\r\n" @@ -7321,16 +7518,16 @@ static const unsigned char temp_binary_data_56[] = " \r\n" "\r\n"; -const char* colourscheme_light_xml = (const char*) temp_binary_data_56; +const char* colourscheme_light_xml = (const char*) temp_binary_data_57; //================== nothingtoseehere.txt ================== -static const unsigned char temp_binary_data_57[] = +static const unsigned char temp_binary_data_58[] = "VUEtMTk3NTkzMTgtNA=="; -const char* nothingtoseehere_txt = (const char*) temp_binary_data_57; +const char* nothingtoseehere_txt = (const char*) temp_binary_data_58; //================== offlinepage.html ================== -static const unsigned char temp_binary_data_58[] = +static const unsigned char temp_binary_data_59[] = "\n" " \n" " \n" @@ -7374,10 +7571,10 @@ static const unsigned char temp_binary_data_58[] = " \n" ""; -const char* offlinepage_html = (const char*) temp_binary_data_58; +const char* offlinepage_html = (const char*) temp_binary_data_59; //================== projucer_EULA.txt ================== -static const unsigned char temp_binary_data_59[] = +static const unsigned char temp_binary_data_60[] = "\r\n" "IMPORTANT NOTICE: PLEASE READ CAREFULLY BEFORE INSTALLING THE SOFTWARE:\r\n" "\r\n" @@ -7541,10 +7738,10 @@ static const unsigned char temp_binary_data_59[] = "\r\n" "10.6. Please note that this License, its subject matter and its formation, are governed by English law. You and we both agree to that the courts of England and Wales will have exclusive jurisdiction.\r\n"; -const char* projucer_EULA_txt = (const char*) temp_binary_data_59; +const char* projucer_EULA_txt = (const char*) temp_binary_data_60; //================== RecentFilesMenuTemplate.nib ================== -static const unsigned char temp_binary_data_60[] = +static const unsigned char temp_binary_data_61[] = { 98,112,108,105,115,116,48,48,212,0,1,0,2,0,3,0,4,0,5,0,6,1,53,1,54,88,36,118,101,114,115,105,111,110,88,36,111,98,106,101,99,116,115,89,36,97,114,99,104,105,118,101,114,84,36,116,111,112,18,0,1,134,160,175,16,74,0,7,0,8,0,31,0,35,0,36,0,42,0,46,0,50, 0,53,0,57,0,74,0,77,0,78,0,86,0,87,0,97,0,112,0,113,0,114,0,119,0,120,0,121,0,124,0,128,0,129,0,132,0,143,0,144,0,145,0,149,0,153,0,162,0,163,0,164,0,169,0,173,0,180,0,181,0,182,0,185,0,192,0,193,0,200,0,201,0,208,0,209,0,216,0,217,0,224,0,225,0,226, 0,229,0,230,0,232,0,249,1,11,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,47,1,50,85,36,110,117,108,108,219,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0, @@ -7581,13 +7778,14 @@ static const unsigned char temp_binary_data_60[] = 7,157,7,159,7,161,7,163,7,165,7,167,7,169,7,171,7,173,7,175,7,177,7,179,7,181,7,190,7,192,7,225,7,227,7,229,7,231,7,233,7,235,7,237,7,239,7,241,7,243,7,245,7,247,7,249,7,251,7,253,7,255,8,2,8,5,8,8,8,11,8,14,8,17,8,20,8,23,8,26,8,29,8,32,8,35,8,38,8, 41,8,44,8,53,8,55,8,56,8,65,8,67,8,68,8,77,8,92,8,97,8,115,8,120,8,134,0,0,0,0,0,0,2,2,0,0,0,0,0,0,1,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,136,0,0 }; -const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_60; +const char* RecentFilesMenuTemplate_nib = (const char*) temp_binary_data_61; const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) { unsigned int hash = 0; - if (resourceNameUTF8 != 0) + + if (resourceNameUTF8 != nullptr) while (*resourceNameUTF8 != 0) hash = 31 * hash + (unsigned int) *resourceNameUTF8++; @@ -7635,8 +7833,8 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) case 0x28d496ad: numBytes = 1233; return jucer_InlineComponentTemplate_h; case 0x8905395b: numBytes = 473; return jucer_MainConsoleAppTemplate_cpp; case 0x5e5ea047: numBytes = 2021; return jucer_MainTemplate_NoWindow_cpp; - case 0xda2391f8: numBytes = 4012; return jucer_MainTemplate_SimpleWindow_cpp; - case 0x400bc026: numBytes = 3972; return jucer_MainTemplate_Window_cpp; + case 0xda2391f8: numBytes = 4127; return jucer_MainTemplate_SimpleWindow_cpp; + case 0x400bc026: numBytes = 4127; return jucer_MainTemplate_Window_cpp; case 0xf4842835: numBytes = 1491; return jucer_NewComponentTemplate_cpp; case 0xe7bf237a: numBytes = 646; return jucer_NewComponentTemplate_h; case 0x02a2a077: numBytes = 278; return jucer_NewCppFileTemplate_cpp; @@ -7648,6 +7846,7 @@ const char* getNamedResource (const char* resourceNameUTF8, int& numBytes) case 0xbc050edc: numBytes = 4926; return jucer_PIPAudioProcessorTemplate_h; case 0xf4ca9e9a: numBytes = 2447; return jucer_PIPMain_cpp; case 0x0b16e320: numBytes = 517; return jucer_PIPTemplate_h; + case 0xcd472557: numBytes = 6433; return jucer_UnityPluginGUIScript_cs; case 0x763d39dc: numBytes = 1050; return colourscheme_dark_xml; case 0xe8b08520: numBytes = 1050; return colourscheme_light_xml; case 0x938e96ec: numBytes = 20; return nothingtoseehere_txt; @@ -7718,6 +7917,7 @@ const char* namedResourceList[] = "jucer_PIPAudioProcessorTemplate_h", "jucer_PIPMain_cpp", "jucer_PIPTemplate_h", + "jucer_UnityPluginGUIScript_cs", "colourscheme_dark_xml", "colourscheme_light_xml", "nothingtoseehere_txt", @@ -7783,6 +7983,7 @@ const char* originalFilenames[] = "jucer_PIPAudioProcessorTemplate.h", "jucer_PIPMain.cpp", "jucer_PIPTemplate.h", + "jucer_UnityPluginGUIScript.cs", "colourscheme_dark.xml", "colourscheme_light.xml", "nothingtoseehere.txt", diff --git a/extras/Projucer/JuceLibraryCode/BinaryData.h b/extras/Projucer/JuceLibraryCode/BinaryData.h index 79fa6ece..cad7d24f 100644 --- a/extras/Projucer/JuceLibraryCode/BinaryData.h +++ b/extras/Projucer/JuceLibraryCode/BinaryData.h @@ -135,10 +135,10 @@ namespace BinaryData const int jucer_MainTemplate_NoWindow_cppSize = 2021; extern const char* jucer_MainTemplate_SimpleWindow_cpp; - const int jucer_MainTemplate_SimpleWindow_cppSize = 4012; + const int jucer_MainTemplate_SimpleWindow_cppSize = 4127; extern const char* jucer_MainTemplate_Window_cpp; - const int jucer_MainTemplate_Window_cppSize = 3972; + const int jucer_MainTemplate_Window_cppSize = 4127; extern const char* jucer_NewComponentTemplate_cpp; const int jucer_NewComponentTemplate_cppSize = 1491; @@ -173,6 +173,9 @@ namespace BinaryData extern const char* jucer_PIPTemplate_h; const int jucer_PIPTemplate_hSize = 517; + extern const char* jucer_UnityPluginGUIScript_cs; + const int jucer_UnityPluginGUIScript_csSize = 6433; + extern const char* colourscheme_dark_xml; const int colourscheme_dark_xmlSize = 1050; @@ -192,7 +195,7 @@ namespace BinaryData const int RecentFilesMenuTemplate_nibSize = 2842; // Number of elements in the namedResourceList and originalFileNames arrays. - const int namedResourceListSize = 61; + const int namedResourceListSize = 62; // Points to the start of a list of resource names. extern const char* namedResourceList[]; diff --git a/extras/Projucer/JuceLibraryCode/JuceHeader.h b/extras/Projucer/JuceLibraryCode/JuceHeader.h index c62718af..b91e805c 100644 --- a/extras/Projucer/JuceLibraryCode/JuceHeader.h +++ b/extras/Projucer/JuceLibraryCode/JuceHeader.h @@ -35,7 +35,8 @@ namespace ProjectInfo { const char* const projectName = "Projucer"; - const char* const versionString = "5.3.2"; - const int versionNumber = 0x50302; + const char* const companyName = "ROLI Ltd."; + const char* const versionString = "5.4.1"; + const int versionNumber = 0x50401; } #endif diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer index 9444f710..86b9720c 100644 --- a/extras/Projucer/Projucer.jucer +++ b/extras/Projucer/Projucer.jucer @@ -1,14 +1,14 @@ @@ -67,7 +67,7 @@ - + + @@ -606,6 +608,8 @@ file="Source/ProjectSaving/jucer_ResourceFile.cpp"/> + - - + @@ -717,7 +719,8 @@ resource="0" file="Source/Wizards/jucer_TemplateThumbnailsComponent.h"/> - + diff --git a/extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h b/extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h index 97832474..ac8a48e5 100644 --- a/extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h +++ b/extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h @@ -35,11 +35,9 @@ public: EditorColourSchemeWindowComponent() { if (getAppSettings().monospacedFontNames.size() == 0) - content.reset (new AppearanceEditor::FontScanPanel()); + changeContent (new AppearanceEditor::FontScanPanel()); else - content.reset (new AppearanceEditor::EditorPanel()); - - changeContent (content.get()); + changeContent (new AppearanceEditor::EditorPanel()); } void paint (Graphics& g) override @@ -115,9 +113,9 @@ private: const auto width = font.getStringWidth ("...."); return width == font.getStringWidth ("WWWW") - && width == font.getStringWidth ("0000") - && width == font.getStringWidth ("1111") - && width == font.getStringWidth ("iiii"); + && width == font.getStringWidth ("0000") + && width == font.getStringWidth ("1111") + && width == font.getStringWidth ("iiii"); } StringArray fontsToScan, fontsFound; diff --git a/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h b/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h index a6c9a7c5..29a71d3c 100644 --- a/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h +++ b/extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h @@ -26,40 +26,63 @@ #pragma once +#include "../../Utility/UI/PropertyComponents/jucer_LabelPropertyComponent.h" //============================================================================== class GlobalPathsWindowComponent : public Component, - private Timer + private Timer, + private Value::Listener { public: GlobalPathsWindowComponent() { - addLabelsAndSetProperties(); - - addAndMakeVisible (info); - info.setInfoToDisplay ("Use this dropdown to set the global paths for different OSes. " - "\nN.B. These paths are stored locally and will only be used when " - "saving a project on this machine. Other machines will have their own " - "locally stored paths."); - - addAndMakeVisible (osSelector); - osSelector.addItem ("OSX", 1); - osSelector.addItem ("Windows", 2); - osSelector.addItem ("Linux", 3); + addChildComponent (rescanJUCEPathButton); + rescanJUCEPathButton.onClick = [this] + { + ProjucerApplication::getApp().rescanJUCEPathModules(); + lastJUCEModulePath = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get(); + }; - osSelector.onChange = [this] + addChildComponent (rescanUserPathButton); + rescanUserPathButton.onClick = [this] { - addLabelsAndSetProperties(); - updateFilePathPropertyComponents(); + ProjucerApplication::getApp().rescanUserPathModules(); + lastUserModulePath = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS()).get(); }; + addAndMakeVisible (resetToDefaultsButton); + resetToDefaultsButton.onClick = [this] { resetCurrentOSPathsToDefaults(); }; + + addAndMakeVisible (propertyViewport); + propertyViewport.setViewedComponent (&propertyGroup, false); + auto os = TargetOS::getThisOS(); - if (os == TargetOS::osx) osSelector.setSelectedId (1); - else if (os == TargetOS::windows) osSelector.setSelectedId (2); - else if (os == TargetOS::linux) osSelector.setSelectedId (3); + if (os == TargetOS::osx) selectedOSValue = "osx"; + else if (os == TargetOS::windows) selectedOSValue = "windows"; + else if (os == TargetOS::linux) selectedOSValue = "linux"; + + selectedOSValue.addListener (this); + + buildProps(); - updateFilePathPropertyComponents(); + lastJUCEModulePath = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get(); + lastUserModulePath = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS()).get(); + } + + ~GlobalPathsWindowComponent() + { + auto juceValue = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()); + auto userValue = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS()); + + auto jucePathNeedsScanning = (! juceValue.isUsingDefault() && juceValue.get() != lastJUCEModulePath); + auto userPathNeedsScanning = (! userValue.isUsingDefault() && userValue.get() != lastUserModulePath); + + if (jucePathNeedsScanning) + ProjucerApplication::getApp().rescanJUCEPathModules(); + + if (userPathNeedsScanning) + ProjucerApplication::getApp().rescanUserPathModules(); } void paint (Graphics& g) override @@ -77,43 +100,31 @@ public: { auto b = getLocalBounds().reduced (10); - auto topSlice = b.removeFromTop (25); - osSelector.setSize (200, 25); - osSelector.setCentrePosition (topSlice.getCentre()); + auto buttonBounds = b.removeFromBottom (50); - info.setBounds (osSelector.getBounds().withWidth (osSelector.getHeight()).translated ((osSelector.getWidth() + 5), 0).reduced (2)); + rescanJUCEPathButton.setBounds (buttonBounds.removeFromLeft (150).reduced (5, 10)); + rescanUserPathButton.setBounds (buttonBounds.removeFromLeft (150).reduced (5, 10)); - int labelIndex = 0; - bool isFirst = true; + resetToDefaultsButton.setBounds (buttonBounds.removeFromRight (150).reduced (5, 10)); - for (auto* pathComp : pathPropertyComponents) - { - if (pathComp == nullptr) - { - b.removeFromTop (15); - pathPropertyLabels.getUnchecked (labelIndex++)->setBounds (b.removeFromTop (20)); - b.removeFromTop (20); - } - else - { - if (isFirst) - b.removeFromTop (20); - - pathComp->setBounds (b.removeFromTop (pathComp->getPreferredHeight())); - b.removeFromTop (5); - } - - isFirst = false; - } + propertyGroup.updateSize (0, 0, getWidth() - 20 - propertyViewport.getScrollBarThickness()); + propertyViewport.setBounds (b); } void highlightJUCEPath() { - if (! isTimerRunning() && isSelectedOSThisOS()) - { - if (auto* jucePathComp = pathPropertyComponents.getFirst()) - boundsToHighlight = jucePathComp->getBounds(); + if (isTimerRunning() || ! isSelectedOSThisOS()) + return; + + PropertyComponent* jucePathPropertyComponent = nullptr; + + for (auto* prop : propertyGroup.properties) + if (prop->getName() == "Path to JUCE") + jucePathPropertyComponent = prop; + if (jucePathPropertyComponent != nullptr) + { + boundsToHighlight = getLocalArea (&propertyGroup, jucePathPropertyComponent->getBounds()); flashAlpha = 0.0f; hasFlashed = false; @@ -122,16 +133,6 @@ public: } private: - OwnedArray @@ -116,7 +107,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;_CONSOLE;WIN32;_WINDOWS;NDEBUG;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -126,6 +117,7 @@ Level4 true true + /w44265 /w45038 /w44062 %(AdditionalOptions) true stdcpp14 @@ -169,6 +161,9 @@ true + + true + true @@ -499,6 +494,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -523,6 +584,9 @@ true + + true + true @@ -616,6 +680,9 @@ true + + true + true @@ -625,9 +692,15 @@ true + + true + true + + true + true @@ -682,6 +755,9 @@ true + + true + true @@ -1021,6 +1097,9 @@ true + + true + true @@ -1408,10 +1487,13 @@ true - + true - + + true + + true @@ -1962,6 +2044,7 @@ + @@ -2110,13 +2193,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -2125,6 +2265,7 @@ + @@ -2136,6 +2277,7 @@ + @@ -2176,6 +2318,7 @@ + @@ -2213,6 +2356,7 @@ + @@ -2222,6 +2366,7 @@ + @@ -2231,6 +2376,7 @@ + @@ -2363,6 +2509,7 @@ + @@ -2455,8 +2602,9 @@ - + + @@ -2587,6 +2735,7 @@ + @@ -2642,6 +2791,7 @@ + @@ -2655,6 +2805,11 @@ + + + + + diff --git a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters index d8d4e2f0..38bcba2a 100644 --- a/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters +++ b/extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters @@ -113,6 +113,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -326,6 +371,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -460,6 +508,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -799,6 +850,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -826,6 +943,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -937,6 +1057,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -946,9 +1069,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -1003,6 +1132,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1369,6 +1501,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1774,12 +1909,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2433,6 +2571,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2877,6 +3018,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2895,9 +3210,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2922,6 +3234,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2955,6 +3270,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -3075,6 +3393,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -3186,6 +3507,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -3213,6 +3537,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -3240,6 +3567,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3636,6 +3966,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3912,12 +4245,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -4308,6 +4644,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4473,6 +4812,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4508,6 +4850,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_blocks_basics\littlefoot diff --git a/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h b/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h index 059f7a28..7d4e58bc 100644 --- a/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h +++ b/extras/UnitTestRunner/JuceLibraryCode/AppConfig.h @@ -73,6 +73,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -109,10 +113,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -197,6 +197,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -205,6 +209,10 @@ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + #define JUCE_STRICT_REFCOUNTEDPOINTER 1 +#endif + //============================================================================== // juce_dsp flags: @@ -246,6 +254,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -273,6 +285,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -290,6 +306,11 @@ #ifndef JUCE_USE_CAMERA //#define JUCE_USE_CAMERA 0 #endif + +#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 +#endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h b/extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h index 1b515f86..b4cfd548 100644 --- a/extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h +++ b/extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h @@ -45,6 +45,7 @@ namespace ProjectInfo { const char* const projectName = "UnitTestRunner"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/UnitTestRunner/Source/Main.cpp b/extras/UnitTestRunner/Source/Main.cpp index 41511a3c..67c0d9f5 100644 --- a/extras/UnitTestRunner/Source/Main.cpp +++ b/extras/UnitTestRunner/Source/Main.cpp @@ -48,14 +48,40 @@ class ConsoleUnitTestRunner : public UnitTestRunner } }; + //============================================================================== -int main() +int main (int argc, char **argv) { ConsoleLogger logger; Logger::setCurrentLogger (&logger); ConsoleUnitTestRunner runner; - runner.runAllTests(); + + ArgumentList args (argc, argv); + + if (args.size() == 0) + { + runner.runAllTests(); + } + else + { + if (args.containsOption ("--help|-h")) + { + std::cout << argv[0] << " [--help|-h] [--category category] [--list-categories]" << std::endl; + return 0; + } + + if (args.containsOption ("--list-categories")) + { + for (auto& category : UnitTest::getAllCategories()) + std::cout << category << std::endl; + + return 0; + } + + if (args.containsOption ("--category")) + runner.runTestsInCategory (args.getArgumentAfterOption ("--category").text); + } Logger::setCurrentLogger (nullptr); diff --git a/extras/UnitTestRunner/UnitTestRunner.jucer b/extras/UnitTestRunner/UnitTestRunner.jucer index 36659769..672f68ef 100644 --- a/extras/UnitTestRunner/UnitTestRunner.jucer +++ b/extras/UnitTestRunner/UnitTestRunner.jucer @@ -1,7 +1,7 @@ @@ -9,7 +9,7 @@ - - + - + diff --git a/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj b/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj index 97696d4e..e6bc8bfa 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj +++ b/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj @@ -15,8 +15,6 @@ {B636B53B-C44B-1E04-8668-D61B3900BAA4} - v141 - 10.0.16299.0 false false v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -34,8 +31,7 @@ false true v141 - v141 - 10.0.16299.0 + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) @@ -44,10 +40,6 @@ Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform"/> - - v141 - 10.0.16299.0 - <_ProjectFileVersion>10.0.30319.1 .lib @@ -59,8 +51,6 @@ $(Platform)\$(Configuration)\Static Library\ juce_dll true - v141 - 10.0.16299.0 @@ -74,7 +64,7 @@ Disabled ProgramDatabase ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DLL_BUILD=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;_LIB;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DLL_BUILD=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;_LIB;%(PreprocessorDefinitions) MultiThreadedDebugDLL true @@ -115,7 +105,7 @@ Full ..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories) - _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DLL_BUILD=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;_LIB;%(PreprocessorDefinitions) + _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DLL_BUILD=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=1.0.0;JUCE_APP_VERSION_HEX=0x10000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;_LIB;%(PreprocessorDefinitions) MultiThreadedDLL true @@ -154,6 +144,9 @@ true + + true + true @@ -484,6 +477,72 @@ true + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + + + true + true @@ -508,6 +567,9 @@ true + + true + true @@ -583,6 +645,9 @@ true + + true + true @@ -592,9 +657,15 @@ true + + true + true + + true + true @@ -649,6 +720,9 @@ true + + true + true @@ -931,6 +1005,9 @@ true + + true + true @@ -1318,10 +1395,13 @@ true - + true - + + true + + true @@ -1814,6 +1894,7 @@ + @@ -1962,13 +2043,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - @@ -1977,6 +2115,7 @@ + @@ -1988,6 +2127,7 @@ + @@ -2005,6 +2145,7 @@ + @@ -2042,6 +2183,7 @@ + @@ -2051,6 +2193,7 @@ + @@ -2060,6 +2203,7 @@ + @@ -2159,6 +2303,7 @@ + @@ -2251,8 +2396,9 @@ - + + @@ -2383,6 +2529,7 @@ + @@ -2423,6 +2570,7 @@ + @@ -2436,6 +2584,11 @@ + + + + + diff --git a/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj.filters b/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj.filters index f8c34475..627957d5 100644 --- a/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj.filters +++ b/extras/WindowsDLL/Builds/VisualStudio2017/WindowsDLL_StaticLibrary.vcxproj.filters @@ -98,6 +98,51 @@ {86737735-F6BA-F64A-5EC7-5C9F36755F79} + + {4DC60E78-BBC0-B540-63A2-37E14ABBEF09} + + + {80C72173-A1E1-C3C5-9288-B889CE2EAFEA} + + + {4138B955-AA0B-FA86-DBF9-404CAFFFA866} + + + {2B4166B8-F470-F07C-4F51-D2DAAAECBB18} + + + {9C295115-C0CD-3129-1C4D-FB53299B23FB} + + + {65526A8B-3447-9DF0-FD5D-00D111126027} + + + {A54A1F5C-F32F-F97B-9E8A-69922B770A54} + + + {B90A44F3-B62D-B5C0-81A2-683D2650AEE6} + + + {DAF30656-5915-0E45-C4E4-54439617D525} + + + {9266EA90-6A0A-5DDB-9CB7-966BEF03BA5C} + + + {9C713CBA-A9E2-5F4E-F83C-2CAB8533913C} + + + {63571A07-9AA3-5BB0-1103-0B42A2E6BC9E} + + + {314F43F2-BC8F-B464-EAE7-86B9675454E9} + + + {874C5D0C-6D29-68EE-38BB-26200B56BC89} + + + {86BAA7A7-DC50-35B6-910B-932AEAF257F2} + {6B7BE34D-1BC1-C7B9-111F-C55CA8250943} @@ -272,6 +317,9 @@ {E4EA47E5-B41C-2A19-1783-7E9104096ECD} + + {B331BC33-9770-3DB5-73F2-BC2469ECCF7F} + {46A17AC9-0BFF-B5CE-26D6-B9D1992C88AC} @@ -373,6 +421,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -712,6 +763,72 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -739,6 +856,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -832,6 +952,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -841,9 +964,15 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -898,6 +1027,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -1204,6 +1336,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -1609,12 +1744,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -2187,6 +2325,9 @@ JUCE Modules\juce_audio_basics\buffers + + JUCE Modules\juce_audio_basics\buffers + JUCE Modules\juce_audio_basics\buffers @@ -2631,6 +2772,180 @@ JUCE Modules\juce_audio_processors\format + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\source + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base\thread\include + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\gui + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\common + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst\hosting + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk\source\vst + JUCE Modules\juce_audio_processors\format_types @@ -2649,9 +2964,6 @@ JUCE Modules\juce_audio_processors\format_types - - JUCE Modules\juce_audio_processors\format_types - JUCE Modules\juce_audio_processors\format_types @@ -2676,6 +2988,9 @@ JUCE Modules\juce_audio_processors\processors + + JUCE Modules\juce_audio_processors\processors + JUCE Modules\juce_audio_processors\processors @@ -2709,6 +3024,9 @@ JUCE Modules\juce_audio_processors\utilities + + JUCE Modules\juce_audio_processors\utilities + JUCE Modules\juce_audio_processors @@ -2760,6 +3078,9 @@ JUCE Modules\juce_core\containers + + JUCE Modules\juce_core\containers + JUCE Modules\juce_core\containers @@ -2871,6 +3192,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\memory + JUCE Modules\juce_core\memory @@ -2898,6 +3222,9 @@ JUCE Modules\juce_core\memory + + JUCE Modules\juce_core\misc + JUCE Modules\juce_core\misc @@ -2925,6 +3252,9 @@ JUCE Modules\juce_core\native + + JUCE Modules\juce_core\native + JUCE Modules\juce_core\native @@ -3222,6 +3552,9 @@ JUCE Modules\juce_events\interprocess + + JUCE Modules\juce_events\interprocess + JUCE Modules\juce_events\messages @@ -3498,12 +3831,15 @@ JUCE Modules\juce_gui_basics\components - - JUCE Modules\juce_gui_basics\components - JUCE Modules\juce_gui_basics\components + + JUCE Modules\juce_gui_basics\desktop + + + JUCE Modules\juce_gui_basics\desktop + JUCE Modules\juce_gui_basics\drawables @@ -3894,6 +4230,9 @@ JUCE Modules\juce_gui_extra\embedding + + JUCE Modules\juce_gui_extra\embedding + JUCE Modules\juce_gui_extra\embedding @@ -4014,6 +4353,9 @@ JUCE Modules\juce_video\native + + JUCE Modules\juce_video\native + JUCE Modules\juce_video\native @@ -4049,6 +4391,21 @@ JUCE Modules\juce_audio_formats\codecs\oggvorbis + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\base + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\pluginterfaces + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK\public.sdk + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + + + JUCE Modules\juce_audio_processors\format_types\VST3_SDK + JUCE Modules\juce_graphics\image_formats\jpglib diff --git a/extras/WindowsDLL/JuceLibraryCode/AppConfig.h b/extras/WindowsDLL/JuceLibraryCode/AppConfig.h index 8510bde8..43dadbd2 100644 --- a/extras/WindowsDLL/JuceLibraryCode/AppConfig.h +++ b/extras/WindowsDLL/JuceLibraryCode/AppConfig.h @@ -68,6 +68,10 @@ //============================================================================== // juce_audio_devices flags: +#ifndef JUCE_USE_WINRT_MIDI + //#define JUCE_USE_WINRT_MIDI 0 +#endif + #ifndef JUCE_ASIO //#define JUCE_ASIO 0 #endif @@ -104,10 +108,6 @@ //#define JUCE_USE_ANDROID_OPENSLES 0 #endif -#ifndef JUCE_USE_WINRT_MIDI - //#define JUCE_USE_WINRT_MIDI 0 -#endif - #ifndef JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS //#define JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS 0 #endif @@ -192,6 +192,10 @@ //#define JUCE_USE_CURL 0 #endif +#ifndef JUCE_LOAD_CURL_SYMBOLS_LAZILY + //#define JUCE_LOAD_CURL_SYMBOLS_LAZILY 0 +#endif + #ifndef JUCE_CATCH_UNHANDLED_EXCEPTIONS //#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1 #endif @@ -200,6 +204,10 @@ //#define JUCE_ALLOW_STATIC_NULL_VARIABLES 1 #endif +#ifndef JUCE_STRICT_REFCOUNTEDPOINTER + //#define JUCE_STRICT_REFCOUNTEDPOINTER 0 +#endif + //============================================================================== // juce_events flags: @@ -218,6 +226,10 @@ //#define JUCE_USE_DIRECTWRITE 1 #endif +#ifndef JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING + //#define JUCE_DISABLE_COREGRAPHICS_FONT_SMOOTHING 0 +#endif + //============================================================================== // juce_gui_basics flags: @@ -245,6 +257,10 @@ //#define JUCE_USE_XCURSOR 1 #endif +#ifndef JUCE_WIN_PER_MONITOR_DPI_AWARE + //#define JUCE_WIN_PER_MONITOR_DPI_AWARE 1 +#endif + //============================================================================== // juce_gui_extra flags: @@ -262,6 +278,11 @@ #ifndef JUCE_USE_CAMERA //#define JUCE_USE_CAMERA 0 #endif + +#ifndef JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME + //#define JUCE_SYNC_VIDEO_VOLUME_WITH_OS_MEDIA_VOLUME 1 +#endif + //============================================================================== #ifndef JUCE_STANDALONE_APPLICATION #if defined(JucePlugin_Name) && defined(JucePlugin_Build_Standalone) diff --git a/extras/WindowsDLL/JuceLibraryCode/JuceHeader.h b/extras/WindowsDLL/JuceLibraryCode/JuceHeader.h index 793d2cb2..c7101cce 100644 --- a/extras/WindowsDLL/JuceLibraryCode/JuceHeader.h +++ b/extras/WindowsDLL/JuceLibraryCode/JuceHeader.h @@ -40,6 +40,7 @@ namespace ProjectInfo { const char* const projectName = "WindowsDLL"; + const char* const companyName = "ROLI Ltd."; const char* const versionString = "1.0.0"; const int versionNumber = 0x10000; } diff --git a/extras/WindowsDLL/WindowsDLL.jucer b/extras/WindowsDLL/WindowsDLL.jucer index adac1845..2ac24556 100644 --- a/extras/WindowsDLL/WindowsDLL.jucer +++ b/extras/WindowsDLL/WindowsDLL.jucer @@ -1,7 +1,7 @@ diff --git a/modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp b/modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp index ec53fabb..ba3c5717 100644 --- a/modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp +++ b/modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp @@ -64,9 +64,9 @@ void ThreadedAnalyticsDestination::stopAnalyticsThread (int timeout) saveUnloggedEvents (dispatcher.eventQueue); } -ThreadedAnalyticsDestination::EventDispatcher::EventDispatcher (const String& threadName, +ThreadedAnalyticsDestination::EventDispatcher::EventDispatcher (const String& dispatcherThreadName, ThreadedAnalyticsDestination& destination) - : Thread (threadName), + : Thread (dispatcherThreadName), parent (destination) {} diff --git a/modules/juce_analytics/juce_analytics.h b/modules/juce_analytics/juce_analytics.h index 546a3f09..378848af 100644 --- a/modules/juce_analytics/juce_analytics.h +++ b/modules/juce_analytics/juce_analytics.h @@ -35,7 +35,7 @@ ID: juce_analytics vendor: juce - version: 5.3.2 + version: 5.4.1 name: JUCE analytics classes description: Classes to collect analytics and send to destinations website: http://www.juce.com/juce diff --git a/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp b/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp new file mode 100644 index 00000000..17959493 --- /dev/null +++ b/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp @@ -0,0 +1,79 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 5 End-User License + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the + 27th April 2017). + + End User License Agreement: www.juce.com/juce-5-licence + Privacy Policy: www.juce.com/juce-5-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +AudioProcessLoadMeasurer::AudioProcessLoadMeasurer() {} +AudioProcessLoadMeasurer::~AudioProcessLoadMeasurer() {} + +void AudioProcessLoadMeasurer::reset() +{ + reset (0, 0); +} + +void AudioProcessLoadMeasurer::reset (double sampleRate, int blockSize) +{ + cpuUsageMs = 0; + xruns = 0; + + if (sampleRate > 0.0 && blockSize > 0) + { + msPerBlock = 1000.0 * blockSize / sampleRate; + timeToCpuScale = (msPerBlock > 0.0) ? (1.0 / msPerBlock) : 0.0; + } + else + { + msPerBlock = 0; + timeToCpuScale = 0; + } +} + +void AudioProcessLoadMeasurer::registerBlockRenderTime (double milliseconds) +{ + const double filterAmount = 0.2; + cpuUsageMs += filterAmount * (milliseconds - cpuUsageMs); + + if (milliseconds > msPerBlock) + ++xruns; +} + +double AudioProcessLoadMeasurer::getLoadAsProportion() const { return jlimit (0.0, 1.0, timeToCpuScale * cpuUsageMs); } +double AudioProcessLoadMeasurer::getLoadAsPercentage() const { return 100.0 * getLoadAsProportion(); } + +int AudioProcessLoadMeasurer::getXRunCount() const { return xruns; } + +AudioProcessLoadMeasurer::ScopedTimer::ScopedTimer (AudioProcessLoadMeasurer& p) + : owner (p), startTime (Time::getMillisecondCounterHiRes()) +{ +} + +AudioProcessLoadMeasurer::ScopedTimer::~ScopedTimer() +{ + owner.registerBlockRenderTime (Time::getMillisecondCounterHiRes() - startTime); +} + +} // namespace juce diff --git a/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h b/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h new file mode 100644 index 00000000..53a3377c --- /dev/null +++ b/modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h @@ -0,0 +1,96 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 5 End-User License + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the + 27th April 2017). + + End User License Agreement: www.juce.com/juce-5-licence + Privacy Policy: www.juce.com/juce-5-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +namespace juce +{ + +//============================================================================== +/** + Maintains an ongoing measurement of the proportion of time which is being + spent inside an audio callback. +*/ +class JUCE_API AudioProcessLoadMeasurer +{ +public: + /** */ + AudioProcessLoadMeasurer(); + + /** Destructor. */ + ~AudioProcessLoadMeasurer(); + + //============================================================================== + /** Resets the state. */ + void reset(); + + /** Resets the counter, in preparation for use with the given sample rate and block size. */ + void reset (double sampleRate, int blockSize); + + /** Returns the current load as a proportion 0 to 1.0 */ + double getLoadAsProportion() const; + + /** Returns the current load as a percentage 0 to 100.0 */ + double getLoadAsPercentage() const; + + /** Returns the number of over- (or under-) runs recorded since the state was reset. */ + int getXRunCount() const; + + //============================================================================== + /** This class measures the time between its construction and destruction and + adds it to an AudioProcessLoadMeasurer. + + e.g. + @code + { + AudioProcessLoadMeasurer::ScopedTimer timer (myProcessLoadMeasurer); + myCallback->doTheCallback(); + } + @endcode + */ + struct JUCE_API ScopedTimer + { + ScopedTimer (AudioProcessLoadMeasurer&); + ~ScopedTimer(); + + private: + AudioProcessLoadMeasurer& owner; + double startTime; + + JUCE_DECLARE_NON_COPYABLE (ScopedTimer) + }; + + /** Can be called manually to add the time of a callback to the stats. + Normally you probably would never call this - it's simpler and more robust to + use a ScopedTimer to measure the time using an RAII pattern. + */ + void registerBlockRenderTime (double millisecondsTaken); + +private: + double cpuUsageMs = 0, timeToCpuScale = 0, msPerBlock = 0; + int xruns = 0; +}; + + +} // namespace juce diff --git a/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp b/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp index 60227f54..952327c7 100644 --- a/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp +++ b/modules/juce_audio_basics/effects/juce_LagrangeInterpolator.cpp @@ -242,6 +242,10 @@ namespace } subSamplePos = pos; + + if (wrap == 0) + return (int) (in - originalIn); + return ((int) (in - originalIn) + wrap) % wrap; } @@ -353,6 +357,10 @@ namespace } subSamplePos = pos; + + if (wrap == 0) + return (int) (in - originalIn); + return ((int) (in - originalIn) + wrap) % wrap; } diff --git a/modules/juce_audio_basics/effects/juce_LinearSmoothedValue.h b/modules/juce_audio_basics/effects/juce_LinearSmoothedValue.h index 80dd6fc0..e586f92e 100644 --- a/modules/juce_audio_basics/effects/juce_LinearSmoothedValue.h +++ b/modules/juce_audio_basics/effects/juce_LinearSmoothedValue.h @@ -164,16 +164,16 @@ public: { if (buffer.getNumChannels() == 1) { - FloatType* samples = buffer.getWritePointer(0); + auto samples = buffer.getWritePointer(0); - for (int i = 0; i < numSamples; i++) + for (int i = 0; i < numSamples; ++i) samples[i] *= getNextValue(); } else { - for (int i = 0; i < numSamples; i++) + for (int i = 0; i < numSamples; ++i) { - const FloatType gain = getNextValue(); + auto gain = getNextValue(); for (int channel = 0; channel < buffer.getNumChannels(); channel++) buffer.setSample (channel, i, buffer.getSample (channel, i) * gain); @@ -188,22 +188,22 @@ public: //============================================================================== /** Skip the next numSamples samples. - - This is identical to calling getNextValue numSamples times. + This is identical to calling getNextValue numSamples times. It returns + the new current value. @see getNextValue */ - void skip (int numSamples) noexcept + FloatType skip (int numSamples) noexcept { if (numSamples >= countdown) { currentValue = target; countdown = 0; + return target; } - else - { - currentValue += (step * static_cast (numSamples)); - countdown -= numSamples; - } + + currentValue += (step * static_cast (numSamples)); + countdown -= numSamples; + return currentValue; } private: diff --git a/modules/juce_audio_basics/juce_audio_basics.cpp b/modules/juce_audio_basics/juce_audio_basics.cpp index 56371d0d..3b00dee3 100644 --- a/modules/juce_audio_basics/juce_audio_basics.cpp +++ b/modules/juce_audio_basics/juce_audio_basics.cpp @@ -56,6 +56,7 @@ #include "buffers/juce_AudioDataConverters.cpp" #include "buffers/juce_FloatVectorOperations.cpp" #include "buffers/juce_AudioChannelSet.cpp" +#include "buffers/juce_AudioProcessLoadMeasurer.cpp" #include "effects/juce_IIRFilter.cpp" #include "effects/juce_LagrangeInterpolator.cpp" #include "effects/juce_CatmullRomInterpolator.cpp" diff --git a/modules/juce_audio_basics/juce_audio_basics.h b/modules/juce_audio_basics/juce_audio_basics.h index 3662bc36..a3eb065c 100644 --- a/modules/juce_audio_basics/juce_audio_basics.h +++ b/modules/juce_audio_basics/juce_audio_basics.h @@ -31,7 +31,7 @@ ID: juce_audio_basics vendor: juce - version: 5.3.2 + version: 5.4.1 name: JUCE audio and MIDI data classes description: Classes for audio buffer manipulation, midi message handling, synthesis, etc. website: http://www.juce.com/juce @@ -84,6 +84,7 @@ #include "buffers/juce_FloatVectorOperations.h" #include "buffers/juce_AudioSampleBuffer.h" #include "buffers/juce_AudioChannelSet.h" +#include "buffers/juce_AudioProcessLoadMeasurer.h" #include "effects/juce_Decibels.h" #include "effects/juce_IIRFilter.h" #include "effects/juce_LagrangeInterpolator.h" diff --git a/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp b/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp index 91689d33..55e2597b 100644 --- a/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiBuffer.cpp @@ -57,9 +57,16 @@ namespace MidiBufferHelpers } else if (byte == 0xff) { - int n; - const int bytesLeft = MidiMessage::readVariableLengthVal (data + 1, n); - size = jmin (maxBytes, n + 2 + bytesLeft); + if (maxBytes == 1) + { + size = 1; + } + else + { + int n; + const int bytesLeft = MidiMessage::readVariableLengthVal (data + 1, n); + size = jmin (maxBytes, n + 2 + bytesLeft); + } } else if (byte >= 0x80) { diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.cpp b/modules/juce_audio_basics/midi/juce_MidiFile.cpp index 65e7b0ed..d6aef794 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiFile.cpp @@ -245,7 +245,7 @@ double MidiFile::getLastTimestamp() const } //============================================================================== -bool MidiFile::readFrom (InputStream& sourceStream) +bool MidiFile::readFrom (InputStream& sourceStream, bool createMatchingNoteOffs) { clear(); MemoryBlock data; @@ -276,7 +276,7 @@ bool MidiFile::readFrom (InputStream& sourceStream) break; if (chunkType == (int) ByteOrder::bigEndianInt ("MTrk")) - readNextTrack (d, chunkSize); + readNextTrack (d, chunkSize, createMatchingNoteOffs); size -= (size_t) chunkSize + 8; d += chunkSize; @@ -290,7 +290,7 @@ bool MidiFile::readFrom (InputStream& sourceStream) return false; } -void MidiFile::readNextTrack (const uint8* data, int size) +void MidiFile::readNextTrack (const uint8* data, int size, bool createMatchingNoteOffs) { double time = 0; uint8 lastStatusByte = 0; @@ -337,7 +337,9 @@ void MidiFile::readNextTrack (const uint8* data, int size) }); addTrack (result); - tracks.getLast()->updateMatchedPairs(); + + if (createMatchingNoteOffs) + tracks.getLast()->updateMatchedPairs(); } //============================================================================== diff --git a/modules/juce_audio_basics/midi/juce_MidiFile.h b/modules/juce_audio_basics/midi/juce_MidiFile.h index 2226b320..8c3c930d 100644 --- a/modules/juce_audio_basics/midi/juce_MidiFile.h +++ b/modules/juce_audio_basics/midi/juce_MidiFile.h @@ -156,13 +156,22 @@ public: terms of midi ticks. To convert them to seconds, use the convertTimestampTicksToSeconds() method. + @param sourceStream the source stream + @param createMatchingNoteOffs if true, any missing note-offs for previous note-ons will + be automatically added at the end of the file by calling + MidiMessageSequence::updateMatchedPairs on each track. + @returns true if the stream was read successfully */ - bool readFrom (InputStream& sourceStream); + bool readFrom (InputStream& sourceStream, bool createMatchingNoteOffs = true); /** Writes the midi tracks as a standard midi file. The midiFileType value is written as the file's format type, which can be 0, 1 or 2 - see the midi file spec for more info about that. + + @param destStream the destination stream + @param midiFileType the type of midi file + @returns true if the operation succeeded. */ bool writeTo (OutputStream& destStream, int midiFileType = 1); @@ -180,7 +189,7 @@ private: OwnedArray tracks; short timeFormat; - void readNextTrack (const uint8*, int size); + void readNextTrack (const uint8*, int, bool); bool writeTrack (OutputStream&, const MidiMessageSequence&); JUCE_LEAK_DETECTOR (MidiFile) diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp index d1ad9505..9ccccfac 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.cpp +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.cpp @@ -224,9 +224,16 @@ MidiMessage::MidiMessage (const void* srcData, int sz, int& numBytesUsed, const } else if (byte == 0xff) { - int n; - const int bytesLeft = readVariableLengthVal (src + 1, n); - size = jmin (sz + 1, n + 2 + bytesLeft); + if (sz == 1) + { + size = 1; + } + else + { + int n; + const int bytesLeft = readVariableLengthVal (src + 1, n); + size = jmin (sz + 1, n + 2 + bytesLeft); + } auto dest = allocateSpace (size); *dest = (uint8) byte; diff --git a/modules/juce_audio_basics/midi/juce_MidiMessage.h b/modules/juce_audio_basics/midi/juce_MidiMessage.h index bc766962..5628c3ae 100644 --- a/modules/juce_audio_basics/midi/juce_MidiMessage.h +++ b/modules/juce_audio_basics/midi/juce_MidiMessage.h @@ -83,19 +83,19 @@ public: complete message, and will return the number of bytes it used. This lets you read a sequence of midi messages from a file or stream. - @param data the data to read from - @param maxBytesToUse the maximum number of bytes it's allowed to read - @param numBytesUsed returns the number of bytes that were actually needed - @param lastStatusByte in a sequence of midi messages, the initial byte - can be dropped from a message if it's the same as the - first byte of the previous message, so this lets you - supply the byte to use if the first byte of the message - has in fact been dropped. - @param timeStamp the time to give the midi message - this value doesn't - use any particular units, so will be application-specific + @param data the data to read from + @param maxBytesToUse the maximum number of bytes it's allowed to read + @param numBytesUsed returns the number of bytes that were actually needed + @param lastStatusByte in a sequence of midi messages, the initial byte + can be dropped from a message if it's the same as the + first byte of the previous message, so this lets you + supply the byte to use if the first byte of the message + has in fact been dropped. + @param timeStamp the time to give the midi message - this value doesn't + use any particular units, so will be application-specific @param sysexHasEmbeddedLength when reading sysexes, this flag indicates whether - to expect the data to begin with a variable-length field - indicating its size + to expect the data to begin with a variable-length + field indicating its size */ MidiMessage (const void* data, int maxBytesToUse, int& numBytesUsed, uint8 lastStatusByte, diff --git a/modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp b/modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp index b2f2cb6a..a9a0075d 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp @@ -129,12 +129,12 @@ void MPEInstrument::setTimbreTrackingMode (TrackingMode modeToUse) } //============================================================================== -void MPEInstrument::addListener (Listener* const listenerToAdd) noexcept +void MPEInstrument::addListener (Listener* listenerToAdd) { listeners.add (listenerToAdd); } -void MPEInstrument::removeListener (Listener* const listenerToRemove) noexcept +void MPEInstrument::removeListener (Listener* listenerToRemove) { listeners.remove (listenerToRemove); } @@ -156,7 +156,7 @@ void MPEInstrument::processNextMidiEvent (const MidiMessage& message) //============================================================================== void MPEInstrument::processMidiNoteOnMessage (const MidiMessage& message) { - // Note: if a note-on with velocity = 0 is used to convey a note-off, + // Note: If a note-on with velocity = 0 is used to convey a note-off, // then the actual note-off velocity is not known. In this case, // the MPE convention is to use note-off velocity = 64. diff --git a/modules/juce_audio_basics/mpe/juce_MPEInstrument.h b/modules/juce_audio_basics/mpe/juce_MPEInstrument.h index 4582065d..59b070bf 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEInstrument.h +++ b/modules/juce_audio_basics/mpe/juce_MPEInstrument.h @@ -271,7 +271,7 @@ public: MPE note's key state (whether the key is down and/or the note is sustained) has changed. - Note: if the key state changes to MPENote::off, noteReleased is + Note: If the key state changes to MPENote::off, noteReleased is called instead. */ virtual void noteKeyStateChanged (MPENote changedNote) = 0; @@ -286,10 +286,10 @@ public: //============================================================================== /** Adds a listener. */ - void addListener (Listener* listenerToAdd) noexcept; + void addListener (Listener* listenerToAdd); /** Removes a listener. */ - void removeListener (Listener* listenerToRemove) noexcept; + void removeListener (Listener* listenerToRemove); //============================================================================== /** Puts the instrument into legacy mode. diff --git a/modules/juce_audio_basics/mpe/juce_MPEMessages.cpp b/modules/juce_audio_basics/mpe/juce_MPEMessages.cpp index f6949442..37c332fb 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEMessages.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPEMessages.cpp @@ -215,7 +215,7 @@ private: std::size_t pos = 0; MidiBuffer::Iterator iter (midiBuffer); MidiMessage midiMessage; - int samplePosition; // Note: not actually used, so no need to initialise. + int samplePosition; // Note: Not actually used, so no need to initialise. while (iter.getNextEvent (midiMessage, samplePosition)) { diff --git a/modules/juce_audio_basics/mpe/juce_MPEMessages.h b/modules/juce_audio_basics/mpe/juce_MPEMessages.h index 133ce3d8..a6e31e85 100644 --- a/modules/juce_audio_basics/mpe/juce_MPEMessages.h +++ b/modules/juce_audio_basics/mpe/juce_MPEMessages.h @@ -35,7 +35,7 @@ namespace juce class instead. You just need to take care to send them to the appropriate per-note MIDI channel. - Note: if you are working with an MPEZoneLayout object inside your app, + Note: If you are working with an MPEZoneLayout object inside your app, you should not use the message sequences provided here. Instead, you should change the zone layout programmatically with the member functions provided in the MPEZoneLayout class itself. You should also make sure that the Expressive diff --git a/modules/juce_audio_basics/mpe/juce_MPENote.h b/modules/juce_audio_basics/mpe/juce_MPENote.h index 33d992b4..0a997451 100644 --- a/modules/juce_audio_basics/mpe/juce_MPENote.h +++ b/modules/juce_audio_basics/mpe/juce_MPENote.h @@ -132,7 +132,7 @@ struct JUCE_API MPENote */ MPEValue pressure { MPEValue::centreValue() }; - /** Inital value of timbre when the note was triggered. + /** Initial value of timbre when the note was triggered. This should never change during the lifetime of an MPENote object. */ MPEValue initialTimbre { MPEValue::centreValue() }; diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp b/modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp index ea0028e4..fc76d407 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp @@ -42,13 +42,16 @@ MPESynthesiser::~MPESynthesiser() void MPESynthesiser::startVoice (MPESynthesiserVoice* voice, MPENote noteToStart) { jassert (voice != nullptr); + voice->currentlyPlayingNote = noteToStart; + voice->noteOnTime = lastNoteOnCounter++; voice->noteStarted(); } void MPESynthesiser::stopVoice (MPESynthesiserVoice* voice, MPENote noteToStop, bool allowTailOff) { jassert (voice != nullptr); + voice->currentlyPlayingNote = noteToStop; voice->noteStopped (allowTailOff); } @@ -197,7 +200,7 @@ MPESynthesiserVoice* MPESynthesiser::findVoiceToSteal (MPENote noteToStealVoiceF // compilers generating code containing heap allocations.. struct Sorter { - bool operator() (const MPESynthesiserVoice* a, const MPESynthesiserVoice* b) const noexcept { return a->wasStartedBefore (*b); } + bool operator() (const MPESynthesiserVoice* a, const MPESynthesiserVoice* b) const noexcept { return a->noteOnTime < b->noteOnTime; } }; std::sort (usableVoices.begin(), usableVoices.end(), Sorter()); diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiser.h b/modules/juce_audio_basics/mpe/juce_MPESynthesiser.h index d3026937..c49bbcde 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiser.h +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiser.h @@ -304,6 +304,7 @@ protected: private: //============================================================================== bool shouldStealVoices = false; + uint32 lastNoteOnCounter = 0; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESynthesiser) }; diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp b/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp index 5cb03eee..b20e13d6 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp @@ -42,11 +42,6 @@ bool MPESynthesiserVoice::isPlayingButReleased() const noexcept return isActive() && currentlyPlayingNote.keyState == MPENote::off; } -bool MPESynthesiserVoice::wasStartedBefore (const MPESynthesiserVoice& other) const noexcept -{ - return noteStartTime < other.noteStartTime; -} - void MPESynthesiserVoice::clearCurrentNote() noexcept { currentlyPlayingNote = MPENote(); diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h b/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h index f1603d5f..febd84f0 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h @@ -156,8 +156,10 @@ public: */ double getSampleRate() const noexcept { return currentSampleRate; } - /** Returns true if this voice started playing its current note before the other voice did. */ - bool wasStartedBefore (const MPESynthesiserVoice& other) const noexcept; + /** This will be set to an incrementing counter value in MPESynthesiser::startVoice() + and can be used to determine the order in which voices started. + */ + uint32 noteOnTime = 0; protected: //============================================================================== @@ -182,7 +184,6 @@ protected: private: //============================================================================== friend class MPESynthesiser; - uint32 noteStartTime = 0; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESynthesiserVoice) }; diff --git a/modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp b/modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp index 6adec044..a987d7f5 100644 --- a/modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp +++ b/modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp @@ -49,7 +49,8 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT auto max = 0, pos = 0; auto n = buffer.getNumSamples(), m = bufferToFill.numSamples; - for (auto i = position; (i < n || isLooping) && (pos < m); i += max) + int i; + for (i = position; (i < n || isLooping) && (pos < m); i += max) { max = jmin (m - pos, n - (i % n)); @@ -65,6 +66,8 @@ void MemoryAudioSource::getNextAudioBlock (const AudioSourceChannelInfo& bufferT if (pos < m) dst.clear (bufferToFill.startSample + pos, m - pos); + + position = (i % n); } } // namespace juce diff --git a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp index fa047d14..ba6f818d 100644 --- a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp +++ b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp @@ -323,7 +323,7 @@ void Synthesiser::stopVoice (SynthesiserVoice* voice, float velocity, const bool voice->stopNote (velocity, allowTailOff); // the subclass MUST call clearCurrentNote() if it's not tailing off! RTFM for stopNote()! - jassert (allowTailOff || (voice->getCurrentlyPlayingNote() < 0 && voice->getCurrentlyPlayingSound() == 0)); + jassert (allowTailOff || (voice->getCurrentlyPlayingNote() < 0 && voice->getCurrentlyPlayingSound() == nullptr)); } void Synthesiser::noteOff (const int midiChannel, @@ -338,7 +338,7 @@ void Synthesiser::noteOff (const int midiChannel, if (voice->getCurrentlyPlayingNote() == midiNoteNumber && voice->isPlayingChannel (midiChannel)) { - if (SynthesiserSound* const sound = voice->getCurrentlyPlayingSound()) + if (auto sound = voice->getCurrentlyPlayingSound()) { if (sound->appliesToNote (midiNoteNumber) && sound->appliesToChannel (midiChannel)) diff --git a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h index 3215d100..62e8cc1a 100644 --- a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h +++ b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h @@ -352,7 +352,7 @@ public: int getNumSounds() const noexcept { return sounds.size(); } /** Returns one of the sounds. */ - SynthesiserSound* getSound (int index) const noexcept { return sounds [index]; } + SynthesiserSound::Ptr getSound (int index) const noexcept { return sounds[index]; } /** Adds a new sound to the synthesiser. diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index e2fb0b41..bbbcbbe6 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -23,14 +23,6 @@ namespace juce { -AudioDeviceManager::AudioDeviceSetup::AudioDeviceSetup() - : sampleRate (0), - bufferSize (0), - useDefaultInputChannels (true), - useDefaultOutputChannels (true) -{ -} - bool AudioDeviceManager::AudioDeviceSetup::operator== (const AudioDeviceManager::AudioDeviceSetup& other) const { return outputDeviceName == other.outputDeviceName @@ -367,6 +359,11 @@ AudioIODeviceType* AudioDeviceManager::findType (const String& inputName, const return {}; } +AudioDeviceManager::AudioDeviceSetup AudioDeviceManager::getAudioDeviceSetup() const +{ + return currentSetup; +} + void AudioDeviceManager::getAudioDeviceSetup (AudioDeviceSetup& setup) const { setup = currentSetup; @@ -582,7 +579,7 @@ void AudioDeviceManager::closeAudioDevice() { stopDevice(); currentAudioDevice.reset(); - cpuUsageMs = 0; + loadMeasurer.reset(); } void AudioDeviceManager::restartLastAudioDevice() @@ -694,7 +691,7 @@ void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelDat if (callbacks.size() > 0) { - auto callbackStartTime = Time::getMillisecondCounterHiRes(); + AudioProcessLoadMeasurer::ScopedTimer timer (loadMeasurer); tempBuffer.setSize (jmax (1, numOutputChannels), jmax (1, numSamples), false, false, true); @@ -716,13 +713,6 @@ void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelDat dst[j] += src[j]; } } - - auto msTaken = Time::getMillisecondCounterHiRes() - callbackStartTime; - const double filterAmount = 0.2; - cpuUsageMs += filterAmount * (msTaken - cpuUsageMs); - - if (msTaken > msPerBlock) - ++xruns; } else { @@ -748,17 +738,8 @@ void AudioDeviceManager::audioDeviceIOCallbackInt (const float** inputChannelDat void AudioDeviceManager::audioDeviceAboutToStartInt (AudioIODevice* const device) { - cpuUsageMs = 0; - xruns = 0; - - auto sampleRate = device->getCurrentSampleRate(); - auto blockSize = device->getCurrentBufferSizeSamples(); - - if (sampleRate > 0.0 && blockSize > 0) - { - msPerBlock = 1000.0 * blockSize / sampleRate; - timeToCpuScale = (msPerBlock > 0.0) ? (1.0 / msPerBlock) : 0.0; - } + loadMeasurer.reset (device->getCurrentSampleRate(), + device->getCurrentBufferSizeSamples()); { const ScopedLock sl (audioCallbackLock); @@ -772,13 +753,12 @@ void AudioDeviceManager::audioDeviceAboutToStartInt (AudioIODevice* const device void AudioDeviceManager::audioDeviceStoppedInt() { - cpuUsageMs = 0; - timeToCpuScale = 0; - xruns = 0; sendChangeMessage(); const ScopedLock sl (audioCallbackLock); + loadMeasurer.reset(); + for (int i = callbacks.size(); --i >= 0;) callbacks.getUnchecked(i)->audioDeviceStopped(); } @@ -793,7 +773,7 @@ void AudioDeviceManager::audioDeviceErrorInt (const String& message) double AudioDeviceManager::getCpuUsage() const { - return jlimit (0.0, 1.0, timeToCpuScale * cpuUsageMs); + return loadMeasurer.getLoadAsProportion(); } //============================================================================== @@ -980,7 +960,7 @@ void AudioDeviceManager::playTestSound() auto phasePerSample = MathConstants::twoPi / (sampleRate / frequency); - auto* newSound = new AudioBuffer (1, soundLength); + std::unique_ptr> newSound (new AudioBuffer (1, soundLength)); for (int i = 0; i < soundLength; ++i) newSound->setSample (0, i, amplitude * (float) std::sin (i * phasePerSample)); @@ -988,15 +968,17 @@ void AudioDeviceManager::playTestSound() newSound->applyGainRamp (0, 0, soundLength / 10, 0.0f, 1.0f); newSound->applyGainRamp (0, soundLength - soundLength / 4, soundLength / 4, 1.0f, 0.0f); - const ScopedLock sl (audioCallbackLock); - testSound.reset (newSound); + { + const ScopedLock sl (audioCallbackLock); + std::swap (testSound, newSound); + } } } int AudioDeviceManager::getXRunCount() const noexcept { auto deviceXRuns = (currentAudioDevice != nullptr ? currentAudioDevice->getXRunCount() : -1); - return jmax (0, deviceXRuns) + xruns; + return jmax (0, deviceXRuns) + loadMeasurer.getXRunCount(); } } // namespace juce diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h index adbfa99f..80e268d8 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h @@ -89,17 +89,6 @@ public: */ struct JUCE_API AudioDeviceSetup { - /** Creates an AudioDeviceSetup object. - - The default constructor sets all the member variables to indicate default values. - You can then fill-in any values you want to before passing the object to - AudioDeviceManager::initialise(). - */ - AudioDeviceSetup(); - - bool operator== (const AudioDeviceSetup& other) const; - bool operator!= (const AudioDeviceSetup& other) const; - /** The name of the audio device used for output. The name has to be one of the ones listed by the AudioDeviceManager's currently selected device type. @@ -119,13 +108,13 @@ public: A value of 0 indicates that you don't care what rate is used, and the device will choose a sensible rate for you. */ - double sampleRate; + double sampleRate = 0; /** The buffer size, in samples. This buffer size is used for both the input and output devices. A value of 0 indicates the default buffer size. */ - int bufferSize; + int bufferSize = 0; /** The set of active input channels. The bits that are set in this array indicate the channels of the @@ -138,7 +127,7 @@ public: should be ignored, and instead, the device's default channels should be used. */ - bool useDefaultInputChannels; + bool useDefaultInputChannels = true; /** The set of active output channels. The bits that are set in this array indicate the channels of the @@ -151,7 +140,10 @@ public: should be ignored, and instead, the device's default channels should be used. */ - bool useDefaultOutputChannels; + bool useDefaultOutputChannels = true; + + bool operator== (const AudioDeviceSetup&) const; + bool operator!= (const AudioDeviceSetup&) const; }; @@ -211,6 +203,13 @@ public: /** Returns the current device properties that are in use. @see setAudioDeviceSetup */ + AudioDeviceSetup getAudioDeviceSetup() const; + + /** Returns the current device properties that are in use. + This is an old method, kept around for compatibility, but you should prefer the new + version which returns the result rather than taking an out-parameter. + @see getAudioDeviceSetup() + */ void getAudioDeviceSetup (AudioDeviceSetup& result) const; /** Changes the current device or its settings. @@ -232,8 +231,7 @@ public: @see getAudioDeviceSetup */ - String setAudioDeviceSetup (const AudioDeviceSetup& newSetup, - bool treatAsChosenDevice); + String setAudioDeviceSetup (const AudioDeviceSetup& newSetup, bool treatAsChosenDevice); /** Returns the currently-active audio device. */ @@ -257,8 +255,7 @@ public: For a list of types, see getAvailableDeviceTypes(). */ - void setCurrentAudioDeviceType (const String& type, - bool treatAsChosenDevice); + void setCurrentAudioDeviceType (const String& type, bool treatAsChosenDevice); /** Closes the currently-open device. You can call restartLastAudioDevice() later to reopen it in the same state @@ -435,10 +432,10 @@ public: */ LevelMeter::Ptr getInputLevelGetter() noexcept { return inputLevelGetter; } - /** Returns a reference-counted object that can be used to get the current input level. + /** Returns a reference-counted object that can be used to get the current output level. You need to store this object locally to ensure that the reference count is incremented - and decremented properly. The current input level value can be read using getCurrentLevel(). + and decremented properly. The current output level value can be read using getCurrentLevel(). */ LevelMeter::Ptr getOutputLevelGetter() noexcept { return outputLevelGetter; } @@ -496,16 +493,13 @@ private: std::unique_ptr> testSound; int testSoundPosition = 0; - double cpuUsageMs = 0, timeToCpuScale = 0, msPerBlock = 0; - int xruns = 0; + AudioProcessLoadMeasurer loadMeasurer; LevelMeter::Ptr inputLevelGetter { new LevelMeter() }, outputLevelGetter { new LevelMeter() }; //============================================================================== class CallbackHandler; - friend class CallbackHandler; - friend struct ContainerDeletePolicy; std::unique_ptr callbackHandler; void audioDeviceIOCallbackInt (const float** inputChannelData, int totalNumInputChannels, diff --git a/modules/juce_audio_devices/juce_audio_devices.cpp b/modules/juce_audio_devices/juce_audio_devices.cpp index 67f36912..11636db0 100644 --- a/modules/juce_audio_devices/juce_audio_devices.cpp +++ b/modules/juce_audio_devices/juce_audio_devices.cpp @@ -70,12 +70,12 @@ #include #endif - #if JUCE_USE_WINRT_MIDI + #if JUCE_USE_WINRT_MIDI && JUCE_MSVC /* If you cannot find any of the header files below then you are probably attempting to use the Windows 10 Bluetooth Low Energy API. For this to work you - need to install version 10.0.14393.0 of the Windows Standalone SDK and add the - path to the WinRT headers to your build system. This path should have the form - "C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt". + need to install version 10.0.14393.0 of the Windows Standalone SDK and you may + need to add the path to the WinRT headers to your build system. This path should + have the form "C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt". Also please note that Microsoft's Bluetooth MIDI stack has multiple issues, so this API is EXPERIMENTAL - use at your own risk! @@ -83,15 +83,16 @@ #include #include #include + + #pragma warning (push) + #pragma warning (disable: 4265) #include - #if JUCE_MSVC - #pragma warning (push) - #pragma warning (disable: 4467) - #endif + #pragma warning (pop) + + #pragma warning (push) + #pragma warning (disable: 4467) #include - #if JUCE_MSVC - #pragma warning (pop) - #endif + #pragma warning (pop) #endif #if JUCE_ASIO @@ -148,7 +149,9 @@ installed, or you've not got your paths set up correctly to find its header files. */ + #include #include + #include #endif #undef SIZEOF @@ -163,6 +166,10 @@ #endif #if JUCE_USE_ANDROID_OBOE + #if JUCE_USE_ANDROID_OPENSLES + #error "Oboe cannot be enabled at the same time as openSL! Please disable JUCE_USE_ANDROID_OPENSLES" + #endif + #include #endif @@ -210,14 +217,14 @@ #include "native/juce_linux_ALSA.cpp" #endif - #include "native/juce_linux_Midi.cpp" - #if JUCE_JACK #include "native/juce_linux_JackAudio.cpp" #endif #if JUCE_BELA #include "native/juce_linux_Bela.cpp" + #else + #include "native/juce_linux_Midi.cpp" #endif //============================================================================== diff --git a/modules/juce_audio_devices/juce_audio_devices.h b/modules/juce_audio_devices/juce_audio_devices.h index 1ab48aa5..330efb53 100644 --- a/modules/juce_audio_devices/juce_audio_devices.h +++ b/modules/juce_audio_devices/juce_audio_devices.h @@ -31,7 +31,7 @@ ID: juce_audio_devices vendor: juce - version: 5.3.2 + version: 5.4.1 name: JUCE audio and MIDI I/O device classes description: Classes to play and record from audio and MIDI I/O devices website: http://www.juce.com/juce @@ -59,6 +59,22 @@ #endif //============================================================================== +/** Config: JUCE_USE_WINRT_MIDI + Enables the use of the Windows Runtime API for MIDI, allowing connections + to Bluetooth Low Energy devices on Windows 10 version 1809 (October 2018 + Update) and later. If you enable this flag then older, unsupported, + versions of Windows will automatically fall back to using the regualar + Win32 MIDI API. + + You will need version 10.0.14393.0 of the Windows Standalone SDK to compile + and you may need to add the path to the WinRT headers. The path to the + headers will be something similar to + "C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt". +*/ +#ifndef JUCE_USE_WINRT_MIDI + #define JUCE_USE_WINRT_MIDI 0 +#endif + /** Config: JUCE_ASIO Enables ASIO audio devices (MS Windows only). Turning this on means that you'll need to have the Steinberg ASIO SDK installed @@ -146,25 +162,6 @@ #endif #endif -/** Config: JUCE_USE_WINRT_MIDI - *** - EXPERIMENTAL - Microsoft's Bluetooth MIDI stack has multiple issues, - use at your own risk! - *** - - Enables the use of the Windows Runtime API for MIDI, which supports - Bluetooth Low Energy connections on computers with the Anniversary Update - of Windows 10. - - To compile with this flag requires version 10.0.14393.0 of the Windows - Standalone SDK and you must add the path to the WinRT headers. This path - should be something similar to - "C:\Program Files (x86)\Windows Kits\10\Include\10.0.14393.0\winrt". -*/ -#ifndef JUCE_USE_WINRT_MIDI - #define JUCE_USE_WINRT_MIDI 0 -#endif - /** Config: JUCE_DISABLE_AUDIO_MIXING_WITH_OTHER_APPS Turning this on gives your app exclusive access to the system's audio on platforms which support it (currently iOS only). diff --git a/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp b/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp index 98fdd6cd..a707997a 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp +++ b/modules/juce_audio_devices/midi_io/juce_MidiOutput.cpp @@ -42,7 +42,7 @@ void MidiOutput::sendBlockOfMessagesNow (const MidiBuffer& buffer) { MidiBuffer::Iterator i (buffer); MidiMessage message; - int samplePosition; // Note: not actually used, so no need to initialise. + int samplePosition; // Note: Not actually used, so no need to initialise. while (i.getNextEvent (message, samplePosition)) sendMessageNow (message); diff --git a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h index fa8080fa..148a7f21 100644 --- a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h +++ b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h @@ -33,79 +33,68 @@ namespace juce class MidiDataConcatenator { public: - //============================================================================== MidiDataConcatenator (int initialBufferSize) - : pendingData ((size_t) initialBufferSize) + : pendingSysexData ((size_t) initialBufferSize) { } void reset() { - pendingBytes = 0; - runningStatus = 0; - pendingDataTime = 0; + currentMessageLen = 0; + pendingSysexSize = 0; + pendingSysexTime = 0; } template void pushMidiData (const void* inputData, int numBytes, double time, UserDataType* input, CallbackType& callback) { - const uint8* d = static_cast (inputData); + auto d = static_cast (inputData); while (numBytes > 0) { - if (pendingBytes > 0 || d[0] == 0xf0) + auto nextByte = *d; + + if (pendingSysexSize != 0 || nextByte == 0xf0) { processSysex (d, numBytes, time, input, callback); - runningStatus = 0; + currentMessageLen = 0; + continue; } - else - { - int len = 0; - uint8 data[3]; - - while (numBytes > 0) - { - // If there's a realtime message embedded in the middle of - // the normal message, handle it now.. - if (*d >= 0xf8 && *d <= 0xfe) - { - callback.handleIncomingMidiMessage (input, MidiMessage (*d++, time)); - --numBytes; - } - else - { - if (len == 0 && *d < 0x80 && runningStatus >= 0x80) - data[len++] = runningStatus; - - data[len++] = *d++; - --numBytes; - const uint8 firstByte = data[0]; + ++d; + --numBytes; - if (firstByte < 0x80 || firstByte == 0xf7) - { - len = 0; - break; // ignore this malformed MIDI message.. - } - - if (len >= MidiMessage::getMessageLengthFromFirstByte (firstByte)) - break; - } - } + if (isRealtimeMessage (nextByte)) + { + callback.handleIncomingMidiMessage (input, MidiMessage (nextByte, time)); + // These can be embedded in the middle of a normal message, so we won't + // reset the currentMessageLen here. + continue; + } - if (len > 0) - { - int used = 0; - const MidiMessage m (data, len, used, 0, time); + if (isInitialByte (nextByte)) + { + currentMessage[0] = nextByte; + currentMessageLen = 1; + } + else if (currentMessageLen > 0 && currentMessageLen < 3) + { + currentMessage[currentMessageLen++] = nextByte; + } + else + { + // message is too long or invalid MIDI - abandon it and start again with the next byte + currentMessageLen = 0; + continue; + } - if (used <= 0) - break; // malformed message.. + auto expectedLength = MidiMessage::getMessageLengthFromFirstByte (currentMessage[0]); - jassert (used == len); - callback.handleIncomingMidiMessage (input, m); - runningStatus = data[0]; - } + if (expectedLength == currentMessageLen) + { + callback.handleIncomingMidiMessage (input, MidiMessage (currentMessage, expectedLength, time)); + currentMessageLen = 1; // reset, but leave the first byte to use as the running status byte } } } @@ -117,22 +106,22 @@ private: { if (*d == 0xf0) { - pendingBytes = 0; - pendingDataTime = time; + pendingSysexSize = 0; + pendingSysexTime = time; } - pendingData.ensureSize ((size_t) (pendingBytes + numBytes), false); - uint8* totalMessage = static_cast (pendingData.getData()); - uint8* dest = totalMessage + pendingBytes; + pendingSysexData.ensureSize ((size_t) (pendingSysexSize + numBytes), false); + auto totalMessage = static_cast (pendingSysexData.getData()); + auto dest = totalMessage + pendingSysexSize; do { - if (pendingBytes > 0 && *d >= 0x80) + if (pendingSysexSize > 0 && isInitialByte (*d)) { if (*d == 0xf7) { *dest++ = *d++; - ++pendingBytes; + ++pendingSysexSize; --numBytes; break; } @@ -145,7 +134,7 @@ private: } else { - pendingBytes = 0; + pendingSysexSize = 0; int used = 0; const MidiMessage m (d, numBytes, used, 0, time); @@ -162,30 +151,35 @@ private: else { *dest++ = *d++; - ++pendingBytes; + ++pendingSysexSize; --numBytes; } } while (numBytes > 0); - if (pendingBytes > 0) + if (pendingSysexSize > 0) { - if (totalMessage [pendingBytes - 1] == 0xf7) + if (totalMessage [pendingSysexSize - 1] == 0xf7) { - callback.handleIncomingMidiMessage (input, MidiMessage (totalMessage, pendingBytes, pendingDataTime)); - pendingBytes = 0; + callback.handleIncomingMidiMessage (input, MidiMessage (totalMessage, pendingSysexSize, pendingSysexTime)); + pendingSysexSize = 0; } else { - callback.handlePartialSysexMessage (input, totalMessage, pendingBytes, pendingDataTime); + callback.handlePartialSysexMessage (input, totalMessage, pendingSysexSize, pendingSysexTime); } } } - MemoryBlock pendingData; - double pendingDataTime = 0; - int pendingBytes = 0; - uint8 runningStatus = 0; + static bool isRealtimeMessage (uint8 byte) { return byte >= 0xf8 && byte <= 0xfe; } + static bool isInitialByte (uint8 byte) { return byte >= 0x80; } + + uint8 currentMessage[3]; + int currentMessageLen = 0; + + MemoryBlock pendingSysexData; + double pendingSysexTime = 0; + int pendingSysexSize = 0; JUCE_DECLARE_NON_COPYABLE (MidiDataConcatenator) }; diff --git a/modules/juce_audio_devices/native/juce_android_Audio.cpp b/modules/juce_audio_devices/native/juce_android_Audio.cpp index 7a58d65b..fe995ae4 100644 --- a/modules/juce_audio_devices/native/juce_android_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_android_Audio.cpp @@ -34,7 +34,7 @@ namespace juce METHOD (flush, "flush", "()V") \ METHOD (write, "write", "([SII)I") \ -DECLARE_JNI_CLASS (AudioTrack, "android/media/AudioTrack"); +DECLARE_JNI_CLASS (AudioTrack, "android/media/AudioTrack") #undef JNI_CLASS_MEMBERS //============================================================================== @@ -47,14 +47,14 @@ DECLARE_JNI_CLASS (AudioTrack, "android/media/AudioTrack"); METHOD (read, "read", "([SII)I") \ METHOD (release, "release", "()V") \ -DECLARE_JNI_CLASS (AudioRecord, "android/media/AudioRecord"); +DECLARE_JNI_CLASS (AudioRecord, "android/media/AudioRecord") #undef JNI_CLASS_MEMBERS //============================================================================== #define JNI_CLASS_MEMBERS(METHOD, STATICMETHOD, FIELD, STATICFIELD) \ STATICFIELD (SDK_INT, "SDK_INT", "I") \ - DECLARE_JNI_CLASS (AndroidBuildVersion, "android/os/Build$VERSION"); + DECLARE_JNI_CLASS (AndroidBuildVersion, "android/os/Build$VERSION") #undef JNI_CLASS_MEMBERS //============================================================================== diff --git a/modules/juce_audio_devices/native/juce_android_Oboe.cpp b/modules/juce_audio_devices/native/juce_android_Oboe.cpp index 09f3530e..0798687c 100644 --- a/modules/juce_audio_devices/native/juce_android_Oboe.cpp +++ b/modules/juce_audio_devices/native/juce_android_Oboe.cpp @@ -125,6 +125,12 @@ struct OboeAudioIODeviceBufferHelpers } }; +template +static String getOboeString (const Type& value) +{ + return String (oboe::convertToText (value)); +} + //============================================================================== class OboeAudioIODevice : public AudioIODevice { @@ -272,7 +278,7 @@ public: // by default. We need to be more conservative on other devices // as they may be low-latency, but still have a crappy CPU. return (isProAudioDevice() ? 1 : 6) - * defaultBufferSizeIsMultipleOfNative * getNativeBufferSize(); + * getNativeBufferSize(); } double getCurrentSampleRate() override @@ -391,9 +397,9 @@ private: // Setting nullptr callback is allowed only when playback is stopped. jassert (callbackToUse != nullptr); - while (true) + for (;;) { - AudioIODeviceCallback* old = callback.get(); + auto old = callback.get(); if (old == callbackToUse) break; @@ -409,7 +415,7 @@ private: void process (const float** inputChannelData, int numInputChannels, float** outputChannelData, int numOutputChannels, int32_t numFrames) { - if (AudioIODeviceCallback* cb = callback.exchange (nullptr)) + if (auto* cb = callback.exchange (nullptr)) { cb->audioDeviceIOCallback (inputChannelData, numInputChannels, outputChannelData, numOutputChannels, numFrames); @@ -438,8 +444,8 @@ private: ~OboeStream() { - // AudioStreamCallback can only be deleted when stream has been closed close(); + delete stream; } bool openedOk() const noexcept @@ -458,37 +464,47 @@ private: int64 timeoutNanos = 1000 * oboe::kNanosPerMillisecond; auto startResult = stream->requestStart(); - JUCE_OBOE_LOG ("Requested Oboe stream start with result: " + String (oboe::convertToText (startResult))); + JUCE_OBOE_LOG ("Requested Oboe stream start with result: " + getOboeString (startResult)); startResult = stream->waitForStateChange (expectedState, &nextState, timeoutNanos); - JUCE_OBOE_LOG ("Starting Oboe stream with result: " + String (oboe::convertToText (startResult)); - + "\nUses AAudio = " + (stream != nullptr ? String ((int) stream->usesAAudio()) : String ("?")) - + "\nDirection = " + (stream != nullptr ? String (oboe::convertToText (stream->getDirection())) : String ("?")) - + "\nSharingMode = " + (stream != nullptr ? String (oboe::convertToText (stream->getSharingMode())) : String ("?")) - + "\nChannelCount = " + (stream != nullptr ? String (stream->getChannelCount()) : String ("?")) - + "\nFormat = " + (stream != nullptr ? String (oboe::convertToText (stream->getFormat())) : String ("?")) - + "\nSampleRate = " + (stream != nullptr ? String (stream->getSampleRate()) : String ("?")) - + "\nBufferSizeInFrames = " + (stream != nullptr ? String (stream->getBufferSizeInFrames()) : String ("?")) - + "\nBufferCapacityInFrames = " + (stream != nullptr ? String (stream->getBufferCapacityInFrames()) : String ("?")) - + "\nFramesPerBurst = " + (stream != nullptr ? String (stream->getFramesPerBurst()) : String ("?")) - + "\nFramesPerCallback = " + (stream != nullptr ? String (stream->getFramesPerCallback()) : String ("?")) - + "\nBytesPerFrame = " + (stream != nullptr ? String (stream->getBytesPerFrame()) : String ("?")) - + "\nBytesPerSample = " + (stream != nullptr ? String (stream->getBytesPerSample()) : String ("?")) - + "\nPerformanceMode = " + String (oboe::convertToText (oboe::PerformanceMode::LowLatency)) - + "\ngetDeviceId = " + (stream != nullptr ? String (stream->getDeviceId()) : String ("?"))); + + JUCE_OBOE_LOG ("Starting Oboe stream with result: " + getOboeString (startResult); + + "\nUses AAudio = " + String ((int) stream->usesAAudio()) + + "\nDirection = " + getOboeString (stream->getDirection()) + + "\nSharingMode = " + getOboeString (stream->getSharingMode()) + + "\nChannelCount = " + String (stream->getChannelCount()) + + "\nFormat = " + getOboeString (stream->getFormat()) + + "\nSampleRate = " + String (stream->getSampleRate()) + + "\nBufferSizeInFrames = " + String (stream->getBufferSizeInFrames()) + + "\nBufferCapacityInFrames = " + String (stream->getBufferCapacityInFrames()) + + "\nFramesPerBurst = " + String (stream->getFramesPerBurst()) + + "\nFramesPerCallback = " + String (stream->getFramesPerCallback()) + + "\nBytesPerFrame = " + String (stream->getBytesPerFrame()) + + "\nBytesPerSample = " + String (stream->getBytesPerSample()) + + "\nPerformanceMode = " + getOboeString (oboe::PerformanceMode::LowLatency) + + "\ngetDeviceId = " + String (stream->getDeviceId())); } } - oboe::AudioStream* getNativeStream() + oboe::AudioStream* getNativeStream() const { jassert (openedOk()); - return stream; } int getXRunCount() const { - return stream != nullptr ? stream->getXRunCount() : 0; + if (stream != nullptr) + { + auto count = stream->getXRunCount(); + + if (count) + return count.value(); + + JUCE_OBOE_LOG ("Failed to get Xrun count: " + getOboeString (count.error())); + } + + return 0; } private: @@ -498,50 +514,50 @@ private: int32 sampleRate, int32 bufferSize, oboe::AudioStreamCallback* callback = nullptr) { + oboe::DefaultStreamValues::FramesPerBurst = getDefaultFramesPerBurst(); + oboe::AudioStreamBuilder builder; if (deviceId != -1) builder.setDeviceId (deviceId); - static int defaultFramesPerBurst = getDefaultFramesPerBurst(); - // Note: letting OS to choose the buffer capacity & frames per callback. builder.setDirection (direction); builder.setSharingMode (sharingMode); builder.setChannelCount (channelCount); builder.setFormat (format); builder.setSampleRate (sampleRate); - builder.setDefaultFramesPerBurst ((int32) defaultFramesPerBurst); builder.setPerformanceMode (oboe::PerformanceMode::LowLatency); builder.setCallback (callback); JUCE_OBOE_LOG (String ("Preparing Oboe stream with params:") + "\nAAudio supported = " + String (int (builder.isAAudioSupported())) - + "\nAPI = " + String (oboe::convertToText (builder.getAudioApi())) + + "\nAPI = " + getOboeString (builder.getAudioApi()) + "\nDeviceId = " + String (deviceId) - + "\nDirection = " + String (oboe::convertToText (direction)) - + "\nSharingMode = " + String (oboe::convertToText (sharingMode)) + + "\nDirection = " + getOboeString (direction) + + "\nSharingMode = " + getOboeString (sharingMode) + "\nChannelCount = " + String (channelCount) - + "\nFormat = " + String (oboe::convertToText (format)) + + "\nFormat = " + getOboeString (format) + "\nSampleRate = " + String (sampleRate) - + "\nBufferSizeInFrames = " + String (bufferSize) - + "\nFramesPerBurst = " + String (defaultFramesPerBurst) - + "\nPerformanceMode = " + String (oboe::convertToText (oboe::PerformanceMode::LowLatency))); + + "\nPerformanceMode = " + getOboeString (oboe::PerformanceMode::LowLatency)); openResult = builder.openStream (&stream); - JUCE_OBOE_LOG ("Building Oboe stream with result: " + String (oboe::convertToText (openResult)) - + "\nStream state = " + (stream != nullptr ? String (oboe::convertToText (stream->getState())) : String ("?"))); + JUCE_OBOE_LOG ("Building Oboe stream with result: " + getOboeString (openResult) + + "\nStream state = " + (stream != nullptr ? getOboeString (stream->getState()) : String ("?"))); - if (stream != nullptr) + if (stream != nullptr && bufferSize != 0) + { + JUCE_OBOE_LOG ("Setting the bufferSizeInFrames to " + String (bufferSize)); stream->setBufferSizeInFrames (bufferSize); + } JUCE_OBOE_LOG (String ("Stream details:") + "\nUses AAudio = " + (stream != nullptr ? String ((int) stream->usesAAudio()) : String ("?")) + "\nDeviceId = " + (stream != nullptr ? String (stream->getDeviceId()) : String ("?")) - + "\nDirection = " + (stream != nullptr ? String (oboe::convertToText (stream->getDirection())) : String ("?")) - + "\nSharingMode = " + (stream != nullptr ? String (oboe::convertToText (stream->getSharingMode())) : String ("?")) + + "\nDirection = " + (stream != nullptr ? getOboeString (stream->getDirection()) : String ("?")) + + "\nSharingMode = " + (stream != nullptr ? getOboeString (stream->getSharingMode()) : String ("?")) + "\nChannelCount = " + (stream != nullptr ? String (stream->getChannelCount()) : String ("?")) - + "\nFormat = " + (stream != nullptr ? String (oboe::convertToText (stream->getFormat())) : String ("?")) + + "\nFormat = " + (stream != nullptr ? getOboeString (stream->getFormat()) : String ("?")) + "\nSampleRate = " + (stream != nullptr ? String (stream->getSampleRate()) : String ("?")) + "\nBufferSizeInFrames = " + (stream != nullptr ? String (stream->getBufferSizeInFrames()) : String ("?")) + "\nBufferCapacityInFrames = " + (stream != nullptr ? String (stream->getBufferCapacityInFrames()) : String ("?")) @@ -549,7 +565,7 @@ private: + "\nFramesPerCallback = " + (stream != nullptr ? String (stream->getFramesPerCallback()) : String ("?")) + "\nBytesPerFrame = " + (stream != nullptr ? String (stream->getBytesPerFrame()) : String ("?")) + "\nBytesPerSample = " + (stream != nullptr ? String (stream->getBytesPerSample()) : String ("?")) - + "\nPerformanceMode = " + String (oboe::convertToText (oboe::PerformanceMode::LowLatency))); + + "\nPerformanceMode = " + getOboeString (oboe::PerformanceMode::LowLatency)); } void close() @@ -557,27 +573,10 @@ private: if (stream != nullptr) { oboe::Result result = stream->close(); - JUCE_OBOE_LOG ("Requested Oboe stream close with result: " + String (oboe::convertToText (result))); + JUCE_OBOE_LOG ("Requested Oboe stream close with result: " + getOboeString (result)); } } - int getDefaultFramesPerBurst() const - { - // NB: this function only works for inbuilt speakers and headphones - auto* env = getEnv(); - - auto audioManager = LocalRef (env->CallObjectMethod (android.activity, - JuceAppActivity.getSystemService, - javaString ("audio").get())); - - auto propertyJavaString = javaString ("android.media.property.OUTPUT_FRAMES_PER_BUFFER"); - - auto framesPerBurstString = LocalRef ((jstring) android.activity.callObjectMethod (JuceAppActivity.audioManagerGetProperty, - propertyJavaString.get())); - - return framesPerBurstString != 0 ? env->CallStaticIntMethod (JavaInteger, JavaInteger.parseInt, framesPerBurstString.get(), 10) : 192; - } - oboe::AudioStream* stream = nullptr; oboe::Result openResult; }; @@ -669,20 +668,14 @@ private: void checkStreamSetup (OboeStream* stream, int deviceId, int numChannels, int sampleRate, int bufferSize, oboe::AudioFormat format) { - auto* nativeStream = stream != nullptr ? stream->getNativeStream() : nullptr; - - if (nativeStream != nullptr) + if (auto* nativeStream = stream != nullptr ? stream->getNativeStream() : nullptr) { ignoreUnused (deviceId, numChannels, sampleRate, bufferSize); ignoreUnused (streamFormat, bitDepth); - jassert (deviceId = nativeStream->getDeviceId()); - jassert (numChannels = nativeStream->getChannelCount()); - jassert (sampleRate == nativeStream->getSampleRate()); + jassert (numChannels == nativeStream->getChannelCount()); + jassert (sampleRate == 0 || sampleRate == nativeStream->getSampleRate()); jassert (format == nativeStream->getFormat()); - - if (nativeStream->usesAAudio()) - jassert (bufferSize == nativeStream->getBufferSizeInFrames()); } } @@ -737,7 +730,8 @@ private: outputStream->start(); - checkIsOutputLatencyDetectionSupported(); + isInputLatencyDetectionSupported = isLatencyDetectionSupported (inputStream.get()); + isOutputLatencyDetectionSupported = isLatencyDetectionSupported (outputStream.get()); } void stop() override @@ -752,19 +746,16 @@ private: } int getOutputLatencyInSamples() override { return outputLatency; } - int getInputLatencyInSamples() override { return -1; } + int getInputLatencyInSamples() override { return inputLatency; } private: - void checkIsOutputLatencyDetectionSupported() + bool isLatencyDetectionSupported (OboeStream* stream) { - if (! openedOk()) - { - isOutputLatencyDetectionSupported = false; - return; - } + if (stream == nullptr || ! openedOk()) + return false; - auto result = outputStream->getNativeStream()->getTimestamp (CLOCK_MONOTONIC, 0, 0); - isOutputLatencyDetectionSupported = result != oboe::Result::ErrorUnimplemented; + auto result = stream->getNativeStream()->getTimestamp (CLOCK_MONOTONIC, 0, 0); + return result != oboe::Result::ErrorUnimplemented; } oboe::DataCallbackResult onAudioReady (oboe::AudioStream* stream, void* audioData, int32_t numFrames) override @@ -790,26 +781,28 @@ private: if (nativeInputStream->getFormat() != oboe::AudioFormat::I16 && nativeInputStream->getFormat() != oboe::AudioFormat::Float) { - JUCE_OBOE_LOG ("Unsupported input stream audio format: " + String (oboe::convertToText (nativeInputStream->getFormat()))); + JUCE_OBOE_LOG ("Unsupported input stream audio format: " + getOboeString (nativeInputStream->getFormat())); jassertfalse; return oboe::DataCallbackResult::Continue; } auto result = inputStream->getNativeStream()->read (inputStreamNativeBuffer.getData(), numFrames, 0); - if (result >= 0) + if (result) { OboeAudioIODeviceBufferHelpers::referAudioBufferDirectlyToOboeIfPossible (inputStreamNativeBuffer.get(), inputStreamSampleBuffer, - result); + result.value()); - OboeAudioIODeviceBufferHelpers::convertFromOboe (inputStreamNativeBuffer.get(), inputStreamSampleBuffer, result); + OboeAudioIODeviceBufferHelpers::convertFromOboe (inputStreamNativeBuffer.get(), inputStreamSampleBuffer, result.value()); } else { - // Failed to read from input stream. - jassertfalse; + JUCE_OBOE_LOG ("Failed to read from input stream: " + getOboeString (result.error())); } + + if (isInputLatencyDetectionSupported) + inputLatency = getLatencyFor (*inputStream); } //----------------- @@ -832,7 +825,7 @@ private: OboeAudioIODeviceBufferHelpers::convertToOboe (outputStreamSampleBuffer, static_cast (audioData), numFrames); if (isOutputLatencyDetectionSupported) - calculateOutputLatency(); + outputLatency = getLatencyFor (*outputStream); audioCallbackGuard.set (0); } @@ -845,10 +838,10 @@ private: ignoreUnused (stream); JUCE_OBOE_LOG ("\nUses AAudio = " + (stream != nullptr ? String ((int) stream->usesAAudio()) : String ("?")) - + "\nDirection = " + (stream != nullptr ? String (oboe::convertToText (stream->getDirection())) : String ("?")) - + "\nSharingMode = " + (stream != nullptr ? String (oboe::convertToText (stream->getSharingMode())) : String ("?")) + + "\nDirection = " + (stream != nullptr ? getOboeString (stream->getDirection()) : String ("?")) + + "\nSharingMode = " + (stream != nullptr ? getOboeString (stream->getSharingMode()) : String ("?")) + "\nChannelCount = " + (stream != nullptr ? String (stream->getChannelCount()) : String ("?")) - + "\nFormat = " + (stream != nullptr ? String (oboe::convertToText (stream->getFormat())) : String ("?")) + + "\nFormat = " + (stream != nullptr ? getOboeString (stream->getFormat()) : String ("?")) + "\nSampleRate = " + (stream != nullptr ? String (stream->getSampleRate()) : String ("?")) + "\nBufferSizeInFrames = " + (stream != nullptr ? String (stream->getBufferSizeInFrames()) : String ("?")) + "\nBufferCapacityInFrames = " + (stream != nullptr ? String (stream->getBufferCapacityInFrames()) : String ("?")) @@ -856,34 +849,48 @@ private: + "\nFramesPerCallback = " + (stream != nullptr ? String (stream->getFramesPerCallback()) : String ("?")) + "\nBytesPerFrame = " + (stream != nullptr ? String (stream->getBytesPerFrame()) : String ("?")) + "\nBytesPerSample = " + (stream != nullptr ? String (stream->getBytesPerSample()) : String ("?")) - + "\nPerformanceMode = " + String (oboe::convertToText (oboe::PerformanceMode::LowLatency)) + + "\nPerformanceMode = " + getOboeString (oboe::PerformanceMode::LowLatency) + "\ngetDeviceId = " + (stream != nullptr ? String (stream->getDeviceId()) : String ("?"))); } - void calculateOutputLatency() + int getLatencyFor (OboeStream& stream) { - // Sadly, Oboe uses non-portable int64_t (a.k.a. long on LP64 and long long on LLP64) - int64_t lastWrittenAndPresentedFrameIndex = 0; - int64_t lastFramePresentationTimeNanos = 0; + auto& nativeStream = *stream.getNativeStream(); + + if (auto latency = nativeStream.calculateLatencyMillis()) + return static_cast ((latency.value() * sampleRate) / 1000); - auto result = outputStream->getNativeStream()->getTimestamp (CLOCK_MONOTONIC, - &lastWrittenAndPresentedFrameIndex, - &lastFramePresentationTimeNanos); + // Get the time that a known audio frame was presented. + int64_t hardwareFrameIndex = 0; + int64_t hardwareFrameHardwareTime = 0; + + auto result = nativeStream.getTimestamp (CLOCK_MONOTONIC, + &hardwareFrameIndex, + &hardwareFrameHardwareTime); if (result != oboe::Result::OK) - return; + return 0; - int64_t currentNumFramesWritten = outputStream->getNativeStream()->getFramesWritten(); - int64_t framesDelta = currentNumFramesWritten - lastWrittenAndPresentedFrameIndex; - int64_t timeDeltaNanos = framesDelta * oboe::kNanosPerSecond / sampleRate; + // Get counter closest to the app. + const bool isOutput = nativeStream.getDirection() == oboe::Direction::Output; + const int64_t appFrameIndex = isOutput ? nativeStream.getFramesWritten() : nativeStream.getFramesRead(); - int64_t nextPresentationTimeNanos = lastFramePresentationTimeNanos + timeDeltaNanos; - int64_t nextFrameWriteTimeNanos = getCurrentTimeNanos(); + // Assume that the next frame will be processed at the current time + using namespace std::chrono; + int64_t appFrameAppTime = getCurrentTimeNanos();//duration_cast (steady_clock::now().time_since_epoch()).count(); + int64_t appFrameAppTime2 = duration_cast (steady_clock::now().time_since_epoch()).count(); - if (nextFrameWriteTimeNanos < 0) - return; + // Calculate the number of frames between app and hardware + int64_t frameIndexDelta = appFrameIndex - hardwareFrameIndex; - outputLatency = (int) ((nextPresentationTimeNanos - nextFrameWriteTimeNanos) * sampleRate / oboe::kNanosPerSecond); + // Calculate the time which the next frame will be or was presented + int64_t frameTimeDelta = (frameIndexDelta * oboe::kNanosPerSecond) / sampleRate; + int64_t appFrameHardwareTime = hardwareFrameHardwareTime + frameTimeDelta; + + // Calculate latency as a difference in time between when the current frame is at the app + // and when it is at the hardware. + auto latencyNanos = isOutput ? (appFrameHardwareTime - appFrameAppTime) : (appFrameAppTime - appFrameHardwareTime); + return static_cast ((latencyNanos * sampleRate) / oboe::kNanosPerSecond); } int64_t getCurrentTimeNanos() @@ -898,19 +905,23 @@ private: void onErrorBeforeClose (oboe::AudioStream* stream, oboe::Result error) override { + attachAndroidJNI(); + // only output stream should be the master stream receiving callbacks jassert (stream->getDirection() == oboe::Direction::Output); - JUCE_OBOE_LOG ("Oboe stream onErrorBeforeClose(): " + String (oboe::convertToText (error))); + JUCE_OBOE_LOG ("Oboe stream onErrorBeforeClose(): " + getOboeString (error)); printStreamDebugInfo (stream); } void onErrorAfterClose (oboe::AudioStream* stream, oboe::Result error) override { + attachAndroidJNI(); + // only output stream should be the master stream receiving callbacks jassert (stream->getDirection() == oboe::Direction::Output); - JUCE_OBOE_LOG ("Oboe stream onErrorAfterClose(): " + String (oboe::convertToText (error))); + JUCE_OBOE_LOG ("Oboe stream onErrorAfterClose(): " + getOboeString (error)); if (error == oboe::Result::ErrorDisconnected) { @@ -946,7 +957,10 @@ private: Atomic audioCallbackGuard { 0 }, streamRestartGuard { 0 }; - bool isOutputLatencyDetectionSupported = true; + bool isInputLatencyDetectionSupported = false; + int inputLatency = -1; + + bool isOutputLatencyDetectionSupported = false; int outputLatency = -1; }; @@ -972,14 +986,6 @@ private: bool running = false; - enum - { - // These at the moment correspond to OpenSL settings. - bufferSizeMultForLowLatency = 4, - bufferSizeMultForSlowAudio = 8, - defaultBufferSizeIsMultipleOfNative = 1 - }; - //============================================================================== static String audioManagerGetProperty (const String& property) { @@ -1014,6 +1020,23 @@ private: return androidHasSystemFeature ("android.hardware.audio.pro"); } + static int getDefaultFramesPerBurst() + { + // NB: this function only works for inbuilt speakers and headphones + auto* env = getEnv(); + + auto audioManager = LocalRef (env->CallObjectMethod (android.activity, + JuceAppActivity.getSystemService, + javaString ("audio").get())); + + auto propertyJavaString = javaString ("android.media.property.OUTPUT_FRAMES_PER_BUFFER"); + + auto framesPerBurstString = LocalRef ((jstring) android.activity.callObjectMethod (JuceAppActivity.audioManagerGetProperty, + propertyJavaString.get())); + + return framesPerBurstString != 0 ? env->CallStaticIntMethod (JavaInteger, JavaInteger.parseInt, framesPerBurstString.get(), 10) : 192; + } + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OboeAudioIODevice) }; @@ -1096,7 +1119,7 @@ public: forInput ? oboe::Direction::Input : oboe::Direction::Output, oboe::SharingMode::Shared, forInput ? 1 : 2, - getSdkVersion() >= 21 ? oboe::AudioFormat::Float : oboe::AudioFormat::I16, + getSDKVersion() >= 21 ? oboe::AudioFormat::Float : oboe::AudioFormat::I16, (int) OboeAudioIODevice::getNativeSampleRate(), OboeAudioIODevice::getNativeBufferSize(), nullptr); @@ -1115,18 +1138,17 @@ public: int getIndexOfDevice (AudioIODevice* device, bool asInput) const override { - if (device == nullptr) - return -1; - - auto* oboeDevice = static_cast (device); - auto oboeDeviceId = asInput ? oboeDevice->inputDeviceId - : oboeDevice->outputDeviceId; + if (auto oboeDevice = static_cast (device)) + { + auto oboeDeviceId = asInput ? oboeDevice->inputDeviceId + : oboeDevice->outputDeviceId; - auto& devices = asInput ? inputDevices : outputDevices; + auto& devices = asInput ? inputDevices : outputDevices; - for (int i = 0; i < devices.size(); ++i) - if (devices.getReference (i).id == oboeDeviceId) - return i; + for (int i = 0; i < devices.size(); ++i) + if (devices.getReference (i).id == oboeDeviceId) + return i; + } return -1; } @@ -1231,11 +1253,11 @@ public: bool supportsDevicesInfo() const { - static auto result = getSdkVersion() >= 23; + static auto result = getSDKVersion() >= 23; return result; } - int getSdkVersion() const + int getSDKVersion() const { static auto sdkVersion = getEnv()->GetStaticIntField (AndroidBuildVersion, AndroidBuildVersion.SDK_INT); return sdkVersion; @@ -1397,7 +1419,7 @@ public: return testStream != nullptr && testStream->openedOk(); } - pthread_t startThread (void* (*entry) (void*), void* userPtr) + pthread_t startThread (void*(*entry)(void*), void* userPtr) { pthread_mutex_lock (&threadReadyMutex); @@ -1437,26 +1459,16 @@ public: void onErrorBeforeClose (oboe::AudioStream*, oboe::Result error) override { - JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorBeforeClose(): " + String (oboe::convertToText (error))); + JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorBeforeClose(): " + getOboeString (error)); + ignoreUnused (error); + jassertfalse; // Should never get here! } - void onErrorAfterClose (oboe::AudioStream* stream, oboe::Result error) override + void onErrorAfterClose (oboe::AudioStream*, oboe::Result error) override { - JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorAfterClose(): " + String (oboe::convertToText (error))); - - if (error == oboe::Result::ErrorDisconnected) - { - testStream.reset(); - testStream.reset (new OboeStream (-1, - oboe::Direction::Output, - oboe::SharingMode::Exclusive, - 1, - formatUsed, - (int) OboeAudioIODevice::getNativeSampleRate(), - OboeAudioIODevice::getNativeBufferSize(), - this)); - testStream->start(); - } + JUCE_OBOE_LOG ("OboeRealtimeThread: Oboe stream onErrorAfterClose(): " + getOboeString (error)); + ignoreUnused (error); + jassertfalse; // Should never get here! } private: @@ -1480,10 +1492,7 @@ pthread_t juce_createRealtimeAudioThread (void* (*entry) (void*), void* userPtr) return {}; auto threadID = thread->startThread (entry, userPtr); - - // the thread will de-allocate itself - thread.release(); - + thread.release(); // the thread will de-allocate itself return threadID; } diff --git a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp index fa610109..d24b5b02 100644 --- a/modules/juce_audio_devices/native/juce_android_OpenSL.cpp +++ b/modules/juce_audio_devices/native/juce_android_OpenSL.cpp @@ -60,6 +60,22 @@ SLInterfaceID_ IntfIID::iid = { 0xc5657aa0, 0xdd SLInterfaceID_ IntfIID::iid = { 0x198e4940, 0xc5d7, 0x11df, 0xa2a6, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b} }; SLInterfaceID_ IntfIID::iid = { 0x89f6a7e0, 0xbeac, 0x11df, 0x8b5c, {0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b} }; +template +static void destroyObject (SLObjectType object) +{ + if (object != nullptr && *object != nullptr) + (*object)->Destroy (object); +} + +template <> +struct ContainerDeletePolicy +{ + static void destroy (SLObjectItf object) + { + destroyObject (object); + } +}; + //============================================================================== // Some life-time and type management of OpenSL objects class SlObjectRef @@ -67,27 +83,34 @@ class SlObjectRef public: //============================================================================== SlObjectRef() noexcept {} - SlObjectRef (const SlObjectRef& obj) noexcept : cb (obj.cb) {} + SlObjectRef (const SlObjectRef& obj) noexcept : cb (obj.cb) {} SlObjectRef (SlObjectRef&& obj) noexcept : cb (static_cast&&> (obj.cb)) { obj.cb = nullptr; } explicit SlObjectRef (SLObjectItf o) : cb (new ControlBlock (o)) {} //============================================================================== - SlObjectRef& operator=(const SlObjectRef& r) noexcept { cb = r.cb; return *this; } - SlObjectRef& operator=(SlObjectRef&& r) noexcept { cb = static_cast&&> (r.cb); r.cb = nullptr; return *this; } - SlObjectRef& operator=(std::nullptr_t) noexcept { cb = nullptr; return *this; } + SlObjectRef& operator= (const SlObjectRef& r) noexcept { cb = r.cb; return *this; } + SlObjectRef& operator= (SlObjectRef&& r) noexcept { cb = static_cast&&> (r.cb); r.cb = nullptr; return *this; } + SlObjectRef& operator= (std::nullptr_t) noexcept { cb = nullptr; return *this; } //============================================================================== - const SLObjectItf_* const operator*() noexcept { return *cb->ptr.get(); } - SLObjectItf operator->() noexcept { return (cb == nullptr ? nullptr : cb->ptr.get()); } - operator SLObjectItf() noexcept { return (cb == nullptr ? nullptr : cb->ptr.get()); } + const SLObjectItf_* operator*() noexcept { return *cb->ptr.get(); } + SLObjectItf operator->() noexcept { return (cb == nullptr ? nullptr : cb->ptr.get()); } + operator SLObjectItf() noexcept { return (cb == nullptr ? nullptr : cb->ptr.get()); } //============================================================================== - bool operator== (nullptr_t) const noexcept { return (cb == nullptr || cb->ptr == nullptr); } - bool operator!= (nullptr_t) const noexcept { return (cb != nullptr && cb->ptr != nullptr); } -private: + bool operator== (nullptr_t) const noexcept { return (cb == nullptr || cb->ptr == nullptr); } + bool operator!= (nullptr_t) const noexcept { return (cb != nullptr && cb->ptr != nullptr); } +private: //============================================================================== - struct ControlBlock : ReferenceCountedObject { std::unique_ptr ptr; ControlBlock() {} ControlBlock (SLObjectItf o) : ptr (o) {} }; + struct ControlBlock : ReferenceCountedObject + { + ControlBlock() = default; + ControlBlock (SLObjectItf o) : ptr (o) {} + + std::unique_ptr ptr; + }; + ReferenceCountedObjectPtr cb; }; @@ -96,53 +119,53 @@ class SlRef : public SlObjectRef { public: //============================================================================== - SlRef() noexcept : type (nullptr) {} - SlRef (SlRef& r) noexcept : SlObjectRef (r), type (r.type) {} + SlRef() noexcept {} + SlRef (const SlRef& r) noexcept : SlObjectRef (r), type (r.type) {} SlRef (SlRef&& r) noexcept : SlObjectRef (static_cast (r)), type (r.type) { r.type = nullptr; } //============================================================================== SlRef& operator= (const SlRef& r) noexcept { SlObjectRef::operator= (r); type = r.type; return *this; } - SlRef& operator= (SlRef&& r) noexcept { SlObjectRef::operator= (static_cast (r)); type = r.type; r.type = nullptr; return *this; } - SlRef& operator= (std::nullptr_t) noexcept { SlObjectRef::operator= (nullptr); type = nullptr; return *this; } + SlRef& operator= (SlRef&& r) noexcept { SlObjectRef::operator= (static_cast (r)); type = r.type; r.type = nullptr; return *this; } + SlRef& operator= (std::nullptr_t) noexcept { SlObjectRef::operator= (nullptr); type = nullptr; return *this; } //============================================================================== - T* const operator*() noexcept { return *type; } - T* const * operator->() noexcept { return type; } - operator T* const *() noexcept { return type; } + T* const operator*() noexcept { return *type; } + T* const* operator->() noexcept { return type; } + operator T* const*() noexcept { return type; } //============================================================================== - static SlRef cast (SlObjectRef& base) { return SlRef (base); } - static SlRef cast (SlObjectRef&& base) { return SlRef (static_cast (base)); } + static SlRef cast (SlObjectRef& base) { return SlRef (base); } + static SlRef cast (SlObjectRef&& base) { return SlRef (static_cast (base)); } + private: - //============================================================================== SlRef (SlObjectRef& base) : SlObjectRef (base) { - SLObjectItf obj = SlObjectRef::operator->(); - SLresult err = (*obj)->GetInterface (obj, &IntfIID::iid, &type); - if (type == nullptr || err != SL_RESULT_SUCCESS) - *this = nullptr; + if (auto obj = SlObjectRef::operator->()) + { + auto err = (*obj)->GetInterface (obj, &IntfIID::iid, &type); + + if (type != nullptr && err == SL_RESULT_SUCCESS) + return; + } + + *this = nullptr; } SlRef (SlObjectRef&& base) : SlObjectRef (static_cast (base)) { - SLObjectItf obj = SlObjectRef::operator->(); - SLresult err = (*obj)->GetInterface (obj, &IntfIID::iid, &type); - base = nullptr; + if (auto obj = SlObjectRef::operator->()) + { + auto err = (*obj)->GetInterface (obj, &IntfIID::iid, &type); + base = nullptr; - if (type == nullptr || err != SL_RESULT_SUCCESS) - *this = nullptr; - } - T* const * type; -}; + if (type != nullptr && err == SL_RESULT_SUCCESS) + return; + } -template <> -struct ContainerDeletePolicy -{ - static void destroy (SLObjectItf object) - { - if (object != nullptr) - (*object)->Destroy (object); + *this = nullptr; } + + T* const* type = nullptr; }; //============================================================================== @@ -281,8 +304,7 @@ public: numChannels (numChannelsToUse), nativeBuffer (static_cast (numChannels * owner.bufferSize * owner.numBuffers)), scratchBuffer (numChannelsToUse, owner.bufferSize), - sampleBuffer (scratchBuffer.getArrayOfWritePointers(), numChannelsToUse, owner.bufferSize), - nextBlock (0), numBlocksOut (0) + sampleBuffer (scratchBuffer.getArrayOfWritePointers(), numChannelsToUse, owner.bufferSize) {} ~OpenSLQueueRunner() @@ -297,6 +319,7 @@ public: bool init() { runner = crtp().createPlayerOrRecorder(); + if (runner == nullptr) return false; @@ -319,13 +342,13 @@ public: } queue = SlRef::cast (runner); + if (queue == nullptr) return false; return ((*queue)->RegisterCallback (queue, staticFinished, this) == SL_RESULT_SUCCESS); } - void clear() { nextBlock.set (0); @@ -376,7 +399,7 @@ public: HeapBlock nativeBuffer; AudioBuffer scratchBuffer, sampleBuffer; - Atomic nextBlock, numBlocksOut; + Atomic nextBlock { 0 }, numBlocksOut { 0 }; }; //============================================================================== @@ -385,35 +408,36 @@ public: { using Base = OpenSLQueueRunner, SLPlayItf_>; - enum { isPlayer = 1 }; - OpenSLQueueRunnerPlayer (OpenSLSessionT& sessionToUse, int numChannelsToUse) : Base (sessionToUse, numChannelsToUse) {} SlRef createPlayerOrRecorder() { - SLDataLocator_AndroidSimpleBufferQueue queueLocator = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, static_cast (Base::owner.numBuffers)}; - SLDataLocator_OutputMix outputMix = {SL_DATALOCATOR_OUTPUTMIX, Base::owner.outputMix}; + SLDataLocator_AndroidSimpleBufferQueue queueLocator = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, static_cast (Base::owner.numBuffers) }; + SLDataLocator_OutputMix outputMix = { SL_DATALOCATOR_OUTPUTMIX, Base::owner.outputMix }; PCMDataFormatEx dataFormat; BufferHelpers::initPCMDataFormat (dataFormat, Base::numChannels, Base::owner.sampleRate); - SLDataSource source = {&queueLocator, &dataFormat}; - SLDataSink sink = {&outputMix, nullptr}; + SLDataSource source = { &queueLocator, &dataFormat }; + SLDataSink sink = { &outputMix, nullptr }; SLInterfaceID queueInterfaces[] = { &IntfIID::iid, &IntfIID::iid }; SLboolean interfaceRequired[] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_FALSE}; SLObjectItf obj = nullptr; - SLresult status = (*Base::owner.engine)->CreateAudioPlayer (Base::owner.engine, &obj, &source, &sink, 2, queueInterfaces, interfaceRequired); - if (status != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) + if (auto e = *Base::owner.engine) { - if (obj != nullptr) - (*obj)->Destroy (obj); + auto status = e->CreateAudioPlayer (Base::owner.engine, &obj, &source, &sink, 2, + queueInterfaces, interfaceRequired); - return SlRef(); + if (status != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize(obj, 0) != SL_RESULT_SUCCESS) + { + destroyObject (obj); + return {}; + } } return SlRef::cast (SlObjectRef (obj)); @@ -423,44 +447,42 @@ public: }; template - struct OpenSLQueueRunnerRecorder : OpenSLQueueRunner, SLRecordItf_> + struct OpenSLQueueRunnerRecorder : public OpenSLQueueRunner, SLRecordItf_> { using Base = OpenSLQueueRunner, SLRecordItf_>; - enum { isPlayer = 0 }; - OpenSLQueueRunnerRecorder (OpenSLSessionT& sessionToUse, int numChannelsToUse) : Base (sessionToUse, numChannelsToUse) {} SlRef createPlayerOrRecorder() { - SLDataLocator_IODevice ioDeviceLocator = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, SL_DEFAULTDEVICEID_AUDIOINPUT, nullptr}; - SLDataLocator_AndroidSimpleBufferQueue queueLocator = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, static_cast (Base::owner.numBuffers)}; + SLDataLocator_IODevice ioDeviceLocator = { SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT, SL_DEFAULTDEVICEID_AUDIOINPUT, nullptr }; + SLDataLocator_AndroidSimpleBufferQueue queueLocator = { SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, static_cast (Base::owner.numBuffers) }; PCMDataFormatEx dataFormat; BufferHelpers::initPCMDataFormat (dataFormat, Base::numChannels, Base::owner.sampleRate); - SLDataSource source = {&ioDeviceLocator, nullptr}; - SLDataSink sink = {&queueLocator, &dataFormat}; + SLDataSource source = { &ioDeviceLocator, nullptr }; + SLDataSink sink = { &queueLocator, &dataFormat }; SLInterfaceID queueInterfaces[] = { &IntfIID::iid, &IntfIID::iid }; - SLboolean interfaceRequired[] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_FALSE}; + SLboolean interfaceRequired[] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_FALSE }; SLObjectItf obj = nullptr; - SLresult status = (*Base::owner.engine)->CreateAudioRecorder (Base::owner.engine, &obj, &source, &sink, 2, queueInterfaces, interfaceRequired); - if (status != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) + if (auto e = *Base::owner.engine) { - if (obj != nullptr) - (*obj)->Destroy (obj); + auto status = e->CreateAudioRecorder (Base::owner.engine, &obj, &source, &sink, 2, queueInterfaces, interfaceRequired); - return SlRef(); + if (status != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) + { + destroyObject (obj); + return {}; + } } - SlRef recorder = SlRef::cast (SlObjectRef (obj)); - - return recorder; + return SlRef::cast (SlObjectRef (obj)); } bool setAudioPreprocessingEnabled (bool shouldEnable) @@ -468,13 +490,14 @@ public: if (Base::config != nullptr) { const bool supportsUnprocessed = (getEnv()->GetStaticIntField (AndroidBuildVersion, AndroidBuildVersion.SDK_INT) >= 25); + const SLuint32 recordingPresetValue = (shouldEnable ? SL_ANDROID_RECORDING_PRESET_GENERIC : (supportsUnprocessed ? SL_ANDROID_RECORDING_PRESET_UNPROCESSED : SL_ANDROID_RECORDING_PRESET_VOICE_RECOGNITION)); - SLresult status = (*Base::config)->SetConfiguration (Base::config, SL_ANDROID_KEY_RECORDING_PRESET, - &recordingPresetValue, sizeof (recordingPresetValue)); + auto status = (*Base::config)->SetConfiguration (Base::config, SL_ANDROID_KEY_RECORDING_PRESET, + &recordingPresetValue, sizeof (recordingPresetValue)); return (status == SL_RESULT_SUCCESS); } @@ -482,7 +505,8 @@ public: return false; } - void setState (bool running) { (*Base::runner)->SetRecordState (Base::runner, running ? SL_RECORDSTATE_RECORDING : SL_RECORDSTATE_STOPPED); } + void setState (bool running) { (*Base::runner)->SetRecordState (Base::runner, running ? SL_RECORDSTATE_RECORDING + : SL_RECORDSTATE_STOPPED); } }; //============================================================================== @@ -494,21 +518,19 @@ public: double samleRateToUse, int bufferSizeToUse, int numBuffersToUse) : inputChannels (numInputChannels), outputChannels (numOutputChannels), - sampleRate (samleRateToUse), bufferSize (bufferSizeToUse), numBuffers (numBuffersToUse), - running (false), audioProcessingEnabled (true), callback (nullptr) + sampleRate (samleRateToUse), bufferSize (bufferSizeToUse), numBuffers (numBuffersToUse) { jassert (numInputChannels > 0 || numOutputChannels > 0); - if (CreateEngineFunc createEngine = (CreateEngineFunc) slLibraryToUse.getFunction ("slCreateEngine")) + if (auto createEngine = (CreateEngineFunc) slLibraryToUse.getFunction ("slCreateEngine")) { SLObjectItf obj = nullptr; + auto err = createEngine (&obj, 0, nullptr, 0, nullptr, nullptr); - SLresult err = createEngine (&obj, 0, nullptr, 0, nullptr, nullptr); - if (err != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) + if (err != SL_RESULT_SUCCESS || obj == nullptr || *obj == nullptr + || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) { - if (obj != nullptr) - (*obj)->Destroy (obj); - + destroyObject (obj); return; } @@ -518,13 +540,12 @@ public: if (outputChannels > 0) { SLObjectItf obj = nullptr; + auto err = (*engine)->CreateOutputMix (engine, &obj, 0, nullptr, nullptr); - SLresult err = (*engine)->CreateOutputMix (engine, &obj, 0, nullptr, nullptr); - if (err != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) + if (err != SL_RESULT_SUCCESS || obj == nullptr || *obj == nullptr + || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) { - if (obj != nullptr) - (*obj)->Destroy (obj); - + destroyObject (obj); return; } @@ -537,6 +558,7 @@ public: virtual bool openedOK() const { return (engine != nullptr && (outputChannels == 0 || (outputMix != nullptr))); } virtual void start() { stop(); jassert (callback.get() != nullptr); running = true; } virtual void stop() { running = false; } + virtual bool setAudioPreprocessingEnabled (bool shouldEnable) = 0; virtual bool supportsFloatingPoint() const noexcept = 0; virtual int getXRunCount() const noexcept = 0; @@ -553,9 +575,10 @@ public: jassert (callbackToUse != nullptr); // spin-lock until we can set the callback - while (true) + for (;;) { - AudioIODeviceCallback* old = callback.get(); + auto old = callback.get(); + if (old == callbackToUse) break; @@ -568,7 +591,7 @@ public: void process (const float** inputChannelData, float** outputChannelData) { - if (AudioIODeviceCallback* cb = callback.exchange(nullptr)) + if (auto* cb = callback.exchange (nullptr)) { cb->audioDeviceIOCallback (inputChannelData, inputChannels, outputChannelData, outputChannels, bufferSize); callback.set (cb); @@ -586,19 +609,19 @@ public: int numBuffersToUse); //============================================================================== - typedef SLresult (*CreateEngineFunc)(SLObjectItf*, SLuint32, const SLEngineOption*, SLuint32, const SLInterfaceID*, const SLboolean*); + using CreateEngineFunc = SLresult (*) (SLObjectItf*, SLuint32, const SLEngineOption*, + SLuint32, const SLInterfaceID*, const SLboolean*); //============================================================================== int inputChannels, outputChannels; double sampleRate; int bufferSize, numBuffers; - - bool running, audioProcessingEnabled; + bool running = false, audioProcessingEnabled = true; SlRef engine; SlRef outputMix; - Atomic callback; + Atomic callback { nullptr }; }; template @@ -609,7 +632,8 @@ public: int numInputChannels, int numOutputChannels, double samleRateToUse, int bufferSizeToUse, int numBuffersToUse) - : OpenSLSession (slLibraryToUse, numInputChannels, numOutputChannels, samleRateToUse, bufferSizeToUse, numBuffersToUse) + : OpenSLSession (slLibraryToUse, numInputChannels, numOutputChannels, + samleRateToUse, bufferSizeToUse, numBuffersToUse) { jassert (numInputChannels > 0 || numOutputChannels > 0); @@ -644,8 +668,8 @@ public: bool openedOK() const override { - return (OpenSLSession::openedOK() && (inputChannels == 0 || recorder != nullptr) - && (outputChannels == 0 || player != nullptr)); + return OpenSLSession::openedOK() && (inputChannels == 0 || recorder != nullptr) + && (outputChannels == 0 || player != nullptr); } void start() override @@ -762,11 +786,7 @@ public: }; //============================================================================== - OpenSLAudioIODevice (const String& deviceName) - : AudioIODevice (deviceName, openSLTypeName), - actualBufferSize (0), sampleRate (0), audioBuffersToEnqueue (0), - audioProcessingEnabled (true), - callback (nullptr) + OpenSLAudioIODevice (const String& deviceName) : AudioIODevice (deviceName, openSLTypeName) { // OpenSL has piss-poor support for determining latency, so the only way I can find to // get a number for this is by asking the AudioTrack/AudioRecord classes.. @@ -813,7 +833,7 @@ public: Array getAvailableSampleRates() override { - //see https://developer.android.com/ndk/guides/audio/opensl-for-android.html + // see https://developer.android.com/ndk/guides/audio/opensl-for-android.html static const double rates[] = { 8000.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0, 44100.0, 48000.0 }; @@ -821,6 +841,7 @@ public: // make sure the native sample rate is pafrt of the list double native = getNativeSampleRate(); + if (native != 0.0 && ! retval.contains (native)) retval.add (native); @@ -850,7 +871,8 @@ public: close(); lastError.clear(); - sampleRate = (int) requestedSampleRate; + + sampleRate = (int) (requestedSampleRate > 0 ? requestedSampleRate : getNativeSampleRate()); auto totalPreferredBufferSize = (bufferSize <= 0) ? getDefaultBufferSize() : bufferSize; auto nativeBufferSize = getNativeBufferSize(); @@ -862,11 +884,11 @@ public: activeOutputChans = outputChannels; activeOutputChans.setRange (2, activeOutputChans.getHighestBit(), false); - int numOutputChannels = activeOutputChans.countNumberOfSetBits(); + auto numOutputChannels = activeOutputChans.countNumberOfSetBits(); activeInputChans = inputChannels; activeInputChans.setRange (1, activeInputChans.getHighestBit(), false); - int numInputChannels = activeInputChans.countNumberOfSetBits(); + auto numInputChannels = activeInputChans.countNumberOfSetBits(); if (numInputChannels > 0 && (! RuntimePermissions::isGranted (RuntimePermissions::recordAudio))) { @@ -879,7 +901,9 @@ public: session.reset (OpenSLSession::create (slLibrary, numInputChannels, numOutputChannels, sampleRate, actualBufferSize, audioBuffersToEnqueue)); if (session != nullptr) + { session->setAudioPreprocessingEnabled (audioProcessingEnabled); + } else { if (numInputChannels > 0 && numOutputChannels > 0 && RuntimePermissions::isGranted (RuntimePermissions::recordAudio)) @@ -945,7 +969,7 @@ public: { if (session != nullptr && callback != newCallback) { - AudioIODeviceCallback* oldCallback = callback; + auto oldCallback = callback; if (newCallback != nullptr) newCallback->audioDeviceAboutToStart (this); @@ -1001,12 +1025,12 @@ private: //============================================================================== DynamicLibrary slLibrary; - int actualBufferSize, sampleRate, audioBuffersToEnqueue; + int actualBufferSize = 0, sampleRate = 0, audioBuffersToEnqueue = 0; int inputLatency, outputLatency; - bool deviceOpen, audioProcessingEnabled; + bool deviceOpen = false, audioProcessingEnabled = true; String lastError; BigInteger activeOutputChans, activeInputChans; - AudioIODeviceCallback* callback; + AudioIODeviceCallback* callback = nullptr; std::unique_ptr session; @@ -1210,12 +1234,12 @@ public: SLObjectItf obj = nullptr; auto err = createEngine (&obj, 0, nullptr, 0, nullptr, nullptr); - if (err != SL_RESULT_SUCCESS || obj == nullptr) + if (err != SL_RESULT_SUCCESS || obj == nullptr || *obj == nullptr) return; if ((*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } @@ -1223,7 +1247,7 @@ public: if (engine == nullptr) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } @@ -1232,7 +1256,7 @@ public: if (err != SL_RESULT_SUCCESS || obj == nullptr || (*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } @@ -1240,7 +1264,7 @@ public: if (outputMix == nullptr) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } @@ -1264,7 +1288,7 @@ public: if ((*obj)->Realize (obj, 0) != SL_RESULT_SUCCESS) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } @@ -1272,7 +1296,7 @@ public: if (player == nullptr) { - (*obj)->Destroy (obj); + destroyObject (obj); return; } diff --git a/modules/juce_audio_devices/native/juce_ios_Audio.cpp b/modules/juce_audio_devices/native/juce_ios_Audio.cpp index 23d8d4ff..58bcb9a5 100644 --- a/modules/juce_audio_devices/native/juce_ios_Audio.cpp +++ b/modules/juce_audio_devices/native/juce_ios_Audio.cpp @@ -255,9 +255,8 @@ struct iOSAudioIODevice::Pimpl : public AudioPlayHead, setAudioSessionActive (true); updateHardwareInfo(); - setAudioSessionActive (false); - channelData.reconfigure ({}, {}); + setAudioSessionActive (false); sessionHolder->activeDevices.add (this); } @@ -451,10 +450,11 @@ struct iOSAudioIODevice::Pimpl : public AudioPlayHead, << ", targetSampleRate: " << targetSampleRate << ", targetBufferSize: " << targetBufferSize); + setAudioSessionActive (true); + channelData.reconfigure (requestedInputChannels, requestedOutputChannels); setAudioSessionCategory (channelData.areInputChannelsAvailable() ? AVAudioSessionCategoryPlayAndRecord : AVAudioSessionCategoryPlayback); - setAudioSessionActive (true); setTargetSampleRateAndBufferSize(); diff --git a/modules/juce_audio_devices/native/juce_linux_ALSA.cpp b/modules/juce_audio_devices/native/juce_linux_ALSA.cpp index b971afc7..d1ecf483 100644 --- a/modules/juce_audio_devices/native/juce_linux_ALSA.cpp +++ b/modules/juce_audio_devices/native/juce_linux_ALSA.cpp @@ -1115,7 +1115,7 @@ private: if (cardNum < 0) break; - if (JUCE_CHECKED_RESULT (snd_ctl_open (&handle, ("hw:" + String (cardNum)).toUTF8(), SND_CTL_NONBLOCK)) >= 0) + if (JUCE_CHECKED_RESULT (snd_ctl_open (&handle, ("hw:" + String (cardNum)).toRawUTF8(), SND_CTL_NONBLOCK)) >= 0) { if (JUCE_CHECKED_RESULT (snd_ctl_card_info (handle, info)) >= 0) { diff --git a/modules/juce_audio_devices/native/juce_linux_Bela.cpp b/modules/juce_audio_devices/native/juce_linux_Bela.cpp index cfe8dc89..a4d000ea 100644 --- a/modules/juce_audio_devices/native/juce_linux_Bela.cpp +++ b/modules/juce_audio_devices/native/juce_linux_Bela.cpp @@ -23,6 +23,136 @@ namespace juce { +//============================================================================== +class BelaMidiInput +{ +public: + static Array midiInputs; + + BelaMidiInput (const String& port, MidiInput* input, MidiInputCallback* callback) + : midiInput (input), midiPort (port), midiCallback (callback) + { + jassert (midiCallback != nullptr); + midiInputs.add (this); + } + + ~BelaMidiInput() + { + stop(); + midiInputs.removeAllInstancesOf (this); + } + + void start() + { + midi.readFrom (midiPort.toRawUTF8()); + } + + void stop() + { + midi.enableParser (false); + } + + void poll() + { + for (;;) + { + auto data = midi.getInput(); + + if (data < 0) + break; + + auto byte = (uint8) data; + concatenator.pushMidiData (&byte, 1, 0.0, midiInput, *midiCallback); + } + } + + static StringArray getDevices (bool input) + { + StringArray devices; + + for (auto& card : findAllALSACardIDs()) + findMidiDevices (devices, input, card); + + return devices; + } + +private: + static Array findAllALSACardIDs() + { + Array cards; + int card = -1; + + for (;;) + { + auto status = snd_card_next (&card); + + if (status != 0 || card < 0) + break; + + cards.add (card); + } + + return cards; + } + + // Adds all midi devices to the devices array of the given input/output type on the given card + static void findMidiDevices (StringArray& devices, bool input, int cardNum) + { + snd_ctl_t* ctl = nullptr; + auto status = snd_ctl_open (&ctl, ("hw:" + String (cardNum)).toRawUTF8(), 0); + + if (status < 0) + return; + + int device = -1; + + for (;;) + { + status = snd_ctl_rawmidi_next_device (ctl, &device); + + if (status < 0 || device < 0) + break; + + snd_rawmidi_info_t* info; + snd_rawmidi_info_alloca (&info); + + snd_rawmidi_info_set_device (info, device); + snd_rawmidi_info_set_stream (info, input ? SND_RAWMIDI_STREAM_INPUT + : SND_RAWMIDI_STREAM_OUTPUT); + + snd_ctl_rawmidi_info (ctl, info); + + auto subCount = snd_rawmidi_info_get_subdevices_count (info); + + for (int sub = 0; sub < subCount; ++sub) + { + snd_rawmidi_info_set_subdevice (info, sub); + + status = snd_ctl_rawmidi_info (ctl, info); + + if (status == 0) + devices.add ("hw:" + String (cardNum) + "," + + String (device) + "," + + String (sub)); + } + } + + snd_ctl_close (ctl); + } + + String midiPort; + MidiInput* const midiInput; + MidiInputCallback* const midiCallback; + + Midi midi; + MidiDataConcatenator concatenator { 512 }; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BelaMidiInput) +}; + +Array BelaMidiInput::midiInputs; + + //============================================================================== class BelaAudioIODevice : public AudioIODevice { @@ -33,7 +163,10 @@ public: Bela_defaultSettings (&defaultSettings); } - ~BelaAudioIODevice() {} + ~BelaAudioIODevice() + { + close(); + } //============================================================================== StringArray getOutputChannelNames() override { return { "Out #1", "Out #2" }; } @@ -223,6 +356,10 @@ private: ScopedLock lock (callbackLock); + // Check for and process and midi + for (auto midiInput : BelaMidiInput::midiInputs) + midiInput->poll(); + if (callback != nullptr) { jassert (context.audioFrames <= actualBufferSize); @@ -370,4 +507,58 @@ AudioIODeviceType* AudioIODeviceType::createAudioIODeviceType_Bela() return new BelaAudioIODeviceType(); } + +//============================================================================== +// TODO: Add Bela MidiOutput support + +StringArray MidiOutput::getDevices() { return {}; } +int MidiOutput::getDefaultDeviceIndex() { return 0; } +MidiOutput* MidiOutput::openDevice (int) { return {}; } +MidiOutput* MidiOutput::createNewDevice (const String&) { return {}; } +MidiOutput::~MidiOutput() {} +void MidiOutput::sendMessageNow (const MidiMessage&) {} + + +//============================================================================== +MidiInput::MidiInput (const String& nm) : name (nm) {} + +MidiInput::~MidiInput() +{ + delete static_cast (internal); +} + +void MidiInput::start() { static_cast (internal)->start(); } +void MidiInput::stop() { static_cast (internal)->stop(); } + +int MidiInput::getDefaultDeviceIndex() +{ + return 0; +} + +StringArray MidiInput::getDevices() +{ + return BelaMidiInput::getDevices (true); +} + +MidiInput* MidiInput::openDevice (int index, MidiInputCallback* callback) +{ + auto devices = getDevices(); + + if (index >= 0 && index < devices.size()) + { + auto deviceName = devices[index]; + auto result = new MidiInput (deviceName); + result->internal = new BelaMidiInput (deviceName, result, callback); + return result; + } + + return {}; +} + +MidiInput* MidiInput::createNewDevice (const String& deviceName, MidiInputCallback* callback) +{ + jassertfalse; // N/A on Bela + return {}; +} + } // namespace juce diff --git a/modules/juce_audio_devices/native/juce_linux_Midi.cpp b/modules/juce_audio_devices/native/juce_linux_Midi.cpp index 289bb414..8fa26434 100644 --- a/modules/juce_audio_devices/native/juce_linux_Midi.cpp +++ b/modules/juce_audio_devices/native/juce_linux_Midi.cpp @@ -25,11 +25,6 @@ namespace juce #if JUCE_ALSA -// You can define these strings in your app if you want to override the default names: -#ifndef JUCE_ALSA_MIDI_NAME - #define JUCE_ALSA_MIDI_NAME JUCEApplicationBase::getInstance()->getApplicationName().toUTF8() -#endif - //============================================================================== namespace { @@ -38,6 +33,49 @@ namespace class AlsaClient : public ReferenceCountedObject { public: + AlsaClient() + { + jassert (instance == nullptr); + + snd_seq_open (&handle, "default", SND_SEQ_OPEN_DUPLEX, 0); + + if (handle != nullptr) + { + snd_seq_nonblock (handle, SND_SEQ_NONBLOCK); + snd_seq_set_client_name (handle, getAlsaMidiName().toRawUTF8()); + clientId = snd_seq_client_id (handle); + + // It's good idea to pre-allocate a good number of elements + ports.ensureStorageAllocated (32); + } + } + + ~AlsaClient() + { + jassert (instance != nullptr); + instance = nullptr; + + if (handle != nullptr) + snd_seq_close (handle); + + jassert (activeCallbacks.get() == 0); + + if (inputThread) + inputThread->stopThread (3000); + } + + static String getAlsaMidiName() + { + #ifdef JUCE_ALSA_MIDI_NAME + return JUCE_ALSA_MIDI_NAME; + #else + if (auto* app = JUCEApplicationBase::getInstance()) + return app->getApplicationName(); + + return "JUCE"; + #endif + } + using Ptr = ReferenceCountedObjectPtr; //============================================================================== @@ -113,9 +151,9 @@ public: snd_seq_ev_clear (&event); auto numBytes = (long) message.getRawDataSize(); - const uint8* data = message.getRawData(); + auto* data = message.getRawData(); - auto* seqHandle = client.get(); + auto seqHandle = client.get(); bool success = true; while (numBytes > 0) @@ -154,12 +192,12 @@ public: void createPort (const String& name, bool enableSubscription) { - if (auto* seqHandle = client.get()) + if (auto seqHandle = client.get()) { const unsigned int caps = - isInput - ? (SND_SEQ_PORT_CAP_WRITE | (enableSubscription ? SND_SEQ_PORT_CAP_SUBS_WRITE : 0)) - : (SND_SEQ_PORT_CAP_WRITE | (enableSubscription ? SND_SEQ_PORT_CAP_SUBS_READ : 0)); + isInput ? (SND_SEQ_PORT_CAP_WRITE | (enableSubscription ? SND_SEQ_PORT_CAP_SUBS_WRITE : 0)) + : (SND_SEQ_PORT_CAP_READ | (enableSubscription ? SND_SEQ_PORT_CAP_SUBS_READ : 0)); + portId = snd_seq_create_simple_port (seqHandle, name.toUTF8(), caps, SND_SEQ_PORT_TYPE_MIDI_GENERIC | SND_SEQ_PORT_TYPE_APPLICATION); @@ -251,38 +289,6 @@ private: static AlsaClient* instance; - //============================================================================== - friend class ReferenceCountedObjectPtr; - friend struct ContainerDeletePolicy; - - AlsaClient() - { - jassert (instance == nullptr); - - snd_seq_open (&handle, "default", SND_SEQ_OPEN_DUPLEX, 0); - snd_seq_nonblock (handle, SND_SEQ_NONBLOCK); - snd_seq_set_client_name (handle, JUCE_ALSA_MIDI_NAME); - clientId = snd_seq_client_id(handle); - - // It's good idea to pre-allocate a good number of elements - ports.ensureStorageAllocated (32); - } - - ~AlsaClient() - { - jassert (instance != nullptr); - - instance = nullptr; - - if (handle != nullptr) - snd_seq_close (handle); - - jassert (activeCallbacks.get() == 0); - - if (inputThread) - inputThread->stopThread (3000); - } - //============================================================================== class MidiInputThread : public Thread { @@ -295,9 +301,10 @@ private: void run() override { + auto seqHandle = client.get(); + const int maxEventSize = 16 * 1024; snd_midi_event_t* midiParser; - snd_seq_t* seqHandle = client.get(); if (snd_midi_event_new (maxEventSize, &midiParser) >= 0) { @@ -321,8 +328,8 @@ private: if (snd_seq_event_input (seqHandle, &inputEvent) >= 0) { // xxx what about SYSEXes that are too big for the buffer? - const long numBytes = snd_midi_event_decode (midiParser, buffer, - maxEventSize, inputEvent); + auto numBytes = snd_midi_event_decode (midiParser, buffer, + maxEventSize, inputEvent); snd_midi_event_reset_decode (midiParser); @@ -360,7 +367,7 @@ static AlsaClient::Port* iterateMidiClient (const AlsaClient::Ptr& client, { AlsaClient::Port* port = nullptr; - snd_seq_t* seqHandle = client->get(); + auto seqHandle = client->get(); snd_seq_port_info_t* portInfo = nullptr; snd_seq_port_info_alloca (&portInfo); @@ -406,7 +413,7 @@ static AlsaClient::Port* iterateMidiDevices (bool forInput, AlsaClient::Port* port = nullptr; auto client = AlsaClient::getInstance(); - if (auto* seqHandle = client->get()) + if (auto seqHandle = client->get()) { snd_seq_system_info_t* systemInfo = nullptr; snd_seq_client_info_t* clientInfo = nullptr; @@ -503,8 +510,7 @@ void MidiOutput::sendMessageNow (const MidiMessage& message) } //============================================================================== -MidiInput::MidiInput (const String& nm) - : name (nm), internal (nullptr) +MidiInput::MidiInput (const String& nm) : name (nm) { } @@ -538,8 +544,6 @@ StringArray MidiInput::getDevices() MidiInput* MidiInput::openDevice (int deviceIndex, MidiInputCallback* callback) { - MidiInput* newDevice = nullptr; - StringArray devices; auto* port = iterateMidiDevices (true, devices, deviceIndex); @@ -548,26 +552,22 @@ MidiInput* MidiInput::openDevice (int deviceIndex, MidiInputCallback* callback) jassert (port->isValid()); - newDevice = new MidiInput (devices [deviceIndex]); + auto newDevice = new MidiInput (devices [deviceIndex]); port->setupInput (newDevice, callback); newDevice->internal = port; - return newDevice; } MidiInput* MidiInput::createNewDevice (const String& deviceName, MidiInputCallback* callback) { - MidiInput* newDevice = nullptr; - auto client = AlsaClient::getInstance(); auto* port = client->createPort (deviceName, true, true); jassert (port->isValid()); - newDevice = new MidiInput (deviceName); + auto newDevice = new MidiInput (deviceName); port->setupInput (newDevice, callback); newDevice->internal = port; - return newDevice; } @@ -584,7 +584,7 @@ MidiOutput* MidiOutput::createNewDevice (const String&) { return nul MidiOutput::~MidiOutput() {} void MidiOutput::sendMessageNow (const MidiMessage&) {} -MidiInput::MidiInput (const String& nm) : name (nm), internal (nullptr) {} +MidiInput::MidiInput (const String& nm) : name (nm) {} MidiInput::~MidiInput() {} void MidiInput::start() {} void MidiInput::stop() {} diff --git a/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp b/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp index e08b170b..fdf234e8 100644 --- a/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp +++ b/modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp @@ -289,15 +289,17 @@ public: if (OK (AudioObjectGetPropertyData (deviceID, &pa, 0, nullptr, &size, ranges))) { - static const double possibleRates[] = { 44100.0, 48000.0, 88200.0, 96000.0, 176400.0, 192000.0, 384000.0 }; - - for (int i = 0; i < numElementsInArray (possibleRates); ++i) + for (auto r : { 8000, 11025, 16000, 22050, 32000, + 44100, 48000, 88200, 96000, 176400, + 192000, 352800, 384000, 705600, 768000 }) { + auto rate = (double) r; + for (int j = size / (int) sizeof (AudioValueRange); --j >= 0;) { - if (possibleRates[i] >= ranges[j].mMinimum - 2 && possibleRates[i] <= ranges[j].mMaximum + 2) + if (rate >= ranges[j].mMinimum - 2 && rate <= ranges[j].mMaximum + 2) { - newSampleRates.add (possibleRates[i]); + newSampleRates.add (rate); break; } } @@ -462,6 +464,9 @@ public: inputChannelInfo.swapWith (newInChans); outputChannelInfo.swapWith (newOutChans); + numInputChans = inputChannelInfo.size(); + numOutputChans = outputChannelInfo.size(); + allocateTempBuffers(); } @@ -574,7 +579,7 @@ public: OSType typeId = types[index]; - OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (typeId), &typeId)); + OK (AudioObjectSetPropertyData (deviceID, &pa, 0, nullptr, sizeof (typeId), &typeId)); } } } @@ -600,7 +605,7 @@ public: pa.mScope = kAudioObjectPropertyScopeGlobal; pa.mElement = kAudioObjectPropertyElementMaster; Float64 sr = newSampleRate; - return OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (sr), &sr)); + return OK (AudioObjectSetPropertyData (deviceID, &pa, 0, nullptr, sizeof (sr), &sr)); } //============================================================================== @@ -643,7 +648,7 @@ public: pa.mElement = kAudioObjectPropertyElementMaster; UInt32 framesPerBuf = (UInt32) bufferSizeSamples; - if (! OK (AudioObjectSetPropertyData (deviceID, &pa, 0, 0, sizeof (framesPerBuf), &framesPerBuf))) + if (! OK (AudioObjectSetPropertyData (deviceID, &pa, 0, nullptr, sizeof (framesPerBuf), &framesPerBuf))) { updateDetailsFromDevice(); error = "Couldn't change buffer size"; @@ -686,7 +691,7 @@ public: else { OK (AudioDeviceDestroyIOProcID (deviceID, audioProcID)); - audioProcID = 0; + audioProcID = {}; } } } @@ -712,7 +717,7 @@ public: { OK (AudioDeviceStop (deviceID, audioIOProc)); OK (AudioDeviceDestroyIOProcID (deviceID, audioProcID)); - audioProcID = 0; + audioProcID = {}; started = false; @@ -776,7 +781,7 @@ public: for (int i = numOutputChans; --i >= 0;) { - auto& info = outputChannelInfo.getReference(i); + auto& info = outputChannelInfo.getReference (i); auto src = tempOutputBuffers[i]; auto dest = ((float*) outOutputData->mBuffers[info.streamNum].mData) + info.dataOffsetSamples; auto stride = info.dataStrideSamples; @@ -831,7 +836,7 @@ public: Array sampleRates; Array bufferSizes; AudioIODeviceCallback* callback = nullptr; - AudioDeviceIOProcID audioProcID = 0; + AudioDeviceIOProcID audioProcID = {}; private: CriticalSection callbackLock; diff --git a/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp b/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp index f285b0c2..ec48fdf7 100644 --- a/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp +++ b/modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp @@ -222,7 +222,7 @@ namespace CoreMidiHelpers { // It seems that OSX can be a bit picky about the thread that's first used to // search for devices. It's safest to use the message thread for calling this. - jassert (MessageManager::getInstance()->isThisTheMessageThread()); + JUCE_ASSERT_MESSAGE_THREAD StringArray s; enableSimulatorMidiSession(); @@ -268,7 +268,7 @@ namespace CoreMidiHelpers { // Since OSX 10.6, the MIDIClientCreate function will only work // correctly when called from the message thread! - jassert (MessageManager::getInstance()->isThisTheMessageThread()); + JUCE_ASSERT_MESSAGE_THREAD enableSimulatorMidiSession(); @@ -344,8 +344,8 @@ namespace CoreMidiHelpers for (unsigned int i = 0; i < pktlist->numPackets; ++i) { - concatenator.pushMidiData (packet->data, (int) packet->length, time, - input, callback); + auto len = readUnalignedlength)> (&(packet->length)); + concatenator.pushMidiData (packet->data, (int) len, time, input, callback); packet = MIDIPacketNext (packet); } diff --git a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp index 35c357d0..b08d741f 100644 --- a/modules/juce_audio_devices/native/juce_win32_ASIO.cpp +++ b/modules/juce_audio_devices/native/juce_win32_ASIO.cpp @@ -346,11 +346,11 @@ public: if (asioObject != nullptr) { - const int possibleSampleRates[] = { 32000, 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 }; - - for (int index = 0; index < numElementsInArray (possibleSampleRates); ++index) - if (asioObject->canSampleRate ((double) possibleSampleRates[index]) == 0) - newRates.add ((double) possibleSampleRates[index]); + for (auto rate : { 8000, 11025, 16000, 22050, 32000, + 44100, 48000, 88200, 96000, 176400, + 192000, 352800, 384000, 705600, 768000 }) + if (asioObject->canSampleRate ((double) rate) == 0) + newRates.add ((double) rate); } if (newRates.isEmpty()) @@ -787,9 +787,14 @@ private: void reloadChannelNames() { + long totalInChannels = 0, totalOutChannels = 0; + if (asioObject != nullptr - && asioObject->getChannels (&totalNumInputChans, &totalNumOutputChans) == ASE_OK) + && asioObject->getChannels (&totalInChannels, &totalOutChannels) == ASE_OK) { + totalNumInputChans = totalInChannels; + totalNumOutputChans = totalOutChannels; + inputChannelNames.clear(); outputChannelNames.clear(); diff --git a/modules/juce_audio_devices/native/juce_win32_Midi.cpp b/modules/juce_audio_devices/native/juce_win32_Midi.cpp index f820dce8..0864a053 100644 --- a/modules/juce_audio_devices/native/juce_win32_Midi.cpp +++ b/modules/juce_audio_devices/native/juce_win32_Midi.cpp @@ -608,15 +608,31 @@ Array Win32MidiService::Mid //============================================================================== //============================================================================== #if JUCE_USE_WINRT_MIDI + +#ifndef JUCE_FORCE_WINRT_MIDI + #define JUCE_FORCE_WINRT_MIDI 0 +#endif + +#ifndef JUCE_WINRT_MIDI_LOGGING + #define JUCE_WINRT_MIDI_LOGGING 0 +#endif + +#if JUCE_WINRT_MIDI_LOGGING + #define JUCE_WINRT_MIDI_LOG(x) DBG(x) +#else + #define JUCE_WINRT_MIDI_LOG(x) +#endif + using namespace Microsoft::WRL; using namespace ABI::Windows::Foundation; +using namespace ABI::Windows::Foundation::Collections; using namespace ABI::Windows::Devices::Midi; using namespace ABI::Windows::Devices::Enumeration; using namespace ABI::Windows::Storage::Streams; //============================================================================== -class WinRTMidiService : public MidiServiceType +struct WinRTMidiService : public MidiServiceType { public: //============================================================================== @@ -635,19 +651,26 @@ public: if (midiOutFactory == nullptr) throw std::runtime_error ("Failed to create midi out factory"); + // The WinRT BLE MIDI API doesn't provide callbacks when devices become disconnected, + // but it does require a disconnection via the API before a device will reconnect again. + // We can monitor the BLE connection state of paired devices to get callbacks when + // connections are broken. + bleDeviceWatcher.reset (new BLEDeviceWatcher()); + + if (! bleDeviceWatcher->start()) + throw std::runtime_error ("Failed to start the BLE device watcher"); + inputDeviceWatcher.reset (new MidiIODeviceWatcher (midiInFactory)); if (! inputDeviceWatcher->start()) - throw std::runtime_error ("Failed to start midi input device watcher"); + throw std::runtime_error ("Failed to start the midi input device watcher"); outputDeviceWatcher.reset (new MidiIODeviceWatcher (midiOutFactory)); if (! outputDeviceWatcher->start()) - throw std::runtime_error ("Failed to start midi output device watcher"); + throw std::runtime_error ("Failed to start the midi output device watcher"); } - ~WinRTMidiService() {} - StringArray getDevices (bool isInput) override { return isInput ? inputDeviceWatcher ->getDevices() @@ -670,185 +693,542 @@ public: return new WinRTOutputWrapper (*this, index); } - template - struct MidiIODeviceWatcher +private: + //============================================================================== + class DeviceCallbackHandler { - struct DeviceInfo + public: + virtual ~DeviceCallbackHandler() {}; + + virtual HRESULT addDevice (IDeviceInformation*) = 0; + virtual HRESULT removeDevice (IDeviceInformationUpdate*) = 0; + virtual HRESULT updateDevice (IDeviceInformationUpdate*) = 0; + + bool attach (HSTRING deviceSelector, DeviceInformationKind infoKind) { - String name, id; - bool isDefault = false; + auto deviceInfoFactory = WinRTWrapper::getInstance()->getWRLFactory (&RuntimeClass_Windows_Devices_Enumeration_DeviceInformation[0]); + + if (deviceInfoFactory == nullptr) + return false; + + // A quick way of getting an IVector... + auto requestedProperties = [] + { + auto devicePicker = WinRTWrapper::getInstance()->activateInstance (&RuntimeClass_Windows_Devices_Enumeration_DevicePicker[0], + __uuidof (IDevicePicker)); + jassert (devicePicker != nullptr); + + IVector* result; + auto hr = devicePicker->get_RequestedProperties (&result); + jassert (SUCCEEDED (hr)); + + hr = result->Clear(); + jassert (SUCCEEDED (hr)); + + return result; + }(); + + StringArray propertyKeys = { "System.Devices.ContainerId", + "System.Devices.Aep.ContainerId", + "System.Devices.Aep.IsConnected" }; + + for (auto& key : propertyKeys) + { + WinRTWrapper::ScopedHString hstr (key); + auto hr = requestedProperties->Append (hstr.get()); + + if (FAILED (hr)) + { + jassertfalse; + return false; + } + } + + WinRTWrapper::ComPtr> iter; + auto hr = requestedProperties->QueryInterface (__uuidof (IIterable), (void**) iter.resetAndGetPointerAddress()); + + if (FAILED (hr)) + { + jassertfalse; + return false; + } + + hr = deviceInfoFactory->CreateWatcherWithKindAqsFilterAndAdditionalProperties (deviceSelector, iter, infoKind, + watcher.resetAndGetPointerAddress()); + + if (FAILED (hr)) + { + jassertfalse; + return false; + } + + enumerationThread.startThread(); + + return true; }; - MidiIODeviceWatcher (ComSmartPtr& comFactory) : factory (comFactory) + void detach() { + enumerationThread.stopThread (2000); + + if (watcher == nullptr) + return; + + auto hr = watcher->Stop(); + jassert (SUCCEEDED (hr)); + + if (deviceAddedToken.value != 0) + { + hr = watcher->remove_Added (deviceAddedToken); + jassert (SUCCEEDED (hr)); + deviceAddedToken.value = 0; + } + + if (deviceUpdatedToken.value != 0) + { + hr = watcher->remove_Updated (deviceUpdatedToken); + jassert (SUCCEEDED (hr)); + deviceUpdatedToken.value = 0; + } + + if (deviceRemovedToken.value != 0) + { + hr = watcher->remove_Removed (deviceRemovedToken); + jassert (SUCCEEDED (hr)); + deviceRemovedToken.value = 0; + } + + watcher = nullptr; } - ~MidiIODeviceWatcher() + template + IInspectable* getValueFromDeviceInfo (String key, InfoType* info) { - stop(); + __FIMapView_2_HSTRING_IInspectable* properties; + info->get_Properties (&properties); + + boolean found = false; + WinRTWrapper::ScopedHString keyHstr (key); + auto hr = properties->HasKey (keyHstr.get(), &found); + + if (FAILED (hr)) + { + jassertfalse; + return nullptr; + } + + if (! found) + return nullptr; + + IInspectable* inspectable; + hr = properties->Lookup (keyHstr.get(), &inspectable); + + if (FAILED (hr)) + { + jassertfalse; + return nullptr; + } + + return inspectable; } - bool start() + String getGUIDFromInspectable (IInspectable& inspectable) { - HSTRING deviceSelector; - auto hr = factory->GetDeviceSelector (&deviceSelector); + WinRTWrapper::ComPtr> guidRef; + auto hr = inspectable.QueryInterface (__uuidof (IReference), + (void**) guidRef.resetAndGetPointerAddress()); if (FAILED (hr)) - return false; + { + jassertfalse; + return {}; + } - auto deviceInformationFactory = WinRTWrapper::getInstance()->getWRLFactory (&RuntimeClass_Windows_Devices_Enumeration_DeviceInformation[0]); + GUID result; + hr = guidRef->get_Value (&result); - if (deviceInformationFactory == nullptr) + if (FAILED (hr)) + { + jassertfalse; + return {}; + } + + OLECHAR* resultString; + StringFromCLSID (result, &resultString); + + return resultString; + } + + bool getBoolFromInspectable (IInspectable& inspectable) + { + WinRTWrapper::ComPtr> boolRef; + auto hr = inspectable.QueryInterface (__uuidof (IReference), + (void**) boolRef.resetAndGetPointerAddress()); + + if (FAILED (hr)) + { + jassertfalse; return false; + } - hr = deviceInformationFactory->CreateWatcherAqsFilter (deviceSelector, watcher.resetAndGetPointerAddress()); + boolean result; + hr = boolRef->get_Value (&result); if (FAILED (hr)) + { + jassertfalse; return false; + } - struct DeviceEnumerationThread : public Thread + return result; + } + + private: + //============================================================================== + struct DeviceEnumerationThread : public Thread + { + DeviceEnumerationThread (DeviceCallbackHandler& h, + WinRTWrapper::ComPtr& w, + EventRegistrationToken& added, + EventRegistrationToken& removed, + EventRegistrationToken& updated) + : Thread ("WinRT Device Enumeration Thread"), handler (h), watcher (w), + deviceAddedToken (added), deviceRemovedToken (removed), deviceUpdatedToken (updated) + {} + + void run() override { - DeviceEnumerationThread (String threadName, MidiIODeviceWatcher& p) - : Thread (threadName), parent (p) - {} + auto handlerPtr = std::addressof (handler); + + watcher->add_Added ( + Callback> ( + [handlerPtr](IDeviceWatcher*, IDeviceInformation* info) { return handlerPtr->addDevice (info); } + ).Get(), + &deviceAddedToken); + + watcher->add_Removed ( + Callback> ( + [handlerPtr](IDeviceWatcher*, IDeviceInformationUpdate* infoUpdate) { return handlerPtr->removeDevice (infoUpdate); } + ).Get(), + &deviceRemovedToken); + + watcher->add_Updated ( + Callback> ( + [handlerPtr](IDeviceWatcher*, IDeviceInformationUpdate* infoUpdate) { return handlerPtr->updateDevice (infoUpdate); } + ).Get(), + &deviceRemovedToken); + + watcher->Start(); + } - void run() override - { - auto parentPtr = &parent; - - parent.watcher->add_Added ( - Callback> ( - [parentPtr](IDeviceWatcher*, IDeviceInformation* info) { return parentPtr->addDevice (info); } - ).Get(), - &parent.deviceAddedToken); - - parent.watcher->add_Removed ( - Callback> ( - [parentPtr](IDeviceWatcher*, IDeviceInformationUpdate* info) { return parentPtr->removeDevice (info); } - ).Get(), - &parent.deviceRemovedToken); - - EventRegistrationToken deviceEnumerationCompletedToken { 0 }; - parent.watcher->add_EnumerationCompleted ( - Callback> ( - [this](IDeviceWatcher*, IInspectable*) { enumerationCompleted.signal(); return S_OK; } - ).Get(), - &deviceEnumerationCompletedToken); - - parent.watcher->Start(); - enumerationCompleted.wait(); - - if (deviceEnumerationCompletedToken.value != 0) - parent.watcher->remove_EnumerationCompleted (deviceEnumerationCompletedToken); - } + DeviceCallbackHandler& handler; + WinRTWrapper::ComPtr& watcher; + EventRegistrationToken& deviceAddedToken, deviceRemovedToken, deviceUpdatedToken; + }; - MidiIODeviceWatcher& parent; - WaitableEvent enumerationCompleted; - }; + //============================================================================== + WinRTWrapper::ComPtr watcher; - DeviceEnumerationThread enumerationThread ("WinRT Device Enumeration Thread", *this); - enumerationThread.startThread(); - enumerationThread.waitForThreadToExit (4000); + EventRegistrationToken deviceAddedToken { 0 }, + deviceRemovedToken { 0 }, + deviceUpdatedToken { 0 }; - return true; + DeviceEnumerationThread enumerationThread { *this, watcher, + deviceAddedToken, + deviceRemovedToken, + deviceUpdatedToken }; + }; + + //============================================================================== + struct BLEDeviceWatcher final : private DeviceCallbackHandler + { + struct DeviceInfo + { + String containerID; + bool isConnected = false; + }; + + BLEDeviceWatcher() = default; + + ~BLEDeviceWatcher() + { + detach(); } - bool stop() + //============================================================================== + HRESULT addDevice (IDeviceInformation* addedDeviceInfo) override { - if (watcher == nullptr) - return true; + HSTRING deviceIDHst; + auto hr = addedDeviceInfo->get_Id (&deviceIDHst); - if (deviceAddedToken.value != 0) + if (FAILED (hr)) { - auto hr = watcher->remove_Added (deviceAddedToken); + JUCE_WINRT_MIDI_LOG ("Failed to query added BLE device ID!"); + return S_OK; + } - if (FAILED (hr)) - return false; + auto deviceID = WinRTWrapper::getInstance()->hStringToString (deviceIDHst); + JUCE_WINRT_MIDI_LOG ("Detected paired BLE device: " << deviceID); - deviceAddedToken.value = 0; + if (auto* containerIDValue = getValueFromDeviceInfo ("System.Devices.Aep.ContainerId", addedDeviceInfo)) + { + auto containerID = getGUIDFromInspectable (*containerIDValue); + + if (containerID.isNotEmpty()) + { + DeviceInfo info = { containerID }; + + if (auto* connectedValue = getValueFromDeviceInfo ("System.Devices.Aep.IsConnected", addedDeviceInfo)) + info.isConnected = getBoolFromInspectable (*connectedValue); + + JUCE_WINRT_MIDI_LOG ("Adding BLE device: " << deviceID << " " << info.containerID + << " " << (info.isConnected ? "connected" : "disconnected")); + devices.set (deviceID, info); + + return S_OK; + } } - if (deviceRemovedToken.value != 0) + JUCE_WINRT_MIDI_LOG ("Failed to get a container ID for BLE device: " << deviceID); + return S_OK; + } + + HRESULT removeDevice (IDeviceInformationUpdate* removedDeviceInfo) override + { + HSTRING removedDeviceIdHstr; + auto hr = removedDeviceInfo->get_Id (&removedDeviceIdHstr); + + if (FAILED (hr)) { - auto hr = watcher->remove_Removed (deviceRemovedToken); + JUCE_WINRT_MIDI_LOG ("Failed to query removed BLE device ID!"); + return S_OK; + } - if (FAILED (hr)) - return false; + auto removedDeviceId = WinRTWrapper::getInstance()->hStringToString (removedDeviceIdHstr); - deviceRemovedToken.value = 0; + JUCE_WINRT_MIDI_LOG ("Removing BLE device: " << removedDeviceId); + + { + const ScopedLock lock (deviceChanges); + + if (devices.contains (removedDeviceId)) + { + auto& info = devices.getReference (removedDeviceId); + listeners.call ([&info](Listener& l) { l.bleDeviceDisconnected (info.containerID); }); + devices.remove (removedDeviceId); + JUCE_WINRT_MIDI_LOG ("Removed BLE device: " << removedDeviceId); + } } - auto hr = watcher->Stop(); + return S_OK; + } + + HRESULT updateDevice (IDeviceInformationUpdate* updatedDeviceInfo) override + { + HSTRING updatedDeviceIdHstr; + auto hr = updatedDeviceInfo->get_Id (&updatedDeviceIdHstr); if (FAILED (hr)) - return false; + { + JUCE_WINRT_MIDI_LOG ("Failed to query updated BLE device ID!"); + return S_OK; + } - watcher = nullptr; - return true; + auto updatedDeviceId = WinRTWrapper::getInstance()->hStringToString (updatedDeviceIdHstr); + + JUCE_WINRT_MIDI_LOG ("Updating BLE device: " << updatedDeviceId); + + if (auto* connectedValue = getValueFromDeviceInfo ("System.Devices.Aep.IsConnected", updatedDeviceInfo)) + { + auto isConnected = getBoolFromInspectable (*connectedValue); + + { + const ScopedLock lock (deviceChanges); + + if (! devices.contains (updatedDeviceId)) + return S_OK; + + auto& info = devices.getReference (updatedDeviceId); + + if (info.isConnected && ! isConnected) + { + JUCE_WINRT_MIDI_LOG ("BLE device connection status change: " << updatedDeviceId << " " << info.containerID << " " << (isConnected ? "connected" : "disconnected")); + listeners.call ([&info](Listener& l) { l.bleDeviceDisconnected (info.containerID); }); + } + + info.isConnected = isConnected; + } + } + + return S_OK; + } + + //============================================================================== + bool start() + { + WinRTWrapper::ScopedHString deviceSelector ("System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\"" + " AND System.Devices.Aep.IsPaired:=System.StructuredQueryType.Boolean#True"); + return attach (deviceSelector.get(), DeviceInformationKind::DeviceInformationKind_AssociationEndpoint); + } + + //============================================================================== + struct Listener + { + virtual ~Listener() {}; + virtual void bleDeviceAdded (const String& containerID) = 0; + virtual void bleDeviceDisconnected (const String& containerID) = 0; + }; + + void addListener (Listener* l) + { + listeners.add (l); + } + + void removeListener (Listener* l) + { + listeners.remove (l); } - HRESULT addDevice (IDeviceInformation* addedDeviceInfo) + //============================================================================== + ListenerList listeners; + HashMap devices; + CriticalSection deviceChanges; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BLEDeviceWatcher); + }; + + //============================================================================== + struct MIDIDeviceInfo + { + String deviceID, containerID, name; + bool isDefault = false; + }; + + //============================================================================== + template + struct MidiIODeviceWatcher final : private DeviceCallbackHandler + { + MidiIODeviceWatcher (WinRTWrapper::ComPtr& comFactory) + : factory (comFactory) { - boolean isEnabled; - auto hr = addedDeviceInfo->get_IsEnabled (&isEnabled); + } + + ~MidiIODeviceWatcher() + { + detach(); + } + + HRESULT addDevice (IDeviceInformation* addedDeviceInfo) override + { + MIDIDeviceInfo info; + + HSTRING deviceID; + auto hr = addedDeviceInfo->get_Id (&deviceID); if (FAILED (hr)) + { + JUCE_WINRT_MIDI_LOG ("Failed to query added MIDI device ID!"); return S_OK; + } - if (! isEnabled) - return S_OK; + info.deviceID = WinRTWrapper::getInstance()->hStringToString (deviceID); - const ScopedLock lock (deviceChanges); + JUCE_WINRT_MIDI_LOG ("Detected MIDI device: " << info.deviceID); - DeviceInfo info; + boolean isEnabled = false; + hr = addedDeviceInfo->get_IsEnabled (&isEnabled); + + if (FAILED (hr) || ! isEnabled) + { + JUCE_WINRT_MIDI_LOG ("MIDI device not enabled: " << info.deviceID); + return S_OK; + } + + // We use the container ID to match a MIDI device with a generic BLE device, if possible + if (auto* containerIDValue = getValueFromDeviceInfo ("System.Devices.ContainerId", addedDeviceInfo)) + info.containerID = getGUIDFromInspectable (*containerIDValue); HSTRING name; hr = addedDeviceInfo->get_Name (&name); if (FAILED (hr)) + { + JUCE_WINRT_MIDI_LOG ("Failed to query detected MIDI device name for " << info.deviceID); return S_OK; + } info.name = WinRTWrapper::getInstance()->hStringToString (name); - HSTRING id; - hr = addedDeviceInfo->get_Id (&id); + boolean isDefault = false; + hr = addedDeviceInfo->get_IsDefault (&isDefault); if (FAILED (hr)) + { + JUCE_WINRT_MIDI_LOG ("Failed to query detected MIDI device defaultness for " << info.deviceID << " " << info.name); return S_OK; + } - info.id = WinRTWrapper::getInstance()->hStringToString (id); + info.isDefault = isDefault; - boolean isDefault; - hr = addedDeviceInfo->get_IsDefault (&isDefault); + JUCE_WINRT_MIDI_LOG ("Adding MIDI device: " << info.deviceID << " " << info.containerID << " " << info.name); - if (FAILED (hr)) - return S_OK; + { + const ScopedLock lock (deviceChanges); + connectedDevices.add (info); + } - info.isDefault = isDefault != 0; - connectedDevices.add (info); return S_OK; } - HRESULT removeDevice (IDeviceInformationUpdate* removedDeviceInfo) + HRESULT removeDevice (IDeviceInformationUpdate* removedDeviceInfo) override { - const ScopedLock lock (deviceChanges); - HSTRING removedDeviceIdHstr; - removedDeviceInfo->get_Id (&removedDeviceIdHstr); + auto hr = removedDeviceInfo->get_Id (&removedDeviceIdHstr); + + if (FAILED (hr)) + { + JUCE_WINRT_MIDI_LOG ("Failed to query removed MIDI device ID!"); + return S_OK; + } + auto removedDeviceId = WinRTWrapper::getInstance()->hStringToString (removedDeviceIdHstr); - for (int i = 0; i < connectedDevices.size(); ++i) + JUCE_WINRT_MIDI_LOG ("Removing MIDI device: " << removedDeviceId); + { - if (connectedDevices[i].id == removedDeviceId) + const ScopedLock lock (deviceChanges); + + for (int i = 0; i < connectedDevices.size(); ++i) { - connectedDevices.remove (i); - break; + if (connectedDevices[i].deviceID == removedDeviceId) + { + connectedDevices.remove (i); + JUCE_WINRT_MIDI_LOG ("Removed MIDI device: " << removedDeviceId); + break; + } } } return S_OK; } + // This is never called + HRESULT updateDevice (IDeviceInformationUpdate*) override { return S_OK; } + + bool start() + { + HSTRING deviceSelector; + auto hr = factory->GetDeviceSelector (&deviceSelector); + + if (FAILED (hr)) + { + JUCE_WINRT_MIDI_LOG ("Failed to get MIDI device selector!"); + return false; + } + + return attach (deviceSelector, DeviceInformationKind::DeviceInformationKind_DeviceInterface); + } + StringArray getDevices() { { @@ -875,10 +1255,10 @@ public: return 0; } - String getDeviceNameFromIndex (int index) + MIDIDeviceInfo getDeviceInfoFromIndex (int index) { if (isPositiveAndBelow (index, lastQueriedConnectedDevices.get().size())) - return lastQueriedConnectedDevices.get()[index].name; + return lastQueriedConnectedDevices.get()[index]; return {}; } @@ -889,21 +1269,16 @@ public: for (auto info : connectedDevices) if (info.name == name) - return info.id; + return info.deviceID; return {}; } - ComSmartPtr& factory; + WinRTWrapper::ComPtr& factory; - EventRegistrationToken deviceAddedToken { 0 }, - deviceRemovedToken { 0 }; - - ComSmartPtr watcher; - - Array connectedDevices; + Array connectedDevices; CriticalSection deviceChanges; - ThreadLocalValue> lastQueriedConnectedDevices; + ThreadLocalValue> lastQueriedConnectedDevices; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiIODeviceWatcher); }; @@ -913,8 +1288,8 @@ public: struct OpenMidiPortThread : public Thread { OpenMidiPortThread (String threadName, String midiDeviceID, - ComSmartPtr& comFactory, - ComSmartPtr& comPort) + WinRTWrapper::ComPtr& comFactory, + WinRTWrapper::ComPtr& comPort) : Thread (threadName), deviceID (midiDeviceID), factory (comFactory), @@ -930,7 +1305,7 @@ public: void run() override { WinRTWrapper::ScopedHString hDeviceId (deviceID); - ComSmartPtr> asyncOp; + WinRTWrapper::ComPtr> asyncOp; auto hr = factory->FromIdAsync (hDeviceId.get(), asyncOp.resetAndGetPointerAddress()); if (FAILED (hr)) @@ -952,67 +1327,145 @@ public: } ).Get()); - // When using Bluetooth the asynchronous port opening operation will occasionally - // hang, so we use a timeout. We will be able to remove this when Microsoft - // improves the Bluetooth MIDI stack. + // We need to use a timout here, rather than waiting indefinitely, as the + // WinRT API can occaisonally hang! portOpened.wait (2000); } const String deviceID; - ComSmartPtr& factory; - ComSmartPtr& port; + WinRTWrapper::ComPtr& factory; + WinRTWrapper::ComPtr& port; WaitableEvent portOpened { true }; }; //============================================================================== - struct WinRTInputWrapper : public InputWrapper + template + class WinRTIOWrapper : private BLEDeviceWatcher::Listener { - WinRTInputWrapper (WinRTMidiService& service, MidiInput& input, int index, MidiInputCallback& cb) - : inputDevice (input), - callback (cb) + public: + WinRTIOWrapper (BLEDeviceWatcher& bleWatcher, + MidiIODeviceWatcher& midiDeviceWatcher, + int index) + : bleDeviceWatcher (bleWatcher) { - const ScopedLock lock (service.inputDeviceWatcher->deviceChanges); - - deviceName = service.inputDeviceWatcher->getDeviceNameFromIndex (index); + { + const ScopedLock lock (midiDeviceWatcher.deviceChanges); + deviceInfo = midiDeviceWatcher.getDeviceInfoFromIndex (index); + } - if (deviceName.isEmpty()) + if (deviceInfo.deviceID.isEmpty()) throw std::runtime_error ("Invalid device index"); - auto deviceID = service.inputDeviceWatcher->getDeviceID (deviceName); + JUCE_WINRT_MIDI_LOG ("Creating JUCE MIDI IO: " << deviceInfo.deviceID); + + if (deviceInfo.containerID.isNotEmpty()) + { + bleDeviceWatcher.addListener (this); + + const ScopedLock lock (bleDeviceWatcher.deviceChanges); - if (deviceID.isEmpty()) - throw std::runtime_error ("Device unavailable"); + HashMap::Iterator iter (bleDeviceWatcher.devices); + while (iter.next()) + { + if (iter.getValue().containerID == deviceInfo.containerID) + { + isBLEDevice = true; + break; + } + } + } + } + + virtual ~WinRTIOWrapper() + { + bleDeviceWatcher.removeListener (this); + + disconnect(); + } + + //============================================================================== + virtual void disconnect() + { + if (midiPort != nullptr) + { + if (isBLEDevice) + midiPort->Release(); + } + + midiPort = nullptr; + } + + private: + //============================================================================== + void bleDeviceAdded (const String& containerID) override + { + if (containerID == deviceInfo.containerID) + isBLEDevice = true; + } + + void bleDeviceDisconnected (const String& containerID) override + { + if (containerID == deviceInfo.containerID) + { + JUCE_WINRT_MIDI_LOG ("Disconnecting MIDI port from BLE disconnection: " << deviceInfo.deviceID + << " " << deviceInfo.containerID << " " << deviceInfo.name); + disconnect(); + } + } + + protected: + //============================================================================== + BLEDeviceWatcher& bleDeviceWatcher; + MIDIDeviceInfo deviceInfo; + bool isBLEDevice = false; + WinRTWrapper::ComPtr midiPort; + }; + + //============================================================================== + struct WinRTInputWrapper final : public InputWrapper, + private WinRTIOWrapper + + { + WinRTInputWrapper (WinRTMidiService& service, MidiInput& input, int index, MidiInputCallback& cb) + : WinRTIOWrapper (*service.bleDeviceWatcher, *service.inputDeviceWatcher, index), + inputDevice (input), + callback (cb) + { OpenMidiPortThread portThread ("Open WinRT MIDI input port", - deviceID, + deviceInfo.deviceID, service.midiInFactory, - midiInPort); + midiPort); portThread.startThread(); portThread.waitForThreadToExit (-1); - if (midiInPort == nullptr) - throw std::runtime_error ("Timed out waiting for midi input port creation"); + if (midiPort == nullptr) + { + JUCE_WINRT_MIDI_LOG ("Timed out waiting for midi input port creation"); + return; + } startTime = Time::getMillisecondCounterHiRes(); - auto hr = midiInPort->add_MessageReceived ( + auto hr = midiPort->add_MessageReceived ( Callback> ( - [this] (IMidiInPort*, IMidiMessageReceivedEventArgs* args) { return midiInMessageReceived (args); } + [this](IMidiInPort*, IMidiMessageReceivedEventArgs* args) { return midiInMessageReceived (args); } ).Get(), &midiInMessageToken); if (FAILED (hr)) - throw std::runtime_error ("Failed to set midi input callback"); + { + JUCE_WINRT_MIDI_LOG ("Failed to set MIDI input callback"); + jassertfalse; + } } ~WinRTInputWrapper() { - if (midiInMessageToken.value != 0) - midiInPort->remove_MessageReceived (midiInMessageToken); - - midiInPort = nullptr; + disconnect(); } + //============================================================================== void start() override { if (! isStarted) @@ -1031,26 +1484,38 @@ public: } } - String getDeviceName() override { return deviceName; } + String getDeviceName() override { return deviceInfo.name; } + + //============================================================================== + void disconnect() override + { + stop(); + + if (midiPort != nullptr && midiInMessageToken.value != 0) + midiPort->remove_MessageReceived (midiInMessageToken); + WinRTIOWrapper::disconnect(); + } + + //============================================================================== HRESULT midiInMessageReceived (IMidiMessageReceivedEventArgs* args) { if (! isStarted) return S_OK; - ComSmartPtr message; + WinRTWrapper::ComPtr message; auto hr = args->get_Message (message.resetAndGetPointerAddress()); if (FAILED (hr)) return hr; - ComSmartPtr buffer; + WinRTWrapper::ComPtr buffer; hr = message->get_RawData (buffer.resetAndGetPointerAddress()); if (FAILED (hr)) return hr; - ComSmartPtr bufferByteAccess; + WinRTWrapper::ComPtr bufferByteAccess; hr = buffer->QueryInterface (bufferByteAccess.resetAndGetPointerAddress()); if (FAILED (hr)) @@ -1097,11 +1562,11 @@ public: return t * 0.001; } + //============================================================================== MidiInput& inputDevice; MidiInputCallback& callback; - String deviceName; + MidiDataConcatenator concatenator { 4096 }; - ComSmartPtr midiInPort; EventRegistrationToken midiInMessageToken { 0 }; double startTime = 0; @@ -1111,30 +1576,20 @@ public: }; //============================================================================== - struct WinRTOutputWrapper : public OutputWrapper + struct WinRTOutputWrapper final : public OutputWrapper, + private WinRTIOWrapper { WinRTOutputWrapper (WinRTMidiService& service, int index) + : WinRTIOWrapper (*service.bleDeviceWatcher, *service.outputDeviceWatcher, index) { - const ScopedLock lock (service.outputDeviceWatcher->deviceChanges); - - deviceName = service.outputDeviceWatcher->getDeviceNameFromIndex (index); - - if (deviceName.isEmpty()) - throw std::runtime_error ("Invalid device index"); - - auto deviceID = service.outputDeviceWatcher->getDeviceID (deviceName); - - if (deviceID.isEmpty()) - throw std::runtime_error ("Device unavailable"); - OpenMidiPortThread portThread ("Open WinRT MIDI output port", - deviceID, + deviceInfo.deviceID, service.midiOutFactory, - midiOutPort); + midiPort); portThread.startThread(); portThread.waitForThreadToExit (-1); - if (midiOutPort == nullptr) + if (midiPort == nullptr) throw std::runtime_error ("Timed out waiting for midi output port creation"); auto bufferFactory = WinRTWrapper::getInstance()->getWRLFactory (&RuntimeClass_Windows_Storage_Streams_Buffer[0]); @@ -1158,55 +1613,87 @@ public: throw std::runtime_error ("Failed to get buffer data pointer"); } - ~WinRTOutputWrapper() {} - + //============================================================================== void sendMessageNow (const MidiMessage& message) override { + if (midiPort == nullptr) + return; + auto numBytes = message.getRawDataSize(); auto hr = buffer->put_Length (numBytes); if (FAILED (hr)) + { jassertfalse; + return; + } memcpy_s (bufferData, numBytes, message.getRawData(), numBytes); - midiOutPort->SendBuffer (buffer); + midiPort->SendBuffer (buffer); } - String getDeviceName() override { return deviceName; } + String getDeviceName() override { return deviceInfo.name; } - String deviceName; - ComSmartPtr midiOutPort; - ComSmartPtr buffer; - ComSmartPtr bufferByteAccess; + //============================================================================== + WinRTWrapper::ComPtr buffer; + WinRTWrapper::ComPtr bufferByteAccess; uint8_t* bufferData = nullptr; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WinRTOutputWrapper); }; - ComSmartPtr midiInFactory; - ComSmartPtr midiOutFactory; + WinRTWrapper::ComPtr midiInFactory; + WinRTWrapper::ComPtr midiOutFactory; std::unique_ptr> inputDeviceWatcher; std::unique_ptr> outputDeviceWatcher; + std::unique_ptr bleDeviceWatcher; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (WinRTMidiService) }; #endif // JUCE_USE_WINRT_MIDI +//============================================================================== //============================================================================== struct MidiService : public DeletedAtShutdown { MidiService() { - #if JUCE_USE_WINRT_MIDI - try + #if JUCE_USE_WINRT_MIDI + #if ! JUCE_FORCE_WINRT_MIDI + auto windowsVersionInfo = [] { - internal.reset (new WinRTMidiService()); - return; - } - catch (std::runtime_error&) {} + RTL_OSVERSIONINFOW versionInfo = { 0 }; + + if (auto* mod = ::GetModuleHandleW (L"ntdll.dll")) + { + using RtlGetVersion = LONG (WINAPI*)(PRTL_OSVERSIONINFOW); + + if (auto* rtlGetVersion = (RtlGetVersion) ::GetProcAddress (mod, "RtlGetVersion")) + { + versionInfo.dwOSVersionInfoSize = sizeof (versionInfo); + LONG STATUS_SUCCESS = 0; + + if (rtlGetVersion (&versionInfo) != STATUS_SUCCESS) + versionInfo = { 0 }; + } + } + + return versionInfo; + }(); + + if (windowsVersionInfo.dwMajorVersion >= 10 && windowsVersionInfo.dwBuildNumber >= 17763) #endif + { + try + { + internal.reset (new WinRTMidiService()); + return; + } + catch (std::runtime_error&) {} + } + #endif internal.reset (new Win32MidiService()); } diff --git a/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp b/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp index 62908fed..c68b13a2 100644 --- a/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp +++ b/modules/juce_audio_devices/native/juce_win32_WASAPI.cpp @@ -387,21 +387,21 @@ public: // Got a format that is supported by the device so we can ask what sample rates are supported (in whatever format) } - static const int ratesToTest[] = { 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000 }; - - for (int i = 0; i < numElementsInArray (ratesToTest); ++i) - { - if (rates.contains (ratesToTest[i])) + for (auto rate : { 8000, 11025, 16000, 22050, 32000, + 44100, 48000, 88200, 96000, 176400, + 192000, 352800, 384000, 705600, 768000 }) + { + if (rates.contains (rate)) continue; - format.Format.nSamplesPerSec = (DWORD) ratesToTest[i]; + format.Format.nSamplesPerSec = (DWORD) rate; format.Format.nAvgBytesPerSec = (DWORD) (format.Format.nSamplesPerSec * format.Format.nChannels * format.Format.wBitsPerSample / 8); if (SUCCEEDED (tempClient->IsFormatSupported (useExclusiveMode ? AUDCLNT_SHAREMODE_EXCLUSIVE : AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX*) &format, 0))) - if (! rates.contains (ratesToTest[i])) - rates.addUsingDefaultSort (ratesToTest[i]); + if (! rates.contains (rate)) + rates.addUsingDefaultSort (rate); } } diff --git a/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp index 582362fd..a0941320 100644 --- a/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp @@ -42,9 +42,9 @@ namespace CFArrayRef extensions = nullptr; UInt32 sizeOfArray = sizeof (extensions); - if (AudioFileGetGlobalInfo (kAudioFileGlobalInfo_AllExtensions, 0, 0, &sizeOfArray, &extensions) == noErr) + if (AudioFileGetGlobalInfo (kAudioFileGlobalInfo_AllExtensions, 0, nullptr, &sizeOfArray, &extensions) == noErr) { - const CFIndex numValues = CFArrayGetCount (extensions); + auto numValues = CFArrayGetCount (extensions); for (CFIndex i = 0; i < numValues; ++i) extensionsArray.add ("." + String::fromCFString ((CFStringRef) CFArrayGetValueAtIndex (extensions, i))); @@ -122,14 +122,14 @@ struct CoreAudioFormatMetatdata static StringPairArray parseUserDefinedChunk (InputStream& input, int64 size) { StringPairArray infoStrings; - const int64 originalPosition = input.getPosition(); + auto originalPosition = input.getPosition(); uint8 uuid[16]; input.read (uuid, sizeof (uuid)); if (memcmp (uuid, "\x29\x81\x92\x73\xB5\xBF\x4A\xEF\xB7\x8D\x62\xD1\xEF\x90\xBB\x2C", 16) == 0) { - const uint32 numEntries = (uint32) input.readIntBigEndian(); + auto numEntries = (uint32) input.readIntBigEndian(); for (uint32 i = 0; i < numEntries && input.getPosition() < originalPosition + size; ++i) { @@ -314,7 +314,7 @@ struct CoreAudioFormatMetatdata if (chunkHeader.chunkSize == -1) break; - input.skipNextBytes (chunkHeader.chunkSize); + input.setPosition (input.getPosition() + chunkHeader.chunkSize); } else if (chunkHeader.chunkType == chunkName ("midi")) { @@ -327,7 +327,7 @@ struct CoreAudioFormatMetatdata else { // we aren't decoding this chunk yet so just skip over it - input.skipNextBytes (chunkHeader.chunkSize); + input.setPosition (input.getPosition() + chunkHeader.chunkSize); } } } @@ -350,13 +350,13 @@ public: if (input != nullptr) CoreAudioFormatMetatdata::read (*input, metadataValues); - OSStatus status = AudioFileOpenWithCallbacks (this, - &readCallback, - nullptr, // write needs to be null to avoid permisisions errors - &getSizeCallback, - nullptr, // setSize needs to be null to avoid permisisions errors - 0, // AudioFileTypeID inFileTypeHint - &audioFileID); + auto status = AudioFileOpenWithCallbacks (this, + &readCallback, + nullptr, // write needs to be null to avoid permisisions errors + &getSizeCallback, + nullptr, // setSize needs to be null to avoid permisisions errors + 0, // AudioFileTypeID inFileTypeHint + &audioFileID); if (status == noErr) { status = ExtAudioFileWrapAudioFileID (audioFileID, false, &audioFileRef); @@ -665,7 +665,7 @@ public: for (auto tagEntry : knownTags) expect (AudioChannelSet::channelSetWithChannels (CoreAudioLayouts::getSpeakerLayoutForCoreAudioTag (tagEntry.tag)) == CoreAudioLayouts::fromCoreAudio (tagEntry.tag), - "Tag \"" + String (tagEntry.name) + "\" is not converted consistantly by JUCE"); + "Tag \"" + String (tagEntry.name) + "\" is not converted consistently by JUCE"); } { diff --git a/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp index b83935c8..8697855b 100644 --- a/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp @@ -117,6 +117,9 @@ namespace FlacNamespace #pragma clang diagnostic ignored "-Wconversion" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wdeprecated-register" + #if __has_warning("-Wzero-as-null-pointer-constant") + #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" + #endif #endif #if JUCE_INTEL @@ -245,7 +248,7 @@ public: } else { - if (startSampleInFile >= (int) lengthInSamples) + if (startSampleInFile >= lengthInSamples) { samplesInReservoir = 0; } @@ -298,7 +301,7 @@ public: auto* src = buffer[i]; int n = i; - while (src == 0 && n > 0) + while (src == nullptr && n > 0) src = buffer [--n]; if (src != nullptr) diff --git a/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp index ffa9a2fd..14dc9d1e 100644 --- a/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp @@ -1961,8 +1961,8 @@ private: { const uint8 n0 = si.allocation[i][0]; const uint8 n1 = si.allocation[i][1]; - fraction[0][i] = n0 > 0 ? (float) (((-1 << n0) + getBitsUint16 (n0 + 1) + 1) * constants.muls[n0 + 1][si.scaleFactor[i][0]]) : 0; - fraction[1][i] = n1 > 0 ? (float) (((-1 << n1) + getBitsUint16 (n1 + 1) + 1) * constants.muls[n1 + 1][si.scaleFactor[i][1]]) : 0; + fraction[0][i] = n0 > 0 ? (float) ((-(1 << n0) + getBitsUint16 (n0 + 1) + 1) * constants.muls[n0 + 1][si.scaleFactor[i][0]]) : 0; + fraction[1][i] = n1 > 0 ? (float) ((-(1 << n1) + getBitsUint16 (n1 + 1) + 1) * constants.muls[n1 + 1][si.scaleFactor[i][1]]) : 0; } for (i = jsbound; i < 32; ++i) @@ -1971,7 +1971,7 @@ private: if (n > 0) { - const uint32 w = ((uint32) (-1 << n) + getBitsUint16 (n + 1) + 1); + const uint32 w = ((uint32) -(1 << n) + getBitsUint16 (n + 1) + 1); fraction[0][i] = (float) (w * constants.muls[n + 1][si.scaleFactor[i][0]]); fraction[1][i] = (float) (w * constants.muls[n + 1][si.scaleFactor[i][1]]); } @@ -1987,7 +1987,7 @@ private: const uint8 j = si.scaleFactor[i][0]; if (n > 0) - fraction[0][i] = (float) (((-1 << n) + getBitsUint16 (n + 1) + 1) * constants.muls[n + 1][j]); + fraction[0][i] = (float) ((-(1 << n) + getBitsUint16 (n + 1) + 1) * constants.muls[n + 1][j]); else fraction[0][i] = 0; } diff --git a/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp index ae46ec2a..44ecd9a4 100644 --- a/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp @@ -44,6 +44,9 @@ namespace OggVorbisNamespace #pragma clang diagnostic ignored "-Wconversion" #pragma clang diagnostic ignored "-Wshadow" #pragma clang diagnostic ignored "-Wdeprecated-register" + #if __has_warning("-Wzero-as-null-pointer-constant") + #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" + #endif #elif JUCE_GCC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow" @@ -121,7 +124,7 @@ public: callbacks.close_func = &oggCloseCallback; callbacks.tell_func = &oggTellCallback; - auto err = ov_open_callbacks (input, &ovFile, 0, 0, callbacks); + auto err = ov_open_callbacks (input, &ovFile, nullptr, 0, callbacks); if (err == 0) { @@ -377,7 +380,7 @@ public: while (vorbis_analysis_blockout (&vd, &vb) == 1) { - vorbis_analysis (&vb, 0); + vorbis_analysis (&vb, nullptr); vorbis_bitrate_addblock (&vb); while (vorbis_bitrate_flushpacket (&vd, &op)) @@ -486,9 +489,7 @@ int OggVorbisAudioFormat::estimateOggFileQuality (const File& source) { if (auto* in = source.createInputStream()) { - std::unique_ptr r (createReaderFor (in, true)); - - if (r != nullptr) + if (auto r = std::unique_ptr (createReaderFor (in, true))) { auto lengthSecs = r->lengthInSamples / r->sampleRate; auto approxBitsPerSecond = (int) (source.getSize() * 8 / lengthSecs); diff --git a/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp b/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp index 975e86da..bd44388f 100644 --- a/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp +++ b/modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp @@ -849,20 +849,21 @@ namespace WavFileHelpers { static void addToMetadata (StringPairArray& destValues, const String& source) { - std::unique_ptr xml (XmlDocument::parse (source)); - - if (xml != nullptr && xml->hasTagName ("ebucore:ebuCoreMain")) + if (auto xml = parseXML (source)) { - if (auto* xml2 = xml->getChildByName ("ebucore:coreMetadata")) + if (xml->hasTagName ("ebucore:ebuCoreMain")) { - if (auto* xml3 = xml2->getChildByName ("ebucore:identifier")) + if (auto xml2 = xml->getChildByName ("ebucore:coreMetadata")) { - if (auto* xml4 = xml3->getChildByName ("dc:identifier")) + if (auto xml3 = xml2->getChildByName ("ebucore:identifier")) { - auto ISRCCode = xml4->getAllSubText().fromFirstOccurrenceOf ("ISRC:", false, true); + if (auto xml4 = xml3->getChildByName ("dc:identifier")) + { + auto ISRCCode = xml4->getAllSubText().fromFirstOccurrenceOf ("ISRC:", false, true); - if (ISRCCode.isNotEmpty()) - destValues.set (WavAudioFormat::ISRC, ISRCCode); + if (ISRCCode.isNotEmpty()) + destValues.set (WavAudioFormat::ISRC, ISRCCode); + } } } } diff --git a/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp b/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp index 2f914d37..126b2fe5 100644 --- a/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp +++ b/modules/juce_audio_formats/format/juce_AudioFormatReader.cpp @@ -257,10 +257,9 @@ int64 AudioFormatReader::searchForLevel (int64 startSample, const int bufferSize = 4096; HeapBlock tempSpace (bufferSize * 2 + 64); - int* tempBuffer[3]; - tempBuffer[0] = tempSpace.get(); - tempBuffer[1] = tempSpace.get() + bufferSize; - tempBuffer[2] = 0; + int* tempBuffer[3] = { tempSpace.get(), + tempSpace.get() + bufferSize, + nullptr }; int consecutive = 0; int64 firstMatchPos = -1; @@ -280,7 +279,7 @@ int64 AudioFormatReader::searchForLevel (int64 startSample, if (numSamplesToSearch < 0) bufferStart -= numThisTime; - if (bufferStart >= (int) lengthInSamples) + if (bufferStart >= lengthInSamples) break; read (tempBuffer, 2, bufferStart, numThisTime, false); diff --git a/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp b/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp index 5a64e737..4234a4fe 100644 --- a/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp +++ b/modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp @@ -86,7 +86,7 @@ bool AudioFormatWriter::writeFromAudioReader (AudioFormatReader& reader, const int bufferSize = 16384; AudioBuffer tempBuffer ((int) numChannels, bufferSize); - int* buffers[128] = { 0 }; + int* buffers[128] = { nullptr }; for (int i = tempBuffer.getNumChannels(); --i >= 0;) buffers[i] = reinterpret_cast (tempBuffer.getWritePointer (i, 0)); diff --git a/modules/juce_audio_formats/format/juce_AudioFormatWriter.h b/modules/juce_audio_formats/format/juce_AudioFormatWriter.h index 3231dc87..16f699b2 100644 --- a/modules/juce_audio_formats/format/juce_AudioFormatWriter.h +++ b/modules/juce_audio_formats/format/juce_AudioFormatWriter.h @@ -240,7 +240,6 @@ public: private: class Buffer; - friend struct ContainerDeletePolicy; std::unique_ptr buffer; }; diff --git a/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp b/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp index 0fc82729..94106e2c 100644 --- a/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp +++ b/modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp @@ -27,16 +27,15 @@ namespace juce { -AudioSubsectionReader::AudioSubsectionReader (AudioFormatReader* const source_, - const int64 startSample_, - const int64 length_, - const bool deleteSourceWhenDeleted_) - : AudioFormatReader (0, source_->getFormatName()), - source (source_), - startSample (startSample_), - deleteSourceWhenDeleted (deleteSourceWhenDeleted_) +AudioSubsectionReader::AudioSubsectionReader (AudioFormatReader* sourceToUse, + int64 startSampleToUse, int64 lengthToUse, + bool deleteSource) + : AudioFormatReader (nullptr, sourceToUse->getFormatName()), + source (sourceToUse), + startSample (startSampleToUse), + deleteSourceWhenDeleted (deleteSource) { - length = jmin (jmax ((int64) 0, source->lengthInSamples - startSample), length_); + length = jmin (jmax ((int64) 0, source->lengthInSamples - startSample), lengthToUse); sampleRate = source->sampleRate; bitsPerSample = source->bitsPerSample; diff --git a/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp b/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp index 0980c00b..eda6f7f2 100644 --- a/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp +++ b/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp @@ -32,9 +32,7 @@ BufferingAudioReader::BufferingAudioReader (AudioFormatReader* sourceReader, int samplesToBuffer) : AudioFormatReader (nullptr, sourceReader->getFormatName()), source (sourceReader), thread (timeSliceThread), - nextReadPosition (0), - numBlocks (1 + (samplesToBuffer / samplesPerBlock)), - timeoutMs (0) + numBlocks (1 + (samplesToBuffer / samplesPerBlock)) { sampleRate = source->sampleRate; lengthInSamples = source->lengthInSamples; @@ -62,7 +60,7 @@ void BufferingAudioReader::setReadTimeout (int timeoutMilliseconds) noexcept bool BufferingAudioReader::readSamples (int** destSamples, int numDestChannels, int startOffsetInDestBuffer, int64 startSampleInFile, int numSamples) { - const uint32 startTime = Time::getMillisecondCounter(); + auto startTime = Time::getMillisecondCounter(); clearSamplesBeyondAvailableLength (destSamples, numDestChannels, startOffsetInDestBuffer, startSampleInFile, numSamples, lengthInSamples); @@ -71,14 +69,14 @@ bool BufferingAudioReader::readSamples (int** destSamples, int numDestChannels, while (numSamples > 0) { - if (const BufferedBlock* const block = getBlockContaining (startSampleInFile)) + if (auto block = getBlockContaining (startSampleInFile)) { - const int offset = (int) (startSampleInFile - block->range.getStart()); - const int numToDo = jmin (numSamples, (int) (block->range.getEnd() - startSampleInFile)); + auto offset = (int) (startSampleInFile - block->range.getStart()); + auto numToDo = jmin (numSamples, (int) (block->range.getEnd() - startSampleInFile)); for (int j = 0; j < numDestChannels; ++j) { - if (float* dest = (float*) destSamples[j]) + if (auto dest = (float*) destSamples[j]) { dest += startOffsetInDestBuffer; @@ -98,7 +96,7 @@ bool BufferingAudioReader::readSamples (int** destSamples, int numDestChannels, if (timeoutMs >= 0 && Time::getMillisecondCounter() >= startTime + (uint32) timeoutMs) { for (int j = 0; j < numDestChannels; ++j) - if (float* dest = (float*) destSamples[j]) + if (auto dest = (float*) destSamples[j]) FloatVectorOperations::clear (dest + startOffsetInDestBuffer, numSamples); break; @@ -123,13 +121,9 @@ BufferingAudioReader::BufferedBlock::BufferedBlock (AudioFormatReader& reader, i BufferingAudioReader::BufferedBlock* BufferingAudioReader::getBlockContaining (int64 pos) const noexcept { - for (int i = blocks.size(); --i >= 0;) - { - BufferedBlock* const b = blocks.getUnchecked(i); - + for (auto* b : blocks) if (b->range.contains (pos)) return b; - } return nullptr; } @@ -141,9 +135,9 @@ int BufferingAudioReader::useTimeSlice() bool BufferingAudioReader::readNextBufferChunk() { - const int64 pos = nextReadPosition; - const int64 startPos = ((pos - 1024) / samplesPerBlock) * samplesPerBlock; - const int64 endPos = startPos + numBlocks * samplesPerBlock; + auto pos = nextReadPosition.load(); + auto startPos = ((pos - 1024) / samplesPerBlock) * samplesPerBlock; + auto endPos = startPos + numBlocks * samplesPerBlock; OwnedArray newBlocks; @@ -157,7 +151,7 @@ bool BufferingAudioReader::readNextBufferChunk() return false; } - for (int64 p = startPos; p < endPos; p += samplesPerBlock) + for (auto p = startPos; p < endPos; p += samplesPerBlock) { if (getBlockContaining (p) == nullptr) { diff --git a/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h b/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h index e45d05df..964a36b8 100644 --- a/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h +++ b/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h @@ -69,9 +69,9 @@ public: private: std::unique_ptr source; TimeSliceThread& thread; - int64 nextReadPosition; + std::atomic nextReadPosition { 0 }; const int numBlocks; - int timeoutMs; + int timeoutMs = 0; enum { samplesPerBlock = 32768 }; diff --git a/modules/juce_audio_formats/juce_audio_formats.h b/modules/juce_audio_formats/juce_audio_formats.h index 500777ae..a4fbca4a 100644 --- a/modules/juce_audio_formats/juce_audio_formats.h +++ b/modules/juce_audio_formats/juce_audio_formats.h @@ -35,7 +35,7 @@ ID: juce_audio_formats vendor: juce - version: 5.3.2 + version: 5.4.1 name: JUCE audio file format codecs description: Classes for reading and writing various audio file formats. website: http://www.juce.com/juce diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp index c205381d..aa07dda5 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp @@ -1091,7 +1091,9 @@ namespace AAXClasses } } else + { isSuspended = true; + } if (isSuspended) { @@ -1607,6 +1609,9 @@ namespace AAXClasses audioProcessor.prepareToPlay (sampleRate, lastBufferSize); maxBufferSize = lastBufferSize; + midiBuffer.ensureSize (2048); + midiBuffer.clear(); + sideChainBuffer.calloc (static_cast (maxBufferSize)); } @@ -1704,6 +1709,103 @@ namespace AAXClasses updateSidechainState(); } + //============================================================================== + static AudioProcessor::CurveData::Type aaxCurveTypeToJUCE (AAX_CTypeID type) noexcept + { + switch (type) + { + case AAX_eCurveType_EQ: return AudioProcessor::CurveData::Type::EQ; + case AAX_eCurveType_Dynamics: return AudioProcessor::CurveData::Type::Dynamics; + case AAX_eCurveType_Reduction: return AudioProcessor::CurveData::Type::GainReduction; + default: break; + } + + return AudioProcessor::CurveData::Type::Unknown; + } + + uint32_t getAAXMeterIdForParamId (const String& paramID) const noexcept + { + int idx; + + for (idx = 0; idx < aaxMeters.size(); ++idx) + if (LegacyAudioParameter::getParamID (aaxMeters[idx], false) == paramID) + break; + + // you sepecified a parameter id in your curve but the parameter does not have the meter + // category + jassert (idx < aaxMeters.size()); + return 'Metr' + static_cast (idx); + } + + //============================================================================== + AAX_Result GetCurveData (AAX_CTypeID iCurveType, const float * iValues, uint32_t iNumValues, float * oValues ) const override + { + auto curveType = aaxCurveTypeToJUCE (iCurveType); + + if (curveType != AudioProcessor::CurveData::Type::Unknown) + { + auto& audioProcessor = getPluginInstance(); + auto curve = audioProcessor.getResponseCurve (curveType); + + if (curve.curve) + { + if (oValues != nullptr && iValues != nullptr) + { + for (uint32_t i = 0; i < iNumValues; ++i) + oValues[i] = curve.curve (iValues[i]); + } + + return AAX_SUCCESS; + } + } + + return AAX_ERROR_UNIMPLEMENTED; + } + + AAX_Result GetCurveDataMeterIds (AAX_CTypeID iCurveType, uint32_t *oXMeterId, uint32_t *oYMeterId) const override + { + auto curveType = aaxCurveTypeToJUCE (iCurveType); + + if (curveType != AudioProcessor::CurveData::Type::Unknown) + { + auto& audioProcessor = getPluginInstance(); + auto curve = audioProcessor.getResponseCurve (curveType); + + if (curve.curve && curve.xMeterID.isNotEmpty() && curve.yMeterID.isNotEmpty()) + { + if (oXMeterId != nullptr) *oXMeterId = getAAXMeterIdForParamId (curve.xMeterID); + if (oYMeterId != nullptr) *oYMeterId = getAAXMeterIdForParamId (curve.yMeterID); + + return AAX_SUCCESS; + } + } + + return AAX_ERROR_UNIMPLEMENTED; + } + + AAX_Result GetCurveDataDisplayRange (AAX_CTypeID iCurveType, float *oXMin, float *oXMax, float *oYMin, float *oYMax) const override + { + auto curveType = aaxCurveTypeToJUCE (iCurveType); + + if (curveType != AudioProcessor::CurveData::Type::Unknown) + { + auto& audioProcessor = getPluginInstance(); + auto curve = audioProcessor.getResponseCurve (curveType); + + if (curve.curve) + { + if (oXMin != nullptr) *oXMin = curve.xRange.getStart(); + if (oXMax != nullptr) *oXMax = curve.xRange.getEnd(); + if (oYMin != nullptr) *oYMin = curve.yRange.getStart(); + if (oYMax != nullptr) *oYMax = curve.yRange.getEnd(); + + return AAX_SUCCESS; + } + } + + return AAX_ERROR_UNIMPLEMENTED; + } + //============================================================================== inline int getParamIndexFromID (AAX_CParamID paramID) const noexcept { @@ -1792,7 +1894,7 @@ namespace AAXClasses // and the size of the data returned. To avoid generating // it again in GetChunk, we need to store it somewhere. // However, as GetChunkSize and GetChunk can be called - // on different threads, we store it in thread dependant storage + // on different threads, we store it in thread dependent storage // in a hash map with the thread id as a key. mutable ThreadLocalValue perThreadFilterData; CriticalSection perThreadDataLock; diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index ece0bc19..d8d7f8fd 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -118,7 +118,6 @@ public: //============================================================================== virtual void createPlugin() { - #if JUCE_MODULE_AVAILABLE_juce_audio_plugin_client processor.reset (::createPluginFilterOfType (AudioProcessor::wrapperType_Standalone)); #else @@ -427,7 +426,8 @@ private: deviceSelector (deviceManagerToUse, minAudioInputChannels, maxAudioInputChannels, minAudioOutputChannels, maxAudioOutputChannels, - true, false, + true, + (pluginHolder.processor.get() != nullptr && pluginHolder.processor->producesMidi()), true, false), shouldMuteLabel ("Feedback Loop:", "Feedback Loop:"), shouldMuteButton ("Mute audio input") @@ -508,10 +508,12 @@ private: emptyBuffer.clear(); player.audioDeviceAboutToStart (device); + player.setMidiOutput (deviceManager.getDefaultMidiOutput()); } void audioDeviceStopped() override { + player.setMidiOutput (nullptr); player.audioDeviceStopped(); emptyBuffer.setSize (0, 0); } diff --git a/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h b/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h new file mode 100644 index 00000000..5cfe674e --- /dev/null +++ b/modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h @@ -0,0 +1,191 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 5 End-User License + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the + 27th April 2017). + + End User License Agreement: www.juce.com/juce-5-licence + Privacy Policy: www.juce.com/juce-5-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +#pragma once + + +//============================================================================== +#define UNITY_AUDIO_PLUGIN_API_VERSION 0x010401 + +#if JUCE_WINDOWS + #define UNITY_INTERFACE_API __stdcall + #define UNITY_INTERFACE_EXPORT __declspec(dllexport) +#else + #define UNITY_INTERFACE_API + #define UNITY_INTERFACE_EXPORT __attribute__ ((visibility("default"))) +#endif + +//============================================================================== +struct UnityAudioEffectState; + +typedef int (UNITY_INTERFACE_API * createCallback) (UnityAudioEffectState* state); +typedef int (UNITY_INTERFACE_API * releaseCallback) (UnityAudioEffectState* state); +typedef int (UNITY_INTERFACE_API * resetCallback) (UnityAudioEffectState* state); + +typedef int (UNITY_INTERFACE_API * processCallback) (UnityAudioEffectState* state, float* inBuffer, float* outBuffer, unsigned int bufferSize, + int numInChannels, int numOutChannels); + +typedef int (UNITY_INTERFACE_API * setPositionCallback) (UnityAudioEffectState* state, unsigned int pos); + +typedef int (UNITY_INTERFACE_API * setFloatParameterCallback) (UnityAudioEffectState* state, int index, float value); +typedef int (UNITY_INTERFACE_API * getFloatParameterCallback) (UnityAudioEffectState* state, int index, float* value, char* valuestr); +typedef int (UNITY_INTERFACE_API * getFloatBufferCallback) (UnityAudioEffectState* state, const char* name, float* buffer, int numsamples); + +typedef int (UNITY_INTERFACE_API * distanceAttenuationCallback) (UnityAudioEffectState* state, float distanceIn, float attenuationIn, float* attenuationOut); + +typedef void (UNITY_INTERFACE_API * renderCallback) (int eventId); + +//============================================================================== +enum UnityAudioEffectDefinitionFlags +{ + isSideChainTarget = 1, + isSpatializer = 2, + isAmbisonicDecoder = 4, + appliesDistanceAttenuation = 8 +}; + +enum UnityAudioEffectStateFlags +{ + stateIsPlaying = 1, + stateIsPaused = 2, + stateIsMuted = 8, + statIsSideChainTarget = 16 +}; + +enum UnityEventModifiers +{ + shift = 1, + control = 2, + alt = 4, + command = 8, + numeric = 16, + capsLock = 32, + functionKey = 64 +}; + +//============================================================================== +struct UnityAudioSpatializerData +{ + float listenerMatrix[16]; + float sourceMatrix[16]; + float spatialBlend; + float reverbZoneMix; + float spread; + float stereoPan; + distanceAttenuationCallback attenuationCallback; + float minDistance; + float maxDistance; +}; + +struct UnityAudioAmbisonicData +{ + float listenerMatrix[16]; + float sourceMatrix[16]; + float spatialBlend; + float reverbZoneMix; + float spread; + float stereoPan; + distanceAttenuationCallback attenuationCallback; + int ambisonicOutChannels; + float volume; +}; + +struct UnityAudioEffectState +{ + juce::uint32 structSize; + juce::uint32 sampleRate; + juce::uint64 dspCurrentTick; + juce::uint64 dspPreviousTick; + float* sidechainBuffer; + void* effectData; + juce::uint32 flags; + void* internal; + + UnityAudioSpatializerData* spatializerData; + juce::uint32 dspBufferSize; + juce::uint32 hostAPIVersion; + + UnityAudioAmbisonicData* ambisonicData; + + template + inline T* getEffectData() const + { + jassert (effectData != nullptr); + jassert (internal != nullptr); + + return (T*) effectData; + } +}; + +struct UnityAudioParameterDefinition +{ + char name[16]; + char unit[16]; + const char* description; + float min; + float max; + float defaultVal; + float displayScale; + float displayExponent; +}; + +struct UnityAudioEffectDefinition +{ + juce::uint32 structSize; + juce::uint32 parameterStructSize; + juce::uint32 apiVersion; + juce::uint32 pluginVersion; + juce::uint32 channels; + juce::uint32 numParameters; + juce::uint64 flags; + char name[32]; + createCallback create; + releaseCallback release; + resetCallback reset; + processCallback process; + setPositionCallback setPosition; + UnityAudioParameterDefinition* parameterDefintions; + setFloatParameterCallback setFloatParameter; + getFloatParameterCallback getFloatParameter; + getFloatBufferCallback getFloatBuffer; +}; + +//============================================================================== +// Unity callback +extern "C" UNITY_INTERFACE_EXPORT int UNITY_INTERFACE_API UnityGetAudioEffectDefinitions (UnityAudioEffectDefinition*** definitionsPtr); + +// GUI script callbacks +extern "C" UNITY_INTERFACE_EXPORT renderCallback UNITY_INTERFACE_API getRenderCallback(); + +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityInitialiseTexture (int id, void* textureHandle, int w, int h); + +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseDown (int id, float x, float y, UnityEventModifiers mods, int button); +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseDrag (int id, float x, float y, UnityEventModifiers mods, int button); +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseUp (int id, float x, float y, UnityEventModifiers mods); + +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityKeyEvent (int id, int code, UnityEventModifiers mods, const char* name); + +extern "C" UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unitySetScreenBounds (int id, float x, float y, float w, float h); diff --git a/modules/juce_audio_plugin_client/Unity/juce_Unity_Wrapper.cpp b/modules/juce_audio_plugin_client/Unity/juce_Unity_Wrapper.cpp new file mode 100644 index 00000000..f7de7521 --- /dev/null +++ b/modules/juce_audio_plugin_client/Unity/juce_Unity_Wrapper.cpp @@ -0,0 +1,768 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 5 End-User License + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the + 27th April 2017). + + End User License Agreement: www.juce.com/juce-5-licence + Privacy Policy: www.juce.com/juce-5-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +#if JucePlugin_Build_Unity + +#include "../../juce_core/system/juce_TargetPlatform.h" +#include "../utility/juce_IncludeModuleHeaders.h" +#include "../../juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp" + +#if JUCE_WINDOWS + #include "../utility/juce_IncludeSystemHeaders.h" +#endif + +#include "juce_UnityPluginInterface.h" + +//============================================================================== +namespace juce +{ + +typedef ComponentPeer* (*createUnityPeerFunctionType) (Component&); +extern createUnityPeerFunctionType juce_createUnityPeerFn; + +//============================================================================== +class UnityPeer : public ComponentPeer, + public AsyncUpdater +{ +public: + UnityPeer (Component& ed) + : ComponentPeer (ed, 0), + mouseWatcher (*this) + { + getEditor().setResizable (false, false); + } + + //============================================================================== + Rectangle getBounds() const override { return bounds; } + Point localToGlobal (Point relativePosition) override { return relativePosition + getBounds().getPosition().toFloat(); } + Point globalToLocal (Point screenPosition) override { return screenPosition - getBounds().getPosition().toFloat(); } + + StringArray getAvailableRenderingEngines() override { return StringArray ("Software Renderer"); } + + void setBounds (const Rectangle& newBounds, bool) override + { + bounds = newBounds; + mouseWatcher.setBoundsToWatch (bounds); + } + + bool contains (Point localPos, bool) const override + { + if (isPositiveAndBelow (localPos.getX(), getBounds().getWidth()) + && isPositiveAndBelow (localPos.getY(), getBounds().getHeight())) + return true; + + return false; + } + + void handleAsyncUpdate() override + { + fillPixels(); + } + + //============================================================================== + AudioProcessorEditor& getEditor() { return *dynamic_cast (&getComponent()); } + + void setPixelDataHandle (uint8* handle, int width, int height) + { + pixelData = handle; + + textureWidth = width; + textureHeight = height; + + renderImage = Image (new UnityBitmapImage (pixelData, width, height)); + } + + // N.B. This is NOT an efficient way to do this and you shouldn't use this method in your own code. + // It works for our purposes here but a much more efficient way would be to use a GL texture. + void fillPixels() + { + if (pixelData == nullptr) + return; + + LowLevelGraphicsSoftwareRenderer renderer (renderImage); + renderer.addTransform (AffineTransform::verticalFlip ((float) getComponent().getHeight())); + + handlePaint (renderer); + + for (int i = 0; i < textureWidth * textureHeight * 4; i += 4) + { + auto r = pixelData[i + 2]; + auto g = pixelData[i + 1]; + auto b = pixelData[i + 0]; + + pixelData[i + 0] = r; + pixelData[i + 1] = g; + pixelData[i + 2] = b; + } + } + + void forwardMouseEvent (Point position, ModifierKeys mods) + { + ModifierKeys::currentModifiers = mods; + + handleMouseEvent (juce::MouseInputSource::mouse, position, mods, juce::MouseInputSource::invalidPressure, + juce::MouseInputSource::invalidOrientation, juce::Time::currentTimeMillis()); + } + + void forwardKeyPress (int code, String name, ModifierKeys mods) + { + ModifierKeys::currentModifiers = mods; + + handleKeyPress (getKeyPress (code, name)); + } + +private: + //============================================================================== + struct UnityBitmapImage : public ImagePixelData + { + UnityBitmapImage (uint8* data, int w, int h) + : ImagePixelData (Image::PixelFormat::ARGB, w, h), + imageData (data), + lineStride (width * pixelStride) + { + } + + ImageType* createType() const override { return new SoftwareImageType(); } + LowLevelGraphicsContext* createLowLevelContext() override { return new LowLevelGraphicsSoftwareRenderer (Image (this)); } + + void initialiseBitmapData (Image::BitmapData& bitmap, int x, int y, Image::BitmapData::ReadWriteMode mode) override + { + ignoreUnused (mode); + + bitmap.data = imageData + x * pixelStride + y * lineStride; + bitmap.pixelFormat = pixelFormat; + bitmap.lineStride = lineStride; + bitmap.pixelStride = pixelStride; + } + + ImagePixelData::Ptr clone() override + { + auto im = new UnityBitmapImage (imageData, width, height); + + for (int i = 0; i < height; ++i) + memcpy (im->imageData + i * lineStride, imageData + i * lineStride, (size_t) lineStride); + + return im; + } + + uint8* imageData; + int pixelStride = 4, lineStride; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UnityBitmapImage) + }; + + //============================================================================== + struct MouseWatcher : public Timer + { + MouseWatcher (ComponentPeer& o) : owner (o) {} + + void timerCallback() override + { + auto pos = Desktop::getMousePosition(); + + if (boundsToWatch.contains (pos) && pos != lastMousePos) + { + auto ms = Desktop::getInstance().getMainMouseSource(); + + if (! ms.getCurrentModifiers().isLeftButtonDown()) + owner.handleMouseEvent (juce::MouseInputSource::mouse, owner.globalToLocal (pos.toFloat()), {}, + juce::MouseInputSource::invalidPressure, juce::MouseInputSource::invalidOrientation, juce::Time::currentTimeMillis()); + + lastMousePos = pos; + } + + } + + void setBoundsToWatch (Rectangle b) + { + if (boundsToWatch != b) + boundsToWatch = b; + + startTimer (250); + } + + ComponentPeer& owner; + Rectangle boundsToWatch; + Point lastMousePos; + }; + + //============================================================================== + KeyPress getKeyPress (int keyCode, String name) + { + if (keyCode >= 32 && keyCode <= 64) + return { keyCode, ModifierKeys::currentModifiers, juce::juce_wchar (keyCode) }; + + if (keyCode >= 91 && keyCode <= 122) + return { keyCode, ModifierKeys::currentModifiers, name[0] }; + + if (keyCode >= 256 && keyCode <= 265) + return { juce::KeyPress::numberPad0 + (keyCode - 256), ModifierKeys::currentModifiers, juce::String (keyCode - 256).getCharPointer()[0] }; + + if (keyCode == 8) return { juce::KeyPress::backspaceKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 127) return { juce::KeyPress::deleteKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 9) return { juce::KeyPress::tabKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 13) return { juce::KeyPress::returnKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 27) return { juce::KeyPress::escapeKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 32) return { juce::KeyPress::spaceKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 266) return { juce::KeyPress::numberPadDecimalPoint, ModifierKeys::currentModifiers, {} }; + if (keyCode == 267) return { juce::KeyPress::numberPadDivide, ModifierKeys::currentModifiers, {} }; + if (keyCode == 268) return { juce::KeyPress::numberPadMultiply, ModifierKeys::currentModifiers, {} }; + if (keyCode == 269) return { juce::KeyPress::numberPadSubtract, ModifierKeys::currentModifiers, {} }; + if (keyCode == 270) return { juce::KeyPress::numberPadAdd, ModifierKeys::currentModifiers, {} }; + if (keyCode == 272) return { juce::KeyPress::numberPadEquals, ModifierKeys::currentModifiers, {} }; + if (keyCode == 273) return { juce::KeyPress::upKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 274) return { juce::KeyPress::downKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 275) return { juce::KeyPress::rightKey, ModifierKeys::currentModifiers, {} }; + if (keyCode == 276) return { juce::KeyPress::leftKey, ModifierKeys::currentModifiers, {} }; + + return {}; + } + + //============================================================================== + Rectangle bounds; + MouseWatcher mouseWatcher; + + uint8* pixelData = nullptr; + int textureWidth, textureHeight; + Image renderImage; + + //============================================================================== + void setMinimised (bool) override {} + bool isMinimised() const override { return false; } + void setFullScreen (bool) override {} + bool isFullScreen() const override { return false; } + bool setAlwaysOnTop (bool) override { return false; } + void toFront (bool) override {} + void toBehind (ComponentPeer*) override {} + bool isFocused() const override { return true; } + void grabFocus() override {} + void* getNativeHandle() const override { return nullptr; } + BorderSize getFrameSize() const override { return {}; } + void setVisible (bool) override {} + void setTitle (const String&) override {} + void setIcon (const Image&) override {} + void textInputRequired (Point, TextInputTarget&) override {} + void setAlpha (float) override {} + void performAnyPendingRepaintsNow() override {} + void repaint (const Rectangle&) override {} + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UnityPeer) +}; + +ComponentPeer* createUnityPeer (Component& c) { return new UnityPeer (c); } + +//============================================================================== +class AudioProcessorUnityWrapper +{ +public: + AudioProcessorUnityWrapper (bool isTemporary) + { + pluginInstance.reset (createPluginFilterOfType (AudioProcessor::wrapperType_Unity)); + + if (! isTemporary && pluginInstance->hasEditor()) + { + pluginInstanceEditor.reset (pluginInstance->createEditorIfNeeded()); + pluginInstanceEditor->setVisible (true); + pluginInstanceEditor->addToDesktop (0); + } + + juceParameters.update (*pluginInstance, false); + } + + ~AudioProcessorUnityWrapper() + { + if (pluginInstanceEditor != nullptr) + { + pluginInstanceEditor->removeFromDesktop(); + + PopupMenu::dismissAllActiveMenus(); + pluginInstanceEditor->processor.editorBeingDeleted (pluginInstanceEditor.get()); + pluginInstanceEditor = nullptr; + } + } + + void create (UnityAudioEffectState* state) + { + // only supported in Unity plugin API > 1.0 + if (state->structSize >= sizeof (UnityAudioEffectState)) + samplesPerBlock = static_cast (state->dspBufferSize); + + #ifdef JucePlugin_PreferredChannelConfigurations + short configs[][2] = { JucePlugin_PreferredChannelConfigurations }; + const int numConfigs = sizeof (configs) / sizeof (short[2]); + + jassert (numConfigs > 0 && (configs[0][0] > 0 || configs[0][1] > 0)); + + pluginInstance->setPlayConfigDetails (configs[0][0], configs[0][1], state->sampleRate, samplesPerBlock); + #else + pluginInstance->setRateAndBufferSizeDetails (state->sampleRate, samplesPerBlock); + #endif + + pluginInstance->prepareToPlay (state->sampleRate, samplesPerBlock); + + scratchBuffer.setSize (jmax (pluginInstance->getTotalNumInputChannels(), pluginInstance->getTotalNumOutputChannels()), samplesPerBlock); + } + + void release() + { + pluginInstance->releaseResources(); + } + + void reset() + { + pluginInstance->reset(); + } + + void process (float* inBuffer, float* outBuffer, int bufferSize, int numInChannels, int numOutChannels, bool isBypassed) + { + for (int pos = 0; pos < bufferSize;) + { + auto max = jmin (bufferSize - pos, samplesPerBlock); + processBuffers (inBuffer + (pos * numInChannels), outBuffer + (pos * numOutChannels), max, numInChannels, numOutChannels, isBypassed); + + pos += max; + } + } + + void declareParameters (UnityAudioEffectDefinition& definition) + { + static std::unique_ptr parametersPtr; + static int numParams = 0; + + if (parametersPtr == nullptr) + { + numParams = juceParameters.params.size(); + + parametersPtr.reset (static_cast (std::calloc (static_cast (numParams), + sizeof (UnityAudioParameterDefinition)))); + + parameterDescriptions.clear(); + + for (int i = 0; i < numParams; ++i) + { + auto* parameter = juceParameters.params[i]; + auto& paramDef = parametersPtr.get()[i]; + + strncpy (paramDef.name, parameter->getName (15).toRawUTF8(), 15); + + if (parameter->getLabel().isNotEmpty()) + strncpy (paramDef.unit, parameter->getLabel().toRawUTF8(), 15); + + parameterDescriptions.add (parameter->getName (15)); + paramDef.description = parameterDescriptions[i].toRawUTF8(); + + paramDef.defaultVal = parameter->getDefaultValue(); + paramDef.min = 0.0f; + paramDef.max = 1.0f; + paramDef.displayScale = 1.0f; + paramDef.displayExponent = 1.0f; + } + } + + definition.numParameters = static_cast (numParams); + definition.parameterDefintions = parametersPtr.get(); + } + + void setParameter (int index, float value) { juceParameters.getParamForIndex (index)->setValueNotifyingHost (value); } + float getParameter (int index) const noexcept { return juceParameters.getParamForIndex (index)->getValue(); } + + String getParameterString (int index) const noexcept + { + auto* param = juceParameters.getParamForIndex (index); + return param->getText (param->getValue(), 16); + } + + int getNumInputChannels() const noexcept { return pluginInstance->getTotalNumInputChannels(); } + int getNumOutputChannels() const noexcept { return pluginInstance->getTotalNumOutputChannels(); } + + bool hasEditor() const noexcept { return pluginInstance->hasEditor(); } + + UnityPeer& getEditorPeer() const + { + auto* peer = dynamic_cast (pluginInstanceEditor->getPeer()); + + jassert (peer != nullptr); + return *peer; + } + +private: + //============================================================================== + void processBuffers (float* inBuffer, float* outBuffer, int bufferSize, int numInChannels, int numOutChannels, bool isBypassed) + { + int ch; + for (ch = 0; ch < numInChannels; ++ch) + { + using DstSampleType = AudioData::Pointer; + using SrcSampleType = AudioData::Pointer; + + DstSampleType dstData (scratchBuffer.getWritePointer (ch)); + SrcSampleType srcData (inBuffer + ch, numInChannels); + dstData.convertSamples (srcData, bufferSize); + } + + for (; ch < numOutChannels; ++ch) + scratchBuffer.clear (ch, 0, bufferSize); + + { + const ScopedLock sl (pluginInstance->getCallbackLock()); + + if (pluginInstance->isSuspended()) + { + scratchBuffer.clear(); + } + else + { + MidiBuffer mb; + + if (isBypassed) + pluginInstance->processBlockBypassed (scratchBuffer, mb); + else + pluginInstance->processBlock (scratchBuffer, mb); + } + } + + for (ch = 0; ch < numOutChannels; ++ch) + { + using DstSampleType = AudioData::Pointer; + using SrcSampleType = AudioData::Pointer; + + DstSampleType dstData (outBuffer + ch, numOutChannels); + SrcSampleType srcData (scratchBuffer.getReadPointer (ch)); + dstData.convertSamples (srcData, bufferSize); + } + } + + //============================================================================== + std::unique_ptr pluginInstance; + std::unique_ptr pluginInstanceEditor; + + int samplesPerBlock = 1024; + StringArray parameterDescriptions; + + AudioBuffer scratchBuffer; + + LegacyAudioParametersWrapper juceParameters; + + //============================================================================== + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioProcessorUnityWrapper) +}; + +//============================================================================== +HashMap& getWrapperMap() +{ + static HashMap wrapperMap; + return wrapperMap; +} + +static void onWrapperCreation (AudioProcessorUnityWrapper* wrapperToAdd) +{ + getWrapperMap().set (std::abs (Random::getSystemRandom().nextInt (65536)), wrapperToAdd); +} + +static void onWrapperDeletion (AudioProcessorUnityWrapper* wrapperToRemove) +{ + getWrapperMap().removeValue (wrapperToRemove); +} + +//============================================================================== +namespace UnityCallbacks +{ + int UNITY_INTERFACE_API createCallback (UnityAudioEffectState* state) + { + auto* pluginInstance = new AudioProcessorUnityWrapper (false); + pluginInstance->create (state); + + state->effectData = pluginInstance; + + onWrapperCreation (pluginInstance); + + return 0; + } + + int UNITY_INTERFACE_API releaseCallback (UnityAudioEffectState* state) + { + auto* pluginInstance = state->getEffectData(); + pluginInstance->release(); + + onWrapperDeletion (pluginInstance); + delete pluginInstance; + + if (getWrapperMap().size() == 0) + shutdownJuce_GUI(); + + return 0; + } + + int UNITY_INTERFACE_API resetCallback (UnityAudioEffectState* state) + { + auto* pluginInstance = state->getEffectData(); + pluginInstance->reset(); + + return 0; + } + + int UNITY_INTERFACE_API setPositionCallback (UnityAudioEffectState* state, unsigned int pos) + { + ignoreUnused (state, pos); + + return 0; + } + + int UNITY_INTERFACE_API setFloatParameterCallback (UnityAudioEffectState* state, int index, float value) + { + auto* pluginInstance = state->getEffectData(); + pluginInstance->setParameter (index, value); + + return 0; + } + + int UNITY_INTERFACE_API getFloatParameterCallback (UnityAudioEffectState* state, int index, float* value, char* valueStr) + { + auto* pluginInstance = state->getEffectData(); + *value = pluginInstance->getParameter (index); + + strncpy (valueStr, pluginInstance->getParameterString (index).toRawUTF8(), 15); + + return 0; + } + + int UNITY_INTERFACE_API getFloatBufferCallback (UnityAudioEffectState* state, const char* name, float* buffer, int numSamples) + { + ignoreUnused (numSamples); + + auto nameStr = String (name); + + if (nameStr == "Editor") + { + auto* pluginInstance = state->getEffectData(); + + buffer[0] = pluginInstance->hasEditor() ? 1.0f : 0.0f; + } + else if (nameStr == "ID") + { + auto* pluginInstance = state->getEffectData(); + + for (HashMap::Iterator i (getWrapperMap()); i.next();) + { + if (i.getValue() == pluginInstance) + { + buffer[0] = (float) i.getKey(); + break; + } + } + + return 0; + } + else if (nameStr == "Size") + { + auto* pluginInstance = state->getEffectData(); + + auto& editor = pluginInstance->getEditorPeer().getEditor(); + + buffer[0] = (float) editor.getBounds().getWidth(); + buffer[1] = (float) editor.getBounds().getHeight(); + buffer[2] = (float) editor.getConstrainer()->getMinimumWidth(); + buffer[3] = (float) editor.getConstrainer()->getMinimumHeight(); + buffer[4] = (float) editor.getConstrainer()->getMaximumWidth(); + buffer[5] = (float) editor.getConstrainer()->getMaximumHeight(); + } + + return 0; + } + + int UNITY_INTERFACE_API processCallback (UnityAudioEffectState* state, float* inBuffer, float* outBuffer, + unsigned int bufferSize, int numInChannels, int numOutChannels) + { + auto* pluginInstance = state->getEffectData(); + + if (pluginInstance != nullptr) + { + auto isPlaying = ((state->flags & stateIsPlaying) != 0); + auto isMuted = ((state->flags & stateIsMuted) != 0); + auto isPaused = ((state->flags & stateIsPaused) != 0); + + auto bypassed = ! isPlaying || (isMuted || isPaused); + + pluginInstance->process (inBuffer, outBuffer, static_cast (bufferSize), numInChannels, numOutChannels, bypassed); + } + else + { + FloatVectorOperations::clear (outBuffer, static_cast (bufferSize) * numOutChannels); + } + + return 0; + } +} + +//============================================================================== +static void declareEffect (UnityAudioEffectDefinition& definition) +{ + memset (&definition, 0, sizeof (definition)); + + std::unique_ptr wrapper = std::make_unique (true); + + String name (JucePlugin_Name); + if (! name.startsWithIgnoreCase ("audioplugin")) + name = "audioplugin_" + name; + + strcpy (definition.name, name.toRawUTF8()); + + definition.structSize = sizeof (UnityAudioEffectDefinition); + definition.parameterStructSize = sizeof (UnityAudioParameterDefinition); + + definition.apiVersion = UNITY_AUDIO_PLUGIN_API_VERSION; + definition.pluginVersion = JucePlugin_VersionCode; + + // effects must set this to 0, generators > 0 + definition.channels = (wrapper->getNumInputChannels() != 0 ? 0 + : static_cast (wrapper->getNumOutputChannels())); + + wrapper->declareParameters (definition); + + definition.create = UnityCallbacks::createCallback; + definition.release = UnityCallbacks::releaseCallback; + definition.reset = UnityCallbacks::resetCallback; + definition.setPosition = UnityCallbacks::setPositionCallback; + definition.process = UnityCallbacks::processCallback; + definition.setFloatParameter = UnityCallbacks::setFloatParameterCallback; + definition.getFloatParameter = UnityCallbacks::getFloatParameterCallback; + definition.getFloatBuffer = UnityCallbacks::getFloatBufferCallback; +} + +} // namespace juce + +UNITY_INTERFACE_EXPORT int UnityGetAudioEffectDefinitions (UnityAudioEffectDefinition*** definitionsPtr) +{ + if (juce::getWrapperMap().size() == 0) + juce::initialiseJuce_GUI(); + + static bool hasInitialised = false; + + if (! hasInitialised) + { + juce::PluginHostType::jucePlugInClientCurrentWrapperType = juce::AudioProcessor::wrapperType_Unity; + juce::juce_createUnityPeerFn = juce::createUnityPeer; + + hasInitialised = true; + } + + auto* definition = new UnityAudioEffectDefinition(); + juce::declareEffect (*definition); + + *definitionsPtr = &definition; + + return 1; +} + +//============================================================================== +static juce::ModifierKeys unityModifiersToJUCE (UnityEventModifiers mods, bool mouseDown, int mouseButton = -1) +{ + int flags = 0; + + if (mouseDown) + { + if (mouseButton == 0) + flags |= juce::ModifierKeys::leftButtonModifier; + else if (mouseButton == 1) + flags |= juce::ModifierKeys::rightButtonModifier; + else if (mouseButton == 2) + flags |= juce::ModifierKeys::middleButtonModifier; + } + + if (mods == 0) + return flags; + + if ((mods & UnityEventModifiers::shift) != 0) flags |= juce::ModifierKeys::shiftModifier; + if ((mods & UnityEventModifiers::control) != 0) flags |= juce::ModifierKeys::ctrlModifier; + if ((mods & UnityEventModifiers::alt) != 0) flags |= juce::ModifierKeys::altModifier; + if ((mods & UnityEventModifiers::command) != 0) flags |= juce::ModifierKeys::commandModifier; + + return { flags }; +} + +//============================================================================== +static juce::AudioProcessorUnityWrapper* getWrapperChecked (int id) +{ + auto* wrapper = juce::getWrapperMap()[id]; + jassert (wrapper != nullptr); + + return wrapper; +} + +//============================================================================== +static void UNITY_INTERFACE_API onRenderEvent (int id) +{ + getWrapperChecked (id)->getEditorPeer().triggerAsyncUpdate(); +} + +UNITY_INTERFACE_EXPORT renderCallback UNITY_INTERFACE_API getRenderCallback() +{ + return onRenderEvent; +} + +UNITY_INTERFACE_EXPORT void unityInitialiseTexture (int id, void* data, int w, int h) +{ + getWrapperChecked (id)->getEditorPeer().setPixelDataHandle (reinterpret_cast (data), w, h); +} + +UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseDown (int id, float x, float y, UnityEventModifiers unityMods, int button) +{ + getWrapperChecked (id)->getEditorPeer().forwardMouseEvent ({ x, y }, unityModifiersToJUCE (unityMods, true, button)); +} + +UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseDrag (int id, float x, float y, UnityEventModifiers unityMods, int button) +{ + getWrapperChecked (id)->getEditorPeer().forwardMouseEvent ({ x, y }, unityModifiersToJUCE (unityMods, true, button)); +} + +UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityMouseUp (int id, float x, float y, UnityEventModifiers unityMods) +{ + getWrapperChecked (id)->getEditorPeer().forwardMouseEvent ({ x, y }, unityModifiersToJUCE (unityMods, false)); +} + +UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unityKeyEvent (int id, int code, UnityEventModifiers mods, const char* name) +{ + getWrapperChecked (id)->getEditorPeer().forwardKeyPress (code, name, unityModifiersToJUCE (mods, false)); +} + +UNITY_INTERFACE_EXPORT void UNITY_INTERFACE_API unitySetScreenBounds (int id, float x, float y, float w, float h) +{ + getWrapperChecked (id)->getEditorPeer().getEditor().setBounds ({ (int) x, (int) y, (int) w, (int) h }); +} + +//============================================================================== +#if JUCE_WINDOWS + extern "C" BOOL WINAPI DllMain (HINSTANCE instance, DWORD reason, LPVOID) + { + if (reason == DLL_PROCESS_ATTACH) + juce::Process::setCurrentModuleInstanceHandle (instance); + + return true; + } +#endif + +#endif diff --git a/modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h b/modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h index a39f8977..6ba00563 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h +++ b/modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h @@ -27,7 +27,7 @@ namespace juce { -/** An interface to allow an AudioProcessor to receive VST specific calls from +/** An interface to allow an AudioProcessor to send and receive VST specific calls from the host. @tags{Audio} @@ -55,6 +55,22 @@ struct VSTCallbackHandler pointer_sized_int value, void* ptr, float opt) = 0; + + // Note: VS2013 prevents a "using" declaration here + /** The host callback function type. */ + typedef pointer_sized_int (VstHostCallbackType) (int32 opcode, + int32 index, + pointer_sized_int value, + void* ptr, + float opt); + + /** This is called once by the VST plug-in wrapper after its constructor. + You can use the supplied function to query the VST host. + */ + virtual void handleVstHostCallbackAvailable (std::function&& callback) + { + ignoreUnused (callback); + } }; } // namespace juce diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 216265ea..cb852e8f 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -34,6 +34,29 @@ #endif #include "../utility/juce_IncludeSystemHeaders.h" +#include + +#if JucePlugin_VersionCode < 0x010000 // Major < 0 + + #if (JucePlugin_VersionCode & 0x00FF00) > (9 * 0x100) // check if Minor number exceeeds 9 + JUCE_COMPILER_WARNING ("When version has 'major' = 0, VST2 has trouble displaying 'minor' exceeding 9") + #endif + + #if (JucePlugin_VersionCode & 0xFF) > 9 // check if Bugfix number exceeeds 9 + JUCE_COMPILER_WARNING ("When version has 'major' = 0, VST2 has trouble displaying 'bugfix' exceeding 9") + #endif + +#elif JucePlugin_VersionCode >= 0x650000 // Major >= 101 + + #if (JucePlugin_VersionCode & 0x00FF00) > (99 * 0x100) // check if Minor number exceeeds 99 + JUCE_COMPILER_WARNING ("When version has 'major' > 100, VST2 has trouble displaying 'minor' exceeding 99") + #endif + + #if (JucePlugin_VersionCode & 0xFF) > 99 // check if Bugfix number exceeeds 99 + JUCE_COMPILER_WARNING ("When version has 'major' > 100, VST2 has trouble displaying 'bugfix' exceeding 99") + #endif + +#endif #ifdef PRAGMA_ALIGN_SUPPORTED #undef PRAGMA_ALIGN_SUPPORTED @@ -59,8 +82,21 @@ #pragma warning (disable : 4458) #endif -#include -#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" +#define VST_FORCE_DEPRECATED 0 + +namespace Vst2 +{ +// If the following files cannot be found then you are probably trying to build +// a VST2 plug-in or a VST2-compatible VST3 plug-in. To do this you must have a +// VST2 SDK in your header search paths or use the "VST (Legacy) SDK Folder" +// field in the Projucer. The VST2 SDK can be obtained from the +// vstsdk3610_11_06_2018_build_37 (or older) VST3 SDK or JUCE version 5.3.2. You +// also need a VST2 license from Steinberg to distribute VST2 plug-ins. +#include "pluginterfaces/vst2.x/aeffect.h" +#include "pluginterfaces/vst2.x/aeffectx.h" +} + +using namespace juce; #ifdef _MSC_VER #pragma warning (pop) @@ -75,6 +111,8 @@ #pragma pack (push, 8) #endif +#define JUCE_VSTINTERFACE_H_INCLUDED 1 + #include "../utility/juce_IncludeModuleHeaders.h" #include "../utility/juce_FakeMouseMoveGenerator.h" #include "../utility/juce_WindowsHooks.h" @@ -82,6 +120,12 @@ #include "../../juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp" #include "../../juce_audio_processors/format_types/juce_VSTCommon.h" +#if JUCE_BIG_ENDIAN + #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (a | (((uint32) b) << 8) | (((uint32) c) << 16) | (((uint32) d) << 24)) +#else + #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (d | (((uint32) c) << 8) | (((uint32) b) << 16) | (((uint32) a) << 24)) +#endif + #ifdef _MSC_VER #pragma pack (pop) #endif @@ -258,7 +302,7 @@ private: public: //============================================================================== - JuceVSTWrapper (VstHostCallback cb, AudioProcessor* af) + JuceVSTWrapper (Vst2::audioMasterCallback cb, AudioProcessor* af) : hostCallback (cb), processor (af) { @@ -289,40 +333,43 @@ public: juceParameters.update (*processor, false); memset (&vstEffect, 0, sizeof (vstEffect)); - vstEffect.interfaceIdentifier = juceVstInterfaceIdentifier; - vstEffect.dispatchFunction = dispatcherCB; - vstEffect.processAudioFunction = nullptr; - vstEffect.setParameterValueFunction = setParameterCB; - vstEffect.getParameterValueFunction = getParameterCB; + vstEffect.magic = 0x56737450 /* 'VstP' */; + vstEffect.dispatcher = (Vst2::AEffectDispatcherProc) dispatcherCB; + vstEffect.process = nullptr; + vstEffect.setParameter = (Vst2::AEffectSetParameterProc) setParameterCB; + vstEffect.getParameter = (Vst2::AEffectGetParameterProc) getParameterCB; vstEffect.numPrograms = jmax (1, af->getNumPrograms()); - vstEffect.numParameters = juceParameters.getNumParameters(); - vstEffect.numInputChannels = maxNumInChannels; - vstEffect.numOutputChannels = maxNumOutChannels; - vstEffect.latency = processor->getLatencySamples(); - vstEffect.effectPointer = this; - vstEffect.plugInIdentifier = JucePlugin_VSTUniqueID; + vstEffect.numParams = juceParameters.getNumParameters(); + vstEffect.numInputs = maxNumInChannels; + vstEffect.numOutputs = maxNumOutChannels; + vstEffect.initialDelay = processor->getLatencySamples(); + vstEffect.object = this; + vstEffect.uniqueID = JucePlugin_VSTUniqueID; #ifdef JucePlugin_VSTChunkStructureVersion - vstEffect.plugInVersion = JucePlugin_VSTChunkStructureVersion; + vstEffect.version = JucePlugin_VSTChunkStructureVersion; #else - vstEffect.plugInVersion = JucePlugin_VersionCode; + vstEffect.version = JucePlugin_VersionCode; #endif - vstEffect.processAudioInplaceFunction = processReplacingCB; - vstEffect.processDoubleAudioInplaceFunction = processDoubleReplacingCB; + vstEffect.processReplacing = (Vst2::AEffectProcessProc) processReplacingCB; + vstEffect.processDoubleReplacing = (Vst2::AEffectProcessDoubleProc) processDoubleReplacingCB; - vstEffect.flags |= vstEffectFlagHasEditor; + vstEffect.flags |= Vst2::effFlagsHasEditor; - vstEffect.flags |= vstEffectFlagInplaceAudio; + vstEffect.flags |= Vst2::effFlagsCanReplacing; if (processor->supportsDoublePrecisionProcessing()) - vstEffect.flags |= vstEffectFlagInplaceDoubleAudio; + vstEffect.flags |= Vst2::effFlagsCanDoubleReplacing; + + vstEffect.flags |= Vst2::effFlagsProgramChunks; #if JucePlugin_IsSynth - vstEffect.flags |= vstEffectFlagIsSynth; + vstEffect.flags |= Vst2::effFlagsIsSynth; + #else + if (processor->getTailLengthSeconds() == 0.0) + vstEffect.flags |= Vst2::effFlagsNoSoundInStop; #endif - vstEffect.flags |= vstEffectFlagDataInChunks; - activePlugins.add (this); } @@ -364,7 +411,7 @@ public: } } - VstEffectInterface* getVstEffectInterface() noexcept { return &vstEffect; } + Vst2::AEffect* getAEffect() noexcept { return &vstEffect; } template void internalProcessReplacing (FloatType** inputs, FloatType** outputs, @@ -503,7 +550,7 @@ public: // Send VST events to the host. if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodePreAudioProcessingEvents, 0, 0, outgoingEvents.events, 0); + hostCallback (&vstEffect, Vst2::audioMasterProcessEvents, 0, 0, outgoingEvents.events, 0); #elif JUCE_DEBUG /* This assertion is caused when you've added some events to the midiMessages array in your processBlock() method, which usually means @@ -532,7 +579,7 @@ public: internalProcessReplacing (inputs, outputs, sampleFrames, floatTempBuffers); } - static void processReplacingCB (VstEffectInterface* vstInterface, float** inputs, float** outputs, int32 sampleFrames) + static void processReplacingCB (Vst2::AEffect* vstInterface, float** inputs, float** outputs, int32 sampleFrames) { getWrapper (vstInterface)->processReplacing (inputs, outputs, sampleFrames); } @@ -543,7 +590,7 @@ public: internalProcessReplacing (inputs, outputs, sampleFrames, doubleTempBuffers); } - static void processDoubleReplacingCB (VstEffectInterface* vstInterface, double** inputs, double** outputs, int32 sampleFrames) + static void processDoubleReplacingCB (Vst2::AEffect* vstInterface, double** inputs, double** outputs, int32 sampleFrames) { getWrapper (vstInterface)->processDoubleReplacing (inputs, outputs, sampleFrames); } @@ -555,7 +602,7 @@ public: { isProcessing = true; - auto numInAndOutChannels = static_cast (vstEffect.numInputChannels + vstEffect.numOutputChannels); + auto numInAndOutChannels = static_cast (vstEffect.numInputs + vstEffect.numOutputs); floatTempBuffers .channels.calloc (numInAndOutChannels); doubleTempBuffers.channels.calloc (numInAndOutChannels); @@ -574,21 +621,21 @@ public: midiEvents.ensureSize (2048); midiEvents.clear(); - vstEffect.latency = processor->getLatencySamples(); + vstEffect.initialDelay = processor->getLatencySamples(); /** If this plug-in is a synth or it can receive midi events we need to tell the host that we want midi. In the SDK this method is marked as deprecated, but some hosts rely on this behaviour. */ - if (vstEffect.flags & vstEffectFlagIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) + if (vstEffect.flags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect) { if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodePlugInWantsMidi, 0, 1, 0, 0); + hostCallback (&vstEffect, Vst2::audioMasterWantMidi, 0, 1, 0, 0); } if (getHostType().isAbletonLive() && hostCallback != nullptr - && processor->getTailLengthSeconds() == std::numeric_limits::max()) + && processor->getTailLengthSeconds() == std::numeric_limits::infinity()) { AbletonLiveHostSpecific hostCmd; @@ -597,7 +644,7 @@ public: hostCmd.commandSize = sizeof (int); hostCmd.flags = AbletonLiveHostSpecific::KCantBeSuspended; - hostCallback (&vstEffect, hostOpcodeManufacturerSpecific, 0, 0, &hostCmd, 0.0f); + hostCallback (&vstEffect, Vst2::audioMasterVendorSpecific, 0, 0, &hostCmd, 0.0f); } #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect @@ -624,28 +671,28 @@ public: //============================================================================== bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) override { - const VstTimingInformation* ti = nullptr; + const Vst2::VstTimeInfo* ti = nullptr; if (hostCallback != nullptr) { - int32 flags = vstTimingInfoFlagMusicalPositionValid | vstTimingInfoFlagTempoValid - | vstTimingInfoFlagLastBarPositionValid | vstTimingInfoFlagLoopPositionValid - | vstTimingInfoFlagTimeSignatureValid | vstTimingInfoFlagSmpteValid - | vstTimingInfoFlagNearestClockValid; + int32 flags = Vst2::kVstPpqPosValid | Vst2::kVstTempoValid + | Vst2::kVstBarsValid | Vst2::kVstCyclePosValid + | Vst2::kVstTimeSigValid | Vst2::kVstSmpteValid + | Vst2::kVstClockValid; - auto result = hostCallback (&vstEffect, hostOpcodeGetTimingInfo, 0, flags, 0, 0); - ti = reinterpret_cast (result); + auto result = hostCallback (&vstEffect, Vst2::audioMasterGetTime, 0, flags, 0, 0); + ti = reinterpret_cast (result); } if (ti == nullptr || ti->sampleRate <= 0) return false; - info.bpm = (ti->flags & vstTimingInfoFlagTempoValid) != 0 ? ti->tempoBPM : 0.0; + info.bpm = (ti->flags & Vst2::kVstTempoValid) != 0 ? ti->tempo : 0.0; - if ((ti->flags & vstTimingInfoFlagTimeSignatureValid) != 0) + if ((ti->flags & Vst2::kVstTimeSigValid) != 0) { - info.timeSigNumerator = ti->timeSignatureNumerator; - info.timeSigDenominator = ti->timeSignatureDenominator; + info.timeSigNumerator = ti->timeSigNumerator; + info.timeSigDenominator = ti->timeSigDenominator; } else { @@ -653,34 +700,34 @@ public: info.timeSigDenominator = 4; } - info.timeInSamples = (int64) (ti->samplePosition + 0.5); - info.timeInSeconds = ti->samplePosition / ti->sampleRate; - info.ppqPosition = (ti->flags & vstTimingInfoFlagMusicalPositionValid) != 0 ? ti->musicalPosition : 0.0; - info.ppqPositionOfLastBarStart = (ti->flags & vstTimingInfoFlagLastBarPositionValid) != 0 ? ti->lastBarPosition : 0.0; + info.timeInSamples = (int64) (ti->samplePos + 0.5); + info.timeInSeconds = ti->samplePos / ti->sampleRate; + info.ppqPosition = (ti->flags & Vst2::kVstPpqPosValid) != 0 ? ti->ppqPos : 0.0; + info.ppqPositionOfLastBarStart = (ti->flags & Vst2::kVstBarsValid) != 0 ? ti->barStartPos : 0.0; - if ((ti->flags & vstTimingInfoFlagSmpteValid) != 0) + if ((ti->flags & Vst2::kVstSmpteValid) != 0) { AudioPlayHead::FrameRateType rate = AudioPlayHead::fpsUnknown; double fps = 1.0; - switch (ti->smpteRate) + switch (ti->smpteFrameRate) { - case vstSmpteRateFps239: rate = AudioPlayHead::fps23976; fps = 24.0 * 1000.0 / 1001.0; break; - case vstSmpteRateFps24: rate = AudioPlayHead::fps24; fps = 24.0; break; - case vstSmpteRateFps25: rate = AudioPlayHead::fps25; fps = 25.0; break; - case vstSmpteRateFps2997: rate = AudioPlayHead::fps2997; fps = 30.0 * 1000.0 / 1001.0; break; - case vstSmpteRateFps30: rate = AudioPlayHead::fps30; fps = 30.0; break; - case vstSmpteRateFps2997drop: rate = AudioPlayHead::fps2997drop; fps = 30.0 * 1000.0 / 1001.0; break; - case vstSmpteRateFps30drop: rate = AudioPlayHead::fps30drop; fps = 30.0; break; - - case vstSmpteRate16mmFilm: - case vstSmpteRate35mmFilm: fps = 24.0; break; - - case vstSmpteRateFps249: fps = 25.0 * 1000.0 / 1001.0; break; - case vstSmpteRateFps599: fps = 60.0 * 1000.0 / 1001.0; break; - case vstSmpteRateFps60: fps = 60; break; - - default: jassertfalse; // unknown frame-rate.. + case Vst2::kVstSmpte239fps: rate = AudioPlayHead::fps23976; fps = 24.0 * 1000.0 / 1001.0; break; + case Vst2::kVstSmpte24fps: rate = AudioPlayHead::fps24; fps = 24.0; break; + case Vst2::kVstSmpte25fps: rate = AudioPlayHead::fps25; fps = 25.0; break; + case Vst2::kVstSmpte2997fps: rate = AudioPlayHead::fps2997; fps = 30.0 * 1000.0 / 1001.0; break; + case Vst2::kVstSmpte30fps: rate = AudioPlayHead::fps30; fps = 30.0; break; + case Vst2::kVstSmpte2997dfps: rate = AudioPlayHead::fps2997drop; fps = 30.0 * 1000.0 / 1001.0; break; + case Vst2::kVstSmpte30dfps: rate = AudioPlayHead::fps30drop; fps = 30.0; break; + + case Vst2::kVstSmpteFilm16mm: + case Vst2::kVstSmpteFilm35mm: fps = 24.0; break; + + case Vst2::kVstSmpte249fps: fps = 25.0 * 1000.0 / 1001.0; break; + case Vst2::kVstSmpte599fps: fps = 60.0 * 1000.0 / 1001.0; break; + case Vst2::kVstSmpte60fps: fps = 60; break; + + default: jassertfalse; // unknown frame-rate.. } info.frameRate = rate; @@ -692,14 +739,14 @@ public: info.editOriginTime = 0; } - info.isRecording = (ti->flags & vstTimingInfoFlagCurrentlyRecording) != 0; - info.isPlaying = (ti->flags & (vstTimingInfoFlagCurrentlyRecording | vstTimingInfoFlagCurrentlyPlaying)) != 0; - info.isLooping = (ti->flags & vstTimingInfoFlagLoopActive) != 0; + info.isRecording = (ti->flags & Vst2::kVstTransportRecording) != 0; + info.isPlaying = (ti->flags & (Vst2::kVstTransportRecording | Vst2::kVstTransportPlaying)) != 0; + info.isLooping = (ti->flags & Vst2::kVstTransportCycleActive) != 0; - if ((ti->flags & vstTimingInfoFlagLoopPositionValid) != 0) + if ((ti->flags & Vst2::kVstCyclePosValid) != 0) { - info.ppqLoopStart = ti->loopStartPosition; - info.ppqLoopEnd = ti->loopEndPosition; + info.ppqLoopStart = ti->cycleStartPos; + info.ppqLoopEnd = ti->cycleEndPos; } else { @@ -719,7 +766,7 @@ public: return 0.0f; } - static float getParameterCB (VstEffectInterface* vstInterface, int32 index) + static float getParameterCB (Vst2::AEffect* vstInterface, int32 index) { return getWrapper (vstInterface)->getParameter (index); } @@ -735,7 +782,7 @@ public: } } - static void setParameterCB (VstEffectInterface* vstInterface, int32 index, float value) + static void setParameterCB (Vst2::AEffect* vstInterface, int32 index, float value) { getWrapper (vstInterface)->setParameter (index, value); } @@ -749,19 +796,19 @@ public: } if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodeParameterChanged, index, 0, 0, newValue); + hostCallback (&vstEffect, Vst2::audioMasterAutomate, index, 0, 0, newValue); } void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) override { if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodeParameterChangeGestureBegin, index, 0, 0, 0); + hostCallback (&vstEffect, Vst2::audioMasterBeginEdit, index, 0, 0, 0); } void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) override { if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodeParameterChangeGestureEnd, index, 0, 0, 0); + hostCallback (&vstEffect, Vst2::audioMasterEndEdit, index, 0, 0, 0); } void parameterValueChanged (int, float newValue) override @@ -774,10 +821,10 @@ public: void audioProcessorChanged (AudioProcessor*) override { - vstEffect.latency = processor->getLatencySamples(); + vstEffect.initialDelay = processor->getLatencySamples(); if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodeUpdateView, 0, 0, 0, 0); + hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, 0, 0); triggerAsyncUpdate(); } @@ -785,10 +832,10 @@ public: void handleAsyncUpdate() override { if (hostCallback != nullptr) - hostCallback (&vstEffect, hostOpcodeIOModified, 0, 0, 0, 0); + hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, 0, 0); } - bool getPinProperties (VstPinInfo& properties, bool direction, int index) const + bool getPinProperties (Vst2::VstPinProperties& properties, bool direction, int index) const { if (processor->isMidiEffect()) return false; @@ -797,9 +844,9 @@ public: // fill with default properties.flags = 0; - properties.text[0] = 0; - properties.shortText[0] = 0; - properties.configurationType = vstSpeakerConfigTypeEmpty; + properties.label[0] = 0; + properties.shortLabel[0] = 0; + properties.arrangementType = Vst2::kSpeakerArrEmpty; if ((channelIdx = processor->getOffsetInBusBufferForAbsoluteChannelIndex (direction, index, busIdx)) >= 0) { @@ -807,8 +854,8 @@ public: auto& channelSet = bus.getCurrentLayout(); auto channelType = channelSet.getTypeOfChannel (channelIdx); - properties.flags = vstPinInfoFlagIsActive | vstPinInfoFlagValid; - properties.configurationType = SpeakerMappings::channelSetToVstArrangementType (channelSet); + properties.flags = Vst2::kVstPinIsActive | Vst2::kVstPinUseSpeaker; + properties.arrangementType = SpeakerMappings::channelSetToVstArrangementType (channelSet); String label = bus.getName(); #ifdef JucePlugin_PreferredChannelConfigurations @@ -818,8 +865,8 @@ public: label += " " + AudioChannelSet::getAbbreviatedChannelTypeName (channelType); #endif - label.copyToUTF8 (properties.text, (size_t) (vstMaxParameterOrPinLabelLength + 1)); - label.copyToUTF8 (properties.shortText, (size_t) (vstMaxParameterOrPinShortLabelLength + 1)); + label.copyToUTF8 (properties.label, (size_t) (Vst2::kVstMaxLabelLen + 1)); + label.copyToUTF8 (properties.shortLabel, (size_t) (Vst2::kVstMaxShortLabelLen + 1)); if (channelType == AudioChannelSet::left || channelType == AudioChannelSet::leftSurround @@ -829,7 +876,7 @@ public: || channelType == AudioChannelSet::topRearLeft || channelType == AudioChannelSet::leftSurroundRear || channelType == AudioChannelSet::wideLeft) - properties.flags |= vstPinInfoFlagIsStereo; + properties.flags |= Vst2::kVstPinIsStereo; return true; } @@ -862,27 +909,27 @@ public: } }; - static AudioChannelSet vstArrangementTypeToChannelSet (const VstSpeakerConfiguration& arr) - { - if (arr.type == vstSpeakerConfigTypeEmpty) return AudioChannelSet::disabled(); - if (arr.type == vstSpeakerConfigTypeMono) return AudioChannelSet::mono(); - if (arr.type == vstSpeakerConfigTypeLR) return AudioChannelSet::stereo(); - if (arr.type == vstSpeakerConfigTypeLRC) return AudioChannelSet::createLCR(); - if (arr.type == vstSpeakerConfigTypeLRS) return AudioChannelSet::createLRS(); - if (arr.type == vstSpeakerConfigTypeLRCS) return AudioChannelSet::createLCRS(); - if (arr.type == vstSpeakerConfigTypeLRCLsRs) return AudioChannelSet::create5point0(); - if (arr.type == vstSpeakerConfigTypeLRCLfeLsRs) return AudioChannelSet::create5point1(); - if (arr.type == vstSpeakerConfigTypeLRCLsRsCs) return AudioChannelSet::create6point0(); - if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsCs) return AudioChannelSet::create6point1(); - if (arr.type == vstSpeakerConfigTypeLRLsRsSlSr) return AudioChannelSet::create6point0Music(); - if (arr.type == vstSpeakerConfigTypeLRLfeLsRsSlSr) return AudioChannelSet::create6point1Music(); - if (arr.type == vstSpeakerConfigTypeLRCLsRsSlSr) return AudioChannelSet::create7point0(); - if (arr.type == vstSpeakerConfigTypeLRCLsRsLcRc) return AudioChannelSet::create7point0SDDS(); - if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsSlSr) return AudioChannelSet::create7point1(); - if (arr.type == vstSpeakerConfigTypeLRCLfeLsRsLcRc) return AudioChannelSet::create7point1SDDS(); - if (arr.type == vstSpeakerConfigTypeLRLsRs) return AudioChannelSet::quadraphonic(); - - for (auto* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m) + static AudioChannelSet vstArrangementTypeToChannelSet (const Vst2::VstSpeakerArrangement& arr) + { + if (arr.type == Vst2::kSpeakerArrEmpty) return AudioChannelSet::disabled(); + if (arr.type == Vst2::kSpeakerArrMono) return AudioChannelSet::mono(); + if (arr.type == Vst2::kSpeakerArrStereo) return AudioChannelSet::stereo(); + if (arr.type == Vst2::kSpeakerArr30Cine) return AudioChannelSet::createLCR(); + if (arr.type == Vst2::kSpeakerArr30Music) return AudioChannelSet::createLRS(); + if (arr.type == Vst2::kSpeakerArr40Cine) return AudioChannelSet::createLCRS(); + if (arr.type == Vst2::kSpeakerArr50) return AudioChannelSet::create5point0(); + if (arr.type == Vst2::kSpeakerArr51) return AudioChannelSet::create5point1(); + if (arr.type == Vst2::kSpeakerArr60Cine) return AudioChannelSet::create6point0(); + if (arr.type == Vst2::kSpeakerArr61Cine) return AudioChannelSet::create6point1(); + if (arr.type == Vst2::kSpeakerArr60Music) return AudioChannelSet::create6point0Music(); + if (arr.type == Vst2::kSpeakerArr61Music) return AudioChannelSet::create6point1Music(); + if (arr.type == Vst2::kSpeakerArr70Music) return AudioChannelSet::create7point0(); + if (arr.type == Vst2::kSpeakerArr70Cine) return AudioChannelSet::create7point0SDDS(); + if (arr.type == Vst2::kSpeakerArr71Music) return AudioChannelSet::create7point1(); + if (arr.type == Vst2::kSpeakerArr71Cine) return AudioChannelSet::create7point1SDDS(); + if (arr.type == Vst2::kSpeakerArr40Music) return AudioChannelSet::quadraphonic(); + + for (auto* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) { if (m->vst2 == arr.type) { @@ -895,51 +942,51 @@ public: } } - return AudioChannelSet::discreteChannels (arr.numberOfChannels); + return AudioChannelSet::discreteChannels (arr.numChannels); } static int32 channelSetToVstArrangementType (AudioChannelSet channels) { - if (channels == AudioChannelSet::disabled()) return vstSpeakerConfigTypeEmpty; - if (channels == AudioChannelSet::mono()) return vstSpeakerConfigTypeMono; - if (channels == AudioChannelSet::stereo()) return vstSpeakerConfigTypeLR; - if (channels == AudioChannelSet::createLCR()) return vstSpeakerConfigTypeLRC; - if (channels == AudioChannelSet::createLRS()) return vstSpeakerConfigTypeLRS; - if (channels == AudioChannelSet::createLCRS()) return vstSpeakerConfigTypeLRCS; - if (channels == AudioChannelSet::create5point0()) return vstSpeakerConfigTypeLRCLsRs; - if (channels == AudioChannelSet::create5point1()) return vstSpeakerConfigTypeLRCLfeLsRs; - if (channels == AudioChannelSet::create6point0()) return vstSpeakerConfigTypeLRCLsRsCs; - if (channels == AudioChannelSet::create6point1()) return vstSpeakerConfigTypeLRCLfeLsRsCs; - if (channels == AudioChannelSet::create6point0Music()) return vstSpeakerConfigTypeLRLsRsSlSr; - if (channels == AudioChannelSet::create6point1Music()) return vstSpeakerConfigTypeLRLfeLsRsSlSr; - if (channels == AudioChannelSet::create7point0()) return vstSpeakerConfigTypeLRCLsRsSlSr; - if (channels == AudioChannelSet::create7point0SDDS()) return vstSpeakerConfigTypeLRCLsRsLcRc; - if (channels == AudioChannelSet::create7point1()) return vstSpeakerConfigTypeLRCLfeLsRsSlSr; - if (channels == AudioChannelSet::create7point1SDDS()) return vstSpeakerConfigTypeLRCLfeLsRsLcRc; - if (channels == AudioChannelSet::quadraphonic()) return vstSpeakerConfigTypeLRLsRs; + if (channels == AudioChannelSet::disabled()) return Vst2::kSpeakerArrEmpty; + if (channels == AudioChannelSet::mono()) return Vst2::kSpeakerArrMono; + if (channels == AudioChannelSet::stereo()) return Vst2::kSpeakerArrStereo; + if (channels == AudioChannelSet::createLCR()) return Vst2::kSpeakerArr30Cine; + if (channels == AudioChannelSet::createLRS()) return Vst2::kSpeakerArr30Music; + if (channels == AudioChannelSet::createLCRS()) return Vst2::kSpeakerArr40Cine; + if (channels == AudioChannelSet::create5point0()) return Vst2::kSpeakerArr50; + if (channels == AudioChannelSet::create5point1()) return Vst2::kSpeakerArr51; + if (channels == AudioChannelSet::create6point0()) return Vst2::kSpeakerArr60Cine; + if (channels == AudioChannelSet::create6point1()) return Vst2::kSpeakerArr61Cine; + if (channels == AudioChannelSet::create6point0Music()) return Vst2::kSpeakerArr60Music; + if (channels == AudioChannelSet::create6point1Music()) return Vst2::kSpeakerArr61Music; + if (channels == AudioChannelSet::create7point0()) return Vst2::kSpeakerArr70Music; + if (channels == AudioChannelSet::create7point0SDDS()) return Vst2::kSpeakerArr70Cine; + if (channels == AudioChannelSet::create7point1()) return Vst2::kSpeakerArr71Music; + if (channels == AudioChannelSet::create7point1SDDS()) return Vst2::kSpeakerArr71Cine; + if (channels == AudioChannelSet::quadraphonic()) return Vst2::kSpeakerArr40Music; if (channels == AudioChannelSet::disabled()) - return vstSpeakerConfigTypeEmpty; + return Vst2::kSpeakerArrEmpty; auto chans = channels.getChannelTypes(); - for (auto* m = getMappings(); m->vst2 != vstSpeakerConfigTypeEmpty; ++m) + for (auto* m = getMappings(); m->vst2 != Vst2::kSpeakerArrEmpty; ++m) if (m->matches (chans)) return m->vst2; - return vstSpeakerConfigTypeUser; + return Vst2::kSpeakerArrUserDefined; } - static void channelSetToVstArrangement (const AudioChannelSet& channels, VstSpeakerConfiguration& result) + static void channelSetToVstArrangement (const AudioChannelSet& channels, Vst2::VstSpeakerArrangement& result) { result.type = channelSetToVstArrangementType (channels); - result.numberOfChannels = channels.size(); + result.numChannels = channels.size(); - for (int i = 0; i < result.numberOfChannels; ++i) + for (int i = 0; i < result.numChannels; ++i) { auto& speaker = result.speakers[i]; - zeromem (&speaker, sizeof (VstIndividualSpeakerInfo)); + zeromem (&speaker, sizeof (Vst2::VstSpeakerProperties)); speaker.type = getSpeakerType (channels.getTypeOfChannel (i)); } } @@ -948,36 +995,36 @@ public: { static const Mapping mappings[] = { - { vstSpeakerConfigTypeMono, { centre, unknown } }, - { vstSpeakerConfigTypeLR, { left, right, unknown } }, - { vstSpeakerConfigTypeLsRs, { leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLcRc, { leftCentre, rightCentre, unknown } }, - { vstSpeakerConfigTypeSlSr, { leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeCLfe, { centre, LFE, unknown } }, - { vstSpeakerConfigTypeLRC, { left, right, centre, unknown } }, - { vstSpeakerConfigTypeLRS, { left, right, surround, unknown } }, - { vstSpeakerConfigTypeLRCLfe, { left, right, centre, LFE, unknown } }, - { vstSpeakerConfigTypeLRLfeS, { left, right, LFE, surround, unknown } }, - { vstSpeakerConfigTypeLRCS, { left, right, centre, surround, unknown } }, - { vstSpeakerConfigTypeLRLsRs, { left, right, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeS, { left, right, centre, LFE, surround, unknown } }, - { vstSpeakerConfigTypeLRLfeLsRs, { left, right, LFE, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLsRs, { left, right, centre, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRs, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, - { vstSpeakerConfigTypeLRCLsRsCs, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, - { vstSpeakerConfigTypeLRLsRsSlSr, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsCs, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, - { vstSpeakerConfigTypeLRLfeLsRsSlSr, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLsRsLcRc, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, - { vstSpeakerConfigTypeLRCLsRsSlSr, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsLcRc, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLsRsLcRcCs, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, - { vstSpeakerConfigTypeLRCLsRsCsSlSr, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, - { vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, - { vstSpeakerConfigTypeEmpty, { unknown } } + { Vst2::kSpeakerArrMono, { centre, unknown } }, + { Vst2::kSpeakerArrStereo, { left, right, unknown } }, + { Vst2::kSpeakerArrStereoSurround, { leftSurround, rightSurround, unknown } }, + { Vst2::kSpeakerArrStereoCenter, { leftCentre, rightCentre, unknown } }, + { Vst2::kSpeakerArrStereoSide, { leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArrStereoCLfe, { centre, LFE, unknown } }, + { Vst2::kSpeakerArr30Cine, { left, right, centre, unknown } }, + { Vst2::kSpeakerArr30Music, { left, right, surround, unknown } }, + { Vst2::kSpeakerArr31Cine, { left, right, centre, LFE, unknown } }, + { Vst2::kSpeakerArr31Music, { left, right, LFE, surround, unknown } }, + { Vst2::kSpeakerArr40Cine, { left, right, centre, surround, unknown } }, + { Vst2::kSpeakerArr40Music, { left, right, leftSurround, rightSurround, unknown } }, + { Vst2::kSpeakerArr41Cine, { left, right, centre, LFE, surround, unknown } }, + { Vst2::kSpeakerArr41Music, { left, right, LFE, leftSurround, rightSurround, unknown } }, + { Vst2::kSpeakerArr50, { left, right, centre, leftSurround, rightSurround, unknown } }, + { Vst2::kSpeakerArr51, { left, right, centre, LFE, leftSurround, rightSurround, unknown } }, + { Vst2::kSpeakerArr60Cine, { left, right, centre, leftSurround, rightSurround, surround, unknown } }, + { Vst2::kSpeakerArr60Music, { left, right, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr61Cine, { left, right, centre, LFE, leftSurround, rightSurround, surround, unknown } }, + { Vst2::kSpeakerArr61Music, { left, right, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr70Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, + { Vst2::kSpeakerArr70Music, { left, right, centre, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr71Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, unknown } }, + { Vst2::kSpeakerArr71Music, { left, right, centre, LFE, leftSurround, rightSurround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr80Cine, { left, right, centre, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, + { Vst2::kSpeakerArr80Music, { left, right, centre, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr81Cine, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontRight, surround, unknown } }, + { Vst2::kSpeakerArr81Music, { left, right, centre, LFE, leftSurround, rightSurround, surround, leftSurroundRear, rightSurroundRear, unknown } }, + { Vst2::kSpeakerArr102, { left, right, centre, LFE, leftSurround, rightSurround, topFrontLeft, topFrontCentre, topFrontRight, topRearLeft, topRearRight, LFE2, unknown } }, + { Vst2::kSpeakerArrEmpty, { unknown } } }; return mappings; @@ -987,25 +1034,25 @@ public: { switch (type) { - case AudioChannelSet::left: return vstIndividualSpeakerTypeLeft; - case AudioChannelSet::right: return vstIndividualSpeakerTypeRight; - case AudioChannelSet::centre: return vstIndividualSpeakerTypeCentre; - case AudioChannelSet::LFE: return vstIndividualSpeakerTypeLFE; - case AudioChannelSet::leftSurround: return vstIndividualSpeakerTypeLeftSurround; - case AudioChannelSet::rightSurround: return vstIndividualSpeakerTypeRightSurround; - case AudioChannelSet::leftCentre: return vstIndividualSpeakerTypeLeftCentre; - case AudioChannelSet::rightCentre: return vstIndividualSpeakerTypeRightCentre; - case AudioChannelSet::surround: return vstIndividualSpeakerTypeSurround; - case AudioChannelSet::leftSurroundRear: return vstIndividualSpeakerTypeLeftRearSurround; - case AudioChannelSet::rightSurroundRear: return vstIndividualSpeakerTypeRightRearSurround; - case AudioChannelSet::topMiddle: return vstIndividualSpeakerTypeTopMiddle; - case AudioChannelSet::topFrontLeft: return vstIndividualSpeakerTypeTopFrontLeft; - case AudioChannelSet::topFrontCentre: return vstIndividualSpeakerTypeTopFrontCentre; - case AudioChannelSet::topFrontRight: return vstIndividualSpeakerTypeTopFrontRight; - case AudioChannelSet::topRearLeft: return vstIndividualSpeakerTypeTopRearLeft; - case AudioChannelSet::topRearCentre: return vstIndividualSpeakerTypeTopRearCentre; - case AudioChannelSet::topRearRight: return vstIndividualSpeakerTypeTopRearRight; - case AudioChannelSet::LFE2: return vstIndividualSpeakerTypeLFE2; + case AudioChannelSet::left: return Vst2::kSpeakerL; + case AudioChannelSet::right: return Vst2::kSpeakerR; + case AudioChannelSet::centre: return Vst2::kSpeakerC; + case AudioChannelSet::LFE: return Vst2::kSpeakerLfe; + case AudioChannelSet::leftSurround: return Vst2::kSpeakerLs; + case AudioChannelSet::rightSurround: return Vst2::kSpeakerRs; + case AudioChannelSet::leftCentre: return Vst2::kSpeakerLc; + case AudioChannelSet::rightCentre: return Vst2::kSpeakerRc; + case AudioChannelSet::surround: return Vst2::kSpeakerS; + case AudioChannelSet::leftSurroundRear: return Vst2::kSpeakerSl; + case AudioChannelSet::rightSurroundRear: return Vst2::kSpeakerSr; + case AudioChannelSet::topMiddle: return Vst2::kSpeakerTm; + case AudioChannelSet::topFrontLeft: return Vst2::kSpeakerTfl; + case AudioChannelSet::topFrontCentre: return Vst2::kSpeakerTfc; + case AudioChannelSet::topFrontRight: return Vst2::kSpeakerTfr; + case AudioChannelSet::topRearLeft: return Vst2::kSpeakerTrl; + case AudioChannelSet::topRearCentre: return Vst2::kSpeakerTrc; + case AudioChannelSet::topRearRight: return Vst2::kSpeakerTrr; + case AudioChannelSet::LFE2: return Vst2::kSpeakerLfe2; default: break; } @@ -1016,25 +1063,25 @@ public: { switch (type) { - case vstIndividualSpeakerTypeLeft: return AudioChannelSet::left; - case vstIndividualSpeakerTypeRight: return AudioChannelSet::right; - case vstIndividualSpeakerTypeCentre: return AudioChannelSet::centre; - case vstIndividualSpeakerTypeLFE: return AudioChannelSet::LFE; - case vstIndividualSpeakerTypeLeftSurround: return AudioChannelSet::leftSurround; - case vstIndividualSpeakerTypeRightSurround: return AudioChannelSet::rightSurround; - case vstIndividualSpeakerTypeLeftCentre: return AudioChannelSet::leftCentre; - case vstIndividualSpeakerTypeRightCentre: return AudioChannelSet::rightCentre; - case vstIndividualSpeakerTypeSurround: return AudioChannelSet::surround; - case vstIndividualSpeakerTypeLeftRearSurround: return AudioChannelSet::leftSurroundRear; - case vstIndividualSpeakerTypeRightRearSurround: return AudioChannelSet::rightSurroundRear; - case vstIndividualSpeakerTypeTopMiddle: return AudioChannelSet::topMiddle; - case vstIndividualSpeakerTypeTopFrontLeft: return AudioChannelSet::topFrontLeft; - case vstIndividualSpeakerTypeTopFrontCentre: return AudioChannelSet::topFrontCentre; - case vstIndividualSpeakerTypeTopFrontRight: return AudioChannelSet::topFrontRight; - case vstIndividualSpeakerTypeTopRearLeft: return AudioChannelSet::topRearLeft; - case vstIndividualSpeakerTypeTopRearCentre: return AudioChannelSet::topRearCentre; - case vstIndividualSpeakerTypeTopRearRight: return AudioChannelSet::topRearRight; - case vstIndividualSpeakerTypeLFE2: return AudioChannelSet::LFE2; + case Vst2::kSpeakerL: return AudioChannelSet::left; + case Vst2::kSpeakerR: return AudioChannelSet::right; + case Vst2::kSpeakerC: return AudioChannelSet::centre; + case Vst2::kSpeakerLfe: return AudioChannelSet::LFE; + case Vst2::kSpeakerLs: return AudioChannelSet::leftSurround; + case Vst2::kSpeakerRs: return AudioChannelSet::rightSurround; + case Vst2::kSpeakerLc: return AudioChannelSet::leftCentre; + case Vst2::kSpeakerRc: return AudioChannelSet::rightCentre; + case Vst2::kSpeakerS: return AudioChannelSet::surround; + case Vst2::kSpeakerSl: return AudioChannelSet::leftSurroundRear; + case Vst2::kSpeakerSr: return AudioChannelSet::rightSurroundRear; + case Vst2::kSpeakerTm: return AudioChannelSet::topMiddle; + case Vst2::kSpeakerTfl: return AudioChannelSet::topFrontLeft; + case Vst2::kSpeakerTfc: return AudioChannelSet::topFrontCentre; + case Vst2::kSpeakerTfr: return AudioChannelSet::topFrontRight; + case Vst2::kSpeakerTrl: return AudioChannelSet::topRearLeft; + case Vst2::kSpeakerTrc: return AudioChannelSet::topRearCentre; + case Vst2::kSpeakerTrr: return AudioChannelSet::topRearRight; + case Vst2::kSpeakerLfe2: return AudioChannelSet::LFE2; default: break; } @@ -1071,16 +1118,12 @@ public: { if (auto* ed = processor->createEditorIfNeeded()) { - vstEffect.flags |= vstEffectFlagHasEditor; + vstEffect.flags |= Vst2::effFlagsHasEditor; editorComp.reset (new EditorCompWrapper (*this, *ed)); - - #if ! (JUCE_MAC || JUCE_IOS) - ed->setScaleFactor (editorScaleFactor); - #endif } else { - vstEffect.flags &= ~vstEffectFlagHasEditor; + vstEffect.flags &= ~Vst2::effFlagsHasEditor; } } @@ -1130,59 +1173,59 @@ public: switch (opCode) { - case plugInOpcodeOpen: return handleOpen (args); - case plugInOpcodeClose: return handleClose (args); - case plugInOpcodeSetCurrentProgram: return handleSetCurrentProgram (args); - case plugInOpcodeGetCurrentProgram: return handleGetCurrentProgram (args); - case plugInOpcodeSetCurrentProgramName: return handleSetCurrentProgramName (args); - case plugInOpcodeGetCurrentProgramName: return handleGetCurrentProgramName (args); - case plugInOpcodeGetParameterLabel: return handleGetParameterLabel (args); - case plugInOpcodeGetParameterText: return handleGetParameterText (args); - case plugInOpcodeGetParameterName: return handleGetParameterName (args); - case plugInOpcodeSetSampleRate: return handleSetSampleRate (args); - case plugInOpcodeSetBlockSize: return handleSetBlockSize (args); - case plugInOpcodeResumeSuspend: return handleResumeSuspend (args); - case plugInOpcodeGetEditorBounds: return handleGetEditorBounds (args); - case plugInOpcodeOpenEditor: return handleOpenEditor (args); - case plugInOpcodeCloseEditor: return handleCloseEditor (args); - case plugInOpcodeIdentify: return (pointer_sized_int) ByteOrder::bigEndianInt ("NvEf"); - case plugInOpcodeGetData: return handleGetData (args); - case plugInOpcodeSetData: return handleSetData (args); - case plugInOpcodePreAudioProcessingEvents: return handlePreAudioProcessingEvents (args); - case plugInOpcodeIsParameterAutomatable: return handleIsParameterAutomatable (args); - case plugInOpcodeParameterValueForText: return handleParameterValueForText (args); - case plugInOpcodeGetProgramName: return handleGetProgramName (args); - case plugInOpcodeGetInputPinProperties: return handleGetInputPinProperties (args); - case plugInOpcodeGetOutputPinProperties: return handleGetOutputPinProperties (args); - case plugInOpcodeGetPlugInCategory: return handleGetPlugInCategory (args); - case plugInOpcodeSetSpeakerConfiguration: return handleSetSpeakerConfiguration (args); - case plugInOpcodeSetBypass: return handleSetBypass (args); - case plugInOpcodeGetPlugInName: return handleGetPlugInName (args); - case plugInOpcodeGetManufacturerProductName: return handleGetPlugInName (args); - case plugInOpcodeGetManufacturerName: return handleGetManufacturerName (args); - case plugInOpcodeGetManufacturerVersion: return handleGetManufacturerVersion (args); - case plugInOpcodeManufacturerSpecific: return handleManufacturerSpecific (args); - case plugInOpcodeCanPlugInDo: return handleCanPlugInDo (args); - case plugInOpcodeGetTailSize: return handleGetTailSize (args); - case plugInOpcodeKeyboardFocusRequired: return handleKeyboardFocusRequired (args); - case plugInOpcodeGetVstInterfaceVersion: return handleGetVstInterfaceVersion (args); - case plugInOpcodeGetCurrentMidiProgram: return handleGetCurrentMidiProgram (args); - case plugInOpcodeGetSpeakerArrangement: return handleGetSpeakerConfiguration (args); - case plugInOpcodeSetNumberOfSamplesToProcess: return handleSetNumberOfSamplesToProcess (args); - case plugInOpcodeSetSampleFloatType: return handleSetSampleFloatType (args); - case pluginOpcodeGetNumMidiInputChannels: return handleGetNumMidiInputChannels(); - case pluginOpcodeGetNumMidiOutputChannels: return handleGetNumMidiOutputChannels(); - default: return 0; - } - } - - static pointer_sized_int dispatcherCB (VstEffectInterface* vstInterface, int32 opCode, int32 index, + case Vst2::effOpen: return handleOpen (args); + case Vst2::effClose: return handleClose (args); + case Vst2::effSetProgram: return handleSetCurrentProgram (args); + case Vst2::effGetProgram: return handleGetCurrentProgram (args); + case Vst2::effSetProgramName: return handleSetCurrentProgramName (args); + case Vst2::effGetProgramName: return handleGetCurrentProgramName (args); + case Vst2::effGetParamLabel: return handleGetParameterLabel (args); + case Vst2::effGetParamDisplay: return handleGetParameterText (args); + case Vst2::effGetParamName: return handleGetParameterName (args); + case Vst2::effSetSampleRate: return handleSetSampleRate (args); + case Vst2::effSetBlockSize: return handleSetBlockSize (args); + case Vst2::effMainsChanged: return handleResumeSuspend (args); + case Vst2::effEditGetRect: return handleGetEditorBounds (args); + case Vst2::effEditOpen: return handleOpenEditor (args); + case Vst2::effEditClose: return handleCloseEditor (args); + case Vst2::effIdentify: return (pointer_sized_int) ByteOrder::bigEndianInt ("NvEf"); + case Vst2::effGetChunk: return handleGetData (args); + case Vst2::effSetChunk: return handleSetData (args); + case Vst2::effProcessEvents: return handlePreAudioProcessingEvents (args); + case Vst2::effCanBeAutomated: return handleIsParameterAutomatable (args); + case Vst2::effString2Parameter: return handleParameterValueForText (args); + case Vst2::effGetProgramNameIndexed: return handleGetProgramName (args); + case Vst2::effGetInputProperties: return handleGetInputPinProperties (args); + case Vst2::effGetOutputProperties: return handleGetOutputPinProperties (args); + case Vst2::effGetPlugCategory: return handleGetPlugInCategory (args); + case Vst2::effSetSpeakerArrangement: return handleSetSpeakerConfiguration (args); + case Vst2::effSetBypass: return handleSetBypass (args); + case Vst2::effGetEffectName: return handleGetPlugInName (args); + case Vst2::effGetProductString: return handleGetPlugInName (args); + case Vst2::effGetVendorString: return handleGetManufacturerName (args); + case Vst2::effGetVendorVersion: return handleGetManufacturerVersion (args); + case Vst2::effVendorSpecific: return handleManufacturerSpecific (args); + case Vst2::effCanDo: return handleCanPlugInDo (args); + case Vst2::effGetTailSize: return handleGetTailSize (args); + case Vst2::effKeysRequired: return handleKeyboardFocusRequired (args); + case Vst2::effGetVstVersion: return handleGetVstInterfaceVersion (args); + case Vst2::effGetCurrentMidiProgram: return handleGetCurrentMidiProgram (args); + case Vst2::effGetSpeakerArrangement: return handleGetSpeakerConfiguration (args); + case Vst2::effSetTotalSampleToProcess: return handleSetNumberOfSamplesToProcess (args); + case Vst2::effSetProcessPrecision: return handleSetSampleFloatType (args); + case Vst2::effGetNumMidiInputChannels: return handleGetNumMidiInputChannels(); + case Vst2::effGetNumMidiOutputChannels: return handleGetNumMidiOutputChannels(); + default: return 0; + } + } + + static pointer_sized_int dispatcherCB (Vst2::AEffect* vstInterface, int32 opCode, int32 index, pointer_sized_int value, void* ptr, float opt) { auto* wrapper = getWrapper (vstInterface); VstOpCodeArguments args = { index, value, ptr, opt }; - if (opCode == plugInOpcodeClose) + if (opCode == Vst2::effClose) { wrapper->dispatcher (opCode, args); delete wrapper; @@ -1197,7 +1240,8 @@ public: // chores when it changes or repaints. struct EditorCompWrapper : public Component { - EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor) : wrapper (w) + EditorCompWrapper (JuceVSTWrapper& w, AudioProcessorEditor& editor) + : wrapper (w) { editor.setOpaque (true); editor.setVisible (true); @@ -1226,14 +1270,19 @@ public: void paint (Graphics&) override {} - void getEditorBounds (VstEditorBounds& bounds) + void getEditorBounds (Vst2::ERect& bounds) { auto b = getSizeToContainChild(); - bounds.upper = 0; - bounds.leftmost = 0; - bounds.lower = (int16) b.getHeight(); - bounds.rightmost = (int16) b.getWidth(); + bounds.top = 0; + bounds.left = 0; + bounds.bottom = (int16) b.getHeight(); + bounds.right = (int16) b.getWidth(); + + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + bounds.bottom = (int16) roundToInt (bounds.bottom * wrapper.editorScaleFactor); + bounds.right = (int16) roundToInt (bounds.right * wrapper.editorScaleFactor); + #endif } void attachToHost (VstOpCodeArguments args) @@ -1244,6 +1293,14 @@ public: #if JUCE_WINDOWS addToDesktop (0, args.ptr); hostWindow = (HWND) args.ptr; + + if (auto* ed = getEditorComp()) + #if JUCE_WIN_PER_MONITOR_DPI_AWARE + if (auto* peer = ed->getPeer()) + wrapper.editorScaleFactor = (float) peer->getPlatformScaleFactor(); + #else + ed->setScaleFactor (wrapper.editorScaleFactor); + #endif #elif JUCE_LINUX addToDesktop (0, args.ptr); hostWindow = (Window) args.ptr; @@ -1283,17 +1340,33 @@ public: return dynamic_cast (getChildComponent(0)); } + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + void checkScaleFactorIsCorrect() + { + if (auto* peer = getEditorComp()->getPeer()) + { + auto peerScaleFactor = (float) peer->getPlatformScaleFactor(); + + if (! approximatelyEqual (peerScaleFactor, wrapper.editorScaleFactor)) + wrapper.handleSetContentScaleFactor (peerScaleFactor); + } + } + #endif + void resized() override { if (auto* ed = getEditorComp()) { + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + checkScaleFactorIsCorrect(); + #endif + ed->setTopLeftPosition (0, 0); if (shouldResizeEditor) ed->setBounds (ed->getLocalArea (this, getLocalBounds())); - if (! getHostType().isBitwigStudio()) - updateWindowSize (false); + updateWindowSize (false); } #if JUCE_MAC && ! JUCE_64BIT @@ -1340,7 +1413,9 @@ public: shouldResizeEditor = true; #else ignoreUnused (resizeEditor); - XResizeWindow (display.display, (Window) getWindowHandle(), pos.getWidth(), pos.getHeight()); + XResizeWindow (display.display, (Window) getWindowHandle(), + static_cast (roundToInt (pos.getWidth() * wrapper.editorScaleFactor)), + static_cast (roundToInt (pos.getHeight() * wrapper.editorScaleFactor))); #endif #if JUCE_MAC @@ -1356,13 +1431,19 @@ public: if (auto host = wrapper.hostCallback) { - auto status = host (wrapper.getVstEffectInterface(), hostOpcodeCanHostDo, 0, 0, const_cast ("sizeWindow"), 0); + auto status = host (wrapper.getAEffect(), Vst2::audioMasterCanDo, 0, 0, const_cast ("sizeWindow"), 0); if (status == (pointer_sized_int) 1 || getHostType().isAbletonLive()) { - isInSizeWindow = true; - sizeWasSuccessful = (host (wrapper.getVstEffectInterface(), hostOpcodeWindowSize, newWidth, newHeight, 0, 0) != 0); - isInSizeWindow = false; + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + newWidth = roundToInt (newWidth * wrapper.editorScaleFactor); + newHeight = roundToInt (newHeight * wrapper.editorScaleFactor); + #endif + + const ScopedValueSetter inSizeWindowSetter (isInSizeWindow, true); + + sizeWasSuccessful = (host (wrapper.getAEffect(), Vst2::audioMasterSizeWindow, + newWidth, newHeight, 0, 0) != 0); } } @@ -1474,44 +1555,12 @@ public: //============================================================================== private: - VstHostCallback hostCallback; - AudioProcessor* processor = {}; - double sampleRate = 44100.0; - int32 blockSize = 1024; - VstEffectInterface vstEffect; - juce::MemoryBlock chunkMemory; - juce::uint32 chunkMemoryTime = 0; - std::unique_ptr editorComp; - VstEditorBounds editorBounds; - MidiBuffer midiEvents; - VSTMidiEventList outgoingEvents; - float editorScaleFactor = 1.0f; - - LegacyAudioParametersWrapper juceParameters; - - bool isProcessing = false, isBypassed = false, hasShutdown = false; - bool firstProcessCallback = true, shouldDeleteEditor = false; - - #if JUCE_64BIT - bool useNSView = true; - #else - bool useNSView = false; - #endif - - VstTempBuffers floatTempBuffers; - VstTempBuffers doubleTempBuffers; - int maxNumInChannels = 0, maxNumOutChannels = 0; - - HeapBlock cachedInArrangement, cachedOutArrangement; - - ThreadLocalValue inParameterChangedCallback; - - static JuceVSTWrapper* getWrapper (VstEffectInterface* v) noexcept { return static_cast (v->effectPointer); } + static JuceVSTWrapper* getWrapper (Vst2::AEffect* v) noexcept { return static_cast (v->object); } bool isProcessLevelOffline() { return hostCallback != nullptr - && (int32) hostCallback (&vstEffect, hostOpcodeGetCurrentAudioProcessingLevel, 0, 0, 0, 0) == 4; + && (int32) hostCallback (&vstEffect, Vst2::audioMasterGetCurrentProcessLevel, 0, 0, 0, 0) == 4; } static inline int32 convertHexVersionToDecimal (const unsigned int hexVersion) @@ -1579,8 +1628,8 @@ private: tmpBuffers.release(); if (processor != nullptr) - tmpBuffers.tempChannels.insertMultiple (0, nullptr, vstEffect.numInputChannels - + vstEffect.numOutputChannels); + tmpBuffers.tempChannels.insertMultiple (0, nullptr, vstEffect.numInputs + + vstEffect.numOutputs); } void deleteTempChannels() @@ -1632,9 +1681,9 @@ private: { // Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here. if (processor->hasEditor()) - vstEffect.flags |= vstEffectFlagHasEditor; + vstEffect.flags |= Vst2::effFlagsHasEditor; else - vstEffect.flags &= ~vstEffectFlagHasEditor; + vstEffect.flags &= ~Vst2::effFlagsHasEditor; return 0; } @@ -1743,7 +1792,7 @@ private: if (editorComp != nullptr) { editorComp->getEditorBounds (editorBounds); - *((VstEditorBounds**) args.ptr) = &editorBounds; + *((Vst2::ERect**) args.ptr) = &editorBounds; return (pointer_sized_int) &editorBounds; } @@ -1827,7 +1876,7 @@ private: pointer_sized_int handlePreAudioProcessingEvents (VstOpCodeArguments args) { #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect - VSTMidiEventList::addEventsToMidiBuffer ((VstEventBlock*) args.ptr, midiEvents); + VSTMidiEventList::addEventsToMidiBuffer ((Vst2::VstEvents*) args.ptr, midiEvents); return 1; #else ignoreUnused (args); @@ -1878,23 +1927,23 @@ private: pointer_sized_int handleGetInputPinProperties (VstOpCodeArguments args) { - return (processor != nullptr && getPinProperties (*(VstPinInfo*) args.ptr, true, args.index)) ? 1 : 0; + return (processor != nullptr && getPinProperties (*(Vst2::VstPinProperties*) args.ptr, true, args.index)) ? 1 : 0; } pointer_sized_int handleGetOutputPinProperties (VstOpCodeArguments args) { - return (processor != nullptr && getPinProperties (*(VstPinInfo*) args.ptr, false, args.index)) ? 1 : 0; + return (processor != nullptr && getPinProperties (*(Vst2::VstPinProperties*) args.ptr, false, args.index)) ? 1 : 0; } pointer_sized_int handleGetPlugInCategory (VstOpCodeArguments) { - return JucePlugin_VSTCategory; + return Vst2::JucePlugin_VSTCategory; } pointer_sized_int handleSetSpeakerConfiguration (VstOpCodeArguments args) { - auto* pluginInput = reinterpret_cast (args.value); - auto* pluginOutput = reinterpret_cast (args.ptr); + auto* pluginInput = reinterpret_cast (args.value); + auto* pluginOutput = reinterpret_cast (args.ptr); if (processor->isMidiEffect()) return 0; @@ -1905,29 +1954,29 @@ private: if (pluginInput != nullptr && pluginInput->type >= 0) { // inconsistent request? - if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numberOfChannels) + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numChannels) return 0; } if (pluginOutput != nullptr && pluginOutput->type >= 0) { // inconsistent request? - if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numberOfChannels) + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numChannels) return 0; } - if (pluginInput != nullptr && pluginInput->numberOfChannels > 0 && numIns == 0) + if (pluginInput != nullptr && pluginInput->numChannels > 0 && numIns == 0) return 0; - if (pluginOutput != nullptr && pluginOutput->numberOfChannels > 0 && numOuts == 0) + if (pluginOutput != nullptr && pluginOutput->numChannels > 0 && numOuts == 0) return 0; auto layouts = processor->getBusesLayout(); - if (pluginInput != nullptr && pluginInput-> numberOfChannels >= 0 && numIns > 0) + if (pluginInput != nullptr && pluginInput-> numChannels >= 0 && numIns > 0) layouts.getChannelSet (true, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput); - if (pluginOutput != nullptr && pluginOutput->numberOfChannels >= 0 && numOuts > 0) + if (pluginOutput != nullptr && pluginOutput->numChannels >= 0 && numOuts > 0) layouts.getChannelSet (false, 0) = SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput); #ifdef JucePlugin_PreferredChannelConfigurations @@ -1971,10 +2020,11 @@ private: if (handleManufacturerSpecificVST2Opcode (args.index, args.value, args.ptr, args.opt)) return 1; - if (args.index == presonusVendorID && args.value == presonusSetContentScaleFactor) + if (args.index == JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S') + && args.value == JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's')) return handleSetContentScaleFactor (args.opt); - if (args.index == plugInOpcodeGetParameterText) + if (args.index == Vst2::effGetParamDisplay) return handleCockosGetParameterText (args.value, args.ptr, args.opt); if (auto callbackHandler = dynamic_cast (processor)) @@ -1989,8 +2039,8 @@ private: auto matches = [=](const char* s) { return strcmp (text, s) == 0; }; if (matches ("receiveVstEvents") - || matches ("receiveVstMidiEvent") - || matches ("receiveVstMidiEvents")) + || matches ("receiveVstMidiEvent") + || matches ("receiveVstMidiEvents")) { #if JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect return 1; @@ -2000,8 +2050,8 @@ private: } if (matches ("sendVstEvents") - || matches ("sendVstMidiEvent") - || matches ("sendVstMidiEvents")) + || matches ("sendVstMidiEvent") + || matches ("sendVstMidiEvents")) { #if JucePlugin_ProducesMidiOutput || JucePlugin_IsMidiEffect return 1; @@ -2011,9 +2061,9 @@ private: } if (matches ("receiveVstTimeInfo") - || matches ("conformsToWindowRules") - || matches ("supportsViewDpiScaling") - || matches ("bypass")) + || matches ("conformsToWindowRules") + || matches ("supportsViewDpiScaling") + || matches ("bypass")) { return 1; } @@ -2046,7 +2096,18 @@ private: pointer_sized_int handleGetTailSize (VstOpCodeArguments) { if (processor != nullptr) - return (pointer_sized_int) (processor->getTailLengthSeconds() * sampleRate); + { + int32 result; + + auto tailSeconds = processor->getTailLengthSeconds(); + + if (tailSeconds == std::numeric_limits::infinity()) + result = std::numeric_limits::max(); + else + result = static_cast (tailSeconds * sampleRate); + + return result; // Vst2 expects an int32 upcasted to a intptr_t here + } return 0; } @@ -2058,7 +2119,7 @@ private: pointer_sized_int handleGetVstInterfaceVersion (VstOpCodeArguments) { - return juceVstInterfaceVersion; + return kVstVersion; } pointer_sized_int handleGetCurrentMidiProgram (VstOpCodeArguments) @@ -2068,8 +2129,8 @@ private: pointer_sized_int handleGetSpeakerConfiguration (VstOpCodeArguments args) { - auto** pluginInput = reinterpret_cast (args.value); - auto** pluginOutput = reinterpret_cast (args.ptr); + auto** pluginInput = reinterpret_cast (args.value); + auto** pluginOutput = reinterpret_cast (args.ptr); if (pluginHasSidechainsOrAuxs() || processor->isMidiEffect()) return false; @@ -2077,10 +2138,10 @@ private: auto inputLayout = processor->getChannelLayoutOfBus (true, 0); auto outputLayout = processor->getChannelLayoutOfBus (false, 0); - auto speakerBaseSize = sizeof (VstSpeakerConfiguration) - (sizeof (VstIndividualSpeakerInfo) * 8); + auto speakerBaseSize = sizeof (Vst2::VstSpeakerArrangement) - (sizeof (Vst2::VstSpeakerProperties) * 8); - cachedInArrangement .malloc (speakerBaseSize + (static_cast (inputLayout. size()) * sizeof (VstSpeakerConfiguration)), 1); - cachedOutArrangement.malloc (speakerBaseSize + (static_cast (outputLayout.size()) * sizeof (VstSpeakerConfiguration)), 1); + cachedInArrangement .malloc (speakerBaseSize + (static_cast (inputLayout. size()) * sizeof (Vst2::VstSpeakerArrangement)), 1); + cachedOutArrangement.malloc (speakerBaseSize + (static_cast (outputLayout.size()) * sizeof (Vst2::VstSpeakerArrangement)), 1); *pluginInput = cachedInArrangement. getData(); *pluginOutput = cachedOutArrangement.getData(); @@ -2102,7 +2163,7 @@ private: { if (processor != nullptr) { - processor->setProcessingPrecision ((args.value == vstProcessingSampleTypeDouble + processor->setProcessingPrecision ((args.value == Vst2::kVstProcessPrecision64 && processor->supportsDoublePrecisionProcessing()) ? AudioProcessor::doublePrecision : AudioProcessor::singlePrecision); @@ -2116,21 +2177,22 @@ private: pointer_sized_int handleSetContentScaleFactor (float scale) { - if (editorScaleFactor != scale) + #if ! JUCE_MAC + if (! approximatelyEqual (scale, editorScaleFactor)) { editorScaleFactor = scale; - #if ! (JUCE_MAC || JUCE_IOS) if (editorComp != nullptr) - { + #if JUCE_WINDOWS && ! JUCE_WIN_PER_MONITOR_DPI_AWARE if (auto* ed = editorComp->getEditorComp()) - ed->setScaleFactor (editorScaleFactor); - - if (editorComp != nullptr) - editorComp->updateWindowSize (true); - } - #endif + ed->setScaleFactor (scale); + #else + editorComp->updateWindowSize (true); + #endif } + #else + ignoreUnused (scale); + #endif return 1; } @@ -2174,6 +2236,42 @@ private: #endif } + //============================================================================== + Vst2::audioMasterCallback hostCallback; + AudioProcessor* processor = {}; + double sampleRate = 44100.0; + int32 blockSize = 1024; + Vst2::AEffect vstEffect; + juce::MemoryBlock chunkMemory; + juce::uint32 chunkMemoryTime = 0; + std::unique_ptr editorComp; + Vst2::ERect editorBounds; + MidiBuffer midiEvents; + VSTMidiEventList outgoingEvents; + + #if ! JUCE_MAC + float editorScaleFactor = 1.0f; + #endif + + LegacyAudioParametersWrapper juceParameters; + + bool isProcessing = false, isBypassed = false, hasShutdown = false; + bool firstProcessCallback = true, shouldDeleteEditor = false; + + #if JUCE_64BIT + bool useNSView = true; + #else + bool useNSView = false; + #endif + + VstTempBuffers floatTempBuffers; + VstTempBuffers doubleTempBuffers; + int maxNumInChannels = 0, maxNumOutChannels = 0; + + HeapBlock cachedInArrangement, cachedOutArrangement; + + ThreadLocalValue inParameterChangedCallback; + //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVSTWrapper) }; @@ -2182,7 +2280,7 @@ private: //============================================================================== namespace { - VstEffectInterface* pluginEntryPoint (VstHostCallback audioMaster) + Vst2::AEffect* pluginEntryPoint (Vst2::audioMasterCallback audioMaster) { JUCE_AUTORELEASEPOOL { @@ -2190,7 +2288,7 @@ namespace try { - if (audioMaster (0, hostOpcodeVstVersion, 0, 0, 0, 0) != 0) + if (audioMaster (0, Vst2::audioMasterVersion, 0, 0, 0, 0) != 0) { #if JUCE_LINUX MessageManagerLock mmLock; @@ -2198,7 +2296,17 @@ namespace auto* processor = createPluginFilterOfType (AudioProcessor::wrapperType_VST); auto* wrapper = new JuceVSTWrapper (audioMaster, processor); - return wrapper->getVstEffectInterface(); + auto* aEffect = wrapper->getAEffect(); + + if (auto* callbackHandler = dynamic_cast (processor)) + { + callbackHandler->handleVstHostCallbackAvailable ([audioMaster, aEffect](int32 opcode, int32 index, pointer_sized_int value, void* ptr, float opt) + { + return audioMaster (aEffect, opcode, index, value, ptr, opt); + }); + } + + return aEffect; } } catch (...) @@ -2217,8 +2325,8 @@ namespace // Mac startup code.. #if JUCE_MAC - JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster); - JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster) + JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); + JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; @@ -2226,8 +2334,8 @@ namespace return pluginEntryPoint (audioMaster); } - JUCE_EXPORTED_FUNCTION VstEffectInterface* main_macho (VstHostCallback audioMaster); - JUCE_EXPORTED_FUNCTION VstEffectInterface* main_macho (VstHostCallback audioMaster) + JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster); + JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_macho (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; @@ -2239,8 +2347,8 @@ namespace // Linux startup code.. #elif JUCE_LINUX - JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster); - JUCE_EXPORTED_FUNCTION VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster) + JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster); + JUCE_EXPORTED_FUNCTION Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; @@ -2248,8 +2356,8 @@ namespace return pluginEntryPoint (audioMaster); } - JUCE_EXPORTED_FUNCTION VstEffectInterface* main_plugin (VstHostCallback audioMaster) asm ("main"); - JUCE_EXPORTED_FUNCTION VstEffectInterface* main_plugin (VstHostCallback audioMaster) + JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster) asm ("main"); + JUCE_EXPORTED_FUNCTION Vst2::AEffect* main_plugin (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; @@ -2264,7 +2372,7 @@ namespace // Win32 startup code.. #else - extern "C" __declspec (dllexport) VstEffectInterface* VSTPluginMain (VstHostCallback audioMaster) + extern "C" __declspec (dllexport) Vst2::AEffect* VSTPluginMain (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; @@ -2272,7 +2380,7 @@ namespace } #ifndef JUCE_64BIT // (can't compile this on win64, but it's not needed anyway with VST2.4) - extern "C" __declspec (dllexport) int main (VstHostCallback audioMaster) + extern "C" __declspec (dllexport) int main (Vst2::audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index a58c7e0a..5d9aa464 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -50,7 +50,10 @@ #endif #if JUCE_VST3_CAN_REPLACE_VST2 -#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" +namespace Vst2 +{ +#include "pluginterfaces/vst2.x/vstfxstore.h" +} #endif #ifndef JUCE_VST3_EMULATE_MIDI_CC_WITH_PARAMETERS @@ -83,7 +86,6 @@ using namespace Steinberg; extern JUCE_API void* attachComponentToWindowRefVST (Component*, void* parentWindowOrView, bool isNSView); extern JUCE_API void detachComponentFromWindowRefVST (Component*, void* nsWindow, bool isNSView); - extern JUCE_API void setNativeHostWindowSizeVST (void* window, Component*, int newWidth, int newHeight, bool isNSView); #endif //============================================================================== @@ -123,6 +125,11 @@ public: return getParamForVSTParamID (bypassParamID); } + static Vst::UnitID getUnitID (const AudioProcessorParameterGroup* group) + { + return group == nullptr ? Vst::kRootUnitId : group->getID().hashCode(); + } + int getNumParameters() const noexcept { return vstParamIDs.size(); } bool isUsingManagedParameters() const noexcept { return juceParameters.isUsingManagedParameters(); } @@ -327,10 +334,12 @@ public: struct Param : public Vst::Parameter { Param (JuceVST3EditController& editController, AudioProcessorParameter& p, - Vst::ParamID vstParamID, bool isBypassParameter, bool forceLegacyParamIDs) + Vst::ParamID vstParamID, Vst::UnitID vstUnitID, + bool isBypassParameter, bool forceLegacyParamIDs) : owner (editController), param (p) { info.id = vstParamID; + info.unitId = vstUnitID; toString128 (info.title, param.getName (128)); toString128 (info.shortTitle, param.getName (8)); @@ -346,7 +355,6 @@ public: info.defaultNormalizedValue = param.getDefaultValue(); jassert (info.defaultNormalizedValue >= 0 && info.defaultNormalizedValue <= 1.0f); - info.unitId = Vst::kRootUnitId; // Is this a meter? if (((param.getCategory() & 0xffff0000) >> 16) == 2) @@ -711,6 +719,7 @@ private: //============================================================================== Atomic vst3IsPlaying { 0 }; + float lastScaleFactorReceived = 1.0f; void setupParameters() { @@ -737,8 +746,10 @@ private: { auto vstParamID = audioProcessor->getVSTParamIDForIndex (i); auto* juceParam = audioProcessor->getParamForVSTParamID (vstParamID); + auto* parameterGroup = pluginInstance->parameterTree.getGroupsForParameter (juceParam).getLast(); + auto unitID = JuceAudioProcessor::getUnitID (parameterGroup); - parameters.addParameter (new Param (*this, *juceParam, vstParamID, + parameters.addParameter (new Param (*this, *juceParam, vstParamID, unitID, (vstParamID == audioProcessor->bypassParamID), forceLegacyParamIDs)); } @@ -797,6 +808,8 @@ private: : Vst::EditorView (&ec, nullptr), owner (&ec), pluginInstance (p) { + editorScaleFactor = ec.lastScaleFactorReceived; + component.reset (new ContentWrapperComponent (*this, p)); } @@ -841,6 +854,10 @@ private: macHostWindow = juce::attachComponentToWindowRefVST (component.get(), parent, isNSView); #endif + #if ! JUCE_MAC + setContentScaleFactor ((Steinberg::IPlugViewContentScaleSupport::ScaleFactor) editorScaleFactor); + #endif + component->resizeHostWindow(); systemWindow = parent; attachedToParent(); @@ -880,7 +897,15 @@ private: if (component != nullptr) { - component->setSize (rect.getWidth(), rect.getHeight()); + auto w = rect.getWidth(); + auto h = rect.getHeight(); + + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + w = roundToInt (w / editorScaleFactor); + h = roundToInt (h / editorScaleFactor); + #endif + + component->setSize (w, h); if (auto* peer = component->getPeer()) peer->updateBounds(); @@ -897,7 +922,16 @@ private: { if (size != nullptr && component != nullptr) { - *size = ViewRect (0, 0, component->getWidth(), component->getHeight()); + auto w = component->getWidth(); + auto h = component->getHeight(); + + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + w = roundToInt (w * editorScaleFactor); + h = roundToInt (h * editorScaleFactor); + #endif + + *size = ViewRect (0, 0, w, h); + return kResultTrue; } @@ -919,17 +953,36 @@ private: { if (auto* editor = component->pluginEditor.get()) { - // checkSizeConstraint - auto juceRect = editor->getLocalArea (component.get(), Rectangle::leftTopRightBottom (rectToCheck->left, rectToCheck->top, - rectToCheck->right, rectToCheck->bottom)); + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + auto juceRect = editor->getLocalArea (component.get(), + Rectangle::leftTopRightBottom (rectToCheck->left, rectToCheck->top, + rectToCheck->right, rectToCheck->bottom) / editorScaleFactor); + #else + auto juceRect = editor->getLocalArea (component.get(), + { rectToCheck->left, rectToCheck->top, rectToCheck->right, rectToCheck->bottom }); + #endif + if (auto* constrainer = editor->getConstrainer()) { Rectangle limits (0, 0, constrainer->getMaximumWidth(), constrainer->getMaximumHeight()); - constrainer->checkBounds (juceRect, editor->getBounds(), limits, false, false, false, false); + + auto currentRect = editor->getBounds(); + + constrainer->checkBounds (juceRect, currentRect, limits, + juceRect.getY() != currentRect.getY() && juceRect.getBottom() == currentRect.getBottom(), + juceRect.getX() != currentRect.getX() && juceRect.getRight() == currentRect.getRight(), + juceRect.getY() == currentRect.getY() && juceRect.getBottom() != currentRect.getBottom(), + juceRect.getX() == currentRect.getX() && juceRect.getRight() != currentRect.getRight()); juceRect = component->getLocalArea (editor, juceRect); - rectToCheck->right = rectToCheck->left + juceRect.getWidth(); - rectToCheck->bottom = rectToCheck->top + juceRect.getHeight(); + + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + rectToCheck->right = rectToCheck->left + roundToInt (juceRect.getWidth() * editorScaleFactor); + rectToCheck->bottom = rectToCheck->top + roundToInt (juceRect.getHeight() * editorScaleFactor); + #else + rectToCheck->right = rectToCheck->left + juceRect.getWidth(); + rectToCheck->bottom = rectToCheck->top + juceRect.getHeight(); + #endif } } @@ -942,17 +995,36 @@ private: tresult PLUGIN_API setContentScaleFactor (Steinberg::IPlugViewContentScaleSupport::ScaleFactor factor) override { - #if (JUCE_MAC || JUCE_IOS) - ignoreUnused (factor); - #else - if (auto* editor = component->pluginEditor.get()) + #if ! JUCE_MAC + if (! approximatelyEqual ((float) factor, editorScaleFactor)) { - editor->setScaleFactor (factor); - return kResultTrue; + editorScaleFactor = (float) factor; + + if (auto* o = owner.get()) + o->lastScaleFactorReceived = editorScaleFactor; + + if (component == nullptr) + return kResultFalse; + + #if JUCE_WINDOWS && ! JUCE_WIN_PER_MONITOR_DPI_AWARE + if (auto* ed = component->pluginEditor.get()) + ed->setScaleFactor ((float) factor); + #endif + + component->resizeHostWindow(); + + if (getHostType().isBitwigStudio()) + { + component->setTopLeftPosition (0, 0); + component->repaint(); + } } - #endif + return kResultTrue; + #else + ignoreUnused (factor); return kResultFalse; + #endif } private: @@ -969,8 +1041,8 @@ private: struct ContentWrapperComponent : public Component { ContentWrapperComponent (JuceVST3Editor& editor, AudioProcessor& plugin) - : pluginEditor (plugin.createEditorIfNeeded()), - owner (editor) + : pluginEditor (plugin.createEditorIfNeeded()), + owner (editor) { setOpaque (true); setBroughtToFrontOnMouseClick (true); @@ -1032,10 +1104,27 @@ private: } } + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + void checkScaleFactorIsCorrect() + { + if (auto* peer = pluginEditor->getPeer()) + { + auto peerScaleFactor = (float) peer->getPlatformScaleFactor(); + + if (! approximatelyEqual (peerScaleFactor, owner.editorScaleFactor)) + owner.setContentScaleFactor (peerScaleFactor); + } + } + #endif + void resized() override { if (pluginEditor != nullptr) { + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + checkScaleFactorIsCorrect(); + #endif + if (! isResizingParentToFitChild) { lastBounds = getLocalBounds(); @@ -1074,17 +1163,21 @@ private: #if JUCE_WINDOWS setSize (w, h); - #else - if (owner.macHostWindow != nullptr && ! (host.isWavelab() || host.isReaper() || host.isBitwigStudio())) - juce::setNativeHostWindowSizeVST (owner.macHostWindow, this, w, h, owner.isNSView); #endif if (owner.plugFrame != nullptr) { + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + w = roundToInt (w * owner.editorScaleFactor); + h = roundToInt (h * owner.editorScaleFactor); + #endif + ViewRect newSize (0, 0, w, h); - isResizingParentToFitChild = true; - owner.plugFrame->resizeView (&owner, &newSize); - isResizingParentToFitChild = false; + + { + const ScopedValueSetter resizingParentSetter (isResizingParentToFitChild, true); + owner.plugFrame->resizeView (&owner, &newSize); + } #if JUCE_MAC if (host.isWavelab() || host.isReaper()) @@ -1120,6 +1213,8 @@ private: bool isNSView = false; #endif + float editorScaleFactor = 1.0f; + #if JUCE_WINDOWS WindowsHooks hooks; #endif @@ -1173,6 +1268,8 @@ public: // and not AudioChannelSet::discreteChannels (2) etc. jassert (checkBusFormatsAreNotDiscrete()); + parameterGroups = pluginInstance->parameterTree.getSubgroups (true); + comPluginInstance = new JuceAudioProcessor (pluginInstance); zerostruct (processContext); @@ -1440,16 +1537,16 @@ public: bool loadVST2CcnKBlock (const char* data, int size) { - auto bank = (const vst2FxBank*) data; + auto bank = (const Vst2::fxBank*) data; - jassert ('CcnK' == htonl (bank->magic1)); - jassert ('FBCh' == htonl (bank->magic2)); - jassert (htonl (bank->version1) == 1 || htonl (bank->version1) == 2); + jassert ('CcnK' == htonl (bank->chunkMagic)); + jassert ('FBCh' == htonl (bank->fxMagic)); + jassert (htonl (bank->version) == 1 || htonl (bank->version) == 2); jassert (JucePlugin_VSTUniqueID == htonl (bank->fxID)); - setStateInformation (bank->chunk, - jmin ((int) (size - (bank->chunk - data)), - (int) htonl (bank->chunkSize))); + setStateInformation (bank->content.data.chunk, + jmin ((int) (size - (bank->content.data.chunk - data)), + (int) htonl (bank->content.data.size))); return true; } @@ -1642,16 +1739,16 @@ public: return status; const int bankBlockSize = 160; - vst2FxBank bank; + Vst2::fxBank bank; zerostruct (bank); - bank.magic1 = (int32) htonl ('CcnK'); - bank.size = (int32) htonl (bankBlockSize - 8 + (unsigned int) mem.getSize()); - bank.magic2 = (int32) htonl ('FBCh'); - bank.version1 = (int32) htonl (2); - bank.fxID = (int32) htonl (JucePlugin_VSTUniqueID); - bank.version2 = (int32) htonl (JucePlugin_VersionCode); - bank.chunkSize = (int32) htonl ((unsigned int) mem.getSize()); + bank.chunkMagic = (int32) htonl ('CcnK'); + bank.byteSize = (int32) htonl (bankBlockSize - 8 + (unsigned int) mem.getSize()); + bank.fxMagic = (int32) htonl ('FBCh'); + bank.version = (int32) htonl (2); + bank.fxID = (int32) htonl (JucePlugin_VSTUniqueID); + bank.fxVersion = (int32) htonl (JucePlugin_VersionCode); + bank.content.data.size = (int32) htonl ((unsigned int) mem.getSize()); status = state->write (&bank, bankBlockSize); @@ -1665,7 +1762,7 @@ public: //============================================================================== Steinberg::int32 PLUGIN_API getUnitCount() override { - return 1; + return parameterGroups.size() + 1; } tresult PLUGIN_API getUnitInfo (Steinberg::int32 unitIndex, Vst::UnitInfo& info) override @@ -1681,7 +1778,17 @@ public: return kResultTrue; } - zerostruct (info); + if (auto* group = parameterGroups[unitIndex - 1]) + { + info.id = JuceAudioProcessor::getUnitID (group); + info.parentUnitId = JuceAudioProcessor::getUnitID (group->getParent()); + info.programListId = Vst::kNoProgramListId; + + toString128 (info.name, group->getName()); + + return kResultTrue; + } + return kResultFalse; } @@ -2033,6 +2140,9 @@ public: if (tailLengthSeconds <= 0.0 || processSetup.sampleRate <= 0.0) return Vst::kNoTail; + if (tailLengthSeconds == std::numeric_limits::infinity()) + return Vst::kInfiniteTail; + return (Steinberg::uint32) roundToIntAccurate (tailLengthSeconds * processSetup.sampleRate); } @@ -2162,43 +2272,6 @@ public: } private: - //============================================================================== - Atomic refCount { 1 }; - - AudioProcessor* pluginInstance; - ComSmartPtr host; - ComSmartPtr comPluginInstance; - ComSmartPtr juceVST3EditController; - - /** - Since VST3 does not provide a way of knowing the buffer size and sample rate at any point, - this object needs to be copied on every call to process() to be up-to-date... - */ - Vst::ProcessContext processContext; - Vst::ProcessSetup processSetup; - - MidiBuffer midiBuffer; - Array channelListFloat; - Array channelListDouble; - - AudioBuffer emptyBufferFloat; - AudioBuffer emptyBufferDouble; - - #if JucePlugin_WantsMidiInput - bool isMidiInputBusEnabled = true; - #else - bool isMidiInputBusEnabled = false; - #endif - - #if JucePlugin_ProducesMidiOutput - bool isMidiOutputBusEnabled = true; - #else - bool isMidiOutputBusEnabled = false; - #endif - - ScopedJuceInitialiser_GUI libraryInitialiser; - static const char* kJucePrivateDataIdentifier; - //============================================================================== template void processAudio (Vst::ProcessData& data, Array& channelList) @@ -2410,9 +2483,51 @@ private: p.setRateAndBufferSizeDetails (sampleRate, bufferSize); p.prepareToPlay (sampleRate, bufferSize); + + midiBuffer.ensureSize (2048); + midiBuffer.clear(); } //============================================================================== + Atomic refCount { 1 }; + + AudioProcessor* pluginInstance; + ComSmartPtr host; + ComSmartPtr comPluginInstance; + ComSmartPtr juceVST3EditController; + + /** + Since VST3 does not provide a way of knowing the buffer size and sample rate at any point, + this object needs to be copied on every call to process() to be up-to-date... + */ + Vst::ProcessContext processContext; + + Vst::ProcessSetup processSetup; + + MidiBuffer midiBuffer; + Array channelListFloat; + Array channelListDouble; + + AudioBuffer emptyBufferFloat; + AudioBuffer emptyBufferDouble; + + #if JucePlugin_WantsMidiInput + bool isMidiInputBusEnabled = true; + #else + bool isMidiInputBusEnabled = false; + #endif + + #if JucePlugin_ProducesMidiOutput + bool isMidiOutputBusEnabled = true; + #else + bool isMidiOutputBusEnabled = false; + #endif + + ScopedJuceInitialiser_GUI libraryInitialiser; + static const char* kJucePrivateDataIdentifier; + + Array parameterGroups; + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Component) }; @@ -2531,7 +2646,7 @@ bool shutdownModule() //============================================================================== /** This typedef represents VST3's createInstance() function signature */ -typedef FUnknown* (*CreateFunction) (Vst::IHostApplication*); +using CreateFunction = FUnknown* (*)(Vst::IHostApplication*); static FUnknown* createComponentInstance (Vst::IHostApplication* host) { diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h index f2501da5..720f7d27 100644 --- a/modules/juce_audio_plugin_client/juce_audio_plugin_client.h +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client.h @@ -35,7 +35,7 @@ ID: juce_audio_plugin_client vendor: juce - version: 5.3.2 + version: 5.4.1 name: JUCE audio plugin wrapper classes description: Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins. website: http://www.juce.com/juce @@ -54,6 +54,17 @@ #include #include +/** Config: JUCE_VST3_CAN_REPLACE_VST2 + + Enable this if you want your VST3 plug-in to load and save VST2 compatible + state. This allows hosts to replace VST2 plug-ins with VST3 plug-ins. If + you change this option then your VST3 plug-in will be incompatible with + previous versions. +*/ +#ifndef JUCE_VST3_CAN_REPLACE_VST2 + #define JUCE_VST3_CAN_REPLACE_VST2 1 +#endif + /** Config: JUCE_FORCE_USE_LEGACY_PARAM_IDS Enable this if you want to force JUCE to use a continuous parameter diff --git a/modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp b/modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp new file mode 100644 index 00000000..c0b31a60 --- /dev/null +++ b/modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp @@ -0,0 +1,27 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2017 - ROLI Ltd. + + JUCE is an open source library subject to commercial or open-source + licensing. + + By using JUCE, you agree to the terms of both the JUCE 5 End-User License + Agreement and JUCE 5 Privacy Policy (both updated and effective as of the + 27th April 2017). + + End User License Agreement: www.juce.com/juce-5-licence + Privacy Policy: www.juce.com/juce-5-privacy-policy + + Or: You may also use this code under the terms of the GPL v3 (see + www.gnu.org/licenses). + + JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER + EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE + DISCLAIMED. + + ============================================================================== +*/ + +#include "Unity/juce_Unity_Wrapper.cpp" diff --git a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h index ca388ee5..b5278b17 100644 --- a/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h +++ b/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h @@ -30,7 +30,8 @@ #if ! (JucePlugin_Build_VST || JucePlugin_Build_VST3 \ || JucePlugin_Build_AU || JucePlugin_Build_AUv3 \ ||JucePlugin_Build_RTAS || JucePlugin_Build_AAX \ - || JucePlugin_Build_Standalone || JucePlugin_Build_LV2) + || JucePlugin_Build_Standalone || JucePlugin_Build_LV2 \ + || JucePlugin_Build_Unity) #error "You need to enable at least one plugin format!" #endif @@ -91,30 +92,3 @@ #undef JucePlugin_Build_AAX #define JucePlugin_Build_AAX 0 #endif - -//============================================================================== -#if JucePlugin_Build_VST - - #if JucePlugin_VersionCode < 0x010000 // Major < 0 - - #if (JucePlugin_VersionCode & 0x00FF00) > (9 * 0x100) // check if Minor number exceeeds 9 - #warning When version has "major" = 0, VST2 has trouble displaying "minor" exceeding 9 - #endif - - #if (JucePlugin_VersionCode & 0xFF) > 9 // check if Bugfix number exceeeds 9 - #warning When version has "major" = 0, VST2 has trouble displaying "bugfix" exceeding 9 - #endif - - #elif JucePlugin_VersionCode >= 0x650000 // Major >= 101 - - #if (JucePlugin_VersionCode & 0x00FF00) > (99 * 0x100) // check if Minor number exceeeds 99 - #warning When version has "major" > 100, VST2 has trouble displaying "minor" exceeding 99 - #endif - - #if (JucePlugin_VersionCode & 0xFF) > 99 // check if Bugfix number exceeeds 99 - #warning When version has "major" > 100, VST2 has trouble displaying "bugfix" exceeding 99 - #endif - - #endif // JucePlugin_VersionCode - -#endif // JucePlugin_Build_VST diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h b/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h index 602bf87c..8d7e4d2f 100644 --- a/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h +++ b/modules/juce_audio_plugin_client/utility/juce_PluginHostType.h @@ -67,7 +67,9 @@ public: DigitalPerformer, /**< Represents Digital Performer. */ FinalCut, /**< Represents Apple Final Cut Pro. */ FruityLoops, /**< Represents Fruity Loops. */ + JUCEPluginHost, /**< Represents the JUCE AudioPluginHost */ MagixSamplitude, /**< Represents Magix Samplitude. */ + MagixSequoia, /**< Represents Magix Sequoia. */ MergingPyramix, /**< Represents Merging Pyramix. */ MuseReceptorGeneric, /**< Represents Muse Receptor. */ Reaper, /**< Represents Cockos Reaper. */ @@ -127,6 +129,8 @@ public: bool isFruityLoops() const noexcept { return type == FruityLoops; } /** Returns true if the host is Apple GarageBand. */ bool isGarageBand() const noexcept { return type == AppleGarageBand; } + /** Returns true if the host is the JUCE AudioPluginHost */ + bool isJUCEPluginHost() const noexcept { return type == JUCEPluginHost; } /** Returns true if the host is Apple Logic Pro. */ bool isLogic() const noexcept { return type == AppleLogic; } /** Returns true if the host is Apple MainStage. */ @@ -149,6 +153,8 @@ public: bool isSADiE() const noexcept { return type == SADiE; } /** Returns true if the host is Magix Samplitude. */ bool isSamplitude() const noexcept { return type == MagixSamplitude; } + /** Returns true if the host is Magix Sequoia. */ + bool isSequoia() const noexcept { return type == MagixSequoia; } /** Returns true if the host is any version of Cakewalk Sonar. */ bool isSonar() const noexcept { return type == CakewalkSonar8 || type == CakewalkSonarGeneric; } /** Returns true if the host is Steinberg's VST3 Test Host. */ @@ -194,7 +200,9 @@ public: case DigitalPerformer: return "DigitalPerformer"; case FinalCut: return "Final Cut"; case FruityLoops: return "FruityLoops"; + case JUCEPluginHost: return "JUCE AudioPluginHost"; case MagixSamplitude: return "Magix Samplitude"; + case MagixSequoia: return "Magix Sequoia"; case MergingPyramix: return "Pyramix"; case MuseReceptorGeneric: return "Muse Receptor"; case Reaper: return "Reaper"; @@ -309,6 +317,8 @@ private: if (hostFilename.containsIgnoreCase ("Renoise")) return Renoise; if (hostFilename.containsIgnoreCase ("Resolve")) return DaVinciResolve; if (hostFilename.startsWith ("Bitwig")) return BitwigStudio; + if (hostFilename.containsIgnoreCase ("OsxFL")) return FruityLoops; + if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost; #elif JUCE_WINDOWS if (hostFilename.containsIgnoreCase ("Live 6.")) return AbletonLive6; @@ -353,16 +363,19 @@ private: if (hostFilename.containsIgnoreCase ("VST_Scanner")) return VBVSTScanner; if (hostPath.containsIgnoreCase ("Merging Technologies")) return MergingPyramix; if (hostFilename.startsWithIgnoreCase ("Sam")) return MagixSamplitude; + if (hostFilename.startsWithIgnoreCase ("Sequoia")) return MagixSequoia; if (hostFilename.containsIgnoreCase ("Renoise")) return Renoise; if (hostFilename.containsIgnoreCase ("Resolve")) return DaVinciResolve; if (hostPath.containsIgnoreCase ("Bitwig Studio")) return BitwigStudio; if (hostFilename.containsIgnoreCase ("Sadie")) return SADiE; + if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost; #elif JUCE_LINUX if (hostFilename.containsIgnoreCase ("Ardour")) return Ardour; if (hostFilename.startsWithIgnoreCase ("Waveform")) return TracktionWaveform; if (hostFilename.containsIgnoreCase ("Tracktion")) return TracktionGeneric; if (hostFilename.startsWith ("Bitwig")) return BitwigStudio; + if (hostFilename.containsIgnoreCase ("AudioPluginHost")) return JUCEPluginHost; #elif JUCE_IOS #elif JUCE_ANDROID diff --git a/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp b/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp index 831f9ec4..9b5c214f 100644 --- a/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp +++ b/modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp @@ -39,6 +39,10 @@ namespace juce AudioProcessor::WrapperType PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_Undefined; +#if JucePlugin_Build_Unity + bool juce_isRunningInUnity() { return PluginHostType::getPluginLoadedAs() == AudioProcessor::wrapperType_Unity; } +#endif + #ifndef JUCE_VST3_CAN_REPLACE_VST2 #define JUCE_VST3_CAN_REPLACE_VST2 1 #endif diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp b/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp index ea5c5d9a..c16bafee 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp @@ -39,10 +39,10 @@ namespace AudioPluginFormatHelpers : instance (inInstance), error (inError), compCallback (inCompletion), owner (invoker) {} - void messageCallback() override { compCallback->completionCallback (instance, error); } + void messageCallback() override { compCallback->completionCallback (instance.release(), error); } //============================================================================== - AudioPluginInstance* instance; + std::unique_ptr instance; String error; std::unique_ptr compCallback; std::unique_ptr owner; @@ -199,7 +199,7 @@ void AudioPluginFormat::createPluginInstanceOnMessageThread (const PluginDescrip AudioPluginFormat::InstantiationCompletionCallback* callback) { jassert (callback != nullptr); - jassert (MessageManager::getInstance()->isThisTheMessageThread()); + JUCE_ASSERT_MESSAGE_THREAD //============================================================================== diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormat.h b/modules/juce_audio_processors/format/juce_AudioPluginFormat.h index be7a2576..f154704a 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormat.h +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormat.h @@ -151,12 +151,14 @@ protected: AudioPluginFormat() noexcept; + using PluginCreationCallback = void (*) (void*, AudioPluginInstance*, const String&); + /** Implementors must override this function. This is guaranteed to be called on the message thread. You may call the callback on any thread. */ virtual void createPluginInstance (const PluginDescription&, double initialSampleRate, int initialBufferSize, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) = 0; + PluginCreationCallback) = 0; virtual bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept = 0; diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt b/modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt new file mode 100644 index 00000000..c653a2ef --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +This license applies only to files referencing this license, +for other files of the Software Development Kit the respective embedded license text +is applicable. The license can be found at: www.steinberg.net/sdklicenses_vst3 + +This Software Development Kit is licensed under the terms of the Steinberg VST3 License, +or alternatively under the terms of the General Public License (GPL) Version 3. +You may use the Software Development Kit according to either of these licenses as it is +most appropriate for your project on a case-by-case basis (commercial or not). + +a) Proprietary Steinberg VST3 License +The Software Development Kit may not be distributed in parts or its entirety +without prior written agreement by Steinberg Media Technologies GmbH. +The SDK must not be used to re-engineer or manipulate any technology used +in any Steinberg or Third-party application or software module, +unless permitted by law. +Neither the name of the Steinberg Media Technologies GmbH nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. +Before publishing a software under the proprietary license, you need to obtain a copy +of the License Agreement signed by Steinberg Media Technologies GmbH. +The Steinberg VST SDK License Agreement can be found at: +www.steinberg.net/en/company/developers.html + +THE SDK IS PROVIDED BY STEINBERG MEDIA TECHNOLOGIES GMBH "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL STEINBERG MEDIA TECHNOLOGIES GMBH BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +b) General Public License (GPL) Version 3 +Details of these licenses can be found at: www.gnu.org/licenses/gpl-3.0.html +//---------------------------------------------------------------------------------- diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/README.md b/modules/juce_audio_processors/format_types/VST3_SDK/README.md new file mode 100644 index 00000000..f208d870 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/README.md @@ -0,0 +1,153 @@ +# Welcome to VST SDK 3.6.9 + +## Table Of Contents +1. [The VST SDK package](#100) +1. [System requirements](#200) +1. [About VST Plug-ins in general](#300) +1. [About VST 3](#400) +1. [How to build VST 3](#How_to_build_VST_3) +1. [License & Usage guidelines](#license_&_usage_guidelines) + +
+ +## The VST SDK package contains: +- The VST 3 API +- VST 3 Implementation Helper Classes +- AAX, AU and VST 2 wrappers +- VST 3 Plug-ins Examples + +The full VST 3 SDK is available [here!](https://www.steinberg.net/en/company/developers.html). It contains a VST 3 Plug-in Test Host Application/Validator. + +
+ +## System requirements + +Supported OS: + +- Microsoft Windows 7-10 +- Apple OSX 10.7-10.13 +- Apple iOS 8-9 +- Linux (Beta version) + +Supported IDE: +- Visual Studio 2015/2017 +- minimum Xcode 7 +- Qt Creator + +--- +
+ +## About VST Plug-ins in general +A VST Plug-in is an audio processing component that is utilized within a host application. This host application provides the audio or/and event streams that are processed by the Plug-in's code. Generally speaking, a VST Plug-in can take a stream of audio data, apply a process to the audio, and return the result to the host application. A VST Plug-in performs its process normally using the processor of the computer. The audio stream is broken down into a series of blocks. The host supplies the blocks in sequence. The host and its current environment control the block-size. The VST Plug-in maintains the status of all its own parameters relating to the running process: The host does not maintain any information about what the Plug-in did with the last block of data it processed. + +From the host application's point of view, a VST Plug-in is a black box with an arbitrary number of inputs, outputs (Event (MIDI) or Audio), and associated parameters. The host needs no implicit knowledge of the Plug-in's process to be able to use it. The Plug-in process can use whatever parameters it wishes, internally to the process, but depending on the capabilities of the host, it can allow the changes to user parameters to be automated by the host. + +The source code of a VST Plug-in is platform independent, but the delivery system depends on the platform architecture: +- On **Windows**, a VST Plug-in is a multi-threaded DLL (Dynamic Link Library). +- On **Mac OS X**, a VST Plug-in is a Mach-O Bundle +- On **Linux**, a VST Plug-in is a package + +To learn more about VST you can subscribe to the [VST Developer Forum](https://sdk.steinberg.net) - check the 3rd Party Developer Support section at [www.steinberg.net](http://www.steinberg.net). + + --- +
+ +## About VST 3 +VST 3 is a general rework of the long-serving VST Plug-in interface. It is not compatible with the older VST versions, but it includes some new features and possibilities. We have redesigned the API to make it not only far easier and more reliable for developers to work with, but have also provided completely new possibilities for Plug-ins. These include: + +### 1. Improved Performance with the Silence Flag +Processing can optionally be applied to Plug-ins only when audio signals are present on their respective inputs, so VST 3 Plug-ins can apply their processing economically and only when it is needed. + +### 2. Multiple Dynamic I/Os +VST 3 Plug-ins are no longer limited to a fixed number of inputs and outputs, and their I/O configuration can dynamically adapt to the channel configuration. Side-chains are also very easily realizable. This includes the possibility to deactivate unused buses after loading and even reactivate those when needed. This cleans up the mixer and further helps to reduce CPU load. + +### 3. Sample-accurate Automation +VST 3 also features vastly improved parameter automation with sample accuracy and support for ramped automation data, allowing completely accurate and rapid parameter automation changes. + +### 4. Logical Parameter Organization +The VST 3 Plug-in parameters are displayed in a tree structure. Parameters are grouped into sections which represent the structure of the Plug-in. Plug-ins can communicate their internal structure for the purpose of overview, but also for some associated functionality (eg. program-lists). + +### 5. Resizeable UI Editor +VST 3 defines a way to allow resizing of the Plug-in editor by a user. + +### 6. Mouse Over Support +The Host could ask the Plug-in which parameter is under the mouse. + +### 7. Context Menu Support +VST 3 defines a way to allow the host to add its own entries in the Plug-in context menu of a specific parameter. + +### 8. Channel Context Information +A VST 3 Plug-in could access some channel information where it is instantiated: name, color,... + +### 9. Note Expression +VST 3 defines with Note Expression a new way of event controller editing. The Plug-in is able to break free from the limitations of MIDI controller events by providing access to new VST 3 controller events that circumvent the laws of MIDI and provide articulation information for each individual note (event) in a polyphonic arrangement according to its noteId. + +### 10. 3D Support +VST 3 supports new speaker configurations like Ambisonic, Atmos, Auro 3D or 22.2. + +### 11. Factory Concept +VST 3 Plug-in library could export multiple Plug-ins and in this way replaces the shell concept of VST 2 (kPlugCategShell). + +### 12. Support Remote control Representation +VST 3 Plug-in can deliver a specific parameter mapping for remote controls like Nuage. + +### 13. Others +While designing VST 3, we performed a careful analysis of the existing functionality of VST and rewrote the interfaces from scratch. In doing so, we focused a lot on providing clear interfaces and their documentation in order to avoid usage errors from the deepest possible layer. +Some more features implemented specifically for developers include: +- More stable technical Host/Plug-in environment +- Advanced technical definition of the standard +- Modular approach +- Separation of UI and processing +- Advanced Preset System +- Multiple Plug-ins per Library +- Test Host included +- Automated Testing Environment +- Validator (small command line Test Host) and Plug-in examples code included + +--- +
+ +## How to build + +### Get the source code from GitHub +
git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
+
+ +### Build the examples on Linux +
+mkdir build
+cd build
+cmake ../vst3sdk
+make  (or alternatively cmake --build .)
+
+ +### Build the examples on macOS +
+mkdir build
+cd build
+cmake -GXcode ../vst3sdk
+xcodebuild  (or alternatively cmake --build .)
+
+ +### Build the examples on Windows +
+mkdir build
+cd build
+cmake.exe -G"Visual Studio 15 2017 Win64" ../vst3sdk
+msbuild.exe vstsdk.sln   (or alternatively cmake --build .)
+
+ +### Build using cmake-gui +
+* start the cmake-gui Application
+* "Browse Source...": select the folder VST3_SDK
+* "Browse Build...": select a folder where the outputs (projects/...) will be created. Typically a folder named "build"
+* you can check the SMTG Options
+* Press "Configure"
+* Press "Generate" and the project will be created
+
+
+--- + +## License & Usage guidelines +More details are found at [www.steinberg.net/sdklicenses_vst3](http://www.steinberg.net/sdklicenses_vst3) \ No newline at end of file diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt b/modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt new file mode 100644 index 00000000..1f195a90 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt @@ -0,0 +1,27 @@ +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp new file mode 100644 index 00000000..bc91f760 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/baseidds.cpp +// Created by : Steinberg, 01/2008 +// Description : Basic Interface +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "pluginterfaces/base/funknown.h" +#include "pluginterfaces/base/istringresult.h" +#include "pluginterfaces/base/ipersistent.h" + + +namespace Steinberg { + +DEF_CLASS_IID (IString) +DEF_CLASS_IID (IStringResult) + +DEF_CLASS_IID (IPersistent) +DEF_CLASS_IID (IAttributes) +DEF_CLASS_IID (IAttributes2) +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h new file mode 100644 index 00000000..6d4f637f --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h @@ -0,0 +1,87 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/classfactoryhelpers.h +// Created by : Steinberg, 03/2017 +// Description : Class factory +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +//------------------------------------------------------------------------------ +// Helper Macros. Not intended for direct use. +// Use: +// META_CLASS(className), +// META_CLASS_IFACE(className,Interface), +// META_CLASS_SINGLE(className,Interface) +// instead. +//------------------------------------------------------------------------------ +#define META_CREATE_FUNC(funcName) static FUnknown* funcName () + +#define CLASS_CREATE_FUNC(className) \ + namespace Meta { \ + META_CREATE_FUNC (make##className) { return (NEW className)->unknownCast (); } \ + } + +#define SINGLE_CREATE_FUNC(className) \ + namespace Meta { \ + META_CREATE_FUNC (make##className) { return className::instance ()->unknownCast (); } \ + } + +#define _META_CLASS(className) \ + namespace Meta { \ + static Steinberg::MetaClass meta##className ((#className), Meta::make##className); \ + } + +#define _META_CLASS_IFACE(className, Interface) \ + namespace Meta { \ + static Steinberg::MetaClass meta##Interface##className ((#className), Meta::make##className, \ + Interface##_iid); \ + } + +/** TODO + */ +#define META_CLASS(className) \ + CLASS_CREATE_FUNC (className) \ + _META_CLASS (className) + +/** TODO + */ +#define META_CLASS_IFACE(className, Interface) \ + CLASS_CREATE_FUNC (className) \ + _META_CLASS_IFACE (className, Interface) + +/** TODO + */ +#define META_CLASS_SINGLE(className, Interface) \ + SINGLE_CREATE_FUNC (className) \ + _META_CLASS_IFACE (className, Interface) diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp new file mode 100644 index 00000000..3e6dd855 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp @@ -0,0 +1,644 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fbuffer.cpp +// Created by : Steinberg, 2008 +// Description : +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "base/source/fbuffer.h" +#include "base/source/fstring.h" +#include + +namespace Steinberg { + +//------------------------------------------------------------------------------------- +Buffer::Buffer () +: buffer (0) +, memSize (0) +, fillSize (0) +, delta (defaultDelta) +{} + +//------------------------------------------------------------------------------------- +Buffer::Buffer (uint32 s, uint8 initVal) +: buffer (0) +, memSize (s) +, fillSize (0) +, delta (defaultDelta) +{ + if (memSize == 0) + return; + buffer = (int8*)::malloc (memSize); + if (buffer) + memset (buffer, initVal, memSize); + else + memSize = 0; +} + +//------------------------------------------------------------------------------------- +Buffer::Buffer (uint32 s) +: buffer (0) +, memSize (s) +, fillSize (0) +, delta (defaultDelta) +{ + if (memSize == 0) + return; + buffer = (int8*)::malloc (memSize); + if (!buffer) + memSize = 0; +} + +//------------------------------------------------------------------------------------- +Buffer::Buffer (const void* b , uint32 s) +: buffer (0) +, memSize (s) +, fillSize (s) +, delta (defaultDelta) +{ + if (memSize == 0) + return; + buffer = (int8*)::malloc (memSize); + if (buffer) + memcpy (buffer, b, memSize); + else + { + memSize = 0; + fillSize = 0; + } +} + +//------------------------------------------------------------------------------------- +Buffer::Buffer (const Buffer& bufferR) +: buffer (0) +, memSize (bufferR.memSize) +, fillSize (bufferR.fillSize) +, delta (bufferR.delta) +{ + if (memSize == 0) + return; + + buffer = (int8*)::malloc (memSize); + if (buffer) + memcpy (buffer, bufferR.buffer, memSize); + else + memSize = 0; +} + +//------------------------------------------------------------------------------------- +Buffer::~Buffer () +{ + if (buffer) + ::free (buffer); + buffer = 0; +} + +//------------------------------------------------------------------------------------- +void Buffer::operator = (const Buffer& b2) +{ + if (&b2 != this) + { + setSize (b2.memSize); + if (b2.memSize > 0 && buffer) + memcpy (buffer, b2.buffer, b2.memSize); + fillSize = b2.fillSize; + delta = b2.delta; + } +} + +//------------------------------------------------------------------------------------- +bool Buffer::operator == (const Buffer& b2)const +{ + if (&b2 == this) + return true; + if (b2.getSize () != getSize ()) + return false; + return memcmp (this->int8Ptr (), b2.int8Ptr (), getSize ()) == 0 ? true : false; +} + +//------------------------------------------------------------------------------------- +uint32 Buffer::get (void* b, uint32 size) +{ + uint32 maxGet = memSize - fillSize; + if (size > maxGet) + size = maxGet; + if (size > 0) + memcpy (b, buffer + fillSize, size); + fillSize += size; + return size; +} + +//------------------------------------------------------------------------------------- +bool Buffer::put (char16 c) +{ + return put ((const void*)&c, sizeof (c)); +} + +//------------------------------------------------------------------------------------- +bool Buffer::put (uint8 byte) +{ + if (grow (fillSize + 1) == false) + return false; + + buffer [fillSize++] = byte; + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::put (char c) +{ + if (grow (fillSize + 1) == false) + return false; + + buffer [fillSize++] = c; + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::put (const void* toPut, uint32 s) +{ + if (!toPut) + return false; + + if (grow (fillSize + s) == false) + return false; + + memcpy (buffer + fillSize, toPut, s); + fillSize += s; + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::put (const String& str) +{ + return put ((const void*)str.text () , (str.length () + 1) * sizeof (tchar)); +} + +//------------------------------------------------------------------------------------- +bool Buffer::appendString8 (const char8* s) +{ + if (!s) + return false; + + uint32 len = (uint32) strlen (s); + return put (s, len); +} + +//------------------------------------------------------------------------------------- +bool Buffer::appendString16 (const char16* s) +{ + if (!s) + return false; + ConstString str (s); + uint32 len = (uint32) str.length () * sizeof (char16); + return put (s, len); +} + +//------------------------------------------------------------------------------------- +bool Buffer::prependString8 (const char8* s) +{ + if (!s) + return false; + + uint32 len = (uint32) strlen (s); + + if (len > 0) + { + shiftStart (len); + memcpy (buffer, s, len); + return true; + } + return false; +} + +//------------------------------------------------------------------------------------- +bool Buffer::prependString16 (const char16* s) +{ + if (!s) + return false; + + ConstString str (s); + uint32 len = (uint32) str.length () * sizeof (char16); + + if (len > 0) + { + shiftStart (len); + memcpy (buffer, s, len); + return true; + } + return false; +} + +//------------------------------------------------------------------------------------- +bool Buffer::prependString8 (char8 c) +{ + shiftStart (sizeof (char)); + char* b = (char*)buffer; + b [0] = c; + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::prependString16 (char16 c) +{ + shiftStart (sizeof (char16)); + char16* b = (char16*)buffer; + b [0] = c; + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::copy (uint32 from, uint32 to, uint32 bytes) +{ + if (from + bytes > memSize || bytes == 0) + return false; + + if (to + bytes > memSize) + setSize (to + bytes); + + if (from + bytes > to && from < to) + { // overlap + Buffer tmp (buffer + from, bytes); + memcpy (buffer + to, tmp, bytes); + } + else + memcpy (buffer + to, buffer + from, bytes); + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::makeHexString (String& result) +{ + unsigned char* data = uint8Ptr (); + uint32 bytes = getSize (); + + if (data == 0 || bytes == 0) + return false; + + char8* stringBuffer = (char8*)malloc ((bytes * 2) + 1); + if (!stringBuffer) + return false; + + int32 count = 0; + while (bytes > 0) + { + unsigned char t1 = ((*data) >> 4) & 0x0F; + unsigned char t2 = (*data) & 0x0F; + if (t1 < 10) + t1 += '0'; + else + t1 = t1 - 10 + 'A'; + if (t2 < 10) + t2 += '0'; + else + t2 = t2 - 10 + 'A'; + + stringBuffer [count++] = t1; + stringBuffer [count++] = t2; + data++; + bytes--; + } + stringBuffer [count] = 0; + + result.take ((void*)stringBuffer, false); + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::fromHexString (const char8* string) +{ + flush (); + if (string == 0) + return false; + + int32 len = strlen8 (string); + if (len == 0 || ((len & 1) == 1)/*odd number*/ ) + return false; + + setSize (len / 2); + unsigned char* data = uint8Ptr (); + + bool upper = true; + int32 count = 0; + while (count < len) + { + char c = string [count]; + + unsigned char d = 0; + if (c >= '0' && c <= '9') d += c - '0'; + else if (c >= 'A' && c <= 'F') d += c - 'A' + 10; + else if (c >= 'a' && c <= 'f') d += c - 'a' + 10; + else return false; // no hex string + + if (upper) + data [count >> 1] = d << 4; + else + data [count >> 1] += d; + + upper = !upper; + count++; + } + setFillSize (len / 2); + return true; +} + +//------------------------------------------------------------------------ +void Buffer::set (uint8 value) +{ + if (buffer) + memset (buffer, value, memSize); +} + +//------------------------------------------------------------------------------------- +bool Buffer::setFillSize (uint32 c) +{ + if (c <= memSize) + { + fillSize = c; + return true; + } + return false; +} + +//------------------------------------------------------------------------------------- +bool Buffer::truncateToFillSize () +{ + if (fillSize < memSize) + setSize (fillSize); + + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::grow (uint32 newSize) +{ + if (newSize > memSize) + { + if (delta == 0) + delta = defaultDelta; + uint32 s = ((newSize + delta - 1) / delta) * delta; + return setSize (s); + } + return true; +} + +//------------------------------------------------------------------------ +void Buffer::shiftAt (uint32 position, int32 amount) +{ + if (amount > 0) + { + if (grow (fillSize + amount)) + { + if (position < fillSize) + memmove (buffer + amount + position, buffer + position, fillSize - position); + + fillSize += amount; + } + } + else if (amount < 0 && fillSize > 0) + { + uint32 toRemove = -amount; + + if (toRemove < fillSize) + { + if (position < fillSize) + memmove (buffer + position, buffer + toRemove + position, fillSize - position - toRemove); + fillSize -= toRemove; + } + } +} + +//------------------------------------------------------------------------------------- +void Buffer::move (int32 amount, uint8 initVal) +{ + if (memSize == 0) + return; + + if (amount > 0) + { + if ((uint32)amount < memSize) + { + memmove (buffer + amount, buffer, memSize - amount); + memset (buffer, initVal, amount); + } + else + memset (buffer, initVal, memSize); + } + else + { + uint32 toRemove = -amount; + if (toRemove < memSize) + { + memmove (buffer, buffer + toRemove, memSize - toRemove); + memset (buffer + memSize - toRemove, initVal, toRemove); + } + else + memset (buffer, initVal, memSize); + } +} + +//------------------------------------------------------------------------------------- +bool Buffer::setSize (uint32 newSize) +{ + if (memSize != newSize) + { + if (buffer) + { + if (newSize > 0) + { + int8* newBuffer = (int8*) ::realloc (buffer, newSize); + if (newBuffer == 0) + { + newBuffer = (int8*)::malloc (newSize); + if (newBuffer) + { + uint32 tmp = newSize; + if (tmp > memSize) + tmp = memSize; + memcpy (newBuffer, buffer, tmp); + ::free (buffer); + buffer = newBuffer; + } + else + { + ::free (buffer); + buffer = 0; + } + } + else + buffer = newBuffer; + } + else + { + ::free (buffer); + buffer = 0; + } + } + else + buffer = (int8*)::malloc (newSize); + + if (newSize > 0 && !buffer) + memSize = 0; + else + memSize = newSize; + if (fillSize > memSize) + fillSize = memSize; + } + + return (newSize > 0) == (buffer != 0); +} + +//------------------------------------------------------------------------------------- +void Buffer::fillup (uint8 value) +{ + if (getFree () > 0) + memset (buffer + fillSize, value, getFree ()); +} + +//------------------------------------------------------------------------------------- +int8* Buffer::operator + (uint32 i) +{ + if (i < memSize) + return buffer + i; + else + { + static int8 eof; + eof = 0; + return &eof; + } +} + +//------------------------------------------------------------------------------------- +bool Buffer::swap (int16 swapSize) +{ + return swap (buffer, memSize, swapSize); +} + +//------------------------------------------------------------------------------------- +bool Buffer::swap (void* buffer, uint32 bufferSize, int16 swapSize) +{ + if (swapSize != kSwap16 && swapSize != kSwap32 && swapSize != kSwap64) + return false; + + if (swapSize == kSwap16) + { + for (uint32 count = 0 ; count < bufferSize ; count += 2) + { + SWAP_16 ( * (((int16*)buffer) + count) ); + } + } + else if (swapSize == kSwap32) + { + for (uint32 count = 0 ; count < bufferSize ; count += 4) + { + SWAP_32 ( * (((int32*)buffer) + count) ); + } + } + else if (swapSize == kSwap64) + { + for (uint32 count = 0 ; count < bufferSize ; count += 8) + { + SWAP_64 ( * (((int64*)buffer) + count) ); + } + } + + return true; +} + +//------------------------------------------------------------------------------------- +void Buffer::take (Buffer& from) +{ + setSize (0); + memSize = from.memSize; + fillSize = from.fillSize; + buffer = from.buffer; + from.buffer = 0; + from.memSize = 0; + from.fillSize = 0; +} + +//------------------------------------------------------------------------------------- +int8* Buffer::pass () +{ + int8* res = buffer; + buffer = 0; + memSize = 0; + fillSize = 0; + return res; +} + +//------------------------------------------------------------------------------------- +bool Buffer::toWideString (int32 sourceCodePage) +{ + if (getFillSize () > 0) + { + if (str8 () [getFillSize () - 1] != 0) // multiByteToWideString only works with 0-terminated strings + endString8 (); + + Buffer dest (getFillSize () * sizeof (char16)); + int32 result = String::multiByteToWideString (dest.str16 (), buffer, dest.getFree () / sizeof (char16), sourceCodePage); + if (result > 0) + { + dest.setFillSize ((result - 1) * sizeof (char16)); + take (dest); + return true; + } + return false; + } + return true; +} + +//------------------------------------------------------------------------------------- +bool Buffer::toMultibyteString (int32 destCodePage) +{ + if (getFillSize () > 0) + { + int32 textLength = getFillSize () / sizeof (char16); // wideStringToMultiByte only works with 0-terminated strings + if (str16 () [textLength - 1] != 0) + endString16 (); + + Buffer dest (getFillSize ()); + int32 result = String::wideStringToMultiByte (dest.str8 (), str16 (), dest.getFree (), destCodePage); + if (result > 0) + { + dest.setFillSize (result - 1); + take (dest); + return true; + } + return false; + } + return true; +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h new file mode 100644 index 00000000..ff81b501 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h @@ -0,0 +1,306 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fbuffer.h +// Created by : Steinberg, 2008 +// Description : +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/ftypes.h" +#include + +namespace Steinberg { +class String; + +//------------------------------------------------------------------------ +/** Buffer. +@ingroup adt + +A Buffer is an object-oriented wrapper for a piece of memory. +It adds several utility functions, e.g. for managing the size of the Buffer, +appending or prepending values or strings to it. +Internally it uses the standard memory functions malloc(), free(), etc. */ +//------------------------------------------------------------------------ +class Buffer +{ +public: +//--------------------------------------------------------------------- + + /** Default constructor, allocates no memory at all. + */ + Buffer (); + + /** Constructor - creates a new Buffer with a given size and copies contents from optional memory pointer. + \param[in] b : optional memory pointer with the size of at least the given size + \param[in] size : the size of the new Buffer to be allocated, in bytes. + */ + Buffer (const void* b, uint32 size); + + /** Constructor - creates a new Buffer with a given size and fills it all with a given value. + \param[in] size : the size of the new Buffer to be allocated, in bytes. + \param[in] initVal : the initial value the Buffer will be completely filled with + */ + Buffer (uint32 size, uint8 initVal); + + /** Constructor - creates a new Buffer with a given size. + \param[in] size : the size of the new Buffer to be allocated, in bytes. + */ + Buffer (uint32 size); + + /** Copy constructor - creates a new Buffer from a given Buffer. + \param[in] buff : the Buffer from which all memory will be copied to the new one + */ + Buffer (const Buffer& buff); + + /** Destructor - deallocates the internal memory. + */ + ~Buffer (); + + /** Assignment operator - copies contents from a given Buffer and increases the size if necessary. + \param[in] buff : the Buffer from which all memory will be copied + */ + void operator = (const Buffer& buff); + + /** Comparison operator - copies contents from a given Buffer and increases the size if necessary. + \param[in] buff : the Buffer to be compared to + \return true, if the given Buffer's content is equal to this one, else false + */ + bool operator == (const Buffer& buff)const; + + uint32 getSize () const {return memSize;} ///< \return the actual size of the Buffer's memory, in bytes. + + /** Sets a new size for this Buffer, keeping as much content as possible. + \param[in] newSize : the new size for the Buffer, in bytes, newSize maybe zero + \return true, if the new size could be adapted, else false + */ + bool setSize (uint32 newSize); + + /** Increases the Buffer to the next block, block size given by delta. + \param[in] memSize : the new minimum size of the Buffer, newSize maybe zero + \return true, if the Buffer could be grown successfully, else false + */ + bool grow (uint32 memSize); + bool setMaxSize (uint32 size) {return grow (size);} ///< see \ref grow() + + void fillup (uint8 initVal = 0); ///< set from fillSize to end + uint32 getFillSize ()const {return fillSize;} ///< \return the actual fill size + bool setFillSize (uint32 c); ///< sets a new fill size, does not change any memory + inline void flush () {setFillSize (0);} ///< sets fill size to zero + bool truncateToFillSize (); ///< \return always true, truncates the size of the Buffer to the actual fill size + + bool isFull () const { return (fillSize == memSize); } ///< \return true, if all memory is filled up, else false + uint32 getFree () const { return (memSize - fillSize); }///< \return remaining memory + + inline void shiftStart (int32 amount) {return shiftAt (0, amount);} ///< moves all memory by given amount, grows the Buffer if necessary + void shiftAt (uint32 position, int32 amount); ///< moves memory starting at the given position + void move (int32 amount, uint8 initVal = 0); ///< shifts memory at start without growing the buffer, so data is lost and initialized with init val + + bool copy (uint32 from, uint32 to, uint32 bytes); ///< copies a number of bytes from one position to another, the size may be adapted + uint32 get (void* b, uint32 size); ///< copy to buffer from fillSize, and shift fillSize + + void setDelta (uint32 d) {delta = d;} ///< define the block size by which the Buffer grows, see \ref grow() + + bool put (uint8); ///< append value at end, grows Buffer if necessary + bool put (char16 c); ///< append value at end, grows Buffer if necessary + bool put (char c); ///< append value at end, grows Buffer if necessary + bool put (const void* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (void* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (uint8* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (char8* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (const uint8* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (const char8* , uint32 size); ///< append bytes from a given buffer, grows Buffer if necessary + bool put (const String&); ///< append String at end, grows Buffer if necessary + + void set (uint8 value); ///< fills complete Buffer with given value + + // strings ---------------- + bool appendString (const tchar* s); + bool appendString (tchar* s); + bool appendString (tchar c) { return put (c); } + + bool appendString8 (const char8* s); + bool appendString16 (const char16* s); + + bool appendString8 (char8* s) { return appendString8 ((const char8*)s); } + bool appendString8 (unsigned char* s) { return appendString8 ((const char8*)s); } + bool appendString8 (const unsigned char* s) { return appendString8 ((const char8*)s); } + + bool appendString8 (char8 c) { return put ((uint8)c); } + bool appendString8 (unsigned char c) { return put (c); } + bool appendString16 (char16 c) { return put (c); } + bool appendString16 (char16* s) { return appendString16 ((const char16*)s); } + + bool prependString (const tchar* s); + bool prependString (tchar* s); + bool prependString (tchar c); + + bool prependString8 (const char8* s); + bool prependString16 (const char16* s); + + bool prependString8 (char8 c); + bool prependString8 (unsigned char c) { return prependString8 ((char8)c); } + bool prependString8 (char8* s) { return prependString8 ((const char8*)s); } + bool prependString8 (unsigned char* s) { return prependString8((const char8*)s); } + bool prependString8 (const unsigned char* s) { return prependString8 ((const char8*)s); } + bool prependString16 (char16 c); + bool prependString16 (char16* s) { return prependString16 ((const char16*)s); } + + bool operator+= (const char* s) { return appendString8 (s); } + bool operator+= (char c) { return appendString8 (c); } + bool operator+= (const char16* s) { return appendString16 (s); } + bool operator+= (char16 c) { return appendString16 (c); } + + bool operator= (const char* s) { flush (); return appendString8 (s); } + bool operator= (const char16* s) { flush (); return appendString16 (s); } + bool operator= (char8 c) { flush (); return appendString8 (c); } + bool operator= (char16 c) { flush (); return appendString16 (c); } + + void endString () {put (tchar (0));} + void endString8 () {put (char8 (0));} + void endString16 () {put (char16 (0));} + + bool makeHexString (String& result); + bool fromHexString (const char8* string); + + // conversion + operator void* () const { return (void*)buffer; } ///< conversion + inline tchar* str () const {return (tchar*)buffer;} ///< conversion + inline char8* str8 () const {return (char8*)buffer;} ///< conversion + inline char16* str16 () const {return (char16*)buffer;} ///< conversion + inline int8* int8Ptr () const {return (int8*)buffer;} ///< conversion + inline uint8* uint8Ptr () const {return (uint8*)buffer; } ///< conversion + inline int16* int16Ptr () const {return (int16*)buffer; } ///< conversion + inline uint16* uint16Ptr () const {return (uint16*)buffer; } ///< conversion + inline int32* int32Ptr () const {return (int32*)buffer; } ///< conversion + inline uint32* uint32Ptr () const {return (uint32*)buffer; } ///< conversion + inline float* floatPtr () const {return (float*)buffer; } ///< conversion + inline double* doublePtr () const {return (double*)buffer; } ///< conversion + inline char16* wcharPtr () const {return (char16*)buffer;} ///< conversion + + int8* operator + (uint32 i); ///< \return the internal Buffer's address plus the given offset i, zero if offset is out of range + + int32 operator ! () { return buffer == 0; } + + enum swapSize + { + kSwap16 = 2, + kSwap32 = 4, + kSwap64 = 8 + }; + bool swap (int16 swapSize); ///< swap all bytes of this Buffer by the given swapSize + static bool swap (void* buffer, uint32 bufferSize, int16 swapSize); ///< utility, swap given number of bytes in given buffer by the given swapSize + + void take (Buffer& from); ///< takes another Buffer's memory, frees the current Buffer's memory + int8* pass (); ///< pass the current Buffer's memory + + /** Converts a Buffer's content to UTF-16 from a given multi-byte code page, Buffer must contain char8 of given encoding. + \param[in] sourceCodePage : the actual code page of the Buffer's content + \return true, if the conversion was successful, else false + */ + virtual bool toWideString (int32 sourceCodePage); // Buffer contains char8 of given encoding -> utf16 + + /** Converts a Buffer's content from UTF-16 to a given multi-byte code page, Buffer must contain UTF-16 encoded characters. + \param[in] destCodePage : the desired code page to convert the Buffer's content to + \return true, if the conversion was successful, else false + */ + virtual bool toMultibyteString (int32 destCodePage); // Buffer contains utf16 -> char8 of given encoding + +//------------------------------------------------------------------------ +protected: + static const uint32 defaultDelta = 0x1000; // 0x1000 + + int8* buffer; + uint32 memSize; + uint32 fillSize; + uint32 delta; +}; + +inline bool Buffer::put (void* p, uint32 count) { return put ((const void*)p , count ); } +inline bool Buffer::put (uint8 * p, uint32 count) { return put ((const void*)p , count ); } +inline bool Buffer::put (char8* p, uint32 count) { return put ((const void*)p , count ); } +inline bool Buffer::put (const uint8* p, uint32 count) { return put ((const void*)p , count ); } +inline bool Buffer::put (const char8* p, uint32 count) { return put ((const void*)p , count ); } + +//------------------------------------------------------------------------ +inline bool Buffer::appendString (const tchar* s) +{ +#ifdef UNICODE + return appendString16 (s); +#else + return appendString8 (s); +#endif +} + +//------------------------------------------------------------------------ +inline bool Buffer::appendString (tchar* s) +{ +#ifdef UNICODE + return appendString16 (s); +#else + return appendString8 (s); +#endif +} + +//------------------------------------------------------------------------ +inline bool Buffer::prependString (const tchar* s) +{ +#ifdef UNICODE + return prependString16 (s); +#else + return prependString8 (s); +#endif +} + +//------------------------------------------------------------------------ +inline bool Buffer::prependString (tchar* s) +{ +#ifdef UNICODE + return prependString16 (s); +#else + return prependString8 (s); +#endif +} + +//------------------------------------------------------------------------ +inline bool Buffer::prependString (tchar c) +{ +#ifdef UNICODE + return prependString16 (c); +#else + return prependString8 (c); +#endif +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp new file mode 100644 index 00000000..649375ef --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp @@ -0,0 +1,314 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fdebug.cpp +// Created by : Steinberg, 1995 +// Description : There are 2 levels of debugging messages: +// DEVELOPMENT During development +// RELEASE Program is shipping. +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "base/source/fdebug.h" + +#if DEVELOPMENT + +#include +#include +#include + +#if SMTG_OS_WINDOWS +#ifndef _WIN32_WINNT +#define _WIN32_WINNT 0x0400 +#endif +#include +#include +#define vsnprintf _vsnprintf +#define snprintf _snprintf + +#elif SMTG_OS_MACOS +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static bool AmIBeingDebugged (void); + +#define THREAD_ALLOC_WATCH 0 // check allocations on specific threads + +#if THREAD_ALLOC_WATCH +mach_port_t watchThreadID = 0; +#endif + +#endif + +AssertionHandler gAssertionHandler = nullptr; +AssertionHandler gPreAssertionHook = nullptr; +DebugPrintLogger gDebugPrintLogger = nullptr; + +namespace boost { +// Define the boost assertion handler to redirect to our assertion handler, +// otherwise it just calls abort(). Note that we don't need to include any boost +// headers for this, it just provides the handler. +void assertion_failed (char const* expr, char const* function, char const* file, long line) +{ +#if DEVELOPMENT + char message[512]; + snprintf (message, 512, "%s at %s, %s:%ld", expr, function, file, line); + if (gAssertionHandler) + { + FDebugBreak (message); + } + else + { + assert (!(const char *)message); + } +#endif +} +} + +//-------------------------------------------------------------------------- +static const int kDebugPrintfBufferSize = 10000; +static bool neverDebugger = false; // so I can switch it off in the debugger... + +//-------------------------------------------------------------------------- +static void printDebugString (const char* string) +{ + if (!string) + return; + + if (gDebugPrintLogger) + { + gDebugPrintLogger (string); + } + else + { +#if SMTG_OS_MACOS + fprintf (stderr, "%s", string); +#elif SMTG_OS_WINDOWS + OutputDebugStringA (string); +#endif + } +} + +//-------------------------------------------------------------------------- +// printf style debugging output +//-------------------------------------------------------------------------- +void FDebugPrint (const char* format, ...) +{ + char string[kDebugPrintfBufferSize]; + va_list marker; + va_start (marker, format); + vsnprintf (string, kDebugPrintfBufferSize, format, marker); + + printDebugString (string); +} + +#if SMTG_OS_WINDOWS +#define AmIBeingDebugged IsDebuggerPresent +#endif + +#if SMTG_OS_LINUX +#include +#include +#include +//-------------------------------------------------------------------------- +static inline bool AmIBeingDebugged () +{ + // TODO: check if GDB or LLDB is attached + return true; +} +#endif + +//-------------------------------------------------------------------------- +// printf style debugging output +//-------------------------------------------------------------------------- +void FDebugBreak (const char* format, ...) +{ + char string[kDebugPrintfBufferSize]; + va_list marker; + va_start (marker, format); + vsnprintf (string, kDebugPrintfBufferSize, format, marker); + + printDebugString (string); + + // The Pre-assertion hook is always called, even if we're not running in the debugger, + // so that we can log asserts without displaying them + if (gPreAssertionHook) + { + gPreAssertionHook (string); + } + + if (neverDebugger) + return; + if (AmIBeingDebugged ()) + { + // do not crash if no debugger present + // If there is an assertion handler defined then let this override the UI + // and tell us whether we want to break into the debugger + bool breakIntoDebugger = true; + if (gAssertionHandler && gAssertionHandler (string) == false) + { + breakIntoDebugger = false; + } + + if (breakIntoDebugger) + { +#if SMTG_OS_WINDOWS + __debugbreak (); // intrinsic version of DebugBreak() +#elif __ppc64__ || __ppc__ || __arm__ + kill (getpid (), SIGINT); +#elif __i386__ || __x86_64__ + { + __asm__ volatile ("int3"); + } +#endif + } + } +} + +//-------------------------------------------------------------------------- +void FPrintLastError (const char* file, int line) +{ +#if SMTG_OS_WINDOWS + LPVOID lpMessageBuffer; + FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, + GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&lpMessageBuffer, 0, NULL); + FDebugPrint ("%s(%d) : %s\n", file, line, lpMessageBuffer); + LocalFree (lpMessageBuffer); +#endif + +#if SMTG_OS_MACOS +#if !__MACH__ + extern int errno; +#endif + FDebugPrint ("%s(%d) : Errno %d\n", file, line, errno); +#endif +} + +#if SMTG_OS_MACOS + +//------------------------------------------------------------------------ +void* operator new (size_t size, int, const char* file, int line) +{ +#if THREAD_ALLOC_WATCH + mach_port_t threadID = mach_thread_self (); + if (watchThreadID == threadID) + { + FDebugPrint ("Watched Thread Allocation : %s (Line:%d)\n", file ? file : "Unknown", line); + } +#endif + try + { + return ::operator new (size); + } + catch (std::bad_alloc exception) + { + FDebugPrint ("bad_alloc exception : %s (Line:%d)", file ? file : "Unknown", line); + } + return (void*)-1; +} + +//------------------------------------------------------------------------ +void* operator new[] (size_t size, int, const char* file, int line) +{ +#if THREAD_ALLOC_WATCH + mach_port_t threadID = mach_thread_self (); + if (watchThreadID == threadID) + { + FDebugPrint ("Watched Thread Allocation : %s (Line:%d)\n", file ? file : "Unknown", line); + } +#endif + try + { + return ::operator new[] (size); + } + catch (std::bad_alloc exception) + { + FDebugPrint ("bad_alloc exception : %s (Line:%d)", file ? file : "Unknown", line); + } + return (void*)-1; +} + +//------------------------------------------------------------------------ +void operator delete (void* p, int, const char* file, int line) +{ + ::operator delete (p); +} + +//------------------------------------------------------------------------ +void operator delete[] (void* p, int, const char* file, int line) +{ + ::operator delete[] (p); +} + +//------------------------------------------------------------------------ +// from Technical Q&A QA1361 (http://developer.apple.com/qa/qa2004/qa1361.html) +//------------------------------------------------------------------------ +bool AmIBeingDebugged (void) +// Returns true if the current process is being debugged (either +// running under the debugger or has a debugger attached post facto). +{ + int mib[4]; + struct kinfo_proc info; + size_t size; + + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + + info.kp_proc.p_flag = 0; + + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid (); + + // Call sysctl. + + size = sizeof (info); + sysctl (mib, sizeof (mib) / sizeof (*mib), &info, &size, NULL, 0); + + // We're being debugged if the P_TRACED flag is set. + return ((info.kp_proc.p_flag & P_TRACED) != 0); +} + +#endif // SMTG_OS_MACOS + +#endif // DEVELOPMENT diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h new file mode 100644 index 00000000..f2b9805e --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h @@ -0,0 +1,233 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fdebug.h +// Created by : Steinberg, 1995 +// Description : There are 2 levels of debugging messages: +// DEVELOPMENT During development +// RELEASE Program is shipping. +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +/** @file base/source/fdebug.h + Debugging tools. + + There are 2 levels of debugging messages: + - DEVELOPMENT + - During development + - RELEASE + - Program is shipping. +*/ +//----------------------------------------------------------------------------- +#pragma once + +#include "pluginterfaces/base/ftypes.h" +#include + +#if SMTG_OS_MACOS +#include +#endif + +//----------------------------------------------------------------------------- +// development / release +//----------------------------------------------------------------------------- +#if !defined (DEVELOPMENT) && !defined (RELEASE) + #ifdef _DEBUG + #define DEVELOPMENT 1 + #elif defined (NDEBUG) + #define RELEASE 1 + #else + #error DEVELOPMENT, RELEASE, _DEBUG, or NDEBUG must be defined! + #endif +#endif + +//----------------------------------------------------------------------------- +#if SMTG_OS_WINDOWS + +/** Disable compiler warning: + * C4291: "No matching operator delete found; memory will not be freed if initialization throws an + * exception. A placement new is used for which there is no placement delete." */ +#if DEVELOPMENT && defined(_MSC_VER) +#pragma warning(disable : 4291) +#pragma warning(disable : 4985) +#endif + +#endif // SMTG_OS_WINDOWS + +#if DEVELOPMENT +//----------------------------------------------------------------------------- +/** If "f" is not true and a debugger is present, send an error string to the debugger for display + and cause a breakpoint exception to occur in the current process. SMTG_ASSERT is removed + completely in RELEASE configuration. So do not pass methods calls to this macro that are expected + to exist in the RELEASE build (for method calls that need to be present in a RELEASE build, use + the VERIFY macros instead)*/ +#define SMTG_ASSERT(f) \ + if (!(f)) \ + FDebugBreak ("%s(%d) : Assert failed: %s\n", __FILE__, __LINE__, #f); + +/** Send "comment" string to the debugger for display. */ +#define SMTG_WARNING(comment) FDebugPrint ("%s(%d) : %s\n", __FILE__, __LINE__, comment); + +/** Send the last error string to the debugger for display. */ +#define SMTG_PRINTSYSERROR FPrintLastError (__FILE__, __LINE__); + +/** If a debugger is present, send string "s" to the debugger for display and + cause a breakpoint exception to occur in the current process. */ +#define SMTG_DEBUGSTR(s) FDebugBreak (s); + +/** Use VERIFY for calling methods "f" having a bool result (expecting them to return 'true') + The call of "f" is not removed in RELEASE builds, only the result verification. eg: SMTG_VERIFY + (isValid ()) */ +#define SMTG_VERIFY(f) SMTG_ASSERT (f) + +/** Use VERIFY_IS for calling methods "f" and expect a certain result "r". + The call of "f" is not removed in RELEASE builds, only the result verification. eg: + SMTG_VERIFY_IS (callMethod (), kResultOK) */ +#define SMTG_VERIFY_IS(f, r) \ + if ((f) != (r)) \ + FDebugBreak ("%s(%d) : Assert failed: %s\n", __FILE__, __LINE__, #f); + +/** Use VERIFY_NOT for calling methods "f" and expect the result to be anything else but "r". + The call of "f" is not removed in RELEASE builds, only the result verification. eg: + SMTG_VERIFY_NOT (callMethod (), kResultError) */ +#define SMTG_VERIFY_NOT(f, r) \ + if ((f) == (r)) \ + FDebugBreak ("%s(%d) : Assert failed: %s\n", __FILE__, __LINE__, #f); + +/** @name Shortcut macros for sending strings to the debugger for display. + First parameter is always the format string (printf like). +*/ + +///@{ +#define DBPRT0(a) FDebugPrint (a); +#define DBPRT1(a, b) FDebugPrint (a, b); +#define DBPRT2(a, b, c) FDebugPrint (a, b, c); +#define DBPRT3(a, b, c, d) FDebugPrint (a, b, c, d); +#define DBPRT4(a, b, c, d, e) FDebugPrint (a, b, c, d, e); +#define DBPRT5(a, b, c, d, e, f) FDebugPrint (a, b, c, d, e, f); +///@} + +/** @name Helper functions for the above defined macros. + + You shouldn't use them directly (if you do so, don't forget "#if DEVELOPMENT")! + It is recommended to use the macros instead. +*/ +///@{ +void FDebugPrint (const char* format, ...); +void FDebugBreak (const char* format, ...); +void FPrintLastError (const char* file, int line); +///@} + +/** @name Provide a custom assertion handler and debug print handler, eg + so that we can provide an assert with a custom dialog, or redirect + the debug output to a file or stream. +*/ +///@{ +typedef bool (*AssertionHandler) (const char* message); +extern AssertionHandler gAssertionHandler; +extern AssertionHandler gPreAssertionHook; +typedef void (*DebugPrintLogger) (const char* message); +extern DebugPrintLogger gDebugPrintLogger; +///@} + +/** Definition of memory allocation macros: + Use "NEW" to allocate storage for individual objects. + Use "NEWVEC" to allocate storage for an array of objects. */ +#if SMTG_OS_MACOS +void* operator new (size_t, int, const char*, int); +void* operator new[] (size_t, int, const char*, int); +void operator delete (void* p, int, const char* file, int line); +void operator delete[] (void* p, int, const char* file, int line); +#ifndef NEW +#define NEW new (1, __FILE__, __LINE__) +#define NEWVEC new (1, __FILE__, __LINE__) +#endif + +#define DEBUG_NEW DEBUG_NEW_LEAKS + +#elif SMTG_OS_WINDOWS && defined(_MSC_VER) +#ifndef NEW +void* operator new (size_t, int, const char*, int); +#define NEW new (1, __FILE__, __LINE__) +#define NEWVEC new (1, __FILE__, __LINE__) +#endif + +#else +#ifndef NEW +#define NEW new +#define NEWVEC new +#endif +#endif + +#else +/** if DEVELOPMENT is not set, these macros will do nothing. */ +#define SMTG_ASSERT(f) +#define SMTG_WARNING(s) +#define SMTG_PRINTSYSERROR +#define SMTG_DEBUGSTR(s) +#define SMTG_VERIFY(f) f; +#define SMTG_VERIFY_IS(f, r) f; +#define SMTG_VERIFY_NOT(f, r) f; + +#define DBPRT0(a) +#define DBPRT1(a, b) +#define DBPRT2(a, b, c) +#define DBPRT3(a, b, c, d) +#define DBPRT4(a, b, c, d, e) +#define DBPRT5(a, b, c, d, e, f) + +#ifndef NEW +#define NEW new +#define NEWVEC new + +#endif +#endif + +#if SMTG_CPPUNIT_TESTING +#define SMTG_IS_TEST true +#else +#define SMTG_IS_TEST false +#endif + +#if !SMTG_RENAME_ASSERT +#if SMTG_OS_WINDOWS +#undef ASSERT +#endif + +#define ASSERT SMTG_ASSERT +#define WARNING SMTG_WARNING +#define DEBUGSTR SMTG_DEBUGSTR +#define VERIFY SMTG_VERIFY +#define VERIFY_IS SMTG_VERIFY_IS +#define VERIFY_NOT SMTG_VERIFY_NOT +#define PRINTSYSERROR SMTG_PRINTSYSERROR +#endif diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp new file mode 100644 index 00000000..89240b74 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp @@ -0,0 +1,184 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fobject.cpp +// Created by : Steinberg, 2008 +// Description : Basic Object implementing FUnknown +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "base/source/fobject.h" +#include "base/thread/include/flock.h" + +#include + +namespace Steinberg { + +IUpdateHandler* FObject::gUpdateHandler = 0; + +//------------------------------------------------------------------------ +const FUID FObject::iid; + +//------------------------------------------------------------------------ +struct FObjectIIDInitializer +{ + // the object iid is always generated so that different components + // only can cast to their own objects + // this initializer must be after the definition of FObject::iid, otherwise + // the default constructor of FUID will clear the generated iid + FObjectIIDInitializer () + { + const_cast (FObject::iid).generate (); + } +} gFObjectIidInitializer; + +//------------------------------------------------------------------------ +uint32 PLUGIN_API FObject::addRef () +{ + return FUnknownPrivate::atomicAdd (refCount, 1); +} + +//------------------------------------------------------------------------ +uint32 PLUGIN_API FObject::release () +{ + if (FUnknownPrivate::atomicAdd (refCount, -1) == 0) + { + refCount = -1000; + delete this; + return 0; + } + return refCount; +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API FObject::queryInterface (const TUID _iid, void** obj) +{ + QUERY_INTERFACE (_iid, obj, FUnknown::iid, FUnknown) + QUERY_INTERFACE (_iid, obj, IDependent::iid, IDependent) + QUERY_INTERFACE (_iid, obj, FObject::iid, FObject) + *obj = 0; + return kNoInterface; +} + +//------------------------------------------------------------------------ +void FObject::addDependent (IDependent* dep) +{ + if (gUpdateHandler) + gUpdateHandler->addDependent (unknownCast (), dep); +} + +//------------------------------------------------------------------------ +void FObject::removeDependent (IDependent* dep) +{ + if (gUpdateHandler) + gUpdateHandler->removeDependent (unknownCast (), dep); +} + +//------------------------------------------------------------------------ +void FObject::changed (int32 msg) +{ + if (gUpdateHandler) + gUpdateHandler->triggerUpdates (unknownCast (), msg); + else + updateDone (msg); +} + +//------------------------------------------------------------------------ +void FObject::deferUpdate (int32 msg) +{ + if (gUpdateHandler) + gUpdateHandler->deferUpdates (unknownCast (), msg); + else + updateDone (msg); +} + +//------------------------------------------------------------------------ +/** Automatic creation and destruction of singleton instances. */ +//------------------------------------------------------------------------ +namespace Singleton +{ + typedef std::vector ObjectVector; + ObjectVector* singletonInstances = 0; + bool singletonsTerminated = false; + Steinberg::Base::Thread::FLock* singletonsLock; + + bool isTerminated () {return singletonsTerminated;} + + void lockRegister () + { + if (!singletonsLock) // assume first call not from multiple threads + singletonsLock = NEW Steinberg::Base::Thread::FLock; + singletonsLock->lock (); + } + void unlockRegister () + { + singletonsLock->unlock (); + } + + void registerInstance (FObject** o) + { + SMTG_ASSERT (singletonsTerminated == false) + if (singletonsTerminated == false) + { + if (singletonInstances == 0) + singletonInstances = NEW std::vector; + singletonInstances->push_back (o); + } + } + + struct Deleter + { + ~Deleter () + { + singletonsTerminated = true; + if (singletonInstances) + { + for (ObjectVector::iterator it = singletonInstances->begin (), + end = singletonInstances->end (); + it != end; ++it) + { + FObject** obj = (*it); + (*obj)->release (); + *obj = 0; + obj = 0; + } + + delete singletonInstances; + singletonInstances = 0; + } + delete singletonsLock; + singletonsLock = 0; + } + } deleter; +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h new file mode 100644 index 00000000..c470846a --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h @@ -0,0 +1,518 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fobject.h +// Created by : Steinberg, 2008 +// Description : Basic Object implementing FUnknown +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +//------------------------------------------------------------------------ +/** @file base/source/fobject.h + Basic Object implementing FUnknown. */ +//------------------------------------------------------------------------ +#pragma once + +#include "pluginterfaces/base/funknown.h" +#include "pluginterfaces/base/iupdatehandler.h" +//#include "base/source/basefwd.h" +#include "base/source/fdebug.h" // NEW + + +namespace Steinberg { + +//---------------------------------- + +typedef FIDString FClassID; + +//------------------------------------------------------------------------ +// Basic FObject - implements FUnknown + IDependent +//------------------------------------------------------------------------ +/** Implements FUnknown and IDependent. + +FObject is a polymorphic class that implements IDependent (of SKI module) +and therefore derived from FUnknown, which is the most abstract base class of all. + +All COM-like virtual methods of FUnknown such as queryInterface(), addRef(), release() +are implemented here. On top of that, dependency-related methods are implemented too. + +Pointer casting is done via the template methods FCast, either FObject to FObject or +FUnknown to FObject. + +FObject supports a new singleton concept, therefore these objects are deleted automatically upon program termination. + +- Runtime type information: An object can be queried at runtime, of what class +it is. To do this correctly, every class must override some methods. This +is simplified by using the OBJ_METHODS macros + + +@see + - FUnknown + - IDependent + - IUpdateHandler +*/ +//------------------------------------------------------------------------ +class FObject : public IDependent +{ +public: + //------------------------------------------------------------------------ + FObject () : refCount (1) {} ///< default constructor... + FObject (const FObject&) : refCount (1) {} ///< overloaded constructor... + virtual ~FObject () {} ///< destructor... + FObject& operator = (const FObject&) { return *this; } ///< overloads operator "=" as the reference assignment + + // OBJECT_METHODS + static inline FClassID getFClassID () {return "FObject";} ///< return Class ID as an ASCII string (statically) + virtual FClassID isA () const {return FObject::getFClassID ();} ///< a local alternative to getFClassID () + virtual bool isA (FClassID s) const {return isTypeOf (s, false);} ///< evaluates if the passed ID is of the FObject type + virtual bool isTypeOf (FClassID s, bool /*askBaseClass*/ = true) const {return classIDsEqual (s, FObject::getFClassID ());} + ///< evaluates if the passed ID is of the FObject type + int32 getRefCount () {return refCount;} ///< returns the current interface reference count + FUnknown* unknownCast () {return this;} ///< get FUnknown interface from object + + // FUnknown + virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) SMTG_OVERRIDE; ///< please refer to FUnknown::queryInterface () + virtual uint32 PLUGIN_API addRef () SMTG_OVERRIDE; ///< please refer to FUnknown::addref () + virtual uint32 PLUGIN_API release () SMTG_OVERRIDE; ///< please refer to FUnknown::release () + + // IDependent + virtual void PLUGIN_API update (FUnknown* /*changedUnknown*/, int32 /*message*/) SMTG_OVERRIDE {} + ///< empty virtual method that should be overridden by derived classes for data updates upon changes + // IDependency + virtual void addDependent (IDependent* dep); ///< adds dependency to the object + virtual void removeDependent (IDependent* dep); ///< removes dependency from the object + virtual void changed (int32 msg = kChanged); ///< Inform all dependents, that the object has changed. + virtual void deferUpdate (int32 msg = kChanged); ///< Similar to triggerUpdates, except only delivered in idle (usefull in collecting updates). + virtual void updateDone (int32 /* msg */) {} ///< empty virtual method that should be overridden by derived classes + virtual bool isEqualInstance (FUnknown* d) {return this == d;} + + static void setUpdateHandler (IUpdateHandler* handler) {gUpdateHandler = handler;} ///< set method for the local attribute + static IUpdateHandler* getUpdateHandler () {return gUpdateHandler;} ///< get method for the local attribute + + // static helper functions + static inline bool classIDsEqual (FClassID ci1, FClassID ci2); ///< compares (evaluates) 2 class IDs + static inline FObject* unknownToObject (FUnknown* unknown); ///< pointer conversion from FUnknown to FObject + + /** Special UID that is used to cast an FUnknown pointer to a FObject */ + static const FUID iid; + +//------------------------------------------------------------------------ +protected: + int32 refCount; ///< COM-model local reference count + + static IUpdateHandler* gUpdateHandler; +}; + + +//------------------------------------------------------------------------ +// conversion from FUnknown to FObject +//------------------------------------------------------------------------ +inline FObject* FObject::unknownToObject (FUnknown* unknown) +{ + FObject* object = 0; + if (unknown) + { + unknown->queryInterface (FObject::iid, (void**)&object); + if (object) + object->release (); // queryInterface has added ref + } + return object; +} + +//------------------------------------------------------------------------ +inline bool FObject::classIDsEqual (FClassID ci1, FClassID ci2) +{ + return (ci1 && ci2) ? (strcmp (ci1, ci2) == 0) : false; +} + +//----------------------------------------------------------------------- +/** FCast overload 1 - FObject to FObject */ +//----------------------------------------------------------------------- +template +inline C* FCast (const FObject* object) +{ + if (object && object->isTypeOf (C::getFClassID (), true)) + return (C*) object; + return 0; +} + +//----------------------------------------------------------------------- +/** FCast overload 2 - FUnknown to FObject */ +//----------------------------------------------------------------------- +template +inline C* FCast (FUnknown* unknown) +{ + FObject* object = FObject::unknownToObject (unknown); + return FCast (object); +} + +//----------------------------------------------------------------------- +/** FUCast - casting from FUnknown to Interface */ +//----------------------------------------------------------------------- +template +inline C* FUCast (FObject* object) +{ + return FUnknownPtr (object ? object->unknownCast () : 0); +} + +template +inline C* FUCast (FUnknown* object) +{ + return FUnknownPtr (object); +} + +//------------------------------------------------------------------------ +/** @name Convenience methods that call release or delete respectively + on a pointer if it is non-zero, and then set the pointer to zero. + Note: you should prefer using IPtr or OPtr instead of these methods + whenever possible. + Examples: + @code + ~Foo () + { + // instead of ... + if (somePointer) + { + somePointer->release (); + somePointer = 0; + } + // ... just being lazy I write + SafeRelease (somePointer) + } + @endcode +*/ +///@{ +//----------------------------------------------------------------------- +template +inline void SafeRelease (I *& ptr) +{ + if (ptr) + { + ptr->release (); + ptr = 0; + } +} + +//----------------------------------------------------------------------- +template +inline void SafeRelease (IPtr & ptr) +{ + ptr = 0; +} + + +//----------------------------------------------------------------------- +template +inline void SafeDelete (T *& ptr) +{ + if (ptr) + { + delete ptr; + ptr = 0; + } +} +///@} + +//----------------------------------------------------------------------- +template +inline void AssignShared (T*& dest, T* newPtr) +{ + if (dest == newPtr) + return; + + if (dest) + dest->release (); + dest = newPtr; + if (dest) + dest->addRef (); +} + +//----------------------------------------------------------------------- +template +inline void AssignSharedDependent (IDependent* _this, T*& dest, T* newPtr) +{ + if (dest == newPtr) + return; + + if (dest) + dest->removeDependent (_this); + AssignShared (dest, newPtr); + if (dest) + dest->addDependent (_this); +} + +//----------------------------------------------------------------------- +template +inline void AssignSharedDependent (IDependent* _this, IPtr& dest, T* newPtr) +{ + if (dest == newPtr) + return; + + if (dest) + dest->removeDependent (_this); + dest = newPtr; + if (dest) + dest->addDependent (_this); +} + +//----------------------------------------------------------------------- +template +inline void SafeReleaseDependent (IDependent* _this, T*& dest) +{ + if (dest) + dest->removeDependent (_this); + SafeRelease (dest); +} + +//----------------------------------------------------------------------- +template +inline void SafeReleaseDependent (IDependent* _this, IPtr& dest) +{ + if (dest) + dest->removeDependent (_this); + SafeRelease (dest); +} + + +//------------------------------------------------------------------------ +/** Automatic creation and destruction of singleton instances. */ +namespace Singleton { + /** registers an instance (type FObject) */ + void registerInstance (FObject** o); + + /** Returns true when singleton instances were already released. */ + bool isTerminated (); + + /** lock and unlock the singleton registration for multi-threading safety */ + void lockRegister (); + void unlockRegister (); +} + +//------------------------------------------------------------------------ +} // namespace Steinberg + +//----------------------------------------------------------------------- +#define SINGLETON(ClassName) \ + static ClassName* instance (bool create = true) \ + { \ + static Steinberg::FObject* inst = nullptr; \ + if (inst == nullptr && create && Steinberg::Singleton::isTerminated () == false) \ + { \ + Steinberg::Singleton::lockRegister (); \ + if (inst == nullptr) \ + { \ + inst = NEW ClassName; \ + Steinberg::Singleton::registerInstance (&inst); \ + } \ + Steinberg::Singleton::unlockRegister (); \ + } \ + return (ClassName*)inst; \ + } + +//----------------------------------------------------------------------- +#define OBJ_METHODS(className, baseClass) \ + static inline Steinberg::FClassID getFClassID () {return (#className);} \ + virtual Steinberg::FClassID isA () const SMTG_OVERRIDE {return className::getFClassID ();} \ + virtual bool isA (Steinberg::FClassID s) const SMTG_OVERRIDE {return isTypeOf (s, false);} \ + virtual bool isTypeOf (Steinberg::FClassID s, bool askBaseClass = true) const SMTG_OVERRIDE \ + { return (classIDsEqual (s, #className) ? true : (askBaseClass ? baseClass::isTypeOf (s, true) : false)); } + +//------------------------------------------------------------------------ +/** Delegate refcount functions to BaseClass. + BaseClase must implement ref counting. +*/ +//------------------------------------------------------------------------ +#define REFCOUNT_METHODS(BaseClass) \ +virtual Steinberg::uint32 PLUGIN_API addRef ()SMTG_OVERRIDE{ return BaseClass::addRef (); } \ +virtual Steinberg::uint32 PLUGIN_API release ()SMTG_OVERRIDE{ return BaseClass::release (); } + +//------------------------------------------------------------------------ +/** @name Macros to implement FUnknown::queryInterface (). + + Examples: + @code + class Foo : public FObject, public IFoo2, public IFoo3 + { + ... + DEFINE_INTERFACES + DEF_INTERFACE (IFoo2) + DEF_INTERFACE (IFoo3) + END_DEFINE_INTERFACES (FObject) + REFCOUNT_METHODS(FObject) + // Implement IFoo2 interface ... + // Implement IFoo3 interface ... + ... + }; + @endcode +*/ +///@{ +//------------------------------------------------------------------------ +/** Start defining interfaces. */ +//------------------------------------------------------------------------ +#define DEFINE_INTERFACES \ +Steinberg::tresult PLUGIN_API queryInterface (const Steinberg::TUID iid, void** obj) SMTG_OVERRIDE \ +{ + +//------------------------------------------------------------------------ +/** Add a interfaces. */ +//------------------------------------------------------------------------ +#define DEF_INTERFACE(InterfaceName) \ + QUERY_INTERFACE (iid, obj, InterfaceName::iid, InterfaceName) + +//------------------------------------------------------------------------ +/** End defining interfaces. */ +//------------------------------------------------------------------------ +#define END_DEFINE_INTERFACES(BaseClass) \ + return BaseClass::queryInterface (iid, obj); \ +} +///@} + +//------------------------------------------------------------------------ +/** @name Convenient macros to implement Steinberg::FUnknown::queryInterface (). + Examples: + @code + class Foo : public FObject, public IFoo2, public IFoo3 + { + ... + DEF_INTERFACES_2(IFoo2,IFoo3,FObject) + REFCOUNT_METHODS(FObject) + ... + }; + @endcode +*/ +///@{ +//------------------------------------------------------------------------ +#define DEF_INTERFACES_1(InterfaceName,BaseClass) \ +DEFINE_INTERFACES \ +DEF_INTERFACE (InterfaceName) \ +END_DEFINE_INTERFACES (BaseClass) + +//------------------------------------------------------------------------ +#define DEF_INTERFACES_2(InterfaceName1,InterfaceName2,BaseClass) \ +DEFINE_INTERFACES \ +DEF_INTERFACE (InterfaceName1) \ +DEF_INTERFACE (InterfaceName2) \ +END_DEFINE_INTERFACES (BaseClass) + +//------------------------------------------------------------------------ +#define DEF_INTERFACES_3(InterfaceName1,InterfaceName2,InterfaceName3,BaseClass) \ +DEFINE_INTERFACES \ +DEF_INTERFACE (InterfaceName1) \ +DEF_INTERFACE (InterfaceName2) \ +DEF_INTERFACE (InterfaceName3) \ +END_DEFINE_INTERFACES (BaseClass) + +//------------------------------------------------------------------------ +#define DEF_INTERFACES_4(InterfaceName1,InterfaceName2,InterfaceName3,InterfaceName4,BaseClass) \ + DEFINE_INTERFACES \ + DEF_INTERFACE (InterfaceName1) \ + DEF_INTERFACE (InterfaceName2) \ + DEF_INTERFACE (InterfaceName3) \ + DEF_INTERFACE (InterfaceName4) \ + END_DEFINE_INTERFACES (BaseClass) +///@} + +//------------------------------------------------------------------------ +/** @name Convenient macros to implement Steinberg::FUnknown methods. + Examples: + @code + class Foo : public FObject, public IFoo2, public IFoo3 + { + ... + FUNKNOWN_METHODS2(IFoo2,IFoo3,FObject) + ... + }; + @endcode +*/ +///@{ +#define FUNKNOWN_METHODS(InterfaceName,BaseClass) \ +DEF_INTERFACES_1(InterfaceName,BaseClass) \ +REFCOUNT_METHODS(BaseClass) + +#define FUNKNOWN_METHODS2(InterfaceName1,InterfaceName2,BaseClass) \ +DEF_INTERFACES_2(InterfaceName1,InterfaceName2,BaseClass) \ +REFCOUNT_METHODS(BaseClass) + +#define FUNKNOWN_METHODS3(InterfaceName1,InterfaceName2,InterfaceName3,BaseClass) \ +DEF_INTERFACES_3(InterfaceName1,InterfaceName2,InterfaceName3,BaseClass) \ +REFCOUNT_METHODS(BaseClass) + +#define FUNKNOWN_METHODS4(InterfaceName1,InterfaceName2,InterfaceName3,InterfaceName4,BaseClass) \ +DEF_INTERFACES_4(InterfaceName1,InterfaceName2,InterfaceName3,InterfaceName4,BaseClass) \ +REFCOUNT_METHODS(BaseClass) +///@} + + +//------------------------------------------------------------------------ +//------------------------------------------------------------------------ +#if COM_COMPATIBLE +//------------------------------------------------------------------------ +/** @name Macros to implement IUnknown interfaces with FObject. + Examples: + @code + class MyEnumFormat : public FObject, IEnumFORMATETC + { + ... + COM_UNKNOWN_METHODS (IEnumFORMATETC, IUnknown) + ... + }; + @endcode +*/ +///@{ +//------------------------------------------------------------------------ +#define IUNKNOWN_REFCOUNT_METHODS(BaseClass) \ +STDMETHOD_ (ULONG, AddRef) (void) {return BaseClass::addRef ();} \ +STDMETHOD_ (ULONG, Release) (void) {return BaseClass::release ();} + +//------------------------------------------------------------------------ +#define COM_QUERY_INTERFACE(iid, obj, InterfaceName) \ +if (riid == __uuidof(InterfaceName)) \ +{ \ + addRef (); \ + *obj = (InterfaceName*)this; \ + return kResultOk; \ +} + +//------------------------------------------------------------------------ +#define COM_OBJECT_QUERY_INTERFACE(InterfaceName,BaseClass) \ +STDMETHOD (QueryInterface) (REFIID riid, void** object) \ +{ \ + COM_QUERY_INTERFACE (riid, object, InterfaceName) \ + return BaseClass::queryInterface ((FIDString)&riid, object); \ +} + +//------------------------------------------------------------------------ +#define COM_UNKNOWN_METHODS(InterfaceName,BaseClass) \ +COM_OBJECT_QUERY_INTERFACE(InterfaceName,BaseClass) \ +IUNKNOWN_REFCOUNT_METHODS(BaseClass) +///@} + +#endif // COM_COMPATIBLE diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp new file mode 100644 index 00000000..acd8f29a --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp @@ -0,0 +1,726 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fstreamer.cpp +// Created by : Steinberg, 15.12.2005 +// Description : Extract of typed stream i/o methods from FStream +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "fstreamer.h" + +#include "base/source/fstring.h" +#include "base/source/fbuffer.h" +#include "pluginterfaces/base/ibstream.h" + +#ifndef UNICODE +#include "pluginterfaces/base/futils.h" +#endif + +namespace Steinberg { + +//------------------------------------------------------------------------ +// IBStreamer +//------------------------------------------------------------------------ +IBStreamer::IBStreamer (IBStream* stream, int16 _byteOrder) +: FStreamer (_byteOrder) +, stream (stream) +{} + +//------------------------------------------------------------------------ +TSize IBStreamer::readRaw (void* buffer, TSize size) +{ + int32 numBytesRead = 0; + stream->read (buffer, (int32)size, &numBytesRead); + return numBytesRead; +} + +//------------------------------------------------------------------------ +TSize IBStreamer::writeRaw (const void* buffer, TSize size) +{ + int32 numBytesWritten = 0; + stream->write ((void*)buffer, (int32)size, &numBytesWritten); + return numBytesWritten; +} + +//------------------------------------------------------------------------ +int64 IBStreamer::seek (int64 pos, FSeekMode mode) +{ + int64 result = -1; + stream->seek (pos, mode, &result); + return result; +} + +//------------------------------------------------------------------------ +int64 IBStreamer::tell () +{ + int64 pos = 0; + stream->tell (&pos); + return pos; +} + +//------------------------------------------------------------------------ +// FStreamSizeHolder Implementation +//------------------------------------------------------------------------ +FStreamSizeHolder::FStreamSizeHolder (FStreamer &s) +: stream (s), sizePos (-1) +{} + +//------------------------------------------------------------------------ +void FStreamSizeHolder::beginWrite () +{ + sizePos = stream.tell (); + stream.writeInt32 (0L); +} + +//------------------------------------------------------------------------ +int32 FStreamSizeHolder::endWrite () +{ + if (sizePos < 0) + return 0; + + int64 currentPos = stream.tell (); + + stream.seek (sizePos, kSeekSet); + int32 size = int32 (currentPos - sizePos - sizeof (int32)); + stream.writeInt32 (size); + + stream.seek (currentPos, kSeekSet); + return size; +} + +//------------------------------------------------------------------------ +int32 FStreamSizeHolder::beginRead () +{ + sizePos = stream.tell (); + int32 size = 0; + stream.readInt32 (size); + sizePos += size + sizeof (int32); + return size; +} + +//------------------------------------------------------------------------ +void FStreamSizeHolder::endRead () +{ + if (sizePos >= 0) + stream.seek (sizePos, kSeekSet); +} + +//------------------------------------------------------------------------ +// FStreamer +//------------------------------------------------------------------------ +FStreamer::FStreamer (int16 _byteOrder) +: byteOrder (_byteOrder) +{} + +// int8 / char ----------------------------------------------------------- +//------------------------------------------------------------------------ +bool FStreamer::writeChar8 (char8 c) +{ + return writeRaw ((void*)&c, sizeof (char8)) == sizeof (char8); +} + +//------------------------------------------------------------------------ +bool FStreamer::readChar8 (char8& c) +{ + return readRaw ((void*)&c, sizeof (char8)) == sizeof (char8); +} + +//------------------------------------------------------------------------ +bool FStreamer::writeUChar8 (unsigned char c) +{ + return writeRaw ((void*)&c, sizeof (unsigned char)) == sizeof (unsigned char); +} + +//------------------------------------------------------------------------ +bool FStreamer::readUChar8 (unsigned char& c) +{ + return readRaw ((void*)&c, sizeof (unsigned char)) == sizeof (unsigned char); +} + +//------------------------------------------------------------------------ +bool FStreamer::writeChar16 (char16 c) +{ + if (BYTEORDER != byteOrder) + SWAP_16 (c); + return writeRaw ((void*)&c, sizeof (char16)) == sizeof (char16); +} + +//------------------------------------------------------------------------ +bool FStreamer::readChar16 (char16& c) +{ + if (readRaw ((void*)&c, sizeof (char16)) == sizeof (char16)) + { + if (BYTEORDER != byteOrder) + SWAP_16 (c); + return true; + } + c = 0; + return false; +} + +// int16 ----------------------------------------------------------------- +//------------------------------------------------------------------------ +bool FStreamer::writeInt16 (int16 i) +{ + if (BYTEORDER != byteOrder) + SWAP_16 (i); + return writeRaw ((void*)&i, sizeof (int16)) == sizeof (int16); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt16 (int16& i) +{ + if (readRaw ((void*)&i, sizeof (int16)) == sizeof (int16)) + { + if (BYTEORDER != byteOrder) + SWAP_16 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt16Array (const int16* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt16 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt16Array (int16* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt16 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt16u (uint16 i) +{ + if (BYTEORDER != byteOrder) + SWAP_16 (i); + return writeRaw ((void*)&i, sizeof (uint16)) == sizeof (uint16); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt16u (uint16& i) +{ + if (readRaw ((void*)&i, sizeof (uint16)) == sizeof (uint16)) + { + if (BYTEORDER != byteOrder) + SWAP_16 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt16uArray (const uint16* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt16u (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt16uArray (uint16* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt16u (array[i])) + return false; + } + return true; +} + +// int32 ----------------------------------------------------------------- +//------------------------------------------------------------------------ +bool FStreamer::writeInt32 (int32 i) +{ + if (BYTEORDER != byteOrder) + SWAP_32 (i); + return writeRaw ((void*)&i, sizeof (int32)) == sizeof (int32); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt32 (int32& i) +{ + if (readRaw ((void*)&i, sizeof (int32)) == sizeof (int32)) + { + if (BYTEORDER != byteOrder) + SWAP_32 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt32Array (const int32* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt32 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt32Array (int32* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt32 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt32u (uint32 i) +{ + if (BYTEORDER != byteOrder) + SWAP_32 (i); + return writeRaw ((void*)&i, sizeof (uint32)) == sizeof (uint32); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt32u (uint32& i) +{ + if (readRaw ((void*)&i, sizeof (uint32)) == sizeof (uint32)) + { + if (BYTEORDER != byteOrder) + SWAP_32 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt32uArray (const uint32* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt32u (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt32uArray (uint32* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt32u (array[i])) + return false; + } + return true; +} + +// int64 ----------------------------------------------------------------- +//------------------------------------------------------------------------ +bool FStreamer::writeInt64 (int64 i) +{ + if (BYTEORDER != byteOrder) + SWAP_64 (i); + return writeRaw ((void*)&i, sizeof (int64)) == sizeof (int64); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt64 (int64& i) +{ + if (readRaw ((void*)&i, sizeof (int64)) == sizeof (int64)) + { + if (BYTEORDER != byteOrder) + SWAP_64 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt64Array (const int64* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt64 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt64Array (int64* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt64 (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt64u (uint64 i) +{ + if (BYTEORDER != byteOrder) + SWAP_64 (i); + return writeRaw ((void*)&i, sizeof (uint64)) == sizeof (uint64); +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt64u (uint64& i) +{ + if (readRaw ((void*)&i, sizeof (uint64)) == sizeof (uint64)) + { + if (BYTEORDER != byteOrder) + SWAP_64 (i); + return true; + } + i = 0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeInt64uArray (const uint64* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeInt64u (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readInt64uArray (uint64* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readInt64u (array[i])) + return false; + } + return true; +} + +// float / double -------------------------------------------------------- +//------------------------------------------------------------------------ +bool FStreamer::writeFloat (float f) +{ + if (BYTEORDER != byteOrder) + SWAP_32 (f); + return writeRaw ((void*)&f, sizeof (float)) == sizeof (float); +} + +//------------------------------------------------------------------------ +bool FStreamer::readFloat (float& f) +{ + if (readRaw ((void*)&f, sizeof (float)) == sizeof (float)) + { + if (BYTEORDER != byteOrder) + SWAP_32 (f); + return true; + } + f = 0.f; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeFloatArray (const float* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeFloat (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readFloatArray (float* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readFloat (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeDouble (double d) +{ + if (BYTEORDER != byteOrder) + SWAP_64 (d); + return writeRaw ((void*)&d, sizeof (double)) == sizeof (double); +} + +//------------------------------------------------------------------------ +bool FStreamer::readDouble (double& d) +{ + if (readRaw ((void*)&d, sizeof (double)) == sizeof (double)) + { + if (BYTEORDER != byteOrder) + SWAP_64 (d); + return true; + } + d = 0.0; + return false; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeDoubleArray (const double* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!writeDouble (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readDoubleArray (double* array, int32 count) +{ + for (int32 i = 0; i < count; i++) + { + if (!readDouble (array[i])) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::readBool (bool& b) +{ + int16 v = 0; + bool res = readInt16 (v); + b = (v != 0); + return res; +} + +//------------------------------------------------------------------------ +bool FStreamer::writeBool (bool b) +{ + return writeInt16 ((int16)b); +} + +//------------------------------------------------------------------------ +TSize FStreamer::writeString8 (const char8* ptr, bool terminate) +{ + TSize size = strlen (ptr); + if (terminate) // write \0 + size++; + + return writeRaw ((void*)ptr, size); +} + +//------------------------------------------------------------------------ +TSize FStreamer::readString8 (char8* ptr, TSize size) +{ + TSize i = 0; + char8 c = 0; + while (i < size) + { + if (readRaw ((void*)&c, sizeof (char)) != sizeof (char)) + break; + ptr[i] = c; + i++; + if (c == '\n' || c == '\0') + break; + } + if (c == '\n' && ptr[i - 2] == '\r') + ptr[i - 2] = 0; + if (i < size) + ptr[i] = 0; + else + ptr[size - 1] = 0; + + return strlen (ptr); +} + +//------------------------------------------------------------------------ +bool FStreamer::writeStringUtf8 (const tchar* ptr) +{ + bool isUtf8 = false; + + String str (ptr); + if (str.isAsciiString () == false) + { + str.toMultiByte (kCP_Utf8); + isUtf8 = true; + } + else + { + str.toMultiByte (); + } + + if (isUtf8) + if (writeRaw (kBomUtf8, kBomUtf8Length) != kBomUtf8Length) + return false; + + TSize size = str.length () + 1; + if (writeRaw (str.text8 (), size) != size) + return false; + + return true; +} + +//------------------------------------------------------------------------ +int32 FStreamer::readStringUtf8 (tchar* ptr, int32 nChars) +{ + char8 c = 0; + + ptr [0] = 0; + + Buffer tmp; + tmp.setDelta (1024); + + while (true) + { + if (readRaw ((void*)&c, sizeof (char)) != sizeof (char)) + break; + tmp.put (c); + if (c == '\0') + break; + } + + char8* source = tmp.int8Ptr (); + uint32 codePage = kCP_Default; // for legacy take default page if no utf8 bom is present... + if (tmp.getFillSize () > 2) + { + if (memcmp (source, kBomUtf8, kBomUtf8Length) == 0) + { + codePage = kCP_Utf8; + source += 3; + } + } + + if (tmp.getFillSize () > 1) + { +#ifdef UNICODE + ConstString::multiByteToWideString (ptr, source, nChars, codePage); +#else + if (codePage == kCP_Utf8) + { + Buffer wideBuffer (tmp.getFillSize () * 3); + ConstString::multiByteToWideString (wideBuffer.wcharPtr (), source, wideBuffer.getSize () / 2, kCP_Utf8); + ConstString::wideStringToMultiByte (ptr, wideBuffer.wcharPtr (), nChars); + } + else + { + memcpy (ptr, source, Min (nChars, tmp.getFillSize ())); + } +#endif + } + + ptr[nChars - 1] = 0; + return ConstString (ptr).length (); +} + +//------------------------------------------------------------------------ +bool FStreamer::writeStr8 (const char8* s) +{ + int32 length = (s) ? (int32) strlen (s) + 1 : 0; + if (!writeInt32 (length)) + return false; + + if (length > 0) + return writeRaw (s, sizeof (char8) * length) == static_cast(sizeof (char8) * length); + + return true; +} + +//------------------------------------------------------------------------ +int32 FStreamer::getStr8Size (const char8* s) +{ + return sizeof (int32) + (int32)strlen (s) + 1; +} + +//------------------------------------------------------------------------ +char8* FStreamer::readStr8 () +{ + int32 length; + if (!readInt32 (length)) + return 0; + + // check corruption + if (length > 262144) + return 0; + + char8* s = (length > 0) ? NEWVEC char8[length] : 0; + if (s) + readRaw (s, length * sizeof (char8)); + return s; +} + +//------------------------------------------------------------------------ +bool FStreamer::skip (uint32 bytes) +{ + int8 tmp; + while (bytes-- > 0) + { + if (readInt8 (tmp) == false) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +bool FStreamer::pad (uint32 bytes) +{ + while (bytes-- > 0) + { + if (writeInt8 (0) == false) + return false; + } + return true; +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h new file mode 100644 index 00000000..a0fde7e3 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h @@ -0,0 +1,242 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fstreamer.h +// Created by : Steinberg, 12/2005 +// Description : Extract of typed stream i/o methods from FStream +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/funknown.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +enum FSeekMode +{ + kSeekSet, + kSeekCurrent, + kSeekEnd +}; + +//------------------------------------------------------------------------ +// FStreamer +//------------------------------------------------------------------------ +/** Byteorder-aware base class for typed stream i/o. */ +//------------------------------------------------------------------------ +class FStreamer +{ +public: +//------------------------------------------------------------------------ + FStreamer (int16 byteOrder = BYTEORDER); + virtual ~FStreamer () {} + + /** @name Implementing class must override. */ + ///@{ + virtual TSize readRaw (void*, TSize) = 0; ///< Read one buffer of size. + virtual TSize writeRaw (const void*, TSize) = 0; ///< Write one buffer of size. + virtual int64 seek (int64, FSeekMode) = 0; ///< Set file position for stream. + virtual int64 tell () = 0; ///< Return current file position. + ///@} + + /** @name Streams are byteOrder aware. */ + ///@{ + inline void setByteOrder (int32 e) { byteOrder = (int16)e; } + inline int32 getByteOrder () { return byteOrder; } + ///@} + + /** @name read and write int8 and char. */ + ///@{ + bool writeChar8 (char8); + bool readChar8 (char8&); + bool writeUChar8 (unsigned char); + bool readUChar8 (unsigned char&); + bool writeChar16 (char16 c); + bool readChar16 (char16& c); + + bool writeInt8 (int8 c){return writeChar8 (c);} + bool readInt8 (int8& c){return readChar8 (c);} + bool writeInt8u (uint8 c){return writeUChar8 (c);} + bool readInt8u (uint8& c){return readUChar8 (c);} + ///@} + + /** @name read and write int16. */ + ///@{ + bool writeInt16 (int16); + bool readInt16 (int16&); + bool writeInt16Array (const int16* array, int32 count); + bool readInt16Array (int16* array, int32 count); + bool writeInt16u (uint16); + bool readInt16u (uint16&); + bool writeInt16uArray (const uint16* array, int32 count); + bool readInt16uArray (uint16* array, int32 count); + ///@} + + /** @name read and write int32. */ + ///@{ + bool writeInt32 (int32); + bool readInt32 (int32&); + bool writeInt32Array (const int32* array, int32 count); + bool readInt32Array (int32* array, int32 count); + bool writeInt32u (uint32); + bool readInt32u (uint32&); + bool writeInt32uArray (const uint32* array, int32 count); + bool readInt32uArray (uint32* array, int32 count); + ///@} + + /** @name read and write int64. */ + ///@{ + bool writeInt64 (int64); + bool readInt64 (int64&); + bool writeInt64Array (const int64* array, int32 count); + bool readInt64Array (int64* array, int32 count); + bool writeInt64u (uint64); + bool readInt64u (uint64&); + bool writeInt64uArray (const uint64* array, int32 count); + bool readInt64uArray (uint64* array, int32 count); + ///@} + + /** @name read and write float and float array. */ + ///@{ + bool writeFloat (float); + bool readFloat (float&); + bool writeFloatArray (const float* array, int32 count); + bool readFloatArray (float* array, int32 count); + ///@} + + /** @name read and write double and double array. */ + ///@{ + bool writeDouble (double); + bool readDouble (double&); + bool writeDoubleArray (const double* array, int32 count); + bool readDoubleArray (double* array, int32 count); + ///@} + + /** @name read and write Boolean. */ + ///@{ + bool writeBool (bool); ///< Write one boolean + bool readBool (bool&); ///< Read one bool. + ///@} + + /** @name read and write Strings. */ + ///@{ + TSize writeString8 (const char8* ptr, bool terminate = false); ///< a direct output function writing only one string (ascii 8bit) + TSize readString8 (char8* ptr, TSize size); ///< a direct input function reading only one string (ascii) (ended by a \n or \0 or eof) + + bool writeStr8 (const char8* ptr); ///< write a string length (strlen) and string itself + char8* readStr8 (); ///< read a string length and string text (The return string must be deleted when use is finished) + + static int32 getStr8Size (const char8* ptr); ///< returns the size of a saved string + + bool writeStringUtf8 (const tchar* ptr); ///< always terminated, converts to utf8 if non ascii characters are in string + int32 readStringUtf8 (tchar* ptr, int32 maxSize); ///< read a UTF8 string + ///@} + + bool skip (uint32 bytes); + bool pad (uint32 bytes); + + +//------------------------------------------------------------------------ +protected: + int16 byteOrder; +}; + + +//------------------------------------------------------------------------ +/** FStreamSizeHolder Declaration + remembers size of stream chunk for backward compatibility. + + Example: + @code + externalize (a) + { + FStreamSizeHolder sizeHolder; + sizeHolder.beginWrite (); // sets start mark, writes dummy size + a << .... + sizeHolder.endWrite (); // jumps to start mark, updates size, jumps back here + } + + internalize (a) + { + FStreamSizeHolder sizeHolder; + sizeHolder.beginRead (); // reads size, mark + a >> .... + sizeHolder.endRead (); // jumps forward if new version has larger size + } + @endcode +*/ +//------------------------------------------------------------------------ +class FStreamSizeHolder +{ +public: + FStreamSizeHolder (FStreamer &s); + + void beginWrite (); ///< remembers position and writes 0 + int32 endWrite (); ///< writes and returns size (since the start marker) + int32 beginRead (); ///< returns size + void endRead (); ///< jump to end of chunk + +protected: + FStreamer &stream; + int64 sizePos; +}; + +class IBStream; + +//------------------------------------------------------------------------ +// IBStreamer +//------------------------------------------------------------------------ +/** Wrapper class for typed reading/writing from or to IBStream. + Can be used framework-independent in Plug-ins. */ +//------------------------------------------------------------------------ +class IBStreamer: public FStreamer +{ +public: +//------------------------------------------------------------------------ + /** Constructor for a given IBSTream and a byteOrder. */ + IBStreamer (IBStream* stream, int16 byteOrder = BYTEORDER); + + IBStream* getStream () { return stream; } ///< Returns the associated IBStream. + + // FStreamer overrides: + TSize readRaw (void*, TSize) SMTG_OVERRIDE; ///< Read one buffer of size. + TSize writeRaw (const void*, TSize) SMTG_OVERRIDE; ///< Write one buffer of size. + int64 seek (int64, FSeekMode) SMTG_OVERRIDE; ///< Set file position for stream. + int64 tell () SMTG_OVERRIDE; ///< Return current file position. +//------------------------------------------------------------------------ +protected: + IBStream* stream; +}; + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp new file mode 100644 index 00000000..be33be58 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp @@ -0,0 +1,3996 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fstring.cpp +// Created by : Steinberg, 2008 +// Description : String class +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "base/source/fstring.h" +#include "base/source/fdebug.h" +#include "pluginterfaces/base/futils.h" +#include "pluginterfaces/base/fvariant.h" + +#include +#include +#include +#include +#include + +#if SMTG_OS_WINDOWS +#include +#pragma warning (disable : 4244) +#pragma warning (disable : 4267) +#pragma warning (disable : 4996) + +#if DEVELOPMENT +#include + +#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__) +#define realloc(p,s) _realloc_dbg(p,s, _NORMAL_BLOCK, __FILE__, __LINE__) +#define free(p) _free_dbg(p, _NORMAL_BLOCK) + +#endif + +#endif + +#ifndef kPrintfBufferSize +#define kPrintfBufferSize 4096 +#endif + +#if SMTG_OS_MACOS +#include +#include +#include +#include + +#if defined (__GNUC__) && (__GNUC__ >= 4) && !__LP64__ +// on 32 bit Mac OS X we can safely ignore the format warnings as sizeof(int) == sizeof(long) +#pragma GCC diagnostic ignored "-Wformat" +#endif + +#define SMTG_ENABLE_DEBUG_CFALLOCATOR 0 +#define SMTG_DEBUG_CFALLOCATOR (DEVELOPMENT && SMTG_ENABLE_DEBUG_CFALLOCATOR) + +#if SMTG_DEBUG_CFALLOCATOR +#include +#include +#endif + +namespace Steinberg { +#if SMTG_DEBUG_CFALLOCATOR +static CFAllocatorRef kCFAllocator = NULL; + +struct CFStringDebugAllocator : CFAllocatorContext +{ + CFStringDebugAllocator () + { + version = 0; + info = this; + retain = nullptr; + release = nullptr; + copyDescription = nullptr; + allocate = allocateCallBack; + reallocate = reallocateCallBack; + deallocate = deallocateCallBack; + preferredSize = preferredSizeCallBack; + + numAllocations = allocationSize = numDeallocations = 0; + cfAllocator = CFAllocatorCreate (kCFAllocatorUseContext, this); + + Dl_info info; + if (dladdr ((const void*)CFStringDebugAllocator::allocateCallBack, &info)) + { + moduleName = info.dli_fname; + } + kCFAllocator = cfAllocator; + } + + ~CFStringDebugAllocator () + { + kCFAllocator = kCFAllocatorDefault; + CFRelease (cfAllocator); + FDebugPrint ("CFStringDebugAllocator (%s):\n", moduleName.text8 ()); + FDebugPrint ("\tNumber of allocations : %u\n", numAllocations); + FDebugPrint ("\tNumber of deallocations: %u\n", numDeallocations); + FDebugPrint ("\tAllocated Bytes : %u\n", allocationSize); + } + + String moduleName; + CFAllocatorRef cfAllocator; + volatile int64_t numAllocations; + volatile int64_t numDeallocations; + volatile int64_t allocationSize; + + void* doAllocate (CFIndex allocSize, CFOptionFlags hint) + { + void* ptr = CFAllocatorAllocate (kCFAllocatorDefault, allocSize, hint); + OSAtomicIncrement64 (&numAllocations); + OSAtomicAdd64 (allocSize, &allocationSize); + return ptr; + } + void* doReallocate (void* ptr, CFIndex newsize, CFOptionFlags hint) + { + void* newPtr = CFAllocatorReallocate (kCFAllocatorDefault, ptr, newsize, hint); + return newPtr; + } + void doDeallocate (void* ptr) + { + CFAllocatorDeallocate (kCFAllocatorDefault, ptr); + OSAtomicIncrement64 (&numDeallocations); + } + CFIndex getPreferredSize (CFIndex size, CFOptionFlags hint) + { + return CFAllocatorGetPreferredSizeForSize (kCFAllocatorDefault, size, hint); + } + + static void* allocateCallBack (CFIndex allocSize, CFOptionFlags hint, void* info) + { + return static_cast (info)->doAllocate (allocSize, hint); + } + static void* reallocateCallBack (void* ptr, CFIndex newsize, CFOptionFlags hint, void* info) + { + return static_cast (info)->doReallocate (ptr, newsize, hint); + } + + static void deallocateCallBack (void* ptr, void* info) + { + static_cast (info)->doDeallocate (ptr); + } + static CFIndex preferredSizeCallBack (CFIndex size, CFOptionFlags hint, void* info) + { + return static_cast (info)->getPreferredSize (size, hint); + } +}; +static CFStringDebugAllocator gDebugAllocator; +#else + +static const CFAllocatorRef kCFAllocator = ::kCFAllocatorDefault; +#endif +} + +//----------------------------------------------------------------------------- +static void* toCFStringRef (const Steinberg::char8* source, Steinberg::uint32 encoding) +{ + if (encoding == 0xFFFF) + encoding = kCFStringEncodingASCII; + if (source) + return (void*)CFStringCreateWithCString (Steinberg::kCFAllocator, source, encoding); + else + return (void*)CFStringCreateWithCString (Steinberg::kCFAllocator, "", encoding); +} + +//----------------------------------------------------------------------------- +static bool fromCFStringRef (Steinberg::char8* dest, Steinberg::int32 destSize, const void* cfStr, Steinberg::uint32 encoding) +{ + CFIndex usedBytes; + CFRange range = {0, CFStringGetLength ((CFStringRef)cfStr)}; + bool result = CFStringGetBytes ((CFStringRef)cfStr, range, encoding, '?', false, (UInt8*)dest, destSize, &usedBytes); + dest[usedBytes] = 0; + return result; +} +#endif // SMTG_OS_MACOS + +#if SMTG_OS_WINDOWS +#define stricmp16 wcsicmp +#define strnicmp16 wcsnicmp +#define strrchr16 wcsrchr +#define sprintf16 swprintf +#define snprintf16 snwprintf +#define vsnprintf16 vsnwprintf +#define vsprintf16 wvsprintf +#define vfprintf16 vfwprintf +#define sscanf16 swscanf +#define toupper16 towupper +#define tolower16 towlower +#define isupper16 iswupper +#define islower16 iswlower +#define isspace16 iswspace +#define isalpha16 iswalpha +#define isdigit16 iswdigit +#define isalnum16 iswalnum + +#define stricmp _stricmp +#define strnicmp _strnicmp +#define snprintf _snprintf +#define vsnprintf _vsnprintf +#define snwprintf _snwprintf +#define vsnwprintf _vsnwprintf + +#define wtoi _wtoi +#define wtol _wtol +#define wtof _wtof + +#elif SMTG_OS_LINUX +#include +#include +#include +#include +#include +#include +#include + +using ConverterFacet = std::codecvt_utf8_utf16; +using Converter = std::wstring_convert; + +//------------------------------------------------------------------------ +static ConverterFacet& converterFacet () +{ + static ConverterFacet gFacet; + return gFacet; +} + +//------------------------------------------------------------------------ +static Converter& converter () +{ + static Converter gConverter; + return gConverter; +} + +//----------------------------------------------------------------------------- +static inline int stricasecmp (const Steinberg::char8* s1, const Steinberg::char8* s2) +{ + return ::strcasecmp (s1, s2); +} + +//----------------------------------------------------------------------------- +static inline int strnicasecmp (const Steinberg::char8* s1, const Steinberg::char8* s2, size_t n) +{ + return ::strncasecmp (s1, s2, n); +} + +//----------------------------------------------------------------------------- +static inline int stricmp16 (const Steinberg::char16* s1, const Steinberg::char16* s2) +{ + auto str1 = converter ().to_bytes (s1); + auto str2 = converter ().to_bytes (s2); + return stricasecmp (str1.data (), str2.data ()); +} + +//----------------------------------------------------------------------------- +static inline int strnicmp16 (const Steinberg::char16* s1, const Steinberg::char16* s2, int n) +{ + auto str1 = converter ().to_bytes (s1); + auto str2 = converter ().to_bytes (s2); + return strnicasecmp (str1.data (), str2.data (), n); +} + +//----------------------------------------------------------------------------- +static inline int sprintf16 (Steinberg::char16* wcs, const Steinberg::char16* format, ...) +{ +#warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + return 0; +} + +//----------------------------------------------------------------------------- +static inline int vsnwprintf (Steinberg::char16* wcs, size_t maxlen, + const Steinberg::char16* format, va_list args) +{ + Steinberg::char8 str8[kPrintfBufferSize]; + auto format_utf8 = converter ().to_bytes(format); + auto len = vsnprintf (str8, kPrintfBufferSize, format_utf8.data (), args); + + auto tmp_str = converter ().from_bytes (str8, str8 + len); + auto target_len = std::min (tmp_str.size (), maxlen - 1); + tmp_str.copy (wcs, target_len); + wcs[target_len] = '\0'; + + return tmp_str.size (); +} + +//----------------------------------------------------------------------------- +static inline Steinberg::char16* strrchr16 (const Steinberg::char16* str, Steinberg::char16 c) +{ +#warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + return nullptr; +} + +#elif SMTG_OS_MACOS +#define tstrtoi64 strtoll +#define stricmp strcasecmp +#define strnicmp strncasecmp + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 strnicmp16 (const Steinberg::char16* str1, const Steinberg::char16* str2, size_t size) +{ + if (size == 0) + return 0; + + CFIndex str1Len = Steinberg::strlen16 (str1); + CFIndex str2Len = Steinberg::strlen16 (str2); + if (size < str2Len) // range is not applied to second string + str2Len = size; + CFStringRef cfStr1 = CFStringCreateWithCharactersNoCopy (Steinberg::kCFAllocator, (UniChar*)str1, str1Len, kCFAllocatorNull); + CFStringRef cfStr2 = CFStringCreateWithCharactersNoCopy (Steinberg::kCFAllocator, (UniChar*)str2, str2Len, kCFAllocatorNull); + CFComparisonResult result = CFStringCompareWithOptions (cfStr1, cfStr2, CFRangeMake (0, size), kCFCompareCaseInsensitive); + CFRelease (cfStr1); + CFRelease (cfStr2); + switch (result) + { + case kCFCompareEqualTo: return 0; + case kCFCompareLessThan: return -1; + case kCFCompareGreaterThan: + default: return 1; + }; +} + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 stricmp16 (const Steinberg::char16* str1, CFIndex str1Len, const Steinberg::char16* str2, CFIndex str2Len) +{ + CFStringRef cfStr1 = CFStringCreateWithCharactersNoCopy (Steinberg::kCFAllocator, (UniChar*)str1, str1Len, kCFAllocatorNull); + CFStringRef cfStr2 = CFStringCreateWithCharactersNoCopy (Steinberg::kCFAllocator, (UniChar*)str2, str2Len, kCFAllocatorNull); + CFComparisonResult result = CFStringCompare (cfStr1, cfStr2, kCFCompareCaseInsensitive); + CFRelease (cfStr1); + CFRelease (cfStr2); + switch (result) + { + case kCFCompareEqualTo: return 0; + case kCFCompareLessThan: return -1; + case kCFCompareGreaterThan: + default: return 1; + }; +} + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 stricmp16 (const Steinberg::ConstString& str1, const Steinberg::ConstString& str2) +{ + return stricmp16 (str1.text16 (), str1.length (), str2.text16 (), str2.length ()); +} + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 stricmp16 (const Steinberg::char16* str1, const Steinberg::char16* str2) +{ + CFIndex str1Len = Steinberg::strlen16 (str1); + CFIndex str2Len = Steinberg::strlen16 (str2); + return stricmp16 (str1, str1Len, str2, str2Len); +} + +//----------------------------------------------------------------------------- +static inline Steinberg::char16* strrchr16 (const Steinberg::char16* str, Steinberg::char16 c) +{ + Steinberg::int32 len = Steinberg::ConstString (str).length (); + while (len > 0) + { + if (str[len] == c) + return const_cast(str + len); + len--; + } + return 0; +} + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 vsnwprintf (Steinberg::char16* str, Steinberg::int32 size, const Steinberg::char16* format, va_list ap) +{ + // wrapped using CoreFoundation's CFString + CFMutableStringRef formatString = (CFMutableStringRef)Steinberg::ConstString (format).toCFStringRef (0xFFFF, true); + CFStringFindAndReplace (formatString, CFSTR("%s"), CFSTR("%S"), CFRangeMake (0, CFStringGetLength (formatString)), 0); + CFStringRef resultString = CFStringCreateWithFormatAndArguments (Steinberg::kCFAllocator, 0, formatString, ap); + CFRelease (formatString); + if (resultString) + { + Steinberg::String res; + res.fromCFStringRef (resultString); + res.copyTo16 (str, 0, size); + CFRelease (resultString); + return 0; + } + return 1; +} + +//----------------------------------------------------------------------------- +static inline Steinberg::int32 sprintf16 (Steinberg::char16* str, const Steinberg::char16* format, ...) +{ + va_list marker; + va_start (marker, format); + return vsnwprintf (str, -1, format, marker); +} + +#endif + +/* +UTF-8 EF BB BF +UTF-16 Big Endian FE FF +UTF-16 Little Endian FF FE +UTF-32 Big Endian 00 00 FE FF +UTF-32 Little Endian FF FE 00 00 +*/ + +namespace Steinberg { + +//----------------------------------------------------------------------------- +static inline bool isCaseSensitive (ConstString::CompareMode mode) +{ + return mode == ConstString::kCaseSensitive; +} + +//----------------------------------------------------------------------------- +// ConstString +//----------------------------------------------------------------------------- +ConstString::ConstString (const char8* str, int32 length) +: buffer8 ((char8*)str) +, len (length < 0 ? (str ? static_cast (strlen (str)) : 0) : length) +, isWide (0) +{ +} + +//----------------------------------------------------------------------------- +ConstString::ConstString (const char16* str, int32 length) +: buffer16 ((char16*)str) +, len (length < 0 ? (str ? strlen16 (str) : 0) : length) +, isWide (1) +{ +} + +//----------------------------------------------------------------------------- +ConstString::ConstString (const ConstString& str, int32 offset, int32 length) +: buffer (str.buffer) +, len (length < 0 ? (str.len - (offset > 0 ? offset : 0)) : length) +, isWide (str.isWide) +{ + if (offset > 0) + { + if (isWide) + buffer16 += offset; + else + buffer8 += offset; + } +} + +//----------------------------------------------------------------------------- +ConstString::ConstString (const FVariant& var) +: buffer (0) +, len (0) +, isWide (0) +{ + switch (var.getType ()) + { + case FVariant::kString8: + buffer8 = (char8*)var.getString8 (); + len = buffer8 ? strlen8 (buffer8) : 0; + isWide = false; + break; + + case FVariant::kString16: + buffer16 = (char16*)var.getString16 (); + len = buffer16 ? strlen16 (buffer16) : 0; + isWide = true; + break; + } +} + +//----------------------------------------------------------------------------- +ConstString::ConstString () +: buffer (0) +, len (0) +, isWide (0) +{ +} + +//----------------------------------------------------------------------------- +bool ConstString::testChar8 (uint32 index, char8 c) const +{ + if (index >= len) + return c == 0; + if (isWide) + { + // make c wide + char8 src[] = {c, 0}; + char16 dest[2] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + return buffer16[index] == dest[0]; + return false; + } + return buffer8[index] == c; +} + +//----------------------------------------------------------------------------- +bool ConstString::testChar16 (uint32 index, char16 c) const +{ + if (index >= len) + return c == 0; + if (!isWide) + { + // make c ansi + char16 src[] = {c, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + return buffer8[index] == dest[0]; + return false; + } + return buffer16[index] == c; +} + +//----------------------------------------------------------------------------- +bool ConstString::extract (String& result, uint32 idx, int32 n) const +{ + if (len == 0|| idx >= len) + return false; + + if ((idx + n > len) || n < 0) + n = len - idx; + + if (isWide) + result.assign (buffer16 + idx, n); + else + result.assign (buffer8 + idx, n); + + return true; +} + +//----------------------------------------------------------------------------- +int32 ConstString::copyTo8 (char8* str, uint32 idx, int32 n) const +{ + if (!str) + return 0; + + if (isWide) + { + String tmp (text16 ()); + if (tmp.toMultiByte () == false) + return 0; + return tmp.copyTo8 (str, idx, n); + } + + if (isEmpty () || idx >= len || !buffer8) + { + str[0] = 0; + return 0; + } + + if ((idx + n > len) || n < 0) + n = len - idx; + + memcpy (str, &(buffer8[idx]), n * sizeof (char8)); + str[n] = 0; + return n; +} + +//----------------------------------------------------------------------------- +int32 ConstString::copyTo16 (char16* str, uint32 idx, int32 n) const +{ + if (!str) + return 0; + + if (!isWide) + { + String tmp (text8 ()); + if (tmp.toWideString () == false) + return 0; + return tmp.copyTo16 (str, idx, n); + } + + if (isEmpty () || idx >= len || !buffer16) + { + str[0] = 0; + return 0; + } + + if ((idx + n > len) || n < 0) + n = len - idx; + + memcpy (str, &(buffer16[idx]), n * sizeof (char16)); + str[n] = 0; + return n; +} + +//----------------------------------------------------------------------------- +int32 ConstString::copyTo (tchar* str, uint32 idx, int32 n) const +{ +#ifdef UNICODE + return copyTo16 (str, idx, n); +#else + return copyTo8 (str, idx, n); +#endif +} + +//----------------------------------------------------------------------------- +void ConstString::copyTo (IStringResult* result) const +{ + if (isWideString () == false) + { + result->setText (text8 ()); + } + else + { + FUnknownPtr iStr (result); + if (iStr) + { + iStr->setText16 (text16 ()); + } + else + { + String tmp (*this); + tmp.toMultiByte (); + result->setText (tmp.text8 ()); + } + } +} + +//----------------------------------------------------------------------------- +void ConstString::copyTo (IString& string) const +{ + if (isWideString ()) + string.setText16 (text16 ()); + else + string.setText8 (text8 ()); +} + + + +//----------------------------------------------------------------------------- +int32 ConstString::compare (const ConstString& str, int32 n, CompareMode mode) const +{ + if (n == 0) + return 0; + + if (str.isEmpty ()) + { + if (isEmpty ()) + return 0; + return 1; + } + else if (isEmpty ()) + return -1; + + if (!isWide && !str.isWide) + { + if (n < 0) + { + if (isCaseSensitive (mode)) + return strcmp (*this, str); + else + return stricmp (*this, str); + } + else + { + if (isCaseSensitive (mode)) + return strncmp (*this, str, n); + else + return strnicmp (*this, str, n); + } + } + else if (isWide && str.isWide) + { + if (n < 0) + { + if (isCaseSensitive (mode)) + return strcmp16 (*this, str); + else + return stricmp16 (*this, str); + } + else + { + if (isCaseSensitive (mode)) + return strncmp16 (*this, str, n); + else + return strnicmp16 (*this, str, n); + } + } + return compareAt (0, str, n, mode); +} + +//----------------------------------------------------------------------------- +int32 ConstString::compare (const ConstString& str, CompareMode mode) const +{ + return compare (str, -1, mode); +} + +//----------------------------------------------------------------------------- +int32 ConstString::compareAt (uint32 index, const ConstString& str, int32 n, CompareMode mode) const +{ + if (n == 0) + return 0; + + if (str.isEmpty ()) + { + if (isEmpty ()) + return 0; + return 1; + } + else if (isEmpty ()) + return -1; + + if (!isWide && !str.isWide) + { + char8* toCompare = buffer8; + if (index > 0) + { + if (index >= len) + { + if (str.isEmpty ()) + return 0; + return -1; + } + toCompare += index; + } + + if (n < 0) + { + if (isCaseSensitive (mode)) + return strcmp (toCompare, str); + else + return stricmp (toCompare, str); + } + else + { + if (isCaseSensitive (mode)) + return strncmp (toCompare, str, n); + else + return strnicmp (toCompare, str, n); + } + } + else if (isWide && str.isWide) + { + char16* toCompare = buffer16; + if (index > 0) + { + if (index >= len) + { + if (str.isEmpty ()) + return 0; + return -1; + } + toCompare += index; + } + + if (n < 0) + { + if (isCaseSensitive (mode)) + return strcmp16 (toCompare, str.text16 ()); + else + return stricmp16 (toCompare, str.text16 ()); + } + else + { + if (isCaseSensitive (mode)) + return strncmp16 (toCompare, str.text16 (), n); + else + return strnicmp16 (toCompare, str.text16 (), n); + } + } + else + { + if (isWide) + { + String tmp (str.text8 ()); + if (tmp.toWideString () == false) + return -1; + return compareAt (index, tmp, n, mode); + } + else + { + String tmp (text8 ()); + if (tmp.toWideString () == false) + return 1; + return tmp.compareAt (index, str, n, mode); + } + } +} + +//------------------------------------------------------------------------ +Steinberg::int32 ConstString::naturalCompare (const ConstString& str, CompareMode mode /*= kCaseSensitive*/) const +{ + if (str.isEmpty ()) + { + if (isEmpty ()) + return 0; + return 1; + } + else if (isEmpty ()) + return -1; + + if (!isWide && !str.isWide) + return strnatcmp8 (buffer8, str.text8 (), isCaseSensitive (mode)); + else if (isWide && str.isWide) + return strnatcmp16 (buffer16, str.text16 (), isCaseSensitive (mode)); + else + { + if (isWide) + { + String tmp (str.text8 ()); + tmp.toWideString (); + return strnatcmp16 (buffer16, tmp.text16 (), isCaseSensitive (mode)); + } + else + { + String tmp (text8 ()); + tmp.toWideString (); + return strnatcmp16 (tmp.text16 (), str.text16 (), isCaseSensitive (mode)); + } + } +} + +//----------------------------------------------------------------------------- +bool ConstString::startsWith (const ConstString& str, CompareMode mode /*= kCaseSensitive*/) const +{ + if (str.isEmpty ()) + { + return isEmpty (); + } + else if (isEmpty ()) + { + return false; + } + if (length () < str.length ()) + { + return false; + } + if (!isWide && !str.isWide) + { + if (isCaseSensitive (mode)) + return strncmp (buffer8, str.buffer8, str.length ()) == 0; + return strnicmp (buffer8, str.buffer8, str.length ()) == 0; + } + else if (isWide && str.isWide) + { + if (isCaseSensitive (mode)) + return strncmp16 (buffer16, str.buffer16, str.length ()) == 0; + return strnicmp16 (buffer16, str.buffer16, str.length ()) == 0; + } + else if (isWide) + { + String tmp (str.text8 ()); + tmp.toWideString (); + if (tmp.length () > length ()) + return false; + if (isCaseSensitive (mode)) + return strncmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; + return strnicmp16 (buffer16, tmp.buffer16, tmp.length ()) == 0; + } + else + { + String tmp (text8 ()); + tmp.toWideString (); + if (str.length () > tmp.length ()) + return false; + if (isCaseSensitive (mode)) + return strncmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; + return strnicmp16 (tmp.buffer16, str.buffer16, str.length ()) == 0; + } +} + +//----------------------------------------------------------------------------- +bool ConstString::endsWith (const ConstString& str, CompareMode mode /*= kCaseSensitive*/) const +{ + if (str.isEmpty ()) + { + return isEmpty (); + } + else if (isEmpty ()) + { + return false; + } + if (length () < str.length ()) + { + return false; + } + if (!isWide && !str.isWide) + { + if (isCaseSensitive (mode)) + return strncmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; + return strnicmp (buffer8 + (length () - str.length ()), str.buffer8, str.length ()) == 0; + } + else if (isWide && str.isWide) + { + if (isCaseSensitive (mode)) + return strncmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; + return strnicmp16 (buffer16 + (length () - str.length ()), str.buffer16, str.length ()) == 0; + } + else if (isWide) + { + String tmp (str.text8 ()); + tmp.toWideString (); + if (tmp.length () > length ()) + return false; + if (isCaseSensitive (mode)) + return strncmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; + return strnicmp16 (buffer16 + (length () - tmp.length ()), tmp.buffer16, tmp.length ()) == 0; + } + else + { + String tmp (text8 ()); + tmp.toWideString (); + if (str.length () > tmp.length ()) + return false; + if (isCaseSensitive (mode)) + return strncmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; + return strnicmp16 (tmp.buffer16 + (tmp.length () - str.length ()), str.buffer16, str.length ()) == 0; + } +} + +//----------------------------------------------------------------------------- +bool ConstString::contains (const ConstString& str, CompareMode m) const +{ + return findFirst (str, -1, m) != -1; +} + +//----------------------------------------------------------------------------- +int32 ConstString::findNext (int32 startIndex, const ConstString& str, int32 n, CompareMode mode, int32 endIndex) const +{ + uint32 endLength = len; + if (endIndex > -1 && (uint32)endIndex < len) + endLength = endIndex + 1; + + if (isWide && str.isWide) + { + if (startIndex < 0) + startIndex = 0; + + uint32 stringLength = str.length (); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (n > 0) + { + uint32 i = 0; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i < endLength; i++) + if (strncmp16 (buffer16 + i, str, n) == 0) + return i; + } + else + { + for (i = startIndex; i < endLength; i++) + if (strnicmp16 (buffer16 + i, str, n) == 0) + return i; + } + } + return -1; + } + else if (!isWide && !str.isWide) + { + uint32 stringLength = str.length (); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (startIndex < 0) + startIndex = 0; + + if (n > 0) + { + uint32 i = 0; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i < endLength; i++) + if (strncmp (buffer8 + i, str, n) == 0) + return i; + } + else + { + for (i = startIndex; i < endLength; i++) + if (strnicmp (buffer8 + i, str, n) == 0) + return i; + } + } + return -1; + } + String tmp; + if (isWide) + { + tmp = str.text8 (); + tmp.toWideString (); + return findNext (startIndex, tmp, n , mode, endIndex); + } + tmp = text8 (); + tmp.toWideString (); + return tmp.findNext (startIndex, str, n, mode, endIndex); +} + +//------------------------------------------------------------------------------------------------ +int32 ConstString::findNext (int32 startIndex, char8 c, CompareMode mode, int32 endIndex) const +{ + uint32 endLength = len; + if (endIndex > -1 && (uint32)endIndex < len) + endLength = endIndex + 1; + + if (isWide) + { + char8 src[] = {c, 0}; + char16 dest[8] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + return findNext (startIndex, dest[0], mode, endIndex); + return -1; + } + + if (startIndex < 0) + startIndex = 0; + uint32 i; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i < endLength; i++) + { + if (buffer8[i] == c) + return i; + } + } + else + { + c = toLower (c); + for (i = startIndex; i < endLength; i++) + { + if (toLower (buffer8[i]) == c) + return i; + } + } + return -1; +} + +//----------------------------------------------------------------------------- +int32 ConstString::findNext (int32 startIndex, char16 c, CompareMode mode, int32 endIndex) const +{ + uint32 endLength = len; + if (endIndex > -1 && (uint32)endIndex < len) + endLength = endIndex + 1; + + if (!isWide) + { + char16 src[] = {c, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + return findNext (startIndex, dest[0], mode, endIndex); + + return -1; + } + + uint32 i; + if (startIndex < 0) + startIndex = 0; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i < endLength; i++) + { + if (buffer16[i] == c) + return i; + } + } + else + { + c = toLower (c); + for (i = startIndex; i < endLength; i++) + { + if (toLower (buffer16[i]) == c) + return i; + } + } + return -1; +} + +//----------------------------------------------------------------------------- +int32 ConstString::findPrev (int32 startIndex, char8 c, CompareMode mode) const +{ + if (len == 0) + return -1; + + if (isWide) + { + char8 src[] = {c, 0}; + char16 dest[8] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + return findPrev (startIndex, dest[0], mode); + return -1; + } + + if (startIndex < 0 || startIndex > (int32)len) + startIndex = len; + + int32 i; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i >= 0; i--) + { + if (buffer8[i] == c) + return i; + } + } + else + { + c = toLower (c); + for (i = startIndex; i >= 0; i--) + { + if (toLower (buffer8[i]) == c) + return i; + } + } + return -1; +} + +//----------------------------------------------------------------------------- +int32 ConstString::findPrev (int32 startIndex, char16 c, CompareMode mode) const +{ + if (len == 0) + return -1; + + if (!isWide) + { + char16 src[] = {c, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + return findPrev (startIndex, dest[0], mode); + + return -1; + } + + if (startIndex < 0 || startIndex > (int32)len) + startIndex = len; + + int32 i; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i >= 0; i--) + { + if (buffer16[i] == c) + return i; + } + } + else + { + c = toLower (c); + for (i = startIndex; i >= 0; i--) + { + if (toLower (buffer16[i]) == c) + return i; + } + } + return -1; +} + +//----------------------------------------------------------------------------- +int32 ConstString::findPrev (int32 startIndex, const ConstString& str, int32 n, CompareMode mode) const +{ + if (isWide && str.isWide) + { + uint32 stringLength = str.length (); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (startIndex < 0 || startIndex >= (int32)len) + startIndex = len - 1; + + if (n > 0) + { + int32 i = 0; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i >= 0; i--) + if (strncmp16 (buffer16 + i, str, n) == 0) + return i; + } + else + { + for (i = startIndex; i >= 0; i--) + if (strnicmp16 (buffer16 + i, str, n) == 0) + return i; + } + } + return -1; + } + else if (!isWide && !str.isWide) + { + uint32 stringLength = str.length (); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (startIndex < 0 || startIndex >= (int32)len) + startIndex = len - 1; + + if (n > 0) + { + int32 i = 0; + + if (isCaseSensitive (mode)) + { + for (i = startIndex; i >= 0; i--) + if (strncmp (buffer8 + i, str, n) == 0) + return i; + } + else + { + for (i = startIndex; i >= 0; i--) + if (strnicmp (buffer8 + i, str, n) == 0) + return i; + } + } + return -1; + } + if (isWide) + { + String tmp (str.text8 ()); + tmp.toWideString (); + return findPrev (startIndex, tmp, n, mode); + } + String tmp (text8 ()); + tmp.toWideString (); + return tmp.findPrev (startIndex, str, n, mode); +} + +//----------------------------------------------------------------------------- +int32 ConstString::countOccurences (char8 c, uint32 startIndex, CompareMode mode) const +{ + if (isWide) + { + char8 src[] = {c, 0}; + char16 dest[8] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + return countOccurences (dest[0], startIndex, mode); + return -1; + } + + int32 result = 0; + int32 next = startIndex; + while (true) + { + next = findNext (next, c, mode); + if (next >= 0) + { + next++; + result++; + } + else + break; + } + return result; +} + +//----------------------------------------------------------------------------- +int32 ConstString::countOccurences (char16 c, uint32 startIndex, CompareMode mode) const +{ + if (!isWide) + { + char16 src[] = {c, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + return countOccurences (dest[0], startIndex, mode); + + return -1; + } + int32 result = 0; + int32 next = startIndex; + while (true) + { + next = findNext (next, c, mode); + if (next >= 0) + { + next++; + result++; + } + else + break; + } + return result; +} + +//----------------------------------------------------------------------------- +int32 ConstString::getFirstDifferent (const ConstString& str, CompareMode mode) const +{ + if (str.isWide != isWide) + { + if (isWide) + { + String tmp (str.text8 ()); + if (tmp.toWideString () == false) + return -1; + return getFirstDifferent (tmp, mode); + } + else + { + String tmp (text8 ()); + if (tmp.toWideString () == false) + return -1; + return tmp.getFirstDifferent (str, mode); + } + } + + uint32 len1 = len; + uint32 len2 = str.len; + uint32 i; + + if (isWide) + { + if (isCaseSensitive (mode)) + { + for (i = 0; i <= len1 && i <= len2; i++) + { + if (buffer16[i] != str.buffer16[i]) + return i; + } + } + else + { + for (i = 0; i <= len1 && i <= len2; i++) + { + if (toLower (buffer16[i]) != toLower (str.buffer16[i])) + return i; + } + } + } + else + { + if (isCaseSensitive (mode)) + { + for (i = 0; i <= len1 && i <= len2; i++) + { + if (buffer8[i] != str.buffer8[i]) + return i; + } + } + else + { + for (i = 0; i <= len1 && i <= len2; i++) + { + if (toLower (buffer8[i]) != toLower (str.buffer8[i])) + return i; + } + } + } + return -1; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanInt64 (int64& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + if (isWide) + return scanInt64_16 (buffer16 + offset, value, scanToEnd); + else + return scanInt64_8 (buffer8 + offset, value, scanToEnd); +} + +//----------------------------------------------------------------------------- +bool ConstString::scanUInt64 (uint64& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + if (isWide) + return scanUInt64_16 (buffer16 + offset, value, scanToEnd); + else + return scanUInt64_8 (buffer8 + offset, value, scanToEnd); +} + +//----------------------------------------------------------------------------- +bool ConstString::scanHex (uint8& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + if (isWide) + return scanHex_16 (buffer16 + offset, value, scanToEnd); + else + return scanHex_8 (buffer8 + offset, value, scanToEnd); +} + +//----------------------------------------------------------------------------- +bool ConstString::scanInt32 (int32& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + if (isWide) + return scanInt32_16 (buffer16 + offset, value, scanToEnd); + else + return scanInt32_8 (buffer8 + offset, value, scanToEnd); +} + +//----------------------------------------------------------------------------- +bool ConstString::scanUInt32 (uint32& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + if (isWide) + return scanUInt32_16 (buffer16 + offset, value, scanToEnd); + else + return scanUInt32_8 (buffer8 + offset, value, scanToEnd); +} + +//----------------------------------------------------------------------------- +bool ConstString::scanInt64_8 (const char8* text, int64& value, bool scanToEnd) +{ + while (text && text[0]) + { + if (sscanf (text, "%" FORMAT_INT64A, &value) == 1) + return true; + else if (scanToEnd == false) + return false; + text++; + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanInt64_16 (const char16* text, int64& value, bool scanToEnd) +{ + if (text && text[0]) + { + String str (text); + str.toMultiByte (kCP_Default); + return scanInt64_8 (str, value, scanToEnd); + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanUInt64_8 (const char8* text, uint64& value, bool scanToEnd) +{ + while (text && text[0]) + { + if (sscanf (text, "%" FORMAT_UINT64A, &value) == 1) + return true; + else if (scanToEnd == false) + return false; + text++; + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanUInt64_16 (const char16* text, uint64& value, bool scanToEnd) +{ + if (text && text[0]) + { + String str (text); + str.toMultiByte (kCP_Default); + return scanUInt64_8 (str, value, scanToEnd); + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanInt64 (const tchar* text, int64& value, bool scanToEnd) +{ +#ifdef UNICODE + return scanInt64_16 (text, value,scanToEnd); +#else + return scanInt64_8 (text, value, scanToEnd); +#endif +} + +//----------------------------------------------------------------------------- +bool ConstString::scanUInt64 (const tchar* text, uint64& value, bool scanToEnd) +{ +#ifdef UNICODE + return scanUInt64_16 (text, value, scanToEnd); +#else + return scanUInt64_8 (text, value, scanToEnd); +#endif +} + +//----------------------------------------------------------------------------- +bool ConstString::scanHex_8 (const char8* text, uint8& value, bool scanToEnd) +{ + while (text && text[0]) + { + unsigned int v; // scanf expects an unsigned int for %x + if (sscanf (text, "%x", &v) == 1) + { + value = (uint8)v; + return true; + } + else if (scanToEnd == false) + return false; + text++; + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanHex_16 (const char16* text, uint8& value, bool scanToEnd) +{ + if (text && text[0]) + { + String str (text); + str.toMultiByte (kCP_Default); // scanf uses default codepage + return scanHex_8 (str, value, scanToEnd); + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::scanHex (const tchar* text, uint8& value, bool scanToEnd) +{ +#ifdef UNICODE + return scanHex_16 (text, value, scanToEnd); +#else + return scanHex_8 (text, value, scanToEnd); +#endif +} + +//----------------------------------------------------------------------------- +bool ConstString::scanFloat (double& value, uint32 offset, bool scanToEnd) const +{ + if (isEmpty () || offset >= len) + return false; + + String str (*this); + int32 pos = -1; + if (isWide) + { + if ((pos = str.findNext (offset, STR(','))) >= 0 && ((uint32)pos) >= offset) + str.setChar (pos, STR('.')); + + str.toMultiByte (kCP_Default); // scanf uses default codepage + } + else + { + if ((pos = str.findNext (offset, ',')) >= 0 && ((uint32)pos) >= offset) + str.setChar (pos, '.'); + } + + const char8* txt = str.text8 () + offset; + while (txt && txt[0]) + { + if (sscanf (txt, "%lf", &value) == 1) + return true; + else if (scanToEnd == false) + return false; + txt++; + } + return false; +} + +//----------------------------------------------------------------------------- +char16 ConstString::toLower (char16 c) +{ + #if SMTG_OS_WINDOWS + WCHAR temp[2] = {c, 0}; + ::CharLowerW (temp); + return temp[0]; + #elif SMTG_OS_MACOS + // only convert characters which in lowercase are also single characters + UniChar characters [2] = {0}; + characters[0] = c; + CFMutableStringRef str = CFStringCreateMutableWithExternalCharactersNoCopy (kCFAllocator, characters, 1, 2, kCFAllocatorNull); + if (str) + { + CFStringLowercase (str, NULL); + CFRelease (str); + if (characters[1] == 0) + return characters[0]; + } + return c; + #elif SMTG_OS_LINUX + #warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + return c; + #else + return towlower (c); + #endif +} + +//----------------------------------------------------------------------------- +char16 ConstString::toUpper (char16 c) +{ + #if SMTG_OS_WINDOWS + WCHAR temp[2] = {c, 0}; + ::CharUpperW (temp); + return temp[0]; + #elif SMTG_OS_MACOS + // only convert characters which in uppercase are also single characters (don't translate a sharp-s which would result in SS) + UniChar characters [2] = {0}; + characters[0] = c; + CFMutableStringRef str = CFStringCreateMutableWithExternalCharactersNoCopy (kCFAllocator, characters, 1, 2, kCFAllocatorNull); + if (str) + { + CFStringUppercase (str, NULL); + CFRelease (str); + if (characters[1] == 0) + return characters[0]; + } + return c; + #elif SMTG_OS_LINUX + #warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + return c; + #else + return towupper (c); + #endif +} + +//----------------------------------------------------------------------------- +char8 ConstString::toLower (char8 c) +{ + if ((c >= 'A') && (c <= 'Z')) + return c + ('a' - 'A'); + #if SMTG_OS_WINDOWS + CHAR temp[2] = {c, 0}; + ::CharLowerA (temp); + return temp[0]; + #else + return tolower (c); + #endif +} + +//----------------------------------------------------------------------------- +char8 ConstString::toUpper (char8 c) +{ + if ((c >= 'a') && (c <= 'z')) + return c - ('a' - 'A'); + #if SMTG_OS_WINDOWS + CHAR temp[2] = {c, 0}; + ::CharUpperA (temp); + return temp[0]; + #else + return toupper (c); + #endif +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharSpace (const char8 character) +{ + return isspace (character) != 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharSpace (const char16 character) +{ + switch (character) + { + case 0x0020: + case 0x00A0: + case 0x2002: + case 0x2003: + case 0x2004: + case 0x2005: + case 0x2006: + case 0x2007: + case 0x2008: + case 0x2009: + case 0x200A: + case 0x200B: + case 0x202F: + case 0x205F: + case 0x3000: + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAlpha (const char8 character) +{ + return isalpha (character) != 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAlpha (const char16 character) +{ + return iswalpha (character) != 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAlphaNum (const char8 character) +{ + return isalnum (character) != 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAlphaNum (const char16 character) +{ + return iswalnum (character) != 0; // this may not work on macOSX when another locale is set inside the c-lib +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharDigit (const char8 character) +{ + return isdigit (character) != 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharDigit (const char16 character) +{ + return iswdigit (character) != 0; // this may not work on macOSX when another locale is set inside the c-lib +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAscii (char8 character) +{ + return character >= 0; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharAscii (char16 character) +{ + return character < 128; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharUpper (char8 character) +{ + return toUpper (character) == character; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharUpper (char16 character) +{ + return toUpper (character) == character; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharLower (char8 character) +{ + return toLower (character) == character; +} + +//----------------------------------------------------------------------------- +bool ConstString::isCharLower (char16 character) +{ + return toLower (character) == character; +} + +//----------------------------------------------------------------------------- +bool ConstString::isDigit (uint32 index) const +{ + if (isEmpty () || index >= len) + return false; + + if (isWide) + return ConstString::isCharDigit (buffer16[index]); + else + return ConstString::isCharDigit (buffer8[index]); +} + +//----------------------------------------------------------------------------- +int32 ConstString::getTrailingNumberIndex (uint32 width) const +{ + if (isEmpty ()) + return -1; + + int32 endIndex = len - 1; + int32 i = endIndex; + while (isDigit ((uint32) i) && i >= 0) + i--; + + // now either all are digits or i is on the first non digit + if (i < endIndex) + { + if (width > 0 && (endIndex - i != static_cast (width))) + return -1; + + return i + 1; + } + + return -1; +} + +//----------------------------------------------------------------------------- +int64 ConstString::getTrailingNumber (int64 fallback) const +{ + int32 index = getTrailingNumberIndex (); + + int64 number = 0; + + if (index >= 0) + if (scanInt64 (number, index)) + return number; + + return fallback; +} + + + +//----------------------------------------------------------------------------- +void ConstString::toVariant (FVariant& var) const +{ + if (isWide) + { + var.setString16 (buffer16); + } + else + { + var.setString8 (buffer8); + } +} + +//----------------------------------------------------------------------------- +bool ConstString::isAsciiString () const +{ + uint32 i; + if (isWide) + { + for (i = 0; i < len; i++) + if (ConstString::isCharAscii (buffer16 [i]) == false) + return false; + } + else + { + for (i = 0; i < len; i++) + if (ConstString::isCharAscii (buffer8 [i]) == false) + return false; + } + return true; +} + + +#if SMTG_OS_MACOS +uint32 kDefaultSystemEncoding = kCFStringEncodingMacRoman; +//----------------------------------------------------------------------------- +static CFStringEncoding MBCodePageToCFStringEncoding (uint32 codePage) +{ + switch (codePage) + { + case kCP_ANSI: return kDefaultSystemEncoding; // MacRoman or JIS + case kCP_MAC_ROMAN: return kCFStringEncodingMacRoman; + case kCP_ANSI_WEL: return kCFStringEncodingWindowsLatin1; + case kCP_MAC_CEE: return kCFStringEncodingMacCentralEurRoman; + case kCP_Utf8: return kCFStringEncodingUTF8; + case kCP_ShiftJIS: return kCFStringEncodingShiftJIS_X0213_00; + case kCP_US_ASCII: return kCFStringEncodingASCII; + } + return kCFStringEncodingASCII; +} +#endif + +//----------------------------------------------------------------------------- +int32 ConstString::multiByteToWideString (char16* dest, const char8* source, int32 charCount, uint32 sourceCodePage) +{ + if (source == 0 || source[0] == 0) + { + if (dest && charCount > 0) + { + dest[0] = 0; + } + return 0; + } + int32 result = 0; +#if SMTG_OS_WINDOWS + result = MultiByteToWideChar (sourceCodePage, MB_ERR_INVALID_CHARS, source, -1, dest, charCount); +#endif + +#if SMTG_OS_MACOS + CFStringRef cfStr = + (CFStringRef)::toCFStringRef (source, MBCodePageToCFStringEncoding (sourceCodePage)); + if (cfStr) + { + CFRange range = {0, CFStringGetLength (cfStr)}; + CFIndex usedBytes; + if (CFStringGetBytes (cfStr, range, kCFStringEncodingUnicode, ' ', false, (UInt8*)dest, + charCount * 2, &usedBytes) > 0) + { + result = static_cast (usedBytes / 2 + 1); + if (dest) + dest[usedBytes / 2] = 0; + } + + CFRelease (cfStr); + } +#endif + +#if SMTG_OS_LINUX + if (sourceCodePage == kCP_ANSI || sourceCodePage == kCP_Utf8) + { + if (dest == nullptr) + { + auto state = std::mbstate_t (); + auto maxChars = charCount ? charCount : std::numeric_limits::max () - 1; + result = converterFacet ().length (state, source, source + strlen (source), maxChars); + } + else + { + auto utf16Str = converter ().from_bytes (source); + if (!utf16Str.empty ()) + { + result = std::min (charCount, utf16Str.size ()); + memcpy (dest, utf16Str.data (), result * sizeof (char16)); + dest[result] = 0; + } + } + } + else + { +#warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + } + +#endif + + SMTG_ASSERT (result > 0) + return result; +} + +//----------------------------------------------------------------------------- +int32 ConstString::wideStringToMultiByte (char8* dest, const char16* wideString, int32 charCount, uint32 destCodePage) +{ +#if SMTG_OS_WINDOWS + return WideCharToMultiByte (destCodePage, 0, wideString, -1, dest, charCount, 0, 0); + +#elif SMTG_OS_MACOS + int32 result = 0; + if (wideString != 0) + { + if (dest) + { + CFStringRef cfStr = CFStringCreateWithCharactersNoCopy (kCFAllocator, (const UniChar*)wideString, strlen16 (wideString), kCFAllocatorNull); + if (cfStr) + { + if (fromCFStringRef (dest, charCount, cfStr, MBCodePageToCFStringEncoding (destCodePage))) + result = static_cast (strlen (dest) + 1); + CFRelease (cfStr); + } + } + else + { + return static_cast (CFStringGetMaximumSizeForEncoding (strlen16 (wideString), MBCodePageToCFStringEncoding (destCodePage))); + } + } + return result; + +#elif SMTG_OS_LINUX + int32 result = 0; + if (destCodePage == kCP_Utf8) + { + if (dest == nullptr) + { + auto maxChars = charCount ? charCount : tstrlen (wideString); + result = converterFacet ().max_length () * maxChars; + } + else + { + auto utf8Str = converter ().to_bytes (wideString); + if (!utf8Str.empty ()) + { + result = std::min (charCount, utf8Str.size ()); + memcpy (dest, utf8Str.data (), result * sizeof (char8)); + dest[result] = 0; + } + } + } + else if (destCodePage == kCP_ANSI) + { + if (dest == nullptr) + { + result = strlen16 (wideString) + 1; + } + else + { + int32 i = 0; + for (; i < charCount; ++i) + { + if (wideString[i] == 0) + break; + if (wideString[i] <= 0x007F) + dest[i] = wideString[i]; + else + dest[i] = '_'; + } + dest[i] = 0; + result = i; + } + } + else + { +#warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + } + return result; + +#else +#warning DEPRECATED No Linux implementation + assert(false && "DEPRECATED No Linux implementation"); + return 0; +#endif + +} + +//----------------------------------------------------------------------------- +bool ConstString::isNormalized (UnicodeNormalization n) +{ + if (isWide == false) + return false; + +#if SMTG_OS_WINDOWS +#ifdef UNICODE + if (n != kUnicodeNormC) + return false; + uint32 normCharCount = static_cast (FoldString (MAP_PRECOMPOSED, buffer16, len, 0, 0)); + return (normCharCount == len); +#else + return false; +#endif + +#elif SMTG_OS_MACOS + if (n != kUnicodeNormC) + return false; + + CFStringRef cfStr = (CFStringRef)toCFStringRef (); + CFIndex charCount = CFStringGetLength (cfStr); + CFRelease (cfStr); + return (charCount == len); +#else + return false; +#endif +} + +//----------------------------------------------------------------------------- +// String +//----------------------------------------------------------------------------- +String::String () +{ + isWide = kWideStringDefault ? 1 : 0; +} + +//----------------------------------------------------------------------------- +String::String (const char8* str, MBCodePage codePage, int32 n, bool isTerminated) +{ + isWide = 0; + if (str) + { + assign (str, n, isTerminated); + toWideString (codePage); + } +} + +//----------------------------------------------------------------------------- +String::String (const char8* str, int32 n, bool isTerminated) +{ + if (str) + assign (str, n, isTerminated); +} + +//----------------------------------------------------------------------------- +String::String (const char16* str, int32 n, bool isTerminated) +{ + isWide = 1; + if (str) + assign (str, n, isTerminated); +} + +//----------------------------------------------------------------------------- +String::String (const String& str, int32 n) +{ + isWide = str.isWideString (); + if (!str.isEmpty ()) + assign (str, n); +} + +//----------------------------------------------------------------------------- +String::String (const ConstString& str, int32 n) +{ + isWide = str.isWideString (); + if (!str.isEmpty ()) + assign (str, n); +} + +//----------------------------------------------------------------------------- +String::String (const FVariant& var) +{ + isWide = kWideStringDefault ? 1 : 0; + fromVariant (var); +} + +//----------------------------------------------------------------------------- +String::String (IString* str) +{ + isWide = str->isWideString (); + if (isWide) + assign (str->getText16 ()); + else + assign (str->getText8 ()); +} + +//----------------------------------------------------------------------------- +String::~String () +{ + if (buffer) + resize (0, false); +} + +#if SMTG_CPP11_STDLIBSUPPORT +//----------------------------------------------------------------------------- +String::String (String&& str) +{ + *this = std::move (str); +} + +//----------------------------------------------------------------------------- +String& String::operator= (String&& str) +{ + SMTG_ASSERT (buffer == 0 || buffer != str.buffer); + tryFreeBuffer (); + + isWide = str.isWide; + buffer = str.buffer; + len = str.len; + str.buffer = nullptr; + str.len = 0; + return *this; +} +#endif + +//----------------------------------------------------------------------------- +void String::updateLength () +{ + if (isWide) + len = strlen16 (text16 ()); + else + len = strlen8 (text8 ()); +} + +//----------------------------------------------------------------------------- +bool String::toWideString (uint32 sourceCodePage) +{ + if (!isWide) + { + if (buffer8 && len > 0) + { + int32 bytesNeeded = multiByteToWideString (0, buffer8, 0, sourceCodePage) * sizeof (char16); + if (bytesNeeded) + { + bytesNeeded += sizeof (char16); + char16* newStr = (char16*) malloc (bytesNeeded); + if (multiByteToWideString (newStr, buffer8, len + 1, sourceCodePage) <= 0) + { + free (newStr); + return false; + } + free (buffer8); + buffer16 = newStr; + isWide = true; + updateLength (); + } + else + { + return false; + } + } + isWide = true; + } + return true; +} + +#define SMTG_STRING_CHECK_CONVERSION 1 +#define SMTG_STRING_CHECK_CONVERSION_NO_BREAK 1 + +#if SMTG_STRING_CHECK_CONVERSION_NO_BREAK + #define SMTG_STRING_CHECK_MSG FDebugPrint +#else + #define SMTG_STRING_CHECK_MSG FDebugBreak +#endif +//----------------------------------------------------------------------------- +bool String::checkToMultiByte (uint32 destCodePage) const +{ + if (!isWide || isEmpty ()) + return true; + +#if DEVELOPMENT && SMTG_STRING_CHECK_CONVERSION + int debugLen = length (); + int debugNonASCII = 0; + for (int32 i = 0; i < length (); i++) + { + if (buffer16[i] > 127) + ++debugNonASCII; + } + + String* backUp = nullptr; + if (debugNonASCII > 0) + backUp = NEW String (*this); +#endif + + // this should be avoided, since it can lead to information loss + bool result = const_cast (*this).toMultiByte (destCodePage); + +#if DEVELOPMENT && SMTG_STRING_CHECK_CONVERSION + if (backUp) + { + String temp (*this); + temp.toWideString (destCodePage); + + if (temp != *backUp) + { + backUp->toMultiByte (kCP_Utf8); + SMTG_STRING_CHECK_MSG ("Indirect string conversion information loss ! %d/%d non ASCII chars: \"%s\" -> \"%s\"\n", debugNonASCII, debugLen, backUp->buffer8, buffer8); + } + else + SMTG_STRING_CHECK_MSG ("Indirect string potential conversion information loss ! %d/%d non ASCII chars result: \"%s\"\n", debugNonASCII, debugLen, buffer8); + + delete backUp; + } +#endif + + return result; +} + +//----------------------------------------------------------------------------- +bool String::toMultiByte (uint32 destCodePage) +{ + if (isWide) + { + if (buffer16 && len > 0) + { + int32 numChars = wideStringToMultiByte (0, buffer16, 0, destCodePage) + sizeof (char8); + char8* newStr = (char8*) malloc (numChars * sizeof (char8)); + if (wideStringToMultiByte (newStr, buffer16, numChars, destCodePage) <= 0) + { + free (newStr); + return false; + } + free (buffer16); + buffer8 = newStr; + isWide = false; + updateLength (); + } + isWide = false; + } + else if (destCodePage != kCP_Default) + { + if (toWideString () == false) + return false; + return toMultiByte (destCodePage); + } + return true; +} + +//----------------------------------------------------------------------------- +void String::fromUTF8 (const char8* utf8String) +{ + assign (utf8String); + toWideString (kCP_Utf8); +} + +//----------------------------------------------------------------------------- +bool String::normalize (UnicodeNormalization n) +{ + if (isWide == false) + return false; + + if (buffer16 == 0) + return true; + +#if SMTG_OS_WINDOWS +#ifdef UNICODE + if (n != kUnicodeNormC) + return false; + + uint32 normCharCount = static_cast (FoldString (MAP_PRECOMPOSED, buffer16, len, 0, 0)); + if (normCharCount == len) + return true; + + char16* newString = (char16*)malloc ((normCharCount + 1) * sizeof (char16)); + uint32 converterCount = static_cast (FoldString (MAP_PRECOMPOSED, buffer16, len, newString, normCharCount + 1)); + if (converterCount != normCharCount) + { + free (newString); + return false; + } + newString [converterCount] = 0; + free (buffer16); + buffer16 = newString; + updateLength (); + return true; +#else + return false; +#endif + +#elif SMTG_OS_MACOS + CFMutableStringRef origStr = (CFMutableStringRef)toCFStringRef (0xFFFF, true); + if (origStr) + { + CFStringNormalizationForm normForm = kCFStringNormalizationFormD; + switch (n) + { + case kUnicodeNormC: normForm = kCFStringNormalizationFormC; break; + case kUnicodeNormD: normForm = kCFStringNormalizationFormD; break; + case kUnicodeNormKC: normForm = kCFStringNormalizationFormKC; break; + case kUnicodeNormKD: normForm = kCFStringNormalizationFormKD; break; + } + CFStringNormalize (origStr, normForm); + bool result = fromCFStringRef (origStr); + CFRelease (origStr); + return result; + } + return false; +#else + return false; +#endif +} + +//----------------------------------------------------------------------------- +void String::tryFreeBuffer () +{ + if (buffer) + { + free (buffer); + buffer = 0; + } +} + +//----------------------------------------------------------------------------- +bool String::resize (uint32 newLength, bool wide, bool fill) +{ + if (newLength == 0) + { + tryFreeBuffer (); + len = 0; + isWide = wide ? 1 : 0; + } + else + { + size_t newCharSize = wide ? sizeof (char16) : sizeof (char8); + size_t oldCharSize = (isWide != 0) ? sizeof (char16) : sizeof (char8); + + size_t newBufferSize = (newLength + 1) * newCharSize; + size_t oldBufferSize = (len + 1) * oldCharSize; + + isWide = wide ? 1 : 0; + + if (buffer) + { + if (newBufferSize != oldBufferSize) + { + void* newstr = realloc (buffer, newBufferSize); + if (newstr == 0) + return false; + buffer = newstr; + if (isWide) + buffer16[newLength] = 0; + else + buffer8[newLength] = 0; + } + else if (wide && newCharSize != oldCharSize) + buffer16[newLength] = 0; + } + else + { + void* newstr = malloc (newBufferSize); + if (newstr == 0) + return false; + buffer = newstr; + if (isWide) + { + buffer16[0] = 0; + buffer16[newLength] = 0; + } + else + { + buffer8[0] = 0; + buffer8[newLength] = 0; + } + } + + if (fill && len < newLength && buffer) + { + if (isWide) + { + char16 c = ' '; + for (uint32 i = len; i < newLength; i++) + buffer16 [i] = c; + } + else + { + memset (buffer8 + len, ' ', newLength - len); + } + } + } + return true; +} + +//----------------------------------------------------------------------------- +bool String::setChar8 (uint32 index, char8 c) +{ + if (index == len && c == 0) + return true; + + if (index >= len) + { + if (c == 0) + { + if (resize (index, isWide, true) == false) + return false; + len = index; + return true; + } + else + { + if (resize (index + 1, isWide, true) == false) + return false; + len = index + 1; + } + } + + if (index < len && buffer) + { + if (isWide) + { + if (c == 0) + buffer16[index] = 0; + else + { + char8 src[] = {c, 0}; + char16 dest[8] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + buffer16[index] = dest[0]; + } + SMTG_ASSERT (buffer16[len] == 0) + } + else + { + buffer8[index] = c; + SMTG_ASSERT (buffer8[len] == 0) + } + + if (c == 0) + updateLength (); + + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +bool String::setChar16 (uint32 index, char16 c) +{ + if (index == len && c == 0) + return true; + + if (index >= len) + { + if (c == 0) + { + if (resize (index, isWide, true) == false) + return false; + len = index; + return true; + } + else + { + if (resize (index + 1, isWide, true) == false) + return false; + len = index + 1; + } + } + + if (index < len && buffer) + { + if (isWide) + { + buffer16[index] = c; + SMTG_ASSERT (buffer16[len] == 0) + } + else + { + SMTG_ASSERT (buffer8[len] == 0) + char16 src[] = {c, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + buffer8[index] = dest[0]; + else + return false; + } + + if (c == 0) + updateLength (); + + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +String& String::assign (const ConstString& str, int32 n) +{ + if (str.isWideString ()) + return assign (str.text16 (), n < 0 ? str.length () : n); + else + return assign (str.text8 (), n < 0 ? str.length () : n); +} + +//----------------------------------------------------------------------------- +String& String::assign (const char8* str, int32 n, bool isTerminated) +{ + if (str == buffer8) + return *this; + + if (isTerminated) + { + uint32 stringLength = (uint32)((str) ? strlen (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + } + else if (n < 0) + return *this; + + if (resize (n, false)) + { + if (buffer8 && n > 0) + { + memcpy (buffer8, str, n * sizeof (char8)); + SMTG_ASSERT (buffer8[n] == 0) + } + isWide = 0; + len = n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::assign (const char16* str, int32 n, bool isTerminated) +{ + if (str == buffer16) + return *this; + + if (isTerminated) + { + uint32 stringLength = (uint32)((str) ? strlen16 (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + } + else if (n < 0) + return *this; + + if (resize (n, true)) + { + if (buffer16 && n > 0) + { + memcpy (buffer16, str, n * sizeof (char16)); + SMTG_ASSERT (buffer16[n] == 0) + } + isWide = 1; + len = n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::assign (char8 c, int32 n) +{ + if (resize (n, false)) + { + if (buffer8 && n > 0) + { + memset (buffer8, c, n * sizeof (char8)); + SMTG_ASSERT (buffer8[n] == 0) + } + isWide = 0; + len = n; + } + return *this; + +} + +//----------------------------------------------------------------------------- +String& String::assign (char16 c, int32 n) +{ + if (resize (n, true)) + { + if (buffer && n > 0) + { + for (int32 i = 0; i < n; i++) + buffer16[i] = c; + SMTG_ASSERT (buffer16[n] == 0) + } + isWide = 1; + len = n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::append (const ConstString& str, int32 n) +{ + if (str.isWideString ()) + return append (str.text16 (), n); + else + return append (str.text8 (), n); +} + +//----------------------------------------------------------------------------- +String& String::append (const char8* str, int32 n) +{ + if (str == buffer8) + return *this; + + if (len == 0) + return assign (str, n); + + if (isWide) + { + String tmp (str); + if (tmp.toWideString () == false) + return *this; + + return append (tmp.buffer16, n); + } + + uint32 stringLength = (uint32)((str) ? strlen (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (n > 0) + { + int32 newlen = n + len; + if (!resize (newlen, false)) + return *this; + + if (buffer) + { + memcpy (buffer8 + len, str, n * sizeof (char8)); + SMTG_ASSERT (buffer8[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::append (const char16* str, int32 n) +{ + if (str == buffer16) + return *this; + + if (len == 0) + return assign (str, n); + + if (!isWide) + { + if (toWideString () == false) + return *this; + } + + uint32 stringLength = (uint32)((str) ? strlen16 (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (n > 0) + { + int32 newlen = n + len; + if (!resize (newlen, true)) + return *this; + + if (buffer16) + { + memcpy (buffer16 + len, str, n * sizeof (char16)); + SMTG_ASSERT (buffer16[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::append (const char8 c, int32 n) +{ + char8 str[] = {c, 0}; + if (n == 1) + { + return append (str, 1); + } + else if (n > 1) + { + if (isWide) + { + String tmp (str); + if (tmp.toWideString () == false) + return *this; + + return append (tmp.buffer16[0], n); + } + + int32 newlen = n + len; + if (!resize (newlen, false)) + return *this; + + if (buffer) + { + memset (buffer8 + len, c, n * sizeof (char8)); + SMTG_ASSERT (buffer8[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::append (const char16 c, int32 n) +{ + if (n == 1) + { + char16 str[] = {c, 0}; + return append (str, 1); + } + else if (n > 1) + { + if (!isWide) + { + if (toWideString () == false) + return *this; + } + + int32 newlen = n + len; + if (!resize (newlen, true)) + return *this; + + if (buffer16) + { + for (int32 i = len; i < newlen; i++) + buffer16[i] = c; + SMTG_ASSERT (buffer16[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::insertAt (uint32 idx, const ConstString& str, int32 n) +{ + if (str.isWideString ()) + return insertAt (idx, str.text16 (), n); + else + return insertAt (idx, str.text8 (), n); +} + +//----------------------------------------------------------------------------- +String& String::insertAt (uint32 idx, const char8* str, int32 n) +{ + if (idx > len) + return *this; + + if (isWide) + { + String tmp (str); + if (tmp.toWideString () == false) + return *this; + return insertAt (idx, tmp.buffer16, n); + } + + uint32 stringLength = (uint32)((str) ? strlen (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (n > 0) + { + int32 newlen = len + n; + if (!resize (newlen, false)) + return *this; + + if (buffer) + { + if (idx < len) + memmove (buffer8 + idx + n, buffer8 + idx, (len - idx) * sizeof (char8)); + memcpy (buffer8 + idx, str, n * sizeof (char8)); + SMTG_ASSERT (buffer8[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::insertAt (uint32 idx, const char16* str, int32 n) +{ + if (idx > len) + return *this; + + if (!isWide) + { + if (toWideString () == false) + return *this; + } + + uint32 stringLength = (uint32)((str) ? strlen16 (str) : 0); + n = n < 0 ? stringLength : Min (n, stringLength); + + if (n > 0) + { + int32 newlen = len + n; + if (!resize (newlen, true)) + return *this; + + if (buffer) + { + if (idx < len) + memmove (buffer16 + idx + n, buffer16 + idx, (len - idx) * sizeof (char16)); + memcpy (buffer16 + idx, str, n * sizeof (char16)); + SMTG_ASSERT (buffer16[newlen] == 0) + } + + len += n; + } + return *this; +} + +//----------------------------------------------------------------------------- +String& String::replace (uint32 idx, int32 n1, const ConstString& str, int32 n2) +{ + if (str.isWideString ()) + return replace (idx, n1, str.text16 (), n2); + else + return replace (idx, n1, str.text8 (), n2); +} + +// "replace" replaces n1 number of characters at the specified index with +// n2 characters from the specified string. +//----------------------------------------------------------------------------- +String& String::replace (uint32 idx, int32 n1, const char8* str, int32 n2) +{ + if (idx > len || str == 0) + return *this; + + if (isWide) + { + String tmp (str); + if (tmp.toWideString () == false) + return *this; + if (tmp.length () == 0 || n2 == 0) + return remove (idx, n1); + return replace (idx, n1, tmp.buffer16, n2); + } + + if (n1 < 0 || idx + n1 > len) + n1 = len - idx; + if (n1 == 0) + return *this; + + uint32 stringLength = (uint32)((str) ? strlen (str) : 0); + n2 = n2 < 0 ? stringLength : Min (n2, stringLength); + + uint32 newlen = len - n1 + n2; + if (newlen > len) + if (!resize (newlen, false)) + return *this; + + if (buffer) + { + memmove (buffer8 + idx + n2, buffer8 + idx + n1, (len - (idx + n1)) * sizeof (char8)); + memcpy (buffer8 + idx, str, n2 * sizeof (char8)); + buffer8[newlen] = 0; // cannot be removed because resize is not called called in all cases (newlen > len) + } + + len = newlen; + + return *this; +} + +//----------------------------------------------------------------------------- +String& String::replace (uint32 idx, int32 n1, const char16* str, int32 n2) +{ + if (idx > len || str == 0) + return *this; + + if (!isWide) + { + if (toWideString () == false) + return *this; + } + + if (n1 < 0 || idx + n1 > len) + n1 = len - idx; + if (n1 == 0) + return *this; + + uint32 stringLength = (uint32)((str) ? strlen16 (str) : 0); + n2 = n2 < 0 ? stringLength : Min (n2, stringLength); + + uint32 newlen = len - n1 + n2; + if (newlen > len) + if (!resize (newlen, true)) + return *this; + + if (buffer) + { + memmove (buffer16 + idx + n2, buffer16 + idx + n1, (len - (idx + n1)) * sizeof (char16)); + memcpy (buffer16 + idx, str, n2 * sizeof (char16)); + buffer16[newlen] = 0; // cannot be removed because resize is not called called in all cases (newlen > len) + } + + len = newlen; + + return *this; +} + +//----------------------------------------------------------------------------- +int32 String::replace (const char8* toReplace, const char8* toReplaceWith, bool all, CompareMode m) +{ + if (toReplace == 0 || toReplaceWith == 0) + return 0; + + int32 result = 0; + + int32 idx = findFirst (toReplace, -1, m); + if (idx > -1) + { + int32 toReplaceLen = static_cast (strlen (toReplace)); + int32 toReplaceWithLen = static_cast (strlen (toReplaceWith)); + while (idx > -1) + { + replace (idx, toReplaceLen, toReplaceWith, toReplaceWithLen); + result++; + + if (all) + idx = findNext (idx + toReplaceWithLen , toReplace, -1, m); + else + break; + } + } + + return result; +} + +//----------------------------------------------------------------------------- +int32 String::replace (const char16* toReplace, const char16* toReplaceWith, bool all, CompareMode m) +{ + if (toReplace == 0 || toReplaceWith == 0) + return 0; + + int32 result = 0; + + int32 idx = findFirst (toReplace, -1, m); + if (idx > -1) + { + int32 toReplaceLen = strlen16 (toReplace); + int32 toReplaceWithLen = strlen16 (toReplaceWith); + while (idx > -1) + { + replace (idx, toReplaceLen, toReplaceWith, toReplaceWithLen); + result++; + + if (all) + idx = findNext (idx + toReplaceWithLen, toReplace, -1, m); + else + break; + } + } + return result; +} + +//----------------------------------------------------------------------------- +template +static bool performReplace (T* str, const T* toReplace, T toReplaceBy) +{ + bool anyReplace = false; + T* p = str; + while (*p) + { + const T* rep = toReplace; + while (*rep) + { + if (*p == *rep) + { + *p = toReplaceBy; + anyReplace = true; + break; + } + rep++; + } + p++; + } + return anyReplace; +} + +//----------------------------------------------------------------------------- +bool String::replaceChars8 (const char8* toReplace, char8 toReplaceBy) +{ + if (isEmpty ()) + return false; + + if (isWide) + { + String toReplaceW (toReplace); + if (toReplaceW.toWideString () == false) + return false; + + char8 src[] = {toReplaceBy, 0}; + char16 dest[2] = {0}; + if (multiByteToWideString (dest, src, 2) > 0) + { + return replaceChars16 (toReplaceW.text16 (), dest[0]); + } + return false; + } + + if (toReplaceBy == 0) + toReplaceBy = ' '; + + return performReplace (buffer8, toReplace, toReplaceBy); +} + +//----------------------------------------------------------------------------- +bool String::replaceChars16 (const char16* toReplace, char16 toReplaceBy) +{ + if (isEmpty ()) + return false; + + if (!isWide) + { + String toReplaceA (toReplace); + if (toReplaceA.toMultiByte () == false) + return false; + + if (toReplaceA.length () > 1) + { + SMTG_WARNING("cannot replace non ASCII chars on non Wide String") + return false; + } + + char16 src[] = {toReplaceBy, 0}; + char8 dest[8] = {0}; + if (wideStringToMultiByte (dest, src, 2) > 0 && dest[1] == 0) + return replaceChars8 (toReplaceA.text8 (), dest[0]); + + return false; + } + + if (toReplaceBy == 0) + toReplaceBy = STR16 (' '); + + return performReplace (buffer16, toReplace, toReplaceBy); +} + +// "remove" removes the specified number of characters from the string +// starting at the specified index. +//----------------------------------------------------------------------------- +String& String::remove (uint32 idx, int32 n) +{ + if (isEmpty () || idx >= len || n == 0) + return *this; + + if ((idx + n > len) || n < 0) + n = len - idx; + else + { + int32 toMove = len - idx - n; + if (buffer) + { + if (isWide) + memmove (buffer16 + idx, buffer16 + idx + n, toMove * sizeof (char16)); + else + memmove (buffer8 + idx, buffer8 + idx + n, toMove * sizeof (char8)); + } + } + + resize (len - n, isWide); + updateLength (); + + return *this; +} + +//----------------------------------------------------------------------------- +bool String::removeSubString (const ConstString& subString, bool allOccurences) +{ + bool removed = false; + while (!removed || allOccurences) + { + int32 idx = findFirst (subString); + if (idx < 0) + break; + remove (idx, subString.length ()); + removed = true; + } + return removed; +} + +//----------------------------------------------------------------------------- +template +static uint32 performTrim (T* str, uint32 length, F func, bool funcResult) +{ + uint32 toRemoveAtHead = 0; + uint32 toRemoveAtTail = 0; + + T* p = str; + + while ((*p) && ((func (*p) != 0) == funcResult)) + p++; + + toRemoveAtHead = static_cast (p - str); + + if (toRemoveAtHead < length) + { + p = str + length - 1; + + while (((func (*p) != 0) == funcResult) && (p > str)) + { + p--; + toRemoveAtTail++; + } + } + + uint32 newLength = length - (toRemoveAtHead + toRemoveAtTail); + if (newLength != length) + { + if (toRemoveAtHead) + memmove (str, str + toRemoveAtHead, newLength * sizeof (T)); + } + return newLength; +} + +// "trim" trims the leading and trailing unwanted characters from the string. +//----------------------------------------------------------------------------- +bool String::trim (String::CharGroup group) +{ + if (isEmpty ()) + return false; + + uint32 newLength; + + switch (group) + { + case kSpace: + if (isWide) + newLength = performTrim (buffer16, len, iswspace, true); + else + newLength = performTrim (buffer8, len, isspace, true); + break; + + case kNotAlphaNum: + if (isWide) + newLength = performTrim (buffer16, len, iswalnum, false); + else + newLength = performTrim (buffer8, len, isalnum, false); + break; + + case kNotAlpha: + if (isWide) + newLength = performTrim (buffer16, len, iswalpha, false); + else + newLength = performTrim (buffer8, len, isalpha, false); + break; + + default: // Undefined enum value + return false; + } + + if (newLength != len) + { + resize (newLength, isWide); + len = newLength; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +template +static uint32 performRemove (T* str, uint32 length, F func, bool funcResult) +{ + T* p = str; + + while (*p) + { + if ((func (*p) != 0) == funcResult) + { + size_t toMove = length - (p - str); + memmove (p, p + 1, toMove * sizeof (T)); + length--; + } + else + p++; + } + return length; +} +//----------------------------------------------------------------------------- +void String::removeChars (CharGroup group) +{ + if (isEmpty ()) + return; + + uint32 newLength; + + switch (group) + { + case kSpace: + if (isWide) + newLength = performRemove (buffer16, len, iswspace, true); + else + newLength = performRemove (buffer8, len, isspace, true); + break; + + case kNotAlphaNum: + if (isWide) + newLength = performRemove (buffer16, len, iswalnum, false); + else + newLength = performRemove (buffer8, len, isalnum, false); + break; + + case kNotAlpha: + if (isWide) + newLength = performRemove (buffer16, len, iswalpha, false); + else + newLength = performRemove (buffer8, len, isalpha, false); + break; + + default: // Undefined enum value + return; + } + + if (newLength != len) + { + resize (newLength, isWide); + len = newLength; + } +} + +//----------------------------------------------------------------------------- +template +static uint32 performRemoveChars (T* str, uint32 length, const T* toRemove) +{ + T* p = str; + + while (*p) + { + bool found = false; + const T* rem = toRemove; + while (*rem) + { + if (*p == *rem) + { + found = true; + break; + } + rem++; + } + + if (found) + { + size_t toMove = length - (p - str); + memmove (p, p + 1, toMove * sizeof (T)); + length--; + } + else + p++; + } + return length; +} + +//----------------------------------------------------------------------------- +bool String::removeChars8 (const char8* toRemove) +{ + if (isEmpty () || toRemove == 0) + return true; + + if (isWide) + { + String wStr (toRemove); + if (wStr.toWideString () == false) + return false; + return removeChars16 (wStr.text16 ()); + } + + uint32 newLength = performRemoveChars (buffer8, len, toRemove); + + if (newLength != len) + { + resize (newLength, false); + len = newLength; + } + return true; +} + +//----------------------------------------------------------------------------- +bool String::removeChars16 (const char16* toRemove) +{ + if (isEmpty () || toRemove == 0) + return true; + + if (!isWide) + { + String str8 (toRemove); + if (str8.toMultiByte () == false) + return false; + return removeChars8 (str8.text8 ()); + } + + uint32 newLength = performRemoveChars (buffer16, len, toRemove); + + if (newLength != len) + { + resize (newLength, true); + len = newLength; + } + return true; +} + +//----------------------------------------------------------------------------- +String& String::printf (const char8* format, ...) +{ + char8 string[kPrintfBufferSize]; + + va_list marker; + va_start (marker, format); + + vsnprintf (string, kPrintfBufferSize-1, format, marker); + return assign (string); +} + + +//----------------------------------------------------------------------------- +String& String::printf (const char16* format, ...) +{ + char16 string[kPrintfBufferSize]; + + va_list marker; + va_start (marker, format); + + vsnwprintf (string, kPrintfBufferSize-1, format, marker); + return assign (string); +} + +//----------------------------------------------------------------------------- +String& String::vprintf (const char8* format, va_list args) +{ + char8 string[kPrintfBufferSize]; + + vsnprintf (string, kPrintfBufferSize-1, format, args); + return assign (string); +} + +//----------------------------------------------------------------------------- +String& String::vprintf (const char16* format, va_list args) +{ + char16 string[kPrintfBufferSize]; + + vsnwprintf (string, kPrintfBufferSize-1, format, args); + return assign (string); +} + +//----------------------------------------------------------------------------- +String& String::printInt64 (int64 value) +{ + if (isWide) + { + #if SMTG_CPP11 + return String::printf (STR("%") STR(FORMAT_INT64A), value); + #else + return String::printf (STR("%" FORMAT_INT64A), value); + #endif + } + else + return String::printf ("%" FORMAT_INT64A, value); +} + +//----------------------------------------------------------------------------- +String& String::printFloat (double value) +{ + if (isWide) + { + char16 string[kPrintfBufferSize]; + sprintf16 (string, STR16 ("%lf"), value); + + char16* pointPtr = strrchr16 (string, STR ('.')); + if (pointPtr) + { + pointPtr++; // keep 1st digit after point + int32 index = strlen16 (string) - 1; + char16 zero = STR16 ('0'); + while (pointPtr < (string + index)) + { + if (string[index] == zero) + { + string[index] = 0; + index--; + } + else + break; + } + } + return assign (string); + } + else + { + char8 string[kPrintfBufferSize]; + sprintf (string, "%lf", value); + + char8* pointPtr = strrchr (string, '.'); + if (pointPtr) + { + pointPtr++; // keep 1st digit after point + int32 index = (int32) (strlen (string) - 1); + while (pointPtr < (string + index)) + { + if (string[index] == '0') + { + string[index] = 0; + index--; + } + else + break; + } + } + return assign (string); + } +} + +//----------------------------------------------------------------------------- +bool String::incrementTrailingNumber (uint32 width, tchar separator, uint32 minNumber, bool applyOnlyFormat) +{ + if (width > 32) + return false; + + int64 number = 1; + int32 index = getTrailingNumberIndex (); + if (index >= 0) + { + if (scanInt64 (number, index)) + if (!applyOnlyFormat) + number++; + + if (separator != 0 && index > 0 && testChar (index - 1, separator) == true) + index--; + + remove (index); + } + + if (number < minNumber) + number = minNumber; + + if (isWide) + { + char16 format[64]; + char16 trail[128]; + if (separator && isEmpty () == false) + { + sprintf16 (format, STR16 ("%%c%%0%uu"), width); + sprintf16 (trail, format, separator, (uint32) number); + } + else + { + sprintf16 (format, STR16 ("%%0%uu"), width); + sprintf16 (trail, format, (uint32) number); + } + append (trail); + } + else + { + char format[64]; + char trail[128]; + if (separator && isEmpty () == false) + { + sprintf (format, "%%c%%0%uu", width); + sprintf (trail, format, separator, (uint32) number); + } + else + { + sprintf (format, "%%0%uu", width); + sprintf (trail, format, (uint32) number); + } + append (trail); + } + + return true; +} + +//----------------------------------------------------------------------------- +void String::toLower (uint32 index) +{ + if (buffer && index < len) + { + if (isWide) + buffer16[index] = ConstString::toLower (buffer16[index]); + else + buffer8[index] = ConstString::toLower (buffer8[index]); + } +} + +//----------------------------------------------------------------------------- +void String::toLower () +{ + int32 i = len; + if (buffer && i > 0) + { + if (isWide) + { +#if SMTG_OS_MACOS + CFMutableStringRef cfStr = CFStringCreateMutableWithExternalCharactersNoCopy (kCFAllocator, (UniChar*)buffer16, len, len+1, kCFAllocatorNull); + CFStringLowercase (cfStr, NULL); + CFRelease (cfStr); +#else + char16* c = buffer16; + while (i--) + { + *c = ConstString::toLower (*c); + c++; + } +#endif + } + else + { + char8* c = buffer8; + while (i--) + { + *c = ConstString::toLower (*c); + c++; + } + } + } +} + +//----------------------------------------------------------------------------- +void String::toUpper (uint32 index) +{ + if (buffer && index < len) + { + if (isWide) + buffer16[index] = ConstString::toUpper (buffer16[index]); + else + buffer8[index] = ConstString::toUpper (buffer8[index]); + } +} + +//----------------------------------------------------------------------------- +void String::toUpper () +{ + int32 i = len; + if (buffer && i > 0) + { + if (isWide) + { +#if SMTG_OS_MACOS + CFMutableStringRef cfStr = CFStringCreateMutableWithExternalCharactersNoCopy (kCFAllocator, (UniChar*)buffer16, len, len+1, kCFAllocatorNull); + CFStringUppercase (cfStr, NULL); + CFRelease (cfStr); +#else + char16* c = buffer16; + while (i--) + { + *c = ConstString::toUpper (*c); + c++; + } +#endif + } + else + { + char8* c = buffer8; + while (i--) + { + *c = ConstString::toUpper (*c); + c++; + } + } + } +} + +//----------------------------------------------------------------------------- +bool String::fromVariant (const FVariant& var) +{ + switch (var.getType ()) + { + case FVariant::kString8: + assign (var.getString8 ()); + return true; + + case FVariant::kString16: + assign (var.getString16 ()); + return true; + + case FVariant::kFloat: + printFloat (var.getFloat ()); + return true; + + case FVariant::kInteger: + printInt64 (var.getInt ()); + return true; + + default: + remove (); + } + return false; +} + +//----------------------------------------------------------------------------- +void String::toVariant (FVariant& var) const +{ + if (isWide) + { + var.setString16 (text16 ()); + } + else + { + var.setString8 (text8 ()); + } +} + +//----------------------------------------------------------------------------- +bool String::fromAttributes (IAttributes* a, IAttrID attrID) +{ + FVariant variant; + if (a->get (attrID, variant) == kResultTrue) + return fromVariant (variant); + return false; +} + +//----------------------------------------------------------------------------- +bool String::toAttributes (IAttributes* a, IAttrID attrID) +{ + FVariant variant; + toVariant (variant); + if (a->set (attrID, variant) == kResultTrue) + return true; + return false; +} + +// "swapContent" swaps ownership of the strings pointed to +//----------------------------------------------------------------------------- +void String::swapContent (String& s) +{ + void* tmp = s.buffer; + uint32 tmpLen = s.len; + bool tmpWide = s.isWide; + s.buffer = buffer; + s.len = len; + s.isWide = isWide; + buffer = tmp; + len = tmpLen; + isWide = tmpWide; +} + +//----------------------------------------------------------------------------- +void String::take (String& other) +{ + resize (0, other.isWide); + buffer = other.buffer; + len = other.len; + + other.buffer = 0; + other.len = 0; +} + +//----------------------------------------------------------------------------- +void String::take (void* b, bool wide) +{ + resize (0, wide); + buffer = b; + isWide = wide; + updateLength (); +} + +//----------------------------------------------------------------------------- +void* String::pass () +{ + void* res = buffer; + len = 0; + buffer = 0; + return res; +} + +//----------------------------------------------------------------------------- +void String::passToVariant (FVariant& var) +{ + void* passed = pass (); + + if (isWide) + { + if (passed) + { + var.setString16 ((const char16*)passed); + var.setOwner (true); + } + else + var.setString16 (kEmptyString16); + } + else + { + if (passed) + { + var.setString8 ((const char8*)passed); + var.setOwner (true); + } + else + var.setString8 (kEmptyString8); + } +} + + +//----------------------------------------------------------------------------- +unsigned char* String::toPascalString (unsigned char* buf) +{ + if (buffer) + { + if (isWide) + { + String tmp (*this); + tmp.toMultiByte (); + return tmp.toPascalString (buf); + } + + int32 length = len; + if (length > 255) + length = 255; + buf[0] = (uint8)length; + while (length >= 0) + { + buf[length + 1] = buffer8[length]; + length--; + } + return buf; + } + else + { + *buf = 0; + return buf; + } +} + +//----------------------------------------------------------------------------- +const String& String::fromPascalString (const unsigned char* buf) +{ + resize (0, false); + isWide = 0; + int32 length = buf[0]; + resize (length + 1, false); + buffer8[length] = 0; // cannot be removed, because we only do the 0-termination for multibyte buffer8 + while (--length >= 0) + buffer8[length] = buf[length + 1]; + len = buf[0]; + return *this; +} + +#if SMTG_OS_MACOS + +//----------------------------------------------------------------------------- +bool String::fromCFStringRef (const void* cfStr, uint32 encoding) +{ + if (cfStr == 0) + return false; + + CFStringRef strRef = (CFStringRef)cfStr; + if (isWide) + { + CFRange range = { 0, CFStringGetLength (strRef)}; + CFIndex usedBytes; + if (resize (static_cast (range.length + 1), true)) + { + if (encoding == 0xFFFF) + encoding = kCFStringEncodingUnicode; + if (CFStringGetBytes (strRef, range, encoding, ' ', false, (UInt8*)buffer16, range.length * 2, &usedBytes) > 0) + { + buffer16[usedBytes/2] = 0; + this->len = strlen16 (buffer16); + return true; + } + } + } + else + { + if (cfStr == 0) + return false; + if (encoding == 0xFFFF) + encoding = kCFStringEncodingASCII; + int32 len = static_cast (CFStringGetLength (strRef) * 2); + if (resize (++len, false)) + { + if (CFStringGetCString (strRef, buffer8, len, encoding)) + { + this->len = static_cast (strlen (buffer8)); + return true; + } + } + } + + return false; +} + +//----------------------------------------------------------------------------- +void* ConstString::toCFStringRef (uint32 encoding, bool mutableCFString) const +{ + if (mutableCFString) + { + CFMutableStringRef str = CFStringCreateMutable (kCFAllocator, 0); + if (isWide) + { + CFStringAppendCharacters (str, (const UniChar *)buffer16, len); + return str; + } + else + { + if (encoding == 0xFFFF) + encoding = kCFStringEncodingASCII; + CFStringAppendCString (str, buffer8, encoding); + return str; + } + } + else + { + if (isWide) + { + if (encoding == 0xFFFF) + encoding = kCFStringEncodingUnicode; + return (void*)CFStringCreateWithBytes (kCFAllocator, (const unsigned char*)buffer16, len * 2, encoding, false); + } + else + { + if (encoding == 0xFFFF) + encoding = kCFStringEncodingASCII; + if (buffer8) + return (void*)CFStringCreateWithCString (kCFAllocator, buffer8, encoding); + else + return (void*)CFStringCreateWithCString (kCFAllocator, "", encoding); + } + } + return 0; +} + +#endif + +//----------------------------------------------------------------------------- +uint32 hashString8 (const char8* s, uint32 m) +{ + uint32 h = 0; + if (s) + { + for (h = 0; *s != '\0'; s++) + h = (64 * h + *s) % m; + } + return h; +} + +//----------------------------------------------------------------------------- +uint32 hashString16 (const char16* s, uint32 m) +{ + uint32 h = 0; + if (s) + { + for (h = 0; *s != 0; s++) + h = (64 * h + *s) % m; + } + return h; +} + +//------------------------------------------------------------------------ +template int32 tstrnatcmp (const T* s1, const T* s2, bool caseSensitive = true) +{ + if (s1 == 0 && s2 == 0) + return 0; + else if (s1 == 0) + return -1; + else if (s2 == 0) + return 1; + + while (*s1 && *s2) + { + if (ConstString::isCharDigit (*s1) && ConstString::isCharDigit (*s2)) + { + int32 s1LeadingZeros = 0; + while (*s1 == '0') + { + s1++; // skip leading zeros + s1LeadingZeros++; + } + int32 s2LeadingZeros = 0; + while (*s2 == '0') + { + s2++; // skip leading zeros + s2LeadingZeros++; + } + + int32 countS1Digits = 0; + while (*(s1 + countS1Digits) && ConstString::isCharDigit (*(s1 + countS1Digits))) + countS1Digits++; + int32 countS2Digits = 0; + while (*(s2 + countS2Digits) && ConstString::isCharDigit (*(s2 + countS2Digits))) + countS2Digits++; + + if (countS1Digits != countS2Digits) + return countS1Digits - countS2Digits; // one number is longer than the other + + for (int32 i = 0; i < countS1Digits; i++) + { + // countS1Digits == countS2Digits + if (*s1 != *s2) + return (int32)(*s1 - *s2); // the digits differ + s1++; + s2++; + } + + if (s1LeadingZeros != s2LeadingZeros) + return s1LeadingZeros - s2LeadingZeros; // differentiate by the number of leading zeros + } + else + { + if (caseSensitive == false) + { + T srcToUpper = toupper (*s1); + T dstToUpper = toupper (*s2); + if (srcToUpper != dstToUpper) + return (int32)(srcToUpper - dstToUpper); + } + else if (*s1 != *s2) + return (int32)(*s1 - *s2); + + s1++; + s2++; + } + } + + if (*s1 == 0 && *s2 == 0) + return 0; + else if (*s1 == 0) + return -1; + else if (*s2 == 0) + return 1; + else + return (int32)(*s1 - *s2); +} + +//------------------------------------------------------------------------ +int32 strnatcmp8 (const char8* s1, const char8* s2, bool caseSensitive /*= true*/) +{ + return tstrnatcmp (s1, s2, caseSensitive); +} + +//------------------------------------------------------------------------ +int32 strnatcmp16 (const char16* s1, const char16* s2, bool caseSensitive /*= true*/) +{ + return tstrnatcmp (s1, s2, caseSensitive); +} + +//----------------------------------------------------------------------------- +// StringObject Implementation +//----------------------------------------------------------------------------- +void PLUGIN_API StringObject::setText (const char8* text) +{ + assign (text); +} + +//----------------------------------------------------------------------------- +void PLUGIN_API StringObject::setText8 (const char8* text) +{ + assign (text); +} + +//----------------------------------------------------------------------------- +void PLUGIN_API StringObject::setText16 (const char16* text) +{ + assign (text); +} + +//----------------------------------------------------------------------------- +const char8* PLUGIN_API StringObject::getText8 () +{ + return text8 (); +} + +//----------------------------------------------------------------------------- +const char16* PLUGIN_API StringObject::getText16 () +{ + return text16 (); +} + +//----------------------------------------------------------------------------- +void PLUGIN_API StringObject::take (void* s, bool _isWide) +{ + String::take (s, _isWide); +} + +//----------------------------------------------------------------------------- +bool PLUGIN_API StringObject::isWideString () const +{ + return String::isWideString (); +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h new file mode 100644 index 00000000..28b35192 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h @@ -0,0 +1,747 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/fstring.h +// Created by : Steinberg, 2008 +// Description : String class +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/ftypes.h" +#include "pluginterfaces/base/fstrdefs.h" +#include "pluginterfaces/base/istringresult.h" +#include "pluginterfaces/base/ipersistent.h" + +#include "base/source/fobject.h" + +#include + +namespace Steinberg { + +class FVariant; +class String; + +#ifdef UNICODE +static const bool kWideStringDefault = true; +#else +static const bool kWideStringDefault = false; +#endif + +static const uint16 kBomUtf16 = 0xFEFF; ///< UTF16 Byte Order Mark +static const char8* const kBomUtf8 = "\xEF\xBB\xBF"; ///< UTF8 Byte Order Mark +static const int32 kBomUtf8Length = 3; + + +enum MBCodePage +{ + kCP_ANSI = 0, ///< Default ANSI codepage. + kCP_MAC_ROMAN = 2, ///< Default Mac codepage. + + kCP_ANSI_WEL = 1252, ///< West European Latin Encoding. + kCP_MAC_CEE = 10029, ///< Mac Central European Encoding. + kCP_Utf8 = 65001, ///< UTF8 Encoding. + kCP_ShiftJIS = 932, ///< Shifted Japan Industrial Standard Encoding. + kCP_US_ASCII = 20127, ///< US-ASCII (7-bit). + + kCP_Default = kCP_ANSI ///< Default ANSI codepage. +}; + +enum UnicodeNormalization +{ + kUnicodeNormC, ///< Unicode normalization Form C, canonical composition. + kUnicodeNormD, ///< Unicode normalization Form D, canonical decomposition. + kUnicodeNormKC, ///< Unicode normalization form KC, compatibility composition. + kUnicodeNormKD ///< Unicode normalization form KD, compatibility decomposition. +}; + +//------------------------------------------------------------------------ +// Helper functions to create hash codes from string data. +//------------------------------------------------------------------------ +extern uint32 hashString8 (const char8* s, uint32 m); +extern uint32 hashString16 (const char16* s, uint32 m); +inline uint32 hashString (const tchar* s, uint32 m) +{ +#ifdef UNICODE + return hashString16 (s, m); +#else + return hashString8 (s, m); +#endif +} + + +//----------------------------------------------------------------------------- +/** Invariant String. +@ingroup adt + +A base class which provides methods to work with its +member string. Neither of the operations allows modifying the member string and +that is why all operation are declared as const. + +There are operations for access, comparison, find, numbers and conversion. + +Almost all operations exist in three versions for char8, char16 and the +polymorphic type tchar. The type tchar can either be char8 or char16 depending +on whether UNICODE is activated or not.*/ +//----------------------------------------------------------------------------- +class ConstString +{ +public: +//----------------------------------------------------------------------------- + ConstString (const char8* str, int32 length = -1); ///< Assign from string of type char8 (length=-1: all) + ConstString (const char16* str, int32 length = -1); ///< Assign from string of type char16 (length=-1: all) + ConstString (const ConstString& str, int32 offset = 0, int32 length = -1); ///< Copy constructor (length=-1: all). + ConstString (const FVariant& var); ///< Assign a string from FVariant + ConstString (); + virtual ~ConstString () {} ///< Destructor. + + // access ----------------------------------------------------------------- + virtual int32 length () const {return static_cast (len);} ///< Return length of string + inline bool isEmpty () const {return buffer == 0 || len == 0;} ///< Return true if string is empty + + operator const char8* () const {return text8 ();} ///< Returns pointer to string of type char8 (no modification allowed) + operator const char16* () const {return text16 ();} ///< Returns pointer to string of type char16(no modification allowed) + inline tchar operator[] (short idx) const {return getChar (static_cast (idx));} ///< Returns character at 'idx' + inline tchar operator[] (long idx) const {return getChar (static_cast (idx));} + inline tchar operator[] (int idx) const {return getChar (static_cast (idx));} + inline tchar operator[] (unsigned short idx) const {return getChar (idx);} + inline tchar operator[] (unsigned long idx) const {return getChar (static_cast (idx));} + inline tchar operator[] (unsigned int idx) const {return getChar (idx);} + + inline virtual const char8* text8 () const; ///< Returns pointer to string of type char8 + inline virtual const char16* text16 () const; ///< Returns pointer to string of type char16 + inline virtual const tchar* text () const; ///< Returns pointer to string of type tchar + inline virtual const void* ptr () const {return buffer;} ///< Returns pointer to string of type void + + inline virtual char8 getChar8 (uint32 index) const; ///< Returns character of type char16 at 'index' + inline virtual char16 getChar16 (uint32 index) const; ///< Returns character of type char8 at 'index' + inline tchar getChar (uint32 index) const; ///< Returns character of type tchar at 'index' + inline tchar getCharAt (uint32 index) const; ///< Returns character of type tchar at 'index', no conversion! + + bool testChar8 (uint32 index, char8 c) const; ///< Returns true if character is equal at position 'index' + bool testChar16 (uint32 index, char16 c) const; + inline bool testChar (uint32 index, char8 c) const {return testChar8 (index, c);} + inline bool testChar (uint32 index, char16 c) const {return testChar16 (index, c);} + + bool extract (String& result, uint32 idx, int32 n = -1) const; ///< Get n characters long substring starting at index (n=-1: until end) + int32 copyTo8 (char8* str, uint32 idx = 0, int32 n = -1) const; + int32 copyTo16 (char16* str, uint32 idx = 0, int32 n = -1) const; + int32 copyTo (tchar* str, uint32 idx = 0, int32 n = -1) const; + void copyTo (IStringResult* result) const; ///< Copies whole member string + void copyTo (IString& string) const; ///< Copies whole member string + + inline uint32 hash (uint32 tsize) const + { + return isWide ? hashString16 (buffer16, tsize) : hashString8 (buffer8, tsize) ; + } + //------------------------------------------------------------------------- + + // compare ---------------------------------------------------------------- + enum CompareMode + { + kCaseSensitive, ///< Comparison is done with regard to character's case + kCaseInsensitive ///< Comparison is done without regard to character's case + }; + + int32 compareAt (uint32 index, const ConstString& str, int32 n = -1, CompareMode m = kCaseSensitive) const; ///< Compare n characters of str with n characters of this starting at index (return: see above) + int32 compare (const ConstString& str, int32 n, CompareMode m = kCaseSensitive) const; ///< Compare n characters of str with n characters of this (return: see above) + int32 compare (const ConstString& str, CompareMode m = kCaseSensitive) const; ///< Compare all characters of str with this (return: see above) + + int32 naturalCompare (const ConstString& str, CompareMode mode = kCaseSensitive) const; + + bool startsWith (const ConstString& str, CompareMode m = kCaseSensitive) const; ///< Check if this starts with str + bool endsWith (const ConstString& str, CompareMode m = kCaseSensitive) const; ///< Check if this ends with str + bool contains (const ConstString& str, CompareMode m = kCaseSensitive) const; ///< Check if this contains str + + // static methods + static bool isCharSpace (char8 character); ///< Returns true if character is a space + static bool isCharSpace (char16 character); ///< @copydoc isCharSpace(const char8) + static bool isCharAlpha (char8 character); ///< Returns true if character is an alphabetic character + static bool isCharAlpha (char16 character); ///< @copydoc isCharAlpha(const char8) + static bool isCharAlphaNum (char8 character); ///< Returns true if character is an alphanumeric character + static bool isCharAlphaNum (char16 character); ///< @copydoc isCharAlphaNum(const char8) + static bool isCharDigit (char8 character); ///< Returns true if character is a number + static bool isCharDigit (char16 character); ///< @copydoc isCharDigit(const char8) + static bool isCharAscii (char8 character); ///< Returns true if character is in ASCII range + static bool isCharAscii (char16 character); ///< Returns true if character is in ASCII range + static bool isCharUpper (char8 character); + static bool isCharUpper (char16 character); + static bool isCharLower (char8 character); + static bool isCharLower (char16 character); + //------------------------------------------------------------------------- + + /** @name Find first occurrence of n characters of str in this (n=-1: all) ending at endIndex (endIndex = -1: all)*/ + ///@{ + inline int32 findFirst (const ConstString& str, int32 n = -1, CompareMode m = kCaseSensitive, int32 endIndex = -1) const {return findNext (0, str, n, m, endIndex);} + inline int32 findFirst (char8 c, CompareMode m = kCaseSensitive, int32 endIndex = -1) const {return findNext (0, c, m, endIndex);} + inline int32 findFirst (char16 c, CompareMode m = kCaseSensitive, int32 endIndex = -1) const {return findNext (0, c, m, endIndex);} + ///@} + /** @name Find next occurrence of n characters of str starting at startIndex in this (n=-1: all) ending at endIndex (endIndex = -1: all)*/ + ///@{ + int32 findNext (int32 startIndex, const ConstString& str, int32 n = -1, CompareMode = kCaseSensitive, int32 endIndex = -1) const; + int32 findNext (int32 startIndex, char8 c, CompareMode = kCaseSensitive, int32 endIndex = -1) const; + int32 findNext (int32 startIndex, char16 c, CompareMode = kCaseSensitive, int32 endIndex = -1) const; + ///@} + /** @name Find previous occurrence of n characters of str starting at startIndex in this (n=-1: all) */ + ///@{ + int32 findPrev (int32 startIndex, const ConstString& str, int32 n = -1, CompareMode = kCaseSensitive) const; + int32 findPrev (int32 startIndex, char8 c, CompareMode = kCaseSensitive) const; + int32 findPrev (int32 startIndex, char16 c, CompareMode = kCaseSensitive) const; + ///@} + + inline int32 findLast (const ConstString& str, int32 n = -1, CompareMode m = kCaseSensitive) const {return findPrev (-1, str, n, m);} ///< Find last occurrence of n characters of str in this (n=-1: all) + inline int32 findLast (char8 c, CompareMode m = kCaseSensitive) const {return findPrev (-1, c, m);} + inline int32 findLast (char16 c, CompareMode m = kCaseSensitive) const {return findPrev (-1, c, m);} + + int32 countOccurences (char8 c, uint32 startIndex, CompareMode = kCaseSensitive) const; ///< Counts occurences of c within this starting at index + int32 countOccurences (char16 c, uint32 startIndex, CompareMode = kCaseSensitive) const; + int32 getFirstDifferent (const ConstString& str, CompareMode = kCaseSensitive) const; ///< Returns position of first different character + //------------------------------------------------------------------------- + + // numbers ---------------------------------------------------------------- + bool isDigit (uint32 index) const; ///< Returns true if character at position is a digit + bool scanFloat (double& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to double value starting at offset + bool scanInt64 (int64& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to int64 value starting at offset + bool scanUInt64 (uint64& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to uint64 value starting at offset + bool scanInt32 (int32& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to int32 value starting at offset + bool scanUInt32 (uint32& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to uint32 value starting at offset + bool scanHex (uint8& value, uint32 offset = 0, bool scanToEnd = true) const; ///< Converts string to hex/uint8 value starting at offset + + int32 getTrailingNumberIndex (uint32 width = 0) const; ///< Returns start index of trailing number + int64 getTrailingNumber (int64 fallback = 0) const; ///< Returns result of scanInt64 or the fallback + int64 getNumber () const; ///< Returns result of scanInt64 + + // static methods + static bool scanInt64_8 (const char8* text, int64& value, bool scanToEnd = true); ///< Converts string of type char8 to int64 value + static bool scanInt64_16 (const char16* text, int64& value, bool scanToEnd = true); ///< Converts string of type char16 to int64 value + static bool scanInt64 (const tchar* text, int64& value, bool scanToEnd = true); ///< Converts string of type tchar to int64 value + + static bool scanUInt64_8 (const char8* text, uint64& value, bool scanToEnd = true); ///< Converts string of type char8 to uint64 value + static bool scanUInt64_16 (const char16* text, uint64& value, bool scanToEnd = true); ///< Converts string of type char16 to uint64 value + static bool scanUInt64 (const tchar* text, uint64& value, bool scanToEnd = true); ///< Converts string of type tchar to uint64 value + + static bool scanInt32_8 (const char8* text, int32& value, bool scanToEnd = true); ///< Converts string of type char8 to int32 value + static bool scanInt32_16 (const char16* text, int32& value, bool scanToEnd = true); ///< Converts string of type char16 to int32 value + static bool scanInt32 (const tchar* text, int32& value, bool scanToEnd = true); ///< Converts string of type tchar to int32 value + + static bool scanUInt32_8 (const char8* text, uint32& value, bool scanToEnd = true); ///< Converts string of type char8 to int32 value + static bool scanUInt32_16 (const char16* text, uint32& value, bool scanToEnd = true); ///< Converts string of type char16 to int32 value + static bool scanUInt32 (const tchar* text, uint32& value, bool scanToEnd = true); ///< Converts string of type tchar to int32 value + + static bool scanHex_8 (const char8* text, uint8& value, bool scanToEnd = true); ///< Converts string of type char8 to hex/unit8 value + static bool scanHex_16 (const char16* text, uint8& value, bool scanToEnd = true); ///< Converts string of type char16 to hex/unit8 value + static bool scanHex (const tchar* text, uint8& value, bool scanToEnd = true); ///< Converts string of type tchar to hex/unit8 value + //------------------------------------------------------------------------- + + // conversion ------------------------------------------------------------- + void toVariant (FVariant& var) const; + + static char8 toLower (char8 c); ///< Converts to lower case + static char8 toUpper (char8 c); ///< Converts to upper case + static char16 toLower (char16 c); + static char16 toUpper (char16 c); + + static int32 multiByteToWideString (char16* dest, const char8* source, int32 wcharCount, uint32 sourceCodePage = kCP_Default); ///< If dest is zero, this returns the maximum number of bytes needed to convert source + static int32 wideStringToMultiByte (char8* dest, const char16* source, int32 char8Count, uint32 destCodePage = kCP_Default); ///< If dest is zero, this returns the maximum number of bytes needed to convert source + + bool isWideString () const {return isWide != 0;} ///< Returns true if string is wide + bool isAsciiString () const; ///< Checks if all characters in string are in ascii range + + bool isNormalized (UnicodeNormalization = kUnicodeNormC); ///< On PC only kUnicodeNormC is working + +#if SMTG_OS_MACOS + virtual void* toCFStringRef (uint32 encoding = 0xFFFF, bool mutableCFString = false) const; ///< CFString conversion +#endif +//------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +protected: + + union + { + void* buffer; + char8* buffer8; + char16* buffer16; + }; + uint32 len : 30; + uint32 isWide : 1; +}; + +//----------------------------------------------------------------------------- +/** String. +@ingroup adt + +Extends class ConstString by operations which allow modifications. + +\see ConstString */ +//----------------------------------------------------------------------------- +class String : public ConstString +{ +public: +//----------------------------------------------------------------------------- + String (); + String (const char8* str, MBCodePage codepage, int32 n = -1, bool isTerminated = true); ///< assign n characters of str and convert to wide string by using the specified codepage + String (const char8* str, int32 n = -1, bool isTerminated = true); ///< assign n characters of str (-1: all) + String (const char16* str, int32 n = -1, bool isTerminated = true); ///< assign n characters of str (-1: all) + String (const String& str, int32 n = -1); ///< assign n characters of str (-1: all) + String (const ConstString& str, int32 n = -1); ///< assign n characters of str (-1: all) + String (const FVariant& var); ///< assign from FVariant + String (IString* str); ///< assign from IString + ~String (); + +#if SMTG_CPP11_STDLIBSUPPORT + String (String&& str); + String& operator= (String&& str); +#endif + + // access------------------------------------------------------------------ + void updateLength (); ///< Call this when the string is truncated outside (not recommended though) + virtual const char8* text8 () const SMTG_OVERRIDE; + virtual const char16* text16 () const SMTG_OVERRIDE; + virtual char8 getChar8 (uint32 index) const SMTG_OVERRIDE; + virtual char16 getChar16 (uint32 index) const SMTG_OVERRIDE; + + bool setChar8 (uint32 index, char8 c); + bool setChar16 (uint32 index, char16 c); + inline bool setChar (uint32 index, char8 c) {return setChar8 (index, c);} + inline bool setChar (uint32 index, char16 c) {return setChar16 (index, c);} + //------------------------------------------------------------------------- + + // assignment-------------------------------------------------------------- + String& operator= (const char8* str) {return assign (str);} ///< Assign from a string of type char8 + String& operator= (const char16* str) {return assign (str);} + String& operator= (const ConstString& str) {return assign (str);} + String& operator= (const String& str) {return assign (str);} + String& operator= (char8 c) {return assign (c);} + String& operator= (char16 c) {return assign (c);} + + String& assign (const ConstString& str, int32 n = -1); ///< Assign n characters of str (-1: all) + String& assign (const char8* str, int32 n = -1, bool isTerminated = true); ///< Assign n characters of str (-1: all) + String& assign (const char16* str, int32 n = -1, bool isTerminated = true); ///< Assign n characters of str (-1: all) + String& assign (char8 c, int32 n = 1); + String& assign (char16 c, int32 n = 1); + //------------------------------------------------------------------------- + + // concat------------------------------------------------------------------ + String& append (const ConstString& str, int32 n = -1); ///< Append n characters of str to this (n=-1: all) + String& append (const char8* str, int32 n = -1); ///< Append n characters of str to this (n=-1: all) + String& append (const char16* str, int32 n = -1); ///< Append n characters of str to this (n=-1: all) + String& append (const char8 c, int32 n = 1); ///< Append char c n times + String& append (const char16 c, int32 n = 1); ///< Append char c n times + + String& insertAt (uint32 idx, const ConstString& str, int32 n = -1); ///< Insert n characters of str at position idx (n=-1: all) + String& insertAt (uint32 idx, const char8* str, int32 n = -1); ///< Insert n characters of str at position idx (n=-1: all) + String& insertAt (uint32 idx, const char16* str, int32 n = -1); ///< Insert n characters of str at position idx (n=-1: all) + String& insertAt (uint32 idx, char8 c) {char8 str[] = {c, 0}; return insertAt (idx, str, 1);} + String& insertAt (uint32 idx, char16 c) {char16 str[] = {c, 0}; return insertAt (idx, str, 1);} + + String& operator+= (const String& str) {return append (str);} + String& operator+= (const ConstString& str) {return append (str);} + String& operator+= (const char8* str) {return append (str);} + String& operator+= (const char16* str) {return append (str);} + String& operator+= (const char8 c) {return append (c);} + String& operator+= (const char16 c) {return append (c);} + //------------------------------------------------------------------------- + + // replace----------------------------------------------------------------- + String& replace (uint32 idx, int32 n1, const ConstString& str, int32 n2 = -1); ///< Replace n1 characters of this (starting at idx) with n2 characters of str (n1,n2=-1: until end) + String& replace (uint32 idx, int32 n1, const char8* str, int32 n2 = -1); ///< Replace n1 characters of this (starting at idx) with n2 characters of str (n1,n2=-1: until end) + String& replace (uint32 idx, int32 n1, const char16* str, int32 n2 = -1); ///< Replace n1 characters of this (starting at idx) with n2 characters of str (n1,n2=-1: until end) + + int32 replace (const char8* toReplace, const char8* toReplaceWith, bool all = false, CompareMode m = kCaseSensitive); ///< Replace find string with replace string - returns number of replacements + int32 replace (const char16* toReplace, const char16* toReplaceWith, bool all = false, CompareMode m = kCaseSensitive); ///< Replace find string with replace string - returns number of replacements + + bool replaceChars8 (const char8* toReplace, char8 toReplaceBy); ///< Returns true when any replacement was done + bool replaceChars16 (const char16* toReplace, char16 toReplaceBy); + inline bool replaceChars8 (char8 toReplace, char8 toReplaceBy) {char8 str[] = {toReplace, 0}; return replaceChars8 (str, toReplaceBy);} + inline bool replaceChars16 (char16 toReplace, char16 toReplaceBy) {char16 str[] = {toReplace, 0}; return replaceChars16 (str, toReplaceBy);} + inline bool replaceChars (char8 toReplace, char8 toReplaceBy) {return replaceChars8 (toReplace, toReplaceBy);} + inline bool replaceChars (char16 toReplace, char16 toReplaceBy) {return replaceChars16 (toReplace, toReplaceBy);} + inline bool replaceChars (const char8* toReplace, char8 toReplaceBy) {return replaceChars8 (toReplace, toReplaceBy);} + inline bool replaceChars (const char16* toReplace, char16 toReplaceBy) {return replaceChars16 (toReplace, toReplaceBy);} + //------------------------------------------------------------------------- + + // remove------------------------------------------------------------------ + String& remove (uint32 index = 0, int32 n = -1); ///< Remove n characters from string starting at index (n=-1: until end) + enum CharGroup {kSpace, kNotAlphaNum, kNotAlpha}; + bool trim (CharGroup mode = kSpace); ///< Trim lead/trail. + void removeChars (CharGroup mode = kSpace); ///< Removes all of group. + bool removeChars8 (const char8* which); ///< Remove all occurrences of each char in 'which' + bool removeChars16 (const char16* which); ///< Remove all occurrences of each char in 'which' + inline bool removeChars8 (const char8 which) {char8 str[] = {which, 0}; return removeChars8 (str); } + inline bool removeChars16 (const char16 which) {char16 str[] = {which, 0}; return removeChars16 (str); } + inline bool removeChars (const char8* which) {return removeChars8 (which);} + inline bool removeChars (const char16* which) {return removeChars16 (which);} + inline bool removeChars (const char8 which) {return removeChars8 (which);} + inline bool removeChars (const char16 which) {return removeChars16 (which);} + bool removeSubString (const ConstString& subString, bool allOccurences = true); + //------------------------------------------------------------------------- + + // print------------------------------------------------------------------- + String& printf (const char8* format, ...); ///< Print formatted data into string + String& printf (const char16* format, ...); ///< Print formatted data into string + String& vprintf (const char8* format, va_list args); + String& vprintf (const char16* format, va_list args); + //------------------------------------------------------------------------- + + // numbers----------------------------------------------------------------- + String& printInt64 (int64 value); + String& printFloat (double value); + /** Increment the trailing number if present else start with minNumber, width specifies the string width format (width 2 for number 3 is 03), + applyOnlyFormat set to true will only format the string to the given width without incrementing the founded trailing number */ + bool incrementTrailingNumber (uint32 width = 2, tchar separator = STR (' '), uint32 minNumber = 1, bool applyOnlyFormat = false); + //------------------------------------------------------------------------- + + // conversion-------------------------------------------------------------- + bool fromVariant (const FVariant& var); ///< Assigns string from FVariant + void toVariant (FVariant& var) const; + bool fromAttributes (IAttributes* a, IAttrID attrID); ///< Assigns string from FAttributes + bool toAttributes (IAttributes* a, IAttrID attrID); + + void swapContent (String& s); ///< Swaps ownership of the strings pointed to + void take (String& str); ///< Take ownership of the string of 'str' + void take (void* _buffer, bool wide); ///< Take ownership of buffer + void* pass (); + void passToVariant (FVariant& var); ///< Pass ownership of buffer to Variant - sets Variant ownership + + void toLower (uint32 index); ///< Lower case the character. + void toLower (); ///< Lower case the string. + void toUpper (uint32 index); ///< Upper case the character. + void toUpper (); ///< Upper case the string. + + unsigned char* toPascalString (unsigned char* buf); ///< Pascal string conversion + const String& fromPascalString (const unsigned char* buf); ///< Pascal string conversion + + bool toWideString (uint32 sourceCodePage = kCP_Default); ///< Converts to wide string according to sourceCodePage + bool toMultiByte (uint32 destCodePage = kCP_Default); + + void fromUTF8 (const char8* utf8String); ///< Assigns from UTF8 string + bool normalize (UnicodeNormalization = kUnicodeNormC); ///< On PC only kUnicodeNormC is working + +#if SMTG_OS_MACOS + virtual bool fromCFStringRef (const void*, uint32 encoding = 0xFFFF); ///< CFString conversion +#endif + //------------------------------------------------------------------------- + + //----------------------------------------------------------------------------- +protected: + bool resize (uint32 newSize, bool wide, bool fill = false); + +private: + void tryFreeBuffer (); + bool checkToMultiByte (uint32 destCodePage = kCP_Default) const; // to remove debug code from inline - const_cast inside!!! +}; + +// String concatenation functions. +inline String operator+ (const ConstString& s1, const ConstString& s2) {return String (s1).append (s2);} +inline String operator+ (const ConstString& s1, const char8* s2) {return String (s1).append (s2);} +inline String operator+ (const ConstString& s1, const char16* s2) {return String (s1).append (s2);} +inline String operator+ (const char8* s1, const ConstString& s2) {return String (s1).append (s2);} +inline String operator+ (const char16* s1, const ConstString& s2) {return String (s1).append (s2);} +inline String operator+ (const ConstString& s1, const String& s2) {return String (s1).append (s2);} +inline String operator+ (const String& s1, const ConstString& s2) {return String (s1).append (s2);} +inline String operator+ (const String& s1, const String& s2) {return String (s1).append (s2);} +inline String operator+ (const String& s1, const char8* s2) {return String (s1).append (s2);} +inline String operator+ (const String& s1, const char16* s2) {return String (s1).append (s2);} +inline String operator+ (const char8* s1, const String& s2) {return String (s1).append (s2);} +inline String operator+ (const char16* s1, const String& s2) {return String (s1).append (s2);} + +//----------------------------------------------------------------------------- +// ConstString +//----------------------------------------------------------------------------- +inline const tchar* ConstString::text () const +{ +#ifdef UNICODE + return text16 (); +#else + return text8 (); +#endif +} + +//----------------------------------------------------------------------------- +inline const char8* ConstString::text8 () const +{ + return (!isWide && buffer8) ? buffer8: kEmptyString8; +} + +//----------------------------------------------------------------------------- +inline const char16* ConstString::text16 () const +{ + return (isWide && buffer16) ? buffer16 : kEmptyString16; +} + +//----------------------------------------------------------------------------- +inline char8 ConstString::getChar8 (uint32 index) const +{ + if (index < len && buffer8 && !isWide) + return buffer8[index]; + return 0; +} + +//----------------------------------------------------------------------------- +inline char16 ConstString::getChar16 (uint32 index) const +{ + if (index < len && buffer16 && isWide) + return buffer16[index]; + return 0; +} + +//----------------------------------------------------------------------------- +inline tchar ConstString::getChar (uint32 index) const +{ +#ifdef UNICODE + return getChar16 (index); +#else + return getChar8 (index); +#endif +} + +//----------------------------------------------------------------------------- +inline tchar ConstString::getCharAt (uint32 index) const +{ +#ifdef UNICODE + if (isWide) + return getChar16 (index); +#endif + + return static_cast (getChar8 (index)); +} + +//----------------------------------------------------------------------------- +inline int64 ConstString::getNumber () const +{ + int64 tmp = 0; + scanInt64 (tmp); + return tmp; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanInt32_8 (const char8* text, int32& value, bool scanToEnd) +{ + int64 tmp; + if (scanInt64_8 (text, tmp, scanToEnd)) + { + value = (int32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanInt32_16 (const char16* text, int32& value, bool scanToEnd) +{ + int64 tmp; + if (scanInt64_16 (text, tmp, scanToEnd)) + { + value = (int32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanInt32 (const tchar* text, int32& value, bool scanToEnd) +{ + int64 tmp; + if (scanInt64 (text, tmp, scanToEnd)) + { + value = (int32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanUInt32_8 (const char8* text, uint32& value, bool scanToEnd) +{ + uint64 tmp; + if (scanUInt64_8 (text, tmp, scanToEnd)) + { + value = (uint32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanUInt32_16 (const char16* text, uint32& value, bool scanToEnd) +{ + uint64 tmp; + if (scanUInt64_16 (text, tmp, scanToEnd)) + { + value = (uint32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline bool ConstString::scanUInt32 (const tchar* text, uint32& value, bool scanToEnd) +{ + uint64 tmp; + if (scanUInt64 (text, tmp, scanToEnd)) + { + value = (uint32)tmp; + return true; + } + return false; +} + +//----------------------------------------------------------------------------- +inline const char8* String::text8 () const +{ + if (isWide && !isEmpty ()) + checkToMultiByte (); // this should be avoided, since it can lead to information loss + + return ConstString::text8 (); +} + +//----------------------------------------------------------------------------- +inline const char16* String::text16 () const +{ + if (!isWide && !isEmpty ()) + { + const_cast (*this).toWideString (); + } + return ConstString::text16 (); +} + +//----------------------------------------------------------------------------- +inline char8 String::getChar8 (uint32 index) const +{ + if (isWide && !isEmpty ()) + checkToMultiByte (); // this should be avoided, since it can lead to information loss + + return ConstString::getChar8 (index); +} + +//----------------------------------------------------------------------------- +inline char16 String::getChar16 (uint32 index) const +{ + if (!isWide && !isEmpty ()) + { + const_cast (*this).toWideString (); + } + return ConstString::getChar16 (index); +} + +//----------------------------------------------------------------------------- + + +inline bool operator< (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) < 0) ? true : false;} +inline bool operator<= (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) <= 0) ? true : false;} +inline bool operator> (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) > 0) ? true : false;} +inline bool operator>= (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) >= 0) ? true : false;} +inline bool operator== (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) == 0) ? true : false;} +inline bool operator!= (const ConstString& s1, const ConstString& s2) {return (s1.compare (s2) != 0) ? true : false;} + +inline bool operator< (const ConstString& s1, const char8* s2) {return (s1.compare (s2) < 0) ? true : false;} +inline bool operator<= (const ConstString& s1, const char8* s2) {return (s1.compare (s2) <= 0) ? true : false;} +inline bool operator> (const ConstString& s1, const char8* s2) {return (s1.compare (s2) > 0) ? true : false;} +inline bool operator>= (const ConstString& s1, const char8* s2) {return (s1.compare (s2) >= 0) ? true : false;} +inline bool operator== (const ConstString& s1, const char8* s2) {return (s1.compare (s2) == 0) ? true : false;} +inline bool operator!= (const ConstString& s1, const char8* s2) {return (s1.compare (s2) != 0) ? true : false;} +inline bool operator< (const char8* s1, const ConstString& s2) {return (s2.compare (s1) > 0) ? true : false;} +inline bool operator<= (const char8* s1, const ConstString& s2) {return (s2.compare (s1) >= 0) ? true : false;} +inline bool operator> (const char8* s1, const ConstString& s2) {return (s2.compare (s1) < 0) ? true : false;} +inline bool operator>= (const char8* s1, const ConstString& s2) {return (s2.compare (s1) <= 0) ? true : false;} +inline bool operator== (const char8* s1, const ConstString& s2) {return (s2.compare (s1) == 0) ? true : false;} +inline bool operator!= (const char8* s1, const ConstString& s2) {return (s2.compare (s1) != 0) ? true : false;} + +inline bool operator< (const ConstString& s1, const char16* s2) {return (s1.compare (s2) < 0) ? true : false;} +inline bool operator<= (const ConstString& s1, const char16* s2) {return (s1.compare (s2) <= 0) ? true : false;} +inline bool operator> (const ConstString& s1, const char16* s2) {return (s1.compare (s2) > 0) ? true : false;} +inline bool operator>= (const ConstString& s1, const char16* s2) {return (s1.compare (s2) >= 0) ? true : false;} +inline bool operator== (const ConstString& s1, const char16* s2) {return (s1.compare (s2) == 0) ? true : false;} +inline bool operator!= (const ConstString& s1, const char16* s2) {return (s1.compare (s2) != 0) ? true : false;} +inline bool operator< (const char16* s1, const ConstString& s2) {return (s2.compare (s1) > 0) ? true : false;} +inline bool operator<= (const char16* s1, const ConstString& s2) {return (s2.compare (s1) >= 0) ? true : false;} +inline bool operator> (const char16* s1, const ConstString& s2) {return (s2.compare (s1) < 0) ? true : false;} +inline bool operator>= (const char16* s1, const ConstString& s2) {return (s2.compare (s1) <= 0) ? true : false;} +inline bool operator== (const char16* s1, const ConstString& s2) {return (s2.compare (s1) == 0) ? true : false;} +inline bool operator!= (const char16* s1, const ConstString& s2) {return (s2.compare (s1) != 0) ? true : false;} + +// The following functions will only work with European Numbers! +// (e.g. Arabic, Tibetan, and Khmer digits are not supported) +extern int32 strnatcmp8 (const char8* s1, const char8* s2, bool caseSensitive = true); +extern int32 strnatcmp16 (const char16* s1, const char16* s2, bool caseSensitive = true); +inline int32 strnatcmp (const tchar* s1, const tchar* s2, bool caseSensitive = true) +{ +#ifdef UNICODE + return strnatcmp16 (s1, s2, caseSensitive); +#else + return strnatcmp8 (s1, s2, caseSensitive); +#endif +} + +//----------------------------------------------------------------------------- +/** StringObject implements IStringResult and IString methods. + It can therefore be exchanged with other Steinberg objects using one or both of these +interfaces. + +\see String, ConstString +*/ +//----------------------------------------------------------------------------- +class StringObject : public FObject, public String, public IStringResult, public IString +{ +public: +//----------------------------------------------------------------------------- + StringObject () {} + StringObject (const char16* str, int32 n = -1, bool isTerminated = true) : String (str, n, isTerminated) {} + StringObject (const char8* str, int32 n = -1, bool isTerminated = true) : String (str, n, isTerminated) {} + StringObject (const StringObject& str, int32 n = -1) : String (str, n) {} + StringObject (const String& str, int32 n = -1) : String (str, n) {} + StringObject (const FVariant& var) : String (var) {} + + using String::operator=; + + // IStringResult ---------------------------------------------------------- + virtual void PLUGIN_API setText (const char8* text) SMTG_OVERRIDE; + //------------------------------------------------------------------------- + + // IString----------------------------------------------------------------- + virtual void PLUGIN_API setText8 (const char8* text) SMTG_OVERRIDE; + virtual void PLUGIN_API setText16 (const char16* text) SMTG_OVERRIDE; + + virtual const char8* PLUGIN_API getText8 () SMTG_OVERRIDE; + virtual const char16* PLUGIN_API getText16 () SMTG_OVERRIDE; + + virtual void PLUGIN_API take (void* s, bool _isWide) SMTG_OVERRIDE; + virtual bool PLUGIN_API isWideString () const SMTG_OVERRIDE; + //------------------------------------------------------------------------- + + OBJ_METHODS (StringObject, FObject) + FUNKNOWN_METHODS2 (IStringResult, IString, FObject) +}; + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp new file mode 100644 index 00000000..6e75c2c6 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp @@ -0,0 +1,721 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/updatehandler.cpp +// Created by : Steinberg, 2008 +// Description : +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#include "base/source/updatehandler.h" +#include "base/source/classfactoryhelpers.h" +#include "base/source/fstring.h" + +#if SMTG_CPP11_STDLIBSUPPORT +#include +#else +#include +#endif +#include +#include +#include + +#define NON_EXISTING_DEPENDENCY_CHECK 0 // not yet +#define CLASS_NAME_TRACKED DEVELOPMENT + +using Steinberg::Base::Thread::FGuard; + +namespace Steinberg { + +DEF_CLASS_IID (IUpdateManager) +bool UpdateHandler::lockUpdates = false; + +namespace Update { +const uint32 kHashSize = (1 << 8); // must be power of 2 (16 bytes * 256 == 4096) +const uint32 kMapSize = 1024 * 10; + +//------------------------------------------------------------------------ +inline uint32 hashPointer (void* p) +{ + return (uint32)((uint64 (p) >> 12) & (kHashSize - 1)); +} + +//------------------------------------------------------------------------ +inline IPtr getUnknownBase (FUnknown* unknown) +{ + FUnknown* result = nullptr; + if (unknown) + unknown->queryInterface (FUnknown::iid, (void**)&result); + + return owned (result); +} + +#if CLASS_NAME_TRACKED +//------------------------------------------------------------------------ +struct Dependency +{ + Dependency (FUnknown* o, IDependent* d) + : obj (o), dep (d), objClass (nullptr), depClass (nullptr) + { + } + + inline bool operator== (const Dependency& d) const { return obj == d.obj; } + inline bool operator!= (const Dependency& d) const { return obj != d.obj; } + inline bool operator< (const Dependency& d) const { return obj < d.obj; } + inline bool operator> (const Dependency& d) const { return obj > d.obj; } + FUnknown* obj; + IDependent* dep; + + FClassID objClass; + FClassID depClass; +}; +#endif + +//------------------------------------------------------------------------ +struct DeferedChange +{ + DeferedChange (FUnknown* o, int32 m = 0) : obj (o), msg (m) {} + ~DeferedChange () {} + DeferedChange (const DeferedChange& r) : obj (r.obj), msg (r.msg) {} + inline bool operator== (const DeferedChange& d) const { return obj == d.obj; } + inline bool operator!= (const DeferedChange& d) const { return obj != d.obj; } + FUnknown* obj; + int32 msg; +}; + +//------------------------------------------------------------------------ +struct UpdateData +{ + UpdateData (FUnknown* o, IDependent** d, uint32 c) + : obj (o), dependents (d), count (c) + { + } + FUnknown* obj; + IDependent** dependents; + uint32 count; + bool operator== (const UpdateData& d) const + { + return d.obj == obj && d.dependents == dependents; + } +}; + +//------------------------------------------------------------------------ +typedef std::deque DeferedChangeList; +typedef DeferedChangeList::const_iterator DeferedChangeListIterConst; +typedef DeferedChangeList::iterator DeferedChangeListIter; + +typedef std::deque UpdateDataList; +typedef UpdateDataList::const_iterator UpdateDataListIterConst; + +#if CLASS_NAME_TRACKED +typedef std::vector DependentList; +#else +typedef std::vector DependentList; +#endif +typedef DependentList::iterator DependentListIter; +typedef DependentList::const_iterator DependentListIterConst; + +#if SMTG_CPP11_STDLIBSUPPORT +typedef std::unordered_map DependentMap; +#else +typedef std::map DependentMap; +#endif +typedef DependentMap::iterator DependentMapIter; +typedef DependentMap::const_iterator DependentMapIterConst; + +struct Table +{ + DependentMap depMap[kHashSize]; + DeferedChangeList defered; + UpdateDataList updateData; +}; + +//------------------------------------------------------------------------ +void updateDone (FUnknown* unknown, int32 message) +{ + if (message != IDependent::kDestroyed) + { + FObject* obj = FObject::unknownToObject (unknown); + if (obj) + obj->updateDone (message); + } +} +} // namespace Update + +//------------------------------------------------------------------------ +static int32 countEntries (Update::DependentMap& map) +{ + int32 total = 0; + Update::DependentMapIterConst iterMap = map.begin (); + while (iterMap != map.end ()) + { + const Update::DependentList& list = iterMap->second; + Update::DependentListIterConst iterList = list.begin (); + while (iterList != list.end ()) + { + total++; + ++iterList; + } + ++iterMap; + } + return total; +} + +//------------------------------------------------------------------------ +UpdateHandler::UpdateHandler () +{ + table = NEW Update::Table; + if (FObject::getUpdateHandler () == nullptr) + FObject::setUpdateHandler (this); +} + +//------------------------------------------------------------------------ +UpdateHandler::~UpdateHandler () +{ + if (FObject::getUpdateHandler () == this) + FObject::setUpdateHandler (nullptr); + delete table; + table = nullptr; +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::addDependent (FUnknown* u, IDependent* _dependent) +{ + IPtr unknown = Update::getUnknownBase (u); + if (!unknown || !_dependent) + return kResultFalse; + + FGuard guard (lock); + +#if CLASS_NAME_TRACKED + Update::Dependency dependent (unknown, _dependent); + + FObject* obj = FObject::unknownToObject (unknown); + if (obj) + dependent.objClass = obj->isA (); + obj = FObject::unknownToObject (_dependent); + if (obj) + dependent.depClass = obj->isA (); +#else + IDependent* dependent = _dependent; +#endif + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIter it = map.find (unknown); + if (it == map.end ()) + { + Update::DependentList list; + list.push_back (dependent); + map[unknown] = list; + } + else + { + (*it).second.push_back (dependent); + } + + return kResultTrue; +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::removeDependent (FUnknown* u, IDependent* dependent) +{ + IPtr unknown = Update::getUnknownBase (u); + if (unknown == nullptr && dependent == nullptr) + return kResultFalse; + + FGuard guard (lock); + + Update::UpdateDataListIterConst iter = table->updateData.begin (); + while (iter != table->updateData.end ()) + { + if ((*iter).obj == unknown || unknown == nullptr) + { + for (uint32 count = 0; count < (*iter).count; count++) + { + if ((*iter).dependents[count] == dependent) + (*iter).dependents[count] = 0; + } + } + ++iter; + } + // Remove all objects for the given dependent + if (unknown == nullptr) + { + for (uint32 j = 0; j < Update::kHashSize; j++) + { + Update::DependentMap& map = table->depMap[j]; + Update::DependentMapIter iterMap = map.begin (); + while (iterMap != map.end ()) + { + Update::DependentList& list = (*iterMap).second; + Update::DependentListIter iterList = list.begin (); + while (iterList != list.end ()) + { +#if CLASS_NAME_TRACKED + if ((*iterList).dep == dependent) +#else + if ((*iterList) == dependent) +#endif + { + iterList = list.erase (iterList); + } + else + { + ++iterList; + } + } + ++iterMap; + } + } + } + else + { + bool mustFlush = true; + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIter iterList = map.find (unknown); + +#if NON_EXISTING_DEPENDENCY_CHECK + SMTG_ASSERT (iterList != map.end () && "ERROR: Trying to remove a non existing dependency!") +#endif + if (iterList != map.end ()) + { + if (dependent == nullptr) // Remove all dependents of object + { + map.erase (iterList); + } + else // Remove one dependent + { + int32 eraseCount = 0; + Update::DependentList& dependentlist = (*iterList).second; + Update::DependentListIter iterDependentlist = dependentlist.begin (); + while (iterDependentlist != dependentlist.end ()) + { +#if CLASS_NAME_TRACKED + if ((*iterDependentlist).dep == dependent) +#else + if ((*iterDependentlist) == dependent) +#endif + { + iterDependentlist = dependentlist.erase (iterDependentlist); + eraseCount++; + if (dependentlist.empty ()) + { + map.erase (iterList); + break; + } + } + else + { + ++iterDependentlist; + mustFlush = false; + } + } + } + } + if (mustFlush) + cancelUpdates (unknown); + } + + return kResultTrue; +} + +//------------------------------------------------------------------------ +tresult UpdateHandler::doTriggerUpdates (FUnknown* u, int32 message, bool suppressUpdateDone) +{ + if (lockUpdates) + return kResultFalse; + IPtr unknown = Update::getUnknownBase (u); + if (!unknown) + return kResultFalse; + + // to avoid crashes due to stack overflow, we reduce the amount of memory reserved for the + // dependents + IDependent* smallDependents[Update::kMapSize / 10]; // 8kB for x64 + IDependent** dependents = smallDependents; + int32 maxDependents = Update::kMapSize / 10; + int32 count = 0; + + { + FGuard guard (lock); // scope for lock + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIterConst iterList = map.find (unknown); + if (iterList != map.end ()) + { + const Update::DependentList& dependentlist = (*iterList).second; + Update::DependentListIterConst iterDependentlist = dependentlist.begin (); + while (iterDependentlist != dependentlist.end ()) + { +#if CLASS_NAME_TRACKED + dependents[count] = (*iterDependentlist).dep; +#else + dependents[count] = *iterDependentlist; +#endif + count++; + + if (count >= maxDependents) + { + if (dependents == smallDependents) + { + dependents = new IDependent*[Update::kMapSize]; + memcpy (dependents, smallDependents, count * sizeof (dependents[0])); + maxDependents = Update::kMapSize; + } + else + { + SMTG_WARNING ("Dependency overflow") + break; + } + } + ++iterDependentlist; + } + } + + // push update data on the stack + if (count > 0) + { + Update::UpdateData data (unknown, dependents, count); + table->updateData.push_back (data); + } + } // end scope + + int32 i = 0; + while (i < count) + { + if (dependents[i]) + dependents[i]->update (unknown, message); + i++; + } + + if (dependents != smallDependents) + delete[] dependents; + + // remove update data from the stack + if (count > 0) + { + FGuard guard (lock); + + table->updateData.pop_back (); + } + + // send update done message + if (suppressUpdateDone == false) + Update::updateDone (unknown, message); + + return count > 0 ? kResultTrue : kResultFalse; // Object was found and has been updated +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::triggerUpdates (FUnknown* u, int32 message) +{ + return doTriggerUpdates (u, message, false); +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::deferUpdates (FUnknown* u, int32 message) +{ + IPtr unknown = Update::getUnknownBase (u); + if (!unknown) + return kResultFalse; + + FGuard guard (lock); + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIterConst iterList = map.find (unknown); + + bool hasDependency = (iterList != map.end ()); + if (hasDependency == false) + { + Update::updateDone (unknown, message); + return kResultTrue; + } + + bool found = false; + Update::DeferedChangeListIterConst iter = table->defered.begin (); + while (iter != table->defered.end ()) + { + if ((*iter).obj == unknown && (*iter).msg == message) + { + found = true; + break; + } + ++iter; + } + + if (!found) + { + Update::DeferedChange change (unknown, message); + table->defered.push_back (change); + } + + return kResultTrue; +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::triggerDeferedUpdates (FUnknown* unknown) +{ + Update::DeferedChangeList deferedAgain; + if (!unknown) + { + while (table->defered.empty () == false) + { + // Remove first from queue + lock.lock (); + + FUnknown* obj = table->defered.front ().obj; + int32 msg = table->defered.front ().msg; + table->defered.pop_front (); + + // check if this object is currently being updated. in this case, defer update again... + bool canSignal = true; + Update::UpdateDataListIterConst iter = table->updateData.begin (); + while (iter != table->updateData.end ()) + { + if ((*iter).obj == obj) + { + canSignal = false; + break; + } + ++iter; + } + lock.unlock (); + + if (canSignal) + { + triggerUpdates (obj, msg); + } + else + { + Update::DeferedChange change (obj, msg); + deferedAgain.push_back (change); + } + } + } + else + { + IPtr object = Update::getUnknownBase (unknown); + Update::DeferedChange tmp (object); + + while (true) + { + lock.lock (); + Update::DeferedChangeListIter it = + std::find (table->defered.begin (), table->defered.end (), tmp); + if (it == table->defered.end ()) + { + lock.unlock (); + return kResultTrue; + } + + if ((*it).obj != nullptr) + { + int32 msg = (*it).msg; + table->defered.erase (it); + + // check if this object is currently being updated. in this case, defer update + // again... + bool canSignal = true; + Update::UpdateDataListIterConst iter = table->updateData.begin (); + while (iter != table->updateData.end ()) + { + if ((*iter).obj == object) + { + canSignal = false; + break; + } + ++iter; + } + lock.unlock (); + + if (canSignal) + { + triggerUpdates (object, msg); + } + else + { + Update::DeferedChange change (object, msg); + deferedAgain.push_back (change); + } + } + } + } + + if (deferedAgain.empty () == false) + { + FGuard guard (lock); + + Update::DeferedChangeListIterConst iter = deferedAgain.begin (); + while (iter != deferedAgain.end ()) + { + table->defered.push_back (*iter); + ++iter; + } + } + + return kResultTrue; +} + +//------------------------------------------------------------------------ +tresult PLUGIN_API UpdateHandler::cancelUpdates (FUnknown* u) +{ + IPtr unknown = Update::getUnknownBase (u); + if (!unknown) + return kResultFalse; + + FGuard guard (lock); + + Update::DeferedChange change (unknown, 0); + while (1) + { + auto iter = std::find (table->defered.begin (), table->defered.end (), change); + if (iter != table->defered.end ()) + table->defered.erase (iter); + else + break; + } + + return kResultTrue; +} + +//------------------------------------------------------------------------ +size_t UpdateHandler::countDependencies (FUnknown* object) +{ + FGuard guard (lock); + uint32 res = 0; + + IPtr unknown = Update::getUnknownBase (object); + if (unknown) + { + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIter iterList = map.find (unknown); + if (iterList != map.end ()) + return iterList->second.size (); + } + else + { + for (uint32 j = 0; j < Update::kHashSize; j++) + { + Update::DependentMap& map = table->depMap[j]; + res += countEntries (map); + } + } + return res; +} + +#if DEVELOPMENT +//------------------------------------------------------------------------ +bool UpdateHandler::checkDeferred (FUnknown* object) +{ + IPtr unknown = Update::getUnknownBase (object); + + FGuard guard (lock); + + Update::DeferedChange tmp (unknown); + Update::DeferedChangeListIterConst it = + std::find (table->defered.begin (), table->defered.end (), tmp); + if (it != table->defered.end ()) + return true; + + return false; +} + +//------------------------------------------------------------------------ +bool UpdateHandler::hasDependencies (FUnknown* u) +{ + IPtr unknown = Update::getUnknownBase (u); + if (!unknown) + return false; + + FGuard guard (lock); + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIterConst iterList = map.find (unknown); + bool hasDependency = (iterList != map.end ()); + + return hasDependency; +} + +//------------------------------------------------------------------------ +void UpdateHandler::printForObject (FObject* obj) const +{ + IPtr unknown = Update::getUnknownBase (obj); + if (!unknown) + return; + + FUnknownPtr dep (obj); + + bool header = false; + + Update::DependentMap& map = table->depMap[Update::hashPointer (unknown)]; + Update::DependentMapIterConst iterList = map.begin (); + while (iterList != map.end ()) + { + const Update::DependentList& dependentlist = (*iterList).second; + Update::DependentListIterConst iterDependentlist = dependentlist.begin (); + while (iterDependentlist != dependentlist.end ()) + { +#if CLASS_NAME_TRACKED + if ((*iterList).first == unknown || (*iterDependentlist).dep == dep.getInterface ()) + { + if (!header) + { + FDebugPrint ("Dependencies for object %8" FORMAT_INT64A " %s\n", (uint64)obj, + obj->isA ()); + header = true; + } + FDebugPrint ("%s %8" FORMAT_INT64A "\n <- %s %8" FORMAT_INT64A "\n", + (*iterDependentlist).depClass, (uint64) (*iterDependentlist).dep, + (*iterDependentlist).objClass, (uint64) ((*iterList).first)); + } +#else + if ((*iterList).first == unknown || (*iterDependentlist) == dep.getInterface ()) + { + if (!header) + { + FDebugPrint ("Dependencies for object %8" FORMAT_INT64A " %s\n", (uint64)obj, + obj->isA ()); + header = true; + } + FDebugPrint ("%8" FORMAT_INT64A "\n <- %8" FORMAT_INT64A "\n", + (uint64) (*iterDependentlist), (uint64) ((*iterList).first)); + } +#endif + ++iterDependentlist; + } + + ++iterList; + } +} +#endif + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h new file mode 100644 index 00000000..4dd41c39 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h @@ -0,0 +1,139 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/source/updatehandler.h +// Created by : Steinberg, 2008 +// Description : +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#pragma once + +#include "base/source/fobject.h" +#include "base/thread/include/flock.h" +#include "pluginterfaces/base/iupdatehandler.h" + +namespace Steinberg { + +/// @cond ignore +namespace Update { struct Table; } +/// @endcond + +//------------------------------------------------------------------------ +/** Handle Send and Cancel pending message for a given object*/ +//------------------------------------------------------------------------ +class IUpdateManager : public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** cancel pending messages send by \param object or by any if object is 0 */ + virtual tresult PLUGIN_API cancelUpdates (FUnknown* object) = 0; + /** send pending messages send by \param object or by any if object is 0 */ + virtual tresult PLUGIN_API triggerDeferedUpdates (FUnknown* object = 0) = 0; + static const FUID iid; +}; + +DECLARE_CLASS_IID (IUpdateManager, 0x030B780C, 0xD6E6418D, 0x8CE00BC2, 0x09C834D4) + +//------------------------------------------------------------------------------ +/** +UpdateHandler implements IUpdateManager and IUpdateHandler to handle dependencies +between objects to store and forward messages to dependent objects. + +This implementation is thread save, so objects can send message, add or remove +dependents from different threads. +Do do so it uses mutex, so be aware of locking. +*/ +//------------------------------------------------------------------------------ +class UpdateHandler : public FObject, public IUpdateHandler, public IUpdateManager +{ +public: +//------------------------------------------------------------------------------ + UpdateHandler (); + ~UpdateHandler (); + + using FObject::addDependent; + using FObject::removeDependent; + using FObject::deferUpdate; + + // IUpdateHandler + /** register \param dependent to get messages from \param object */ + virtual tresult PLUGIN_API addDependent (FUnknown* object, IDependent* dependent) SMTG_OVERRIDE; + /** unregister \param dependent to get no messages from \param object */ + virtual tresult PLUGIN_API removeDependent (FUnknown* object, + IDependent* dependent) SMTG_OVERRIDE; + /** send \param message to all dependents of \param object immediately */ + virtual tresult PLUGIN_API triggerUpdates (FUnknown* object, int32 message) SMTG_OVERRIDE; + /** send \param message to all dependents of \param object when idle */ + virtual tresult PLUGIN_API deferUpdates (FUnknown* object, int32 message) SMTG_OVERRIDE; + + // IUpdateManager + /** cancel pending messages send by \param object or by any if object is 0 */ + virtual tresult PLUGIN_API cancelUpdates (FUnknown* object) SMTG_OVERRIDE; + /** send pending messages send by \param object or by any if object is 0 */ + virtual tresult PLUGIN_API triggerDeferedUpdates (FUnknown* object = 0) SMTG_OVERRIDE; + + /// @cond ignore + // obsolete functions kept for compatibility + void checkUpdates (FObject* object = nullptr) { triggerDeferedUpdates (object->unknownCast ()); } + void flushUpdates (FObject* object) { cancelUpdates (object->unknownCast ()); } + void deferUpdate (FObject* object, int32 message) + { + deferUpdates (object->unknownCast (), message); + } + void signalChange (FObject* object, int32 message, bool suppressUpdateDone = false) + { + doTriggerUpdates (object->unknownCast (), message, suppressUpdateDone); + } +#if DEVELOPMENT + bool checkDeferred (FUnknown* object); + bool hasDependencies (FUnknown* object); + void printForObject (FObject* object) const; +#endif + /// @endcond + size_t countDependencies (FUnknown* object = nullptr); + + OBJ_METHODS (UpdateHandler, FObject) + FUNKNOWN_METHODS2 (IUpdateHandler, IUpdateManager, FObject) + SINGLETON (UpdateHandler) +//------------------------------------------------------------------------------ +private: + tresult doTriggerUpdates (FUnknown* object, int32 message, bool suppressUpdateDone); + + Steinberg::Base::Thread::FLock lock; + Update::Table* table = nullptr; + friend struct LockUpdateDependencies; + static bool lockUpdates; +}; + + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h b/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h new file mode 100644 index 00000000..3a508dd7 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h @@ -0,0 +1,183 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/thread/include/flock.h +// Created by : Steinberg, 1995 +// Description : locks +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +//---------------------------------------------------------------------------------- +/** @file base/thread/include/flock.h + Locks. */ +/** @defgroup baseLocks Locks */ +//---------------------------------------------------------------------------------- +#pragma once + +#include "base/source/fobject.h" +#include "pluginterfaces/base/ftypes.h" + +#if SMTG_PTHREADS +#include + +#elif SMTG_OS_WINDOWS +struct CRITSECT // CRITICAL_SECTION +{ + void* DebugInfo; // PRTL_CRITICAL_SECTION_DEBUG DebugInfo; + Steinberg::int32 LockCount; // LONG LockCount; + Steinberg::int32 RecursionCount; // LONG RecursionCount; + void* OwningThread; // HANDLE OwningThread + void* LockSemaphore; // HANDLE LockSemaphore + Steinberg::int32 SpinCount; // ULONG_PTR SpinCount +}; +#endif + +namespace Steinberg { +namespace Base { +namespace Thread { + +//------------------------------------------------------------------------ +/** Lock interface declaration. +@ingroup baseLocks */ +//------------------------------------------------------------------------ +struct ILock +{ +//------------------------------------------------------------------------ + virtual ~ILock () {} + + /** Enables lock. */ + virtual void lock () = 0; + + /** Disables lock. */ + virtual void unlock () = 0; + + /** Tries to disable lock. */ + virtual bool trylock () = 0; +//------------------------------------------------------------------------ +}; + +//------------------------------------------------------------------------ +/** FLock declaration. +@ingroup baseLocks */ +//------------------------------------------------------------------------ +class FLock : public ILock +{ +public: +//------------------------------------------------------------------------ + + /** Lock constructor. + * @param name lock name + */ + FLock (const char8* name = "FLock"); + + /** Lock destructor. */ + ~FLock (); + + //-- ILock ----------------------------------------------------------- + virtual void lock () SMTG_OVERRIDE; + virtual void unlock () SMTG_OVERRIDE; + virtual bool trylock () SMTG_OVERRIDE; + +//------------------------------------------------------------------------ +protected: +#if SMTG_PTHREADS + pthread_mutex_t mutex; ///< Mutex object + +#elif SMTG_OS_WINDOWS + CRITSECT section; ///< Critical section object +#endif +}; + +//------------------------------------------------------------------------ +/** FLockObj declaration. Reference counted lock +@ingroup baseLocks */ +//------------------------------------------------------------------------ +class FLockObject : public FObject, public FLock +{ +public: + OBJ_METHODS (FLockObject, FObject) +}; + +//------------------------------------------------------------------------ +/** FGuard - automatic object for locks. +@ingroup baseLocks */ +//------------------------------------------------------------------------ +class FGuard +{ +public: +//------------------------------------------------------------------------ + + /** FGuard constructor. + * @param _lock guard this lock + */ + FGuard (ILock& _lock) : lock (_lock) { lock.lock (); } + + /** FGuard destructor. */ + ~FGuard () { lock.unlock (); } + +//------------------------------------------------------------------------ +private: + ILock& lock; ///< guarded lock +}; + +//------------------------------------------------------------------------ +/** Conditional Guard - Locks only if valid lock is passed. +@ingroup baseLocks */ +//------------------------------------------------------------------------ +class FConditionalGuard +{ +public: +//------------------------------------------------------------------------ + + /** FConditionGuard constructor. + * @param _lock guard this lock + */ + FConditionalGuard (FLock* _lock) : lock (_lock) + { + if (lock) + lock->lock (); + } + + /** FConditionGuard destructor. */ + ~FConditionalGuard () + { + if (lock) + lock->unlock (); + } + +//------------------------------------------------------------------------ +private: + FLock* lock; ///< guarded lock +}; + +} // Thread +} // Base +} // Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp new file mode 100644 index 00000000..0df5a737 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp @@ -0,0 +1,145 @@ +//------------------------------------------------------------------------ +// Project : SDK Base +// Version : 1.0 +// +// Category : Helpers +// Filename : base/thread/source/flock.cpp +// Created by : Steinberg, 1995 +// Description : Locks +// +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// * Neither the name of the Steinberg Media Technologies nor the names of its +// contributors may be used to endorse or promote products derived from this +// software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +// IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +// OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +// OF THE POSSIBILITY OF SUCH DAMAGE. +//----------------------------------------------------------------------------- + +#define DEBUG_LOCK 0 + +#include "base/thread/include/flock.h" +#include "base/source/fdebug.h" + +//------------------------------------------------------------------------ +#if SMTG_OS_WINDOWS +//------------------------------------------------------------------------ +#ifndef WINVER +#define WINVER 0x0500 +#endif +#ifndef _WIN32_WINNT +#define _WIN32_WINNT WINVER +#endif + +#include +#include +#define INIT_CS(cs) \ + InitializeCriticalSection ((LPCRITICAL_SECTION)&cs); + +#endif + +namespace Steinberg { +namespace Base { +namespace Thread { + + +//------------------------------------------------------------------------ +// FLock implementation +//------------------------------------------------------------------------ +FLock::FLock (const char8* /*name*/) +{ +#if SMTG_PTHREADS + pthread_mutexattr_t mutexAttr; + pthread_mutexattr_init (&mutexAttr); + pthread_mutexattr_settype (&mutexAttr, PTHREAD_MUTEX_RECURSIVE); + if (pthread_mutex_init (&mutex, &mutexAttr) != 0) + {SMTG_WARNING("mutex_init failed")} + pthread_mutexattr_destroy (&mutexAttr); + +#elif SMTG_OS_WINDOWS + INIT_CS (section) +#else +#warning implement FLock! +#endif +} + +//------------------------------------------------------------------------ +FLock::~FLock () +{ +#if SMTG_PTHREADS + pthread_mutex_destroy (&mutex); + +#elif SMTG_OS_WINDOWS + DeleteCriticalSection ((LPCRITICAL_SECTION)§ion); + +#endif +} + +//------------------------------------------------------------------------ +void FLock::lock () +{ +#if DEBUG_LOCK + FDebugPrint ("FLock::lock () %x\n", this); +#endif + +#if SMTG_PTHREADS + pthread_mutex_lock (&mutex); + +#elif SMTG_OS_WINDOWS + EnterCriticalSection ((LPCRITICAL_SECTION)§ion); + +#endif +} + +//------------------------------------------------------------------------ +void FLock::unlock () +{ +#if DEBUG_LOCK + FDebugPrint ("FLock::unlock () %x\n", this); +#endif + +#if SMTG_PTHREADS + pthread_mutex_unlock (&mutex); + +#elif SMTG_OS_WINDOWS + LeaveCriticalSection ((LPCRITICAL_SECTION)§ion); + +#endif +} + +//------------------------------------------------------------------------ +bool FLock::trylock () +{ +#if SMTG_PTHREADS + return pthread_mutex_trylock (&mutex) == 0; + +#elif SMTG_OS_WINDOWS + return TryEnterCriticalSection ((LPCRITICAL_SECTION)§ion) != 0 ? true : false; + +#else + return false; +#endif +} + +} // Thread +} // Base +} // Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt new file mode 100644 index 00000000..c653a2ef --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// LICENSE +// (c) 2018, Steinberg Media Technologies GmbH, All Rights Reserved +//----------------------------------------------------------------------------- +This license applies only to files referencing this license, +for other files of the Software Development Kit the respective embedded license text +is applicable. The license can be found at: www.steinberg.net/sdklicenses_vst3 + +This Software Development Kit is licensed under the terms of the Steinberg VST3 License, +or alternatively under the terms of the General Public License (GPL) Version 3. +You may use the Software Development Kit according to either of these licenses as it is +most appropriate for your project on a case-by-case basis (commercial or not). + +a) Proprietary Steinberg VST3 License +The Software Development Kit may not be distributed in parts or its entirety +without prior written agreement by Steinberg Media Technologies GmbH. +The SDK must not be used to re-engineer or manipulate any technology used +in any Steinberg or Third-party application or software module, +unless permitted by law. +Neither the name of the Steinberg Media Technologies GmbH nor the names of its +contributors may be used to endorse or promote products derived from this +software without specific prior written permission. +Before publishing a software under the proprietary license, you need to obtain a copy +of the License Agreement signed by Steinberg Media Technologies GmbH. +The Steinberg VST SDK License Agreement can be found at: +www.steinberg.net/en/company/developers.html + +THE SDK IS PROVIDED BY STEINBERG MEDIA TECHNOLOGIES GMBH "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL STEINBERG MEDIA TECHNOLOGIES GMBH BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +b) General Public License (GPL) Version 3 +Details of these licenses can be found at: www.gnu.org/licenses/gpl-3.0.html +//---------------------------------------------------------------------------------- diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp new file mode 100644 index 00000000..c8cc596d --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/conststringtable.cpp +// Created by : Steinberg, 09/2007 +// Description : constant unicode string table +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#include "conststringtable.h" +#include +#include + +namespace Steinberg { + +static std::map* stringMap; +static std::map* charMap; + +static char16* generateUTF16 (const char8* str); + +//---------------------------------------------------------------------------- +ConstStringTable* ConstStringTable::instance () +{ + static ConstStringTable stringTable; + return &stringTable; +} + +//---------------------------------------------------------------------------- +const char16* ConstStringTable::getString (const char8* str) const +{ + std::map::iterator iter = stringMap->find (str); + if (iter != stringMap->end ()) + return iter->second; + char16* uStr = generateUTF16 (str); + stringMap->insert (std::make_pair (str, uStr)); + return uStr; +} + +//---------------------------------------------------------------------------- +const char16 ConstStringTable::getString (const char8 str) const +{ + std::map::iterator iter = charMap->find (str); + if (iter != charMap->end ()) + return iter->second; + char16 uStr = 0; +#if BYTEORDER == kBigEndian + char8* puStr = (char8*)&uStr; + puStr[1] = str; +#else + uStr = str; +#endif + charMap->insert (std::make_pair (str, uStr)); + return uStr; +} + +//---------------------------------------------------------------------------- +ConstStringTable::ConstStringTable () +{ + stringMap = new std::map; + charMap = new std::map; +} + +//---------------------------------------------------------------------------- +ConstStringTable::~ConstStringTable () +{ + // free out allocated strings + { + std::map::iterator iter = stringMap->begin (); + while (iter != stringMap->end ()) + { + delete[] iter->second; + iter++; + } + } // delete iterator on map before deleting the map + + delete stringMap; + delete charMap; +} + +//---------------------------------------------------------------------------- +char16* generateUTF16 (const char8* str) +{ + int32 len = (int32)strlen (str); + char16* result = new char16[len + 1]; + for (int32 i = 0; i < len; i++) + { +#if BYTEORDER == kBigEndian + char8* pChr = (char8*)&result[i]; + pChr[0] = 0; + pChr[1] = str[i]; +#else + result[i] = str[i]; +#endif + } + result[len] = 0; + return result; +} +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h new file mode 100644 index 00000000..530c901c --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/conststringtable.h +// Created by : Steinberg, 09/2007 +// Description : constant unicode string table +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "ftypes.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +/** Constant unicode string table. +Used for conversion from ASCII string literals to char16. +*/ +//------------------------------------------------------------------------ +class ConstStringTable +{ +public: + static ConstStringTable* instance (); + + /** Returns a char16 string of a ASCII string literal*/ + const char16* getString (const char8* str) const; + /** Returns a char16 character of a ASCII character */ + const char16 getString (const char8 str) const; + +protected: + ConstStringTable (); + ~ConstStringTable (); +}; + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp new file mode 100644 index 00000000..4d9a3771 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interface IID definitions +// Filename : pluginterfaces/base/coreiids.cpp +// Created by : Steinberg, 01/2004 +// Description : Basic Interface +// +//------------------------------------------------------------------------ +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//------------------------------------------------------------------------ + +#include "pluginterfaces/base/funknown.h" +#include "pluginterfaces/base/iupdatehandler.h" +#include "pluginterfaces/base/icloneable.h" +#include "pluginterfaces/base/ibstream.h" + +//------------------------------------------------------------------------ +namespace Steinberg { + + +DEF_CLASS_IID (FUnknown) + +DEF_CLASS_IID (ICloneable) + +DEF_CLASS_IID (IDependent) +DEF_CLASS_IID (IUpdateHandler) + +DEF_CLASS_IID (IBStream) +DEF_CLASS_IID (ISizeableStream) + +//------------------------------------------------------------------------ +} // Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h new file mode 100644 index 00000000..1123a060 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/falignpop.h +// Created by : Steinberg, 01/2004 +// Description : Restore alignment settings +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +//--------------------------------------------------------------------------------------------------- +#if SMTG_OS_MACOS + #if TARGET_API_MAC_CARBON + #if SMTG_PLATFORM_64 + #pragma pack(pop) + #else + #pragma options align=reset + #endif + #endif +#elif defined __BORLANDC__ + #pragma -a- +#elif SMTG_OS_WINDOWS + #pragma pack(pop) +#endif +//--------------------------------------------------------------------------------------------------- diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h new file mode 100644 index 00000000..6003c3db --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/falignpush.h +// Created by : Steinberg, 01/2004 +// Description : Set alignment settings +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +//---------------------------------------------------------------------------------------------- +#if SMTG_OS_MACOS + #if TARGET_API_MAC_CARBON + #if SMTG_PLATFORM_64 + #pragma pack(push, 16) + #else + #pragma options align=mac68k + #endif + #endif +#elif defined __BORLANDC__ + #pragma -a8 +#elif SMTG_OS_WINDOWS + #pragma pack(push) + #if SMTG_PLATFORM_64 + #pragma pack(16) + #else + #pragma pack(8) + #endif +#endif +//---------------------------------------------------------------------------------------------- diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h new file mode 100644 index 00000000..51f5c390 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h @@ -0,0 +1,208 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/fplatform.h +// Created by : Steinberg, 01/2004 +// Description : Detect platform and set define +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#define kLittleEndian 0 +#define kBigEndian 1 + +#undef PLUGIN_API + +#if !defined (__INTEL_CXX11_MODE__) +#define SMTG_INTEL_CXX11_MODE 0 +#else +#define SMTG_INTEL_CXX11_MODE __INTEL_CXX11_MODE__ +#endif + +#if !defined (__INTEL_COMPILER) +#define SMTG_INTEL_COMPILER 0 +#else +#define SMTG_INTEL_COMPILER __INTEL_COMPILER +#endif + +//----------------------------------------------------------------------------- +// WIN32 AND WIN64 +#if defined (_WIN32) + #define SMTG_OS_LINUX 0 + #define SMTG_OS_MACOS 0 + #define SMTG_OS_WINDOWS 1 + #define SMTG_OS_IOS 0 + #define SMTG_OS_OSX 0 + + #define BYTEORDER kLittleEndian + + #define COM_COMPATIBLE 1 + #define PLUGIN_API __stdcall + #define SMTG_PTHREADS 0 + + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif + + #pragma warning (disable : 4244) // Conversion from 'type1' to 'type2', possible loss of data. + #pragma warning (disable : 4250) // Inheritance via dominance is allowed + #pragma warning (disable : 4996) // deprecated functions + + #pragma warning (3 : 4189) // local variable is initialized but not referenced + #pragma warning (3 : 4238) // nonstandard extension used : class rvalue used as lvalue + + #if defined (_WIN64) // WIN64 only + #define SMTG_PLATFORM_64 1 + #else + #define SMTG_PLATFORM_64 0 + #endif + + #ifndef WIN32 + #define WIN32 1 + #endif + + #ifdef __cplusplus + #define SMTG_CPP11 __cplusplus >= 201103L || _MSC_VER > 1600 || SMTG_INTEL_CXX11_MODE + #define SMTG_CPP11_STDLIBSUPPORT SMTG_CPP11 + #define SMTG_HAS_NOEXCEPT _MSC_VER >= 1900 || (SMTG_INTEL_CXX11_MODE && SMTG_INTEL_COMPILER >= 1300) + #endif +//----------------------------------------------------------------------------- +// LINUX +#elif __gnu_linux__ + #define SMTG_OS_LINUX 1 + #define SMTG_OS_MACOS 0 + #define SMTG_OS_WINDOWS 0 + #define SMTG_OS_IOS 0 + #define SMTG_OS_OSX 0 + + #include + #if __BYTE_ORDER == __LITTLE_ENDIAN + #define BYTEORDER kLittleEndian + #else + #define BYTEORDER kBigEndian + #endif + + #define COM_COMPATIBLE 0 + #define PLUGIN_API + #define SMTG_PTHREADS 1 + + #if __LP64__ + #define SMTG_PLATFORM_64 1 + #else + #define SMTG_PLATFORM_64 0 + #endif + #ifdef __cplusplus + #include + #define SMTG_CPP11 (__cplusplus >= 201103L) + #ifndef SMTG_CPP11 + #error unsupported compiler + #endif + #define SMTG_CPP11_STDLIBSUPPORT 1 + #define SMTG_HAS_NOEXCEPT 1 + #endif +//----------------------------------------------------------------------------- +// Mac and iOS +#elif __APPLE__ + #include + #define SMTG_OS_LINUX 0 + #define SMTG_OS_MACOS 1 + #define SMTG_OS_WINDOWS 0 + #define SMTG_OS_IOS TARGET_OS_IPHONE + #define SMTG_OS_OSX TARGET_OS_MAC && !TARGET_OS_IPHONE + + #if !SMTG_OS_IOS + #ifndef __CF_USE_FRAMEWORK_INCLUDES__ + #define __CF_USE_FRAMEWORK_INCLUDES__ + #endif + #ifndef TARGET_API_MAC_CARBON + #define TARGET_API_MAC_CARBON 1 + #endif + #endif + #if __LP64__ + #define SMTG_PLATFORM_64 1 + #else + #define SMTG_PLATFORM_64 0 + #endif + #if defined (__BIG_ENDIAN__) + #define BYTEORDER kBigEndian + #else + #define BYTEORDER kLittleEndian + #endif + + #define COM_COMPATIBLE 0 + #define PLUGIN_API + #define SMTG_PTHREADS 1 + + #if !defined(__PLIST__) && !defined(SMTG_DISABLE_DEFAULT_DIAGNOSTICS) + #ifdef __clang__ + #pragma GCC diagnostic ignored "-Wswitch-enum" + #pragma GCC diagnostic ignored "-Wparentheses" + #pragma GCC diagnostic ignored "-Wuninitialized" + #if __clang_major__ >= 3 + #pragma GCC diagnostic ignored "-Wtautological-compare" + #pragma GCC diagnostic ignored "-Wunused-value" + #if __clang_major__ >= 4 || __clang_minor__ >= 1 + #pragma GCC diagnostic ignored "-Wswitch" + #pragma GCC diagnostic ignored "-Wcomment" + #endif + #if __clang_major__ >= 5 + #pragma GCC diagnostic ignored "-Wunsequenced" + #if __clang_minor__ >= 1 + #pragma GCC diagnostic ignored "-Wunused-const-variable" + #endif + #endif + #endif + #endif + #endif + #ifdef __cplusplus + #include + #define SMTG_CPP11 (__cplusplus >= 201103L || SMTG_INTEL_CXX11_MODE) + #if defined (_LIBCPP_VERSION) && SMTG_CPP11 + #define SMTG_CPP11_STDLIBSUPPORT 1 + #define SMTG_HAS_NOEXCEPT 1 + #else + #define SMTG_CPP11_STDLIBSUPPORT 0 + #define SMTG_HAS_NOEXCEPT 0 + #endif + #endif +#else + #pragma error unknown platform + +#endif + +#if !SMTG_RENAME_ASSERT +#undef WINDOWS +#undef MAC +#undef PTHREADS +#undef PLATFORM_64 + +#if SMTG_OS_WINDOWS +#define WINDOWS SMTG_OS_WINDOWS +#endif +#if SMTG_OS_MACOS +#define MAC SMTG_OS_MACOS +#endif +#define PLATFORM_64 SMTG_PLATFORM_64 +#define PTHREADS SMTG_PTHREADS +#endif +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +#if SMTG_CPP11 +#define SMTG_OVERRIDE override +#else +#define SMTG_OVERRIDE +#endif +#if SMTG_HAS_NOEXCEPT +#define SMTG_NOEXCEPT noexcept +#else +#define SMTG_NOEXCEPT +#endif diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h new file mode 100644 index 00000000..4be03a8c --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h @@ -0,0 +1,291 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/fstrdefs.h +// Created by : Steinberg, 01/2004 +// Description : Definitions for handling strings (Unicode / ASCII / Platforms) +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "ftypes.h" + +//---------------------------------------------------------------------------- +// string methods defines unicode / ASCII +//---------------------------------------------------------------------------- + +// 16 bit string operations +#if SMTG_CPP11 // if c++11 unicode string literals + #define SMTG_CPP11_CAT_PRIVATE_DONT_USE(a,b) a ## b + #if SMTG_OS_WINDOWS + #define STR16(x) SMTG_CPP11_CAT_PRIVATE_DONT_USE(L,x) + #else + #define STR16(x) SMTG_CPP11_CAT_PRIVATE_DONT_USE(u,x) + #endif +#else + #include "conststringtable.h" + #define STR16(x) Steinberg::ConstStringTable::instance ()->getString (x) +#endif + +#ifdef UNICODE + #define STR(x) STR16(x) + #define tStrBufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::tchar)) + +#else + #define STR(x) x + #define tStrBufferSize(buffer) (sizeof(buffer)) +#endif + +#define str8BufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::char8)) +#define str16BufferSize(buffer) (sizeof(buffer)/sizeof(Steinberg::char16)) + +#if SMTG_OS_WINDOWS +#define FORMAT_INT64A "I64d" +#define FORMAT_UINT64A "I64u" + +#elif SMTG_OS_MACOS || SMTG_OS_LINUX +#define FORMAT_INT64A "lld" +#define FORMAT_UINT64A "llu" +#define stricmp strcasecmp +#define strnicmp strncasecmp +#endif + +#ifdef UNICODE +#define FORMAT_INT64W STR(FORMAT_INT64A) +#define FORMAT_UINT64W STR(FORMAT_UINT64A) + +#define FORMAT_INT64 FORMAT_INT64W +#define FORMAT_UINT64 FORMAT_UINT64W +#else +#define FORMAT_INT64 FORMAT_INT64A +#define FORMAT_UINT64 FORMAT_UINT64A +#endif + + +//---------------------------------------------------------------------------- +// newline +//---------------------------------------------------------------------------- +#if SMTG_OS_WINDOWS +#define ENDLINE_A "\r\n" +#define ENDLINE_W STR ("\r\n") +#elif SMTG_OS_MACOS +#define ENDLINE_A "\r" +#define ENDLINE_W STR ("\r") +#elif SMTG_OS_LINUX +#define ENDLINE_A "\n" +#define ENDLINE_W STR ("\n") +#endif + +#ifdef UNICODE +#define ENDLINE ENDLINE_W +#else +#define ENDLINE ENDLINE_A +#endif + +#if SMTG_OS_WINDOWS && !defined(__GNUC__) && defined(_MSC_VER) && (_MSC_VER < 1900) +#define stricmp _stricmp +#define strnicmp _strnicmp +#define snprintf _snprintf +#endif + +namespace Steinberg { + +//---------------------------------------------------------------------------- +static const tchar kEmptyString[] = { 0 }; +static const char8 kEmptyString8[] = { 0 }; +static const char16 kEmptyString16[] = { 0 }; + +#ifdef UNICODE +static const tchar kInfiniteSymbol[] = { 0x221E, 0 }; +#else +static const tchar* const kInfiniteSymbol = STR ("oo"); +#endif + +//---------------------------------------------------------------------------- +template +inline int32 _tstrlen (const T* wcs) +{ + const T* eos = wcs; + + while (*eos++) + ; + + return (int32) (eos - wcs - 1); +} + +inline int32 tstrlen (const tchar* str) {return _tstrlen (str);} +inline int32 strlen8 (const char8* str) {return _tstrlen (str);} +inline int32 strlen16 (const char16* str) {return _tstrlen (str);} + +//---------------------------------------------------------------------------- +template +inline int32 _tstrcmp (const T* src, const T* dst) +{ + while (*src == *dst && *dst) + { + src++; + dst++; + } + + if (*src == 0 && *dst == 0) + return 0; + else if (*src == 0) + return -1; + else if (*dst == 0) + return 1; + else + return (int32) (*src - *dst); +} + +inline int32 tstrcmp (const tchar* src, const tchar* dst) {return _tstrcmp (src, dst);} +inline int32 strcmp8 (const char8* src, const char8* dst) {return _tstrcmp (src, dst);} +inline int32 strcmp16 (const char16* src, const char16* dst) {return _tstrcmp (src, dst);} + +template +inline int32 strcmpT (const T* first, const T* last); + +template <> +inline int32 strcmpT (const char8* first, const char8* last) { return _tstrcmp (first, last); } + +template <> +inline int32 strcmpT (const char16* first, const char16* last) { return _tstrcmp (first, last); } + +//---------------------------------------------------------------------------- +template +inline int32 _tstrncmp (const T* first, const T* last, uint32 count) +{ + if (count == 0) + return 0; + + while (--count && *first && *first == *last) + { + first++; + last++; + } + + if (*first == 0 && *last == 0) + return 0; + else if (*first == 0) + return -1; + else if (*last == 0) + return 1; + else + return (int32) (*first - *last); +} + +inline int32 tstrncmp (const tchar* first, const tchar* last, uint32 count) {return _tstrncmp (first, last, count);} +inline int32 strncmp8 (const char8* first, const char8* last, uint32 count) {return _tstrncmp (first, last, count);} +inline int32 strncmp16 (const char16* first, const char16* last, uint32 count) {return _tstrncmp (first, last, count);} + +template +inline int32 strncmpT (const T* first, const T* last, uint32 count); + +template <> +inline int32 strncmpT (const char8* first, const char8* last, uint32 count) { return _tstrncmp (first, last, count); } + +template <> +inline int32 strncmpT (const char16* first, const char16* last, uint32 count) {return _tstrncmp (first, last, count); } + +//---------------------------------------------------------------------------- +template +inline T* _tstrcpy (T* dst, const T* src) +{ + T* cp = dst; + while ((*cp++ = *src++) != 0) // copy string + ; + return dst; +} +inline tchar* tstrcpy (tchar* dst, const tchar* src) {return _tstrcpy (dst, src);} +inline char8* strcpy8 (char8* dst, const char8* src) {return _tstrcpy (dst, src);} +inline char16* strcpy16 (char16* dst, const char16* src) {return _tstrcpy (dst, src);} + +//---------------------------------------------------------------------------- +template +inline T* _tstrncpy (T* dest, const T* source, uint32 count) +{ + T* start = dest; + while (count && (*dest++ = *source++) != 0) // copy string + count--; + + if (count) // pad out with zeros + { + while (--count) + *dest++ = 0; + } + return start; +} + +inline tchar* tstrncpy (tchar* dest, const tchar* source, uint32 count) {return _tstrncpy (dest, source, count);} +inline char8* strncpy8 (char8* dest, const char8* source, uint32 count) {return _tstrncpy (dest, source, count);} +inline char16* strncpy16 (char16* dest, const char16* source, uint32 count) {return _tstrncpy (dest, source, count);} + +//---------------------------------------------------------------------------- +template +inline T* _tstrcat (T* dst, const T* src) +{ + T* cp = dst; + + while (*cp) + cp++; // find end of dst + + while ((*cp++ = *src++) != 0) // Copy src to end of dst + ; + + return dst; +} + +inline tchar* tstrcat (tchar* dst, const tchar* src) {return _tstrcat (dst, src); } +inline char8* strcat8 (char8* dst, const char8* src) {return _tstrcat (dst, src); } +inline char16* strcat16 (char16* dst, const char16* src) {return _tstrcat (dst, src); } + +//---------------------------------------------------------------------------- +inline void str8ToStr16 (char16* dst, const char8* src, int32 n = -1) +{ + int32 i = 0; + for (;;) + { + if (i == n) + { + dst[i] = 0; + return; + } + +#if BYTEORDER == kBigEndian + char8* pChr = (char8*)&dst[i]; + pChr[0] = 0; + pChr[1] = src[i]; +#else + dst[i] = static_cast (src[i]); +#endif + + if (src[i] == 0) + break; + + i++; + } + + while (n > i) + { + dst[i] = 0; + i++; + } +} + +//------------------------------------------------------------------------ +inline bool FIDStringsEqual (FIDString id1, FIDString id2) +{ + return (id1 && id2) ? (strcmp8 (id1, id2) == 0) : false; +} + +static const uint32 kPrintfBufferSize = 4096; + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h new file mode 100644 index 00000000..fca4c695 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h @@ -0,0 +1,192 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/ftypes.h +// Created by : Steinberg, 01/2004 +// Description : Basic data types +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "fplatform.h" + +//#define UNICODE_OFF // disable / enable unicode + +#ifdef UNICODE_OFF + #ifdef UNICODE + #undef UNICODE + #endif +#else + #define UNICODE 1 +#endif + +#ifdef UNICODE +#define _UNICODE 1 +#endif + +namespace Steinberg +{ +//----------------------------------------------------------------- +// Integral Types + typedef char int8; + typedef unsigned char uint8; + typedef unsigned char uchar; + + typedef short int16; + typedef unsigned short uint16; + +#if SMTG_OS_WINDOWS && !defined(__GNUC__) + typedef long int32; + typedef unsigned long uint32; +#else + typedef int int32; + typedef unsigned int uint32; +#endif + + static const int32 kMaxLong = 0x7fffffff; + static const int32 kMinLong = (-0x7fffffff - 1); + static const int32 kMaxInt32 = kMaxLong; + static const int32 kMinInt32 = kMinLong; + static const uint32 kMaxInt32u = 0xffffffff; + +#if SMTG_OS_WINDOWS && !defined(__GNUC__) + typedef __int64 int64; + typedef unsigned __int64 uint64; + static const int64 kMaxInt64 = 9223372036854775807i64; + static const int64 kMinInt64 = (-9223372036854775807i64 - 1); +#else + typedef long long int64; + typedef unsigned long long uint64; + static const int64 kMaxInt64 = 0x7fffffffffffffffLL; + static const int64 kMinInt64 = (-0x7fffffffffffffffLL-1); +#endif + static const uint64 kMaxInt64u = uint64 (0xffffffff) | (uint64 (0xffffffff) << 32); + +//----------------------------------------------------------------- +// other Semantic Types + typedef int64 TSize; // byte (or other) sizes + typedef int32 tresult; // result code +//----------------------------------------------------------------- + static const float kMaxFloat = 3.40282346638528860E38; + static const double kMaxDouble = 1.7976931348623158E308; + +#if SMTG_PLATFORM_64 + typedef uint64 TPtrInt; +#else + typedef uint32 TPtrInt; +#endif + +//------------------------------------------------------------------ +// Boolean + typedef uint8 TBool; + +//------------------------------------------------------------------ +// Char / Strings + typedef char char8; +#ifdef _NATIVE_WCHAR_T_DEFINED + typedef __wchar_t char16; +#elif SMTG_CPP11 + typedef char16_t char16; +#else + typedef int16 char16; +#endif + +#ifdef UNICODE + typedef char16 tchar; +#else + typedef char8 tchar; +#endif + + typedef const char8* CStringA; + typedef const char16* CStringW; + typedef const tchar* CString; + inline bool strEmpty (const tchar* str) { return (!str || *str == 0); } + inline bool str8Empty (const char8* str) { return (!str || *str == 0); } + inline bool str16Empty (const char16* str) { return (!str || *str == 0); } + + typedef const char8* FIDString; // identifier as string (used for attributes, messages) + + const FIDString kPlatformStringWin = "WIN"; + const FIDString kPlatformStringMac = "MAC"; + const FIDString kPlatformStringIOS = "IOS"; + const FIDString kPlatformStringLinux = "Linux"; +#if SMTG_OS_WINDOWS + const FIDString kPlatformString = kPlatformStringWin; +#elif SMTG_OS_IOS + const FIDString kPlatformString = kPlatformStringIOS; +#elif SMTG_OS_MACOS + const FIDString kPlatformString = kPlatformStringMac; +#elif SMTG_OS_LINUX + const FIDString kPlatformString = kPlatformStringLinux; +#endif + +//------------------------------------------------------------------------ +/** Coordinates */ + typedef int32 UCoord; + static const UCoord kMaxCoord = ((UCoord)0x7FFFFFFF); + static const UCoord kMinCoord = ((UCoord)-0x7FFFFFFF); +} // namespace Steinberg + + +//---------------------------------------------------------------------------- +/** Byte-order Conversion Macros */ +//---------------------------------------------------------------------------- +#define SWAP_32(l) { \ + unsigned char* p = (unsigned char*)& (l); \ + unsigned char t; \ + t = p[0]; p[0] = p[3]; p[3] = t; t = p[1]; p[1] = p[2]; p[2] = t; } + +#define SWAP_16(w) { \ + unsigned char* p = (unsigned char*)& (w); \ + unsigned char t; \ + t = p[0]; p[0] = p[1]; p[1] = t; } + +#define SWAP_64(i) { \ + unsigned char* p = (unsigned char*)& (i); \ + unsigned char t; \ + t = p[0]; p[0] = p[7]; p[7] = t; t = p[1]; p[1] = p[6]; p[6] = t; \ + t = p[2]; p[2] = p[5]; p[5] = t; t = p[3]; p[3] = p[4]; p[4] = t;} + +namespace Steinberg +{ + static inline void FSwap (int8&) {} + static inline void FSwap (uint8&) {} + static inline void FSwap (int16& i16) { SWAP_16 (i16) } + static inline void FSwap (uint16& i16) { SWAP_16 (i16) } + static inline void FSwap (int32& i32) { SWAP_32 (i32) } + static inline void FSwap (uint32& i32) { SWAP_32 (i32) } + static inline void FSwap (int64& i64) { SWAP_64 (i64) } + static inline void FSwap (uint64& i64) { SWAP_64 (i64) } +} + +// always inline macros (only when RELEASE is 1) +//---------------------------------------------------------------------------- +#if RELEASE + #if SMTG_OS_MACOS || SMTG_OS_LINUX + #define SMTG_ALWAYS_INLINE __inline__ __attribute__((__always_inline__)) + #define SMTG_NEVER_INLINE __attribute__((noinline)) + #elif SMTG_OS_WINDOWS + #define SMTG_ALWAYS_INLINE __forceinline + #define SMTG_NEVER_INLINE __declspec(noinline) + #endif +#endif + +#ifndef SMTG_ALWAYS_INLINE + #define SMTG_ALWAYS_INLINE inline +#endif +#ifndef SMTG_NEVER_INLINE + #define SMTG_NEVER_INLINE +#endif + +#ifndef SMTG_CPP11_STDLIBSUPPORT +// Enable this for old compilers +// #define nullptr NULL +#endif diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp new file mode 100644 index 00000000..63b73164 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp @@ -0,0 +1,453 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/funknown.cpp +// Created by : Steinberg, 01/2004 +// Description : Basic Interface +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#include "funknown.h" + +#include "fstrdefs.h" + +#include + +#if SMTG_OS_WINDOWS +#include +#endif + +#if SMTG_OS_MACOS +#include +#include + +#if defined (__GNUC__) && (__GNUC__ >= 4) && !__LP64__ +// on 32 bit Mac OS X we can safely ignore the format warnings as sizeof(int) == sizeof(long) +#pragma GCC diagnostic ignored "-Wformat" +#endif + +#endif + +#if SMTG_OS_LINUX +#include +#endif + +namespace Steinberg { + +//------------------------------------------------------------------------ +#if COM_COMPATIBLE +#if SMTG_OS_WINDOWS +#define GuidStruct GUID +#else +struct GuidStruct +{ + uint32 Data1; + uint16 Data2; + uint16 Data3; + uint8 Data4[8]; +}; +#endif +#endif + +static void toString8 (char8* string, const char* data, int32 i1, int32 i2); +static void fromString8 (const char8* string, char* data, int32 i1, int32 i2); +static uint32 makeLong (uint8 b1, uint8 b2, uint8 b3, uint8 b4); + +//------------------------------------------------------------------------ +// FUnknownPrivate +//------------------------------------------------------------------------ +namespace FUnknownPrivate { +//------------------------------------------------------------------------ +int32 PLUGIN_API atomicAdd (int32& var, int32 d) +{ +#if SMTG_OS_WINDOWS + return InterlockedExchangeAdd (&var, d) + d; +#elif SMTG_OS_MACOS + return OSAtomicAdd32Barrier (d, (int32_t*)&var); +#elif SMTG_OS_LINUX + __gnu_cxx::__atomic_add (&var, d); + return var; +#else +#warning implement me! + var += d; + return var; +#endif +} +} // FUnknownPrivate + +//------------------------------------------------------------------------ +// FUID implementation +//------------------------------------------------------------------------ + +FUID::FUID () +{ + memset (data, 0, sizeof (TUID)); +} + +//------------------------------------------------------------------------ +FUID::FUID (uint32 l1, uint32 l2, uint32 l3, uint32 l4) +{ + from4Int (l1, l2, l3, l4); +} + +//------------------------------------------------------------------------ +FUID::FUID (const FUID& f) +{ + memcpy (data, f.data, sizeof (TUID)); +} + +//------------------------------------------------------------------------ +#if SMTG_CPP11_STDLIBSUPPORT +FUID::FUID (FUID&& other) { + memcpy (data, other.data, sizeof (TUID)); +} + +FUID& FUID::operator= (FUID&& other) +{ + memcpy (data, other.data, sizeof (TUID)); + return *this; +} +#endif + +//------------------------------------------------------------------------ +bool FUID::generate () +{ +#if SMTG_OS_WINDOWS + GUID guid; + HRESULT hr = CoCreateGuid (&guid); + switch (hr) + { + case RPC_S_OK: + memcpy (data, (char*)&guid, sizeof (TUID)); + return true; + + case RPC_S_UUID_LOCAL_ONLY: + default: + return false; + } + +#elif SMTG_OS_MACOS + CFUUIDRef uuid = CFUUIDCreate (kCFAllocatorDefault); + if (uuid) + { + CFUUIDBytes bytes = CFUUIDGetUUIDBytes (uuid); + memcpy (data, (char*)&bytes, sizeof (TUID)); + CFRelease (uuid); + return true; + } + return false; + +#else +#warning implement me! + return false; +#endif +} + +//------------------------------------------------------------------------ +bool FUID::isValid () const +{ + TUID nulluid = {0}; + + return memcmp (data, nulluid, sizeof (TUID)) != 0; +} + +//------------------------------------------------------------------------ +FUID& FUID::operator = (const FUID& f) +{ + memcpy (data, f.data, sizeof (TUID)); + return *this; +} + +//------------------------------------------------------------------------ +void FUID::from4Int (uint32 l1, uint32 l2, uint32 l3, uint32 l4) +{ +#if COM_COMPATIBLE + data [0] = (char)((l1 & 0x000000FF) ); + data [1] = (char)((l1 & 0x0000FF00) >> 8); + data [2] = (char)((l1 & 0x00FF0000) >> 16); + data [3] = (char)((l1 & 0xFF000000) >> 24); + data [4] = (char)((l2 & 0x00FF0000) >> 16); + data [5] = (char)((l2 & 0xFF000000) >> 24); + data [6] = (char)((l2 & 0x000000FF) ); + data [7] = (char)((l2 & 0x0000FF00) >> 8); + data [8] = (char)((l3 & 0xFF000000) >> 24); + data [9] = (char)((l3 & 0x00FF0000) >> 16); + data [10] = (char)((l3 & 0x0000FF00) >> 8); + data [11] = (char)((l3 & 0x000000FF) ); + data [12] = (char)((l4 & 0xFF000000) >> 24); + data [13] = (char)((l4 & 0x00FF0000) >> 16); + data [14] = (char)((l4 & 0x0000FF00) >> 8); + data [15] = (char)((l4 & 0x000000FF) ); +#else + data [0] = (char)((l1 & 0xFF000000) >> 24); + data [1] = (char)((l1 & 0x00FF0000) >> 16); + data [2] = (char)((l1 & 0x0000FF00) >> 8); + data [3] = (char)((l1 & 0x000000FF) ); + data [4] = (char)((l2 & 0xFF000000) >> 24); + data [5] = (char)((l2 & 0x00FF0000) >> 16); + data [6] = (char)((l2 & 0x0000FF00) >> 8); + data [7] = (char)((l2 & 0x000000FF) ); + data [8] = (char)((l3 & 0xFF000000) >> 24); + data [9] = (char)((l3 & 0x00FF0000) >> 16); + data [10] = (char)((l3 & 0x0000FF00) >> 8); + data [11] = (char)((l3 & 0x000000FF) ); + data [12] = (char)((l4 & 0xFF000000) >> 24); + data [13] = (char)((l4 & 0x00FF0000) >> 16); + data [14] = (char)((l4 & 0x0000FF00) >> 8); + data [15] = (char)((l4 & 0x000000FF) ); +#endif +} + +//------------------------------------------------------------------------ +void FUID::to4Int (uint32& d1, uint32& d2, uint32& d3, uint32& d4) const +{ + d1 = getLong1 (); + d2 = getLong2 (); + d3 = getLong3 (); + d4 = getLong4 (); +} + +//------------------------------------------------------------------------ +uint32 FUID::getLong1 () const +{ +#if COM_COMPATIBLE + return makeLong (data[3], data[2], data [1], data [0]); +#else + return makeLong (data[0], data[1], data [2], data [3]); +#endif +} + +//------------------------------------------------------------------------ +uint32 FUID::getLong2 () const +{ +#if COM_COMPATIBLE + return makeLong (data[5], data[4], data [7], data [6]); +#else + return makeLong (data[4], data[5], data [6], data [7]); +#endif +} + +//------------------------------------------------------------------------ +uint32 FUID::getLong3 () const +{ +#if COM_COMPATIBLE + return makeLong (data[8], data[9], data [10], data [11]); +#else + return makeLong (data[8], data[9], data [10], data [11]); +#endif +} + +//------------------------------------------------------------------------ +uint32 FUID::getLong4 () const +{ +#if COM_COMPATIBLE + return makeLong (data[12], data[13], data [14], data [15]); +#else + return makeLong (data[12], data[13], data [14], data [15]); +#endif +} + +//------------------------------------------------------------------------ +void FUID::toString (char8* string) const +{ + if (!string) + return; + + #if COM_COMPATIBLE + GuidStruct* g = (GuidStruct*)data; + + char8 s[17]; + Steinberg::toString8 (s, data, 8, 16); + + sprintf (string, "%08X%04X%04X%s", g->Data1, g->Data2, g->Data3, s); + #else + Steinberg::toString8 (string, data, 0, 16); + #endif +} + +//------------------------------------------------------------------------ +bool FUID::fromString (const char8* string) +{ + if (!string || !*string) + return false; + if (strlen (string) != 32) + return false; + + #if COM_COMPATIBLE + GuidStruct g; + char s[33]; + + strcpy (s, string); + s[8] = 0; + sscanf (s, "%x", &g.Data1); + strcpy (s, string + 8); + s[4] = 0; + sscanf (s, "%hx", &g.Data2); + strcpy (s, string + 12); + s[4] = 0; + sscanf (s, "%hx", &g.Data3); + + memcpy (data, &g, 8); + Steinberg::fromString8 (string + 16, data, 8, 16); + #else + Steinberg::fromString8 (string, data, 0, 16); + #endif + + return true; +} + +//------------------------------------------------------------------------ +bool FUID::fromRegistryString (const char8* string) +{ + if (!string || !*string) + return false; + if (strlen (string) != 38) + return false; + + // e.g. {c200e360-38c5-11ce-ae62-08002b2b79ef} + + #if COM_COMPATIBLE + GuidStruct g; + char8 s[10]; + + strncpy (s, string + 1, 8); + s[8] = 0; + sscanf (s, "%x", &g.Data1); + strncpy (s, string + 10, 4); + s[4] = 0; + sscanf (s, "%hx", &g.Data2); + strncpy (s, string + 15, 4); + s[4] = 0; + sscanf (s, "%hx", &g.Data3); + memcpy (data, &g, 8); + + Steinberg::fromString8 (string + 20, data, 8, 10); + Steinberg::fromString8 (string + 25, data, 10, 16); + #else + Steinberg::fromString8 (string + 1, data, 0, 4); + Steinberg::fromString8 (string + 10, data, 4, 6); + Steinberg::fromString8 (string + 15, data, 6, 8); + Steinberg::fromString8 (string + 20, data, 8, 10); + Steinberg::fromString8 (string + 25, data, 10, 16); + #endif + + return true; +} + +//------------------------------------------------------------------------ +void FUID::toRegistryString (char8* string) const +{ + // e.g. {c200e360-38c5-11ce-ae62-08002b2b79ef} + + #if COM_COMPATIBLE + GuidStruct* g = (GuidStruct*)data; + + char8 s1[5]; + Steinberg::toString8 (s1, data, 8, 10); + + char8 s2[13]; + Steinberg::toString8 (s2, data, 10, 16); + + sprintf (string, "{%08X-%04X-%04X-%s-%s}", g->Data1, g->Data2, g->Data3, s1, s2); + #else + char8 s1[9]; + Steinberg::toString8 (s1, data, 0, 4); + char8 s2[5]; + Steinberg::toString8 (s2, data, 4, 6); + char8 s3[5]; + Steinberg::toString8 (s3, data, 6, 8); + char8 s4[5]; + Steinberg::toString8 (s4, data, 8, 10); + char8 s5[13]; + Steinberg::toString8 (s5, data, 10, 16); + + sprintf (string, "{%s-%s-%s-%s-%s}", s1, s2, s3, s4, s5); + #endif +} + +//------------------------------------------------------------------------ +void FUID::print (char8* string, int32 style) const +{ + if (!string) // no string: debug output + { + char8 str [128]; + print (str, style); + +#if SMTG_OS_WINDOWS + OutputDebugStringA (str); + OutputDebugStringA ("\n"); +#else + fprintf (stdout, "%s\n", str); +#endif + return; + } + + uint32 l1, l2, l3, l4; + to4Int (l1, l2, l3, l4); + + switch (style) + { + case kINLINE_UID: + sprintf (string, "INLINE_UID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); + break; + + case kDECLARE_UID: + sprintf (string, "DECLARE_UID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); + break; + + case kFUID: + sprintf (string, "FUID (0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); + break; + + case kCLASS_UID: + default: + sprintf (string, "DECLARE_CLASS_IID (Interface, 0x%08X, 0x%08X, 0x%08X, 0x%08X)", l1, l2, l3, l4); + break; + } +} + +//------------------------------------------------------------------------ +// helpers +//------------------------------------------------------------------------ +static uint32 makeLong (uint8 b1, uint8 b2, uint8 b3, uint8 b4) +{ + return (uint32(b1) << 24) | (uint32(b2) << 16) | (uint32(b3) << 8) | uint32(b4); +} + +//------------------------------------------------------------------------ +static void toString8 (char8* string, const char* data, int32 i1, int32 i2) +{ + *string = 0; + for (int32 i = i1; i < i2; i++) + { + char8 s[3]; + sprintf (s, "%02X", (uint8)data[i]); + strcat (string, s); + } +} + +//------------------------------------------------------------------------ +static void fromString8 (const char8* string, char* data, int32 i1, int32 i2) +{ + for (int32 i = i1; i < i2; i++) + { + char8 s[3]; + s[0] = *string++; + s[1] = *string++; + s[2] = 0; + + int32 d = 0; + sscanf (s, "%2x", &d); + data[i] = (char)d; + } +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h new file mode 100644 index 00000000..21ff5981 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h @@ -0,0 +1,466 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/funknown.h +// Created by : Steinberg, 01/2004 +// Description : Basic Interface +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/fplatform.h" +#include "pluginterfaces/base/ftypes.h" +#include "pluginterfaces/base/smartpointer.h" +#include + +//------------------------------------------------------------------------ +/*! \defgroup pluginBase Basic Interfaces +*/ +//------------------------------------------------------------------------ + +//------------------------------------------------------------------------ +// Unique Identifier macros +//------------------------------------------------------------------------ + +#if COM_COMPATIBLE +#define INLINE_UID(l1, l2, l3, l4) \ +{ \ + (::Steinberg::int8)((l1 & 0x000000FF) ), (::Steinberg::int8)((l1 & 0x0000FF00) >> 8), \ + (::Steinberg::int8)((l1 & 0x00FF0000) >> 16), (::Steinberg::int8)((l1 & 0xFF000000) >> 24), \ + (::Steinberg::int8)((l2 & 0x00FF0000) >> 16), (::Steinberg::int8)((l2 & 0xFF000000) >> 24), \ + (::Steinberg::int8)((l2 & 0x000000FF) ), (::Steinberg::int8)((l2 & 0x0000FF00) >> 8), \ + (::Steinberg::int8)((l3 & 0xFF000000) >> 24), (::Steinberg::int8)((l3 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l3 & 0x0000FF00) >> 8), (::Steinberg::int8)((l3 & 0x000000FF) ), \ + (::Steinberg::int8)((l4 & 0xFF000000) >> 24), (::Steinberg::int8)((l4 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l4 & 0x0000FF00) >> 8), (::Steinberg::int8)((l4 & 0x000000FF) ) \ +} +#else +#define INLINE_UID(l1, l2, l3, l4) \ +{ \ + (::Steinberg::int8)((l1 & 0xFF000000) >> 24), (::Steinberg::int8)((l1 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l1 & 0x0000FF00) >> 8), (::Steinberg::int8)((l1 & 0x000000FF) ), \ + (::Steinberg::int8)((l2 & 0xFF000000) >> 24), (::Steinberg::int8)((l2 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l2 & 0x0000FF00) >> 8), (::Steinberg::int8)((l2 & 0x000000FF) ), \ + (::Steinberg::int8)((l3 & 0xFF000000) >> 24), (::Steinberg::int8)((l3 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l3 & 0x0000FF00) >> 8), (::Steinberg::int8)((l3 & 0x000000FF) ), \ + (::Steinberg::int8)((l4 & 0xFF000000) >> 24), (::Steinberg::int8)((l4 & 0x00FF0000) >> 16), \ + (::Steinberg::int8)((l4 & 0x0000FF00) >> 8), (::Steinberg::int8)((l4 & 0x000000FF) ) \ +} +#endif + +//------------------------------------------------------------------------ +#define DECLARE_UID(name, l1, l2, l3, l4) \ + ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4); + +//------------------------------------------------------------------------ +#define EXTERN_UID(name) \ + extern const ::Steinberg::TUID name; + + +#ifdef INIT_CLASS_IID +#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4) static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4); \ +const ::Steinberg::FUID ClassName::iid (ClassName##_iid); +#else +#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4) static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4); +#endif +#define DEF_CLASS_IID(ClassName) const ::Steinberg::FUID ClassName::iid (ClassName##_iid); + +#define INLINE_UID_OF(ClassName) ClassName##_iid + +#define INLINE_UID_FROM_FUID(x) INLINE_UID(x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ()) + +//------------------------------------------------------------------------ +// FUnknown implementation macros +//------------------------------------------------------------------------ + +#define DECLARE_FUNKNOWN_METHODS \ +public: \ + virtual ::Steinberg::tresult PLUGIN_API queryInterface (const ::Steinberg::TUID _iid, void** obj) SMTG_OVERRIDE; \ + virtual ::Steinberg::uint32 PLUGIN_API addRef () SMTG_OVERRIDE; \ + virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE; \ +protected : \ + ::Steinberg::int32 __funknownRefCount; \ +public: + +//------------------------------------------------------------------------ + +#define DELEGATE_REFCOUNT(ClassName) \ +public: \ + virtual ::Steinberg::uint32 PLUGIN_API addRef () SMTG_OVERRIDE { return ClassName::addRef (); } \ + virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE { return ClassName::release (); } + +//------------------------------------------------------------------------ +#define IMPLEMENT_REFCOUNT(ClassName) \ +::Steinberg::uint32 PLUGIN_API ClassName::addRef () \ +{ \ + return ::Steinberg::FUnknownPrivate::atomicAdd (__funknownRefCount, 1); \ +} \ +::Steinberg::uint32 PLUGIN_API ClassName::release () \ +{ \ + if (::Steinberg::FUnknownPrivate::atomicAdd (__funknownRefCount, -1) == 0) \ + { \ + delete this; \ + return 0; \ + } \ + return __funknownRefCount; \ +} + +//------------------------------------------------------------------------ +#define FUNKNOWN_CTOR { __funknownRefCount = 1; } +#define FUNKNOWN_DTOR + +//------------------------------------------------------------------------ +#define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName) \ +if (::Steinberg::FUnknownPrivate::iidEqual (iid, InterfaceIID)) \ +{ \ + addRef (); \ + *obj = static_cast< InterfaceName* >(this); \ + return ::Steinberg::kResultOk; \ +} + +//------------------------------------------------------------------------ +#define IMPLEMENT_QUERYINTERFACE(ClassName, InterfaceName, ClassIID) \ +::Steinberg::tresult PLUGIN_API ClassName::queryInterface (const ::Steinberg::TUID _iid, void** obj) \ +{ \ + QUERY_INTERFACE (_iid, obj, ::Steinberg::FUnknown::iid, InterfaceName) \ + QUERY_INTERFACE (_iid, obj, ClassIID, InterfaceName) \ + *obj = nullptr; \ + return ::Steinberg::kNoInterface; \ +} + +//------------------------------------------------------------------------ +#define IMPLEMENT_FUNKNOWN_METHODS(ClassName,InterfaceName,ClassIID) \ + IMPLEMENT_REFCOUNT (ClassName) \ + IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID) + +//------------------------------------------------------------------------ +// Result Codes +//------------------------------------------------------------------------ + +namespace Steinberg { + +//------------------------------------------------------------------------ +#if COM_COMPATIBLE +#if SMTG_OS_WINDOWS +enum +{ + kNoInterface = static_cast(0x80004002L), // E_NOINTERFACE + kResultOk = static_cast(0x00000000L), // S_OK + kResultTrue = kResultOk, + kResultFalse = static_cast(0x00000001L), // S_FALSE + kInvalidArgument = static_cast(0x80070057L), // E_INVALIDARG + kNotImplemented = static_cast(0x80004001L), // E_NOTIMPL + kInternalError = static_cast(0x80004005L), // E_FAIL + kNotInitialized = static_cast(0x8000FFFFL), // E_UNEXPECTED + kOutOfMemory = static_cast(0x8007000EL) // E_OUTOFMEMORY +}; +#else +enum +{ + kNoInterface = static_cast(0x80000004L), // E_NOINTERFACE + kResultOk = static_cast(0x00000000L), // S_OK + kResultTrue = kResultOk, + kResultFalse = static_cast(0x00000001L), // S_FALSE + kInvalidArgument = static_cast(0x80000003L), // E_INVALIDARG + kNotImplemented = static_cast(0x80000001L), // E_NOTIMPL + kInternalError = static_cast(0x80000008L), // E_FAIL + kNotInitialized = static_cast(0x8000FFFFL), // E_UNEXPECTED + kOutOfMemory = static_cast(0x80000002L) // E_OUTOFMEMORY +}; +#endif +#else +enum +{ + kNoInterface = -1, + kResultOk, + kResultTrue = kResultOk, + kResultFalse, + kInvalidArgument, + kNotImplemented, + kInternalError, + kNotInitialized, + kOutOfMemory +}; +#endif + +//------------------------------------------------------------------------ +typedef int64 LARGE_INT; // obsolete + +//------------------------------------------------------------------------ +// FUID class declaration +//------------------------------------------------------------------------ +typedef int8 TUID[16]; ///< plain UID type + +//------------------------------------------------------------------------ +/* FUnknown private */ +namespace FUnknownPrivate { +SMTG_ALWAYS_INLINE bool iidEqual (const void* iid1, const void* iid2) +{ + const uint64* p1 = reinterpret_cast (iid1); + const uint64* p2 = reinterpret_cast (iid2); + return p1[0] == p2[0] && p1[1] == p2[1]; +} + +int32 PLUGIN_API atomicAdd (int32& value, int32 amount); +} + +//------------------------------------------------------------------------ +/** Handling 16 Byte Globally Unique Identifiers. +\ingroup pluginBase + +Each interface declares its identifier as static member inside the interface +namespace (e.g. FUnknown::iid). +*/ +//------------------------------------------------------------------------ +class FUID +{ +public: +//------------------------------------------------------------------------ + FUID (); + FUID (uint32 l1, uint32 l2, uint32 l3, uint32 l4); + FUID (const FUID&); + virtual ~FUID () {} + +#if SMTG_CPP11_STDLIBSUPPORT + FUID (FUID&& other); + FUID& operator= (FUID&& other); +#endif + + /** Generates a new Unique Identifier (UID). + Will return true for success. If the return value is false, either no + UID is generated or the UID is not guaranteed to be unique worldwide. */ + bool generate (); + + /** Checks if the UID data is valid. + The default constructor initializes the memory with zeros. */ + bool isValid () const; + + FUID& operator = (const FUID& f); + bool operator == (const FUID& f) const { return ::Steinberg::FUnknownPrivate::iidEqual (data, f.data); } + bool operator < (const FUID& f) const { return memcmp (data, f.data, sizeof (TUID)) < 0; } + bool operator != (const FUID& f) const { return !::Steinberg::FUnknownPrivate::iidEqual (data, f.data); } + + + uint32 getLong1 () const; + uint32 getLong2 () const; + uint32 getLong3 () const; + uint32 getLong4 () const; + + void from4Int (uint32 d1, uint32 d2, uint32 d3, uint32 d4); + void to4Int (uint32& d1, uint32& d2, uint32& d3, uint32& d4) const; + + typedef char8 String [64]; + + /** Converts UID to a string. + The string will be 32 characters long, representing the hexadecimal values + of each data byte (e.g. "9127BE30160E4BB69966670AA6087880"). + + Typical use-case is: + \code + char8[33] strUID = {0}; + FUID uid; + if (uid.generate ()) + uid.toString (strUID); + \endcode + */ + void toString (char8* string) const; + + /** Sets the UID data from a string. + The string has to be 32 characters long, where each character-pair is + the ASCII-encoded hexadecimal value of the corresponding data byte. */ + bool fromString (const char8* string); + + /** Converts UID to a string in Microsoft® OLE format. + (e.g. "{c200e360-38c5-11ce-ae62-08002b2b79ef}") */ + void toRegistryString (char8* string) const; + + /** Sets the UID data from a string in Microsoft® OLE format. */ + bool fromRegistryString (const char8* string); + + enum UIDPrintStyle + { + kINLINE_UID, ///< "INLINE_UID (0x00000000, 0x00000000, 0x00000000, 0x00000000)" + kDECLARE_UID, ///< "DECLARE_UID (0x00000000, 0x00000000, 0x00000000, 0x00000000)" + kFUID, ///< "FUID (0x00000000, 0x00000000, 0x00000000, 0x00000000)" + kCLASS_UID ///< "DECLARE_CLASS_IID (Interface, 0x00000000, 0x00000000, 0x00000000, 0x00000000)" + }; + /** Prints the UID to a string (or debug output if string is NULL). + \param string is the output string if not NULL. + \param style can be chosen from the FUID::UIDPrintStyle enumeration. */ + void print (char8* string = 0, int32 style = kINLINE_UID) const; + + template + inline explicit FUID (const int8 (&uid)[N]) + { +#if SMTG_CPP11_STDLIBSUPPORT + static_assert (N == sizeof (TUID), "only TUID allowed"); +#endif + memcpy (data, uid, sizeof (TUID)); + } + inline void toTUID (TUID result) const { memcpy (result, data, sizeof (TUID)); } + inline operator const TUID& () const { return data; } + inline const TUID& toTUID () const { return data; } + + static FUID fromTUID (const TUID uid) + { + FUID res; + if (uid) + memcpy (res.data, uid, sizeof (TUID)); + return res; + } + +//------------------------------------------------------------------------ +protected: + TUID data; +}; + +#if SMTG_CPP11_STDLIBSUPPORT +template +inline bool operator== (const FUID& f1, T f2) +{ + static_assert ( + std::is_same::type, FUID>::value, + "Do not compare a FUID with a TUID directly. Either convert the TUID to a FUID and compare them or use FUnknownPrivate::iidEqual"); + return f1.operator== (f2); +} +#endif + +//------------------------------------------------------------------------ +// FUnknown +//------------------------------------------------------------------------ +/** The basic interface of all interfaces. +\ingroup pluginBase + +- The FUnknown::queryInterface method is used to retrieve pointers to other + interfaces of the object. +- FUnknown::addRef and FUnknown::release manage the lifetime of the object. + If no more references exist, the object is destroyed in memory. + +Interfaces are identified by 16 byte Globally Unique Identifiers. +The SDK provides a class called FUID for this purpose. + +\ref howtoClass */ +//------------------------------------------------------------------------ +class FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Query for a pointer to the specified interface. + Returns kResultOk on success or kNoInterface if the object does not implement the interface. + The object has to call addRef when returning an interface. + \param _iid : (in) 16 Byte interface identifier (-> FUID) + \param obj : (out) On return, *obj points to the requested interface */ + virtual tresult PLUGIN_API queryInterface (const TUID _iid, void** obj) = 0; + + /** Adds a reference and return the new reference count. + \par Remarks: + The initial reference count after creating an object is 1. */ + virtual uint32 PLUGIN_API addRef () = 0; + + /** Releases a reference and return the new reference count. + If the reference count reaches zero, the object will be destroyed in memory. */ + virtual uint32 PLUGIN_API release () = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +//------------------------------------------------------------------------ +}; + +DECLARE_CLASS_IID (FUnknown, 0x00000000, 0x00000000, 0xC0000000, 0x00000046) + +//------------------------------------------------------------------------ +// FUnknownPtr +//------------------------------------------------------------------------ +/** FUnknownPtr - automatic interface conversion and smart pointer in one. + This template class can be used for interface conversion like this: + \code + IPtr path = owned (FHostCreate (IPath, hostClasses)); + FUnknownPtr path2 (path); // does a query interface for IPath2 + if (path2) + ... + \endcode +*/ +//------------------------------------------------------------------------ +template +class FUnknownPtr : public IPtr +{ +public: +//------------------------------------------------------------------------ + inline FUnknownPtr (FUnknown* unknown); // query interface + inline FUnknownPtr (const FUnknownPtr& p) : IPtr (p) {} + inline FUnknownPtr () {} + + inline FUnknownPtr& operator=(const FUnknownPtr& p) {IPtr::operator=(p); return *this;} + inline I* operator=(FUnknown* unknown); + inline I* getInterface () { return this->ptr; } +}; + +//------------------------------------------------------------------------ +template +inline FUnknownPtr::FUnknownPtr (FUnknown* unknown) +{ + if (unknown && unknown->queryInterface (I::iid, (void**)&this->ptr) != kResultOk) + this->ptr = 0; +} + +//------------------------------------------------------------------------ +template +inline I* FUnknownPtr::operator=(FUnknown* unknown) +{ + I* newPtr = 0; + if (unknown && unknown->queryInterface (I::iid, (void**)&newPtr) == kResultOk) + { + OPtr rel (newPtr); + return IPtr::operator=(newPtr); + } + + return IPtr::operator=(0); +} + + +//------------------------------------------------------------------------ +// FReleaser (obsolete) +//------------------------------------------------------------------------ +/** Release an interface using automatic object (obsolete). +This class is obsolete and is only kept for compatibility. +The replacement for FReleaser is OPtr. + +Usage example with FReleaser: + \code + void someFunction () + { + IPath* path = pathCreateMethod (); + FReleaser releaser (path); + .... do something with path... + .... path not used anymore, releaser will destroy it when leaving function scope + } + \endcode +Usage example with OPtr: + \code + void someFunction () + { + OPtr path = pathCreateMethod (); + .... do something with path... + .... path not used anymore, OPtr will destroy it when leaving function scope + } + \endcode +*/ +//------------------------------------------------------------------------ +struct FReleaser +{ + FReleaser (FUnknown* u): u (u) {} + ~FReleaser () { if (u) u->release (); } + + FUnknown* u; +}; + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h new file mode 100644 index 00000000..94312efa --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/futils.h +// Created by : Steinberg, 01/2004 +// Description : Basic utilities +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/ftypes.h" + +namespace Steinberg { +//---------------------------------------------------------------------------- +// min/max/etc. template functions +template +inline const T& Min (const T& a, const T& b) +{ + return b < a ? b : a; +} + +template +inline const T& Max (const T& a, const T& b) +{ + return a < b ? b : a; +} + +template +inline T Abs (const T& value) +{ + return (value >= (T)0) ? value : -value; +} + +template +inline T Sign (const T& value) +{ + return (value == (T)0) ? 0 : ((value >= (T)0) ? 1 : -1); +} + +template +inline T Bound (T minval, T maxval, T x) +{ + if (x < minval) + return minval; + else if (x > maxval) + return maxval; + return x; +} + +template +void Swap (T& t1, T& t2) +{ + T tmp = t1; + t1 = t2; + t2 = tmp; +} + +template +bool IsApproximateEqual (T t1, T t2, T epsilon) +{ + if (t1 == t2) + return true; + T diff = t1 - t2; + if (diff < 0.0) + diff = -diff; + if (diff < epsilon) + return true; + return false; +} + +template +inline T ToNormalized (const T& value, const int32 numSteps) +{ + return value / T (numSteps); +} + +template +inline int32 FromNormalized (const T& norm, const int32 numSteps) +{ + return Min (numSteps, int32 (norm * (numSteps + 1))); +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h new file mode 100644 index 00000000..6cfae7b3 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h @@ -0,0 +1,297 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/fvariant.h +// Created by : Steinberg, 01/2004 +// Description : Basic Interface +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/fstrdefs.h" +#include "pluginterfaces/base/funknown.h" + +//------------------------------------------------------------------------ +namespace Steinberg { + +class FUnknown; + +//------------------------------------------------------------------------ +// FVariant struct declaration +//------------------------------------------------------------------------ +/** A Value of variable type. + \ingroup pluginBase + */ +class FVariant +{ +//------------------------------------------------------------------------ +public: + enum + { + kEmpty = 0, + kInteger = 1 << 0, + kFloat = 1 << 1, + kString8 = 1 << 2, + kObject = 1 << 3, + kOwner = 1 << 4, + kString16 = 1 << 5 + }; + +//------------------------------------------------------------------------ + // ctors + inline FVariant () { memset (this, 0, sizeof (FVariant)); } + inline FVariant (const FVariant& variant); + + inline FVariant (bool b) : type (kInteger), intValue (b) {} + inline FVariant (uint32 v) : type (kInteger), intValue (v) {} + inline FVariant (int64 v) : type (kInteger), intValue (v) {} + inline FVariant (double v) : type (kFloat), floatValue (v) {} + inline FVariant (const char8* str) : type (kString8), string8 (str) {} + inline FVariant (const char16* str) : type (kString16), string16 (str) {} + inline FVariant (FUnknown* obj, bool owner = false) : type (kObject), object (obj) + { + setOwner (owner); + } + inline ~FVariant () { empty (); } + +//------------------------------------------------------------------------ + inline FVariant& operator= (const FVariant& variant); + + inline void set (bool b) + { + setInt (b); + } + + inline void set (uint32 v) + { + setInt (v); + } + + inline void set (int64 v) + { + setInt (v); + } + + inline void set (double v) + { + setFloat (v); + } + + inline void set (const char8* c) + { + setString8 (c); + } + + inline void set (const char16* c) + { + setString16 (c); + } + + inline void setInt (int64 v) + { + empty (); + type = kInteger; + intValue = v; + } + + inline void setFloat (double v) + { + empty (); + type = kFloat; + floatValue = v; + } + inline void setString8 (const char8* v) + { + empty (); + type = kString8; + string8 = v; + } + inline void setString16 (const char16* v) + { + empty (); + type = kString16; + string16 = v; + } + + inline void setObject (FUnknown* obj) + { + empty (); + type = kObject; + object = obj; + } + + template + inline T get () const; + + inline int64 getInt () const { return (type & kInteger) ? intValue : 0; } + inline double getFloat () const { return (type & kFloat) ? floatValue : 0.; } + inline double getNumber () const + { + return (type & kInteger) ? static_cast (intValue) : (type & kFloat) ? floatValue : + 0.; + } + inline const char8* getString8 () const { return (type & kString8) ? string8 : 0; } + inline const char16* getString16 () const { return (type & kString16) ? string16 : 0; } + + inline FUnknown* getObject () const { return (type & kObject) ? object : 0; } + + inline uint16 getType () const { return static_cast (type & ~(kOwner)); } + inline bool isEmpty () const { return getType () == kEmpty; } + inline bool isOwner () const { return (type & kOwner) != 0; } + inline bool isString () const { return (type & (kString8 | kString16)) != 0; } + inline void setOwner (bool state) + { + if (state) + type |= kOwner; + else + type &= ~kOwner; + } + + void empty (); +//------------------------------------------------------------------------ + uint16 type; + union + { + int64 intValue; + double floatValue; + const char8* string8; + const char16* string16; + FUnknown* object; + }; +}; + +//------------------------------------------------------------------------ +inline bool operator== (const FVariant& v1, const FVariant& v2) +{ +#if SMTG_PLATFORM_64 + return v1.type == v2.type && v1.intValue == v2.intValue; +#else + if (v1.type != v2.type) + return false; + if (v1.type & (FVariant::kString8 | FVariant::kString16 | FVariant::kObject)) + return v1.string8 == v2.string8; // pointer type comparisons + return v1.intValue == v2.intValue; // intValue & double comparison + +#endif +} + +template <> +inline bool FVariant::get () const +{ + return getInt () != 0; +} + +template <> +inline uint32 FVariant::get () const +{ + return static_cast (getInt ()); +} + +template <> +inline int32 FVariant::get () const +{ + return static_cast (getInt ()); +} + +template <> +inline int64 FVariant::get () const +{ + return static_cast (getInt ()); +} + +template <> +inline float FVariant::get () const +{ + return static_cast (getFloat ()); +} + +template <> +inline double FVariant::get () const +{ + return getFloat (); +} + +template <> +inline const char8* FVariant::get () const +{ + return getString8 (); +} + +template <> +inline const char16* FVariant::get () const +{ + return getString16 (); +} + +template <> +inline FUnknown* FVariant::get () const +{ + return getObject (); +} + +//------------------------------------------------------------------------ +inline bool operator!= (const FVariant& v1, const FVariant& v2) { return !(v1 == v2); } + +//------------------------------------------------------------------------ +inline FVariant::FVariant (const FVariant& variant) : type (kEmpty) { *this = variant; } + +//------------------------------------------------------------------------ +inline void FVariant::empty () +{ + if (type & kOwner) + { + if ((type & kString8) && string8) + delete[] string8; + else if ((type & kString16) && string16) + delete[] string16; + + else if ((type & kObject) && object) + object->release (); + } + memset (this, 0, sizeof (FVariant)); +} + +//------------------------------------------------------------------------ +inline FVariant& FVariant::operator= (const FVariant& variant) +{ + empty (); + + type = variant.type; + + if ((type & kString8) && variant.string8) + { + string8 = new char8[strlen (variant.string8) + 1]; + strcpy (const_cast (string8), variant.string8); + type |= kOwner; + } + else if ((type & kString16) && variant.string16) + { + int32 len = strlen16 (variant.string16); + string16 = new char16[len + 1]; + char16* tmp = const_cast (string16); + memcpy (tmp, variant.string16, len * sizeof (char16)); + tmp[len] = 0; + type |= kOwner; + } + else if ((type & kObject) && variant.object) + { + object = variant.object; + object->addRef (); + type |= kOwner; + } + else + intValue = variant.intValue; // copy memory + + return *this; +} + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h new file mode 100644 index 00000000..ec6e7a79 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/ibstream.h +// Created by : Steinberg, 01/2004 +// Description : Interface for reading/writing streams +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "funknown.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +/** Base class for streams. +\ingroup pluginBase +- read/write binary data from/to stream +- get/set stream read-write position (read and write position is the same) +*/ +//------------------------------------------------------------------------ + +class IBStream: public FUnknown +{ +public: + enum IStreamSeekMode + { + kIBSeekSet = 0, ///< set absolute seek position + kIBSeekCur, ///< set seek position relative to current position + kIBSeekEnd ///< set seek position relative to stream end + }; + +//------------------------------------------------------------------------ + /** Reads binary data from stream. + \param buffer : destination buffer + \param numBytes : amount of bytes to be read + \param numBytesRead : result - how many bytes have been read from stream (set to 0 if this is of no interest) */ + virtual tresult PLUGIN_API read (void* buffer, int32 numBytes, int32* numBytesRead = 0) = 0; + + /** Writes binary data to stream. + \param buffer : source buffer + \param numBytes : amount of bytes to write + \param numBytesWritten : result - how many bytes have been written to stream (set to 0 if this is of no interest) */ + virtual tresult PLUGIN_API write (void* buffer, int32 numBytes, int32* numBytesWritten = 0) = 0; + + /** Sets stream read-write position. + \param pos : new stream position (dependent on mode) + \param mode : value of enum IStreamSeekMode + \param result : new seek position (set to 0 if this is of no interest) */ + virtual tresult PLUGIN_API seek (int64 pos, int32 mode, int64* result = 0) = 0; + + /** Gets current stream read-write position. + \param pos : is assigned the current position if function succeeds */ + virtual tresult PLUGIN_API tell (int64* pos) = 0; +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IBStream, 0xC3BF6EA2, 0x30994752, 0x9B6BF990, 0x1EE33E9B) + +//------------------------------------------------------------------------ +/** Stream with a size. +\ingroup pluginBase +[extends IBStream] when stream type supports it (like file and memory stream) */ +//------------------------------------------------------------------------ +class ISizeableStream: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Return the stream size */ + virtual tresult PLUGIN_API getStreamSize (int64& size) = 0; + /** Set the steam size. File streams can only be resized if they are write enabled. */ + virtual tresult PLUGIN_API setStreamSize (int64 size) = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; +DECLARE_CLASS_IID (ISizeableStream, 0x04F9549E, 0xE02F4E6E, 0x87E86A87, 0x47F4E17F) + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h new file mode 100644 index 00000000..70409bc8 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/icloneable.h +// Created by : Steinberg, 11/2007 +// Description : Interface for object copies +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "funknown.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +/** Interface allowing an object to be copied. +[plug & host imp] \n +[released: N4.12] \n +*/ +//------------------------------------------------------------------------ +class ICloneable : public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Create exact copy of the object */ + virtual FUnknown* PLUGIN_API clone () = 0; +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (ICloneable, 0xD45406B9, 0x3A2D4443, 0x9DAD9BA9, 0x85A1454B) + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h new file mode 100644 index 00000000..ba9c7574 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h @@ -0,0 +1,161 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/ipersistent.h +// Created by : Steinberg, 09/2004 +// Description : Plug-In Storage Interfaces +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/funknown.h" + +namespace Steinberg { + +class FVariant; +class IAttributes; +//------------------------------------------------------------------------ +/** Persistent Object Interface. +[plug imp] \n +This interface is used to store/restore attributes of an object. +An IPlugController can implement this interface to handle presets. +The gui-xml for a preset control looks like this: +\code + .... + + .... + +\endcode +The tag data="Preset" tells the host to create a preset controller that handles the +3 values named "preset control", "store preset", and "remove preset". +*/ +//------------------------------------------------------------------------ +class IPersistent: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** The class ID must be a 16 bytes unique id that is used to create the object. + This ID is also used to identify the preset list when used with presets. */ + virtual tresult PLUGIN_API getClassID (char8* uid) = 0; + /** Store all members/data in the passed IAttributes. */ + virtual tresult PLUGIN_API saveAttributes (IAttributes* ) = 0; + /** Restore all members/data from the passed IAttributes. */ + virtual tresult PLUGIN_API loadAttributes (IAttributes* ) = 0; +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IPersistent, 0xBA1A4637, 0x3C9F46D0, 0xA65DBA0E, 0xB85DA829) + + +typedef FIDString IAttrID; +//------------------------------------------------------------------------ +/** Object Data Archive Interface. +[host imp] \n +- store data/objects/binary/subattributes in the archive +- read stored data from the archive + +All data stored to the archive are identified by a string (IAttrID), which must be unique on each +IAttribute level. + +The basic set/get methods make use of the FVariant class defined in 'funknown.h'. +For a more convenient usage of this interface, you should use the functions defined +in namespace PAttributes (public.sdk/source/common/pattributes.h+cpp) !! + +\ingroup frameworkHostClasses +*/ +//------------------------------------------------------------------------ +class IAttributes: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /*! \name Methods to write attributes + ******************************************************************************************************** */ + //@{ + /** Store any data in the archive. It is even possible to store sub-attributes by creating + a new IAttributes instance via the IHostClasses interface and pass it to the parent in the + FVariant. In this case the archive must take the ownership of the newly created object, which + is true for all objects that have been created only for storing. You tell the archive to take + ownership by adding the FVariant::kOwner flag to the FVariant::type member (data.type |= FVariant::kOwner). + When using the PAttributes functions, this is done through a function parameter.*/ + virtual tresult PLUGIN_API set (IAttrID attrID, const FVariant& data) = 0; + + /** Store a list of data in the archive. Please note that the type of data is not mixable! So + you can only store a list of integers or a list of doubles/strings/etc. You can also store a list + of subattributes or other objects that implement the IPersistent interface.*/ + virtual tresult PLUGIN_API queue (IAttrID listID, const FVariant& data) = 0; + + /** Store binary data in the archive. Parameter 'copyBytes' specifies if the passed data should be copied. + The archive cannot take the ownership of binary data. Either it just references a buffer in order + to write it to a file (copyBytes = false) or it copies the data to its own buffers (copyBytes = true). + When binary data should be stored in the default pool for example, you must always copy it!*/ + virtual tresult PLUGIN_API setBinaryData (IAttrID attrID, void* data, uint32 bytes, bool copyBytes) = 0; + //@} + + /*! \name Methods to read attributes + ******************************************************************************************************** */ + //@{ + /** Get data previously stored to the archive. */ + virtual tresult PLUGIN_API get (IAttrID attrID, FVariant& data) = 0; + + /** Get list of data previously stored to the archive. As long as there are queue members the method + will return kResultTrue. When the queue is empty, the methods returns kResultFalse. All lists except from + object lists can be reset which means that the items can be read once again. \see IAttributes::resetQueue */ + virtual tresult PLUGIN_API unqueue (IAttrID listID, FVariant& data) = 0; + + /** Get the amount of items in a queue. */ + virtual int32 PLUGIN_API getQueueItemCount (IAttrID) = 0; + + /** Reset a queue. If you need to restart reading a queue, you have to reset it. You can reset a queue at any time.*/ + virtual tresult PLUGIN_API resetQueue (IAttrID attrID) = 0; + + /** Reset all queues in the archive.*/ + virtual tresult PLUGIN_API resetAllQueues () = 0; + + /** Read binary data from the archive. The data is copied into the passed buffer. The size of that buffer + must fit the size of data stored in the archive which can be queried via IAttributes::getBinaryDataSize */ + virtual tresult PLUGIN_API getBinaryData (IAttrID attrID, void* data, uint32 bytes) = 0; + /** Get the size in bytes of binary data in the archive. */ + virtual uint32 PLUGIN_API getBinaryDataSize (IAttrID attrID) = 0; + //@} + +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IAttributes, 0xFA1E32F9, 0xCA6D46F5, 0xA982F956, 0xB1191B58) + +//------------------------------------------------------------------------ +/** Extended access to Attributes; supports Attribute retrieval via iteration. +[host imp] \n +[released] C7/N6 \n +\ingroup frameworkHostClasses +*/ +//------------------------------------------------------------------------ +class IAttributes2 : public IAttributes +{ +public: + /** Returns the number of existing attributes. */ + virtual int32 PLUGIN_API countAttributes () const = 0; + /** Returns the attribute's ID for the given index. */ + virtual IAttrID PLUGIN_API getAttributeID (int32 index) const = 0; +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IAttributes2, 0x1382126A, 0xFECA4871, 0x97D52A45, 0xB042AE99) + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h new file mode 100644 index 00000000..9223652b --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h @@ -0,0 +1,436 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/ipluginbase.h +// Created by : Steinberg, 01/2004 +// Description : Basic Plug-in Interfaces +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "funknown.h" +#include "fstrdefs.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +/** Basic interface to a Plug-in component. +\ingroup pluginBase +- [plug imp] +- initialize/terminate the Plug-in component + +The host uses this interface to initialize and to terminate the Plug-in component. +The context that is passed to the initialize method contains any interface to the +host that the Plug-in will need to work. These interfaces can vary from category to category. +A list of supported host context interfaces should be included in the documentation +of a specific category. */ +//------------------------------------------------------------------------ +class IPluginBase: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** The host passes a number of interfaces as context to initialize the Plug-in class. + @note Extensive memory allocations etc. should be performed in this method rather than in the class' constructor! + If the method does NOT return kResultOk, the object is released immediately. In this case terminate is not called! */ + virtual tresult PLUGIN_API initialize (FUnknown* context) = 0; + + /** This function is called before the Plug-in is unloaded and can be used for + cleanups. You have to release all references to any host application interfaces. */ + virtual tresult PLUGIN_API terminate () = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IPluginBase, 0x22888DDB, 0x156E45AE, 0x8358B348, 0x08190625) + + +//------------------------------------------------------------------------ +/** Basic Information about the class factory of the Plug-in. +\ingroup pluginBase +*/ +//------------------------------------------------------------------------ +struct PFactoryInfo +{ +//------------------------------------------------------------------------ + enum FactoryFlags + { + kNoFlags = 0, ///< Nothing + kClassesDiscardable = 1 << 0, ///< The number of exported classes can change each time the Module is loaded. If this flag is set, the host does not cache class information. This leads to a longer startup time because the host always has to load the Module to get the current class information. + kLicenseCheck = 1 << 1, ///< Class IDs of components are interpreted as Syncrosoft-License (LICENCE_UID). Loaded in a Steinberg host, the module will not be loaded when the license is not valid + kComponentNonDiscardable = 1 << 3, ///< Component won't be unloaded until process exit + kUnicode = 1 << 4 ///< Components have entirely unicode encoded strings. (True for VST 3 Plug-ins so far) + }; + + enum + { + kURLSize = 256, + kEmailSize = 128, + kNameSize = 64 + }; + +//------------------------------------------------------------------------ + char8 vendor[kNameSize]; ///< e.g. "Steinberg Media Technologies" + char8 url[kURLSize]; ///< e.g. "http://www.steinberg.de" + char8 email[kEmailSize]; ///< e.g. "info@steinberg.de" + int32 flags; ///< (see above) +//------------------------------------------------------------------------ + PFactoryInfo (const char8* _vendor, const char8* _url, const char8* _email, int32 _flags) + { + strncpy8 (vendor, _vendor, kNameSize); + strncpy8 (url, _url, kURLSize); + strncpy8 (email, _email, kEmailSize); + flags = _flags; +#ifdef UNICODE + flags |= kUnicode; +#endif + } +#if SMTG_CPP11 + constexpr PFactoryInfo () : vendor (), url (), email (), flags () {} +#else + PFactoryInfo () { memset (this, 0, sizeof (PFactoryInfo)); } +#endif +}; + +//------------------------------------------------------------------------ +/** Basic Information about a class provided by the Plug-in. +\ingroup pluginBase +*/ +//------------------------------------------------------------------------ +struct PClassInfo +{ +//------------------------------------------------------------------------ + enum ClassCardinality + { + kManyInstances = 0x7FFFFFFF + }; + + enum + { + kCategorySize = 32, + kNameSize = 64 + }; +//------------------------------------------------------------------------ + TUID cid; ///< Class ID 16 Byte class GUID + int32 cardinality; ///< cardinality of the class, set to kManyInstances (see \ref ClassCardinality) + char8 category[kCategorySize]; ///< class category, host uses this to categorize interfaces + char8 name[kNameSize]; ///< class name, visible to the user +//------------------------------------------------------------------------ + + PClassInfo (const TUID _cid, int32 _cardinality, const char8* _category, const char8* _name) + { + memset (this, 0, sizeof (PClassInfo)); + memcpy (cid, _cid, sizeof (TUID)); + if (_category) + strncpy8 (category, _category, kCategorySize); + if (_name) + strncpy8 (name, _name, kNameSize); + cardinality = _cardinality; + } +#if SMTG_CPP11 + constexpr PClassInfo () : cid (), cardinality (), category (), name () {} +#else + PClassInfo () { memset (this, 0, sizeof (PClassInfo)); } +#endif +}; + + +//------------------------------------------------------------------------ +// IPluginFactory interface declaration +//------------------------------------------------------------------------ +/** Class factory that any Plug-in defines for creating class instances. +\ingroup pluginBase +- [plug imp] + +From the host's point of view a Plug-in module is a factory which can create +a certain kind of object(s). The interface IPluginFactory provides methods +to get information about the classes exported by the Plug-in and a +mechanism to create instances of these classes (that usually define the IPluginBase interface). + + An implementation is provided in public.sdk/source/common/pluginfactory.cpp +\see GetPluginFactory +*/ +//------------------------------------------------------------------------ +class IPluginFactory : public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Fill a PFactoryInfo structure with information about the Plug-in vendor. */ + virtual tresult PLUGIN_API getFactoryInfo (PFactoryInfo* info) = 0; + + /** Returns the number of exported classes by this factory. + If you are using the CPluginFactory implementation provided by the SDK, it returns the number of classes you registered with CPluginFactory::registerClass. */ + virtual int32 PLUGIN_API countClasses () = 0; + + /** Fill a PClassInfo structure with information about the class at the specified index. */ + virtual tresult PLUGIN_API getClassInfo (int32 index, PClassInfo* info) = 0; + + /** Create a new class instance. */ + virtual tresult PLUGIN_API createInstance (FIDString cid, FIDString _iid, void** obj) = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IPluginFactory, 0x7A4D811C, 0x52114A1F, 0xAED9D2EE, 0x0B43BF9F) + + +//------------------------------------------------------------------------ +/** Version 2 of Basic Information about a class provided by the Plug-in. +\ingroup pluginBase +*/ +//------------------------------------------------------------------------ +struct PClassInfo2 +{ +//------------------------------------------------------------------------ + TUID cid; ///< Class ID 16 Byte class GUID + int32 cardinality; ///< cardinality of the class, set to kManyInstances (see \ref ClassCardinality) + char8 category[PClassInfo::kCategorySize]; ///< class category, host uses this to categorize interfaces + char8 name[PClassInfo::kNameSize]; ///< class name, visible to the user + + enum { + kVendorSize = 64, + kVersionSize = 64, + kSubCategoriesSize = 128 + }; + + uint32 classFlags; ///< flags used for a specific category, must be defined where category is defined + char8 subCategories[kSubCategoriesSize]; ///< module specific subcategories, can be more than one, logically added by the \c OR operator + char8 vendor[kVendorSize]; ///< overwrite vendor information from factory info + char8 version[kVersionSize]; ///< Version string (e.g. "1.0.0.512" with Major.Minor.Subversion.Build) + char8 sdkVersion[kVersionSize]; ///< SDK version used to build this class (e.g. "VST 3.0") + +//------------------------------------------------------------------------ + + PClassInfo2 (const TUID _cid, int32 _cardinality, const char8* _category, const char8* _name, + int32 _classFlags, const char8* _subCategories, const char8* _vendor, const char8* _version, + const char8* _sdkVersion) + { + memset (this, 0, sizeof (PClassInfo2)); + memcpy (cid, _cid, sizeof (TUID)); + cardinality = _cardinality; + if (_category) + strncpy8 (category, _category, PClassInfo::kCategorySize); + if (_name) + strncpy8 (name, _name, PClassInfo::kNameSize); + classFlags = static_cast (_classFlags); + if (_subCategories) + strncpy8 (subCategories, _subCategories, kSubCategoriesSize); + if (_vendor) + strncpy8 (vendor, _vendor, kVendorSize); + if (_version) + strncpy8 (version, _version, kVersionSize); + if (_sdkVersion) + strncpy8 (sdkVersion, _sdkVersion, kVersionSize); + } +#if SMTG_CPP11 + constexpr PClassInfo2 () + : cid () + , cardinality () + , category () + , name () + , classFlags () + , subCategories () + , vendor () + , version () + , sdkVersion () + { + } +#else + PClassInfo2 () { memset (this, 0, sizeof (PClassInfo2)); } +#endif +}; + +//------------------------------------------------------------------------ +// IPluginFactory2 interface declaration +//------------------------------------------------------------------------ +/** Version 2 of class factory supporting PClassInfo2. +\ingroup pluginBase +\copydoc IPluginFactory +*/ +//------------------------------------------------------------------------ +class IPluginFactory2 : public IPluginFactory +{ +public: +//------------------------------------------------------------------------ + /** Returns the class info (version 2) for a given index. */ + virtual tresult PLUGIN_API getClassInfo2 (int32 index, PClassInfo2* info) = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; +DECLARE_CLASS_IID (IPluginFactory2, 0x0007B650, 0xF24B4C0B, 0xA464EDB9, 0xF00B2ABB) + + +//------------------------------------------------------------------------ +/** Unicode Version of Basic Information about a class provided by the Plug-in */ +//------------------------------------------------------------------------ +struct PClassInfoW +{ +//------------------------------------------------------------------------ + TUID cid; ///< see \ref PClassInfo + int32 cardinality; ///< see \ref PClassInfo + char8 category[PClassInfo::kCategorySize]; ///< see \ref PClassInfo + char16 name[PClassInfo::kNameSize]; ///< see \ref PClassInfo + + enum { + kVendorSize = 64, + kVersionSize = 64, + kSubCategoriesSize = 128 + }; + + uint32 classFlags; ///< flags used for a specific category, must be defined where category is defined + char8 subCategories[kSubCategoriesSize];///< module specific subcategories, can be more than one, logically added by the \c OR operator + char16 vendor[kVendorSize]; ///< overwrite vendor information from factory info + char16 version[kVersionSize]; ///< Version string (e.g. "1.0.0.512" with Major.Minor.Subversion.Build) + char16 sdkVersion[kVersionSize]; ///< SDK version used to build this class (e.g. "VST 3.0") + +//------------------------------------------------------------------------ + PClassInfoW (const TUID _cid, int32 _cardinality, const char8* _category, const char16* _name, + int32 _classFlags, const char8* _subCategories, const char16* _vendor, const char16* _version, + const char16* _sdkVersion) + { + memset (this, 0, sizeof (PClassInfoW)); + memcpy (cid, _cid, sizeof (TUID)); + cardinality = _cardinality; + if (_category) + strncpy8 (category, _category, PClassInfo::kCategorySize); + if (_name) + strncpy16 (name, _name, PClassInfo::kNameSize); + classFlags = static_cast (_classFlags); + if (_subCategories) + strncpy8 (subCategories, _subCategories, kSubCategoriesSize); + if (_vendor) + strncpy16 (vendor, _vendor, kVendorSize); + if (_version) + strncpy16 (version, _version, kVersionSize); + if (_sdkVersion) + strncpy16 (sdkVersion, _sdkVersion, kVersionSize); + } +#if SMTG_CPP11 + constexpr PClassInfoW () + : cid () + , cardinality () + , category () + , name () + , classFlags () + , subCategories () + , vendor () + , version () + , sdkVersion () + { + } +#else + PClassInfoW () { memset (this, 0, sizeof (PClassInfoW)); } +#endif + + void fromAscii (const PClassInfo2& ci2) + { + memcpy (cid, ci2.cid, sizeof (TUID)); + cardinality = ci2.cardinality; + strncpy8 (category, ci2.category, PClassInfo::kCategorySize); + str8ToStr16 (name, ci2.name, PClassInfo::kNameSize); + classFlags = ci2.classFlags; + strncpy8 (subCategories, ci2.subCategories, kSubCategoriesSize); + + str8ToStr16 (vendor, ci2.vendor, kVendorSize); + str8ToStr16 (version, ci2.version, kVersionSize); + str8ToStr16 (sdkVersion, ci2.sdkVersion, kVersionSize); + } +}; + + +//------------------------------------------------------------------------ +// IPluginFactory3 interface declaration +//------------------------------------------------------------------------ +/** Version 3 of class factory supporting PClassInfoW. +\ingroup pluginBase +\copydoc IPluginFactory +*/ +//------------------------------------------------------------------------ +class IPluginFactory3 : public IPluginFactory2 +{ +public: +//------------------------------------------------------------------------ + /** Returns the unicode class info for a given index. */ + virtual tresult PLUGIN_API getClassInfoUnicode (int32 index, PClassInfoW* info) = 0; + + /** Receives information about host*/ + virtual tresult PLUGIN_API setHostContext (FUnknown* context) = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; +DECLARE_CLASS_IID (IPluginFactory3, 0x4555A2AB, 0xC1234E57, 0x9B122910, 0x36878931) +//------------------------------------------------------------------------ +} // namespace Steinberg + + +//------------------------------------------------------------------------ +#define LICENCE_UID(l1, l2, l3, l4) \ +{ \ + (int8)((l1 & 0xFF000000) >> 24), (int8)((l1 & 0x00FF0000) >> 16), \ + (int8)((l1 & 0x0000FF00) >> 8), (int8)((l1 & 0x000000FF) ), \ + (int8)((l2 & 0xFF000000) >> 24), (int8)((l2 & 0x00FF0000) >> 16), \ + (int8)((l2 & 0x0000FF00) >> 8), (int8)((l2 & 0x000000FF) ), \ + (int8)((l3 & 0xFF000000) >> 24), (int8)((l3 & 0x00FF0000) >> 16), \ + (int8)((l3 & 0x0000FF00) >> 8), (int8)((l3 & 0x000000FF) ), \ + (int8)((l4 & 0xFF000000) >> 24), (int8)((l4 & 0x00FF0000) >> 16), \ + (int8)((l4 & 0x0000FF00) >> 8), (int8)((l4 & 0x000000FF) ) \ +} + + +//------------------------------------------------------------------------ +// GetPluginFactory +//------------------------------------------------------------------------ +/** Plug-in entry point. +\ingroup pluginBase +Any Plug-in must define and export this function. \n +A typical implementation of GetPluginFactory looks like this + \code + IPluginFactory* PLUGIN_API GetPluginFactory () + { + if (!gPluginFactory) + { + static PFactoryInfo factoryInfo = + { + "My Company Name", + "http://www.mywebpage.com", + "mailto:myemail@address.com", + PFactoryInfo::kNoFlags + }; + + gPluginFactory = new CPluginFactory (factoryInfo); + + static PClassInfo componentClass = + { + INLINE_UID (0x00000000, 0x00000000, 0x00000000, 0x00000000), // replace by a valid uid + 1, + "Service", // category + "Name" + }; + + gPluginFactory->registerClass (&componentClass, MyComponentClass::newInstance); + } + else + gPluginFactory->addRef (); + + return gPluginFactory; + } + \endcode +\see \ref loadPlugin +*/ +//------------------------------------------------------------------------ +extern "C" +{ + Steinberg::IPluginFactory* PLUGIN_API GetPluginFactory (); + typedef Steinberg::IPluginFactory* (PLUGIN_API *GetFactoryProc) (); +} diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h new file mode 100644 index 00000000..0e1d66de --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/istringresult.h +// Created by : Steinberg, 01/2005 +// Description : Strings Interface +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/funknown.h" + +namespace Steinberg { + +//------------------------------------------------------------------------ +/** Interface to return an ascii string of variable size. + In order to manage memory allocation and deallocation properly, + this interface is used to transfer a string as result parameter of + a method requires a string of unknown size. +[host imp] or [plug imp] \n +[released: SX 4] */ +//------------------------------------------------------------------------ +class IStringResult : public FUnknown +{ +public: +//------------------------------------------------------------------------ + virtual void PLUGIN_API setText (const char8* text) = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IStringResult, 0x550798BC, 0x872049DB, 0x84920A15, 0x3B50B7A8) + + +//------------------------------------------------------------------------ +/** Interface to a string of variable size and encoding. +[host imp] or [plug imp] \n +[released: ] */ +//------------------------------------------------------------------------ +class IString : public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Assign ASCII string */ + virtual void PLUGIN_API setText8 (const char8* text) = 0; + /** Assign unicode string */ + virtual void PLUGIN_API setText16 (const char16* text) = 0; + + /** Return ASCII string. If the string is unicode so far, it will be converted. + So you need to be careful, because the conversion can result in data loss. + It is save though to call getText8 if isWideString() returns false */ + virtual const char8* PLUGIN_API getText8 () = 0; + /** Return unicode string. If the string is ASCII so far, it will be converted. */ + virtual const char16* PLUGIN_API getText16 () = 0; + + /** !Do not use this method! Early implementations take the given pointer as + internal string and this will cause problems because 'free' will be used to delete the passed memory. + Later implementations will redirect 'take' to setText8 and setText16 */ + virtual void PLUGIN_API take (void* s, bool isWide) = 0; + + /** Returns true if the string is in unicode format, returns false if the string is ASCII */ + virtual bool PLUGIN_API isWideString () const = 0; + +//------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IString, 0xF99DB7A3, 0x0FC14821, 0x800B0CF9, 0x8E348EDF) + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h new file mode 100644 index 00000000..460413a1 --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h @@ -0,0 +1,100 @@ +//------------------------------------------------------------------------ +// Project : Steinberg Module Architecture SDK +// +// Category : Basic Host Service Interfaces +// Filename : pluginterfaces/base/iupdatehandler.h +// Created by : Steinberg, 01/2004 +// Description : Update handling +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/funknown.h" + +namespace Steinberg { + +class IDependent; + +//------------------------------------------------------------------------ +/** Host implements dependency handling for plugins. +[host imp] \n +[get this interface from IHostClasses] \n +[released N3.1] \n + +- Install/Remove change notifications +- Trigger updates when an object has changed + +Can be used between host-objects and the Plug-In or +inside the Plug-In to handle internal updates! + +\see IDependent +\ingroup frameworkHostClasses +*/ +//------------------------------------------------------------------------ +class IUpdateHandler: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Install update notification for given object. It is essential to + remove all dependencies again using 'removeDependent'! Dependencies + are not removed automatically when the 'object' is released! + \param object : interface to object that sends change notifications + \param dependent : interface through which the update is passed */ + virtual tresult PLUGIN_API addDependent (FUnknown* object, IDependent* dependent) = 0; + + /** Remove a previously installed dependency.*/ + virtual tresult PLUGIN_API removeDependent (FUnknown* object, IDependent* dependent) = 0; + + /** Inform all dependents, that object has changed. + \param object is the object that has changed + \param message is a value of enum IDependent::ChangeMessage, usually IDependent::kChanged - can be + a private message as well (only known to sender and dependent)*/ + virtual tresult PLUGIN_API triggerUpdates (FUnknown* object, int32 message) = 0; + + /** Same as triggerUpdates, but delivered in idle (usefull to collect updates).*/ + virtual tresult PLUGIN_API deferUpdates (FUnknown* object, int32 message) = 0; + static const FUID iid; +}; + +DECLARE_CLASS_IID (IUpdateHandler, 0xF5246D56, 0x86544d60, 0xB026AFB5, 0x7B697B37) + +//------------------------------------------------------------------------ +/** A dependent will get notified about changes of a model. +[plug imp] +- notify changes of a model + +\see IUpdateHandler +\ingroup frameworkHostClasses +*/ +//------------------------------------------------------------------------ +class IDependent: public FUnknown +{ +public: +//------------------------------------------------------------------------ + /** Inform the dependent, that the passed FUnknown has changed. */ + virtual void PLUGIN_API update (FUnknown* changedUnknown, int32 message) = 0; + + enum ChangeMessage + { + kWillChange, + kChanged, + kDestroyed, + kWillDestroy, + + kStdChangeMessageLast = kWillDestroy + }; + //------------------------------------------------------------------------ + static const FUID iid; +}; + +DECLARE_CLASS_IID (IDependent, 0xF52B7AAE, 0xDE72416d, 0x8AF18ACE, 0x9DD7BD5E) + +//------------------------------------------------------------------------ +} // namespace Steinberg diff --git a/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h new file mode 100644 index 00000000..4dbc27ad --- /dev/null +++ b/modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h @@ -0,0 +1,370 @@ +//----------------------------------------------------------------------------- +// Project : SDK Core +// +// Category : SDK Core Interfaces +// Filename : pluginterfaces/base/smartpointer.h +// Created by : Steinberg, 01/2004 +// Description : Basic Interface +// +//----------------------------------------------------------------------------- +// This file is part of a Steinberg SDK. It is subject to the license terms +// in the LICENSE file found in the top-level directory of this distribution +// and at www.steinberg.net/sdklicenses. +// No part of the SDK, including this file, may be copied, modified, propagated, +// or distributed except according to the terms contained in the LICENSE file. +//----------------------------------------------------------------------------- + +#pragma once + +#include "pluginterfaces/base/fplatform.h" +#if SMTG_CPP11_STDLIBSUPPORT +#include +#endif + +//------------------------------------------------------------------------ +namespace Steinberg { + +//------------------------------------------------------------------------ +// IPtr +//------------------------------------------------------------------------ +/** IPtr - Smart pointer template class. + \ingroup pluginBase + + - can be used as an I* pointer + - handles refCount of the interface + - Usage example: + \code + IPtr path (sharedPath); + if (path) + path->ascend (); + \endcode + */ +//------------------------------------------------------------------------ +template +class IPtr +{ +public: +//------------------------------------------------------------------------ + inline IPtr (I* ptr, bool addRef = true); + inline IPtr (const IPtr&); + + template + inline IPtr (const IPtr& other) : ptr (other.get ()) + { + if (ptr) + ptr->addRef (); + } + + inline IPtr (); + inline ~IPtr (); + + inline I* operator= (I* ptr); + + inline IPtr& operator= (const IPtr& other); + + template + inline IPtr& operator= (const IPtr& other) + { + operator= (other.get ()); + return *this; + } + + inline operator I* () const { return ptr; } // act as I* + inline I* operator-> () const { return ptr; } // act as I* + + inline I* get () const { return ptr; } + +#if SMTG_CPP11_STDLIBSUPPORT + inline IPtr (IPtr&& movePtr) SMTG_NOEXCEPT : ptr (movePtr.take ()) { } + + template + inline IPtr (IPtr&& movePtr) SMTG_NOEXCEPT : ptr (movePtr.take ()) { } + + inline IPtr& operator= (IPtr&& movePtr) SMTG_NOEXCEPT + { + if (ptr) + ptr->release (); + + ptr = movePtr.take (); + return *this; + } + + inline void reset (I* obj = nullptr) + { + if (ptr) + ptr->release(); + ptr = obj; + } + + I* take () SMTG_NOEXCEPT + { + I* out = ptr; + ptr = nullptr; + return out; + } + +#endif +//------------------------------------------------------------------------ +protected: + I* ptr; +}; + +//------------------------------------------------------------------------ +template +inline IPtr::IPtr (I* _ptr, bool addRef) : ptr (_ptr) +{ + if (ptr && addRef) + ptr->addRef (); +} + +//------------------------------------------------------------------------ +template +inline IPtr::IPtr (const IPtr& other) : ptr (other.ptr) +{ + if (ptr) + ptr->addRef (); +} + +//------------------------------------------------------------------------ +template +inline IPtr::IPtr () : ptr (0) +{ +} + +//------------------------------------------------------------------------ +template +inline IPtr::~IPtr () +{ + if (ptr) + ptr->release (); +} + +//------------------------------------------------------------------------ +template +inline I* IPtr::operator= (I* _ptr) +{ + if (_ptr != ptr) + { + if (ptr) + ptr->release (); + ptr = _ptr; + if (ptr) + ptr->addRef (); + } + return ptr; +} + +//------------------------------------------------------------------------ +template +inline IPtr& IPtr::operator= (const IPtr& _ptr) +{ + operator= (_ptr.ptr); + return *this; +} + +//------------------------------------------------------------------------ +/** OPtr - "owning" smart pointer used for newly created FObjects. + \ingroup pluginBase + + FUnknown implementations are supposed to have a refCount of 1 right after creation. + So using an IPtr on newly created objects would lead to a leak. + Instead the OPtr can be used in this case. \n + Example: + \code + OPtr path = FHostCreate (IPath, hostClasses); + // no release is needed... + \endcode + The assignment operator takes ownership of a new object and releases the old. + So its safe to write: + \code + OPtr path = FHostCreate (IPath, hostClasses); + path = FHostCreate (IPath, hostClasses); + path = 0; + \endcode + This is the difference to using an IPtr with addRef=false. + \code + // DONT DO THIS: + IPtr path (FHostCreate (IPath, hostClasses), false); + path = FHostCreate (IPath, hostClasses); + path = 0; + \endcode + This will lead to a leak! + */ +//------------------------------------------------------------------------ +template +class OPtr : public IPtr +{ +public: +//------------------------------------------------------------------------ + inline OPtr (I* p) : IPtr (p, false) {} + inline OPtr (const IPtr& p) : IPtr (p) {} + inline OPtr (const OPtr& p) : IPtr (p) {} + inline OPtr () {} + inline I* operator= (I* _ptr) + { + if (_ptr != this->ptr) + { + if (this->ptr) + this->ptr->release (); + this->ptr = _ptr; + } + return this->ptr; + } +}; + +//------------------------------------------------------------------------ +/** Assigning newly created object to an IPtr. + Example: + \code + IPtr path = owned (FHostCreate (IPath, hostClasses)); + \endcode + which is a slightly shorter form of writing: + \code + IPtr path = OPtr (FHostCreate (IPath, hostClasses)); + \endcode + */ +template +IPtr owned (I* p) +{ + return IPtr (p, false); +} + +/** Assigning shared object to an IPtr. + Example: + \code + IPtr path = shared (iface.getXY ()); + \endcode + */ +template +IPtr shared (I* p) +{ + return IPtr (p, true); +} + +#if SMTG_CPP11_STDLIBSUPPORT +//------------------------------------------------------------------------ +// Ownership functionality +//------------------------------------------------------------------------ +namespace SKI { +namespace Detail { +struct Adopt; +} // Detail + +/** Strong typedef for shared reference counted objects. + * Use SKI::adopt to unwrap the provided object. + * @tparam T Referenced counted type. + */ +template +class Shared +{ + friend struct Detail::Adopt; + T* obj = nullptr; +}; + +/** Strong typedef for transferring the ownership of reference counted objects. + * Use SKI::adopt to unwrap the provided object. + * After calling adopt the reference in this object is null. + * @tparam T Referenced counted type. + */ +template +class Owned +{ + friend struct Detail::Adopt; + T* obj = nullptr; +}; + +/** Strong typedef for using reference counted objects. + * Use SKI::adopt to unwrap the provided object. + * After calling adopt the reference in this object is null. + * @tparam T Referenced counted type. + */ +template +class Used +{ + friend struct Detail::Adopt; + T* obj = nullptr; +}; + +namespace Detail { + +struct Adopt +{ + template + static IPtr adopt (Shared& ref) + { + using Steinberg::shared; + return shared (ref.obj); + } + + template + static IPtr adopt (Owned& ref) + { + using Steinberg::owned; + IPtr out = owned (ref.obj); + ref.obj = nullptr; + return out; + } + + template + static T* adopt (Used& ref) + { + return ref.obj; + } + + template