diff --git a/extras/audio plugins/How to use this framework.txt b/extras/audio plugins/How to use this framework.txt
index 9cde1475a6..bcf1c4c5ba 100644
--- a/extras/audio plugins/How to use this framework.txt
+++ b/extras/audio plugins/How to use this framework.txt
@@ -1,272 +1,289 @@
-
- The Juce Audio Plugin project!
- ==============================
-
-(c) 2005-6 by Raw Material Software, visit www.rawmaterialsoftware.com for more info.
-
-The idea behind this is to create a framework which lets you write a platform-independent
-audio plugin using Juce, which can be easily rebuilt to target multiple different plugin
-formats and platforms.
-
-
-How does it work?
-=================
-
-There's a generic audio plugin base class defined in juce_AudioFilterBase.h, and to write
-your plugin, you just need to create a sub-class of this.
-
-You can then compile your class against one or more of the platform-specific projects,
-so that it gets wrapped as a VST, AudioUnit, RTAS, etc. - hopefully without changing any
-of your code at all, or having to go anywhere near any platform-specific stuff.
-
-
-How do I use it?
-================
-
-Under the 'wrapper/formats' directory are a bunch of different sets of files containing the
-wrapper code for each different plugin type.
-
-There is also a 'demo' folder - this shows an example plugin which can be built in all
-the different formats. The demo folder contains:
-
-- a 'src' directory containing the common, platform-independent code that defines this
- plugin's behaviour
-- a 'build' directory which contains projects for building the demo for each different
- platform and format.
-
-Have a look at the demo classes to see how it works, and then to create a real plugin,
-you'll need to replace the demo files with your own code.
-
-I've tried to add helpful comments where you might run across common compile errors, to
-help describe what you might be doing wrong, as getting a build set-up for some of these
-formats can be a bit of a pain. Please let me know if you find there's anything missing
-from these instructions or anything I could change to help smooth the build process along
-a bit.
-
-I'd recommend NOT putting your own plugin code inside the JuceAudioPlugin directory - it's
-much neater to keep it somewhere separate and to alter the projects to point to your
-files instead of the demo ones. That way when new versions of this library come out, it'll
-make it easier to update to the latest code.
-
-For details about how to create your own projects for the various formats, see below.
-
-
-Sending feedback:
-=================
-
-- if you spot a bug or some kind of host incompatibility, tell me, of course!
-
-- the plan is that no-one should need to change any of the platform-specific code, or the base-class
- code.. So if you find that your plugin can't do something you want it to, then rather than just
- jumping in and hacking things to get the functionality you need, why not contact me and we'll
- figure out a nice generic way of doing it. That way it'll benefit all the users, and you won't
- have to hack it all over again when the next version comes out.
-
-- if you're really determined to rewrite large chunks of my code and send it to me to look at,
- *please* don't reformat anything in your own preferred style, or change the format of the
- comments, etc.. It's bad enough looking at people's code and trying to figure out why they've
- done something, but if everything's moved around I can't even diff it..
-
-
-What are the licensing issues?
-==============================
-
-Juce is released under the GPL (Gnu Public License) - this means that you're free to use
-and redistribute it as long as your products are also released under the GPL. Basically
-this means that if you use it, you also have to give away your source code.
-If you want to release a closed-source application, you can buy a commercial license
-that lets you avoid this restriction - see http://www.rawmaterialsoftware.com/juce for more info,
-or see the comments at the top of all the Juce source files.
-
-If you're building the VST projects or releasing a VST, you'll need have a look at Steinberg's
-developer site to see what licensing rules apply these days. Their website's at
-http://www.steinberg.net
-
-If you're building an RTAS then you'll need to sign Digidesign's developer license to get
-their SDK. Visit http://www.digidesign.com for more info.
-
-
------------------------------------------------------------------------------------------------------
-
- How to create your own VST project
- ==================================
-
-- Visit http://www.steinberg.net and jump through whatever hoops are necessary to download
- and install the VST SDK.
-- Make sure your include path contains an entry for the "vstsdk2.4" folder containing
- the SDK.
-- First try loading the VST demo project in JuceAudioPlugin/demo/build. Hopefully this
- should build correctly.
-- To create your own project for a VST, the simplest way is to take a copy of
- the demo project and go through it carefully, changing any relevent settings to reflect
- your own project.
-
-N.B. On the Mac, there's an important point to note about exported symbols.. When XCode builds
- the plugin, I've had unpredictable results when trying to stop it from exporting all of
- the internal functions as public symbols. There are some flags that are supposed to turn this
- off, but sometimes they don't seem to have any effect, and using an explicit exports file also
- seems a bit hit-and-miss. (If anyone knows better and can get this working, please let me know!)
- Anyway, as well as being wasteful and showing everyone what's inside your plugin, leaving all
- the symbols in there will cause fatal crashes when used with Tracktion, or alongside any other
- Juce-based plugins. A way of making sure your plugin is stripped is to use the command
- "strip -x -S YourPlugin.vst/Contents/MacOS/YourPlugin" after bulding it, which removes the
- unnecessary symbols (although in my experience this also doesn't seem to work all the time,
- so it's a good idea to check it using the unix "nm" command).
-
-
------------------------------------------------------------------------------------------------------
-
- How to create your own AudioUnit project
- ========================================
-
-- If you've got XCode installed, the demo project in JuceAudioPlugin/demo/build/AudioUnit
- should just build. You may need to tweak a few paths to make sure it can find the
- juce.h include file and juce library.
-- When copying this project to make your own, a good plan is to open up a view of the settings
- for the project and target, viewing the "customised settings" to see those values that
- have to be deliberately set for the plugin to work.
-
-N.B. For the Mac there can be an issue with exported symbols - see the note about this for
- VSTs, as the same solution can be used for AudioUnits.
-
-
------------------------------------------------------------------------------------------------------
-
- How to create your own RTAS project
- ===================================
-
-
-RTAS is a bit more of a pain to build than VSTs or AUs. To begin with:
-
-- Contact Digidesign, ask to become a Digidesign Development Partner, sign the relevent
- agreements and NDAs.
-- From the Digidesign website, download their latest Plug-In SDK
-- Install the SDK and build some of the demo plugins to make sure it all works.
-
-Compiling the juce demo RTAS on the PC:
-=======================================
-
-- Using the Digidesign demo projects in the SDK, make sure you've built debug and release
- versions of these static libraries: DAE.lib, DigiExt.lib, DSI.lib, PlugInLib.lib.
-
-- In Visual Studio, add all of this lot to your include path:
-
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\EffectClasses
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses\Interfaces
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Utilities
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\RTASP_Adapt
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\CoreClasses
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Controls
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Meters
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ViewClasses
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\DSPClasses
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Interfaces
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\common
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\common\Platform
- c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\SignalProcessing\Public
- c:\yourdirectory\PT_73_SDK\AlturaPorts\SADriver\Interfaces
- c:\yourdirectory\PT_73_SDK\AlturaPorts\DigiPublic\Interfaces
- c:\yourdirectory\PT_73_SDK\AlturaPorts\Fic\Interfaces\DAEClient
- c:\yourdirectory\PT_73_SDK\AlturaPorts\NewFileLibs\Cmn
- c:\yourdirectory\PT_73_SDK\AlturaPorts\NewFileLibs\DOA
- c:\yourdirectory\PT_73_SDK\AlturaPorts\AlturaSource\PPC_H
- c:\yourdirectory\PT_73_SDK\AlturaPorts\AlturaSource\AppSupport
- c:\yourdirectory\PT_73_SDK\AvidCode\AVX2sdk\AVX\avx2\avx2sdk\inc
-
-- The Visual Studio juce_RTAS project contains a folder called "libs", with "debug" and
- "release" subdirectories - these should contain links to the Digidesign lib files
- DAE.lib, DigiExt.lib, DSI.lib, PlugInLib.lib - you'll need to update these links to
- point to the correct locations according to where you've installed the SDK.
-
-- Fingers crossed, this should now compile..
-
-- IMPORTANT NOTE! If you're using MSVC2005 to build your plugin, the users will need to
- have the Microsoft VC8 Runtime installed on their machines, otherwise the DLL will
- silently fail to load. You should probably add the runtime to your plugin's installer,
- and you can get a copy of it here:
- http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=en
-
-
-Creating a project for your own RTAS on the PC:
-=================================================
-
-- start a new empty project in Developer Studio, as a "Windows DLL"
-- in the source tree, create the same folders and add to them the same list of
- cpp files that are in the demo project's "wrapper code" folder.
-- select all the CPP files in the "wrapper code/RTAS specific" folder, and also
- the juce_RTASWrapper.cpp file, (but NOT the juce_RTASUtilities.cpp file or any
- other files!), and in their properties dialog, under C++/Advanced, change their
- "Calling convention" setting to "__stdcall".
- Remember to do this for both your debug and release builds!
-- in your project's C++/General settings, add an additional include path so that
- it will be able find your JucePluginCharacteristics.h file.
-- Under "linker settings", change the output file name to have the suffix ".dpm"
- instead of ".dll"
-- Under "linker settings/input/ignore specific library", you'll probably need to
- add "libcmtd.lib" for debug, and "libcmt.lib" for release.
-- Under "linkey settings", set the Module definition file to be
- JuceAudioPlugin/wrapper/formats/RTAS/juce_RTAS_dlldefs.def
-- You might want to change the output directory to "\Program Files\Common Files\Digidesign\DAE\Plug-Ins\"
- if you want the built plugin to go directly into the PT plugins folder
-- Add a custom build step to copy the dummy resource file "JuceAudioPlugin\wrapper\formats\RTAS\DefaultResourceFile"
- to your target directory, renaming to to be the same as your .dpm file, but with
- ".rsr" on the end of the name. The demo project does this with the command
- "copy /Y ..\..\..\wrapper\formats\RTAS\DefaultResourceFile "$(TargetPath)".rsr"
-- Under the "general" properties, make sure that the character set is not unicode, as
- this seems to stop some of the Digi code building. Hopefully this will be fixed
- in future SDK releases
-- add a "libs" folder to your project, and copy the set of libraries from the
- equivalent folder in the demo project. Make sure you enable the debug/release
- versions of these libraries appropriately.
-
-There are quite a few things that you need to get right for an RTAS to compile correctly -
-the Digi SDK documentation has a full list of tips on setting up a project, but the
-main ones to note are:
-
-- the SDK uses __stdcall as its calling convention, but JUCE uses __cdecl. I've got
- around this by leaving the project's default setting as __cdecl, but changing it
- specifically for those files that include or build files from the SDK - i.e. for
- most of the files in the "wrapper code/RTAS specific" folder of the demo project.
-- the default struct alignment for the SDK is 2 bytes, wheras the default as used in
- juce is 8 bytes. Again, I've left this at the default setting, and have explicitly
- changed it with pragmas when including/building SDK files.
-- even though it's not used, each xx.dpm file needs to have a corresponding
- xx.dpm.rsr file next to it, or PT will refuse to load it. The demo project currently
- does this by using a custom build step to copy and rename a small dummy rsr file called
- JuceAudioPlugin/wrapper/formats/RTAS/DefaultResourceFile
-
-
-Compiling the juce demo RTAS on the Mac:
-========================================
-
-- After installing the Digidesign SDK, make sure you've run the config_SDK_for_Mac command in
- its root directory. This sets up some of the tools that it needs.
-- Load the juce_RTASDemo.xcodeproject and look through the project in XCode to find
- all the broken links to Digidesign files. You'll need to repair these to make them
- point to the location of the SDK files on your machine.
-- Open the project's settings, and look for the "MacBag" setting - this defines the location
- of the MacBag folder in the Digidesign SDK. You'll need to update this to point to
- its location on your machine.
-- It should all compile now, fingers crossed..
-
-- Building a universal binary on the Mac: for this, you'll need to recompile the Digidesign
- PluginLibrary project as a universal binary. The easiest way to do this is to add the
- following lines to the top of the CommonDebugSettings.xcconfig and CommonReleaseSettings.xcconfig
- files (these are found deep in the PT SDK tree somewhere, and are used for config by both the
- Digi projects and the juce plugin projects):
- ARCHS = ppc i386
- SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk
- MACOSX_DEPLOYMENT_TARGET_ppc = 10.3
-
-
-Creating a new project for your own RTAS plugin on the Mac:
-===========================================================
-
-It's probably easiest to take a copy of the juce demo project and go through it changing
-its settings to those of your plugin.
-
-If you decide to start from scratch, use the juce demo project as a reference to see
-what needs to go in there. Looking at its project info for "customised settings" is a good
-way to see what values have been set deliberately.
-
+
+ The Juce Polymorphic Plugin Project!
+ ====================================
+
+(c) 2008 by Raw Material Software, visit www.rawmaterialsoftware.com for more info.
+
+-----------------------------------------------------------------------------------------------------
+
+The purpose of this framework is to make is simple to write an audio plugin in a generic
+way, which can then be compiled as a VST, AudioUnit, RTAS, or any combination of these.
+
+It's "polymorphic" because the output is a single binary module that acts as all of the
+different plugin formats at the same time. This means that you only need to maintain one
+project, and only need to perform one build to create a multi-format plugin.
+
+Also included are some helper classes that make it easy to create a stand-alone app to
+run your plugin without a host. This might be useful in its own right, but can also be very
+handy when developing your plugin, because you can build, test and debug it without needing
+to keep restarting a 3rd-party host.
+
+
+ How does it work?
+ =================
+
+To create your plugin, you just create a subclass of the AudioPluginInstance class to
+perform the processing. And your plugin UI is written like any normal Juce UI component.
+
+All the platform-specific code is hidden away in wrapper classes that you just add to
+your project - you should (hopefully) never need to even see the inner workings of these.
+
+
+ Licensing issues
+ ================
+
+Juce is released under the GPL (Gnu Public License) - this means that you're free to use
+and redistribute it as long as your products are also released under the GPL. Basically
+this means that if you use it, you also have to give away your source code.
+If you want to release a closed-source application, you can buy a commercial license
+that lets you avoid this restriction - see http://www.rawmaterialsoftware.com/juce for more info,
+or see the comments at the top of all the Juce source files.
+
+If you're building the VST projects or releasing a VST, you'll need have a look at Steinberg's
+developer site to see what licensing rules apply these days. Their website's at
+http://www.steinberg.net
+
+If you're building an RTAS then you'll need to sign Digidesign's developer license to get
+their SDK. Visit http://www.digidesign.com for more info.
+
+
+
+ Getting Started
+ ===============
+
+There's also a 'demo' folder - this contains an example plugin which can be built in all
+the different formats.
+
+Have a look at the demo classes to see how it works, and then to create a real plugin,
+you'll need to replace the demo files with your own code.
+
+I've tried to add helpful comments where you might run across common compile errors, to
+help describe what you might be doing wrong, as getting a build set-up for some of these
+formats can be a bit of a pain. Please let me know if you find there's anything missing
+from these instructions or anything I could change to help smooth the build process along
+a bit.
+
+I'd recommend NOT putting your own plugin code inside the demo plugin directory - it's
+much neater to keep it somewhere separate and to alter the projects to point to your
+files instead of the demo ones. That way when new versions of this library come out, it'll
+make it easier to update to the latest code.
+
+-----------------------------------------------------------------------------------------------------
+
+ Prerequisites for building a VST
+ ================================
+
+- Visit http://www.steinberg.net and jump through whatever hoops are necessary to download
+ and install the VST SDK.
+- Make sure your include path contains an entry for the "vstsdk2.4" folder containing the SDK.
+
+-----------------------------------------------------------------------------------------------------
+
+ Prerequisites for building an RTAS
+ ==================================
+
+- Contact Digidesign, ask to become a Digidesign Development Partner, sign the relevent
+ agreements and NDAs.
+- From the Digidesign website, download their latest Plug-In SDK
+- Install the SDK and build some of the demo plugins to make sure it all works.
+- In Visual Studio: Add all of these to your include path:
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\EffectClasses
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses\Interfaces
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Utilities
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\RTASP_Adapt
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\CoreClasses
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Controls
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Meters
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ViewClasses
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\DSPClasses
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Interfaces
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\common
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\common\Platform
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\TDMPlugins\SignalProcessing\Public
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\SADriver\Interfaces
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\DigiPublic\Interfaces
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\Fic\Interfaces\DAEClient
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\NewFileLibs\Cmn
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\NewFileLibs\DOA
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\AlturaSource\PPC_H
+ c:\yourdirectory\PT_73_SDK\AlturaPorts\AlturaSource\AppSupport
+ c:\yourdirectory\PT_73_SDK\AvidCode\AVX2sdk\AVX\avx2\avx2sdk\inc
+- In Visual Studio: Using the Digidesign demo projects in the SDK, make sure you've compiled
+ debug and release versions of the following static libraries:
+ DAE.lib, DigiExt.lib, DSI.lib, PlugInLib.lib.
+- In XCode: After installing the Digidesign SDK, make sure you've run the config_SDK_for_Mac
+ command in the SDK's root directory. This sets up some of the tools that it needs.
+
+
+-----------------------------------------------------------------------------------------------------
+ Choosing the formats to build
+ =============================
+
+Each plugin project needs to contain a JucePluginCharacteristics.h file, which holds all the
+plugin-specific build details. In here, there are three macros that you can set to enable each
+of the available formats:
+
+#define JucePlugin_Build_VST 1
+#define JucePlugin_Build_RTAS 1
+#define JucePlugin_Build_AU 1
+
+You can set these to 0 to disable the formats that you don't want to build, and this will avoid
+any compilation problems if, for example, you don't have the appropriate SDK for a particular format.
+
+-----------------------------------------------------------------------------------------------------
+
+ Creating a PC VST/RTAS plugin in Visual Studio
+ ==============================================
+
+
+- First try loading the VST demo project in JuceAudioPlugin/demo/build. Hopefully this
+ should build correctly.
+- Create a new, empty, win32 project using Visual Studio. Choose "DLL" as the type of
+ product to build
+- If building an RTAS, add to your project all the juce_RTAS_*.cpp files from the wrapper/RTAS folder.
+- If building a VST, add to your project all the juce_VST_*.cpp files from the wrapper/VST folder.
+
+- Create yourself a JucePluginCharacteristics.h file, starting with a copy of the one in the
+ demo project. Go through each item inside it carefully, and set them to the appropriate value
+ for your plugin.
+
+- Under "Additional Include Directories", add the folder in which you're going to put
+ your JucePluginCharacteristics.h file.
+
+- If you're doing an RTAS, change these project settings (these can all be ignored if you're only doing a VST):
+ - Set "C++/Code Generation/Runtime Library" to be "Multi-threaded DLL" or "Multi-threaded Debug DLL"
+ - Set the "Linker/Input/Module Definition file" to point to "wrapper/RTAS/juce_RTAS_WinExports.def"
+ - Under "Linker/Input/Delay loaded DLLs", add the following:
+ "DAE.dll; DigiExt.dll; DSI.dll; PluginLib.dll; DSPManager.dll"
+ - You may (or may not) need to add "libcmtd.lib; libcmt.lib" to the "Linker/Input/Ignore Specific Library" setting.
+ - For ONLY the following files:
+ juce_RTAS_Wrapper.cpp, juce_RTAS_DigiCode1.cpp, juce_RTAS_DigiCode2.cpp, juce_RTAS_DigiCode3.cpp,
+ change their "C++/Advanced/Calling Convention" property to "__stdcall". All other files should
+ be left with the default calling convention of "__cdecl"
+ - Set the "Linker/General/Output File" property to "$(OutDir)\$(ProjectName).dpm" (If you're building
+ a polymorphic VST/RTAS, then you can simply copy or rename the finished .dpm file to a .dll, and
+ it'll function as a VST)
+ - Under "Custom build step", add the following command:
+ copy /Y "\yourdirectory\juce\extras\audio plugins\wrapper\RTAS\juce_RTAS_WinResources.rsr" "$(TargetPath)".rsr
+ The corresponding "Outputs" setting for this must be set to "$(TargetPath)".rsr
+ (This will copy and rename the juce_RTAS_WinResources.rsr file to sit next to the finished .dpm file. It's
+ a dummy resource file, but PT will refuse to load the plugin unless it has a corresponding .rsr file)
+ - Because the RTAS code duplicates some win32 constants, you might need to force it to link correctly
+ by adding "/FORCE:multiple" to the linker's additional command line options.
+ - You might want to change the output directory to "\Program Files\Common Files\Digidesign\DAE\Plug-Ins\"
+ if you want the built plugin to go directly into the PT plugins folder
+ - When setting properties, remember to change them for both your debug and release builds!
+
+- Create your actual plugin classes and add them to the project. Obviously this is the hard bit!
+
+- Add the amalgamated juce source file to the project - have a look at the demo app for neat ways of doing this.
+
+- NOTE: on Windows, because RTAS uses the altura mac-style code, there are annoying clashes caused if
+ you also include the Apple QuickTime headers, so you might need to turn off quicktime by setting the
+ juce config macro: #define JUCE_QUICKTIME 0
+
+- NOTE: If you're using MSVC2005 to build your plugin, the users will need to
+ have the Microsoft VC8 Runtime installed on their machines, otherwise the DLL will
+ silently fail to load. You should probably add the runtime to your plugin's installer,
+ and you can get a copy of it here:
+ http://www.microsoft.com/downloads/details.aspx?FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee&DisplayLang=en
+
+
+
+-----------------------------------------------------------------------------------------------------
+
+ Creating a Mac AU/VST/RTAS plugin in XCode
+ ==========================================
+
+
+- For an AU, make sure that the JucePlugin_Build_AU is enabled in your JucePluginCharacteristics.h
+- In XCode, create a new project based on the "Audio Unit Effect" template
+- XCode will create a bunch of template source files for you - you can remove all of these from the project
+ and delete them
+- In the target settings, clear the "Exported Symbols File" setting. The exports are specified by directives
+ within the wrapper code, so don't need to be listed explicitly.
+- All all the Apple frameworks that Juce normally requires to the "External Frameworks" list
+- Add all the juce_AU_* files from the /wrapper/AU directory to your project
+- The template project creates an AUPublic group that contains lots of AudioUnit source files. But
+ it leaves out files that it thinks you might not need, e.g. if you chose an "Audio Unit Effect" project,
+ then it won't add the classes for handling MIDI. So you'll probably need to go into this folder
+ and check that it contains AUMIDIBase.cpp, AUMidiEffectBase.cpp, MusicDeviceBase.cpp, etc
+- As for the PC, you'll need to make sure your project contains a correctly set-up JucePluginCharacteristics.h
+ file - start with a copy of the one in the demo plugin project, and go through it making sure that
+ all the values make sense for your plugin.
+- Create your actual plugin classes and add them to the project. Obviously this is the hard bit!
+
+You should now be able to build a functional AU! If you want VST support as well, then read on...
+
+- Make sure that the JucePlugin_Build_VST is enabled in your JucePluginCharacteristics.h
+- For VST support, add all the juce_VST_* files from /wrapper/VST
+- In your target info settings, add the vstsdk2_4 folder to your "Header Search Paths" list
+- Make sure that in your Info.plist, the "Bundle Name" value is correctly set to the name of your plugin.
+
+Now, if you compile, the resulting bundle should work as both a VST and AU - you can simply copy or rename it,
+changing the suffix to ".vst", and put it in your VST folder.
+
+If you also want to build an RTAS, then carry on reading...
+
+
+- Make sure that the JucePlugin_Build_RTAS is enabled in your JucePluginCharacteristics.h
+- After installing the Digidesign SDK, make sure you've run the config_SDK_for_Mac command in
+ its root directory. This sets up some of the tools that it needs.
+- Add the files from /wrapper/RTAS to your project. Obviously a couple of these are for Windows, so
+ you shouldn't add those
+- In the Digi SDK, in /AlturaPorts/TDMPlugins/common/mac, there are two config files:
+ CommonDebugSettings.xconfig and CommonReleaseSettings.xconfig
+ These contain lots of Digi hackery to get their stuff to compile, so you should add them to your project
+ and change your project's settings to use these files as their base config. Even so, it's all a bit of a mess,
+ and you may need to tweak them a bit to get it to work on your system.
+- In your target settings, add a custom build setting called "MacBag", and set this to the path where the
+ "MacBag" folder of the Digi SDK lives.
+- Add the following to your "Header Search Paths" setting (it's easiest to copy-and-paste this setting from
+ the demo project):
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/PlugInLibrary/**"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/DSPManager/**"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/Encryption"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/GraphicsExtensions"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/common"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/common/PI_LibInterface"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/PACEProtection/**"
+ "$(MacBag)/../AlturaPorts/OMS/Headers"
+ "$(MacBag)/../AlturaPorts/Fic/Interfaces/**"
+ "$(MacBag)/../AlturaPorts/Fic/Source/SignalNets"
+ "$(MacBag)/../AlturaPorts/DSIPublicInterface/PublicHeaders"
+ "$(MacBag)/../DAEWin/Include"
+ "$(MacBag)/../AlturaPorts/DigiPublic/Interfaces"
+ "$(MacBag)/../AlturaPorts/DigiPublic"
+ "$(MacBag)/../AlturaPorts/NewFileLibs/DOA"
+ "$(MacBag)/../AlturaPorts/NewFileLibs/Cmn"
+ "$(MacBag)/../AlturaPorts/TDMPlugIns/SignalProcessing/**"
+ "$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/inc"
+ "$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/utils"
+- If you get include errors compiling some of the DigiDesign code, you may need to
+ add "/Developer/Headers/FlatCarbon" to your header search path.
+- In the SDK, find the PluginLibrary.xcodeproj file, and add this to your "External frameworks and Libraries".
+ If you've already compiled this library, you can open its item in your XCode project treeview, to find
+ the "libPluginLibrary.a" item inside it. Drag this subitem down to your Target/"Link Binary With Libraries"
+ build stage and drop it there to add it to the link process.
+- In your Info.plist, change the "Bundle OS Type Code" to "TDMw", and the "Bundle Creator OS Type Code" to
+ "PTul".
+
+You should now be able to build an RTAS! Again, just renaming the finished bundle to ".dpm" and
+putting it in your RTAS folder should be do the trick.
+
+If you get any weird build problems, a good tip is to try comparing the demo plugin's build settings with your
+own - this should usually show up what's missing.
+
+
+Note about exported symbols:
+ When XCode builds the plugin, I've had unpredictable results when trying to stop it from exporting
+ all of the internal functions as public symbols. There are some flags that are supposed to turn this
+ off, but sometimes they don't seem to have any effect, and using an explicit exports file also
+ seems a bit hit-and-miss. (If anyone knows better and can get this working, please let me know!)
+ Anyway, as well as being wasteful and showing everyone what's inside your plugin, leaving all
+ the symbols in there will cause fatal crashes when used with Tracktion, or alongside any other
+ Juce-based plugins. A way of making sure your plugin is stripped is to use the command
+ "strip -x -S YourPlugin.vst/Contents/MacOS/YourPlugin" after bulding it, which removes the
+ unnecessary symbols (although in my experience this also doesn't seem to work all the time,
+ so it's a good idea to check it using the unix "nm" command).
diff --git a/extras/audio plugins/demo/build/linux/premake.lua b/extras/audio plugins/demo/build/linux/premake.lua
new file mode 100644
index 0000000000..f3782f6840
--- /dev/null
+++ b/extras/audio plugins/demo/build/linux/premake.lua
@@ -0,0 +1,55 @@
+
+project.name = "JucePluginDemo"
+project.bindir = "build"
+project.libdir = "build"
+
+project.configs = { "Debug", "Release" }
+
+package = newpackage()
+package.name = "JucePluginDemo"
+package.kind = "dll"
+package.language = "c++"
+
+package.objdir = "build/intermediate"
+package.config["Debug"].objdir = "build/intermediate/Debug"
+package.config["Release"].objdir = "build/intermediate/Release"
+
+package.config["Debug"].defines = { "LINUX=1", "DEBUG=1", "_DEBUG=1" }
+package.config["Debug"].buildoptions = { "-O0 -ggdb -g3 -Wall" }
+
+package.config["Release"].defines = { "LINUX=1", "NDEBUG=1" }
+package.config["Release"].buildoptions = { "-O2 -s" }
+
+package.includepaths = {
+ "/usr/include",
+ "../../../../../",
+ "/usr/include/vst/source/common",
+ "/usr/include/vst",
+ "../../src"
+}
+
+package.libpaths = {
+ "../../../../../bin",
+ "/usr/X11R6/lib/",
+ "/usr/lib"
+}
+
+package.config["Debug"].links = {
+ "freetype", "pthread", "rt", "X11", "GL", "GLU", "Xinerama", "asound", "juce_debug"
+}
+
+package.config["Release"].links = {
+ "freetype", "pthread", "rt", "X11", "GL", "GLU", "Xinerama", "asound", "juce"
+}
+
+package.files = {
+ matchfiles (
+ "../../../wrapper/*.h",
+ "../../../wrapper/*.cpp",
+ "../../../wrapper/VST/*.cpp"
+ ),
+ matchrecursive (
+ "../../src/*.h",
+ "../../src/*.cpp"
+ )
+}
diff --git a/extras/audio plugins/demo/build/mac/English.lproj/InfoPlist.strings b/extras/audio plugins/demo/build/mac/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..7c6f58f634
Binary files /dev/null and b/extras/audio plugins/demo/build/mac/English.lproj/InfoPlist.strings differ
diff --git a/extras/audio plugins/demo/build/mac/Info.plist b/extras/audio plugins/demo/build/mac/Info.plist
new file mode 100644
index 0000000000..fbf8cc771d
--- /dev/null
+++ b/extras/audio plugins/demo/build/mac/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ com.rawmaterialsoftware.${PRODUCT_NAME:identifier}
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.1
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.1
+ CSResourcesFileMapped
+
+
+
diff --git a/extras/audio plugins/demo/build/mac/JuceDemoPlugin.xcodeproj/project.pbxproj b/extras/audio plugins/demo/build/mac/JuceDemoPlugin.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..9fb8800d00
--- /dev/null
+++ b/extras/audio plugins/demo/build/mac/JuceDemoPlugin.xcodeproj/project.pbxproj
@@ -0,0 +1,713 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 3EEA126E089847F5002C6BFC /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */; };
+ 3EEA126F089847F5002C6BFC /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEA126C089847F5002C6BFC /* CAVectorUnit.h */; };
+ 3EEA1270089847F5002C6BFC /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */; };
+ 843792AA0EFBF14B002A2725 /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843792A20EFBF14B002A2725 /* DemoEditorComponent.cpp */; };
+ 843792AB0EFBF14B002A2725 /* DemoEditorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 843792A30EFBF14B002A2725 /* DemoEditorComponent.h */; };
+ 843792AC0EFBF14B002A2725 /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843792A40EFBF14B002A2725 /* DemoJuceFilter.cpp */; };
+ 843792AD0EFBF14B002A2725 /* DemoJuceFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 843792A50EFBF14B002A2725 /* DemoJuceFilter.h */; };
+ 843792AE0EFBF14B002A2725 /* includes.h in Headers */ = {isa = PBXBuildFile; fileRef = 843792A60EFBF14B002A2725 /* includes.h */; };
+ 843792AF0EFBF14B002A2725 /* juce_AppConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 843792A70EFBF14B002A2725 /* juce_AppConfig.h */; };
+ 843792B00EFBF14B002A2725 /* juce_LibrarySource.mm in Sources */ = {isa = PBXBuildFile; fileRef = 843792A80EFBF14B002A2725 /* juce_LibrarySource.mm */; };
+ 843792B10EFBF14B002A2725 /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 843792A90EFBF14B002A2725 /* JucePluginCharacteristics.h */; };
+ 843792B50EFBF175002A2725 /* juce_AU_Resources.r in Rez */ = {isa = PBXBuildFile; fileRef = 843792B30EFBF175002A2725 /* juce_AU_Resources.r */; };
+ 843792B60EFBF175002A2725 /* juce_AU_Wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 843792B40EFBF175002A2725 /* juce_AU_Wrapper.mm */; };
+ 8437956E0EFBF323002A2725 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795630EFBF323002A2725 /* AudioToolbox.framework */; };
+ 8437956F0EFBF323002A2725 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795640EFBF323002A2725 /* AudioUnit.framework */; };
+ 843795700EFBF323002A2725 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795650EFBF323002A2725 /* Cocoa.framework */; };
+ 843795710EFBF323002A2725 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795660EFBF323002A2725 /* OpenGL.framework */; };
+ 843795720EFBF323002A2725 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795670EFBF323002A2725 /* IOKit.framework */; };
+ 843795730EFBF323002A2725 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795680EFBF323002A2725 /* Carbon.framework */; };
+ 843795740EFBF323002A2725 /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843795690EFBF323002A2725 /* CoreMIDI.framework */; };
+ 843795750EFBF323002A2725 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8437956A0EFBF323002A2725 /* CoreAudio.framework */; };
+ 843795760EFBF323002A2725 /* DiscRecording.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8437956B0EFBF323002A2725 /* DiscRecording.framework */; };
+ 843795770EFBF323002A2725 /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8437956C0EFBF323002A2725 /* QTKit.framework */; };
+ 843795780EFBF323002A2725 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8437956D0EFBF323002A2725 /* WebKit.framework */; };
+ 843796690EFBF357002A2725 /* AUMIDIBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8437965F0EFBF357002A2725 /* AUMIDIBase.cpp */; };
+ 8437966A0EFBF357002A2725 /* AUMIDIBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 843796600EFBF357002A2725 /* AUMIDIBase.h */; };
+ 8437966B0EFBF357002A2725 /* AUMIDIEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796610EFBF357002A2725 /* AUMIDIEffectBase.cpp */; };
+ 8437966C0EFBF357002A2725 /* AUMIDIEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 843796620EFBF357002A2725 /* AUMIDIEffectBase.h */; };
+ 8437966D0EFBF357002A2725 /* AUOutputBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796630EFBF357002A2725 /* AUOutputBase.cpp */; };
+ 8437966E0EFBF357002A2725 /* AUOutputBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 843796640EFBF357002A2725 /* AUOutputBase.h */; };
+ 843796710EFBF357002A2725 /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796670EFBF357002A2725 /* MusicDeviceBase.cpp */; };
+ 843796720EFBF357002A2725 /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 843796680EFBF357002A2725 /* MusicDeviceBase.h */; };
+ 843796750EFBF416002A2725 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 843796740EFBF416002A2725 /* CoreFoundation.framework */; };
+ 8437967F0EFBF5E4002A2725 /* juce_VST_Wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8437967D0EFBF5E4002A2725 /* juce_VST_Wrapper.cpp */; };
+ 843796800EFBF5E4002A2725 /* juce_VST_Wrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8437967E0EFBF5E4002A2725 /* juce_VST_Wrapper.mm */; };
+ 843796DC0EFBFD16002A2725 /* juce_RTAS_DigiCode1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796D50EFBFD16002A2725 /* juce_RTAS_DigiCode1.cpp */; };
+ 843796DD0EFBFD16002A2725 /* juce_RTAS_DigiCode2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796D60EFBFD16002A2725 /* juce_RTAS_DigiCode2.cpp */; };
+ 843796DE0EFBFD16002A2725 /* juce_RTAS_DigiCode3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796D70EFBFD16002A2725 /* juce_RTAS_DigiCode3.cpp */; };
+ 843796DF0EFBFD16002A2725 /* juce_RTAS_DigiCode_Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 843796D80EFBFD16002A2725 /* juce_RTAS_DigiCode_Header.h */; };
+ 843796E00EFBFD16002A2725 /* juce_RTAS_MacResources.r in Rez */ = {isa = PBXBuildFile; fileRef = 843796D90EFBFD16002A2725 /* juce_RTAS_MacResources.r */; };
+ 843796E10EFBFD16002A2725 /* juce_RTAS_MacUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 843796DA0EFBFD16002A2725 /* juce_RTAS_MacUtilities.mm */; };
+ 843796E20EFBFD16002A2725 /* juce_RTAS_Wrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 843796DB0EFBFD16002A2725 /* juce_RTAS_Wrapper.cpp */; };
+ 843796F60EFC0102002A2725 /* CommonDebugSettings.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 843796F40EFC0102002A2725 /* CommonDebugSettings.xcconfig */; };
+ 843796F70EFC0102002A2725 /* CommonReleaseSettings.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 843796F50EFC0102002A2725 /* CommonReleaseSettings.xcconfig */; };
+ 843797050EFC0269002A2725 /* libPluginLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 843797030EFC022E002A2725 /* libPluginLibrary.a */; };
+ 8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A7F072073D200365D66 /* AUBase.cpp */; };
+ 8BA05AAF072073D300365D66 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A80072073D200365D66 /* AUBase.h */; };
+ 8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A81072073D200365D66 /* AUDispatch.cpp */; };
+ 8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A82072073D200365D66 /* AUDispatch.h */; };
+ 8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A83072073D200365D66 /* AUInputElement.cpp */; };
+ 8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A84072073D200365D66 /* AUInputElement.h */; };
+ 8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A85072073D200365D66 /* AUOutputElement.cpp */; };
+ 8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A86072073D200365D66 /* AUOutputElement.h */; };
+ 8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A88072073D200365D66 /* AUScopeElement.cpp */; };
+ 8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A89072073D200365D66 /* AUScopeElement.h */; };
+ 8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A8A072073D200365D66 /* ComponentBase.cpp */; };
+ 8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A8B072073D200365D66 /* ComponentBase.h */; };
+ 8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */; };
+ 8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05A9B072073D200365D66 /* AUEffectBase.h */; };
+ 8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA7072073D200365D66 /* AUBuffer.cpp */; };
+ 8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AA8072073D200365D66 /* AUBuffer.h */; };
+ 8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */; };
+ 8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */; };
+ 8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */; };
+ 8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */; };
+ 8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */; };
+ 8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */; };
+ 8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */; };
+ 8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE10720742100365D66 /* CAMutex.cpp */; };
+ 8BA05AE80720742100365D66 /* CAMutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE20720742100365D66 /* CAMutex.h */; };
+ 8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */; };
+ 8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */; };
+ 8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8BA05B050720754400365D66 /* CAAUParameter.cpp */; };
+ 8BA05B080720754400365D66 /* CAAUParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA05B060720754400365D66 /* CAAUParameter.h */; };
+ 8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 843797020EFC022E002A2725 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 843796FE0EFC022E002A2725 /* PluginLibrary.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = B65B09B30860FB0800FE2E6A;
+ remoteInfo = "Plugin Library";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
+ 3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = ""; };
+ 3EEA126C089847F5002C6BFC /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = ""; };
+ 3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = ""; };
+ 843792A20EFBF14B002A2725 /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; };
+ 843792A30EFBF14B002A2725 /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; };
+ 843792A40EFBF14B002A2725 /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; };
+ 843792A50EFBF14B002A2725 /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; };
+ 843792A60EFBF14B002A2725 /* includes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = includes.h; path = ../../src/includes.h; sourceTree = SOURCE_ROOT; };
+ 843792A70EFBF14B002A2725 /* juce_AppConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_AppConfig.h; path = ../../src/juce_AppConfig.h; sourceTree = SOURCE_ROOT; };
+ 843792A80EFBF14B002A2725 /* juce_LibrarySource.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_LibrarySource.mm; path = ../../src/juce_LibrarySource.mm; sourceTree = SOURCE_ROOT; };
+ 843792A90EFBF14B002A2725 /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; };
+ 843792B30EFBF175002A2725 /* juce_AU_Resources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = juce_AU_Resources.r; path = ../../../wrapper/AU/juce_AU_Resources.r; sourceTree = SOURCE_ROOT; };
+ 843792B40EFBF175002A2725 /* juce_AU_Wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_AU_Wrapper.mm; path = ../../../wrapper/AU/juce_AU_Wrapper.mm; sourceTree = SOURCE_ROOT; };
+ 843795630EFBF323002A2725 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; };
+ 843795640EFBF323002A2725 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; };
+ 843795650EFBF323002A2725 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
+ 843795660EFBF323002A2725 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; };
+ 843795670EFBF323002A2725 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; };
+ 843795680EFBF323002A2725 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; };
+ 843795690EFBF323002A2725 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = ""; };
+ 8437956A0EFBF323002A2725 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; };
+ 8437956B0EFBF323002A2725 /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = /System/Library/Frameworks/DiscRecording.framework; sourceTree = ""; };
+ 8437956C0EFBF323002A2725 /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = /System/Library/Frameworks/QTKit.framework; sourceTree = ""; };
+ 8437956D0EFBF323002A2725 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = ""; };
+ 8437965F0EFBF357002A2725 /* AUMIDIBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = DEVELOPER_DIR; };
+ 843796600EFBF357002A2725 /* AUMIDIBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = DEVELOPER_DIR; };
+ 843796610EFBF357002A2725 /* AUMIDIEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIEffectBase.cpp; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.cpp; sourceTree = DEVELOPER_DIR; };
+ 843796620EFBF357002A2725 /* AUMIDIEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUMIDIEffectBase.h; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.h; sourceTree = DEVELOPER_DIR; };
+ 843796630EFBF357002A2725 /* AUOutputBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AUOutputBase.cpp; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.cpp; sourceTree = DEVELOPER_DIR; };
+ 843796640EFBF357002A2725 /* AUOutputBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AUOutputBase.h; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUOutputBase.h; sourceTree = DEVELOPER_DIR; };
+ 843796670EFBF357002A2725 /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = DEVELOPER_DIR; };
+ 843796680EFBF357002A2725 /* MusicDeviceBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = DEVELOPER_DIR; };
+ 843796740EFBF416002A2725 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; };
+ 8437967D0EFBF5E4002A2725 /* juce_VST_Wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VST_Wrapper.cpp; path = ../../../wrapper/VST/juce_VST_Wrapper.cpp; sourceTree = SOURCE_ROOT; };
+ 8437967E0EFBF5E4002A2725 /* juce_VST_Wrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_VST_Wrapper.mm; path = ../../../wrapper/VST/juce_VST_Wrapper.mm; sourceTree = SOURCE_ROOT; };
+ 843796D50EFBFD16002A2725 /* juce_RTAS_DigiCode1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTAS_DigiCode1.cpp; path = ../../../wrapper/RTAS/juce_RTAS_DigiCode1.cpp; sourceTree = SOURCE_ROOT; };
+ 843796D60EFBFD16002A2725 /* juce_RTAS_DigiCode2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTAS_DigiCode2.cpp; path = ../../../wrapper/RTAS/juce_RTAS_DigiCode2.cpp; sourceTree = SOURCE_ROOT; };
+ 843796D70EFBFD16002A2725 /* juce_RTAS_DigiCode3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTAS_DigiCode3.cpp; path = ../../../wrapper/RTAS/juce_RTAS_DigiCode3.cpp; sourceTree = SOURCE_ROOT; };
+ 843796D80EFBFD16002A2725 /* juce_RTAS_DigiCode_Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = juce_RTAS_DigiCode_Header.h; path = ../../../wrapper/RTAS/juce_RTAS_DigiCode_Header.h; sourceTree = SOURCE_ROOT; };
+ 843796D90EFBFD16002A2725 /* juce_RTAS_MacResources.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = juce_RTAS_MacResources.r; path = ../../../wrapper/RTAS/juce_RTAS_MacResources.r; sourceTree = SOURCE_ROOT; };
+ 843796DA0EFBFD16002A2725 /* juce_RTAS_MacUtilities.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = juce_RTAS_MacUtilities.mm; path = ../../../wrapper/RTAS/juce_RTAS_MacUtilities.mm; sourceTree = SOURCE_ROOT; };
+ 843796DB0EFBFD16002A2725 /* juce_RTAS_Wrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTAS_Wrapper.cpp; path = ../../../wrapper/RTAS/juce_RTAS_Wrapper.cpp; sourceTree = SOURCE_ROOT; };
+ 843796F40EFC0102002A2725 /* CommonDebugSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CommonDebugSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonDebugSettings.xcconfig; sourceTree = ""; };
+ 843796F50EFC0102002A2725 /* CommonReleaseSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CommonReleaseSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonReleaseSettings.xcconfig; sourceTree = ""; };
+ 843796FE0EFC022E002A2725 /* PluginLibrary.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PluginLibrary.xcodeproj; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/PlugInLibrary/MacBuild/PluginLibrary.xcodeproj; sourceTree = ""; };
+ 8BA05A7F072073D200365D66 /* AUBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = ""; };
+ 8BA05A80072073D200365D66 /* AUBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = ""; };
+ 8BA05A81072073D200365D66 /* AUDispatch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = ""; };
+ 8BA05A82072073D200365D66 /* AUDispatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = ""; };
+ 8BA05A83072073D200365D66 /* AUInputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = ""; };
+ 8BA05A84072073D200365D66 /* AUInputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = ""; };
+ 8BA05A85072073D200365D66 /* AUOutputElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = ""; };
+ 8BA05A86072073D200365D66 /* AUOutputElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = ""; };
+ 8BA05A87072073D200365D66 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = ""; };
+ 8BA05A88072073D200365D66 /* AUScopeElement.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = ""; };
+ 8BA05A89072073D200365D66 /* AUScopeElement.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = ""; };
+ 8BA05A8A072073D200365D66 /* ComponentBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = ""; };
+ 8BA05A8B072073D200365D66 /* ComponentBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = ""; };
+ 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = ""; };
+ 8BA05A9B072073D200365D66 /* AUEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = ""; };
+ 8BA05AA7072073D200365D66 /* AUBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = ""; };
+ 8BA05AA8072073D200365D66 /* AUBuffer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = ""; };
+ 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AUDebugDispatcher.cpp; sourceTree = ""; };
+ 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUDebugDispatcher.h; sourceTree = ""; };
+ 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUInputFormatConverter.h; sourceTree = ""; };
+ 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUSilentTimeout.h; sourceTree = ""; };
+ 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUTimestampGenerator.h; sourceTree = ""; };
+ 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = ""; };
+ 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = ""; };
+ 8BA05AE10720742100365D66 /* CAMutex.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAMutex.cpp; sourceTree = ""; };
+ 8BA05AE20720742100365D66 /* CAMutex.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAMutex.h; sourceTree = ""; };
+ 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = ""; };
+ 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = ""; };
+ 8BA05B050720754400365D66 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = ""; };
+ 8BA05B060720754400365D66 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = ""; };
+ 8D01CCD10486CAD60068D4B7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; };
+ 8D01CCD20486CAD60068D4B7 /* JuceDemoPlugin.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceDemoPlugin.component; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 843797050EFC0269002A2725 /* libPluginLibrary.a in Frameworks */,
+ 8437956E0EFBF323002A2725 /* AudioToolbox.framework in Frameworks */,
+ 8437956F0EFBF323002A2725 /* AudioUnit.framework in Frameworks */,
+ 843795700EFBF323002A2725 /* Cocoa.framework in Frameworks */,
+ 843795710EFBF323002A2725 /* OpenGL.framework in Frameworks */,
+ 843795720EFBF323002A2725 /* IOKit.framework in Frameworks */,
+ 843795730EFBF323002A2725 /* Carbon.framework in Frameworks */,
+ 843795740EFBF323002A2725 /* CoreMIDI.framework in Frameworks */,
+ 843795750EFBF323002A2725 /* CoreAudio.framework in Frameworks */,
+ 843795760EFBF323002A2725 /* DiscRecording.framework in Frameworks */,
+ 843795770EFBF323002A2725 /* QTKit.framework in Frameworks */,
+ 843795780EFBF323002A2725 /* WebKit.framework in Frameworks */,
+ 843796750EFBF416002A2725 /* CoreFoundation.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 089C166AFE841209C02AAC07 /* JuceDemoPlugin */ = {
+ isa = PBXGroup;
+ children = (
+ 843796F40EFC0102002A2725 /* CommonDebugSettings.xcconfig */,
+ 843796F50EFC0102002A2725 /* CommonReleaseSettings.xcconfig */,
+ 08FB77ADFE841716C02AAC07 /* Source */,
+ 089C167CFE841241C02AAC07 /* Resources */,
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */,
+ 19C28FB4FE9D528D11CA2CBB /* Products */,
+ );
+ name = JuceDemoPlugin;
+ sourceTree = "";
+ };
+ 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 843796FE0EFC022E002A2725 /* PluginLibrary.xcodeproj */,
+ 843796740EFBF416002A2725 /* CoreFoundation.framework */,
+ 843795630EFBF323002A2725 /* AudioToolbox.framework */,
+ 843795640EFBF323002A2725 /* AudioUnit.framework */,
+ 843795650EFBF323002A2725 /* Cocoa.framework */,
+ 843795660EFBF323002A2725 /* OpenGL.framework */,
+ 843795670EFBF323002A2725 /* IOKit.framework */,
+ 843795680EFBF323002A2725 /* Carbon.framework */,
+ 843795690EFBF323002A2725 /* CoreMIDI.framework */,
+ 8437956A0EFBF323002A2725 /* CoreAudio.framework */,
+ 8437956B0EFBF323002A2725 /* DiscRecording.framework */,
+ 8437956C0EFBF323002A2725 /* QTKit.framework */,
+ 8437956D0EFBF323002A2725 /* WebKit.framework */,
+ );
+ name = "External Frameworks and Libraries";
+ sourceTree = "";
+ };
+ 089C167CFE841241C02AAC07 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D01CCD10486CAD60068D4B7 /* Info.plist */,
+ 089C167DFE841241C02AAC07 /* InfoPlist.strings */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 08FB77ADFE841716C02AAC07 /* Source */ = {
+ isa = PBXGroup;
+ children = (
+ 8437929D0EFBF08E002A2725 /* Filter */,
+ 8437929E0EFBF098002A2725 /* Wrapper Code */,
+ );
+ name = Source;
+ sourceTree = "";
+ };
+ 19C28FB4FE9D528D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D01CCD20486CAD60068D4B7 /* JuceDemoPlugin.component */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8437929D0EFBF08E002A2725 /* Filter */ = {
+ isa = PBXGroup;
+ children = (
+ 843792A20EFBF14B002A2725 /* DemoEditorComponent.cpp */,
+ 843792A30EFBF14B002A2725 /* DemoEditorComponent.h */,
+ 843792A40EFBF14B002A2725 /* DemoJuceFilter.cpp */,
+ 843792A50EFBF14B002A2725 /* DemoJuceFilter.h */,
+ 843792A60EFBF14B002A2725 /* includes.h */,
+ 843792A70EFBF14B002A2725 /* juce_AppConfig.h */,
+ 843792A80EFBF14B002A2725 /* juce_LibrarySource.mm */,
+ 843792A90EFBF14B002A2725 /* JucePluginCharacteristics.h */,
+ );
+ name = Filter;
+ sourceTree = "";
+ };
+ 8437929E0EFBF098002A2725 /* Wrapper Code */ = {
+ isa = PBXGroup;
+ children = (
+ 843796D40EFBFCE3002A2725 /* Juce RTAS Wrapper */,
+ 8437967C0EFBF5C6002A2725 /* Juce VST Wrapper */,
+ 843792B20EFBF157002A2725 /* Juce AU Wrapper */,
+ 8BA05AEB0720742700365D66 /* PublicUtility */,
+ 8BA05A7D072073D200365D66 /* AUPublic */,
+ );
+ name = "Wrapper Code";
+ sourceTree = "";
+ };
+ 843792B20EFBF157002A2725 /* Juce AU Wrapper */ = {
+ isa = PBXGroup;
+ children = (
+ 843792B30EFBF175002A2725 /* juce_AU_Resources.r */,
+ 843792B40EFBF175002A2725 /* juce_AU_Wrapper.mm */,
+ );
+ name = "Juce AU Wrapper";
+ sourceTree = "";
+ };
+ 8437967C0EFBF5C6002A2725 /* Juce VST Wrapper */ = {
+ isa = PBXGroup;
+ children = (
+ 8437967D0EFBF5E4002A2725 /* juce_VST_Wrapper.cpp */,
+ 8437967E0EFBF5E4002A2725 /* juce_VST_Wrapper.mm */,
+ );
+ name = "Juce VST Wrapper";
+ sourceTree = "";
+ };
+ 843796D40EFBFCE3002A2725 /* Juce RTAS Wrapper */ = {
+ isa = PBXGroup;
+ children = (
+ 843796D50EFBFD16002A2725 /* juce_RTAS_DigiCode1.cpp */,
+ 843796D60EFBFD16002A2725 /* juce_RTAS_DigiCode2.cpp */,
+ 843796D70EFBFD16002A2725 /* juce_RTAS_DigiCode3.cpp */,
+ 843796D80EFBFD16002A2725 /* juce_RTAS_DigiCode_Header.h */,
+ 843796D90EFBFD16002A2725 /* juce_RTAS_MacResources.r */,
+ 843796DA0EFBFD16002A2725 /* juce_RTAS_MacUtilities.mm */,
+ 843796DB0EFBFD16002A2725 /* juce_RTAS_Wrapper.cpp */,
+ );
+ name = "Juce RTAS Wrapper";
+ sourceTree = "";
+ };
+ 843796FF0EFC022E002A2725 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 843797030EFC022E002A2725 /* libPluginLibrary.a */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 8BA05A7D072073D200365D66 /* AUPublic */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A7E072073D200365D66 /* AUBase */,
+ 8BA05A99072073D200365D66 /* OtherBases */,
+ 8BA05AA6072073D200365D66 /* Utility */,
+ );
+ name = AUPublic;
+ path = Examples/CoreAudio/AudioUnits/AUPublic;
+ sourceTree = DEVELOPER_DIR;
+ };
+ 8BA05A7E072073D200365D66 /* AUBase */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05A7F072073D200365D66 /* AUBase.cpp */,
+ 8BA05A80072073D200365D66 /* AUBase.h */,
+ 8BA05A81072073D200365D66 /* AUDispatch.cpp */,
+ 8BA05A82072073D200365D66 /* AUDispatch.h */,
+ 8BA05A83072073D200365D66 /* AUInputElement.cpp */,
+ 8BA05A84072073D200365D66 /* AUInputElement.h */,
+ 8BA05A85072073D200365D66 /* AUOutputElement.cpp */,
+ 8BA05A86072073D200365D66 /* AUOutputElement.h */,
+ 8BA05A87072073D200365D66 /* AUResources.r */,
+ 8BA05A88072073D200365D66 /* AUScopeElement.cpp */,
+ 8BA05A89072073D200365D66 /* AUScopeElement.h */,
+ 8BA05A8A072073D200365D66 /* ComponentBase.cpp */,
+ 8BA05A8B072073D200365D66 /* ComponentBase.h */,
+ );
+ path = AUBase;
+ sourceTree = "";
+ };
+ 8BA05A99072073D200365D66 /* OtherBases */ = {
+ isa = PBXGroup;
+ children = (
+ 8437965F0EFBF357002A2725 /* AUMIDIBase.cpp */,
+ 843796600EFBF357002A2725 /* AUMIDIBase.h */,
+ 843796610EFBF357002A2725 /* AUMIDIEffectBase.cpp */,
+ 843796620EFBF357002A2725 /* AUMIDIEffectBase.h */,
+ 843796630EFBF357002A2725 /* AUOutputBase.cpp */,
+ 843796640EFBF357002A2725 /* AUOutputBase.h */,
+ 843796670EFBF357002A2725 /* MusicDeviceBase.cpp */,
+ 843796680EFBF357002A2725 /* MusicDeviceBase.h */,
+ 8BA05A9A072073D200365D66 /* AUEffectBase.cpp */,
+ 8BA05A9B072073D200365D66 /* AUEffectBase.h */,
+ );
+ path = OtherBases;
+ sourceTree = "";
+ };
+ 8BA05AA6072073D200365D66 /* Utility */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05AA7072073D200365D66 /* AUBuffer.cpp */,
+ 8BA05AA8072073D200365D66 /* AUBuffer.h */,
+ 8BA05AA9072073D200365D66 /* AUDebugDispatcher.cpp */,
+ 8BA05AAA072073D200365D66 /* AUDebugDispatcher.h */,
+ 8BA05AAB072073D200365D66 /* AUInputFormatConverter.h */,
+ 8BA05AAC072073D200365D66 /* AUSilentTimeout.h */,
+ 8BA05AAD072073D200365D66 /* AUTimestampGenerator.h */,
+ );
+ path = Utility;
+ sourceTree = "";
+ };
+ 8BA05AEB0720742700365D66 /* PublicUtility */ = {
+ isa = PBXGroup;
+ children = (
+ 8BA05B050720754400365D66 /* CAAUParameter.cpp */,
+ 8BA05B060720754400365D66 /* CAAUParameter.h */,
+ 8BA05ADF0720742100365D66 /* CAAudioChannelLayout.cpp */,
+ 8BA05AE00720742100365D66 /* CAAudioChannelLayout.h */,
+ 8BA05AE10720742100365D66 /* CAMutex.cpp */,
+ 8BA05AE20720742100365D66 /* CAMutex.h */,
+ 8BA05AE30720742100365D66 /* CAStreamBasicDescription.cpp */,
+ 8BA05AE40720742100365D66 /* CAStreamBasicDescription.h */,
+ 3EEA126D089847F5002C6BFC /* CAVectorUnitTypes.h */,
+ 3EEA126B089847F5002C6BFC /* CAVectorUnit.cpp */,
+ 3EEA126C089847F5002C6BFC /* CAVectorUnit.h */,
+ );
+ name = PublicUtility;
+ path = Examples/CoreAudio/PublicUtility;
+ sourceTree = DEVELOPER_DIR;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 8D01CCC70486CAD60068D4B7 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAF072073D300365D66 /* AUBase.h in Headers */,
+ 8BA05AB1072073D300365D66 /* AUDispatch.h in Headers */,
+ 8BA05AB3072073D300365D66 /* AUInputElement.h in Headers */,
+ 8BA05AB5072073D300365D66 /* AUOutputElement.h in Headers */,
+ 8BA05AB8072073D300365D66 /* AUScopeElement.h in Headers */,
+ 8BA05ABA072073D300365D66 /* ComponentBase.h in Headers */,
+ 8BA05AC7072073D300365D66 /* AUEffectBase.h in Headers */,
+ 8BA05AD3072073D300365D66 /* AUBuffer.h in Headers */,
+ 8BA05AD5072073D300365D66 /* AUDebugDispatcher.h in Headers */,
+ 8BA05AD6072073D300365D66 /* AUInputFormatConverter.h in Headers */,
+ 8BA05AD7072073D300365D66 /* AUSilentTimeout.h in Headers */,
+ 8BA05AD8072073D300365D66 /* AUTimestampGenerator.h in Headers */,
+ 8BA05AE60720742100365D66 /* CAAudioChannelLayout.h in Headers */,
+ 8BA05AE80720742100365D66 /* CAMutex.h in Headers */,
+ 8BA05AEA0720742100365D66 /* CAStreamBasicDescription.h in Headers */,
+ 8BA05B080720754400365D66 /* CAAUParameter.h in Headers */,
+ 3EEA126F089847F5002C6BFC /* CAVectorUnit.h in Headers */,
+ 3EEA1270089847F5002C6BFC /* CAVectorUnitTypes.h in Headers */,
+ 843792AB0EFBF14B002A2725 /* DemoEditorComponent.h in Headers */,
+ 843792AD0EFBF14B002A2725 /* DemoJuceFilter.h in Headers */,
+ 843792AE0EFBF14B002A2725 /* includes.h in Headers */,
+ 843792AF0EFBF14B002A2725 /* juce_AppConfig.h in Headers */,
+ 843792B10EFBF14B002A2725 /* JucePluginCharacteristics.h in Headers */,
+ 8437966A0EFBF357002A2725 /* AUMIDIBase.h in Headers */,
+ 8437966C0EFBF357002A2725 /* AUMIDIEffectBase.h in Headers */,
+ 8437966E0EFBF357002A2725 /* AUOutputBase.h in Headers */,
+ 843796720EFBF357002A2725 /* MusicDeviceBase.h in Headers */,
+ 843796DF0EFBFD16002A2725 /* juce_RTAS_DigiCode_Header.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 8D01CCC60486CAD60068D4B7 /* JuceDemoPlugin */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "JuceDemoPlugin" */;
+ buildPhases = (
+ 8D01CCC70486CAD60068D4B7 /* Headers */,
+ 8D01CCC90486CAD60068D4B7 /* Resources */,
+ 8D01CCCB0486CAD60068D4B7 /* Sources */,
+ 8D01CCCD0486CAD60068D4B7 /* Frameworks */,
+ 8D01CCCF0486CAD60068D4B7 /* Rez */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = JuceDemoPlugin;
+ productInstallPath = "$(HOME)/Library/Bundles";
+ productName = JuceDemoPlugin;
+ productReference = 8D01CCD20486CAD60068D4B7 /* JuceDemoPlugin.component */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 089C1669FE841209C02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 3E4BA247089833B7007656EC /* Build configuration list for PBXProject "JuceDemoPlugin" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 089C166AFE841209C02AAC07 /* JuceDemoPlugin */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 843796FF0EFC022E002A2725 /* Products */;
+ ProjectRef = 843796FE0EFC022E002A2725 /* PluginLibrary.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ 8D01CCC60486CAD60068D4B7 /* JuceDemoPlugin */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ 843797030EFC022E002A2725 /* libPluginLibrary.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libPluginLibrary.a;
+ remoteRef = 843797020EFC022E002A2725 /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D01CCC90486CAD60068D4B7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D01CCCA0486CAD60068D4B7 /* InfoPlist.strings in Resources */,
+ 843796F60EFC0102002A2725 /* CommonDebugSettings.xcconfig in Resources */,
+ 843796F70EFC0102002A2725 /* CommonReleaseSettings.xcconfig in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ 8D01CCCF0486CAD60068D4B7 /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 843792B50EFBF175002A2725 /* juce_AU_Resources.r in Rez */,
+ 843796E00EFBFD16002A2725 /* juce_RTAS_MacResources.r in Rez */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D01CCCB0486CAD60068D4B7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8BA05AAE072073D300365D66 /* AUBase.cpp in Sources */,
+ 8BA05AB0072073D300365D66 /* AUDispatch.cpp in Sources */,
+ 8BA05AB2072073D300365D66 /* AUInputElement.cpp in Sources */,
+ 8BA05AB4072073D300365D66 /* AUOutputElement.cpp in Sources */,
+ 8BA05AB7072073D300365D66 /* AUScopeElement.cpp in Sources */,
+ 8BA05AB9072073D300365D66 /* ComponentBase.cpp in Sources */,
+ 8BA05AC6072073D300365D66 /* AUEffectBase.cpp in Sources */,
+ 8BA05AD2072073D300365D66 /* AUBuffer.cpp in Sources */,
+ 8BA05AD4072073D300365D66 /* AUDebugDispatcher.cpp in Sources */,
+ 8BA05AE50720742100365D66 /* CAAudioChannelLayout.cpp in Sources */,
+ 8BA05AE70720742100365D66 /* CAMutex.cpp in Sources */,
+ 8BA05AE90720742100365D66 /* CAStreamBasicDescription.cpp in Sources */,
+ 8BA05B070720754400365D66 /* CAAUParameter.cpp in Sources */,
+ 3EEA126E089847F5002C6BFC /* CAVectorUnit.cpp in Sources */,
+ 843792AA0EFBF14B002A2725 /* DemoEditorComponent.cpp in Sources */,
+ 843792AC0EFBF14B002A2725 /* DemoJuceFilter.cpp in Sources */,
+ 843792B00EFBF14B002A2725 /* juce_LibrarySource.mm in Sources */,
+ 843792B60EFBF175002A2725 /* juce_AU_Wrapper.mm in Sources */,
+ 843796690EFBF357002A2725 /* AUMIDIBase.cpp in Sources */,
+ 8437966B0EFBF357002A2725 /* AUMIDIEffectBase.cpp in Sources */,
+ 8437966D0EFBF357002A2725 /* AUOutputBase.cpp in Sources */,
+ 843796710EFBF357002A2725 /* MusicDeviceBase.cpp in Sources */,
+ 8437967F0EFBF5E4002A2725 /* juce_VST_Wrapper.cpp in Sources */,
+ 843796800EFBF5E4002A2725 /* juce_VST_Wrapper.mm in Sources */,
+ 843796DC0EFBFD16002A2725 /* juce_RTAS_DigiCode1.cpp in Sources */,
+ 843796DD0EFBFD16002A2725 /* juce_RTAS_DigiCode2.cpp in Sources */,
+ 843796DE0EFBFD16002A2725 /* juce_RTAS_DigiCode3.cpp in Sources */,
+ 843796E10EFBFD16002A2725 /* juce_RTAS_MacUtilities.mm in Sources */,
+ 843796E20EFBFD16002A2725 /* juce_RTAS_Wrapper.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C167EFE841241C02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 3E4BA244089833B7007656EC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ /Developer/Headers/FlatCarbon,
+ "~/stuff/vstsdk2.4",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/PlugInLibrary/**\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/DSPManager/**\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/Encryption\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/GraphicsExtensions\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/common\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/common/PI_LibInterface\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/PACEProtection/**\"",
+ "\"$(MacBag)/../AlturaPorts/OMS/Headers\"",
+ "\"$(MacBag)/../AlturaPorts/Fic/Interfaces/**\"",
+ "\"$(MacBag)/../AlturaPorts/Fic/Source/SignalNets\"",
+ "\"$(MacBag)/../AlturaPorts/DSIPublicInterface/PublicHeaders\"",
+ "\"$(MacBag)/../DAEWin/Include\"",
+ "\"$(MacBag)/../AlturaPorts/DigiPublic/Interfaces\"",
+ "\"$(MacBag)/../AlturaPorts/DigiPublic\"",
+ "\"$(MacBag)/../AlturaPorts/NewFileLibs/DOA\"",
+ "\"$(MacBag)/../AlturaPorts/NewFileLibs/Cmn\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SignalProcessing/**\"",
+ "\"$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/inc\"",
+ "\"$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/utils\"",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_STYLE = Bundle;
+ MacBag = /Users/jules/stuff/PT_73_SDK/MacBag;
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Examples/CoreAudio/AudioUnits/AUPublic/AUBase\"";
+ PRODUCT_NAME = JuceDemoPlugin;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ };
+ name = Debug;
+ };
+ 3E4BA245089833B7007656EC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GENERATE_PKGINFO_FILE = YES;
+ HEADER_SEARCH_PATHS = (
+ /Developer/Headers/FlatCarbon,
+ "~/stuff/vstsdk2.4",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/PlugInLibrary/**\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/DSPManager/**\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/Encryption\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SupplementalPlugInLib/GraphicsExtensions\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/common\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/common/PI_LibInterface\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/PACEProtection/**\"",
+ "\"$(MacBag)/../AlturaPorts/OMS/Headers\"",
+ "\"$(MacBag)/../AlturaPorts/Fic/Interfaces/**\"",
+ "\"$(MacBag)/../AlturaPorts/Fic/Source/SignalNets\"",
+ "\"$(MacBag)/../AlturaPorts/DSIPublicInterface/PublicHeaders\"",
+ "\"$(MacBag)/../DAEWin/Include\"",
+ "\"$(MacBag)/../AlturaPorts/DigiPublic/Interfaces\"",
+ "\"$(MacBag)/../AlturaPorts/DigiPublic\"",
+ "\"$(MacBag)/../AlturaPorts/NewFileLibs/DOA\"",
+ "\"$(MacBag)/../AlturaPorts/NewFileLibs/Cmn\"",
+ "\"$(MacBag)/../AlturaPorts/TDMPlugIns/SignalProcessing/**\"",
+ "\"$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/inc\"",
+ "\"$(MacBag)/../AvidCode/AVX2sdk/AVX/avx2/avx2sdk/utils\"",
+ );
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Library/Audio/Plug-Ins/Components/";
+ LIBRARY_STYLE = Bundle;
+ OTHER_LDFLAGS = "-bundle";
+ OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -d ppc64_$ppc64 -d x86_64_$x86_64 -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers -I \"$(DEVELOPER_DIR)/Examples/CoreAudio/AudioUnits/AUPublic/AUBase\"";
+ PRODUCT_NAME = JuceDemoPlugin;
+ WARNING_CFLAGS = (
+ "-Wmost",
+ "-Wno-four-char-constants",
+ "-Wno-unknown-pragmas",
+ );
+ WRAPPER_EXTENSION = component;
+ };
+ name = Release;
+ };
+ 3E4BA248089833B7007656EC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 843796F40EFC0102002A2725 /* CommonDebugSettings.xcconfig */;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 3E4BA249089833B7007656EC /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 843796F50EFC0102002A2725 /* CommonReleaseSettings.xcconfig */;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 3E4BA243089833B7007656EC /* Build configuration list for PBXNativeTarget "JuceDemoPlugin" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3E4BA244089833B7007656EC /* Debug */,
+ 3E4BA245089833B7007656EC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+ 3E4BA247089833B7007656EC /* Build configuration list for PBXProject "JuceDemoPlugin" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3E4BA248089833B7007656EC /* Debug */,
+ 3E4BA249089833B7007656EC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 089C1669FE841209C02AAC07 /* Project object */;
+}
diff --git a/extras/audio plugins/demo/build/win32/JuceDemoPlugin.sln b/extras/audio plugins/demo/build/win32/JuceDemoPlugin.sln
new file mode 100644
index 0000000000..96a6517390
--- /dev/null
+++ b/extras/audio plugins/demo/build/win32/JuceDemoPlugin.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JuceDemoPlugin", "JuceDemoPlugin.vcproj", "{39DADE4E-B715-4809-AD10-2F5A4213D633}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {39DADE4E-B715-4809-AD10-2F5A4213D633}.Debug|Win32.ActiveCfg = Debug|Win32
+ {39DADE4E-B715-4809-AD10-2F5A4213D633}.Debug|Win32.Build.0 = Debug|Win32
+ {39DADE4E-B715-4809-AD10-2F5A4213D633}.Release|Win32.ActiveCfg = Release|Win32
+ {39DADE4E-B715-4809-AD10-2F5A4213D633}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/extras/audio plugins/demo/build/win32/JuceDemoPlugin.vcproj b/extras/audio plugins/demo/build/win32/JuceDemoPlugin.vcproj
new file mode 100644
index 0000000000..661e357003
--- /dev/null
+++ b/extras/audio plugins/demo/build/win32/JuceDemoPlugin.vcproj
@@ -0,0 +1,347 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/extras/audio plugins/demo/src/JucePluginCharacteristics.h b/extras/audio plugins/demo/src/JucePluginCharacteristics.h
index e8dc81601e..08db649a94 100644
--- a/extras/audio plugins/demo/src/JucePluginCharacteristics.h
+++ b/extras/audio plugins/demo/src/JucePluginCharacteristics.h
@@ -1,270 +1,285 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#ifndef __JUCE_PLUGIN_CHARACTERISTICS_H__
-#define __JUCE_PLUGIN_CHARACTERISTICS_H__
-
-
-//==============================================================================
-/* All of the following settings need to be defined for your plugin.
-
- Go through each of these definitions and check that it's correctly
- set-up before trying to do a build.
-*/
-
-//==============================================================================
-/* Generic settings */
-
-/** The name of your plugin. (Try to keep this as short as possible)
-*/
-#define JucePlugin_Name "Juce Demo Plugin"
-
-/** A longer decription of your plugin.
-*/
-#define JucePlugin_Desc "A Demo Plugin demonstrating Juce"
-
-/** The name of your company. (Try to keep this as short as possible)
-*/
-#define JucePlugin_Manufacturer "Raw Material Software"
-
-/** A four-character code for your company.
- Use single quotes - this isn't a string!
-*/
-#define JucePlugin_ManufacturerCode 'RawM'
-
-/** A unique four-character code for your plugin.
- Use single quotes - this isn't a string!
-
- Note that for AU compatibility, this must contain at least one
- upper-case letter.
-*/
-#define JucePlugin_PluginCode 'JcDm'
-
-//==============================================================================
-/** The maximum number of channels of audio input that the plugin can handle.
-
- The actual number of channels supplied may be less than this, depending on the host.
- For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
- of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
- and the host will choose one of these, but you should still set the max number of
- channels correctly.
-
- As soon as a plugin's prepareToPlay() method is called, you can find out the actual
- number of channels that will be used with the AudioProcessor::getNumInputChannels()
- method.
-*/
-#define JucePlugin_MaxNumInputChannels 2
-
-/** The maximum number of channels of audio output that the plugin can handle.
-
- The actual number of channels supplied may be less than this, depending on the host.
- For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
- of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
- and the host will choose one of these, but you should still set the max number of
- channels correctly.
-
- As soon as a plugin's prepareToPlay() method is called, you can find out the actual
- number of channels that will be used with the AudioProcessor::getNumOutputChannels()
- method.
-*/
-#define JucePlugin_MaxNumOutputChannels 2
-
-/** This allows the plugin to specify the configurations of input/output channels that
- they can support.
-
- AU and RTAS hosts will use this information, although VSTs only have a concept of
- a maximum number of channels.
-
- The list is a set of pairs of values in the form { numInputs, numOutputs }, and each
- pair indicates a valid configuration that the plugin can handle.
-
- So for example, {1, 1}, {2, 2} means that the plugin can be used in just two
- configurations: either with 1 input and 1 output, or with 2 inputs and 2 outputs. If
- you used this in Pro-Tools, the plugin could be placed on a mono or stereo track.
- If the list was just {1, 1}, then Pro-Tools would only allow it to be used as a mono
- plugin.
-
- As soon as a plugin's prepareToPlay() method is called, you can find out the actual
- number of channels that the host has connected to the plugin by using the
- AudioProcessor::getNumOutputChannels() and AudioFilterBase::getNumInputChannels()
- methods.
-*/
-#define JucePlugin_PreferredChannelConfigurations { 1, 1 }, { 2, 2 }
-
-//==============================================================================
-/** Set this value to 1 if your plugin is a synth, or 0 if it isn't.
-*/
-#define JucePlugin_IsSynth 0
-
-/** Set this to 1 if your plugin needs to receive midi messages, or 0 if
- it doesn't.
-*/
-#define JucePlugin_WantsMidiInput 1
-
-/** Set this to 1 if your plugin wants to output midi messages, or 0 if
- it doesn't.
-*/
-#define JucePlugin_ProducesMidiOutput 1
-
-/** If this is 1, it means that when the plugins input buffers are
- silent, it's output will be too.
-
- Some hosts may use this to avoid calling the plugin when no audio
- would be produced.
-*/
-#define JucePlugin_SilenceInProducesSilenceOut 0
-
-/** If set to 1, this hints that the host should ignore any keys that are pressed
- when the plugin has keyboard focus. If 0, then the host should still execute
- any shortcut keys that are pressed, even if the plugin does have focus.
-
- Various hosts/platforms may deal with this differently, or ignore it.
-*/
-#define JucePlugin_EditorRequiresKeyboardFocus 1
-
-
-//==============================================================================
-/** A version number
-*/
-#define JucePlugin_VersionCode 0x00010100
-
-#define JucePlugin_VersionString "1.1"
-
-
-//==============================================================================
-/* VST settings */
-
-/** For VSTs, if you're compiling against the V2.3 SDK, set this to zero. If
- you're using V2.4 or later, make sure it's set to 1.
-*/
-#define JUCE_USE_VSTSDK_2_4 1
-
-/** Defines a UID for your VST plugin.
- The default setting here is probably fine, unless you specifically need
- a custom value. It's passed to the setUniqueID() method of the plugin class.
-*/
-#define JucePlugin_VSTUniqueID JucePlugin_PluginCode
-
-/** Defines the type of plugin. For most pursposes, you don't need to change this
- setting.
-*/
-#if JucePlugin_IsSynth
- #define JucePlugin_VSTCategory kPlugCategSynth
-#else
- #define JucePlugin_VSTCategory kPlugCategEffect
-#endif
-
-//==============================================================================
-/* AudioUnit settings */
-
-/** Defines the major type of plugin - see AUComponent.h for the available options.
- If it's an effect, you should use kAudioUnitType_Effect. For a synth, you'll
- need to use kAudioUnitType_MusicEffect or kAudioUnitType_MusicDevice.
-*/
-#if JucePlugin_IsSynth
- #define JucePlugin_AUMainType kAudioUnitType_MusicDevice
-#else
- #define JucePlugin_AUMainType kAudioUnitType_Effect
-#endif
-
-/** A 4-character plugin ID code that should be unique.
-
- You can leave this using the generic value JucePlugin_PluginCode, or
- override it if necessary.
-
- Note that for AU, this must contain at least one upper-case letter.
-*/
-#define JucePlugin_AUSubType JucePlugin_PluginCode
-
-/** A prefix for the names of exported entry-point functions that the component exposes.
-
- It's very important that your plugin's .exp file contains two entries that correspond to
- this name. So for example if you set the prefix to "abc" then your exports
- file must contain:
-
- _abcEntry
- _abcViewEntry
-*/
-#define JucePlugin_AUExportPrefix JuceDemoAU
-
-/** This is the same as JucePlugin_AUExportPrefix, but in quotes
- (needed for the resource compiler...)
-*/
-#define JucePlugin_AUExportPrefixQuoted "JuceDemoAU"
-
-/** A 4-character manufacturer code - this is your company name.
- You can leave this using the generic value JucePlugin_ManufacturerCode, or
- override it if necessary.
-*/
-#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode
-
-/** If you define this value to be the same as the CFBundleIdentifier in your
- plugin's plist, it allows the plugin to work out its own path, which is
- needed if you want to use File::getSpecialLocation (currentExecutableFile)
-*/
-#define JucePlugin_CFBundleIdentifier "com.rawmaterialsoftware.JuceDemo"
-
-//==============================================================================
-/* RTAS settings */
-
-/** How to categorise this plugin.
-
- For a synth you probably want to set this to ePlugInCategory_SWGenerators.
- For an effect, you could choose one of:
- ePlugInCategory_None, ePlugInCategory_EQ, ePlugInCategory_Dynamics,
- ePlugInCategory_PitchShift, ePlugInCategory_Reverb, ePlugInCategory_Delay,
- ePlugInCategory_Modulation, ePlugInCategory_Harmonic, ePlugInCategory_NoiseReduction,
- ePlugInCategory_Dither, ePlugInCategory_SoundField
-
- (All values are listed in FicPluginEnums.h)
-*/
-#if JucePlugin_IsSynth
- #define JucePlugin_RTASCategory ePlugInCategory_SWGenerators
-#else
- #define JucePlugin_RTASCategory ePlugInCategory_None
-#endif
-
-/** A 4-character manufacturer code - this is your company name.
- You can leave this using the generic value JucePlugin_ManufacturerCode, or
- override it if necessary.
-*/
-#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode
-
-/** A 4-character plugin ID code that should be unique.
- You can leave this using the generic value JucePlugin_PluginCode, or
- override it if necessary.
-*/
-#define JucePlugin_RTASProductId JucePlugin_PluginCode
-
-
-//==============================================================================
-
-#endif
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+#ifndef __JUCE_PLUGIN_CHARACTERISTICS_H__
+#define __JUCE_PLUGIN_CHARACTERISTICS_H__
+
+
+//==============================================================================
+/* All of the following settings need to be defined for your plugin.
+
+ Go through each of these definitions and check that it's correctly
+ set-up before trying to do a build.
+*/
+
+
+//==============================================================================
+/* Plugin Formats to build */
+
+#define JucePlugin_Build_VST 1
+#define JucePlugin_Build_RTAS 0
+#define JucePlugin_Build_AU 1
+
+
+//==============================================================================
+/* Generic settings */
+
+/** The name of your plugin. (Try to keep this as short as possible)
+*/
+#define JucePlugin_Name "Juce Demo Plugin"
+
+/** A longer decription of your plugin.
+*/
+#define JucePlugin_Desc "A Demo Plugin demonstrating Juce"
+
+/** The name of your company. (Try to keep this as short as possible)
+*/
+#define JucePlugin_Manufacturer "Raw Material Software"
+
+/** A four-character code for your company.
+ Use single quotes - this isn't a string!
+*/
+#define JucePlugin_ManufacturerCode 'RawM'
+
+/** A unique four-character code for your plugin.
+ Use single quotes - this isn't a string!
+
+ Note that for AU compatibility, this must contain at least one
+ upper-case letter.
+*/
+#define JucePlugin_PluginCode 'JcDm'
+
+//==============================================================================
+/** The maximum number of channels of audio input that the plugin can handle.
+
+ The actual number of channels supplied may be less than this, depending on the host.
+ For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
+ of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
+ and the host will choose one of these, but you should still set the max number of
+ channels correctly.
+
+ As soon as a plugin's prepareToPlay() method is called, you can find out the actual
+ number of channels that will be used with the AudioProcessor::getNumInputChannels()
+ method.
+*/
+#define JucePlugin_MaxNumInputChannels 2
+
+/** The maximum number of channels of audio output that the plugin can handle.
+
+ The actual number of channels supplied may be less than this, depending on the host.
+ For VSTs, you specify a maximum number of channels, for AUs and RTAS a set
+ of channel configurations is specified in JucePlugin_PreferredChannelConfigurations
+ and the host will choose one of these, but you should still set the max number of
+ channels correctly.
+
+ As soon as a plugin's prepareToPlay() method is called, you can find out the actual
+ number of channels that will be used with the AudioProcessor::getNumOutputChannels()
+ method.
+*/
+#define JucePlugin_MaxNumOutputChannels 2
+
+/** This allows the plugin to specify the configurations of input/output channels that
+ they can support.
+
+ AU and RTAS hosts will use this information, although VSTs only have a concept of
+ a maximum number of channels.
+
+ The list is a set of pairs of values in the form { numInputs, numOutputs }, and each
+ pair indicates a valid configuration that the plugin can handle.
+
+ So for example, {1, 1}, {2, 2} means that the plugin can be used in just two
+ configurations: either with 1 input and 1 output, or with 2 inputs and 2 outputs. If
+ you used this in Pro-Tools, the plugin could be placed on a mono or stereo track.
+ If the list was just {1, 1}, then Pro-Tools would only allow it to be used as a mono
+ plugin.
+
+ As soon as a plugin's prepareToPlay() method is called, you can find out the actual
+ number of channels that the host has connected to the plugin by using the
+ AudioProcessor::getNumOutputChannels() and AudioFilterBase::getNumInputChannels()
+ methods.
+*/
+#define JucePlugin_PreferredChannelConfigurations { 1, 1 }, { 2, 2 }
+
+//==============================================================================
+/** Set this value to 1 if your plugin is a synth, or 0 if it isn't.
+*/
+#define JucePlugin_IsSynth 0
+
+/** Set this to 1 if your plugin needs to receive midi messages, or 0 if
+ it doesn't.
+*/
+#define JucePlugin_WantsMidiInput 1
+
+/** Set this to 1 if your plugin wants to output midi messages, or 0 if
+ it doesn't.
+*/
+#define JucePlugin_ProducesMidiOutput 1
+
+/** If this is 1, it means that when the plugins input buffers are
+ silent, it's output will be too.
+
+ Some hosts may use this to avoid calling the plugin when no audio
+ would be produced.
+*/
+#define JucePlugin_SilenceInProducesSilenceOut 0
+
+/** If set to 1, this hints that the host should ignore any keys that are pressed
+ when the plugin has keyboard focus. If 0, then the host should still execute
+ any shortcut keys that are pressed, even if the plugin does have focus.
+
+ Various hosts/platforms may deal with this differently, or ignore it.
+*/
+#define JucePlugin_EditorRequiresKeyboardFocus 1
+
+
+//==============================================================================
+/** A version number
+*/
+#define JucePlugin_VersionCode 0x00010100
+
+#define JucePlugin_VersionString "1.1"
+
+
+//==============================================================================
+/* VST settings */
+
+/** For VSTs, if you're compiling against the V2.3 SDK, set this to zero. If
+ you're using V2.4 or later, make sure it's set to 1.
+*/
+#define JUCE_USE_VSTSDK_2_4 1
+
+/** Defines a UID for your VST plugin.
+ The default setting here is probably fine, unless you specifically need
+ a custom value. It's passed to the setUniqueID() method of the plugin class.
+*/
+#define JucePlugin_VSTUniqueID JucePlugin_PluginCode
+
+/** Defines the type of plugin. For most pursposes, you don't need to change this
+ setting.
+*/
+#if JucePlugin_IsSynth
+ #define JucePlugin_VSTCategory kPlugCategSynth
+#else
+ #define JucePlugin_VSTCategory kPlugCategEffect
+#endif
+
+//==============================================================================
+/* AudioUnit settings */
+
+/** Defines the major type of plugin - see AUComponent.h for the available options.
+ If it's an effect, you should use kAudioUnitType_Effect. For a synth, you'll
+ need to use kAudioUnitType_MusicEffect or kAudioUnitType_MusicDevice.
+*/
+#if JucePlugin_IsSynth
+ #define JucePlugin_AUMainType kAudioUnitType_MusicDevice
+#else
+ #define JucePlugin_AUMainType kAudioUnitType_Effect
+#endif
+
+/** A 4-character plugin ID code that should be unique.
+
+ You can leave this using the generic value JucePlugin_PluginCode, or
+ override it if necessary.
+
+ Note that for AU, this must contain at least one upper-case letter.
+*/
+#define JucePlugin_AUSubType JucePlugin_PluginCode
+
+/** A prefix for the names of exported entry-point functions that the component exposes.
+
+ It's very important that your plugin's .exp file contains two entries that correspond to
+ this name. So for example if you set the prefix to "abc" then your exports
+ file must contain:
+
+ _abcEntry
+ _abcViewEntry
+*/
+#define JucePlugin_AUExportPrefix JuceDemoAU
+
+/** This is the same as JucePlugin_AUExportPrefix, but in quotes
+ (needed for the resource compiler...)
+*/
+#define JucePlugin_AUExportPrefixQuoted "JuceDemoAU"
+
+/** A 4-character manufacturer code - this is your company name.
+ You can leave this using the generic value JucePlugin_ManufacturerCode, or
+ override it if necessary.
+*/
+#define JucePlugin_AUManufacturerCode JucePlugin_ManufacturerCode
+
+/** If you define this value to be the same as the CFBundleIdentifier in your
+ plugin's plist, it allows the plugin to work out its own path, which is
+ needed if you want to use File::getSpecialLocation (currentExecutableFile)
+*/
+#define JucePlugin_CFBundleIdentifier "com.rawmaterialsoftware.JuceDemo"
+
+//==============================================================================
+/* RTAS settings */
+
+/** How to categorise this plugin.
+
+ For a synth you probably want to set this to ePlugInCategory_SWGenerators.
+ For an effect, you could choose one of:
+ ePlugInCategory_None, ePlugInCategory_EQ, ePlugInCategory_Dynamics,
+ ePlugInCategory_PitchShift, ePlugInCategory_Reverb, ePlugInCategory_Delay,
+ ePlugInCategory_Modulation, ePlugInCategory_Harmonic, ePlugInCategory_NoiseReduction,
+ ePlugInCategory_Dither, ePlugInCategory_SoundField
+
+ (All values are listed in FicPluginEnums.h)
+*/
+#if JucePlugin_IsSynth
+ #define JucePlugin_RTASCategory ePlugInCategory_SWGenerators
+#else
+ #define JucePlugin_RTASCategory ePlugInCategory_None
+#endif
+
+/** A 4-character manufacturer code - this is your company name.
+ You can leave this using the generic value JucePlugin_ManufacturerCode, or
+ override it if necessary.
+*/
+#define JucePlugin_RTASManufacturerCode JucePlugin_ManufacturerCode
+
+/** A 4-character plugin ID code that should be unique.
+ You can leave this using the generic value JucePlugin_PluginCode, or
+ override it if necessary.
+*/
+#define JucePlugin_RTASProductId JucePlugin_PluginCode
+
+/** You need to set this path to point to the location of the Digidesign WinBag
+ directory on your machine. (Only needed for Windows builds). Make sure you
+ don't put a slash on the end.
+*/
+#define JucePlugin_WinBag_path "C:\\essentials\\PT_73_SDK\\WinBag"
+
+
+//==============================================================================
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcess.cpp b/extras/audio plugins/demo/src/juce_AppConfig.h
similarity index 60%
rename from extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcess.cpp
rename to extras/audio plugins/demo/src/juce_AppConfig.h
index 2dfa8561b9..8cc549b973 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcess.cpp
+++ b/extras/audio plugins/demo/src/juce_AppConfig.h
@@ -29,16 +29,29 @@
==============================================================================
*/
-#include "juce_Wrapper_Header.h"
-
/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
+ This file contains settings that you might want to explicitly apply to
+ the your build.
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
+ Most of these are turned on or off by default, but you can override
+ that setting here by un-commenting it and giving it a 1 or 0 value.
*/
-#include "CEffectProcess.cpp"
+
+#define JUCE_QUICKTIME 0
+//#define JUCE_PLUGINHOST_VST 1
+//#define JUCE_PLUGINHOST_AU 1
+//#define JUCE_ONLY_BUILD_CORE_LIBRARY 1
+//#define JUCE_FORCE_DEBUG 1
+//#define JUCE_LOG_ASSERTIONS 1
+//#define JUCE_ASIO 1
+//#define JUCE_ALSA 1
+//#define JUCE_OPENGL 1
+//#define JUCE_USE_FLAC 1
+//#define JUCE_USE_OGGVORBIS 1
+//#define JUCE_USE_CDBURNER 1
+//#define JUCE_ENABLE_REPAINT_DEBUGGING 1
+//#define JUCE_USE_XINERAMA 1
+//#define JUCE_USE_XSHM 1
+//#define JUCE_CHECK_MEMORY_LEAKS 1
+//#define JUCE_CATCH_UNHANDLED_EXCEPTIONS 1
+//#define JUCE_STRINGS_ARE_UNICODE 1
diff --git a/extras/audio plugins/demo/src/juce_LibrarySource.cpp b/extras/audio plugins/demo/src/juce_LibrarySource.cpp
new file mode 100644
index 0000000000..37f1b22b2b
--- /dev/null
+++ b/extras/audio plugins/demo/src/juce_LibrarySource.cpp
@@ -0,0 +1,12 @@
+
+/*
+ This file includes the entire juce source tree via the amalgamated file.
+
+ You could add the amalgamated file directly to your project, but doing it
+ like this allows you to put your app's config settings in the
+ juce_AppConfig.h file and have them applied to both the juce headers and
+ the source code.
+*/
+
+#include "juce_AppConfig.h"
+#include "../../../../juce_amalgamated.cpp"
diff --git a/extras/audio plugins/demo/src/juce_LibrarySource.mm b/extras/audio plugins/demo/src/juce_LibrarySource.mm
new file mode 100644
index 0000000000..f6af73081b
--- /dev/null
+++ b/extras/audio plugins/demo/src/juce_LibrarySource.mm
@@ -0,0 +1,12 @@
+
+/*
+ This file includes the entire juce source tree via the amalgamated file.
+
+ You could add the amalgamated file directly to your project, but doing it
+ like this allows you to put your app's config settings in the
+ juce_AppConfig.h file and have them applied to both the juce headers and
+ the source code.
+*/
+
+#include "juce_AppConfig.h"
+#include "../../../../juce_amalgamated.mm"
diff --git a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r b/extras/audio plugins/wrapper/AU/juce_AU_Resources.r
similarity index 94%
rename from extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r
rename to extras/audio plugins/wrapper/AU/juce_AU_Resources.r
index ebc3783f78..3b5b0799a6 100644
--- a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r
+++ b/extras/audio plugins/wrapper/AU/juce_AU_Resources.r
@@ -1,57 +1,57 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include
-
-//==============================================================================
-/* The JucePluginCharacteristics.h file is supposed to live in your plugin-specific
- project directory, and has to contain info describing its name, type, etc. For
- more info, see the JucePluginCharacteristics.h that is included in the demo plugin.
-
- You may need to adjust the include path of your project to make sure it can be
- found by this include statement. (Don't hack this file to change the include path)
-*/
-#include "JucePluginCharacteristics.h"
-
-
-//==============================================================================
-// component resources for Audio Unit
-#define RES_ID 1000
-#define COMP_TYPE JucePlugin_AUMainType
-#define COMP_SUBTYPE JucePlugin_AUSubType
-#define COMP_MANUF JucePlugin_AUManufacturerCode
-#define VERSION JucePlugin_VersionCode
-#define NAME JucePlugin_Manufacturer ": " JucePlugin_Name
-#define DESCRIPTION JucePlugin_Desc
-#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "Entry"
-
-#include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r"
-
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+#include
+
+//==============================================================================
+/* The JucePluginCharacteristics.h file is supposed to live in your plugin-specific
+ project directory, and has to contain info describing its name, type, etc. For
+ more info, see the JucePluginCharacteristics.h that is included in the demo plugin.
+
+ You may need to adjust the include path of your project to make sure it can be
+ found by this include statement. (Don't hack this file to change the include path)
+*/
+#include "JucePluginCharacteristics.h"
+
+
+//==============================================================================
+// component resources for Audio Unit
+#define RES_ID 1000
+#define COMP_TYPE JucePlugin_AUMainType
+#define COMP_SUBTYPE JucePlugin_AUSubType
+#define COMP_MANUF JucePlugin_AUManufacturerCode
+#define VERSION JucePlugin_VersionCode
+#define NAME JucePlugin_Manufacturer ": " JucePlugin_Name
+#define DESCRIPTION JucePlugin_Desc
+#define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "Entry"
+
+#include "AUResources.r"
+
diff --git a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.mm b/extras/audio plugins/wrapper/AU/juce_AU_Wrapper.mm
similarity index 95%
rename from extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.mm
rename to extras/audio plugins/wrapper/AU/juce_AU_Wrapper.mm
index 1b74622606..3812ee0a98 100644
--- a/extras/audio plugins/wrapper/formats/AudioUnit/juce_AudioUnitWrapper.mm
+++ b/extras/audio plugins/wrapper/AU/juce_AU_Wrapper.mm
@@ -35,9 +35,9 @@
#include
#include "AUMIDIEffectBase.h"
#include "MusicDeviceBase.h"
-#include "../../juce_IncludeCharacteristics.h"
-#include "../../../../../juce_amalgamated.h"
-//#include "../../../../../juce.h"
+#include "../juce_PluginHeaders.h"
+
+#if JucePlugin_Build_AU
//==============================================================================
#define juceFilterObjectPropertyID 0x1a45ffe9
@@ -849,10 +849,14 @@ protected:
void componentMovedOrResized (Component& component, bool wasMoved, bool wasResized)
{
- if (wasResized)
+ //if (wasResized)
{
NSView* view = (NSView*) component.getWindowHandle();
- [[view superview] setFrameSize: NSMakeSize (component.getWidth(), component.getHeight())];
+ NSRect r = [[view superview] frame];
+ r.origin.y = r.origin.y + r.size.height - component.getHeight();
+ r.size.width = component.getWidth();
+ r.size.height = component.getHeight();
+ [[view superview] setFrame: r];
[view setFrame: NSMakeRect (0, 0, component.getWidth(), component.getHeight())];
[view setNeedsDisplay: YES];
}
@@ -987,8 +991,6 @@ private:
if (editorComp == 0)
return 0;
-DBG (String (inPreferredSize.width) + " " + String (inPreferredSize.height));
-DBG (String (editorComp->getWidth()) + " " + String (editorComp->getHeight()));
return [[[JuceUIViewClass alloc] initWithFilter: filter
withAU: au
@@ -1008,3 +1010,5 @@ extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix
JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry)
//JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry)
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode1.cpp
similarity index 51%
rename from extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode1.cpp
index a9a948b281..33a3bac12e 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode1.cpp
@@ -29,16 +29,37 @@
==============================================================================
*/
-#include "juce_Wrapper_Header.h"
+#include "juce_RTAS_DigiCode_Header.h"
+
+#if JucePlugin_Build_RTAS
/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
+ This file is used to include and build the required digidesign CPP files without your project
+ needing to reference the files directly. Because these files will be found via your include path,
+ this means that the project doesn't have to change to cope with people's SDKs being in different
+ locations.
- Note about include paths
+ Important note on Windows: In your project settings for the three juce_RTAS_DigiCode.cpp files and
+ the juce_RTAS_Wrapper.cpp file, you need to set the calling convention to "__stdcall".
+ If you don't do this, you'll get some unresolved externals and will spend a long time wondering what's
+ going on... All the other files in your project can be set to use the normal __cdecl convention.
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
+ If you get an error building the includes statements below, check your paths - there's a full
+ list of the necessary Digidesign paths in juce_RTAS_Wrapper.cpp
*/
+
+#if WINDOWS_VERSION
+ #undef _UNICODE
+ #undef UNICODE
+#endif
+
+#include "CEffectGroup.cpp"
+#include "CEffectGroupMIDI.cpp"
#include "CEffectMIDIUtils.cpp"
+#include "CEffectProcess.cpp"
+#include "CEffectProcessAS.cpp"
+#include "CEffectType.cpp"
+#include "CEffectTypeRTAS.cpp"
+#include "ChunkDataParser.cpp"
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessMIDI.cpp b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode2.cpp
similarity index 56%
rename from extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessMIDI.cpp
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode2.cpp
index 24313d8492..7359f2ba1c 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessMIDI.cpp
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode2.cpp
@@ -29,16 +29,26 @@
==============================================================================
*/
-#include "juce_Wrapper_Header.h"
+#include "juce_RTAS_DigiCode_Header.h"
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
+#if JucePlugin_Build_RTAS
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
+/*
+ This file is used to include and build the required digidesign CPP files without your project
+ needing to reference the files directly. Because these files will be found via your include path,
+ this means that the project doesn't have to change to cope with people's SDKs being in different
+ locations.
+
+ Important note on Windows: In your project settings for the three juce_RTAS_DigiCode.cpp files and
+ the juce_RTAS_Wrapper.cpp file, you need to set the calling convention to "__stdcall".
+ If you don't do this, you'll get some unresolved externals and will spend a long time wondering what's
+ going on... All the other files in your project can be set to use the normal __cdecl convention.
+
+ If you get an error building the includes statements below, check your paths - there's a full
+ list of the necessary Digidesign paths in juce_RTAS_Wrapper.cpp
*/
+
#include "CEffectProcessMIDI.cpp"
+#include "PlugInUtils.cpp"
+
+#endif
diff --git a/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode3.cpp b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode3.cpp
new file mode 100644
index 0000000000..7e794b6505
--- /dev/null
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode3.cpp
@@ -0,0 +1,95 @@
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+#include "juce_RTAS_DigiCode_Header.h"
+
+/*
+ This file is used to include and build the required digidesign CPP files without your project
+ needing to reference the files directly. Because these files will be found via your include path,
+ this means that the project doesn't have to change to cope with people's SDKs being in different
+ locations.
+
+ Important note on Windows: In your project settings for the three juce_RTAS_DigiCode.cpp files and
+ the juce_RTAS_Wrapper.cpp file, you need to set the calling convention to "__stdcall".
+ If you don't do this, you'll get some unresolved externals and will spend a long time wondering what's
+ going on... All the other files in your project can be set to use the normal __cdecl convention.
+
+ If you get an error building the includes statements below, check your paths - there's a full
+ list of the necessary Digidesign paths in juce_RTAS_Wrapper.cpp
+*/
+
+#if JucePlugin_Build_RTAS
+
+
+#if WINDOWS_VERSION
+//==============================================================================
+
+ #undef _UNICODE
+ #undef UNICODE
+
+ #if JucePlugin_Build_VST
+
+ #define DllMain DllMainRTAS
+ #include "DLLMain.cpp"
+ #undef DllMain
+
+ extern BOOL WINAPI DllMainVST (HINSTANCE instance, DWORD dwReason, LPVOID);
+
+ // This overloaded DllMain can work as either an RTAS or a VST..
+ extern "C" BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD ul_reason_for_call, LPVOID lpReserved)
+ {
+ if (GetModuleHandle ("DAE.DLL") != 0)
+ return DllMainRTAS (hInstance, ul_reason_for_call, lpReserved);
+ else
+ return DllMainVST (hInstance, ul_reason_for_call, lpReserved);
+ }
+ #else
+ #include "DLLMain.cpp"
+ #endif
+
+ #include "DefaultSwap.cpp"
+
+#else
+ //==============================================================================
+ #include "PlugInInitialize.cpp"
+ #include "Dispatcher.cpp"
+#endif
+
+#else
+
+#if _MSC_VER
+ // (defining these stubs just makes it easier to quickly turn off the RTAS build without removing
+ // the exports table from your project settings)
+ short __stdcall NewPlugIn (void*) { return 0; }
+ short __stdcall _PI_GetRoutineDescriptor (long, void*) { return 0; }
+#endif
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASCompileFlags.h b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode_Header.h
similarity index 79%
rename from extras/audio plugins/wrapper/formats/RTAS/juce_RTASCompileFlags.h
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode_Header.h
index 2427003106..58c853ab32 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASCompileFlags.h
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_DigiCode_Header.h
@@ -29,9 +29,12 @@
==============================================================================
*/
-#ifndef __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__
-#define __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__
+#ifndef __JUCE_RTAS_DIGICODE_HEADER_JUCEHEADER__
+#define __JUCE_RTAS_DIGICODE_HEADER_JUCEHEADER__
+#include "../juce_IncludeCharacteristics.h"
+
+//==============================================================================
#ifdef _MSC_VER
#define kCompileAsCodeResource 0
@@ -46,6 +49,12 @@
#define PLUGIN_SDK_BUILD 1
#define PLUGIN_SDK_DIRECTMIDI 1
+ // the Digidesign projects all use a struct alignment of 2..
+ #pragma pack (2)
+ #pragma warning (disable: 4267 4996 4311 4312 4103)
+
+ #include "ForcedInclude.h"
+
#else
#define kCompileAsCodeResource 0
@@ -60,4 +69,5 @@
#endif
-#endif // __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__
+
+#endif // __JUCE_RTAS_DIGICODE_HEADER_JUCEHEADER__
diff --git a/extras/audio plugins/wrapper/RTAS/juce_RTAS_MacResources.r b/extras/audio plugins/wrapper/RTAS/juce_RTAS_MacResources.r
new file mode 100644
index 0000000000..a40e1f397e
--- /dev/null
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_MacResources.r
@@ -0,0 +1,6 @@
+
+/*
+ This dummy file is added to the resources section of the project to
+ force XCode to create some resources for the dpm. If there aren't any
+ resources, PT will refuse to load the plugin..
+*/
diff --git a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.mm b/extras/audio plugins/wrapper/RTAS/juce_RTAS_MacUtilities.mm
similarity index 85%
rename from extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.mm
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_MacUtilities.mm
index 8f59313720..e6f76ab9e5 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.mm
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_MacUtilities.mm
@@ -1,82 +1,101 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include
-#include "../../../../../juce_amalgamated.h"
-
-//==============================================================================
-void* attachSubWindow (void* hostWindowRef, Component* comp)
-{
- const ScopedAutoReleasePool pool;
-
- NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef];
- [hostWindow retain];
-
- NSView* content = [hostWindow contentView];
- NSRect f = [content frame];
- f.size.width = comp->getWidth();
- f.size.height = comp->getHeight();
- [content setFrame: f];
-
- NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
- windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
-
- comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
-
-#if ! JucePlugin_EditorRequiresKeyboardFocus
- comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
-#else
- comp->addToDesktop (ComponentPeer::windowIsTemporary);
-#endif
-
- comp->setVisible (true);
-
- NSView* pluginView = (NSView*) comp->getWindowHandle();
- NSWindow* pluginWindow = [pluginView window];
-
- [hostWindow addChildWindow: pluginWindow
- ordered: NSWindowAbove];
- [hostWindow orderFront: nil];
- return hostWindow;
-}
-
-void removeSubWindow (void* nsWindow, Component* comp)
-{
- const ScopedAutoReleasePool pool;
-
- NSView* pluginView = (NSView*) comp->getWindowHandle();
- NSWindow* hostWindow = (NSWindow*) nsWindow;
- NSWindow* pluginWindow = [pluginView window];
-
- [hostWindow removeChildWindow: pluginWindow];
- comp->removeFromDesktop();
- [hostWindow release];
-}
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+// If you get an error here, you might need to make sure that
+// your build config files don't specify "C++" as one of the
+// flags in OTHER_CFLAGS, because that stops the compiler building
+// obj-c files correctly.
+@class dummyclassname;
+
+#include
+#include "../juce_PluginHeaders.h"
+
+#if JucePlugin_Build_RTAS
+
+
+//==============================================================================
+void initialiseMacRTAS()
+{
+ NSApplicationLoad();
+}
+
+void* attachSubWindow (void* hostWindowRef, Component* comp)
+{
+ const ScopedAutoReleasePool pool;
+
+ NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: hostWindowRef];
+ [hostWindow retain];
+ [hostWindow setCanHide: YES];
+ [hostWindow setReleasedWhenClosed: YES];
+
+ NSView* content = [hostWindow contentView];
+ NSRect f = [content frame];
+ f.size.width = comp->getWidth();
+ f.size.height = comp->getHeight();
+ [content setFrame: f];
+
+ NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
+ windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
+
+ comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
+
+#if ! JucePlugin_EditorRequiresKeyboardFocus
+ comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
+#else
+ comp->addToDesktop (ComponentPeer::windowIsTemporary);
+#endif
+
+ comp->setVisible (true);
+
+ NSView* pluginView = (NSView*) comp->getWindowHandle();
+ NSWindow* pluginWindow = [pluginView window];
+
+ [hostWindow addChildWindow: pluginWindow
+ ordered: NSWindowAbove];
+ [hostWindow orderFront: nil];
+ [pluginWindow orderFront: nil];
+ return hostWindow;
+}
+
+void removeSubWindow (void* nsWindow, Component* comp)
+{
+ const ScopedAutoReleasePool pool;
+
+ NSView* pluginView = (NSView*) comp->getWindowHandle();
+ NSWindow* hostWindow = (NSWindow*) nsWindow;
+ NSWindow* pluginWindow = [pluginView window];
+
+ [hostWindow removeChildWindow: pluginWindow];
+ comp->removeFromDesktop();
+ [hostWindow release];
+}
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/juce_RTAS_dlldefs.def b/extras/audio plugins/wrapper/RTAS/juce_RTAS_WinExports.def
similarity index 100%
rename from extras/audio plugins/wrapper/formats/RTAS/juce_RTAS_dlldefs.def
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_WinExports.def
diff --git a/extras/audio plugins/wrapper/formats/RTAS/DefaultResourceFile b/extras/audio plugins/wrapper/RTAS/juce_RTAS_WinResources.rsr
similarity index 100%
rename from extras/audio plugins/wrapper/formats/RTAS/DefaultResourceFile
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_WinResources.rsr
diff --git a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.cpp b/extras/audio plugins/wrapper/RTAS/juce_RTAS_WinUtilities.cpp
similarity index 93%
rename from extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.cpp
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_WinUtilities.cpp
index 9faa03d82a..e7801df102 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASUtilities.cpp
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_WinUtilities.cpp
@@ -31,7 +31,7 @@
#if _MSC_VER
-// (these functions are in a separate file because of problems including windows.h
+// (these functions are in their own file because of problems including windows.h
// at the same time as the Digi headers)
#include
@@ -40,12 +40,13 @@
#pragma pack (push, 8)
#endif
-#include "../../../../../juce_amalgamated.h"
+#include "../juce_PluginHeaders.h"
#ifdef _MSC_VER
#pragma pack (pop)
#endif
+#if JucePlugin_Build_RTAS
//==============================================================================
void JUCE_CALLTYPE attachSubWindow (void* hostWindow,
@@ -138,5 +139,5 @@ void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow)
}
#endif
-
+#endif
#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASWrapper.cpp b/extras/audio plugins/wrapper/RTAS/juce_RTAS_Wrapper.cpp
similarity index 96%
rename from extras/audio plugins/wrapper/formats/RTAS/juce_RTASWrapper.cpp
rename to extras/audio plugins/wrapper/RTAS/juce_RTAS_Wrapper.cpp
index 70a3769efd..700027f079 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/juce_RTASWrapper.cpp
+++ b/extras/audio plugins/wrapper/RTAS/juce_RTAS_Wrapper.cpp
@@ -1,979 +1,991 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_RTASCompileFlags.h"
-
-#ifdef _MSC_VER
- // the Digidesign projects all use a struct alignment of 2..
- #pragma pack (2)
- #pragma warning (disable: 4267)
-
- #include "ForcedInclude.h"
- #include "Mac2Win.H"
-#endif
-
-/* Note about include paths
- ------------------------
-
- To be able to include all the Digidesign headers correctly, you'll need to add this
- lot to your include path:
-
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\EffectClasses
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses\Interfaces
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Utilities
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\RTASP_Adapt
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\CoreClasses
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Controls
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Meters
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ViewClasses
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\DSPClasses
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Interfaces
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\common
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\common\Platform
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\SignalProcessing\Public
- c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugIns\DSPManager\Interfaces
- c:\yourdirectory\PT_711_SDK\AlturaPorts\SADriver\Interfaces
- c:\yourdirectory\PT_711_SDK\AlturaPorts\DigiPublic\Interfaces
- c:\yourdirectory\PT_711_SDK\AlturaPorts\Fic\Interfaces\DAEClient
- c:\yourdirectory\PT_711_SDK\AlturaPorts\NewFileLibs\Cmn
- c:\yourdirectory\PT_711_SDK\AlturaPorts\NewFileLibs\DOA
- c:\yourdirectory\PT_711_SDK\AlturaPorts\AlturaSource\PPC_H
- c:\yourdirectory\PT_711_SDK\AlturaPorts\AlturaSource\AppSupport
-
- NB. If you hit a huge pile of bugs around here, make sure that you've not got the
- Apple QuickTime headers before the PT headers in your path, because there are
- some filename clashes between them.
-
-*/
-#include "CEffectGroupMIDI.h"
-#include "CEffectProcessMIDI.h"
-#include "CEffectProcessRTAS.h"
-#include "CCustomView.h"
-#include "CEffectTypeRTAS.h"
-#include "CPluginControl.h"
-#include "CPluginControl_OnOff.h"
-#include "FicProcessTokens.h"
-
-//==============================================================================
-#ifdef _MSC_VER
- #pragma pack (push, 8)
-#endif
-
-#include "../../../../../juce_amalgamated.h"
-#include "../../juce_IncludeCharacteristics.h"
-
-#ifdef _MSC_VER
- #pragma pack (pop)
-#endif
-
-#undef Component
-#undef MemoryBlock
-
-//==============================================================================
-#if JUCE_WIN32
- extern void JUCE_CALLTYPE attachSubWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
- extern void JUCE_CALLTYPE resizeHostWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
- #if ! JucePlugin_EditorRequiresKeyboardFocus
- extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow);
- #endif
-#else
- extern void* attachSubWindow (void* hostWindowRef, JUCE_NAMESPACE::Component* comp);
- extern void removeSubWindow (void* nsWindow, JUCE_NAMESPACE::Component* comp);
-#endif
-
-const int midiBufferSize = 1024;
-const OSType juceChunkType = 'juce';
-static const int bypassControlIndex = 1;
-
-//==============================================================================
-/** Somewhere in the codebase of your plugin, you need to implement this function
- and make it return a new instance of the filter subclass that you're building.
-*/
-extern AudioProcessor* JUCE_CALLTYPE createPluginFilter();
-
-
-//==============================================================================
-static float longToFloat (const long n) throw()
-{
- return (float) ((((double) n) + (double) 0x80000000) / (double) 0xffffffff);
-}
-
-static long floatToLong (const float n) throw()
-{
- return roundDoubleToInt (jlimit (-(double) 0x80000000,
- (double) 0x7fffffff,
- n * (double) 0xffffffff - (double) 0x80000000));
-}
-
-static int numInstances = 0;
-
-//==============================================================================
-class JucePlugInProcess : public CEffectProcessMIDI,
- public CEffectProcessRTAS,
- public AudioProcessorListener,
- public AudioPlayHead,
- public AsyncUpdater
-{
-public:
- //==============================================================================
- JucePlugInProcess()
- : midiBufferNode (0),
- midiTransport (0),
- channels (0),
- prepared (false),
- sampleRate (44100.0)
- {
- juceFilter = createPluginFilter();
- jassert (juceFilter != 0);
-
- AddChunk (juceChunkType, "Juce Audio Plugin Data");
-
- ++numInstances;
- }
-
- ~JucePlugInProcess()
- {
- if (mLoggedIn)
- MIDILogOut();
-
- deleteAndZero (midiBufferNode);
- deleteAndZero (midiTransport);
-
- if (prepared)
- juceFilter->releaseResources();
-
- delete juceFilter;
- juce_free (channels);
-
- if (--numInstances == 0)
- shutdownJuce_GUI();
- }
-
- //==============================================================================
- class JuceCustomUIView : public CCustomView,
- public Timer
- {
- public:
- //==============================================================================
- JuceCustomUIView (AudioProcessor* const filter_,
- JucePlugInProcess* const process_)
- : filter (filter_),
- process (process_),
- wrapper (0),
- editorComp (0)
- {
- // setting the size in here crashes PT for some reason, so keep it simple..
- }
-
- ~JuceCustomUIView()
- {
- deleteEditorComp();
- }
-
- //==============================================================================
- void updateSize()
- {
- if (editorComp == 0)
- {
- editorComp = filter->createEditorIfNeeded();
- jassert (editorComp != 0);
- }
-
- Rect oldRect;
- GetRect (&oldRect);
-
- Rect r;
- r.left = 0;
- r.top = 0;
- r.right = editorComp->getWidth();
- r.bottom = editorComp->getHeight();
- SetRect (&r);
-
- if ((oldRect.right != r.right) || (oldRect.bottom != r.bottom))
- startTimer (50);
- }
-
- void timerCallback()
- {
- if (! JUCE_NAMESPACE::Component::isMouseButtonDownAnywhere())
- {
- stopTimer();
-
- // Send a token to the host to tell it about the resize
- SSetProcessWindowResizeToken token (process->fRootNameId, process->fRootNameId);
- FicSDSDispatchToken (&token);
- }
- }
-
- void attachToWindow (GrafPtr port)
- {
- if (port != 0)
- {
- updateSize();
-
-#if JUCE_WIN32
- void* const hostWindow = (void*) ASI_GethWnd ((WindowPtr) port);
-#else
- void* const hostWindow = (void*) GetWindowFromPort (port);
-#endif
- deleteAndZero (wrapper);
-
- wrapper = new EditorCompWrapper (hostWindow, editorComp, this);
- }
- else
- {
- deleteEditorComp();
- }
- }
-
- void DrawContents (Rect*)
- {
-#if JUCE_WIN32
- if (wrapper != 0)
- {
- ComponentPeer* const peer = wrapper->getPeer();
-
- if (peer != 0)
- {
- // (seems to be required in PT6.4, but not in 7.x)
- peer->repaint (0, 0, wrapper->getWidth(), wrapper->getHeight());
- }
- }
-#endif
- }
-
- void DrawBackground (Rect*) {}
-
- //==============================================================================
- private:
- AudioProcessor* const filter;
- JucePlugInProcess* const process;
- JUCE_NAMESPACE::Component* wrapper;
- AudioProcessorEditor* editorComp;
-
- void deleteEditorComp()
- {
- if (editorComp != 0 || wrapper != 0)
- {
-#if JUCE_MAC
- const ScopedAutoReleasePool pool;
-#endif
- PopupMenu::dismissAllActiveMenus();
-
- JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent();
- if (modalComponent != 0)
- modalComponent->exitModalState (0);
-
- filter->editorBeingDeleted (editorComp);
-
- deleteAndZero (editorComp);
- deleteAndZero (wrapper);
- }
- }
-
- //==============================================================================
- // A component to hold the AudioProcessorEditor, and cope with some housekeeping
- // chores when it changes or repaints.
- class EditorCompWrapper : public JUCE_NAMESPACE::Component
-#if ! JUCE_MAC
- , public FocusChangeListener
-#endif
- {
- public:
- EditorCompWrapper (void* const hostWindow_,
- Component* const editorComp,
- JuceCustomUIView* const owner_)
- : hostWindow (hostWindow_),
- owner (owner_),
- titleW (0),
- titleH (0)
- {
-#if JucePlugin_EditorRequiresKeyboardFocus
- setWantsKeyboardFocus (true);
-#else
- setWantsKeyboardFocus (false);
-#endif
- setOpaque (true);
- setBroughtToFrontOnMouseClick (true);
- setBounds (editorComp->getBounds());
- editorComp->setTopLeftPosition (0, 0);
- addAndMakeVisible (editorComp);
-
-#if JUCE_WIN32
- attachSubWindow (hostWindow, titleW, titleH, this);
-#else
- nsWindow = attachSubWindow (hostWindow, this);
-#endif
- setVisible (true);
-
-#if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus
- Desktop::getInstance().addFocusChangeListener (this);
-#endif
- }
-
- ~EditorCompWrapper()
- {
-#if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus
- Desktop::getInstance().removeFocusChangeListener (this);
-#endif
-
-#if JUCE_MAC
- removeSubWindow (nsWindow, this);
-#endif
- }
-
- void paint (Graphics&)
- {
- }
-
- void resized()
- {
- JUCE_NAMESPACE::Component* const c = getChildComponent (0);
-
- if (c != 0)
- c->setBounds (0, 0, getWidth(), getHeight());
-
- repaint();
- }
-
-#if JUCE_WIN32
- void globalFocusChanged (JUCE_NAMESPACE::Component*)
- {
- #if ! JucePlugin_EditorRequiresKeyboardFocus
- if (hasKeyboardFocus (true))
- passFocusToHostWindow (hostWindow);
- #endif
- }
-#endif
-
- void childBoundsChanged (JUCE_NAMESPACE::Component* child)
- {
- setSize (child->getWidth(), child->getHeight());
- child->setTopLeftPosition (0, 0);
-
-#if JUCE_WIN32
- resizeHostWindow (hostWindow, titleW, titleH, this);
-#endif
- owner->updateSize();
- }
-
- void userTriedToCloseWindow()
- {
- }
-
- //==============================================================================
- juce_UseDebuggingNewOperator
-
- private:
- void* const hostWindow;
- void* nsWindow;
- JuceCustomUIView* const owner;
- int titleW, titleH;
- };
- };
-
- JuceCustomUIView* getView() const
- {
- return dynamic_cast (fOurPlugInView);
- }
-
- void GetViewRect (Rect* size)
- {
- if (getView() != 0)
- getView()->updateSize();
-
- CEffectProcessRTAS::GetViewRect (size);
- }
-
- CPlugInView* CreateCPlugInView()
- {
- return new JuceCustomUIView (juceFilter, this);
- }
-
- void SetViewPort (GrafPtr port)
- {
- CEffectProcessRTAS::SetViewPort (port);
-
- if (getView() != 0)
- getView()->attachToWindow (port);
- }
-
- //==============================================================================
-protected:
- ComponentResult GetDelaySamplesLong (long* aNumSamples)
- {
- if (aNumSamples != 0)
- *aNumSamples = juceFilter != 0 ? juceFilter->getLatencySamples() : 0;
-
- return noErr;
- }
-
- //==============================================================================
- void EffectInit()
- {
- SFicPlugInStemFormats stems;
- GetProcessType()->GetStemFormats (&stems);
-
- juceFilter->setPlayConfigDetails (fNumInputs, fNumOutputs,
- juceFilter->getSampleRate(), juceFilter->getBlockSize());
-
- AddControl (new CPluginControl_OnOff ('bypa', "Master Bypass\nMastrByp\nMByp\nByp", false, true));
- DefineMasterBypassControlIndex (bypassControlIndex);
-
- for (int i = 0; i < juceFilter->getNumParameters(); ++i)
- AddControl (new JucePluginControl (juceFilter, i));
-
- // we need to do this midi log-in to get timecode, regardless of whether
- // the plugin actually uses midi...
- if (MIDILogIn() == noErr)
- {
-#if JucePlugin_WantsMidiInput
- CEffectType* const type = dynamic_cast (this->GetProcessType());
-
- if (type != 0)
- {
- char nodeName [64];
- type->GetProcessTypeName (63, nodeName);
- p2cstrcpy (nodeName, reinterpret_cast (nodeName));
-
- midiBufferNode = new CEffectMIDIOtherBufferedNode (&mMIDIWorld,
- 8192,
- eLocalNode,
- nodeName,
- midiBuffer);
-
- midiBufferNode->Initialize (1, true);
- }
-#endif
- }
-
- midiTransport = new CEffectMIDITransport (&mMIDIWorld);
-
- juceFilter->setPlayHead (this);
- juceFilter->addListener (this);
- }
-
- void handleAsyncUpdate()
- {
- if (! prepared)
- {
- sampleRate = gProcessGroup->GetSampleRate();
- jassert (sampleRate > 0);
-
- juce_free (channels);
- channels = (float**) juce_calloc (sizeof (float*) * jmax (juceFilter->getNumInputChannels(),
- juceFilter->getNumOutputChannels()));
-
- juceFilter->setPlayConfigDetails (fNumInputs, fNumOutputs,
- sampleRate, mRTGlobals->mHWBufferSizeInSamples);
-
- juceFilter->prepareToPlay (sampleRate,
- mRTGlobals->mHWBufferSizeInSamples);
-
- prepared = true;
- }
- }
-
- void RenderAudio (float** inputs, float** outputs, long numSamples)
- {
- if (! prepared)
- {
- triggerAsyncUpdate();
- bypassBuffers (inputs, outputs, numSamples);
- return;
- }
-
- if (mBypassed)
- {
- bypassBuffers (inputs, outputs, numSamples);
- return;
- }
-
-#if JucePlugin_WantsMidiInput
- midiEvents.clear();
-
- const Cmn_UInt32 bufferSize = mRTGlobals->mHWBufferSizeInSamples;
-
- if (midiBufferNode->GetAdvanceScheduleTime() != bufferSize)
- midiBufferNode->SetAdvanceScheduleTime (bufferSize);
-
- if (midiBufferNode->FillMIDIBuffer (mRTGlobals->mRunningTime, numSamples) == noErr)
- {
- jassert (midiBufferNode->GetBufferPtr() != 0);
- const int numMidiEvents = midiBufferNode->GetBufferSize();
-
- for (int i = 0; i < numMidiEvents; ++i)
- {
- const DirectMidiPacket& m = midiBuffer[i];
-
- jassert ((int) m.mTimestamp < numSamples);
-
- midiEvents.addEvent (m.mData, m.mLength,
- jlimit (0, (int) numSamples - 1, (int) m.mTimestamp));
- }
- }
-#endif
-
-#if defined (JUCE_DEBUG) || JUCE_LOG_ASSERTIONS
- const int numMidiEventsComingIn = midiEvents.getNumEvents();
- (void) numMidiEventsComingIn;
-#endif
-
- {
- const ScopedLock sl (juceFilter->getCallbackLock());
-
- const int numIn = juceFilter->getNumInputChannels();
- const int numOut = juceFilter->getNumOutputChannels();
- const int totalChans = jmax (numIn, numOut);
-
- if (juceFilter->isSuspended())
- {
- for (int i = 0; i < numOut; ++i)
- zeromem (outputs [i], sizeof (float) * numSamples);
- }
- else
- {
- {
- int i;
- for (i = 0; i < numOut; ++i)
- {
- channels[i] = outputs [i];
-
- if (i < numIn && inputs != outputs)
- memcpy (outputs [i], inputs[i], sizeof (float) * numSamples);
- }
-
- for (; i < numIn; ++i)
- channels [i] = inputs [i];
- }
-
- AudioSampleBuffer chans (channels, totalChans, numSamples);
-
- juceFilter->processBlock (chans, midiEvents);
- }
- }
-
- if (! midiEvents.isEmpty())
- {
-#if JucePlugin_ProducesMidiOutput
- const juce::uint8* midiEventData;
- int midiEventSize, midiEventPosition;
- MidiBuffer::Iterator i (midiEvents);
-
- while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition))
- {
-// jassert (midiEventPosition >= 0 && midiEventPosition < (int) numSamples);
-
- //xxx
- }
-#else
- // if your plugin creates midi messages, you'll need to set
- // the JucePlugin_ProducesMidiOutput macro to 1 in your
- // JucePluginCharacteristics.h file
- jassert (midiEvents.getNumEvents() <= numMidiEventsComingIn);
-#endif
-
- midiEvents.clear();
- }
- }
-
- //==============================================================================
- ComponentResult GetChunkSize (OSType chunkID, long* size)
- {
- if (chunkID == juceChunkType)
- {
- tempFilterData.setSize (0);
- juceFilter->getStateInformation (tempFilterData);
-
- *size = sizeof (SFicPlugInChunkHeader) + tempFilterData.getSize();
- return noErr;
- }
-
- return CEffectProcessMIDI::GetChunkSize (chunkID, size);
- }
-
- ComponentResult GetChunk (OSType chunkID, SFicPlugInChunk* chunk)
- {
- if (chunkID == juceChunkType)
- {
- if (tempFilterData.getSize() == 0)
- juceFilter->getStateInformation (tempFilterData);
-
- chunk->fSize = sizeof (SFicPlugInChunkHeader) + tempFilterData.getSize();
- tempFilterData.copyTo ((void*) chunk->fData, 0, tempFilterData.getSize());
-
- tempFilterData.setSize (0);
-
- return noErr;
- }
-
- return CEffectProcessMIDI::GetChunk (chunkID, chunk);
- }
-
- ComponentResult SetChunk (OSType chunkID, SFicPlugInChunk* chunk)
- {
- if (chunkID == juceChunkType)
- {
- tempFilterData.setSize (0);
-
- if (chunk->fSize - sizeof (SFicPlugInChunkHeader) > 0)
- {
- juceFilter->setStateInformation ((void*) chunk->fData,
- chunk->fSize - sizeof (SFicPlugInChunkHeader));
- }
-
- return noErr;
- }
-
- return CEffectProcessMIDI::SetChunk (chunkID, chunk);
- }
-
- //==============================================================================
- ComponentResult UpdateControlValue (long controlIndex, long value)
- {
- if (controlIndex != bypassControlIndex)
- juceFilter->setParameter (controlIndex - 2, longToFloat (value));
- else
- mBypassed = (value > 0);
-
- return CProcess::UpdateControlValue (controlIndex, value);
- }
-
- //==============================================================================
- bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info)
- {
- // this method can only be called while the plugin is running
- jassert (prepared);
-
- Cmn_Float64 bpm = 120.0;
- Cmn_Int32 num = 4, denom = 4;
- Cmn_Int64 ticks = 0;
- Cmn_Bool isPlaying = false;
-
- if (midiTransport != 0)
- {
- midiTransport->GetCurrentTempo (&bpm);
- midiTransport->IsTransportPlaying (&isPlaying);
- midiTransport->GetCurrentMeter (&num, &denom);
- midiTransport->GetCurrentTickPosition (&ticks);
- }
-
- info.bpm = bpm;
- info.timeSigNumerator = num;
- info.timeSigDenominator = denom;
- info.isPlaying = isPlaying;
- info.isRecording = false;
- info.ppqPosition = ticks / 960000.0;
- info.ppqPositionOfLastBarStart = 0; //xxx no idea how to get this correctly..
-
- // xxx incorrect if there are tempo changes, but there's no
- // other way of getting this info..
- info.timeInSeconds = ticks * (60.0 / 960000.0) / bpm;
-
- double framesPerSec = 24.0;
-
- switch (fTimeCodeInfo.mFrameRate)
- {
- case ficFrameRate_24Frame:
- info.frameRate = AudioPlayHead::fps24;
- break;
-
- case ficFrameRate_25Frame:
- info.frameRate = AudioPlayHead::fps25;
- framesPerSec = 25.0;
- break;
-
- case ficFrameRate_2997NonDrop:
- info.frameRate = AudioPlayHead::fps2997;
- framesPerSec = 29.97002997;
- break;
-
- case ficFrameRate_2997DropFrame:
- info.frameRate = AudioPlayHead::fps2997drop;
- framesPerSec = 29.97002997;
- break;
-
- case ficFrameRate_30NonDrop:
- info.frameRate = AudioPlayHead::fps30;
- framesPerSec = 30.0;
- break;
-
- case ficFrameRate_30DropFrame:
- info.frameRate = AudioPlayHead::fps30drop;
- framesPerSec = 30.0;
- break;
-
- case ficFrameRate_23976:
- // xxx not strictly true..
- info.frameRate = AudioPlayHead::fps24;
- framesPerSec = 23.976;
- break;
-
- default:
- info.frameRate = AudioPlayHead::fpsUnknown;
- break;
- }
-
- info.editOriginTime = fTimeCodeInfo.mFrameOffset / framesPerSec;
-
- return true;
- }
-
- void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue)
- {
- SetControlValue (index + 2, floatToLong (newValue));
- }
-
- void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index)
- {
- TouchControl (index + 2);
- }
-
- void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index)
- {
- ReleaseControl (index + 2);
- }
-
- void audioProcessorChanged (AudioProcessor*)
- {
- // xxx is there an RTAS equivalent?
- }
-
- //==============================================================================
-private:
- AudioProcessor* juceFilter;
- MidiBuffer midiEvents;
- CEffectMIDIOtherBufferedNode* midiBufferNode;
- CEffectMIDITransport* midiTransport;
- DirectMidiPacket midiBuffer [midiBufferSize];
-
- JUCE_NAMESPACE::MemoryBlock tempFilterData;
- float** channels;
- bool prepared;
- double sampleRate;
-
- void bypassBuffers (float** const inputs, float** const outputs, const long numSamples) const
- {
- for (int i = fNumOutputs; --i >= 0;)
- {
- if (i < fNumInputs)
- memcpy (outputs[i], inputs[i], numSamples * sizeof (float));
- else
- zeromem (outputs[i], numSamples * sizeof (float));
- }
- }
-
- //==============================================================================
- class JucePluginControl : public CPluginControl
- {
- public:
- //==============================================================================
- JucePluginControl (AudioProcessor* const juceFilter_, const int index_)
- : juceFilter (juceFilter_),
- index (index_)
- {
- }
-
- ~JucePluginControl()
- {
- }
-
- //==============================================================================
- OSType GetID() const { return index + 1; }
- long GetDefaultValue() const { return floatToLong (0); }
- void SetDefaultValue (long) {}
- long GetNumSteps() const { return 0xffffffff; }
-
- long ConvertStringToValue (const char* valueString) const
- {
- return floatToLong (String (valueString).getFloatValue());
- }
-
- Cmn_Bool IsKeyValid (long key) const { return true; }
-
- void GetNameOfLength (char* name, int maxLength, OSType inControllerType) const
- {
- juceFilter->getParameterName (index).copyToBuffer (name, maxLength);
- }
-
- long GetPriority() const { return kFicCooperativeTaskPriority; }
-
- long GetOrientation() const
- {
- return kDAE_LeftMinRightMax | kDAE_BottomMinTopMax
- | kDAE_RotarySingleDotMode | kDAE_RotaryLeftMinRightMax;
- }
-
- long GetControlType() const { return kDAE_ContinuousValues; }
-
- void GetValueString (char* valueString, int maxLength, long value) const
- {
- juceFilter->getParameterText (index).copyToBuffer (valueString, maxLength);
- }
-
- Cmn_Bool IsAutomatable() const
- {
- return juceFilter->isParameterAutomatable (index);
- }
-
- private:
- //==============================================================================
- AudioProcessor* const juceFilter;
- const int index;
-
- JucePluginControl (const JucePluginControl&);
- const JucePluginControl& operator= (const JucePluginControl&);
- };
-};
-
-
-//==============================================================================
-class JucePlugInGroup : public CEffectGroupMIDI
-{
-public:
- //==============================================================================
- JucePlugInGroup()
- {
- DefineManufacturerNamesAndID (JucePlugin_Manufacturer, JucePlugin_RTASManufacturerCode);
- DefinePlugInNamesAndVersion (createRTASName(), JucePlugin_VersionCode);
-
-#ifndef JUCE_DEBUG
- AddGestalt (pluginGestalt_IsCacheable);
-#endif
- }
-
- ~JucePlugInGroup()
- {
- shutdownJuce_GUI();
- shutdownJuce_NonGUI();
- }
-
- //==============================================================================
- void CreateEffectTypes()
- {
- const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations };
- const int numConfigs = numElementsInArray (channelConfigs);
-
- // You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations
- // value in your JucePluginCharacteristics.h file..
- jassert (numConfigs > 0);
-
- for (int i = 0; i < numConfigs; ++i)
- {
- CEffectType* const type
- = new CEffectTypeRTAS ('jcaa' + i,
- JucePlugin_RTASProductId,
- JucePlugin_RTASCategory);
-
- type->DefineTypeNames (createRTASName());
- type->DefineSampleRateSupport (eSupports48kAnd96kAnd192k);
-
- type->DefineStemFormats (getFormatForChans (channelConfigs [i][0]),
- getFormatForChans (channelConfigs [i][1]));
-
- type->AddGestalt (pluginGestalt_CanBypass);
- type->AddGestalt (pluginGestalt_SupportsVariableQuanta);
- type->AttachEffectProcessCreator (createNewProcess);
-
- AddEffectType (type);
- }
- }
-
- void Initialize()
- {
- CEffectGroupMIDI::Initialize();
- }
-
- //==============================================================================
-private:
- static CEffectProcess* createNewProcess()
- {
- // Juce setup
-#if JUCE_WIN32
- PlatformUtilities::setCurrentModuleInstanceHandle (gThisModule);
-#endif
- initialiseJuce_GUI();
-
- return new JucePlugInProcess();
- }
-
- static const String createRTASName()
- {
- return String (JucePlugin_Name) + T("\n")
- + String (JucePlugin_Name).substring (0, 4);
- }
-
- static EPlugIn_StemFormat getFormatForChans (const int numChans) throw()
- {
- switch (numChans)
- {
- case 0:
- return ePlugIn_StemFormat_Generic;
-
- case 1:
- return ePlugIn_StemFormat_Mono;
-
- case 2:
- return ePlugIn_StemFormat_Stereo;
-
- case 3:
- return ePlugIn_StemFormat_LCR;
-
- case 4:
- return ePlugIn_StemFormat_Quad;
-
- case 5:
- return ePlugIn_StemFormat_5dot0;
-
- case 6:
- return ePlugIn_StemFormat_5dot1;
-
- case 7:
- return ePlugIn_StemFormat_6dot1;
-
- case 8:
- return ePlugIn_StemFormat_7dot1;
-
- default:
- jassertfalse // hmm - not a valid number of chans for RTAS..
- break;
- }
-
- return ePlugIn_StemFormat_Generic;
- }
-};
-
-CProcessGroupInterface* CProcessGroup::CreateProcessGroup()
-{
- initialiseJuce_NonGUI();
- return new JucePlugInGroup();
-}
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+#include "juce_RTAS_DigiCode_Header.h"
+
+#if JucePlugin_Build_RTAS
+
+#ifdef _MSC_VER
+ #include "Mac2Win.H"
+#endif
+
+/* Note about include paths
+ ------------------------
+
+ To be able to include all the Digidesign headers correctly, you'll need to add this
+ lot to your include path:
+
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\EffectClasses
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ProcessClasses\Interfaces
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Utilities
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\RTASP_Adapt
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\CoreClasses
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Controls
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Meters
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\ViewClasses
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\DSPClasses
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\PluginLibrary\Interfaces
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\common
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\common\Platform
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugins\SignalProcessing\Public
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\TDMPlugIns\DSPManager\Interfaces
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\SADriver\Interfaces
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\DigiPublic\Interfaces
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\Fic\Interfaces\DAEClient
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\NewFileLibs\Cmn
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\NewFileLibs\DOA
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\AlturaSource\PPC_H
+ c:\yourdirectory\PT_711_SDK\AlturaPorts\AlturaSource\AppSupport
+
+ NB. If you hit a huge pile of bugs around here, make sure that you've not got the
+ Apple QuickTime headers before the PT headers in your path, because there are
+ some filename clashes between them.
+
+*/
+#include "CEffectGroupMIDI.h"
+#include "CEffectProcessMIDI.h"
+#include "CEffectProcessRTAS.h"
+#include "CCustomView.h"
+#include "CEffectTypeRTAS.h"
+#include "CPluginControl.h"
+#include "CPluginControl_OnOff.h"
+#include "FicProcessTokens.h"
+
+//==============================================================================
+#ifdef _MSC_VER
+ #pragma pack (push, 8)
+#endif
+
+#include "../juce_PluginHeaders.h"
+
+#ifdef _MSC_VER
+ #pragma pack (pop)
+
+ #if JUCE_DEBUG
+ #define PT_LIB_PATH JucePlugin_WinBag_path "\\Debug\\lib\\"
+ #else
+ #define PT_LIB_PATH JucePlugin_WinBag_path "\\Release\\lib\\"
+ #endif
+
+ #pragma comment(lib, PT_LIB_PATH "DAE.lib")
+ #pragma comment(lib, PT_LIB_PATH "DigiExt.lib")
+ #pragma comment(lib, PT_LIB_PATH "DSI.lib")
+ #pragma comment(lib, PT_LIB_PATH "PluginLib.lib")
+
+#endif
+
+#undef Component
+#undef MemoryBlock
+
+//==============================================================================
+#if JUCE_WIN32
+ extern void JUCE_CALLTYPE attachSubWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
+ extern void JUCE_CALLTYPE resizeHostWindow (void* hostWindow, int& titleW, int& titleH, JUCE_NAMESPACE::Component* comp);
+ #if ! JucePlugin_EditorRequiresKeyboardFocus
+ extern void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow);
+ #endif
+#else
+ extern void* attachSubWindow (void* hostWindowRef, JUCE_NAMESPACE::Component* comp);
+ extern void removeSubWindow (void* nsWindow, JUCE_NAMESPACE::Component* comp);
+#endif
+
+const int midiBufferSize = 1024;
+const OSType juceChunkType = 'juce';
+static const int bypassControlIndex = 1;
+
+//==============================================================================
+/** Somewhere in the codebase of your plugin, you need to implement this function
+ and make it return a new instance of the filter subclass that you're building.
+*/
+extern AudioProcessor* JUCE_CALLTYPE createPluginFilter();
+
+
+//==============================================================================
+static float longToFloat (const long n) throw()
+{
+ return (float) ((((double) n) + (double) 0x80000000) / (double) 0xffffffff);
+}
+
+static long floatToLong (const float n) throw()
+{
+ return roundDoubleToInt (jlimit (-(double) 0x80000000,
+ (double) 0x7fffffff,
+ n * (double) 0xffffffff - (double) 0x80000000));
+}
+
+static int numInstances = 0;
+
+//==============================================================================
+class JucePlugInProcess : public CEffectProcessMIDI,
+ public CEffectProcessRTAS,
+ public AudioProcessorListener,
+ public AudioPlayHead,
+ public AsyncUpdater
+{
+public:
+ //==============================================================================
+ JucePlugInProcess()
+ : midiBufferNode (0),
+ midiTransport (0),
+ channels (0),
+ prepared (false),
+ sampleRate (44100.0)
+ {
+ juceFilter = createPluginFilter();
+ jassert (juceFilter != 0);
+
+ AddChunk (juceChunkType, "Juce Audio Plugin Data");
+
+ ++numInstances;
+ }
+
+ ~JucePlugInProcess()
+ {
+ if (mLoggedIn)
+ MIDILogOut();
+
+ deleteAndZero (midiBufferNode);
+ deleteAndZero (midiTransport);
+
+ if (prepared)
+ juceFilter->releaseResources();
+
+ delete juceFilter;
+ juce_free (channels);
+
+ if (--numInstances == 0)
+ shutdownJuce_GUI();
+ }
+
+ //==============================================================================
+ class JuceCustomUIView : public CCustomView,
+ public Timer
+ {
+ public:
+ //==============================================================================
+ JuceCustomUIView (AudioProcessor* const filter_,
+ JucePlugInProcess* const process_)
+ : filter (filter_),
+ process (process_),
+ wrapper (0),
+ editorComp (0)
+ {
+ // setting the size in here crashes PT for some reason, so keep it simple..
+ }
+
+ ~JuceCustomUIView()
+ {
+ deleteEditorComp();
+ }
+
+ //==============================================================================
+ void updateSize()
+ {
+ if (editorComp == 0)
+ {
+ editorComp = filter->createEditorIfNeeded();
+ jassert (editorComp != 0);
+ }
+
+ Rect oldRect;
+ GetRect (&oldRect);
+
+ Rect r;
+ r.left = 0;
+ r.top = 0;
+ r.right = editorComp->getWidth();
+ r.bottom = editorComp->getHeight();
+ SetRect (&r);
+
+ if ((oldRect.right != r.right) || (oldRect.bottom != r.bottom))
+ startTimer (50);
+ }
+
+ void timerCallback()
+ {
+ if (! JUCE_NAMESPACE::Component::isMouseButtonDownAnywhere())
+ {
+ stopTimer();
+
+ // Send a token to the host to tell it about the resize
+ SSetProcessWindowResizeToken token (process->fRootNameId, process->fRootNameId);
+ FicSDSDispatchToken (&token);
+ }
+ }
+
+ void attachToWindow (GrafPtr port)
+ {
+ if (port != 0)
+ {
+ updateSize();
+
+#if JUCE_WIN32
+ void* const hostWindow = (void*) ASI_GethWnd ((WindowPtr) port);
+#else
+ void* const hostWindow = (void*) GetWindowFromPort (port);
+#endif
+ deleteAndZero (wrapper);
+
+ wrapper = new EditorCompWrapper (hostWindow, editorComp, this);
+ }
+ else
+ {
+ deleteEditorComp();
+ }
+ }
+
+ void DrawContents (Rect*)
+ {
+#if JUCE_WIN32
+ if (wrapper != 0)
+ {
+ ComponentPeer* const peer = wrapper->getPeer();
+
+ if (peer != 0)
+ {
+ // (seems to be required in PT6.4, but not in 7.x)
+ peer->repaint (0, 0, wrapper->getWidth(), wrapper->getHeight());
+ }
+ }
+#endif
+ }
+
+ void DrawBackground (Rect*) {}
+
+ //==============================================================================
+ private:
+ AudioProcessor* const filter;
+ JucePlugInProcess* const process;
+ JUCE_NAMESPACE::Component* wrapper;
+ AudioProcessorEditor* editorComp;
+
+ void deleteEditorComp()
+ {
+ if (editorComp != 0 || wrapper != 0)
+ {
+#if JUCE_MAC
+ const ScopedAutoReleasePool pool;
+#endif
+ PopupMenu::dismissAllActiveMenus();
+
+ JUCE_NAMESPACE::Component* const modalComponent = JUCE_NAMESPACE::Component::getCurrentlyModalComponent();
+ if (modalComponent != 0)
+ modalComponent->exitModalState (0);
+
+ filter->editorBeingDeleted (editorComp);
+
+ deleteAndZero (editorComp);
+ deleteAndZero (wrapper);
+ }
+ }
+
+ //==============================================================================
+ // A component to hold the AudioProcessorEditor, and cope with some housekeeping
+ // chores when it changes or repaints.
+ class EditorCompWrapper : public JUCE_NAMESPACE::Component
+#if ! JUCE_MAC
+ , public FocusChangeListener
+#endif
+ {
+ public:
+ EditorCompWrapper (void* const hostWindow_,
+ Component* const editorComp,
+ JuceCustomUIView* const owner_)
+ : hostWindow (hostWindow_),
+ owner (owner_),
+ titleW (0),
+ titleH (0)
+ {
+#if JucePlugin_EditorRequiresKeyboardFocus
+ setWantsKeyboardFocus (true);
+#else
+ setWantsKeyboardFocus (false);
+#endif
+ setOpaque (true);
+ setBroughtToFrontOnMouseClick (true);
+ setBounds (editorComp->getBounds());
+ editorComp->setTopLeftPosition (0, 0);
+ addAndMakeVisible (editorComp);
+
+#if JUCE_WIN32
+ attachSubWindow (hostWindow, titleW, titleH, this);
+#else
+ nsWindow = attachSubWindow (hostWindow, this);
+#endif
+ setVisible (true);
+
+#if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus
+ Desktop::getInstance().addFocusChangeListener (this);
+#endif
+ }
+
+ ~EditorCompWrapper()
+ {
+#if JUCE_WIN32 && ! JucePlugin_EditorRequiresKeyboardFocus
+ Desktop::getInstance().removeFocusChangeListener (this);
+#endif
+
+#if JUCE_MAC
+ removeSubWindow (nsWindow, this);
+#endif
+ }
+
+ void paint (Graphics&)
+ {
+ }
+
+ void resized()
+ {
+ JUCE_NAMESPACE::Component* const c = getChildComponent (0);
+
+ if (c != 0)
+ c->setBounds (0, 0, getWidth(), getHeight());
+
+ repaint();
+ }
+
+#if JUCE_WIN32
+ void globalFocusChanged (JUCE_NAMESPACE::Component*)
+ {
+ #if ! JucePlugin_EditorRequiresKeyboardFocus
+ if (hasKeyboardFocus (true))
+ passFocusToHostWindow (hostWindow);
+ #endif
+ }
+#endif
+
+ void childBoundsChanged (JUCE_NAMESPACE::Component* child)
+ {
+ setSize (child->getWidth(), child->getHeight());
+ child->setTopLeftPosition (0, 0);
+
+#if JUCE_WIN32
+ resizeHostWindow (hostWindow, titleW, titleH, this);
+#endif
+ owner->updateSize();
+ }
+
+ void userTriedToCloseWindow()
+ {
+ }
+
+ //==============================================================================
+ juce_UseDebuggingNewOperator
+
+ private:
+ void* const hostWindow;
+ void* nsWindow;
+ JuceCustomUIView* const owner;
+ int titleW, titleH;
+ };
+ };
+
+ JuceCustomUIView* getView() const
+ {
+ return dynamic_cast (fOurPlugInView);
+ }
+
+ void GetViewRect (Rect* size)
+ {
+ if (getView() != 0)
+ getView()->updateSize();
+
+ CEffectProcessRTAS::GetViewRect (size);
+ }
+
+ CPlugInView* CreateCPlugInView()
+ {
+ return new JuceCustomUIView (juceFilter, this);
+ }
+
+ void SetViewPort (GrafPtr port)
+ {
+ CEffectProcessRTAS::SetViewPort (port);
+
+ if (getView() != 0)
+ getView()->attachToWindow (port);
+ }
+
+ //==============================================================================
+protected:
+ ComponentResult GetDelaySamplesLong (long* aNumSamples)
+ {
+ if (aNumSamples != 0)
+ *aNumSamples = juceFilter != 0 ? juceFilter->getLatencySamples() : 0;
+
+ return noErr;
+ }
+
+ //==============================================================================
+ void EffectInit()
+ {
+ SFicPlugInStemFormats stems;
+ GetProcessType()->GetStemFormats (&stems);
+
+ juceFilter->setPlayConfigDetails (fNumInputs, fNumOutputs,
+ juceFilter->getSampleRate(), juceFilter->getBlockSize());
+
+ AddControl (new CPluginControl_OnOff ('bypa', "Master Bypass\nMastrByp\nMByp\nByp", false, true));
+ DefineMasterBypassControlIndex (bypassControlIndex);
+
+ for (int i = 0; i < juceFilter->getNumParameters(); ++i)
+ AddControl (new JucePluginControl (juceFilter, i));
+
+ // we need to do this midi log-in to get timecode, regardless of whether
+ // the plugin actually uses midi...
+ if (MIDILogIn() == noErr)
+ {
+#if JucePlugin_WantsMidiInput
+ CEffectType* const type = dynamic_cast (this->GetProcessType());
+
+ if (type != 0)
+ {
+ char nodeName [64];
+ type->GetProcessTypeName (63, nodeName);
+ p2cstrcpy (nodeName, reinterpret_cast (nodeName));
+
+ midiBufferNode = new CEffectMIDIOtherBufferedNode (&mMIDIWorld,
+ 8192,
+ eLocalNode,
+ nodeName,
+ midiBuffer);
+
+ midiBufferNode->Initialize (1, true);
+ }
+#endif
+ }
+
+ midiTransport = new CEffectMIDITransport (&mMIDIWorld);
+
+ juceFilter->setPlayHead (this);
+ juceFilter->addListener (this);
+ }
+
+ void handleAsyncUpdate()
+ {
+ if (! prepared)
+ {
+ sampleRate = gProcessGroup->GetSampleRate();
+ jassert (sampleRate > 0);
+
+ juce_free (channels);
+ channels = (float**) juce_calloc (sizeof (float*) * jmax (juceFilter->getNumInputChannels(),
+ juceFilter->getNumOutputChannels()));
+
+ juceFilter->setPlayConfigDetails (fNumInputs, fNumOutputs,
+ sampleRate, mRTGlobals->mHWBufferSizeInSamples);
+
+ juceFilter->prepareToPlay (sampleRate,
+ mRTGlobals->mHWBufferSizeInSamples);
+
+ prepared = true;
+ }
+ }
+
+ void RenderAudio (float** inputs, float** outputs, long numSamples)
+ {
+ if (! prepared)
+ {
+ triggerAsyncUpdate();
+ bypassBuffers (inputs, outputs, numSamples);
+ return;
+ }
+
+ if (mBypassed)
+ {
+ bypassBuffers (inputs, outputs, numSamples);
+ return;
+ }
+
+#if JucePlugin_WantsMidiInput
+ midiEvents.clear();
+
+ const Cmn_UInt32 bufferSize = mRTGlobals->mHWBufferSizeInSamples;
+
+ if (midiBufferNode->GetAdvanceScheduleTime() != bufferSize)
+ midiBufferNode->SetAdvanceScheduleTime (bufferSize);
+
+ if (midiBufferNode->FillMIDIBuffer (mRTGlobals->mRunningTime, numSamples) == noErr)
+ {
+ jassert (midiBufferNode->GetBufferPtr() != 0);
+ const int numMidiEvents = midiBufferNode->GetBufferSize();
+
+ for (int i = 0; i < numMidiEvents; ++i)
+ {
+ const DirectMidiPacket& m = midiBuffer[i];
+
+ jassert ((int) m.mTimestamp < numSamples);
+
+ midiEvents.addEvent (m.mData, m.mLength,
+ jlimit (0, (int) numSamples - 1, (int) m.mTimestamp));
+ }
+ }
+#endif
+
+#if defined (JUCE_DEBUG) || JUCE_LOG_ASSERTIONS
+ const int numMidiEventsComingIn = midiEvents.getNumEvents();
+ (void) numMidiEventsComingIn;
+#endif
+
+ {
+ const ScopedLock sl (juceFilter->getCallbackLock());
+
+ const int numIn = juceFilter->getNumInputChannels();
+ const int numOut = juceFilter->getNumOutputChannels();
+ const int totalChans = jmax (numIn, numOut);
+
+ if (juceFilter->isSuspended())
+ {
+ for (int i = 0; i < numOut; ++i)
+ zeromem (outputs [i], sizeof (float) * numSamples);
+ }
+ else
+ {
+ {
+ int i;
+ for (i = 0; i < numOut; ++i)
+ {
+ channels[i] = outputs [i];
+
+ if (i < numIn && inputs != outputs)
+ memcpy (outputs [i], inputs[i], sizeof (float) * numSamples);
+ }
+
+ for (; i < numIn; ++i)
+ channels [i] = inputs [i];
+ }
+
+ AudioSampleBuffer chans (channels, totalChans, numSamples);
+
+ juceFilter->processBlock (chans, midiEvents);
+ }
+ }
+
+ if (! midiEvents.isEmpty())
+ {
+#if JucePlugin_ProducesMidiOutput
+ const juce::uint8* midiEventData;
+ int midiEventSize, midiEventPosition;
+ MidiBuffer::Iterator i (midiEvents);
+
+ while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition))
+ {
+// jassert (midiEventPosition >= 0 && midiEventPosition < (int) numSamples);
+
+ //xxx
+ }
+#else
+ // if your plugin creates midi messages, you'll need to set
+ // the JucePlugin_ProducesMidiOutput macro to 1 in your
+ // JucePluginCharacteristics.h file
+ jassert (midiEvents.getNumEvents() <= numMidiEventsComingIn);
+#endif
+
+ midiEvents.clear();
+ }
+ }
+
+ //==============================================================================
+ ComponentResult GetChunkSize (OSType chunkID, long* size)
+ {
+ if (chunkID == juceChunkType)
+ {
+ tempFilterData.setSize (0);
+ juceFilter->getStateInformation (tempFilterData);
+
+ *size = sizeof (SFicPlugInChunkHeader) + tempFilterData.getSize();
+ return noErr;
+ }
+
+ return CEffectProcessMIDI::GetChunkSize (chunkID, size);
+ }
+
+ ComponentResult GetChunk (OSType chunkID, SFicPlugInChunk* chunk)
+ {
+ if (chunkID == juceChunkType)
+ {
+ if (tempFilterData.getSize() == 0)
+ juceFilter->getStateInformation (tempFilterData);
+
+ chunk->fSize = sizeof (SFicPlugInChunkHeader) + tempFilterData.getSize();
+ tempFilterData.copyTo ((void*) chunk->fData, 0, tempFilterData.getSize());
+
+ tempFilterData.setSize (0);
+
+ return noErr;
+ }
+
+ return CEffectProcessMIDI::GetChunk (chunkID, chunk);
+ }
+
+ ComponentResult SetChunk (OSType chunkID, SFicPlugInChunk* chunk)
+ {
+ if (chunkID == juceChunkType)
+ {
+ tempFilterData.setSize (0);
+
+ if (chunk->fSize - sizeof (SFicPlugInChunkHeader) > 0)
+ {
+ juceFilter->setStateInformation ((void*) chunk->fData,
+ chunk->fSize - sizeof (SFicPlugInChunkHeader));
+ }
+
+ return noErr;
+ }
+
+ return CEffectProcessMIDI::SetChunk (chunkID, chunk);
+ }
+
+ //==============================================================================
+ ComponentResult UpdateControlValue (long controlIndex, long value)
+ {
+ if (controlIndex != bypassControlIndex)
+ juceFilter->setParameter (controlIndex - 2, longToFloat (value));
+ else
+ mBypassed = (value > 0);
+
+ return CProcess::UpdateControlValue (controlIndex, value);
+ }
+
+ //==============================================================================
+ bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info)
+ {
+ // this method can only be called while the plugin is running
+ jassert (prepared);
+
+ Cmn_Float64 bpm = 120.0;
+ Cmn_Int32 num = 4, denom = 4;
+ Cmn_Int64 ticks = 0;
+ Cmn_Bool isPlaying = false;
+
+ if (midiTransport != 0)
+ {
+ midiTransport->GetCurrentTempo (&bpm);
+ midiTransport->IsTransportPlaying (&isPlaying);
+ midiTransport->GetCurrentMeter (&num, &denom);
+ midiTransport->GetCurrentTickPosition (&ticks);
+ }
+
+ info.bpm = bpm;
+ info.timeSigNumerator = num;
+ info.timeSigDenominator = denom;
+ info.isPlaying = isPlaying;
+ info.isRecording = false;
+ info.ppqPosition = ticks / 960000.0;
+ info.ppqPositionOfLastBarStart = 0; //xxx no idea how to get this correctly..
+
+ // xxx incorrect if there are tempo changes, but there's no
+ // other way of getting this info..
+ info.timeInSeconds = ticks * (60.0 / 960000.0) / bpm;
+
+ double framesPerSec = 24.0;
+
+ switch (fTimeCodeInfo.mFrameRate)
+ {
+ case ficFrameRate_24Frame:
+ info.frameRate = AudioPlayHead::fps24;
+ break;
+
+ case ficFrameRate_25Frame:
+ info.frameRate = AudioPlayHead::fps25;
+ framesPerSec = 25.0;
+ break;
+
+ case ficFrameRate_2997NonDrop:
+ info.frameRate = AudioPlayHead::fps2997;
+ framesPerSec = 29.97002997;
+ break;
+
+ case ficFrameRate_2997DropFrame:
+ info.frameRate = AudioPlayHead::fps2997drop;
+ framesPerSec = 29.97002997;
+ break;
+
+ case ficFrameRate_30NonDrop:
+ info.frameRate = AudioPlayHead::fps30;
+ framesPerSec = 30.0;
+ break;
+
+ case ficFrameRate_30DropFrame:
+ info.frameRate = AudioPlayHead::fps30drop;
+ framesPerSec = 30.0;
+ break;
+
+ case ficFrameRate_23976:
+ // xxx not strictly true..
+ info.frameRate = AudioPlayHead::fps24;
+ framesPerSec = 23.976;
+ break;
+
+ default:
+ info.frameRate = AudioPlayHead::fpsUnknown;
+ break;
+ }
+
+ info.editOriginTime = fTimeCodeInfo.mFrameOffset / framesPerSec;
+
+ return true;
+ }
+
+ void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue)
+ {
+ SetControlValue (index + 2, floatToLong (newValue));
+ }
+
+ void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index)
+ {
+ TouchControl (index + 2);
+ }
+
+ void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index)
+ {
+ ReleaseControl (index + 2);
+ }
+
+ void audioProcessorChanged (AudioProcessor*)
+ {
+ // xxx is there an RTAS equivalent?
+ }
+
+ //==============================================================================
+private:
+ AudioProcessor* juceFilter;
+ MidiBuffer midiEvents;
+ CEffectMIDIOtherBufferedNode* midiBufferNode;
+ CEffectMIDITransport* midiTransport;
+ DirectMidiPacket midiBuffer [midiBufferSize];
+
+ JUCE_NAMESPACE::MemoryBlock tempFilterData;
+ float** channels;
+ bool prepared;
+ double sampleRate;
+
+ void bypassBuffers (float** const inputs, float** const outputs, const long numSamples) const
+ {
+ for (int i = fNumOutputs; --i >= 0;)
+ {
+ if (i < fNumInputs)
+ memcpy (outputs[i], inputs[i], numSamples * sizeof (float));
+ else
+ zeromem (outputs[i], numSamples * sizeof (float));
+ }
+ }
+
+ //==============================================================================
+ class JucePluginControl : public CPluginControl
+ {
+ public:
+ //==============================================================================
+ JucePluginControl (AudioProcessor* const juceFilter_, const int index_)
+ : juceFilter (juceFilter_),
+ index (index_)
+ {
+ }
+
+ ~JucePluginControl()
+ {
+ }
+
+ //==============================================================================
+ OSType GetID() const { return index + 1; }
+ long GetDefaultValue() const { return floatToLong (0); }
+ void SetDefaultValue (long) {}
+ long GetNumSteps() const { return 0xffffffff; }
+
+ long ConvertStringToValue (const char* valueString) const
+ {
+ return floatToLong (String (valueString).getFloatValue());
+ }
+
+ Cmn_Bool IsKeyValid (long key) const { return true; }
+
+ void GetNameOfLength (char* name, int maxLength, OSType inControllerType) const
+ {
+ juceFilter->getParameterName (index).copyToBuffer (name, maxLength);
+ }
+
+ long GetPriority() const { return kFicCooperativeTaskPriority; }
+
+ long GetOrientation() const
+ {
+ return kDAE_LeftMinRightMax | kDAE_BottomMinTopMax
+ | kDAE_RotarySingleDotMode | kDAE_RotaryLeftMinRightMax;
+ }
+
+ long GetControlType() const { return kDAE_ContinuousValues; }
+
+ void GetValueString (char* valueString, int maxLength, long value) const
+ {
+ juceFilter->getParameterText (index).copyToBuffer (valueString, maxLength);
+ }
+
+ Cmn_Bool IsAutomatable() const
+ {
+ return juceFilter->isParameterAutomatable (index);
+ }
+
+ private:
+ //==============================================================================
+ AudioProcessor* const juceFilter;
+ const int index;
+
+ JucePluginControl (const JucePluginControl&);
+ const JucePluginControl& operator= (const JucePluginControl&);
+ };
+};
+
+//==============================================================================
+class JucePlugInGroup : public CEffectGroupMIDI
+{
+public:
+ //==============================================================================
+ JucePlugInGroup()
+ {
+ DefineManufacturerNamesAndID (JucePlugin_Manufacturer, JucePlugin_RTASManufacturerCode);
+ DefinePlugInNamesAndVersion (createRTASName(), JucePlugin_VersionCode);
+
+#ifndef JUCE_DEBUG
+ AddGestalt (pluginGestalt_IsCacheable);
+#endif
+ }
+
+ ~JucePlugInGroup()
+ {
+ shutdownJuce_GUI();
+ shutdownJuce_NonGUI();
+ }
+
+ //==============================================================================
+ void CreateEffectTypes()
+ {
+ const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations };
+ const int numConfigs = numElementsInArray (channelConfigs);
+
+ // You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations
+ // value in your JucePluginCharacteristics.h file..
+ jassert (numConfigs > 0);
+
+ for (int i = 0; i < numConfigs; ++i)
+ {
+ CEffectType* const type
+ = new CEffectTypeRTAS ('jcaa' + i,
+ JucePlugin_RTASProductId,
+ JucePlugin_RTASCategory);
+
+ type->DefineTypeNames (createRTASName());
+ type->DefineSampleRateSupport (eSupports48kAnd96kAnd192k);
+
+ type->DefineStemFormats (getFormatForChans (channelConfigs [i][0]),
+ getFormatForChans (channelConfigs [i][1]));
+
+ type->AddGestalt (pluginGestalt_CanBypass);
+ type->AddGestalt (pluginGestalt_SupportsVariableQuanta);
+ type->AttachEffectProcessCreator (createNewProcess);
+
+ AddEffectType (type);
+ }
+ }
+
+ void Initialize()
+ {
+ CEffectGroupMIDI::Initialize();
+ }
+
+ //==============================================================================
+private:
+ static CEffectProcess* createNewProcess()
+ {
+ // Juce setup
+#if JUCE_WIN32
+ PlatformUtilities::setCurrentModuleInstanceHandle (gThisModule);
+#endif
+ initialiseJuce_GUI();
+
+ return new JucePlugInProcess();
+ }
+
+ static const String createRTASName()
+ {
+ return String (JucePlugin_Name) + T("\n")
+ + String (JucePlugin_Name).substring (0, 4);
+ }
+
+ static EPlugIn_StemFormat getFormatForChans (const int numChans) throw()
+ {
+ switch (numChans)
+ {
+ case 0:
+ return ePlugIn_StemFormat_Generic;
+
+ case 1:
+ return ePlugIn_StemFormat_Mono;
+
+ case 2:
+ return ePlugIn_StemFormat_Stereo;
+
+ case 3:
+ return ePlugIn_StemFormat_LCR;
+
+ case 4:
+ return ePlugIn_StemFormat_Quad;
+
+ case 5:
+ return ePlugIn_StemFormat_5dot0;
+
+ case 6:
+ return ePlugIn_StemFormat_5dot1;
+
+ case 7:
+ return ePlugIn_StemFormat_6dot1;
+
+ case 8:
+ return ePlugIn_StemFormat_7dot1;
+
+ default:
+ jassertfalse // hmm - not a valid number of chans for RTAS..
+ break;
+ }
+
+ return ePlugIn_StemFormat_Generic;
+ }
+};
+
+void initialiseMacRTAS();
+
+CProcessGroupInterface* CProcessGroup::CreateProcessGroup()
+{
+ initialiseMacRTAS();
+ initialiseJuce_NonGUI();
+ return new JucePlugInGroup();
+}
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/Standalone/juce_AudioFilterStreamer.cpp b/extras/audio plugins/wrapper/Standalone/juce_AudioFilterStreamer.cpp
similarity index 100%
rename from extras/audio plugins/wrapper/formats/Standalone/juce_AudioFilterStreamer.cpp
rename to extras/audio plugins/wrapper/Standalone/juce_AudioFilterStreamer.cpp
diff --git a/extras/audio plugins/wrapper/formats/Standalone/juce_AudioFilterStreamer.h b/extras/audio plugins/wrapper/Standalone/juce_AudioFilterStreamer.h
similarity index 96%
rename from extras/audio plugins/wrapper/formats/Standalone/juce_AudioFilterStreamer.h
rename to extras/audio plugins/wrapper/Standalone/juce_AudioFilterStreamer.h
index 8b6f99182c..afbb9d547b 100644
--- a/extras/audio plugins/wrapper/formats/Standalone/juce_AudioFilterStreamer.h
+++ b/extras/audio plugins/wrapper/Standalone/juce_AudioFilterStreamer.h
@@ -32,7 +32,7 @@
#ifndef __JUCE_AUDIOFILTERSTREAMER_JUCEHEADER__
#define __JUCE_AUDIOFILTERSTREAMER_JUCEHEADER__
-#include "../../../../../juce_amalgamated.h"
+#include "../juce_PluginHeaders.h"
//==============================================================================
diff --git a/extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.cpp b/extras/audio plugins/wrapper/Standalone/juce_StandaloneFilterWindow.cpp
similarity index 96%
rename from extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.cpp
rename to extras/audio plugins/wrapper/Standalone/juce_StandaloneFilterWindow.cpp
index a98a7764ab..e605d546d6 100644
--- a/extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.cpp
+++ b/extras/audio plugins/wrapper/Standalone/juce_StandaloneFilterWindow.cpp
@@ -30,7 +30,7 @@
*/
#include "juce_StandaloneFilterWindow.h"
-#include "../../juce_IncludeCharacteristics.h"
+#include "../juce_PluginHeaders.h"
//==============================================================================
/** Somewhere in the codebase of your plugin, you need to implement this function
diff --git a/extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.h b/extras/audio plugins/wrapper/Standalone/juce_StandaloneFilterWindow.h
similarity index 100%
rename from extras/audio plugins/wrapper/formats/Standalone/juce_StandaloneFilterWindow.h
rename to extras/audio plugins/wrapper/Standalone/juce_StandaloneFilterWindow.h
diff --git a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp b/extras/audio plugins/wrapper/VST/juce_VST_Wrapper.cpp
similarity index 94%
rename from extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp
rename to extras/audio plugins/wrapper/VST/juce_VST_Wrapper.cpp
index 4656cd318a..24866ee6e7 100644
--- a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.cpp
+++ b/extras/audio plugins/wrapper/VST/juce_VST_Wrapper.cpp
@@ -29,19 +29,6 @@
==============================================================================
*/
-/*
- *** DON'T EDIT THIS FILE!! ***
-
- The idea is that everyone's plugins should share this same wrapper
- code, so if you start hacking around in here you're missing the point!
-
- If there's a bug or a function you need that can't be done without changing
- some of the code in here, give me a shout so we can add it to the library,
- rather than branching off and going it alone!
-*/
-
-
-//==============================================================================
#ifdef _MSC_VER
#pragma warning (disable : 4996)
#endif
@@ -62,7 +49,9 @@
#define PRAGMA_ALIGN_SUPPORTED 1
#endif
-#include "../../juce_IncludeCharacteristics.h"
+#include "../juce_PluginHeaders.h"
+
+#if JucePlugin_Build_VST
//==============================================================================
/* These files come with the Steinberg VST SDK - to get them, you'll need to
@@ -119,8 +108,7 @@
#pragma pack (push, 8)
#endif
-//#include "../../../../../juce_amalgamated.h"
-#include "../../../../../juce.h"
+#include "../juce_PluginHeaders.h"
#ifdef _MSC_VER
#pragma pack (pop)
@@ -136,6 +124,7 @@ BEGIN_JUCE_NAMESPACE
extern void juce_callAnyTimersSynchronously();
#if JUCE_MAC
+ extern void initialiseMac();
extern void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw();
extern void* attachComponentToWindowRef (Component* component, void* windowRef);
extern void detachComponentFromWindowRef (Component* component, void* nsWindow);
@@ -626,8 +615,7 @@ public:
filter->setNonRealtime (getCurrentProcessLevel() == 4 /* kVstProcessLevelOffline */);
#if JUCE_WIN32
- if (GetThreadPriority (GetCurrentThread()) <= THREAD_PRIORITY_NORMAL
- && GetThreadPriority (GetCurrentThread()) >= THREAD_PRIORITY_LOWEST)
+ if (GetThreadPriority (GetCurrentThread()) <= THREAD_PRIORITY_NORMAL)
filter->setNonRealtime (true);
#endif
}
@@ -1176,8 +1164,11 @@ public:
}
#if JUCE_MAC
- detachComponentFromWindowRef (editorComp, hostWindow);
- hostWindow = 0;
+ if (hostWindow != 0)
+ {
+ detachComponentFromWindowRef (editorComp, hostWindow);
+ hostWindow = 0;
+ }
#endif
filter->editorBeingDeleted (editorComp->getEditorComp());
@@ -1262,7 +1253,7 @@ public:
*((ERect**) ptr) = &editorSize;
- return (VstIntPtr) &editorSize;
+ return (VstIntPtr) (pointer_sized_int) &editorSize;
}
else
{
@@ -1495,11 +1486,13 @@ static AEffect* pluginEntryPoint (audioMasterCallback audioMaster)
extern "C" __attribute__ ((visibility("default"))) AEffect* VSTPluginMain (audioMasterCallback audioMaster)
{
+ initialiseMac();
return pluginEntryPoint (audioMaster);
}
extern "C" __attribute__ ((visibility("default"))) AEffect* main_macho (audioMasterCallback audioMaster)
{
+ initialiseMac();
return pluginEntryPoint (audioMaster);
}
@@ -1541,12 +1534,14 @@ extern "C" __declspec (dllexport) AEffect* VSTPluginMain (audioMasterCallback au
return pluginEntryPoint (audioMaster);
}
+#ifndef _WIN64 // (can't compile this on win64, but it's not needed anyway with VST2.4)
extern "C" __declspec (dllexport) void* main (audioMasterCallback audioMaster)
{
return (void*) pluginEntryPoint (audioMaster);
}
+#endif
-BOOL WINAPI DllMain (HINSTANCE instance, DWORD dwReason, LPVOID)
+BOOL WINAPI DllMainVST (HINSTANCE instance, DWORD dwReason, LPVOID)
{
if (dwReason == DLL_PROCESS_ATTACH)
PlatformUtilities::setCurrentModuleInstanceHandle (instance);
@@ -1555,3 +1550,5 @@ BOOL WINAPI DllMain (HINSTANCE instance, DWORD dwReason, LPVOID)
}
#endif
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.mm b/extras/audio plugins/wrapper/VST/juce_VST_Wrapper.mm
similarity index 58%
rename from extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.mm
rename to extras/audio plugins/wrapper/VST/juce_VST_Wrapper.mm
index 423950a0a4..33eb372bca 100644
--- a/extras/audio plugins/wrapper/formats/VST/juce_VstWrapper.mm
+++ b/extras/audio plugins/wrapper/VST/juce_VST_Wrapper.mm
@@ -1,111 +1,171 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-//==============================================================================
-#include
-#include "../../../../../juce.h"
-
-
-BEGIN_JUCE_NAMESPACE
-
-void* attachComponentToWindowRef (Component* comp, void* windowRef)
-{
- const ScopedAutoReleasePool pool;
-
- NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
- [hostWindow retain];
- [hostWindow setCanHide: YES];
- [hostWindow setReleasedWhenClosed: YES];
-
- NSView* content = [hostWindow contentView];
- NSRect f = [content frame];
- NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
- windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
- comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
-
-#if ! JucePlugin_EditorRequiresKeyboardFocus
- comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
-#else
- comp->addToDesktop (ComponentPeer::windowIsTemporary);
-#endif
-
- comp->setVisible (true);
- comp->toFront (false);
-
- NSView* pluginView = (NSView*) comp->getWindowHandle();
- NSWindow* pluginWindow = [pluginView window];
- [pluginWindow setExcludedFromWindowsMenu: YES];
-
- [hostWindow addChildWindow: pluginWindow
- ordered: NSWindowAbove];
- [hostWindow orderFront: nil];
- [pluginWindow orderFront: nil];
- return hostWindow;
-}
-
-void detachComponentFromWindowRef (Component* comp, void* nsWindow)
-{
- NSWindow* hostWindow = (NSWindow*) nsWindow;
- if (hostWindow != 0)
- {
- const ScopedAutoReleasePool pool;
-
- NSView* pluginView = (NSView*) comp->getWindowHandle();
- NSWindow* pluginWindow = [pluginView window];
-
- [hostWindow removeChildWindow: pluginWindow];
- comp->removeFromDesktop();
-
- [hostWindow release];
- }
-}
-
-void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight)
-{
- NSWindow* hostWindow = (NSWindow*) nsWindow;
- if (hostWindow != 0)
- {
- ScopedAutoReleasePool pool;
-
- NSRect f = [hostWindow frame];
- f.size.width += newWidth - component->getWidth();
- f.size.height += newHeight - component->getHeight();
- [hostWindow setFrame: f display: YES];
- }
-}
-
-void checkWindowVisibility (void* nsWindow, Component* comp)
-{
- NSWindow* hostWindow = (NSWindow*) nsWindow;
- comp->setVisible ([hostWindow isVisible]);
-}
-
-END_JUCE_NAMESPACE
+/*
+ ==============================================================================
+
+ This file is part of the JUCE library - "Jules' Utility Class Extensions"
+ Copyright 2004-7 by Raw Material Software ltd.
+
+ ------------------------------------------------------------------------------
+
+ JUCE can be redistributed and/or modified under the terms of the
+ GNU General Public License, as published by the Free Software Foundation;
+ either version 2 of the License, or (at your option) any later version.
+
+ JUCE is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with JUCE; if not, visit www.gnu.org/licenses or write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ ------------------------------------------------------------------------------
+
+ If you'd like to release a closed-source product which uses JUCE, commercial
+ licenses are also available: visit www.rawmaterialsoftware.com/juce for
+ more information.
+
+ ==============================================================================
+*/
+
+//==============================================================================
+#include "../juce_IncludeCharacteristics.h"
+
+#if JucePlugin_Build_VST
+
+#include
+
+#define ADD_CARBON_BODGE 1 // see note below..
+
+#if ADD_CARBON_BODGE
+ #include
+#endif
+
+#include "../juce_PluginHeaders.h"
+
+//==============================================================================
+BEGIN_JUCE_NAMESPACE
+
+#if ADD_CARBON_BODGE
+/* When you wrap a WindowRef as an NSWindow, it seems to bugger up the HideWindow
+ function, so when the host tries (and fails) to hide the window, this catches
+ the event and does the job properly.
+*/
+
+static pascal OSStatus windowVisibilityBodge (EventHandlerCallRef, EventRef e, void* user)
+{
+ NSWindow* hostWindow = (NSWindow*) user;
+
+ switch (GetEventKind (e))
+ {
+ case kEventWindowShown:
+ [hostWindow orderFront: nil];
+ break;
+ case kEventWindowHidden:
+ [hostWindow orderOut: nil];
+ break;
+ }
+
+ return eventNotHandledErr;
+}
+#endif
+
+//==============================================================================
+void initialiseMac()
+{
+ NSApplicationLoad();
+}
+
+void* attachComponentToWindowRef (Component* comp, void* windowRef)
+{
+ const ScopedAutoReleasePool pool;
+
+ NSWindow* hostWindow = [[NSWindow alloc] initWithWindowRef: windowRef];
+ [hostWindow retain];
+ [hostWindow setCanHide: YES];
+ [hostWindow setReleasedWhenClosed: YES];
+
+ NSView* content = [hostWindow contentView];
+ NSRect f = [content frame];
+ NSPoint windowPos = [hostWindow convertBaseToScreen: f.origin];
+ windowPos.y = [[NSScreen mainScreen] frame].size.height - (windowPos.y + f.size.height);
+ comp->setTopLeftPosition ((int) windowPos.x, (int) windowPos.y);
+
+#if ! JucePlugin_EditorRequiresKeyboardFocus
+ comp->addToDesktop (ComponentPeer::windowIsTemporary | ComponentPeer::windowIgnoresKeyPresses);
+#else
+ comp->addToDesktop (ComponentPeer::windowIsTemporary);
+#endif
+
+ comp->setVisible (true);
+ comp->toFront (false);
+
+ NSView* pluginView = (NSView*) comp->getWindowHandle();
+ NSWindow* pluginWindow = [pluginView window];
+ [pluginWindow setExcludedFromWindowsMenu: YES];
+ [pluginWindow setCanHide: YES];
+
+ [hostWindow addChildWindow: pluginWindow
+ ordered: NSWindowAbove];
+ [hostWindow orderFront: nil];
+ [pluginWindow orderFront: nil];
+
+#if ADD_CARBON_BODGE
+ // Adds a callback bodge to work around some problems with wrapped
+ // carbon windows..
+ const EventTypeSpec eventsToCatch[] = {
+ { kEventClassWindow, kEventWindowShown },
+ { kEventClassWindow, kEventWindowHidden }
+ };
+
+ InstallWindowEventHandler ((WindowRef) windowRef,
+ NewEventHandlerUPP (windowVisibilityBodge),
+ GetEventTypeCount (eventsToCatch), eventsToCatch,
+ (void*) hostWindow, 0);
+#endif
+
+ return hostWindow;
+}
+
+void detachComponentFromWindowRef (Component* comp, void* nsWindow)
+{
+ const ScopedAutoReleasePool pool;
+
+ NSWindow* hostWindow = (NSWindow*) nsWindow;
+ NSView* pluginView = (NSView*) comp->getWindowHandle();
+ NSWindow* pluginWindow = [pluginView window];
+
+ [hostWindow removeChildWindow: pluginWindow];
+ comp->removeFromDesktop();
+
+ [hostWindow release];
+}
+
+void setNativeHostWindowSize (void* nsWindow, Component* component, int newWidth, int newHeight)
+{
+ NSWindow* hostWindow = (NSWindow*) nsWindow;
+ if (hostWindow != 0)
+ {
+ ScopedAutoReleasePool pool;
+
+ // Can't use the cocoa NSWindow resizing code, or it messes up in Live.
+ Rect r;
+ GetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r);
+ r.right += newWidth - component->getWidth();
+ r.bottom += newHeight - component->getHeight();
+ SetWindowBounds ((WindowRef) [hostWindow windowRef], kWindowContentRgn, &r);
+
+ [[hostWindow contentView] setNeedsDisplay: YES];
+ }
+}
+
+void checkWindowVisibility (void* nsWindow, Component* comp)
+{
+ NSWindow* hostWindow = (NSWindow*) nsWindow;
+ comp->setVisible ([hostWindow isVisible]);
+}
+
+END_JUCE_NAMESPACE
+
+#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/DummyResourceFile.r b/extras/audio plugins/wrapper/formats/RTAS/DummyResourceFile.r
deleted file mode 100644
index b607d8d1be..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/DummyResourceFile.r
+++ /dev/null
@@ -1,4 +0,0 @@
-
-// This dummy file is added to the resources section of the project to
-// force XCode to create some resources for the dpm. If there aren't any
-// resources, PT would refuse to load the plugin..
\ No newline at end of file
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp
deleted file mode 100644
index 2a938ae853..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "CEffectGroup.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp
deleted file mode 100644
index 07aa7ee05c..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "CEffectGroupMIDI.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessAS.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessAS.cpp
deleted file mode 100644
index 70083d8da6..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessAS.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "CEffectProcessAS.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectType.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectType.cpp
deleted file mode 100644
index 5c33164ea9..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectType.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "CEffectType.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectTypeRTAS.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectTypeRTAS.cpp
deleted file mode 100644
index 1464ee04d7..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectTypeRTAS.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "CEffectTypeRTAS.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp
deleted file mode 100644
index 5f29659bd7..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "ChunkDataParser.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DLLMain.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DLLMain.cpp
deleted file mode 100644
index fa1259df2d..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DLLMain.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#if WINDOWS_VERSION
- #include "DLLMain.cpp"
-#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DefaultSwap.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DefaultSwap.cpp
deleted file mode 100644
index 3cc54a6782..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_DefaultSwap.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#if WINDOWS_VERSION
- #include "DefaultSwap.cpp"
-#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp
deleted file mode 100644
index d8b321ea65..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-/* This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-*/
-
-#include "juce_Wrapper_Header.h"
-#if ! WINDOWS_VERSION
- #include "Dispatcher.cpp"
-#endif
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp
deleted file mode 100644
index 19c8440f53..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-#include "juce_Wrapper_Header.h"
-
-/*
- This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-
- Note about include paths
-
- If you get an error including this file, check your paths - there's a full list of
- Digidesign paths in juce_RTASWrapper.cpp
-*/
-#include "PlugInUtils.cpp"
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp b/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp
deleted file mode 100644
index 80698eeff2..0000000000
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- ==============================================================================
-
- This file is part of the JUCE library - "Jules' Utility Class Extensions"
- Copyright 2004-7 by Raw Material Software ltd.
-
- ------------------------------------------------------------------------------
-
- JUCE can be redistributed and/or modified under the terms of the
- GNU General Public License, as published by the Free Software Foundation;
- either version 2 of the License, or (at your option) any later version.
-
- JUCE is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with JUCE; if not, visit www.gnu.org/licenses or write to the
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- Boston, MA 02111-1307 USA
-
- ------------------------------------------------------------------------------
-
- If you'd like to release a closed-source product which uses JUCE, commercial
- licenses are also available: visit www.rawmaterialsoftware.com/juce for
- more information.
-
- ==============================================================================
-*/
-
-/* This file is used to include and build a digidesign CPP file without your project needing to
- reference the file directly. Because the file will be located via the include path, this means
- that the project doesn't have to change to cope with people's SDKs being in different locations.
-*/
-
-#include "juce_Wrapper_Header.h"
-#if ! WINDOWS_VERSION
- #include "PlugInInitialize.cpp"
-#endif
diff --git a/extras/audio plugins/wrapper/formats/VST/MacExportedSymbols.txt b/extras/audio plugins/wrapper/formats/VST/MacExportedSymbols.txt
deleted file mode 100644
index a71eebdde5..0000000000
--- a/extras/audio plugins/wrapper/formats/VST/MacExportedSymbols.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# This file contains a list of the symbols that your VST plugin needs to export.
-#
-# It's very important that you refer to this file in your linker settings, under
-# the "Exported Symbols File" heading. If you don't specify that these are the
-# only two symbols exported, the linker will also export all the Obj-C symbols in
-# Juce, and this will create all sorts of dynamic link problems when you have
-# more than one juce-linked module loaded at the same time.
-#
-
-_VSTPluginMain
-_main_macho
diff --git a/extras/audio plugins/wrapper/juce_IncludeCharacteristics.h b/extras/audio plugins/wrapper/juce_IncludeCharacteristics.h
index 1030d5fefb..8a06cadc7a 100644
--- a/extras/audio plugins/wrapper/juce_IncludeCharacteristics.h
+++ b/extras/audio plugins/wrapper/juce_IncludeCharacteristics.h
@@ -91,8 +91,16 @@
#error "You need to define the JucePlugin_EditorRequiresKeyboardFocus value in your JucePluginCharacteristics.h file!"
#endif
-#if JUCE_USE_VSTSDK_2_4 != 0 && JUCE_USE_VSTSDK_2_4 != 1
+#if ! (JucePlugin_Build_VST || JucePlugin_Build_AU || JucePlugin_Build_RTAS)
+ #error "You need to define at least one plugin format value in your JucePluginCharacteristics.h file!"
+#endif
+
+#if JucePlugin_Build_VST && (JUCE_USE_VSTSDK_2_4 != 0 && JUCE_USE_VSTSDK_2_4 != 1)
#error "You need to define the JUCE_USE_VSTSDK_2_4 value in your JucePluginCharacteristics.h file!"
#endif
+#if JucePlugin_Build_RTAS && _MSC_VER && ! defined (JucePlugin_WinBag_path)
+ #error "You need to define the JucePlugin_WinBag_path value in your JucePluginCharacteristics.h file!"
+#endif
+
#endif // __JUCE_INCLUDECHARACTERISTICS_JUCEHEADER__
diff --git a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h b/extras/audio plugins/wrapper/juce_PluginHeaders.h
similarity index 76%
rename from extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h
rename to extras/audio plugins/wrapper/juce_PluginHeaders.h
index f746288711..84b4ea43f6 100644
--- a/extras/audio plugins/wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h
+++ b/extras/audio plugins/wrapper/juce_PluginHeaders.h
@@ -29,17 +29,5 @@
==============================================================================
*/
-#ifndef __JUCE_WRAPPER_HEADER_JUCEHEADER__
-#define __JUCE_WRAPPER_HEADER_JUCEHEADER__
-
-#include "../juce_RTASCompileFlags.h"
-
-#ifdef _MSC_VER
- // the Digidesign projects all use a struct alignment of 2..
- #pragma pack (2)
- #pragma warning (disable: 4267 4996 4311 4312 4103)
-
- #include "ForcedInclude.h"
-#endif
-
-#endif // __JUCE_WRAPPER_HEADER_JUCEHEADER__
+#include "juce_IncludeCharacteristics.h"
+#include "../../../juce_amalgamated.h"