| @@ -1,272 +0,0 @@ | |||
| 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. | |||
| @@ -1,28 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>English</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string></string> | |||
| <key>CFBundleGetInfoString</key> | |||
| <string></string> | |||
| <key>CFBundleIconFile</key> | |||
| <string></string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.rawmaterialsoftware.JuceAUDemo</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>6.0</string> | |||
| <key>CFBundleName</key> | |||
| <string>Juce Audio Unit Demo</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>BNDL</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string></string> | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1.0.0</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -1,9 +0,0 @@ | |||
| # | |||
| # This file must contain entries for the two AU entry points. | |||
| # | |||
| # Your JucePluginCharacteristics.h file must define the prefix used for these function names - for | |||
| # more info, see the comments in JucePluginCharacteristics.h | |||
| # | |||
| _JuceDemoAUEntry | |||
| _JuceDemoAUViewEntry | |||
| @@ -1,609 +0,0 @@ | |||
| // !$*UTF8*$! | |||
| { | |||
| archiveVersion = 1; | |||
| classes = { | |||
| }; | |||
| objectVersion = 42; | |||
| objects = { | |||
| /* Begin PBXBuildFile section */ | |||
| 3E8BF105079CA60300021B09 /* AUBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199ED03175E1E01CA2136 /* AUBase.h */; }; | |||
| 3E8BF106079CA60300021B09 /* AUDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199EF03175E1E01CA2136 /* AUDispatch.h */; }; | |||
| 3E8BF107079CA60300021B09 /* AUInputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F103175E1E01CA2136 /* AUInputElement.h */; }; | |||
| 3E8BF108079CA60300021B09 /* AUOutputElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F303175E1E01CA2136 /* AUOutputElement.h */; }; | |||
| 3E8BF109079CA60300021B09 /* AUScopeElement.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199F603175E1E01CA2136 /* AUScopeElement.h */; }; | |||
| 3E8BF10A079CA60300021B09 /* ComponentBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199FA03175E1E01CA2136 /* ComponentBase.h */; }; | |||
| 3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D199FF03175E1E01CA2136 /* AUEffectBase.h */; }; | |||
| 3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A0F03175E1E01CA2136 /* AUBuffer.h */; }; | |||
| 3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */ = {isa = PBXBuildFile; fileRef = F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */; }; | |||
| 3E8BF10E079CA60300021B09 /* CAAudioChannelLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */; }; | |||
| 3E8BF113079CA60300021B09 /* AUBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199EC03175E1E01CA2136 /* AUBase.cpp */; }; | |||
| 3E8BF114079CA60300021B09 /* AUDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */; }; | |||
| 3E8BF115079CA60300021B09 /* AUInputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F003175E1E01CA2136 /* AUInputElement.cpp */; }; | |||
| 3E8BF116079CA60300021B09 /* AUOutputElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */; }; | |||
| 3E8BF117079CA60300021B09 /* AUScopeElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */; }; | |||
| 3E8BF118079CA60300021B09 /* ComponentBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199F903175E1E01CA2136 /* ComponentBase.cpp */; }; | |||
| 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */; }; | |||
| 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */; }; | |||
| 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */; }; | |||
| 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */; }; | |||
| 3E8BF11F079CA60300021B09 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5AA9A2F0281AAB901C34293 /* CoreFoundation.framework */; }; | |||
| 3E8BF120079CA60300021B09 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5AA9A300281AAB901C34293 /* CoreServices.framework */; }; | |||
| 3E8BF121079CA60300021B09 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5DA37E702821D04014500A0 /* Carbon.framework */; }; | |||
| 3E8BF122079CA60300021B09 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5D19ABE0317606901CA2136 /* AudioUnit.framework */; }; | |||
| 844C50290C71B6E300D0082E /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 844C50280C71B6E300D0082E /* IOKit.framework */; }; | |||
| 845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; }; | |||
| 845FAEE10A5C2696008C94D8 /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 845FAEE00A5C2696008C94D8 /* QuickTime.framework */; }; | |||
| 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */; }; | |||
| 84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */; }; | |||
| 84BC4E5E0C8DDD3D00FA249B /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BC4E5D0C8DDD3C00FA249B /* OpenGL.framework */; }; | |||
| 84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */; }; | |||
| 84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */; }; | |||
| 84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */; }; | |||
| 84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */; }; | |||
| 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EF64FA42057BC39200D99563 /* CAAUParameter.cpp */; }; | |||
| 84CFAFEB0909666C0053C22C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E8BF154079CA7A800021B09 /* AudioToolbox.framework */; }; | |||
| 84CFB029090968590053C22C /* DemoJuceAudioUnit.component in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */; }; | |||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */; }; | |||
| 84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */; }; | |||
| 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */; }; | |||
| 84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */; }; | |||
| 84F0521E090674BB00AEC8DB /* Info-JuceAU.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */; }; | |||
| 84F0548F090687F600AEC8DB /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F0548E090687F600AEC8DB /* CoreAudio.framework */; }; | |||
| 84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */; }; | |||
| 84F054E90906C8DD00AEC8DB /* AUMIDIBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */; }; | |||
| 84F054EA0906C8DD00AEC8DB /* AUMIDIEffectBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F054E60906C8DD00AEC8DB /* AUMIDIEffectBase.cpp */; }; | |||
| 84F054EB0906C8DD00AEC8DB /* AUMIDIEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F054E70906C8DD00AEC8DB /* AUMIDIEffectBase.h */; }; | |||
| 84F055010906E9EA00AEC8DB /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F054FD0906E9EA00AEC8DB /* DemoEditorComponent.cpp */; }; | |||
| 84F055020906E9EA00AEC8DB /* DemoEditorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F054FE0906E9EA00AEC8DB /* DemoEditorComponent.h */; }; | |||
| 84F055030906E9EA00AEC8DB /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84F054FF0906E9EA00AEC8DB /* DemoJuceFilter.cpp */; }; | |||
| 84F055040906E9EA00AEC8DB /* DemoJuceFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F055000906E9EA00AEC8DB /* DemoJuceFilter.h */; }; | |||
| 84F055260906FBCF00AEC8DB /* AUSilentTimeout.h in Headers */ = {isa = PBXBuildFile; fileRef = 84F055250906FBCF00AEC8DB /* AUSilentTimeout.h */; }; | |||
| 84F87963093B1EDC00225D65 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F87962093B1EDC00225D65 /* AGL.framework */; }; | |||
| 84FDAFE90C15B9E200CD0087 /* libjucedebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FDAFBD0C15B8F100CD0087 /* libjucedebug.a */; }; | |||
| A9E885EA0874B5BF00B2DFE8 /* CAThreadSafeList.h in Headers */ = {isa = PBXBuildFile; fileRef = A9E885E90874B5BF00B2DFE8 /* CAThreadSafeList.h */; }; | |||
| F4E5DC2C0898301D00589A5A /* CAVectorUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E5DC290898301D00589A5A /* CAVectorUnit.h */; }; | |||
| F4E5DC2D0898301D00589A5A /* CAVectorUnitTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E5DC2A0898301D00589A5A /* CAVectorUnitTypes.h */; }; | |||
| /* End PBXBuildFile section */ | |||
| /* Begin PBXContainerItemProxy section */ | |||
| 84FDAFBC0C15B8F100CD0087 /* PBXContainerItemProxy */ = { | |||
| isa = PBXContainerItemProxy; | |||
| containerPortal = 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */; | |||
| proxyType = 2; | |||
| remoteGlobalIDString = D2AAC046055464E500DB518D; | |||
| remoteInfo = Juce; | |||
| }; | |||
| /* End PBXContainerItemProxy section */ | |||
| /* Begin PBXCopyFilesBuildPhase section */ | |||
| 84CFB0240909684B0053C22C /* CopyFiles */ = { | |||
| isa = PBXCopyFilesBuildPhase; | |||
| buildActionMask = 12; | |||
| dstPath = "$HOME/Library/Audio/Plug-Ins/Components"; | |||
| dstSubfolderSpec = 0; | |||
| files = ( | |||
| 84CFB029090968590053C22C /* DemoJuceAudioUnit.component in CopyFiles */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXCopyFilesBuildPhase section */ | |||
| /* Begin PBXFileReference section */ | |||
| 3E3AAA740670E29D00C484A8 /* AUResources.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; path = AUResources.r; sourceTree = "<group>"; }; | |||
| 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DemoJuceAudioUnit.component; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 3E8BF154079CA7A800021B09 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = "<absolute>"; }; | |||
| 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioChannelLayout.cpp; sourceTree = "<group>"; }; | |||
| 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAudioChannelLayout.h; sourceTree = "<group>"; }; | |||
| 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAStreamBasicDescription.cpp; sourceTree = "<group>"; }; | |||
| 844C50280C71B6E300D0082E /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = IOKit.framework; sourceTree = "<group>"; }; | |||
| 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | |||
| 845FAEE00A5C2696008C94D8 /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QuickTime.framework; sourceTree = "<group>"; }; | |||
| 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = MusicDeviceBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.cpp; sourceTree = "<absolute>"; }; | |||
| 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MusicDeviceBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/MusicDeviceBase.h; sourceTree = "<absolute>"; }; | |||
| 84BC4E5D0C8DDD3C00FA249B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_AudioUnitWrapper.cpp; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = juce_AudioUnitWrapper.r; path = ../../../wrapper/formats/AudioUnit/juce_AudioUnitWrapper.r; sourceTree = SOURCE_ROOT; }; | |||
| 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | |||
| 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Info-JuceAU.plist"; sourceTree = "<group>"; }; | |||
| 84F05217090674BB00AEC8DB /* JuceAU.exp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.exports; path = JuceAU.exp; sourceTree = "<group>"; }; | |||
| 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Juce.xcodeproj; path = ../../../../../build/macosx/Juce.xcodeproj; sourceTree = SOURCE_ROOT; }; | |||
| 84F0548E090687F600AEC8DB /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | |||
| 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.cpp; sourceTree = "<absolute>"; }; | |||
| 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUMIDIBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIBase.h; sourceTree = "<absolute>"; }; | |||
| 84F054E60906C8DD00AEC8DB /* AUMIDIEffectBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AUMIDIEffectBase.cpp; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.cpp; sourceTree = "<absolute>"; }; | |||
| 84F054E70906C8DD00AEC8DB /* AUMIDIEffectBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUMIDIEffectBase.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/OtherBases/AUMIDIEffectBase.h; sourceTree = "<absolute>"; }; | |||
| 84F054FD0906E9EA00AEC8DB /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84F054FE0906E9EA00AEC8DB /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 84F054FF0906E9EA00AEC8DB /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84F055000906E9EA00AEC8DB /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | |||
| 84F055250906FBCF00AEC8DB /* AUSilentTimeout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AUSilentTimeout.h; path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic/Utility/AUSilentTimeout.h; sourceTree = "<absolute>"; }; | |||
| 84F87962093B1EDC00225D65 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||
| A3C2CC6105B4A4BE000F141E /* AUViewLocalizedStringKeys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AUViewLocalizedStringKeys.h; sourceTree = "<group>"; }; | |||
| A9E885E90874B5BF00B2DFE8 /* CAThreadSafeList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAThreadSafeList.h; sourceTree = "<group>"; }; | |||
| EF64FA42057BC39200D99563 /* CAAUParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAAUParameter.cpp; sourceTree = "<group>"; }; | |||
| EF64FA43057BC39200D99563 /* CAAUParameter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAAUParameter.h; sourceTree = "<group>"; }; | |||
| F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CAVectorUnit.cpp; sourceTree = "<group>"; }; | |||
| F4E5DC290898301D00589A5A /* CAVectorUnit.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnit.h; sourceTree = "<group>"; }; | |||
| F4E5DC2A0898301D00589A5A /* CAVectorUnitTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CAVectorUnitTypes.h; sourceTree = "<group>"; }; | |||
| F5AA9A2F0281AAB901C34293 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreFoundation.framework; sourceTree = "<group>"; }; | |||
| F5AA9A300281AAB901C34293 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = CoreServices.framework; sourceTree = "<group>"; }; | |||
| F5D199EC03175E1E01CA2136 /* AUBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBase.cpp; sourceTree = "<group>"; }; | |||
| F5D199ED03175E1E01CA2136 /* AUBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBase.h; sourceTree = "<group>"; }; | |||
| F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUDispatch.cpp; sourceTree = "<group>"; }; | |||
| F5D199EF03175E1E01CA2136 /* AUDispatch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUDispatch.h; sourceTree = "<group>"; }; | |||
| F5D199F003175E1E01CA2136 /* AUInputElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUInputElement.cpp; sourceTree = "<group>"; }; | |||
| F5D199F103175E1E01CA2136 /* AUInputElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUInputElement.h; sourceTree = "<group>"; }; | |||
| F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUOutputElement.cpp; sourceTree = "<group>"; }; | |||
| F5D199F303175E1E01CA2136 /* AUOutputElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUOutputElement.h; sourceTree = "<group>"; }; | |||
| F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUScopeElement.cpp; sourceTree = "<group>"; }; | |||
| F5D199F603175E1E01CA2136 /* AUScopeElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUScopeElement.h; sourceTree = "<group>"; }; | |||
| F5D199F903175E1E01CA2136 /* ComponentBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ComponentBase.cpp; sourceTree = "<group>"; }; | |||
| F5D199FA03175E1E01CA2136 /* ComponentBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ComponentBase.h; sourceTree = "<group>"; }; | |||
| F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUEffectBase.cpp; sourceTree = "<group>"; }; | |||
| F5D199FF03175E1E01CA2136 /* AUEffectBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUEffectBase.h; sourceTree = "<group>"; }; | |||
| F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUBuffer.cpp; sourceTree = "<group>"; }; | |||
| F5D19A0F03175E1E01CA2136 /* AUBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUBuffer.h; sourceTree = "<group>"; }; | |||
| F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CAStreamBasicDescription.h; sourceTree = "<group>"; }; | |||
| F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewBase.cpp; sourceTree = "<group>"; }; | |||
| F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewBase.h; sourceTree = "<group>"; }; | |||
| F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewControl.cpp; sourceTree = "<group>"; }; | |||
| F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AUCarbonViewControl.h; sourceTree = "<group>"; }; | |||
| F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AUCarbonViewDispatch.cpp; sourceTree = "<group>"; }; | |||
| F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CarbonEventHandler.cpp; sourceTree = "<group>"; }; | |||
| F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CarbonEventHandler.h; sourceTree = "<group>"; }; | |||
| F5D19ABE0317606901CA2136 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AudioUnit.framework; sourceTree = "<group>"; }; | |||
| F5DA37E702821D04014500A0 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Carbon.framework; sourceTree = "<group>"; }; | |||
| /* End PBXFileReference section */ | |||
| /* Begin PBXFrameworksBuildPhase section */ | |||
| 3E8BF11E079CA60300021B09 /* Frameworks */ = { | |||
| isa = PBXFrameworksBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84FDAFE90C15B9E200CD0087 /* libjucedebug.a in Frameworks */, | |||
| 84CFAFEB0909666C0053C22C /* AudioToolbox.framework in Frameworks */, | |||
| 3E8BF11F079CA60300021B09 /* CoreFoundation.framework in Frameworks */, | |||
| 3E8BF120079CA60300021B09 /* CoreServices.framework in Frameworks */, | |||
| 3E8BF121079CA60300021B09 /* Carbon.framework in Frameworks */, | |||
| 3E8BF122079CA60300021B09 /* AudioUnit.framework in Frameworks */, | |||
| 84F0548F090687F600AEC8DB /* CoreAudio.framework in Frameworks */, | |||
| 84F87963093B1EDC00225D65 /* AGL.framework in Frameworks */, | |||
| 845FAEE10A5C2696008C94D8 /* QuickTime.framework in Frameworks */, | |||
| 844C50290C71B6E300D0082E /* IOKit.framework in Frameworks */, | |||
| 84BC4E5E0C8DDD3D00FA249B /* OpenGL.framework in Frameworks */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXFrameworksBuildPhase section */ | |||
| /* Begin PBXGroup section */ | |||
| 84EB403B090A4ED3008FAC1B /* Juce AU Code */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84EB4009090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp */, | |||
| 84EB400A090A4A2C008FAC1B /* juce_AudioUnitWrapper.r */, | |||
| ); | |||
| name = "Juce AU Code"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84F0516D09066DB800AEC8DB /* Plugin Code */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84F054FD0906E9EA00AEC8DB /* DemoEditorComponent.cpp */, | |||
| 84F054FE0906E9EA00AEC8DB /* DemoEditorComponent.h */, | |||
| 84F054FF0906E9EA00AEC8DB /* DemoJuceFilter.cpp */, | |||
| 84F055000906E9EA00AEC8DB /* DemoJuceFilter.h */, | |||
| 84EB404D090A5116008FAC1B /* JucePluginCharacteristics.h */, | |||
| 84F05215090674BB00AEC8DB /* Info-JuceAU.plist */, | |||
| 84F05217090674BB00AEC8DB /* JuceAU.exp */, | |||
| ); | |||
| name = "Plugin Code"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84F0516E09066DC900AEC8DB /* Wrapper Code */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84EB403B090A4ED3008FAC1B /* Juce AU Code */, | |||
| F5AA99C50281A64501C34293 /* Apple AU Code */, | |||
| ); | |||
| name = "Wrapper Code"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84FDAFB90C15B8F100CD0087 /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84FDAFBD0C15B8F100CD0087 /* libjucedebug.a */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| A3C2CC6005B4A4BE000F141E /* AUViewBase */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| A3C2CC6105B4A4BE000F141E /* AUViewLocalizedStringKeys.h */, | |||
| ); | |||
| path = AUViewBase; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5AA99B60281A61201C34293 = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| F5D199EA03175DB401CA2136 /* Source */, | |||
| 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */, | |||
| F5AA99C40281A62C01C34293 /* Products */, | |||
| F5AA9E890281AAC901C34293 /* Frameworks */, | |||
| ); | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5AA99C40281A62C01C34293 /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5AA99C50281A64501C34293 /* Apple AU Code */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| F5D199EB03175E1E01CA2136 /* AUBase */, | |||
| A3C2CC6005B4A4BE000F141E /* AUViewBase */, | |||
| F5D19AA603175F3201CA2136 /* AUCarbonViewBase */, | |||
| F5D199FD03175E1E01CA2136 /* OtherBases */, | |||
| F5D19A0C03175E1E01CA2136 /* Utility */, | |||
| F5D19A3603175E8C01CA2136 /* PublicUtility */, | |||
| ); | |||
| name = "Apple AU Code"; | |||
| path = /Developer/Examples/CoreAudio/AudioUnits/AUPublic; | |||
| sourceTree = "<absolute>"; | |||
| }; | |||
| F5AA9E890281AAC901C34293 /* Frameworks */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */, | |||
| F5D19ABE0317606901CA2136 /* AudioUnit.framework */, | |||
| 3E8BF154079CA7A800021B09 /* AudioToolbox.framework */, | |||
| 84F0548E090687F600AEC8DB /* CoreAudio.framework */, | |||
| F5DA37E702821D04014500A0 /* Carbon.framework */, | |||
| F5AA9A2F0281AAB901C34293 /* CoreFoundation.framework */, | |||
| F5AA9A300281AAB901C34293 /* CoreServices.framework */, | |||
| 84F87962093B1EDC00225D65 /* AGL.framework */, | |||
| 84BC4E5D0C8DDD3C00FA249B /* OpenGL.framework */, | |||
| 844C50280C71B6E300D0082E /* IOKit.framework */, | |||
| 845FAEE00A5C2696008C94D8 /* QuickTime.framework */, | |||
| ); | |||
| name = Frameworks; | |||
| path = /System/Library/Frameworks; | |||
| sourceTree = "<absolute>"; | |||
| }; | |||
| F5D199EA03175DB401CA2136 /* Source */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84F0516D09066DB800AEC8DB /* Plugin Code */, | |||
| 84F0516E09066DC900AEC8DB /* Wrapper Code */, | |||
| ); | |||
| name = Source; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5D199EB03175E1E01CA2136 /* AUBase */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 3E3AAA740670E29D00C484A8 /* AUResources.r */, | |||
| F5D199EC03175E1E01CA2136 /* AUBase.cpp */, | |||
| F5D199ED03175E1E01CA2136 /* AUBase.h */, | |||
| F5D199EE03175E1E01CA2136 /* AUDispatch.cpp */, | |||
| F5D199EF03175E1E01CA2136 /* AUDispatch.h */, | |||
| F5D199F003175E1E01CA2136 /* AUInputElement.cpp */, | |||
| F5D199F103175E1E01CA2136 /* AUInputElement.h */, | |||
| F5D199F203175E1E01CA2136 /* AUOutputElement.cpp */, | |||
| F5D199F303175E1E01CA2136 /* AUOutputElement.h */, | |||
| F5D199F503175E1E01CA2136 /* AUScopeElement.cpp */, | |||
| F5D199F603175E1E01CA2136 /* AUScopeElement.h */, | |||
| F5D199F903175E1E01CA2136 /* ComponentBase.cpp */, | |||
| F5D199FA03175E1E01CA2136 /* ComponentBase.h */, | |||
| ); | |||
| path = AUBase; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5D199FD03175E1E01CA2136 /* OtherBases */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84F054E40906C8DD00AEC8DB /* AUMIDIBase.cpp */, | |||
| 84F054E50906C8DD00AEC8DB /* AUMIDIBase.h */, | |||
| 84F054E60906C8DD00AEC8DB /* AUMIDIEffectBase.cpp */, | |||
| 84F054E70906C8DD00AEC8DB /* AUMIDIEffectBase.h */, | |||
| F5D199FE03175E1E01CA2136 /* AUEffectBase.cpp */, | |||
| F5D199FF03175E1E01CA2136 /* AUEffectBase.h */, | |||
| 84B4CDCF0C7DD23B0083122F /* MusicDeviceBase.cpp */, | |||
| 84B4CDD00C7DD23B0083122F /* MusicDeviceBase.h */, | |||
| ); | |||
| path = OtherBases; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5D19A0C03175E1E01CA2136 /* Utility */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| F5D19A0E03175E1E01CA2136 /* AUBuffer.cpp */, | |||
| F5D19A0F03175E1E01CA2136 /* AUBuffer.h */, | |||
| 84F055250906FBCF00AEC8DB /* AUSilentTimeout.h */, | |||
| ); | |||
| path = Utility; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| F5D19A3603175E8C01CA2136 /* PublicUtility */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| F4E5DC280898301D00589A5A /* CAVectorUnit.cpp */, | |||
| F4E5DC290898301D00589A5A /* CAVectorUnit.h */, | |||
| F4E5DC2A0898301D00589A5A /* CAVectorUnitTypes.h */, | |||
| A9E885E90874B5BF00B2DFE8 /* CAThreadSafeList.h */, | |||
| 7967EF8C04D70E7C00C625F7 /* CAAudioChannelLayout.h */, | |||
| 7967EF8B04D70E7C00C625F7 /* CAAudioChannelLayout.cpp */, | |||
| F5D19A6903175E8C01CA2136 /* CAStreamBasicDescription.h */, | |||
| 7967EF8D04D70E7C00C625F7 /* CAStreamBasicDescription.cpp */, | |||
| EF64FA42057BC39200D99563 /* CAAUParameter.cpp */, | |||
| EF64FA43057BC39200D99563 /* CAAUParameter.h */, | |||
| ); | |||
| name = PublicUtility; | |||
| path = /Developer/Examples/CoreAudio/PublicUtility; | |||
| sourceTree = "<absolute>"; | |||
| }; | |||
| F5D19AA603175F3201CA2136 /* AUCarbonViewBase */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| F5D19AA703175F3201CA2136 /* AUCarbonViewBase.cpp */, | |||
| F5D19AA803175F3201CA2136 /* AUCarbonViewBase.h */, | |||
| F5D19AA903175F3201CA2136 /* AUCarbonViewControl.cpp */, | |||
| F5D19AAA03175F3201CA2136 /* AUCarbonViewControl.h */, | |||
| F5D19AAB03175F3201CA2136 /* AUCarbonViewDispatch.cpp */, | |||
| F5D19AB003175F3201CA2136 /* CarbonEventHandler.cpp */, | |||
| F5D19AB103175F3201CA2136 /* CarbonEventHandler.h */, | |||
| ); | |||
| path = AUCarbonViewBase; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| /* End PBXGroup section */ | |||
| /* Begin PBXHeadersBuildPhase section */ | |||
| 3E8BF103079CA60300021B09 /* Headers */ = { | |||
| isa = PBXHeadersBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 3E8BF105079CA60300021B09 /* AUBase.h in Headers */, | |||
| 3E8BF106079CA60300021B09 /* AUDispatch.h in Headers */, | |||
| 3E8BF107079CA60300021B09 /* AUInputElement.h in Headers */, | |||
| 3E8BF108079CA60300021B09 /* AUOutputElement.h in Headers */, | |||
| 3E8BF109079CA60300021B09 /* AUScopeElement.h in Headers */, | |||
| 3E8BF10A079CA60300021B09 /* ComponentBase.h in Headers */, | |||
| 3E8BF10B079CA60300021B09 /* AUEffectBase.h in Headers */, | |||
| 3E8BF10C079CA60300021B09 /* AUBuffer.h in Headers */, | |||
| 3E8BF10D079CA60300021B09 /* CAStreamBasicDescription.h in Headers */, | |||
| 3E8BF10E079CA60300021B09 /* CAAudioChannelLayout.h in Headers */, | |||
| A9E885EA0874B5BF00B2DFE8 /* CAThreadSafeList.h in Headers */, | |||
| F4E5DC2C0898301D00589A5A /* CAVectorUnit.h in Headers */, | |||
| F4E5DC2D0898301D00589A5A /* CAVectorUnitTypes.h in Headers */, | |||
| 84F054E90906C8DD00AEC8DB /* AUMIDIBase.h in Headers */, | |||
| 84F054EB0906C8DD00AEC8DB /* AUMIDIEffectBase.h in Headers */, | |||
| 84F055020906E9EA00AEC8DB /* DemoEditorComponent.h in Headers */, | |||
| 84F055040906E9EA00AEC8DB /* DemoJuceFilter.h in Headers */, | |||
| 84F055260906FBCF00AEC8DB /* AUSilentTimeout.h in Headers */, | |||
| 84EB404E090A5116008FAC1B /* JucePluginCharacteristics.h in Headers */, | |||
| 84B4CDD20C7DD23B0083122F /* MusicDeviceBase.h in Headers */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXHeadersBuildPhase section */ | |||
| /* Begin PBXNativeTarget section */ | |||
| 3E8BF102079CA60300021B09 /* JuceAU */ = { | |||
| isa = PBXNativeTarget; | |||
| buildConfigurationList = A9E884AD0874ABE600B2DFE8 /* Build configuration list for PBXNativeTarget "JuceAU" */; | |||
| buildPhases = ( | |||
| 3E8BF103079CA60300021B09 /* Headers */, | |||
| 3E8BF110079CA60300021B09 /* Resources */, | |||
| 3E8BF111079CA60300021B09 /* Sources */, | |||
| 3E8BF11E079CA60300021B09 /* Frameworks */, | |||
| 3E8BF123079CA60300021B09 /* Rez */, | |||
| 84CFB0240909684B0053C22C /* CopyFiles */, | |||
| ); | |||
| buildRules = ( | |||
| ); | |||
| dependencies = ( | |||
| ); | |||
| name = JuceAU; | |||
| productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; | |||
| productName = MultitapAU; | |||
| productReference = 3E8BF126079CA60300021B09 /* DemoJuceAudioUnit.component */; | |||
| productType = "com.apple.product-type.bundle"; | |||
| }; | |||
| /* End PBXNativeTarget section */ | |||
| /* Begin PBXProject section */ | |||
| F5AA99BA0281A61201C34293 /* Project object */ = { | |||
| isa = PBXProject; | |||
| buildConfigurationList = A9E884B90874ABE600B2DFE8 /* Build configuration list for PBXProject "JuceDemoAU" */; | |||
| hasScannedForEncodings = 1; | |||
| mainGroup = F5AA99B60281A61201C34293; | |||
| productRefGroup = F5AA99C40281A62C01C34293 /* Products */; | |||
| projectDirPath = ""; | |||
| projectReferences = ( | |||
| { | |||
| ProductGroup = 84FDAFB90C15B8F100CD0087 /* Products */; | |||
| ProjectRef = 84F0545A0906865D00AEC8DB /* Juce.xcodeproj */; | |||
| }, | |||
| ); | |||
| targets = ( | |||
| 3E8BF102079CA60300021B09 /* JuceAU */, | |||
| ); | |||
| }; | |||
| /* End PBXProject section */ | |||
| /* Begin PBXReferenceProxy section */ | |||
| 84FDAFBD0C15B8F100CD0087 /* libjucedebug.a */ = { | |||
| isa = PBXReferenceProxy; | |||
| fileType = archive.ar; | |||
| path = libjucedebug.a; | |||
| remoteRef = 84FDAFBC0C15B8F100CD0087 /* PBXContainerItemProxy */; | |||
| sourceTree = BUILT_PRODUCTS_DIR; | |||
| }; | |||
| /* End PBXReferenceProxy section */ | |||
| /* Begin PBXResourcesBuildPhase section */ | |||
| 3E8BF110079CA60300021B09 /* Resources */ = { | |||
| isa = PBXResourcesBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84F0521E090674BB00AEC8DB /* Info-JuceAU.plist in Resources */, | |||
| 845FAE5F0A5C0A6A008C94D8 /* juce.xcconfig in Resources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXResourcesBuildPhase section */ | |||
| /* Begin PBXRezBuildPhase section */ | |||
| 3E8BF123079CA60300021B09 /* Rez */ = { | |||
| isa = PBXRezBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84EB400C090A4A2C008FAC1B /* juce_AudioUnitWrapper.r in Rez */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXRezBuildPhase section */ | |||
| /* Begin PBXSourcesBuildPhase section */ | |||
| 3E8BF111079CA60300021B09 /* Sources */ = { | |||
| isa = PBXSourcesBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 3E8BF115079CA60300021B09 /* AUInputElement.cpp in Sources */, | |||
| 3E8BF116079CA60300021B09 /* AUOutputElement.cpp in Sources */, | |||
| 3E8BF117079CA60300021B09 /* AUScopeElement.cpp in Sources */, | |||
| 3E8BF113079CA60300021B09 /* AUBase.cpp in Sources */, | |||
| 3E8BF119079CA60300021B09 /* AUEffectBase.cpp in Sources */, | |||
| 3E8BF114079CA60300021B09 /* AUDispatch.cpp in Sources */, | |||
| 3E8BF11C079CA60300021B09 /* CAStreamBasicDescription.cpp in Sources */, | |||
| 3E8BF11B079CA60300021B09 /* CAAudioChannelLayout.cpp in Sources */, | |||
| 84CFAF0E090965080053C22C /* CarbonEventHandler.cpp in Sources */, | |||
| 84CFAEFB090964560053C22C /* AUCarbonViewDispatch.cpp in Sources */, | |||
| 84CFAEFC090964560053C22C /* AUCarbonViewControl.cpp in Sources */, | |||
| 84CFAEFD090964560053C22C /* AUCarbonViewBase.cpp in Sources */, | |||
| 3E8BF118079CA60300021B09 /* ComponentBase.cpp in Sources */, | |||
| 84CFAF10090965080053C22C /* CAAUParameter.cpp in Sources */, | |||
| 3E8BF11A079CA60300021B09 /* AUBuffer.cpp in Sources */, | |||
| 84F054E80906C8DD00AEC8DB /* AUMIDIBase.cpp in Sources */, | |||
| 84F054EA0906C8DD00AEC8DB /* AUMIDIEffectBase.cpp in Sources */, | |||
| 84F055010906E9EA00AEC8DB /* DemoEditorComponent.cpp in Sources */, | |||
| 84F055030906E9EA00AEC8DB /* DemoJuceFilter.cpp in Sources */, | |||
| 84EB400B090A4A2C008FAC1B /* juce_AudioUnitWrapper.cpp in Sources */, | |||
| 84EB4042090A4F5A008FAC1B /* CAVectorUnit.cpp in Sources */, | |||
| 84B4CDD10C7DD23B0083122F /* MusicDeviceBase.cpp in Sources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXSourcesBuildPhase section */ | |||
| /* Begin XCBuildConfiguration section */ | |||
| A9E884AE0874ABE600B2DFE8 /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| COPY_PHASE_STRIP = NO; | |||
| EXPORTED_SYMBOLS_FILE = JuceAU.exp; | |||
| FRAMEWORK_SEARCH_PATHS = ""; | |||
| GCC_DYNAMIC_NO_PIC = NO; | |||
| GCC_ENABLE_FIX_AND_CONTINUE = NO; | |||
| GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||
| GCC_OPTIMIZATION_LEVEL = 0; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| GCC_USE_GCC3_PFE_SUPPORT = YES; | |||
| INFOPLIST_FILE = "Info-JuceAU.plist"; | |||
| INSTALL_PATH = "/Library/Audio/Plug-Ins/Components/"; | |||
| OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -I / -I /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers"; | |||
| PRODUCT_NAME = "$(AU_NAME)"; | |||
| SECTORDER_FLAGS = ""; | |||
| WARNING_CFLAGS = ( | |||
| "-Wmost", | |||
| "-Wno-four-char-constants", | |||
| "-Wno-unknown-pragmas", | |||
| "-Wno-non-virtual-dtor", | |||
| ); | |||
| WRAPPER_EXTENSION = component; | |||
| ZERO_LINK = NO; | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| A9E884AF0874ABE600B2DFE8 /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| COPY_PHASE_STRIP = YES; | |||
| EXPORTED_SYMBOLS_FILE = JuceAU.exp; | |||
| FRAMEWORK_SEARCH_PATHS = ""; | |||
| GCC_ENABLE_FIX_AND_CONTINUE = NO; | |||
| GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | |||
| GCC_OPTIMIZATION_LEVEL = 3; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| GCC_USE_GCC3_PFE_SUPPORT = YES; | |||
| INFOPLIST_FILE = "Info-JuceAU.plist"; | |||
| INSTALL_PATH = "/Library/Audio/Plug-Ins/Components/"; | |||
| OTHER_REZFLAGS = "-d ppc_$ppc -d i386_$i386 -I / -I /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers"; | |||
| PRODUCT_NAME = "$(AU_NAME)"; | |||
| SECTORDER_FLAGS = ""; | |||
| WARNING_CFLAGS = ( | |||
| "-Wmost", | |||
| "-Wno-four-char-constants", | |||
| "-Wno-unknown-pragmas", | |||
| "-Wno-non-virtual-dtor", | |||
| ); | |||
| WRAPPER_EXTENSION = component; | |||
| ZERO_LINK = NO; | |||
| }; | |||
| name = Release; | |||
| }; | |||
| A9E884BA0874ABE600B2DFE8 /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; | |||
| buildSettings = { | |||
| AU_NAME = DemoJuceAudioUnit; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| HEADER_SEARCH_PATHS = ../../../../../; | |||
| LIBRARY_SEARCH_PATHS = ../../../../../bin; | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| A9E884BB0874ABE600B2DFE8 /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 845FAE5E0A5C0A6A008C94D8 /* juce.xcconfig */; | |||
| buildSettings = { | |||
| AU_NAME = DemoJuceAudioUnit; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| HEADER_SEARCH_PATHS = ../../../../../; | |||
| LIBRARY_SEARCH_PATHS = ../../../../../bin; | |||
| }; | |||
| name = Release; | |||
| }; | |||
| /* End XCBuildConfiguration section */ | |||
| /* Begin XCConfigurationList section */ | |||
| A9E884AD0874ABE600B2DFE8 /* Build configuration list for PBXNativeTarget "JuceAU" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| A9E884AE0874ABE600B2DFE8 /* Debug */, | |||
| A9E884AF0874ABE600B2DFE8 /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| A9E884B90874ABE600B2DFE8 /* Build configuration list for PBXProject "JuceDemoAU" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| A9E884BA0874ABE600B2DFE8 /* Debug */, | |||
| A9E884BB0874ABE600B2DFE8 /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| /* End XCConfigurationList section */ | |||
| }; | |||
| rootObject = F5AA99BA0281A61201C34293 /* Project object */; | |||
| } | |||
| @@ -1,32 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>English</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string>EXECUTABLE_NAME</string> | |||
| <key>CFBundleGetInfoString</key> | |||
| <string>VERSION_STR</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.rawmaterialsoftware.JuceDemo</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>6.0</string> | |||
| <key>CFBundleName</key> | |||
| <string>PRODUCT_NAME</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>TDMw</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string>VERSION_STR</string> | |||
| <key>CFBundleSignature</key> | |||
| <string>PTul</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>VERSION_NUM</string> | |||
| <key>LSMultipleInstancesProhibited</key> | |||
| <string>true</string> | |||
| <key>LSPrefersCarbon</key> | |||
| <true/> | |||
| <key>NSAppleScriptEnabled</key> | |||
| <string>No</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -1,394 +0,0 @@ | |||
| // !$*UTF8*$! | |||
| { | |||
| archiveVersion = 1; | |||
| classes = { | |||
| }; | |||
| objectVersion = 42; | |||
| objects = { | |||
| /* Begin PBXBuildFile section */ | |||
| 5B521CB1088F264F009C75FE /* System.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B521CB0088F264F009C75FE /* System.framework */; }; | |||
| 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */; }; | |||
| 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */; }; | |||
| 841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */; }; | |||
| 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */; }; | |||
| 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */; }; | |||
| 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */; }; | |||
| 846444F10AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */; }; | |||
| 846444F20AFA005B00E7B2BE /* juce_Wrapper_CEffectProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E50AFA005B00E7B2BE /* juce_Wrapper_CEffectProcess.cpp */; }; | |||
| 846444F30AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessAS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E60AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessAS.cpp */; }; | |||
| 846444F40AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessMIDI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E70AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessMIDI.cpp */; }; | |||
| 846444F50AFA005B00E7B2BE /* juce_Wrapper_CEffectType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E80AFA005B00E7B2BE /* juce_Wrapper_CEffectType.cpp */; }; | |||
| 846444F60AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */; }; | |||
| 846444F70AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */; }; | |||
| 846444FA0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */; }; | |||
| 846445060AFA010800E7B2BE /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846445040AFA010800E7B2BE /* AGL.framework */; }; | |||
| 846445070AFA010800E7B2BE /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846445050AFA010800E7B2BE /* CoreAudio.framework */; }; | |||
| 8464450A0AFA012100E7B2BE /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 846445090AFA012100E7B2BE /* QuickTime.framework */; }; | |||
| 84BC4E9C0C8DDF6400FA249B /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BC4E9B0C8DDF6400FA249B /* OpenGL.framework */; }; | |||
| 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */; }; | |||
| 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */; }; | |||
| 84EEB4180AFB6679009655FF /* DummyResourceFile.r in Rez */ = {isa = PBXBuildFile; fileRef = 84EEB4170AFB6679009655FF /* DummyResourceFile.r */; }; | |||
| 84FAD76D0C7C894B00AF3028 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD76C0C7C894B00AF3028 /* IOKit.framework */; }; | |||
| 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */; }; | |||
| 84FDB0120C15BBCE00CD0087 /* libjucedebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FDB0100C15BBA500CD0087 /* libjucedebug.a */; }; | |||
| 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */; }; | |||
| /* End PBXBuildFile section */ | |||
| /* Begin PBXContainerItemProxy section */ | |||
| 84FAD7760C7C897000AF3028 /* PBXContainerItemProxy */ = { | |||
| isa = PBXContainerItemProxy; | |||
| containerPortal = 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */; | |||
| proxyType = 2; | |||
| remoteGlobalIDString = B65B09B30860FB0800FE2E6A; | |||
| remoteInfo = "Plugin Library"; | |||
| }; | |||
| 84FDB00F0C15BBA500CD0087 /* PBXContainerItemProxy */ = { | |||
| isa = PBXContainerItemProxy; | |||
| containerPortal = 846444D70AF9FFDB00E7B2BE /* Juce.xcodeproj */; | |||
| proxyType = 2; | |||
| remoteGlobalIDString = D2AAC046055464E500DB518D; | |||
| remoteInfo = Juce; | |||
| }; | |||
| /* End PBXContainerItemProxy section */ | |||
| /* Begin PBXFileReference section */ | |||
| 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||
| 5B521CB0088F264F009C75FE /* System.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = System.framework; path = /System/Library/Frameworks/System.framework; sourceTree = "<absolute>"; }; | |||
| 5B521CEB08916D36009C75FE /* 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 = "<absolute>"; }; | |||
| 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 841E072C0AF9F015005E6FCC /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 841E072E0AF9F015005E6FCC /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | |||
| 841E072F0AF9F015005E6FCC /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | |||
| 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASUtilities.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASUtilities.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_RTASWrapper.cpp; path = ../../../wrapper/formats/RTAS/juce_RTASWrapper.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 841E07420AF9F126005E6FCC /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; }; | |||
| 846444D70AF9FFDB00E7B2BE /* Juce.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Juce.xcodeproj; path = ../../../../../build/macosx/Juce.xcodeproj; sourceTree = SOURCE_ROOT; }; | |||
| 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroup.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroup.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectGroupMIDI.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectGroupMIDI.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectMIDIUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectMIDIUtils.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E50AFA005B00E7B2BE /* juce_Wrapper_CEffectProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectProcess.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcess.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E60AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessAS.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectProcessAS.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessAS.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E70AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessMIDI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectProcessMIDI.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectProcessMIDI.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E80AFA005B00E7B2BE /* juce_Wrapper_CEffectType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectType.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectType.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_CEffectTypeRTAS.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_CEffectTypeRTAS.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_ChunkDataParser.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_ChunkDataParser.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846444ED0AFA005B00E7B2BE /* juce_Wrapper_Header.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_Wrapper_Header.h; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Header.h; sourceTree = SOURCE_ROOT; }; | |||
| 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PlugInUtils.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PlugInUtils.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 846445040AFA010800E7B2BE /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||
| 846445050AFA010800E7B2BE /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | |||
| 846445090AFA012100E7B2BE /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||
| 84BC4E9B0C8DDF6400FA249B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||
| 84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonReleaseSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonReleaseSettings.xcconfig; sourceTree = "<absolute>"; }; | |||
| 84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = CommonDebugSettings.xcconfig; path = /Users/jules/stuff/PT_73_SDK/AlturaPorts/TDMPlugIns/common/Mac/CommonDebugSettings.xcconfig; sourceTree = "<absolute>"; }; | |||
| 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_Dispatcher.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_Dispatcher.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_Wrapper_PluginInitialize.cpp; path = ../../../wrapper/formats/RTAS/wrappers/juce_Wrapper_PluginInitialize.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84EEB4170AFB6679009655FF /* DummyResourceFile.r */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.rez; name = DummyResourceFile.r; path = ../../../wrapper/formats/RTAS/DummyResourceFile.r; sourceTree = SOURCE_ROOT; }; | |||
| 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = juce_RTASCompileFlags.h; path = ../../../wrapper/formats/RTAS/juce_RTASCompileFlags.h; sourceTree = SOURCE_ROOT; }; | |||
| 84FAD76C0C7C894B00AF3028 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | |||
| 8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceRTASDemo.dpm; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| /* End PBXFileReference section */ | |||
| /* Begin PBXFrameworksBuildPhase section */ | |||
| 8D01CCCD0486CAD60068D4B7 /* Frameworks */ = { | |||
| isa = PBXFrameworksBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84FAD77B0C7C89E100AF3028 /* libPluginLibrary.a in Frameworks */, | |||
| 84FDB0120C15BBCE00CD0087 /* libjucedebug.a in Frameworks */, | |||
| 8D01CCCE0486CAD60068D4B7 /* Carbon.framework in Frameworks */, | |||
| 5B521CB1088F264F009C75FE /* System.framework in Frameworks */, | |||
| 846445060AFA010800E7B2BE /* AGL.framework in Frameworks */, | |||
| 846445070AFA010800E7B2BE /* CoreAudio.framework in Frameworks */, | |||
| 8464450A0AFA012100E7B2BE /* QuickTime.framework in Frameworks */, | |||
| 84FAD76D0C7C894B00AF3028 /* IOKit.framework in Frameworks */, | |||
| 84BC4E9C0C8DDF6400FA249B /* OpenGL.framework in Frameworks */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXFrameworksBuildPhase section */ | |||
| /* Begin PBXGroup section */ | |||
| 089C166AFE841209C02AAC07 /* ProjectTemplate */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */, | |||
| 84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */, | |||
| 08FB77ADFE841716C02AAC07 /* Source */, | |||
| 089C167CFE841241C02AAC07 /* Resources */, | |||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */, | |||
| 19C28FB4FE9D528D11CA2CBB /* Products */, | |||
| ); | |||
| name = ProjectTemplate; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84BC4E9B0C8DDF6400FA249B /* OpenGL.framework */, | |||
| 84FAD76C0C7C894B00AF3028 /* IOKit.framework */, | |||
| 846445040AFA010800E7B2BE /* AGL.framework */, | |||
| 846445050AFA010800E7B2BE /* CoreAudio.framework */, | |||
| 846445090AFA012100E7B2BE /* QuickTime.framework */, | |||
| 846444D70AF9FFDB00E7B2BE /* Juce.xcodeproj */, | |||
| 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */, | |||
| 5B521CB0088F264F009C75FE /* System.framework */, | |||
| 08EA7FFBFE8413EDC02AAC07 /* Carbon.framework */, | |||
| ); | |||
| name = "External Frameworks and Libraries"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 089C167CFE841241C02AAC07 /* Resources */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84EEB4170AFB6679009655FF /* DummyResourceFile.r */, | |||
| 841E07420AF9F126005E6FCC /* Info.plist */, | |||
| ); | |||
| name = Resources; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 08FB77ADFE841716C02AAC07 /* Source */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 841E07270AF9EFE2005E6FCC /* filter */, | |||
| 841E072A0AF9EFEF005E6FCC /* wrapper */, | |||
| ); | |||
| name = Source; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 19C28FB4FE9D528D11CA2CBB /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 841E07270AF9EFE2005E6FCC /* filter */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 841E072B0AF9F015005E6FCC /* DemoEditorComponent.cpp */, | |||
| 841E072C0AF9F015005E6FCC /* DemoEditorComponent.h */, | |||
| 841E072D0AF9F015005E6FCC /* DemoJuceFilter.cpp */, | |||
| 841E072E0AF9F015005E6FCC /* DemoJuceFilter.h */, | |||
| 841E072F0AF9F015005E6FCC /* JucePluginCharacteristics.h */, | |||
| ); | |||
| name = filter; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 841E072A0AF9EFEF005E6FCC /* wrapper */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 841E07340AF9F02D005E6FCC /* rtas specific */, | |||
| ); | |||
| name = wrapper; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 841E07340AF9F02D005E6FCC /* rtas specific */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 846444E10AFA003B00E7B2BE /* Digi code wrappers */, | |||
| 841E073B0AF9F099005E6FCC /* juce_RTASUtilities.cpp */, | |||
| 841E073C0AF9F099005E6FCC /* juce_RTASWrapper.cpp */, | |||
| 84F5CF5F0B1B705E00A2E279 /* juce_RTASCompileFlags.h */, | |||
| ); | |||
| name = "rtas specific"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 846444E10AFA003B00E7B2BE /* Digi code wrappers */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84C9D7F90AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp */, | |||
| 84C9D7FA0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp */, | |||
| 846444E20AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp */, | |||
| 846444E30AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp */, | |||
| 846444E40AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp */, | |||
| 846444E50AFA005B00E7B2BE /* juce_Wrapper_CEffectProcess.cpp */, | |||
| 846444E60AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessAS.cpp */, | |||
| 846444E70AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessMIDI.cpp */, | |||
| 846444E80AFA005B00E7B2BE /* juce_Wrapper_CEffectType.cpp */, | |||
| 846444E90AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp */, | |||
| 846444EA0AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp */, | |||
| 846444ED0AFA005B00E7B2BE /* juce_Wrapper_Header.h */, | |||
| 846444EE0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp */, | |||
| ); | |||
| name = "Digi code wrappers"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84FAD7730C7C897000AF3028 /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84FDB00C0C15BBA500CD0087 /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84FDB0100C15BBA500CD0087 /* libjucedebug.a */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| /* End PBXGroup section */ | |||
| /* Begin PBXNativeTarget section */ | |||
| 8D01CCC60486CAD60068D4B7 /* JuceRTASDemo */ = { | |||
| isa = PBXNativeTarget; | |||
| buildConfigurationList = 5B521C99088F2389009C75FE /* Build configuration list for PBXNativeTarget "JuceRTASDemo" */; | |||
| buildPhases = ( | |||
| 8D01CCCB0486CAD60068D4B7 /* Sources */, | |||
| 8D01CCCD0486CAD60068D4B7 /* Frameworks */, | |||
| 5B521D370891748B009C75FE /* Rez */, | |||
| ); | |||
| buildRules = ( | |||
| ); | |||
| dependencies = ( | |||
| ); | |||
| name = JuceRTASDemo; | |||
| productInstallPath = "$(HOME)/Library/Bundles"; | |||
| productName = ProjectTemplate; | |||
| productReference = 8D01CCD20486CAD60068D4B7 /* JuceRTASDemo.dpm */; | |||
| productType = "com.apple.product-type.bundle"; | |||
| }; | |||
| /* End PBXNativeTarget section */ | |||
| /* Begin PBXProject section */ | |||
| 089C1669FE841209C02AAC07 /* Project object */ = { | |||
| isa = PBXProject; | |||
| buildConfigurationList = 5B521C9D088F2389009C75FE /* Build configuration list for PBXProject "juce_RTASDemo" */; | |||
| hasScannedForEncodings = 1; | |||
| mainGroup = 089C166AFE841209C02AAC07 /* ProjectTemplate */; | |||
| projectDirPath = ""; | |||
| projectReferences = ( | |||
| { | |||
| ProductGroup = 84FDB00C0C15BBA500CD0087 /* Products */; | |||
| ProjectRef = 846444D70AF9FFDB00E7B2BE /* Juce.xcodeproj */; | |||
| }, | |||
| { | |||
| ProductGroup = 84FAD7730C7C897000AF3028 /* Products */; | |||
| ProjectRef = 5B521CEB08916D36009C75FE /* PluginLibrary.xcodeproj */; | |||
| }, | |||
| ); | |||
| targets = ( | |||
| 8D01CCC60486CAD60068D4B7 /* JuceRTASDemo */, | |||
| ); | |||
| }; | |||
| /* End PBXProject section */ | |||
| /* Begin PBXReferenceProxy section */ | |||
| 84FAD7770C7C897000AF3028 /* libPluginLibrary.a */ = { | |||
| isa = PBXReferenceProxy; | |||
| fileType = archive.ar; | |||
| path = libPluginLibrary.a; | |||
| remoteRef = 84FAD7760C7C897000AF3028 /* PBXContainerItemProxy */; | |||
| sourceTree = BUILT_PRODUCTS_DIR; | |||
| }; | |||
| 84FDB0100C15BBA500CD0087 /* libjucedebug.a */ = { | |||
| isa = PBXReferenceProxy; | |||
| fileType = archive.ar; | |||
| path = libjucedebug.a; | |||
| remoteRef = 84FDB00F0C15BBA500CD0087 /* PBXContainerItemProxy */; | |||
| sourceTree = BUILT_PRODUCTS_DIR; | |||
| }; | |||
| /* End PBXReferenceProxy section */ | |||
| /* Begin PBXRezBuildPhase section */ | |||
| 5B521D370891748B009C75FE /* Rez */ = { | |||
| isa = PBXRezBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84EEB4180AFB6679009655FF /* DummyResourceFile.r in Rez */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXRezBuildPhase section */ | |||
| /* Begin PBXSourcesBuildPhase section */ | |||
| 8D01CCCB0486CAD60068D4B7 /* Sources */ = { | |||
| isa = PBXSourcesBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 841E07300AF9F015005E6FCC /* DemoEditorComponent.cpp in Sources */, | |||
| 841E07310AF9F015005E6FCC /* DemoJuceFilter.cpp in Sources */, | |||
| 841E073D0AF9F099005E6FCC /* juce_RTASUtilities.cpp in Sources */, | |||
| 841E073E0AF9F099005E6FCC /* juce_RTASWrapper.cpp in Sources */, | |||
| 846444EF0AFA005B00E7B2BE /* juce_Wrapper_CEffectGroup.cpp in Sources */, | |||
| 846444F00AFA005B00E7B2BE /* juce_Wrapper_CEffectGroupMIDI.cpp in Sources */, | |||
| 846444F10AFA005B00E7B2BE /* juce_Wrapper_CEffectMIDIUtils.cpp in Sources */, | |||
| 846444F20AFA005B00E7B2BE /* juce_Wrapper_CEffectProcess.cpp in Sources */, | |||
| 846444F30AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessAS.cpp in Sources */, | |||
| 846444F40AFA005B00E7B2BE /* juce_Wrapper_CEffectProcessMIDI.cpp in Sources */, | |||
| 846444F50AFA005B00E7B2BE /* juce_Wrapper_CEffectType.cpp in Sources */, | |||
| 846444F60AFA005B00E7B2BE /* juce_Wrapper_CEffectTypeRTAS.cpp in Sources */, | |||
| 846444F70AFA005B00E7B2BE /* juce_Wrapper_ChunkDataParser.cpp in Sources */, | |||
| 846444FA0AFA005B00E7B2BE /* juce_Wrapper_PlugInUtils.cpp in Sources */, | |||
| 84C9D7FB0AFA3C9C00F1348E /* juce_Wrapper_Dispatcher.cpp in Sources */, | |||
| 84C9D7FC0AFA3C9C00F1348E /* juce_Wrapper_PluginInitialize.cpp in Sources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXSourcesBuildPhase section */ | |||
| /* Begin XCBuildConfiguration section */ | |||
| 5B521C9A088F2389009C75FE /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| 5B521C9E088F2389009C75FE /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 84C4426A0B306D39003FCBFF /* CommonDebugSettings.xcconfig */; | |||
| buildSettings = { | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| MacBag = /Users/jules/stuff/PT_73_SDK/MacBag; | |||
| PRODUCT_NAME = JuceRTASDemo; | |||
| USER_HEADER_SEARCH_PATHS = "/Users/jules/code/juce $(inherited)"; | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| 5BEA73AA09E4370600964A97 /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| }; | |||
| name = Release; | |||
| }; | |||
| 5BEA73AB09E4370600964A97 /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 84C442690B306D39003FCBFF /* CommonReleaseSettings.xcconfig */; | |||
| buildSettings = { | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| MacBag = /Users/jules/stuff/PT_73_SDK/MacBag; | |||
| PRODUCT_NAME = JuceRTASDemo; | |||
| USER_HEADER_SEARCH_PATHS = "/Users/jules/code/juce $(inherited)"; | |||
| }; | |||
| name = Release; | |||
| }; | |||
| /* End XCBuildConfiguration section */ | |||
| /* Begin XCConfigurationList section */ | |||
| 5B521C99088F2389009C75FE /* Build configuration list for PBXNativeTarget "JuceRTASDemo" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| 5B521C9A088F2389009C75FE /* Debug */, | |||
| 5BEA73AA09E4370600964A97 /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| 5B521C9D088F2389009C75FE /* Build configuration list for PBXProject "juce_RTASDemo" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| 5B521C9E088F2389009C75FE /* Debug */, | |||
| 5BEA73AB09E4370600964A97 /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| /* End XCConfigurationList section */ | |||
| }; | |||
| rootObject = 089C1669FE841209C02AAC07 /* Project object */; | |||
| } | |||
| @@ -1,49 +0,0 @@ | |||
|  | |||
| Microsoft Visual Studio Solution File, Format Version 9.00 | |||
| # Visual Studio 2005 | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "juce_RTAS", "juce_RTAS.vcproj", "{2EB09DDD-CF48-45ED-9698-6C5ADF123C98}" | |||
| ProjectSection(ProjectDependencies) = postProject | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} = {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} | |||
| EndProjectSection | |||
| EndProject | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JUCE", "..\..\..\..\..\build\win32\vc8\JUCE.vcproj", "{AE232C11-D91C-4CA1-B24E-8B11A52EFF26}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug DLL|Win32 = Debug DLL|Win32 | |||
| Debug|Win32 = Debug|Win32 | |||
| DLL Debug|Win32 = DLL Debug|Win32 | |||
| DLL Release|Win32 = DLL Release|Win32 | |||
| Release DLL|Win32 = Release DLL|Win32 | |||
| Release|Win32 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Debug DLL|Win32.ActiveCfg = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Debug DLL|Win32.Build.0 = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.DLL Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.DLL Debug|Win32.Build.0 = Debug|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.DLL Release|Win32.ActiveCfg = Release|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.DLL Release|Win32.Build.0 = Release|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Release DLL|Win32.ActiveCfg = Release|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Release DLL|Win32.Build.0 = Release|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {2EB09DDD-CF48-45ED-9698-6C5ADF123C98}.Release|Win32.Build.0 = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug DLL|Win32.ActiveCfg = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug DLL|Win32.Build.0 = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Release|Win32.Build.0 = DLL Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release DLL|Win32.ActiveCfg = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release DLL|Win32.Build.0 = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release|Win32.Build.0 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| EndGlobalSection | |||
| EndGlobal | |||
| @@ -1,629 +0,0 @@ | |||
| <?xml version="1.0" encoding="Windows-1252"?> | |||
| <VisualStudioProject | |||
| ProjectType="Visual C++" | |||
| Version="8.00" | |||
| Name="juce_RTAS" | |||
| ProjectGUID="{2EB09DDD-CF48-45ED-9698-6C5ADF123C98}" | |||
| RootNamespace="juce_RTAS" | |||
| Keyword="Win32Proj" | |||
| > | |||
| <Platforms> | |||
| <Platform | |||
| Name="Win32" | |||
| /> | |||
| </Platforms> | |||
| <ToolFiles> | |||
| </ToolFiles> | |||
| <Configurations> | |||
| <Configuration | |||
| Name="Debug|Win32" | |||
| OutputDirectory="$(SolutionDir)$(ConfigurationName)" | |||
| IntermediateDirectory="$(ConfigurationName)" | |||
| ConfigurationType="2" | |||
| CharacterSet="0" | |||
| > | |||
| <Tool | |||
| Name="VCPreBuildEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| CommandLine="copy /Y ..\..\..\wrapper\formats\RTAS\DefaultResourceFile "$(TargetPath)".rsr
" | |||
| Outputs="$(TargetPath).rsr" | |||
| /> | |||
| <Tool | |||
| Name="VCXMLDataGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebServiceProxyGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCMIDLTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| Optimization="0" | |||
| AdditionalIncludeDirectories="../../src" | |||
| PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;JUCE_RTAS_EXPORTS" | |||
| MinimalRebuild="true" | |||
| BasicRuntimeChecks="3" | |||
| RuntimeLibrary="3" | |||
| UsePrecompiledHeader="0" | |||
| WarningLevel="3" | |||
| Detect64BitPortabilityProblems="true" | |||
| DebugInformationFormat="4" | |||
| /> | |||
| <Tool | |||
| Name="VCManagedResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPreLinkEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCLinkerTool" | |||
| OutputFile="$(OutDir)\$(ProjectName).dpm" | |||
| LinkIncremental="2" | |||
| AdditionalLibraryDirectories="" | |||
| IgnoreDefaultLibraryNames="libcmtd.lib" | |||
| ModuleDefinitionFile="../../../wrapper/formats/RTAS/juce_RTAS_dlldefs.def" | |||
| GenerateDebugInformation="true" | |||
| SubSystem="2" | |||
| /> | |||
| <Tool | |||
| Name="VCALinkTool" | |||
| /> | |||
| <Tool | |||
| Name="VCManifestTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXDCMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCBscMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCFxCopTool" | |||
| /> | |||
| <Tool | |||
| Name="VCAppVerifierTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebDeploymentTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPostBuildEventTool" | |||
| /> | |||
| </Configuration> | |||
| <Configuration | |||
| Name="Release|Win32" | |||
| OutputDirectory="$(SolutionDir)$(ConfigurationName)" | |||
| IntermediateDirectory="$(ConfigurationName)" | |||
| ConfigurationType="2" | |||
| CharacterSet="0" | |||
| WholeProgramOptimization="1" | |||
| > | |||
| <Tool | |||
| Name="VCPreBuildEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| CommandLine="copy /Y ..\..\..\wrapper\formats\RTAS\DefaultResourceFile "$(TargetPath)".rsr
" | |||
| Outputs="$(TargetPath).rsr" | |||
| /> | |||
| <Tool | |||
| Name="VCXMLDataGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebServiceProxyGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCMIDLTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| AdditionalIncludeDirectories="../../src" | |||
| PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JUCE_RTAS_EXPORTS" | |||
| RuntimeLibrary="2" | |||
| UsePrecompiledHeader="0" | |||
| WarningLevel="3" | |||
| Detect64BitPortabilityProblems="true" | |||
| DebugInformationFormat="3" | |||
| CallingConvention="0" | |||
| /> | |||
| <Tool | |||
| Name="VCManagedResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPreLinkEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCLinkerTool" | |||
| OutputFile="$(OutDir)\$(ProjectName).dpm" | |||
| LinkIncremental="1" | |||
| IgnoreDefaultLibraryNames="libcmt.lib" | |||
| ModuleDefinitionFile="../../../wrapper/formats/RTAS/juce_RTAS_dlldefs.def" | |||
| GenerateDebugInformation="true" | |||
| SubSystem="2" | |||
| OptimizeReferences="2" | |||
| EnableCOMDATFolding="2" | |||
| /> | |||
| <Tool | |||
| Name="VCALinkTool" | |||
| /> | |||
| <Tool | |||
| Name="VCManifestTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXDCMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCBscMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCFxCopTool" | |||
| /> | |||
| <Tool | |||
| Name="VCAppVerifierTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebDeploymentTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPostBuildEventTool" | |||
| /> | |||
| </Configuration> | |||
| </Configurations> | |||
| <References> | |||
| </References> | |||
| <Files> | |||
| <Filter | |||
| Name="Source Files" | |||
| Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" | |||
| UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" | |||
| > | |||
| <Filter | |||
| Name="filter" | |||
| > | |||
| <File | |||
| RelativePath="..\..\src\DemoEditorComponent.cpp" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoEditorComponent.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoJuceFilter.cpp" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoJuceFilter.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\JucePluginCharacteristics.h" | |||
| > | |||
| </File> | |||
| </Filter> | |||
| <Filter | |||
| Name="wrapper code" | |||
| > | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\juce_RTASCompileFlags.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\juce_RTASUtilities.cpp" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\juce_RTASWrapper.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <Filter | |||
| Name="cpp wrappers" | |||
| > | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\juce_RTAS_dlldefs.def" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectGroup.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectGroupMIDI.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectMIDIUtils.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectProcess.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectProcessAS.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectProcessMIDI.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectType.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_CEffectTypeRTAS.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_ChunkDataParser.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_DefaultSwap.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_DLLMain.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_Header.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\RTAS\wrappers\juce_Wrapper_PlugInUtils.cpp" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| > | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| CallingConvention="2" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter | |||
| Name="Header Files" | |||
| Filter="h;hpp;hxx;hm;inl;inc;xsd" | |||
| UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" | |||
| > | |||
| <File | |||
| RelativePath=".\resource.h" | |||
| > | |||
| </File> | |||
| </Filter> | |||
| <Filter | |||
| Name="Resource Files" | |||
| Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" | |||
| UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" | |||
| > | |||
| <File | |||
| RelativePath=".\juce_RTASDemo.rc" | |||
| > | |||
| </File> | |||
| </Filter> | |||
| <Filter | |||
| Name="libs" | |||
| > | |||
| <Filter | |||
| Name="debug" | |||
| > | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Debug\lib\DAE.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Debug\lib\DigiExt.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Debug\lib\DSI.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Debug\lib\PlugInLib.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Release|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| <Filter | |||
| Name="release" | |||
| > | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Release\lib\DAE.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Release\lib\DigiExt.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Release\lib\DSI.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\..\..\..\..\..\essentials\PT_73_SDK\WinBag\Release\lib\PlugInLib.lib" | |||
| > | |||
| <FileConfiguration | |||
| Name="Debug|Win32" | |||
| ExcludedFromBuild="true" | |||
| > | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| </FileConfiguration> | |||
| </File> | |||
| </Filter> | |||
| </Filter> | |||
| </Files> | |||
| <Globals> | |||
| </Globals> | |||
| </VisualStudioProject> | |||
| @@ -1,112 +0,0 @@ | |||
| // Microsoft Visual C++ generated resource script. | |||
| // | |||
| #include "resource.h" | |||
| #define APSTUDIO_READONLY_SYMBOLS | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // | |||
| // Generated from the TEXTINCLUDE 2 resource. | |||
| // | |||
| #include "afxres.h" | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| #undef APSTUDIO_READONLY_SYMBOLS | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // English (U.S.) resources | |||
| #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) | |||
| #ifdef _WIN32 | |||
| LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US | |||
| #pragma code_page(1252) | |||
| #endif //_WIN32 | |||
| #ifdef APSTUDIO_INVOKED | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // | |||
| // TEXTINCLUDE | |||
| // | |||
| 1 TEXTINCLUDE | |||
| BEGIN | |||
| "resource.h\0" | |||
| END | |||
| 2 TEXTINCLUDE | |||
| BEGIN | |||
| "#include ""afxres.h""\r\n" | |||
| "\0" | |||
| END | |||
| 3 TEXTINCLUDE | |||
| BEGIN | |||
| "\r\n" | |||
| "\0" | |||
| END | |||
| #endif // APSTUDIO_INVOKED | |||
| #endif // English (U.S.) resources | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // English (U.K.) resources | |||
| #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) | |||
| #ifdef _WIN32 | |||
| LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK | |||
| #pragma code_page(1252) | |||
| #endif //_WIN32 | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // | |||
| // Version | |||
| // | |||
| VS_VERSION_INFO VERSIONINFO | |||
| FILEVERSION 1,0,0,1 | |||
| PRODUCTVERSION 1,0,0,1 | |||
| FILEFLAGSMASK 0x17L | |||
| #ifdef _DEBUG | |||
| FILEFLAGS 0x1L | |||
| #else | |||
| FILEFLAGS 0x0L | |||
| #endif | |||
| FILEOS 0x4L | |||
| FILETYPE 0x2L | |||
| FILESUBTYPE 0x0L | |||
| BEGIN | |||
| BLOCK "StringFileInfo" | |||
| BEGIN | |||
| BLOCK "080904b0" | |||
| BEGIN | |||
| VALUE "FileDescription", "Juce Audio Plugin RTAS Demo" | |||
| VALUE "FileVersion", "1, 0, 0, 1" | |||
| VALUE "InternalName", "Juce RTAS Demo" | |||
| VALUE "LegalCopyright", "Copyright (C) 2006" | |||
| VALUE "ProductName", "Juce RTAS Demo" | |||
| VALUE "ProductVersion", "1, 0, 0, 1" | |||
| END | |||
| END | |||
| BLOCK "VarFileInfo" | |||
| BEGIN | |||
| VALUE "Translation", 0x809, 1200 | |||
| END | |||
| END | |||
| #endif // English (U.K.) resources | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| #ifndef APSTUDIO_INVOKED | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| // | |||
| // Generated from the TEXTINCLUDE 3 resource. | |||
| // | |||
| ///////////////////////////////////////////////////////////////////////////// | |||
| #endif // not APSTUDIO_INVOKED | |||
| @@ -1,14 +0,0 @@ | |||
| //{{NO_DEPENDENCIES}} | |||
| // Microsoft Visual C++ generated include file. | |||
| // Used by juce_RTASDemo.rc | |||
| // Next default values for new objects | |||
| // | |||
| #ifdef APSTUDIO_INVOKED | |||
| #ifndef APSTUDIO_READONLY_SYMBOLS | |||
| #define _APS_NEXT_RESOURCE_VALUE 101 | |||
| #define _APS_NEXT_COMMAND_VALUE 40001 | |||
| #define _APS_NEXT_CONTROL_VALUE 1001 | |||
| #define _APS_NEXT_SYMED_VALUE 101 | |||
| #endif | |||
| #endif | |||
| @@ -1,55 +0,0 @@ | |||
| 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/formats/VST/*.cpp" | |||
| ), | |||
| matchrecursive ( | |||
| "../../src/*.h", | |||
| "../../src/*.cpp" | |||
| ) | |||
| } | |||
| @@ -1,28 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>English</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string>JuceVST</string> | |||
| <key>CFBundleGetInfoString</key> | |||
| <string>Juce VST Demo plugin</string> | |||
| <key>CFBundleIconFile</key> | |||
| <string></string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.rawmaterialsoftware.JuceVSTDemo</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>6.0</string> | |||
| <key>CFBundleName</key> | |||
| <string>JuceVST</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>BNDL</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string></string> | |||
| <key>CFBundleSignature</key> | |||
| <string>JUCE</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>0.0.1</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -1,22 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>CFBundleDevelopmentRegion</key> | |||
| <string>English</string> | |||
| <key>CFBundleExecutable</key> | |||
| <string>JuceVST</string> | |||
| <key>CFBundleIdentifier</key> | |||
| <string>com.rawmaterialsoftware.JuceVST</string> | |||
| <key>CFBundleInfoDictionaryVersion</key> | |||
| <string>1.0</string> | |||
| <key>CFBundlePackageType</key> | |||
| <string>APPL</string> | |||
| <key>CFBundleSignature</key> | |||
| <string>????</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1.0</string> | |||
| <key>CSResourcesFileMapped</key> | |||
| <string>yes</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -1,289 +0,0 @@ | |||
| // !$*UTF8*$! | |||
| { | |||
| archiveVersion = 1; | |||
| classes = { | |||
| }; | |||
| objectVersion = 42; | |||
| objects = { | |||
| /* Begin PBXBuildFile section */ | |||
| 8456E9D008A29AE60087C412 /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8456E9CF08A29AE60087C412 /* CoreServices.framework */; }; | |||
| 845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */; }; | |||
| 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */; }; | |||
| 84BC4EBC0C8DE02200FA249B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BC4EBA0C8DE02200FA249B /* IOKit.framework */; }; | |||
| 84BC4EBD0C8DE02200FA249B /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84BC4EBB0C8DE02200FA249B /* OpenGL.framework */; }; | |||
| 84E1AE51089EBAAA00E85E4F /* DemoEditorComponent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */; }; | |||
| 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */; }; | |||
| 84E1AF2B089EBE4C00E85E4F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E1AF2A089EBE4C00E85E4F /* Carbon.framework */; }; | |||
| 84E1AF30089EBE5A00E85E4F /* QuickTime.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E1AF2F089EBE5A00E85E4F /* QuickTime.framework */; }; | |||
| 84E1AF34089EBE6C00E85E4F /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E1AF33089EBE6C00E85E4F /* AGL.framework */; }; | |||
| 84E1AF38089EBF1300E85E4F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84E1AF37089EBF1300E85E4F /* CoreAudio.framework */; }; | |||
| 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E1AF41089EBFD900E85E4F /* Info.plist */; }; | |||
| 84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */ = {isa = PBXBuildFile; fileRef = 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */; }; | |||
| /* End PBXBuildFile section */ | |||
| /* Begin PBXFileReference section */ | |||
| 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JucePluginCharacteristics.h; path = ../../src/JucePluginCharacteristics.h; sourceTree = SOURCE_ROOT; }; | |||
| 8456E9CF08A29AE60087C412 /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = "<absolute>"; }; | |||
| 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xcconfig; name = juce.xcconfig; path = ../../../../../build/macosx/juce.xcconfig; sourceTree = SOURCE_ROOT; }; | |||
| 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = juce_VstWrapper.cpp; path = ../../../wrapper/formats/VST/juce_VstWrapper.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84BC4EBA0C8DE02200FA249B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; | |||
| 84BC4EBB0C8DE02200FA249B /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; }; | |||
| 84E1AE47089EBA6A00E85E4F /* JuceVST.vst */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = JuceVST.vst; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
| 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoEditorComponent.cpp; path = ../../src/DemoEditorComponent.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84E1AE4E089EBAAA00E85E4F /* DemoEditorComponent.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoEditorComponent.h; path = ../../src/DemoEditorComponent.h; sourceTree = SOURCE_ROOT; }; | |||
| 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = DemoJuceFilter.cpp; path = ../../src/DemoJuceFilter.cpp; sourceTree = SOURCE_ROOT; }; | |||
| 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = DemoJuceFilter.h; path = ../../src/DemoJuceFilter.h; sourceTree = SOURCE_ROOT; }; | |||
| 84E1AF2A089EBE4C00E85E4F /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; | |||
| 84E1AF2F089EBE5A00E85E4F /* QuickTime.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuickTime.framework; path = /System/Library/Frameworks/QuickTime.framework; sourceTree = "<absolute>"; }; | |||
| 84E1AF33089EBE6C00E85E4F /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = "<absolute>"; }; | |||
| 84E1AF37089EBF1300E85E4F /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; }; | |||
| 84E1AF41089EBFD900E85E4F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = SOURCE_ROOT; }; | |||
| 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "How to use this framework.txt"; path = "../../../How to use this framework.txt"; sourceTree = SOURCE_ROOT; }; | |||
| /* End PBXFileReference section */ | |||
| /* Begin PBXFrameworksBuildPhase section */ | |||
| 84E1AE45089EBA6A00E85E4F /* Frameworks */ = { | |||
| isa = PBXFrameworksBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84E1AF2B089EBE4C00E85E4F /* Carbon.framework in Frameworks */, | |||
| 84E1AF30089EBE5A00E85E4F /* QuickTime.framework in Frameworks */, | |||
| 84E1AF34089EBE6C00E85E4F /* AGL.framework in Frameworks */, | |||
| 84E1AF38089EBF1300E85E4F /* CoreAudio.framework in Frameworks */, | |||
| 8456E9D008A29AE60087C412 /* CoreServices.framework in Frameworks */, | |||
| 84BC4EBC0C8DE02200FA249B /* IOKit.framework in Frameworks */, | |||
| 84BC4EBD0C8DE02200FA249B /* OpenGL.framework in Frameworks */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXFrameworksBuildPhase section */ | |||
| /* Begin PBXGroup section */ | |||
| 089C166AFE841209C02AAC07 /* JuceVST */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 08FB77ADFE841716C02AAC07 /* Source */, | |||
| 84F5CF030B1B66B100A2E279 /* How to use this framework.txt */, | |||
| 089C167CFE841241C02AAC07 /* Resources */, | |||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */, | |||
| 19C28FB4FE9D528D11CA2CBB /* Products */, | |||
| ); | |||
| name = JuceVST; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 089C1671FE841209C02AAC07 /* External Frameworks and Libraries */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84BC4EBA0C8DE02200FA249B /* IOKit.framework */, | |||
| 84BC4EBB0C8DE02200FA249B /* OpenGL.framework */, | |||
| 84E1AF2A089EBE4C00E85E4F /* Carbon.framework */, | |||
| 8456E9CF08A29AE60087C412 /* CoreServices.framework */, | |||
| 84E1AF37089EBF1300E85E4F /* CoreAudio.framework */, | |||
| 84E1AF33089EBE6C00E85E4F /* AGL.framework */, | |||
| 84E1AF2F089EBE5A00E85E4F /* QuickTime.framework */, | |||
| ); | |||
| name = "External Frameworks and Libraries"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 089C167CFE841241C02AAC07 /* Resources */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84E1AF41089EBFD900E85E4F /* Info.plist */, | |||
| ); | |||
| name = Resources; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 08FB77ADFE841716C02AAC07 /* Source */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84E1AE4C089EBA9300E85E4F /* filter */, | |||
| 84E1AE53089EBACA00E85E4F /* wrapper code */, | |||
| 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */, | |||
| ); | |||
| name = Source; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 19C28FB4FE9D528D11CA2CBB /* Products */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84E1AE47089EBA6A00E85E4F /* JuceVST.vst */, | |||
| ); | |||
| name = Products; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84E1AE4C089EBA9300E85E4F /* filter */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84E1AE4D089EBAAA00E85E4F /* DemoEditorComponent.cpp */, | |||
| 84E1AE4E089EBAAA00E85E4F /* DemoEditorComponent.h */, | |||
| 84E1AE4F089EBAAA00E85E4F /* DemoJuceFilter.cpp */, | |||
| 84E1AE50089EBAAA00E85E4F /* DemoJuceFilter.h */, | |||
| 84551AA009BDB8F3009C9F3E /* JucePluginCharacteristics.h */, | |||
| ); | |||
| name = filter; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| 84E1AE53089EBACA00E85E4F /* wrapper code */ = { | |||
| isa = PBXGroup; | |||
| children = ( | |||
| 84BACBD10987847C0073300C /* juce_VstWrapper.cpp */, | |||
| ); | |||
| name = "wrapper code"; | |||
| sourceTree = "<group>"; | |||
| }; | |||
| /* End PBXGroup section */ | |||
| /* Begin PBXNativeTarget section */ | |||
| 84E1AE46089EBA6A00E85E4F /* JuceVST */ = { | |||
| isa = PBXNativeTarget; | |||
| buildConfigurationList = 84E1AE48089EBA8900E85E4F /* Build configuration list for PBXNativeTarget "JuceVST" */; | |||
| buildPhases = ( | |||
| 84E1AE43089EBA6A00E85E4F /* Resources */, | |||
| 84E1AE44089EBA6A00E85E4F /* Sources */, | |||
| 84E1AE45089EBA6A00E85E4F /* Frameworks */, | |||
| ); | |||
| buildRules = ( | |||
| ); | |||
| dependencies = ( | |||
| ); | |||
| name = JuceVST; | |||
| productName = JuceVST; | |||
| productReference = 84E1AE47089EBA6A00E85E4F /* JuceVST.vst */; | |||
| productType = "com.apple.product-type.bundle"; | |||
| }; | |||
| /* End PBXNativeTarget section */ | |||
| /* Begin PBXProject section */ | |||
| 089C1669FE841209C02AAC07 /* Project object */ = { | |||
| isa = PBXProject; | |||
| buildConfigurationList = 84E1ADD2089EB1BA00E85E4F /* Build configuration list for PBXProject "JuceVST" */; | |||
| hasScannedForEncodings = 1; | |||
| mainGroup = 089C166AFE841209C02AAC07 /* JuceVST */; | |||
| projectDirPath = ""; | |||
| targets = ( | |||
| 84E1AE46089EBA6A00E85E4F /* JuceVST */, | |||
| ); | |||
| }; | |||
| /* End PBXProject section */ | |||
| /* Begin PBXResourcesBuildPhase section */ | |||
| 84E1AE43089EBA6A00E85E4F /* Resources */ = { | |||
| isa = PBXResourcesBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84E1AF42089EBFD900E85E4F /* Info.plist in Resources */, | |||
| 845FAE4C0A5C09FA008C94D8 /* juce.xcconfig in Resources */, | |||
| 84F5CF040B1B66B100A2E279 /* How to use this framework.txt in Resources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXResourcesBuildPhase section */ | |||
| /* Begin PBXSourcesBuildPhase section */ | |||
| 84E1AE44089EBA6A00E85E4F /* Sources */ = { | |||
| isa = PBXSourcesBuildPhase; | |||
| buildActionMask = 2147483647; | |||
| files = ( | |||
| 84E1AE51089EBAAA00E85E4F /* DemoEditorComponent.cpp in Sources */, | |||
| 84E1AE52089EBAAA00E85E4F /* DemoJuceFilter.cpp in Sources */, | |||
| 84BACBD20987847C0073300C /* juce_VstWrapper.cpp in Sources */, | |||
| ); | |||
| runOnlyForDeploymentPostprocessing = 0; | |||
| }; | |||
| /* End PBXSourcesBuildPhase section */ | |||
| /* Begin XCBuildConfiguration section */ | |||
| 84E1ADD3089EB1BA00E85E4F /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */; | |||
| buildSettings = { | |||
| GCC_OPTIMIZATION_LEVEL = 0; | |||
| GCC_PREPROCESSOR_DEFINITIONS = DEBUG; | |||
| HEADER_SEARCH_PATHS = ( | |||
| ../../../../.., | |||
| "~/stuff/vstsdk2.4/", | |||
| ); | |||
| LIBRARY_SEARCH_PATHS = ../../../../../bin; | |||
| OTHER_LDFLAGS = "-ljucedebug"; | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| 84E1ADD4089EB1BA00E85E4F /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| baseConfigurationReference = 845FAE4B0A5C09FA008C94D8 /* juce.xcconfig */; | |||
| buildSettings = { | |||
| GCC_PREPROCESSOR_DEFINITIONS = NDEBUG; | |||
| HEADER_SEARCH_PATHS = ( | |||
| ../../../../.., | |||
| "~/stuff/vstsdk2.4/", | |||
| ); | |||
| LIBRARY_SEARCH_PATHS = ../../../../../bin; | |||
| OTHER_LDFLAGS = "-ljuce"; | |||
| }; | |||
| name = Release; | |||
| }; | |||
| 84E1AE49089EBA8900E85E4F /* Debug */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| COPY_PHASE_STRIP = NO; | |||
| GCC_GENERATE_DEBUGGING_SYMBOLS = YES; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| GENERATE_PKGINFO_FILE = YES; | |||
| INFOPLIST_FILE = info.plist; | |||
| PRODUCT_NAME = JuceVST; | |||
| SYMROOT = "$(HOME)/Library/Audio/Plug-Ins/VST"; | |||
| WARNING_CFLAGS = ( | |||
| "-Wmost", | |||
| "-Wno-four-char-constants", | |||
| "-Wno-unknown-pragmas", | |||
| ); | |||
| WRAPPER_EXTENSION = vst; | |||
| }; | |||
| name = Debug; | |||
| }; | |||
| 84E1AE4A089EBA8900E85E4F /* Release */ = { | |||
| isa = XCBuildConfiguration; | |||
| buildSettings = { | |||
| COPY_PHASE_STRIP = YES; | |||
| GCC_GENERATE_DEBUGGING_SYMBOLS = NO; | |||
| GCC_INLINES_ARE_PRIVATE_EXTERN = YES; | |||
| GCC_SYMBOLS_PRIVATE_EXTERN = YES; | |||
| GENERATE_PKGINFO_FILE = YES; | |||
| INFOPLIST_FILE = info.plist; | |||
| PRODUCT_NAME = JuceVST; | |||
| SYMROOT = "$(HOME)/Library/Audio/Plug-Ins/VST"; | |||
| WARNING_CFLAGS = ( | |||
| "-Wmost", | |||
| "-Wno-four-char-constants", | |||
| "-Wno-unknown-pragmas", | |||
| ); | |||
| WRAPPER_EXTENSION = vst; | |||
| }; | |||
| name = Release; | |||
| }; | |||
| /* End XCBuildConfiguration section */ | |||
| /* Begin XCConfigurationList section */ | |||
| 84E1ADD2089EB1BA00E85E4F /* Build configuration list for PBXProject "JuceVST" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| 84E1ADD3089EB1BA00E85E4F /* Debug */, | |||
| 84E1ADD4089EB1BA00E85E4F /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| 84E1AE48089EBA8900E85E4F /* Build configuration list for PBXNativeTarget "JuceVST" */ = { | |||
| isa = XCConfigurationList; | |||
| buildConfigurations = ( | |||
| 84E1AE49089EBA8900E85E4F /* Debug */, | |||
| 84E1AE4A089EBA8900E85E4F /* Release */, | |||
| ); | |||
| defaultConfigurationIsVisible = 0; | |||
| defaultConfigurationName = Debug; | |||
| }; | |||
| /* End XCConfigurationList section */ | |||
| }; | |||
| rootObject = 089C1669FE841209C02AAC07 /* Project object */; | |||
| } | |||
| @@ -1,16 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |||
| <plist version="1.0"> | |||
| <dict> | |||
| <key>BuildVersion</key> | |||
| <string>38</string> | |||
| <key>CFBundleShortVersionString</key> | |||
| <string>1.0</string> | |||
| <key>CFBundleVersion</key> | |||
| <string>1.0</string> | |||
| <key>ProjectName</key> | |||
| <string>CarbonProjectTemplates</string> | |||
| <key>SourceVersion</key> | |||
| <string>140000</string> | |||
| </dict> | |||
| </plist> | |||
| @@ -1,39 +0,0 @@ | |||
|  | |||
| Microsoft Visual Studio Solution File, Format Version 9.00 | |||
| # Visual Studio 2005 | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JuceAudioPlugin Demo", "juce_vst.vcproj", "{6F0F1E35-EAF8-431A-83D9-F0340921E560}" | |||
| ProjectSection(ProjectDependencies) = postProject | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} = {AE232C11-D91C-4CA1-B24E-8B11A52EFF26} | |||
| EndProjectSection | |||
| EndProject | |||
| Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JUCE", "..\..\..\..\..\build\win32\vc8\JUCE.vcproj", "{AE232C11-D91C-4CA1-B24E-8B11A52EFF26}" | |||
| EndProject | |||
| Global | |||
| GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
| Debug|Win32 = Debug|Win32 | |||
| DLL Debug|Win32 = DLL Debug|Win32 | |||
| DLL Release|Win32 = DLL Release|Win32 | |||
| Release|Win32 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.DLL Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.DLL Debug|Win32.Build.0 = Debug|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.DLL Release|Win32.ActiveCfg = Release|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.DLL Release|Win32.Build.0 = Release|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {6F0F1E35-EAF8-431A-83D9-F0340921E560}.Release|Win32.Build.0 = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Debug|Win32.Build.0 = Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.DLL Release|Win32.Build.0 = DLL Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release|Win32.ActiveCfg = Release|Win32 | |||
| {AE232C11-D91C-4CA1-B24E-8B11A52EFF26}.Release|Win32.Build.0 = Release|Win32 | |||
| EndGlobalSection | |||
| GlobalSection(SolutionProperties) = preSolution | |||
| HideSolutionNode = FALSE | |||
| EndGlobalSection | |||
| EndGlobal | |||
| @@ -1,268 +0,0 @@ | |||
| <?xml version="1.0" encoding="Windows-1252"?> | |||
| <VisualStudioProject | |||
| ProjectType="Visual C++" | |||
| Version="8.00" | |||
| Name="JuceAudioPlugin Demo" | |||
| ProjectGUID="{6F0F1E35-EAF8-431A-83D9-F0340921E560}" | |||
| RootNamespace="JuceAudioPlugin Demo" | |||
| > | |||
| <Platforms> | |||
| <Platform | |||
| Name="Win32" | |||
| /> | |||
| </Platforms> | |||
| <ToolFiles> | |||
| </ToolFiles> | |||
| <Configurations> | |||
| <Configuration | |||
| Name="Debug|Win32" | |||
| OutputDirectory=".\Debug" | |||
| IntermediateDirectory=".\Debug" | |||
| ConfigurationType="2" | |||
| InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops" | |||
| UseOfMFC="0" | |||
| ATLMinimizesCRunTimeLibraryUsage="false" | |||
| CharacterSet="2" | |||
| > | |||
| <Tool | |||
| Name="VCPreBuildEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXMLDataGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebServiceProxyGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCMIDLTool" | |||
| PreprocessorDefinitions="_DEBUG" | |||
| MkTypLibCompatible="true" | |||
| SuppressStartupBanner="true" | |||
| TargetEnvironment="1" | |||
| TypeLibraryName=".\Debug/juce_vst.tlb" | |||
| HeaderFileName="" | |||
| /> | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| Optimization="0" | |||
| AdditionalIncludeDirectories="../../src" | |||
| PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;JUCE_VST_EXPORTS" | |||
| MinimalRebuild="true" | |||
| BasicRuntimeChecks="3" | |||
| RuntimeLibrary="1" | |||
| RuntimeTypeInfo="true" | |||
| UsePrecompiledHeader="0" | |||
| PrecompiledHeaderFile=".\Debug/juce_vst.pch" | |||
| AssemblerListingLocation=".\Debug/" | |||
| ObjectFile=".\Debug/" | |||
| ProgramDataBaseFileName=".\Debug/" | |||
| WarningLevel="3" | |||
| SuppressStartupBanner="true" | |||
| DebugInformationFormat="4" | |||
| /> | |||
| <Tool | |||
| Name="VCManagedResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCResourceCompilerTool" | |||
| PreprocessorDefinitions="_DEBUG" | |||
| Culture="2057" | |||
| /> | |||
| <Tool | |||
| Name="VCPreLinkEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCLinkerTool" | |||
| OutputFile=".\Debug/juce_vst.dll" | |||
| LinkIncremental="2" | |||
| SuppressStartupBanner="true" | |||
| GenerateManifest="false" | |||
| GenerateDebugInformation="true" | |||
| ProgramDatabaseFile=".\Debug/juce_vst.pdb" | |||
| ImportLibrary=".\Debug/juce_vst.lib" | |||
| TargetMachine="1" | |||
| /> | |||
| <Tool | |||
| Name="VCALinkTool" | |||
| /> | |||
| <Tool | |||
| Name="VCManifestTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXDCMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCBscMakeTool" | |||
| SuppressStartupBanner="true" | |||
| OutputFile=".\Debug/juce_vst.bsc" | |||
| /> | |||
| <Tool | |||
| Name="VCFxCopTool" | |||
| /> | |||
| <Tool | |||
| Name="VCAppVerifierTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebDeploymentTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPostBuildEventTool" | |||
| /> | |||
| </Configuration> | |||
| <Configuration | |||
| Name="Release|Win32" | |||
| OutputDirectory=".\Release" | |||
| IntermediateDirectory=".\Release" | |||
| ConfigurationType="2" | |||
| InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops" | |||
| UseOfMFC="0" | |||
| ATLMinimizesCRunTimeLibraryUsage="false" | |||
| CharacterSet="2" | |||
| > | |||
| <Tool | |||
| Name="VCPreBuildEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCCustomBuildTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXMLDataGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebServiceProxyGeneratorTool" | |||
| /> | |||
| <Tool | |||
| Name="VCMIDLTool" | |||
| PreprocessorDefinitions="NDEBUG" | |||
| MkTypLibCompatible="true" | |||
| SuppressStartupBanner="true" | |||
| TargetEnvironment="1" | |||
| TypeLibraryName=".\Release/juce_vst.tlb" | |||
| HeaderFileName="" | |||
| /> | |||
| <Tool | |||
| Name="VCCLCompilerTool" | |||
| Optimization="3" | |||
| InlineFunctionExpansion="1" | |||
| EnableIntrinsicFunctions="true" | |||
| FavorSizeOrSpeed="1" | |||
| WholeProgramOptimization="true" | |||
| AdditionalIncludeDirectories="../../src" | |||
| PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;JUCE_VST_EXPORTS" | |||
| StringPooling="true" | |||
| RuntimeLibrary="0" | |||
| EnableFunctionLevelLinking="true" | |||
| RuntimeTypeInfo="true" | |||
| UsePrecompiledHeader="0" | |||
| PrecompiledHeaderFile=".\Release/juce_vst.pch" | |||
| AssemblerListingLocation=".\Release/" | |||
| ObjectFile=".\Release/" | |||
| ProgramDataBaseFileName=".\Release/" | |||
| WarningLevel="3" | |||
| SuppressStartupBanner="true" | |||
| /> | |||
| <Tool | |||
| Name="VCManagedResourceCompilerTool" | |||
| /> | |||
| <Tool | |||
| Name="VCResourceCompilerTool" | |||
| PreprocessorDefinitions="NDEBUG" | |||
| Culture="2057" | |||
| /> | |||
| <Tool | |||
| Name="VCPreLinkEventTool" | |||
| /> | |||
| <Tool | |||
| Name="VCLinkerTool" | |||
| OutputFile=".\Release/juce_vst.dll" | |||
| LinkIncremental="1" | |||
| SuppressStartupBanner="true" | |||
| GenerateManifest="false" | |||
| ProgramDatabaseFile=".\Release/juce_vst.pdb" | |||
| ImportLibrary=".\Release/juce_vst.lib" | |||
| TargetMachine="1" | |||
| /> | |||
| <Tool | |||
| Name="VCALinkTool" | |||
| /> | |||
| <Tool | |||
| Name="VCManifestTool" | |||
| /> | |||
| <Tool | |||
| Name="VCXDCMakeTool" | |||
| /> | |||
| <Tool | |||
| Name="VCBscMakeTool" | |||
| SuppressStartupBanner="true" | |||
| OutputFile=".\Release/juce_vst.bsc" | |||
| /> | |||
| <Tool | |||
| Name="VCFxCopTool" | |||
| /> | |||
| <Tool | |||
| Name="VCAppVerifierTool" | |||
| /> | |||
| <Tool | |||
| Name="VCWebDeploymentTool" | |||
| /> | |||
| <Tool | |||
| Name="VCPostBuildEventTool" | |||
| /> | |||
| </Configuration> | |||
| </Configurations> | |||
| <References> | |||
| </References> | |||
| <Files> | |||
| <Filter | |||
| Name="Source Files" | |||
| Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" | |||
| > | |||
| <Filter | |||
| Name="filter" | |||
| > | |||
| <File | |||
| RelativePath="..\..\src\DemoEditorComponent.cpp" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoEditorComponent.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoJuceFilter.cpp" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\DemoJuceFilter.h" | |||
| > | |||
| </File> | |||
| <File | |||
| RelativePath="..\..\src\JucePluginCharacteristics.h" | |||
| > | |||
| </File> | |||
| </Filter> | |||
| <Filter | |||
| Name="wrapper_code" | |||
| > | |||
| <File | |||
| RelativePath="..\..\..\wrapper\formats\VST\juce_VstWrapper.cpp" | |||
| > | |||
| </File> | |||
| </Filter> | |||
| </Filter> | |||
| <Filter | |||
| Name="Resource Files" | |||
| Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" | |||
| > | |||
| </Filter> | |||
| <File | |||
| RelativePath="..\..\readme.txt" | |||
| > | |||
| </File> | |||
| </Files> | |||
| <Globals> | |||
| </Globals> | |||
| </VisualStudioProject> | |||
| @@ -1,195 +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.h" | |||
| #include "DemoEditorComponent.h" | |||
| //============================================================================== | |||
| // quick-and-dirty function to format a timecode string | |||
| static const String timeToTimecodeString (const double seconds) | |||
| { | |||
| const double absSecs = fabs (seconds); | |||
| const tchar* const sign = (seconds < 0) ? T("-") : T(""); | |||
| const int hours = (int) (absSecs / (60.0 * 60.0)); | |||
| const int mins = ((int) (absSecs / 60.0)) % 60; | |||
| const int secs = ((int) absSecs) % 60; | |||
| return String::formatted (T("%s%02d:%02d:%02d:%03d"), | |||
| sign, hours, mins, secs, | |||
| roundDoubleToInt (absSecs * 1000) % 1000); | |||
| } | |||
| // quick-and-dirty function to format a bars/beats string | |||
| static const String ppqToBarsBeatsString (const double ppq, | |||
| const double lastBarPPQ, | |||
| const int numerator, | |||
| const int denominator) | |||
| { | |||
| if (numerator == 0 || denominator == 0) | |||
| return T("1|1|0"); | |||
| const int ppqPerBar = (numerator * 4 / denominator); | |||
| const double beats = (fmod (ppq, ppqPerBar) / ppqPerBar) * numerator; | |||
| const int bar = ((int) ppq) / ppqPerBar + 1; | |||
| const int beat = ((int) beats) + 1; | |||
| const int ticks = ((int) (fmod (beats, 1.0) * 960.0)); | |||
| String s; | |||
| s << bar << T('|') << beat << T('|') << ticks; | |||
| return s; | |||
| } | |||
| //============================================================================== | |||
| DemoEditorComponent::DemoEditorComponent (DemoJuceFilter* const ownerFilter) | |||
| : AudioProcessorEditor (ownerFilter) | |||
| { | |||
| // create our gain slider.. | |||
| addAndMakeVisible (gainSlider = new Slider (T("gain"))); | |||
| gainSlider->addListener (this); | |||
| gainSlider->setRange (0.0, 1.0, 0.01); | |||
| gainSlider->setTooltip (T("changes the volume of the audio that runs through the plugin..")); | |||
| // get the gain parameter from the filter and use it to set up our slider | |||
| gainSlider->setValue (ownerFilter->getParameter (0), false); | |||
| // create and add the midi keyboard component.. | |||
| addAndMakeVisible (midiKeyboard | |||
| = new MidiKeyboardComponent (ownerFilter->keyboardState, | |||
| MidiKeyboardComponent::horizontalKeyboard)); | |||
| // add a label that will display the current timecode and status.. | |||
| addAndMakeVisible (infoLabel = new Label (String::empty, String::empty)); | |||
| // add the triangular resizer component for the bottom-right of the UI | |||
| addAndMakeVisible (resizer = new ResizableCornerComponent (this, &resizeLimits)); | |||
| resizeLimits.setSizeLimits (150, 150, 800, 300); | |||
| // set our component's initial size to be the last one that was stored in the filter's settings | |||
| setSize (ownerFilter->lastUIWidth, | |||
| ownerFilter->lastUIHeight); | |||
| // register ourselves with the filter - it will use its ChangeBroadcaster base | |||
| // class to tell us when something has changed, and this will call our changeListenerCallback() | |||
| // method. | |||
| ownerFilter->addChangeListener (this); | |||
| } | |||
| DemoEditorComponent::~DemoEditorComponent() | |||
| { | |||
| getFilter()->removeChangeListener (this); | |||
| deleteAllChildren(); | |||
| } | |||
| //============================================================================== | |||
| void DemoEditorComponent::paint (Graphics& g) | |||
| { | |||
| // just clear the window | |||
| g.fillAll (Colour::greyLevel (0.9f)); | |||
| } | |||
| void DemoEditorComponent::resized() | |||
| { | |||
| gainSlider->setBounds (10, 10, 200, 22); | |||
| infoLabel->setBounds (10, 35, 450, 20); | |||
| const int keyboardHeight = 70; | |||
| midiKeyboard->setBounds (4, getHeight() - keyboardHeight - 4, | |||
| getWidth() - 8, keyboardHeight); | |||
| resizer->setBounds (getWidth() - 16, getHeight() - 16, 16, 16); | |||
| // if we've been resized, tell the filter so that it can store the new size | |||
| // in its settings | |||
| getFilter()->lastUIWidth = getWidth(); | |||
| getFilter()->lastUIHeight = getHeight(); | |||
| } | |||
| //============================================================================== | |||
| void DemoEditorComponent::changeListenerCallback (void* source) | |||
| { | |||
| // this is the filter telling us that it's changed, so we'll update our | |||
| // display of the time, midi message, etc. | |||
| updateParametersFromFilter(); | |||
| } | |||
| void DemoEditorComponent::sliderValueChanged (Slider*) | |||
| { | |||
| getFilter()->setParameterNotifyingHost (0, (float) gainSlider->getValue()); | |||
| } | |||
| //============================================================================== | |||
| void DemoEditorComponent::updateParametersFromFilter() | |||
| { | |||
| DemoJuceFilter* const filter = getFilter(); | |||
| // we use this lock to make sure the processBlock() method isn't writing to the | |||
| // lastMidiMessage variable while we're trying to read it, but be extra-careful to | |||
| // only hold the lock for a minimum amount of time.. | |||
| filter->getCallbackLock().enter(); | |||
| // take a local copy of the info we need while we've got the lock.. | |||
| const AudioPlayHead::CurrentPositionInfo positionInfo (filter->lastPosInfo); | |||
| const float newGain = filter->getParameter (0); | |||
| // ..release the lock ASAP | |||
| filter->getCallbackLock().exit(); | |||
| // ..and after releasing the lock, we're free to do the time-consuming UI stuff.. | |||
| String infoText; | |||
| infoText << String (positionInfo.bpm, 2) << T(" bpm, ") | |||
| << positionInfo.timeSigNumerator << T("/") << positionInfo.timeSigDenominator | |||
| << T(" - ") << timeToTimecodeString (positionInfo.timeInSeconds) | |||
| << T(" - ") << ppqToBarsBeatsString (positionInfo.ppqPosition, | |||
| positionInfo.ppqPositionOfLastBarStart, | |||
| positionInfo.timeSigNumerator, | |||
| positionInfo.timeSigDenominator); | |||
| if (positionInfo.isPlaying) | |||
| infoText << T(" (playing)"); | |||
| infoLabel->setText (infoText, false); | |||
| /* Update our slider. | |||
| (note that it's important here to tell the slider not to send a change | |||
| message, because that would cause it to call the filter with a parameter | |||
| change message again, and the values would drift out. | |||
| */ | |||
| gainSlider->setValue (newGain, false); | |||
| setSize (filter->lastUIWidth, | |||
| filter->lastUIHeight); | |||
| } | |||
| @@ -1,99 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef DEMOJUCEPLUGINEDITOR_H | |||
| #define DEMOJUCEPLUGINEDITOR_H | |||
| #include "DemoJuceFilter.h" | |||
| //============================================================================== | |||
| /** | |||
| This is the Component that our filter will use as its UI. | |||
| One or more of these is created by the DemoJuceFilter::createEditor() method, | |||
| and they will be deleted at some later time by the wrapper code. | |||
| To demonstrate the correct way of connecting a filter to its UI, this | |||
| class is a ChangeListener, and our demo filter is a ChangeBroadcaster. The | |||
| editor component registers with the filter when it's created and deregisters | |||
| when it's destroyed. When the filter's parameters are changed, it broadcasts | |||
| a message and this editor responds by updating its display. | |||
| */ | |||
| class DemoEditorComponent : public AudioProcessorEditor, | |||
| public ChangeListener, | |||
| public SliderListener | |||
| { | |||
| public: | |||
| /** Constructor. | |||
| When created, this will register itself with the filter for changes. It's | |||
| safe to assume that the filter won't be deleted before this object is. | |||
| */ | |||
| DemoEditorComponent (DemoJuceFilter* const ownerFilter); | |||
| /** Destructor. */ | |||
| ~DemoEditorComponent(); | |||
| //============================================================================== | |||
| /** Our demo filter is a ChangeBroadcaster, and will call us back when one of | |||
| its parameters changes. | |||
| */ | |||
| void changeListenerCallback (void* source); | |||
| void sliderValueChanged (Slider*); | |||
| //============================================================================== | |||
| /** Standard Juce paint callback. */ | |||
| void paint (Graphics& g); | |||
| /** Standard Juce resize callback. */ | |||
| void resized(); | |||
| private: | |||
| //============================================================================== | |||
| Slider* gainSlider; | |||
| MidiKeyboardComponent* midiKeyboard; | |||
| Label* infoLabel; | |||
| ResizableCornerComponent* resizer; | |||
| ComponentBoundsConstrainer resizeLimits; | |||
| TooltipWindow tooltipWindow; | |||
| void updateParametersFromFilter(); | |||
| // handy wrapper method to avoid having to cast the filter to a DemoJuceFilter | |||
| // every time we need it.. | |||
| DemoJuceFilter* getFilter() const throw() { return (DemoJuceFilter*) getAudioProcessor(); } | |||
| }; | |||
| #endif | |||
| @@ -1,236 +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.h" | |||
| #include "DemoJuceFilter.h" | |||
| #include "DemoEditorComponent.h" | |||
| //============================================================================== | |||
| /** | |||
| This function must be implemented to create a new instance of your | |||
| plugin object. | |||
| */ | |||
| AudioProcessor* JUCE_CALLTYPE createPluginFilter() | |||
| { | |||
| return new DemoJuceFilter(); | |||
| } | |||
| //============================================================================== | |||
| DemoJuceFilter::DemoJuceFilter() | |||
| { | |||
| gain = 1.0f; | |||
| lastUIWidth = 400; | |||
| lastUIHeight = 140; | |||
| zeromem (&lastPosInfo, sizeof (lastPosInfo)); | |||
| lastPosInfo.timeSigNumerator = 4; | |||
| lastPosInfo.timeSigDenominator = 4; | |||
| lastPosInfo.bpm = 120; | |||
| } | |||
| DemoJuceFilter::~DemoJuceFilter() | |||
| { | |||
| } | |||
| //============================================================================== | |||
| int DemoJuceFilter::getNumParameters() | |||
| { | |||
| return 1; | |||
| } | |||
| float DemoJuceFilter::getParameter (int index) | |||
| { | |||
| return (index == 0) ? gain | |||
| : 0.0f; | |||
| } | |||
| void DemoJuceFilter::setParameter (int index, float newValue) | |||
| { | |||
| if (index == 0) | |||
| { | |||
| if (gain != newValue) | |||
| { | |||
| gain = newValue; | |||
| // if this is changing the gain, broadcast a change message which | |||
| // our editor will pick up. | |||
| sendChangeMessage (this); | |||
| } | |||
| } | |||
| } | |||
| const String DemoJuceFilter::getParameterName (int index) | |||
| { | |||
| if (index == 0) | |||
| return T("gain"); | |||
| return String::empty; | |||
| } | |||
| const String DemoJuceFilter::getParameterText (int index) | |||
| { | |||
| if (index == 0) | |||
| return String (gain, 2); | |||
| return String::empty; | |||
| } | |||
| const String DemoJuceFilter::getInputChannelName (const int channelIndex) const | |||
| { | |||
| return String (channelIndex + 1); | |||
| } | |||
| const String DemoJuceFilter::getOutputChannelName (const int channelIndex) const | |||
| { | |||
| return String (channelIndex + 1); | |||
| } | |||
| bool DemoJuceFilter::isInputChannelStereoPair (int index) const | |||
| { | |||
| return false; | |||
| } | |||
| bool DemoJuceFilter::isOutputChannelStereoPair (int index) const | |||
| { | |||
| return false; | |||
| } | |||
| //============================================================================== | |||
| void DemoJuceFilter::prepareToPlay (double sampleRate, int samplesPerBlock) | |||
| { | |||
| // do your pre-playback setup stuff here.. | |||
| keyboardState.reset(); | |||
| } | |||
| void DemoJuceFilter::releaseResources() | |||
| { | |||
| // when playback stops, you can use this as an opportunity to free up any | |||
| // spare memory, etc. | |||
| } | |||
| void DemoJuceFilter::processBlock (AudioSampleBuffer& buffer, | |||
| MidiBuffer& midiMessages) | |||
| { | |||
| // for each of our input channels, we'll attenuate its level by the | |||
| // amount that our volume parameter is set to. | |||
| for (int channel = 0; channel < getNumInputChannels(); ++channel) | |||
| { | |||
| buffer.applyGain (channel, 0, buffer.getNumSamples(), gain); | |||
| } | |||
| // in case we have more outputs than inputs, we'll clear any output | |||
| // channels that didn't contain input data, (because these aren't | |||
| // guaranteed to be empty - they may contain garbage). | |||
| for (int i = getNumInputChannels(); i < getNumOutputChannels(); ++i) | |||
| { | |||
| buffer.clear (i, 0, buffer.getNumSamples()); | |||
| } | |||
| // if any midi messages come in, use them to update the keyboard state object. This | |||
| // object sends notification to the UI component about key up/down changes | |||
| keyboardState.processNextMidiBuffer (midiMessages, | |||
| 0, buffer.getNumSamples(), | |||
| true); | |||
| // have a go at getting the current time from the host, and if it's changed, tell | |||
| // our UI to update itself. | |||
| AudioPlayHead::CurrentPositionInfo pos; | |||
| if (getPlayHead() != 0 && getPlayHead()->getCurrentPosition (pos)) | |||
| { | |||
| if (memcmp (&pos, &lastPosInfo, sizeof (pos)) != 0) | |||
| { | |||
| lastPosInfo = pos; | |||
| sendChangeMessage (this); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| zeromem (&lastPosInfo, sizeof (lastPosInfo)); | |||
| lastPosInfo.timeSigNumerator = 4; | |||
| lastPosInfo.timeSigDenominator = 4; | |||
| lastPosInfo.bpm = 120; | |||
| } | |||
| } | |||
| //============================================================================== | |||
| AudioProcessorEditor* DemoJuceFilter::createEditor() | |||
| { | |||
| return new DemoEditorComponent (this); | |||
| } | |||
| //============================================================================== | |||
| void DemoJuceFilter::getStateInformation (MemoryBlock& destData) | |||
| { | |||
| // you can store your parameters as binary data if you want to or if you've got | |||
| // a load of binary to put in there, but if you're not doing anything too heavy, | |||
| // XML is a much cleaner way of doing it - here's an example of how to store your | |||
| // params as XML.. | |||
| // create an outer XML element.. | |||
| XmlElement xmlState (T("MYPLUGINSETTINGS")); | |||
| // add some attributes to it.. | |||
| xmlState.setAttribute (T("pluginVersion"), 1); | |||
| xmlState.setAttribute (T("gainLevel"), gain); | |||
| xmlState.setAttribute (T("uiWidth"), lastUIWidth); | |||
| xmlState.setAttribute (T("uiHeight"), lastUIHeight); | |||
| // you could also add as many child elements as you need to here.. | |||
| // then use this helper function to stuff it into the binary blob and return it.. | |||
| copyXmlToBinary (xmlState, destData); | |||
| } | |||
| void DemoJuceFilter::setStateInformation (const void* data, int sizeInBytes) | |||
| { | |||
| // use this helper function to get the XML from this binary blob.. | |||
| XmlElement* const xmlState = getXmlFromBinary (data, sizeInBytes); | |||
| if (xmlState != 0) | |||
| { | |||
| // check that it's the right type of xml.. | |||
| if (xmlState->hasTagName (T("MYPLUGINSETTINGS"))) | |||
| { | |||
| // ok, now pull out our parameters.. | |||
| gain = (float) xmlState->getDoubleAttribute (T("gainLevel"), gain); | |||
| lastUIWidth = xmlState->getIntAttribute (T("uiWidth"), lastUIWidth); | |||
| lastUIHeight = xmlState->getIntAttribute (T("uiHeight"), lastUIHeight); | |||
| sendChangeMessage (this); | |||
| } | |||
| delete xmlState; | |||
| } | |||
| } | |||
| @@ -1,112 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef DEMOJUCEPLUGINFILTER_H | |||
| #define DEMOJUCEPLUGINFILTER_H | |||
| //============================================================================== | |||
| /** | |||
| A simple plugin filter that just applies a gain change to the audio | |||
| passing through it. | |||
| */ | |||
| class DemoJuceFilter : public AudioProcessor, | |||
| public ChangeBroadcaster | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| DemoJuceFilter(); | |||
| ~DemoJuceFilter(); | |||
| //============================================================================== | |||
| void prepareToPlay (double sampleRate, int samplesPerBlock); | |||
| void releaseResources(); | |||
| void processBlock (AudioSampleBuffer& buffer, | |||
| MidiBuffer& midiMessages); | |||
| //============================================================================== | |||
| AudioProcessorEditor* createEditor(); | |||
| //============================================================================== | |||
| int getNumParameters(); | |||
| float getParameter (int index); | |||
| void setParameter (int index, float newValue); | |||
| const String getParameterName (int index); | |||
| const String getParameterText (int index); | |||
| const String getInputChannelName (const int channelIndex) const; | |||
| const String getOutputChannelName (const int channelIndex) const; | |||
| bool isInputChannelStereoPair (int index) const; | |||
| bool isOutputChannelStereoPair (int index) const; | |||
| //============================================================================== | |||
| int getNumPrograms() { return 0; } | |||
| int getCurrentProgram() { return 0; } | |||
| void setCurrentProgram (int index) { } | |||
| const String getProgramName (int index) { return String::empty; } | |||
| void changeProgramName (int index, const String& newName) { } | |||
| //============================================================================== | |||
| void getStateInformation (MemoryBlock& destData); | |||
| void setStateInformation (const void* data, int sizeInBytes); | |||
| //============================================================================== | |||
| // These properties are public so that our editor component can access them | |||
| // - a bit of a hacky way to do it, but it's only a demo! | |||
| // this is kept up to date with the midi messages that arrive, and the UI component | |||
| // registers with it so it can represent the incoming messages | |||
| MidiKeyboardState keyboardState; | |||
| // this keeps a copy of the last set of time info that was acquired during an audio | |||
| // callback - the UI component will read this and display it. | |||
| AudioPlayHead::CurrentPositionInfo lastPosInfo; | |||
| // these are used to persist the UI's size - the values are stored along with the | |||
| // filter's other parameters, and the UI component will update them when it gets | |||
| // resized. | |||
| int lastUIWidth, lastUIHeight; | |||
| //============================================================================== | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| // this is our gain - the UI and the host can access this by getting/setting | |||
| // parameter 0. | |||
| float gain; | |||
| }; | |||
| #endif | |||
| @@ -1,270 +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. | |||
| ============================================================================== | |||
| */ | |||
| #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 | |||
| @@ -1,948 +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 <AudioUnit/AudioUnit.h> | |||
| #include "AUMIDIEffectBase.h" | |||
| #include "MusicDeviceBase.h" | |||
| #include "AUCarbonViewBase.h" | |||
| #include "../../juce_IncludeCharacteristics.h" | |||
| #include "../../../../../juce.h" | |||
| //============================================================================== | |||
| #define juceFilterObjectPropertyID 0x1a45ffe9 | |||
| static VoidArray activePlugins; | |||
| static const short channelConfigs[][2] = { JucePlugin_PreferredChannelConfigurations }; | |||
| static const int numChannelConfigs = numElementsInArray (channelConfigs); | |||
| BEGIN_JUCE_NAMESPACE | |||
| extern void juce_setCurrentExecutableFileNameFromBundleId (const String& bundleId) throw(); | |||
| END_JUCE_NAMESPACE | |||
| #if JucePlugin_IsSynth | |||
| #define JuceAUBaseClass MusicDeviceBase | |||
| #else | |||
| #define JuceAUBaseClass AUMIDIEffectBase | |||
| #endif | |||
| //============================================================================== | |||
| /** Somewhere in the codebase of your plugin, you need to implement this function | |||
| and make it create an instance of the filter subclass that you're building. | |||
| */ | |||
| extern AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | |||
| //============================================================================== | |||
| class JuceAU : public JuceAUBaseClass, | |||
| public AudioProcessorListener, | |||
| public AudioPlayHead | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| JuceAU (AudioUnit component) | |||
| #if JucePlugin_IsSynth | |||
| : MusicDeviceBase (component, 0, 1), | |||
| #else | |||
| : AUMIDIEffectBase (component), | |||
| #endif | |||
| juceFilter (0), | |||
| bufferSpace (2, 16), | |||
| channels (0), | |||
| prepared (false) | |||
| { | |||
| CreateElements(); | |||
| if (activePlugins.size() == 0) | |||
| { | |||
| initialiseJuce_GUI(); | |||
| #ifdef JucePlugin_CFBundleIdentifier | |||
| juce_setCurrentExecutableFileNameFromBundleId (JucePlugin_CFBundleIdentifier); | |||
| #endif | |||
| MessageManager::getInstance()->setTimeBeforeShowingWaitCursor (0); | |||
| } | |||
| juceFilter = createPluginFilter(); | |||
| juceFilter->setPlayHead (this); | |||
| juceFilter->addListener (this); | |||
| jassert (juceFilter != 0); | |||
| Globals()->UseIndexedParameters (juceFilter->getNumParameters()); | |||
| activePlugins.add (this); | |||
| zerostruct (auEvent); | |||
| auEvent.mArgument.mParameter.mAudioUnit = GetComponentInstance(); | |||
| auEvent.mArgument.mParameter.mScope = kAudioUnitScope_Global; | |||
| auEvent.mArgument.mParameter.mElement = 0; | |||
| } | |||
| ~JuceAU() | |||
| { | |||
| delete juceFilter; | |||
| juceFilter = 0; | |||
| juce_free (channels); | |||
| channels = 0; | |||
| jassert (activePlugins.contains (this)); | |||
| activePlugins.removeValue (this); | |||
| if (activePlugins.size() == 0) | |||
| shutdownJuce_GUI(); | |||
| } | |||
| //============================================================================== | |||
| ComponentResult GetPropertyInfo (AudioUnitPropertyID inID, | |||
| AudioUnitScope inScope, | |||
| AudioUnitElement inElement, | |||
| UInt32& outDataSize, | |||
| Boolean& outWritable) | |||
| { | |||
| if (inScope == kAudioUnitScope_Global) | |||
| { | |||
| if (inID == juceFilterObjectPropertyID) | |||
| { | |||
| outWritable = false; | |||
| outDataSize = sizeof (void*); | |||
| return noErr; | |||
| } | |||
| } | |||
| return JuceAUBaseClass::GetPropertyInfo (inID, inScope, inElement, outDataSize, outWritable); | |||
| } | |||
| ComponentResult GetProperty (AudioUnitPropertyID inID, | |||
| AudioUnitScope inScope, | |||
| AudioUnitElement inElement, | |||
| void* outData) | |||
| { | |||
| if (inScope == kAudioUnitScope_Global) | |||
| { | |||
| if (inID == juceFilterObjectPropertyID) | |||
| { | |||
| *((void**) outData) = (void*) juceFilter; | |||
| return noErr; | |||
| } | |||
| } | |||
| return JuceAUBaseClass::GetProperty (inID, inScope, inElement, outData); | |||
| } | |||
| ComponentResult SaveState (CFPropertyListRef* outData) | |||
| { | |||
| ComponentResult err = JuceAUBaseClass::SaveState (outData); | |||
| if (err != noErr) | |||
| return err; | |||
| jassert (CFGetTypeID (*outData) == CFDictionaryGetTypeID()); | |||
| CFMutableDictionaryRef dict = (CFMutableDictionaryRef) *outData; | |||
| if (juceFilter != 0) | |||
| { | |||
| MemoryBlock state; | |||
| juceFilter->getCurrentProgramStateInformation (state); | |||
| if (state.getSize() > 0) | |||
| { | |||
| CFDataRef ourState = CFDataCreate (kCFAllocatorDefault, (const uint8*) state, state.getSize()); | |||
| CFDictionarySetValue (dict, CFSTR("jucePluginState"), ourState); | |||
| CFRelease (ourState); | |||
| } | |||
| } | |||
| return noErr; | |||
| } | |||
| ComponentResult RestoreState (CFPropertyListRef inData) | |||
| { | |||
| ComponentResult err = JuceAUBaseClass::RestoreState (inData); | |||
| if (err != noErr) | |||
| return err; | |||
| if (juceFilter != 0) | |||
| { | |||
| CFDictionaryRef dict = (CFDictionaryRef) inData; | |||
| CFDataRef data = 0; | |||
| if (CFDictionaryGetValueIfPresent (dict, CFSTR("jucePluginState"), | |||
| (const void**) &data)) | |||
| { | |||
| if (data != 0) | |||
| { | |||
| const int numBytes = (int) CFDataGetLength (data); | |||
| const uint8* const rawBytes = CFDataGetBytePtr (data); | |||
| if (numBytes > 0) | |||
| juceFilter->setCurrentProgramStateInformation (rawBytes, numBytes); | |||
| } | |||
| } | |||
| } | |||
| return noErr; | |||
| } | |||
| UInt32 SupportedNumChannels (const AUChannelInfo** outInfo) | |||
| { | |||
| // You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations | |||
| // value in your JucePluginCharacteristics.h file.. | |||
| jassert (numChannelConfigs > 0); | |||
| if (outInfo != 0) | |||
| { | |||
| for (int i = 0; i < numChannelConfigs; ++i) | |||
| { | |||
| #if JucePlugin_IsSynth | |||
| channelInfo[i].inChannels = 0; | |||
| #else | |||
| channelInfo[i].inChannels = channelConfigs[i][0]; | |||
| #endif | |||
| channelInfo[i].outChannels = channelConfigs[i][1]; | |||
| outInfo[i] = channelInfo + i; | |||
| } | |||
| } | |||
| return numChannelConfigs; | |||
| } | |||
| //============================================================================== | |||
| ComponentResult GetParameterInfo (AudioUnitScope inScope, | |||
| AudioUnitParameterID inParameterID, | |||
| AudioUnitParameterInfo& outParameterInfo) | |||
| { | |||
| const int index = (int) inParameterID; | |||
| if (inScope == kAudioUnitScope_Global | |||
| && juceFilter != 0 | |||
| && index < juceFilter->getNumParameters()) | |||
| { | |||
| outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable | |||
| | kAudioUnitParameterFlag_IsReadable | |||
| | kAudioUnitParameterFlag_HasCFNameString; | |||
| const String name (juceFilter->getParameterName (index)); | |||
| // set whether the param is automatable (unnamed parameters aren't allowed to be automated) | |||
| if (name.isEmpty() || ! juceFilter->isParameterAutomatable (index)) | |||
| outParameterInfo.flags |= kAudioUnitParameterFlag_NonRealTime; | |||
| AUBase::FillInParameterName (outParameterInfo, | |||
| PlatformUtilities::juceStringToCFString (name), | |||
| false); | |||
| outParameterInfo.minValue = 0.0f; | |||
| outParameterInfo.maxValue = 1.0f; | |||
| outParameterInfo.defaultValue = 0.0f; | |||
| outParameterInfo.unit = kAudioUnitParameterUnit_Generic; | |||
| return noErr; | |||
| } | |||
| else | |||
| { | |||
| return kAudioUnitErr_InvalidParameter; | |||
| } | |||
| } | |||
| ComponentResult GetParameter (AudioUnitParameterID inID, | |||
| AudioUnitScope inScope, | |||
| AudioUnitElement inElement, | |||
| Float32& outValue) | |||
| { | |||
| if (inScope == kAudioUnitScope_Global && juceFilter != 0) | |||
| { | |||
| outValue = juceFilter->getParameter ((int) inID); | |||
| return noErr; | |||
| } | |||
| return AUBase::GetParameter (inID, inScope, inElement, outValue); | |||
| } | |||
| ComponentResult SetParameter (AudioUnitParameterID inID, | |||
| AudioUnitScope inScope, | |||
| AudioUnitElement inElement, | |||
| Float32 inValue, | |||
| UInt32 inBufferOffsetInFrames) | |||
| { | |||
| if (inScope == kAudioUnitScope_Global && juceFilter != 0) | |||
| { | |||
| juceFilter->setParameter ((int) inID, inValue); | |||
| return noErr; | |||
| } | |||
| return AUBase::SetParameter (inID, inScope, inElement, inValue, inBufferOffsetInFrames); | |||
| } | |||
| //============================================================================== | |||
| ComponentResult Version() { return JucePlugin_VersionCode; } | |||
| bool SupportsTail() { return true; } | |||
| Float64 GetTailTime() { return 0; } | |||
| Float64 GetSampleRate() | |||
| { | |||
| return GetOutput(0)->GetStreamFormat().mSampleRate; | |||
| } | |||
| Float64 GetLatency() | |||
| { | |||
| jassert (GetSampleRate() > 0); | |||
| if (GetSampleRate() <= 0) | |||
| return 0.0; | |||
| return juceFilter->getLatencySamples() / GetSampleRate(); | |||
| } | |||
| //============================================================================== | |||
| int GetNumCustomUIComponents() { return 1; } | |||
| void GetUIComponentDescs (ComponentDescription* inDescArray) | |||
| { | |||
| inDescArray[0].componentType = kAudioUnitCarbonViewComponentType; | |||
| inDescArray[0].componentSubType = JucePlugin_AUSubType; | |||
| inDescArray[0].componentManufacturer = JucePlugin_AUManufacturerCode; | |||
| inDescArray[0].componentFlags = 0; | |||
| inDescArray[0].componentFlagsMask = 0; | |||
| } | |||
| //============================================================================== | |||
| bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) | |||
| { | |||
| info.timeSigNumerator = 0; | |||
| info.timeSigDenominator = 0; | |||
| info.timeInSeconds = 0; | |||
| info.editOriginTime = 0; | |||
| info.ppqPositionOfLastBarStart = 0; | |||
| info.isPlaying = false; | |||
| info.isRecording = false; | |||
| switch (lastSMPTETime.mType) | |||
| { | |||
| case kSMPTETimeType24: | |||
| info.frameRate = AudioPlayHead::fps24; | |||
| break; | |||
| case kSMPTETimeType25: | |||
| info.frameRate = AudioPlayHead::fps25; | |||
| break; | |||
| case kSMPTETimeType30Drop: | |||
| info.frameRate = AudioPlayHead::fps30drop; | |||
| break; | |||
| case kSMPTETimeType30: | |||
| info.frameRate = AudioPlayHead::fps30; | |||
| break; | |||
| case kSMPTETimeType2997: | |||
| info.frameRate = AudioPlayHead::fps2997; | |||
| break; | |||
| case kSMPTETimeType2997Drop: | |||
| info.frameRate = AudioPlayHead::fps2997drop; | |||
| break; | |||
| //case kSMPTETimeType60: | |||
| //case kSMPTETimeType5994: | |||
| default: | |||
| info.frameRate = AudioPlayHead::fpsUnknown; | |||
| break; | |||
| } | |||
| if (CallHostBeatAndTempo (&info.ppqPosition, &info.bpm) != noErr) | |||
| { | |||
| info.ppqPosition = 0; | |||
| info.bpm = 0; | |||
| } | |||
| UInt32 outDeltaSampleOffsetToNextBeat; | |||
| double outCurrentMeasureDownBeat; | |||
| float num; | |||
| UInt32 den; | |||
| if (CallHostMusicalTimeLocation (&outDeltaSampleOffsetToNextBeat, &num, &den, | |||
| &outCurrentMeasureDownBeat) == noErr) | |||
| { | |||
| info.timeSigNumerator = (int) num; | |||
| info.timeSigDenominator = den; | |||
| info.ppqPositionOfLastBarStart = outCurrentMeasureDownBeat; | |||
| } | |||
| double outCurrentSampleInTimeLine, outCycleStartBeat, outCycleEndBeat; | |||
| Boolean playing, playchanged, looping; | |||
| if (CallHostTransportState (&playing, | |||
| &playchanged, | |||
| &outCurrentSampleInTimeLine, | |||
| &looping, | |||
| &outCycleStartBeat, | |||
| &outCycleEndBeat) == noErr) | |||
| { | |||
| info.isPlaying = playing; | |||
| info.timeInSeconds = outCurrentSampleInTimeLine / GetSampleRate(); | |||
| } | |||
| return true; | |||
| } | |||
| void sendAUEvent (const AudioUnitEventType type, const int index) throw() | |||
| { | |||
| if (AUEventListenerNotify != 0) | |||
| { | |||
| auEvent.mEventType = type; | |||
| auEvent.mArgument.mParameter.mParameterID = (AudioUnitParameterID) index; | |||
| AUEventListenerNotify (0, 0, &auEvent); | |||
| } | |||
| } | |||
| void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) | |||
| { | |||
| sendAUEvent (kAudioUnitEvent_ParameterValueChange, index); | |||
| } | |||
| void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int index) | |||
| { | |||
| sendAUEvent (kAudioUnitEvent_BeginParameterChangeGesture, index); | |||
| } | |||
| void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int index) | |||
| { | |||
| sendAUEvent (kAudioUnitEvent_EndParameterChangeGesture, index); | |||
| } | |||
| void audioProcessorChanged (AudioProcessor*) | |||
| { | |||
| // xxx is there an AU equivalent? | |||
| } | |||
| bool StreamFormatWritable (AudioUnitScope inScope, AudioUnitElement element) | |||
| { | |||
| return ! IsInitialized(); | |||
| } | |||
| ComponentResult StartNote (MusicDeviceInstrumentID, MusicDeviceGroupID, NoteInstanceID&, UInt32, const MusicDeviceNoteParams&) | |||
| { | |||
| return noErr; | |||
| } | |||
| ComponentResult StopNote (MusicDeviceGroupID, NoteInstanceID, UInt32) | |||
| { | |||
| return noErr; | |||
| } | |||
| //============================================================================== | |||
| ComponentResult Initialize() | |||
| { | |||
| #if ! JucePlugin_IsSynth | |||
| const int numIns = GetInput(0) != 0 ? GetInput(0)->GetStreamFormat().mChannelsPerFrame : 0; | |||
| #endif | |||
| const int numOuts = GetOutput(0) != 0 ? GetOutput(0)->GetStreamFormat().mChannelsPerFrame : 0; | |||
| bool isValidChannelConfig = false; | |||
| for (int i = 0; i < numChannelConfigs; ++i) | |||
| #if JucePlugin_IsSynth | |||
| if (numOuts == channelConfigs[i][1]) | |||
| #else | |||
| if (numIns == channelConfigs[i][0] && numOuts == channelConfigs[i][1]) | |||
| #endif | |||
| isValidChannelConfig = true; | |||
| if (! isValidChannelConfig) | |||
| return kAudioUnitErr_FormatNotSupported; | |||
| JuceAUBaseClass::Initialize(); | |||
| prepareToPlay(); | |||
| return noErr; | |||
| } | |||
| void Cleanup() | |||
| { | |||
| JuceAUBaseClass::Cleanup(); | |||
| if (juceFilter != 0) | |||
| juceFilter->releaseResources(); | |||
| bufferSpace.setSize (2, 16); | |||
| midiEvents.clear(); | |||
| prepared = false; | |||
| } | |||
| ComponentResult Reset (AudioUnitScope inScope, AudioUnitElement inElement) | |||
| { | |||
| if (! prepared) | |||
| prepareToPlay(); | |||
| return JuceAUBaseClass::Reset (inScope, inElement); | |||
| } | |||
| void prepareToPlay() | |||
| { | |||
| if (juceFilter != 0) | |||
| { | |||
| #if ! JucePlugin_IsSynth | |||
| juceFilter->setPlayConfigDetails (GetInput(0)->GetStreamFormat().mChannelsPerFrame, | |||
| #else | |||
| juceFilter->setPlayConfigDetails (0, | |||
| #endif | |||
| GetOutput(0)->GetStreamFormat().mChannelsPerFrame, | |||
| GetSampleRate(), | |||
| GetMaxFramesPerSlice()); | |||
| bufferSpace.setSize (juceFilter->getNumInputChannels() + juceFilter->getNumOutputChannels(), | |||
| GetMaxFramesPerSlice() + 32); | |||
| juceFilter->prepareToPlay (GetSampleRate(), | |||
| GetMaxFramesPerSlice()); | |||
| midiEvents.clear(); | |||
| juce_free (channels); | |||
| channels = (float**) juce_calloc (sizeof (float*) * jmax (juceFilter->getNumInputChannels(), | |||
| juceFilter->getNumOutputChannels()) + 4); | |||
| prepared = true; | |||
| } | |||
| } | |||
| ComponentResult Render (AudioUnitRenderActionFlags &ioActionFlags, | |||
| const AudioTimeStamp& inTimeStamp, | |||
| UInt32 nFrames) | |||
| { | |||
| lastSMPTETime = inTimeStamp.mSMPTETime; | |||
| #if ! JucePlugin_IsSynth | |||
| return JuceAUBaseClass::Render (ioActionFlags, inTimeStamp, nFrames); | |||
| #else | |||
| // synths can't have any inputs.. | |||
| AudioBufferList inBuffer; | |||
| inBuffer.mNumberBuffers = 0; | |||
| return ProcessBufferLists (ioActionFlags, inBuffer, GetOutput(0)->GetBufferList(), nFrames); | |||
| #endif | |||
| } | |||
| OSStatus ProcessBufferLists (AudioUnitRenderActionFlags& ioActionFlags, | |||
| const AudioBufferList& inBuffer, | |||
| AudioBufferList& outBuffer, | |||
| UInt32 numSamples) | |||
| { | |||
| if (juceFilter != 0) | |||
| { | |||
| jassert (prepared); | |||
| int numOutChans = 0; | |||
| int nextSpareBufferChan = 0; | |||
| bool needToReinterleave = false; | |||
| const int numIn = juceFilter->getNumInputChannels(); | |||
| const int numOut = juceFilter->getNumOutputChannels(); | |||
| unsigned int i; | |||
| for (i = 0; i < outBuffer.mNumberBuffers; ++i) | |||
| { | |||
| AudioBuffer& buf = outBuffer.mBuffers[i]; | |||
| if (buf.mNumberChannels == 1) | |||
| { | |||
| channels [numOutChans++] = (float*) buf.mData; | |||
| } | |||
| else | |||
| { | |||
| needToReinterleave = true; | |||
| for (unsigned int subChan = 0; subChan < buf.mNumberChannels && numOutChans < numOut; ++subChan) | |||
| channels [numOutChans++] = bufferSpace.getSampleData (nextSpareBufferChan++); | |||
| } | |||
| if (numOutChans >= numOut) | |||
| break; | |||
| } | |||
| int numInChans = 0; | |||
| for (i = 0; i < inBuffer.mNumberBuffers; ++i) | |||
| { | |||
| const AudioBuffer& buf = inBuffer.mBuffers[i]; | |||
| if (buf.mNumberChannels == 1) | |||
| { | |||
| if (numInChans < numOutChans) | |||
| memcpy (channels [numInChans], (const float*) buf.mData, sizeof (float) * numSamples); | |||
| else | |||
| channels [numInChans] = (float*) buf.mData; | |||
| ++numInChans; | |||
| } | |||
| else | |||
| { | |||
| // need to de-interleave.. | |||
| for (unsigned int subChan = 0; subChan < buf.mNumberChannels && numInChans < numIn; ++subChan) | |||
| { | |||
| float* dest; | |||
| if (numInChans < numOutChans) | |||
| { | |||
| dest = channels [numInChans++]; | |||
| } | |||
| else | |||
| { | |||
| dest = bufferSpace.getSampleData (nextSpareBufferChan++); | |||
| channels [numInChans++] = dest; | |||
| } | |||
| const float* src = ((const float*) buf.mData) + subChan; | |||
| for (int j = numSamples; --j >= 0;) | |||
| { | |||
| *dest++ = *src; | |||
| src += buf.mNumberChannels; | |||
| } | |||
| } | |||
| } | |||
| if (numInChans >= numIn) | |||
| break; | |||
| } | |||
| { | |||
| AudioSampleBuffer buffer (channels, jmax (numIn, numOut), numSamples); | |||
| const ScopedLock sl (juceFilter->getCallbackLock()); | |||
| if (juceFilter->isSuspended()) | |||
| { | |||
| for (int i = 0; i < numOut; ++i) | |||
| zeromem (channels [i], sizeof (float) * numSamples); | |||
| } | |||
| else | |||
| { | |||
| juceFilter->processBlock (buffer, midiEvents); | |||
| } | |||
| } | |||
| if (! midiEvents.isEmpty()) | |||
| { | |||
| #if JucePlugin_ProducesMidiOutput | |||
| const uint8* midiEventData; | |||
| int midiEventSize, midiEventPosition; | |||
| MidiBuffer::Iterator i (midiEvents); | |||
| while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) | |||
| { | |||
| jassert (((unsigned int) midiEventPosition) < (unsigned 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(); | |||
| } | |||
| if (needToReinterleave) | |||
| { | |||
| nextSpareBufferChan = 0; | |||
| for (i = 0; i < outBuffer.mNumberBuffers; ++i) | |||
| { | |||
| AudioBuffer& buf = outBuffer.mBuffers[i]; | |||
| if (buf.mNumberChannels > 1) | |||
| { | |||
| for (unsigned int subChan = 0; subChan < buf.mNumberChannels; ++subChan) | |||
| { | |||
| const float* src = bufferSpace.getSampleData (nextSpareBufferChan++); | |||
| float* dest = ((float*) buf.mData) + subChan; | |||
| for (int j = numSamples; --j >= 0;) | |||
| { | |||
| *dest = *src++; | |||
| dest += buf.mNumberChannels; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| #if ! JucePlugin_SilenceInProducesSilenceOut | |||
| ioActionFlags &= ~kAudioUnitRenderAction_OutputIsSilence; | |||
| #endif | |||
| } | |||
| return noErr; | |||
| } | |||
| protected: | |||
| OSStatus HandleMidiEvent (UInt8 nStatus, | |||
| UInt8 inChannel, | |||
| UInt8 inData1, | |||
| UInt8 inData2, | |||
| long inStartFrame) | |||
| { | |||
| #if JucePlugin_WantsMidiInput | |||
| uint8 data [4]; | |||
| data[0] = nStatus | inChannel; | |||
| data[1] = inData1; | |||
| data[2] = inData2; | |||
| midiEvents.addEvent (data, 3, inStartFrame); | |||
| #endif | |||
| return noErr; | |||
| } | |||
| //============================================================================== | |||
| private: | |||
| AudioProcessor* juceFilter; | |||
| AudioSampleBuffer bufferSpace; | |||
| float** channels; | |||
| MidiBuffer midiEvents; | |||
| bool prepared; | |||
| SMPTETime lastSMPTETime; | |||
| AUChannelInfo channelInfo [numChannelConfigs]; | |||
| AudioUnitEvent auEvent; | |||
| }; | |||
| //============================================================================== | |||
| class JuceAUComponentHolder : public Component | |||
| { | |||
| public: | |||
| JuceAUComponentHolder (Component* const editorComp) | |||
| { | |||
| addAndMakeVisible (editorComp); | |||
| setOpaque (true); | |||
| setVisible (true); | |||
| setBroughtToFrontOnMouseClick (true); | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| setWantsKeyboardFocus (false); | |||
| #endif | |||
| } | |||
| ~JuceAUComponentHolder() | |||
| { | |||
| } | |||
| void resized() | |||
| { | |||
| if (getNumChildComponents() > 0) | |||
| getChildComponent (0)->setBounds (0, 0, getWidth(), getHeight()); | |||
| } | |||
| void paint (Graphics& g) | |||
| { | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| class JuceAUView : public AUCarbonViewBase, | |||
| public ComponentListener, | |||
| public MouseListener, | |||
| public Timer | |||
| { | |||
| AudioProcessor* juceFilter; | |||
| AudioProcessorEditor* editorComp; | |||
| Component* windowComp; | |||
| bool recursive; | |||
| int mx, my; | |||
| public: | |||
| JuceAUView (AudioUnitCarbonView auview) | |||
| : AUCarbonViewBase (auview), | |||
| juceFilter (0), | |||
| editorComp (0), | |||
| windowComp (0), | |||
| recursive (false), | |||
| mx (0), | |||
| my (0) | |||
| { | |||
| } | |||
| ~JuceAUView() | |||
| { | |||
| deleteUI(); | |||
| } | |||
| ComponentResult CreateUI (Float32 inXOffset, Float32 inYOffset) | |||
| { | |||
| if (juceFilter == 0) | |||
| { | |||
| UInt32 propertySize = sizeof (&juceFilter); | |||
| AudioUnitGetProperty (GetEditAudioUnit(), | |||
| juceFilterObjectPropertyID, | |||
| kAudioUnitScope_Global, | |||
| 0, | |||
| &juceFilter, | |||
| &propertySize); | |||
| } | |||
| if (juceFilter != 0) | |||
| { | |||
| deleteUI(); | |||
| editorComp = juceFilter->createEditorIfNeeded(); | |||
| const int w = editorComp->getWidth(); | |||
| const int h = editorComp->getHeight(); | |||
| editorComp->setOpaque (true); | |||
| editorComp->setVisible (true); | |||
| windowComp = new JuceAUComponentHolder (editorComp); | |||
| windowComp->setBounds ((int) inXOffset, (int) inYOffset, w, h); | |||
| windowComp->addToDesktop (0, (void*) mCarbonPane); | |||
| SizeControl (mCarbonPane, w, h); | |||
| editorComp->addComponentListener (this); | |||
| windowComp->addMouseListener (this, true); | |||
| startTimer (20); | |||
| } | |||
| else | |||
| { | |||
| jassertfalse // can't get a pointer to our effect | |||
| } | |||
| return noErr; | |||
| } | |||
| void componentMovedOrResized (Component& component, | |||
| bool wasMoved, | |||
| bool wasResized) | |||
| { | |||
| if (! recursive) | |||
| { | |||
| recursive = true; | |||
| if (editorComp != 0 && wasResized) | |||
| { | |||
| const int w = jmax (32, editorComp->getWidth()); | |||
| const int h = jmax (32, editorComp->getHeight()); | |||
| SizeControl (mCarbonPane, w, h); | |||
| if (windowComp->getWidth() != w | |||
| || windowComp->getHeight() != h) | |||
| { | |||
| windowComp->setSize (w, h); | |||
| } | |||
| editorComp->repaint(); | |||
| } | |||
| recursive = false; | |||
| } | |||
| } | |||
| void timerCallback() | |||
| { | |||
| // for some stupid Apple-related reason, mouse move events just don't seem to get sent | |||
| // to the windows in an AU, so we have to bodge it here and simulate them with a | |||
| // timer.. | |||
| if (editorComp != 0) | |||
| { | |||
| int x, y; | |||
| Desktop::getInstance().getMousePosition (x, y); | |||
| if (x != mx || y != my) | |||
| { | |||
| mx = x; | |||
| my = y; | |||
| if (! ModifierKeys::getCurrentModifiers().isAnyMouseButtonDown()) | |||
| { | |||
| for (int i = ComponentPeer::getNumPeers(); --i >= 0;) | |||
| { | |||
| ComponentPeer* const peer = ComponentPeer::getPeer (i); | |||
| int rx = x, ry = y; | |||
| peer->getComponent()->globalPositionToRelative (rx, ry); | |||
| if (peer->contains (rx, ry, false) && peer->getComponent()->isShowing()) | |||
| { | |||
| peer->handleMouseMove (rx, ry, Time::currentTimeMillis()); | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void mouseMove (const MouseEvent& e) | |||
| { | |||
| Desktop::getInstance().getMousePosition (mx, my); | |||
| startTimer (20); | |||
| } | |||
| private: | |||
| void deleteUI() | |||
| { | |||
| PopupMenu::dismissAllActiveMenus(); | |||
| // there's some kind of component currently modal, but the host | |||
| // is trying to delete our plugin.. | |||
| jassert (Component::getCurrentlyModalComponent() == 0); | |||
| if (editorComp != 0) | |||
| juceFilter->editorBeingDeleted (editorComp); | |||
| deleteAndZero (editorComp); | |||
| deleteAndZero (windowComp); | |||
| } | |||
| }; | |||
| //============================================================================== | |||
| #define JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) \ | |||
| extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix (ComponentParameters* params, Class* obj); \ | |||
| extern "C" __attribute__((visibility("default"))) ComponentResult Name ## Suffix (ComponentParameters* params, Class* obj) \ | |||
| { \ | |||
| return ComponentEntryPoint<Class>::Dispatch(params, obj); \ | |||
| } | |||
| #define JUCE_COMPONENT_ENTRY(Class, Name, Suffix) JUCE_COMPONENT_ENTRYX(Class, Name, Suffix) | |||
| JUCE_COMPONENT_ENTRY (JuceAU, JucePlugin_AUExportPrefix, Entry) | |||
| JUCE_COMPONENT_ENTRY (JuceAUView, JucePlugin_AUExportPrefix, ViewEntry) | |||
| @@ -1,70 +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 <AudioUnit/AudioUnit.r> | |||
| #include <AudioUnit/AudioUnitCarbonView.r> | |||
| //============================================================================== | |||
| /* 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" | |||
| //============================================================================== | |||
| // component resources for Audio Unit Carbon View | |||
| #define RES_ID 2000 | |||
| #define COMP_TYPE kAudioUnitCarbonViewComponentType | |||
| #define COMP_SUBTYPE JucePlugin_AUSubType | |||
| #define COMP_MANUF JucePlugin_AUManufacturerCode | |||
| #define VERSION JucePlugin_VersionCode | |||
| #define NAME JucePlugin_Manufacturer ": " JucePlugin_Name " View" | |||
| #define DESCRIPTION NAME | |||
| #define ENTRY_POINT JucePlugin_AUExportPrefixQuoted "ViewEntry" | |||
| #include "/Developer/Examples/CoreAudio/AudioUnits/AUPublic/AUBase/AUResources.r" | |||
| @@ -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.. | |||
| @@ -1,63 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__ | |||
| #define __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__ | |||
| #ifdef _MSC_VER | |||
| #define kCompileAsCodeResource 0 | |||
| #define kBuildStandAlone 0 | |||
| #define kNoDSP 0 | |||
| #define kNoDAE 0 | |||
| #define kNoSDS 0 | |||
| #define kNoViews 0 | |||
| #define kUseDSPCodeDecode 0 | |||
| #define WINDOWS_VERSION 1 | |||
| #define PLUGIN_SDK_BUILD 1 | |||
| #define PLUGIN_SDK_DIRECTMIDI 1 | |||
| #else | |||
| #define kCompileAsCodeResource 0 | |||
| #define kNoDSP 1 | |||
| #define kNoDAE 0 | |||
| #define kNoSDS 0 | |||
| #define kNoViews 0 | |||
| #define kUseDSPCodeDecode 0 | |||
| #define PLUGIN_SDK_BUILD 1 | |||
| #define PLUGIN_SDK_DIRECTMIDI 1 | |||
| #endif | |||
| #endif // __JUCE_RTASCOMPILEFLAGS_JUCEHEADER__ | |||
| @@ -1,139 +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. | |||
| ============================================================================== | |||
| */ | |||
| #if _MSC_VER | |||
| // (these functions are in a separate file because of problems including windows.h | |||
| // at the same time as the Digi headers) | |||
| #include <windows.h> | |||
| #ifdef _MSC_VER | |||
| #pragma pack (push, 8) | |||
| #endif | |||
| #include "../../../../../juce.h" | |||
| #ifdef _MSC_VER | |||
| #pragma pack (pop) | |||
| #endif | |||
| //============================================================================== | |||
| void JUCE_CALLTYPE attachSubWindow (void* hostWindow, | |||
| int& titleW, int& titleH, | |||
| Component* comp) | |||
| { | |||
| RECT clientRect; | |||
| GetClientRect ((HWND) hostWindow, &clientRect); | |||
| titleW = clientRect.right - clientRect.left; | |||
| titleH = jmax (0, (clientRect.bottom - clientRect.top) - comp->getHeight()); | |||
| comp->setTopLeftPosition (0, titleH); | |||
| comp->addToDesktop (0); | |||
| HWND plugWnd = (HWND) comp->getWindowHandle(); | |||
| SetParent (plugWnd, (HWND) hostWindow); | |||
| DWORD val = GetWindowLong (plugWnd, GWL_STYLE); | |||
| val = (val & ~WS_POPUP) | WS_CHILD; | |||
| SetWindowLong (plugWnd, GWL_STYLE, val); | |||
| } | |||
| void JUCE_CALLTYPE resizeHostWindow (void* hostWindow, | |||
| int& titleW, int& titleH, | |||
| Component* comp) | |||
| { | |||
| RECT clientRect, windowRect; | |||
| GetClientRect ((HWND) hostWindow, &clientRect); | |||
| GetWindowRect ((HWND) hostWindow, &windowRect); | |||
| const int borderW = (windowRect.right - windowRect.left) - (clientRect.right - clientRect.left); | |||
| const int borderH = (windowRect.bottom - windowRect.top) - (clientRect.bottom - clientRect.top); | |||
| SetWindowPos ((HWND) hostWindow, 0, 0, 0, | |||
| borderW + jmax (titleW, comp->getWidth()), | |||
| borderH + comp->getHeight() + titleH, | |||
| SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOOWNERZORDER); | |||
| } | |||
| #if ! JucePlugin_EditorRequiresKeyboardFocus | |||
| static HWND findMDIParentOf (HWND w) | |||
| { | |||
| const int frameThickness = GetSystemMetrics (SM_CYFIXEDFRAME); | |||
| while (w != 0) | |||
| { | |||
| HWND parent = GetParent (w); | |||
| if (parent == 0) | |||
| break; | |||
| TCHAR windowType [32]; | |||
| zeromem (windowType, sizeof (windowType)); | |||
| GetClassName (parent, windowType, 31); | |||
| if (String (windowType).equalsIgnoreCase (T("MDIClient"))) | |||
| { | |||
| w = parent; | |||
| break; | |||
| } | |||
| RECT windowPos; | |||
| GetWindowRect (w, &windowPos); | |||
| RECT parentPos; | |||
| GetWindowRect (parent, &parentPos); | |||
| int dw = (parentPos.right - parentPos.left) - (windowPos.right - windowPos.left); | |||
| int dh = (parentPos.bottom - parentPos.top) - (windowPos.bottom - windowPos.top); | |||
| if (dw > 100 || dh > 100) | |||
| break; | |||
| w = parent; | |||
| if (dw == 2 * frameThickness) | |||
| break; | |||
| } | |||
| return w; | |||
| } | |||
| void JUCE_CALLTYPE passFocusToHostWindow (void* hostWindow) | |||
| { | |||
| SetFocus (findMDIParentOf ((HWND) hostWindow)); | |||
| } | |||
| #endif | |||
| #endif | |||
| @@ -1,3 +0,0 @@ | |||
| EXPORTS | |||
| NewPlugIn @1 | |||
| _PI_GetRoutineDescriptor @2 | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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 "CEffectMIDIUtils.cpp" | |||
| @@ -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 "CEffectProcess.cpp" | |||
| @@ -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" | |||
| @@ -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 "CEffectProcessMIDI.cpp" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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" | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -1,45 +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. | |||
| ============================================================================== | |||
| */ | |||
| #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__ | |||
| @@ -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" | |||
| @@ -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 | |||
| @@ -1,173 +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_AudioFilterStreamer.h" | |||
| #include "../../juce_IncludeCharacteristics.h" | |||
| //============================================================================== | |||
| AudioFilterStreamer::AudioFilterStreamer (AudioProcessor& filterToUse) | |||
| : filter (filterToUse), | |||
| isPlaying (false), | |||
| sampleRate (0), | |||
| emptyBuffer (1, 32) | |||
| { | |||
| filter.setPlayConfigDetails (JucePlugin_MaxNumInputChannels, JucePlugin_MaxNumOutputChannels, 0, 0); | |||
| filter.setPlayHead (this); | |||
| } | |||
| AudioFilterStreamer::~AudioFilterStreamer() | |||
| { | |||
| audioDeviceStopped(); | |||
| } | |||
| void AudioFilterStreamer::audioDeviceIOCallback (const float** inputChannelData, | |||
| int totalNumInputChannels, | |||
| float** outputChannelData, | |||
| int totalNumOutputChannels, | |||
| int numSamples) | |||
| { | |||
| MidiBuffer midiBuffer; | |||
| midiCollector.removeNextBlockOfMessages (midiBuffer, numSamples); | |||
| int i, numActiveInChans = 0, numActiveOutChans = 0; | |||
| int numOutsWanted = filter.getNumOutputChannels(); | |||
| const int numInsWanted = filter.getNumInputChannels(); | |||
| for (i = 0; i < totalNumInputChannels; ++i) | |||
| if (inputChannelData[i] != 0) | |||
| inChans [numActiveInChans++] = (float*) inputChannelData[i]; | |||
| while (numActiveInChans < numInsWanted) | |||
| inChans [numActiveInChans++] = emptyBuffer.getSampleData (0, 0); | |||
| for (i = 0; i < totalNumOutputChannels; ++i) | |||
| if (outputChannelData[i] != 0) | |||
| outChans [numActiveOutChans++] = outputChannelData[i]; | |||
| i = 0; | |||
| while (numActiveOutChans < numOutsWanted) | |||
| outChans [numActiveOutChans++] = emptyBuffer.getSampleData (++i, 0); | |||
| AudioSampleBuffer input (inChans, jmin (numInsWanted, numActiveInChans), numSamples); | |||
| AudioSampleBuffer output (outChans, jmin (numOutsWanted, numActiveOutChans), numSamples); | |||
| { | |||
| const ScopedLock sl (filter.getCallbackLock()); | |||
| if (filter.isSuspended()) | |||
| { | |||
| output.clear(); | |||
| } | |||
| else | |||
| { | |||
| for (int i = jmin (output.getNumChannels(), input.getNumChannels()); --i >= 0;) | |||
| output.copyFrom (i, 0, input, i, 0, numSamples); | |||
| filter.processBlock (output, midiBuffer); | |||
| } | |||
| } | |||
| while (numOutsWanted < numActiveOutChans) | |||
| zeromem (outChans[numOutsWanted++], sizeof (float) * numSamples); | |||
| } | |||
| void AudioFilterStreamer::audioDeviceAboutToStart (double sampleRate_, | |||
| int numSamplesPerBlock) | |||
| { | |||
| sampleRate = sampleRate_; | |||
| isPlaying = true; | |||
| emptyBuffer.setSize (1 + filter.getNumOutputChannels(), | |||
| jmax (2048, numSamplesPerBlock * 2)); | |||
| emptyBuffer.clear(); | |||
| midiCollector.reset (sampleRate); | |||
| filter.prepareToPlay (sampleRate, numSamplesPerBlock); | |||
| } | |||
| void AudioFilterStreamer::audioDeviceStopped() | |||
| { | |||
| isPlaying = false; | |||
| filter.releaseResources(); | |||
| midiCollector.reset (sampleRate); | |||
| emptyBuffer.setSize (1, 32); | |||
| } | |||
| void AudioFilterStreamer::handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message) | |||
| { | |||
| #if JucePlugin_WantsMidiInput | |||
| midiCollector.addMessageToQueue (message); | |||
| #endif | |||
| } | |||
| bool AudioFilterStreamer::getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) | |||
| { | |||
| return false; | |||
| } | |||
| //============================================================================== | |||
| AudioFilterStreamingDeviceManager::AudioFilterStreamingDeviceManager() | |||
| : streamer (0) | |||
| { | |||
| } | |||
| AudioFilterStreamingDeviceManager::~AudioFilterStreamingDeviceManager() | |||
| { | |||
| setFilter (0); | |||
| clearSingletonInstance(); | |||
| } | |||
| void AudioFilterStreamingDeviceManager::setFilter (AudioProcessor* filterToStream) | |||
| { | |||
| if (streamer != 0) | |||
| { | |||
| removeMidiInputCallback (streamer); | |||
| setAudioCallback (0); | |||
| delete streamer; | |||
| streamer = 0; | |||
| } | |||
| if (filterToStream != 0) | |||
| { | |||
| streamer = new AudioFilterStreamer (*filterToStream); | |||
| setAudioCallback (streamer); | |||
| addMidiInputCallback (String::empty, streamer); | |||
| } | |||
| } | |||
| juce_ImplementSingleton (AudioFilterStreamingDeviceManager); | |||
| @@ -1,128 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_AUDIOFILTERSTREAMER_JUCEHEADER__ | |||
| #define __JUCE_AUDIOFILTERSTREAMER_JUCEHEADER__ | |||
| #include "../../../../../juce.h" | |||
| //============================================================================== | |||
| /** | |||
| A class that wraps an AudioProcessor as an AudioIODeviceCallback, so its | |||
| output can be streamed directly to/from some audio and midi inputs and outputs. | |||
| To use it, just create an instance of this for your filter, and register it | |||
| as the callback with an AudioIODevice or AudioDeviceManager object. | |||
| To receive midi input in your filter, you should also register it as a | |||
| MidiInputCallback with a suitable MidiInput or an AudioDeviceManager. | |||
| And for an even easier way of doing a standalone plugin, see the | |||
| AudioFilterStreamingDeviceManager class... | |||
| */ | |||
| class AudioFilterStreamer : public AudioIODeviceCallback, | |||
| public MidiInputCallback, | |||
| public AudioPlayHead | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| AudioFilterStreamer (AudioProcessor& filterToUse); | |||
| ~AudioFilterStreamer(); | |||
| //============================================================================== | |||
| void audioDeviceIOCallback (const float** inputChannelData, | |||
| int totalNumInputChannels, | |||
| float** outputChannelData, | |||
| int totalNumOutputChannels, | |||
| int numSamples); | |||
| void audioDeviceAboutToStart (double sampleRate, int numSamplesPerBlock); | |||
| void audioDeviceStopped(); | |||
| void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message); | |||
| bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info); | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| //============================================================================== | |||
| AudioProcessor& filter; | |||
| bool isPlaying; | |||
| double sampleRate; | |||
| MidiMessageCollector midiCollector; | |||
| float* outChans [128]; | |||
| float* inChans [128]; | |||
| AudioSampleBuffer emptyBuffer; | |||
| }; | |||
| //============================================================================== | |||
| /** | |||
| Wraps an AudioFilterStreamer in an AudioDeviceManager to make it easy to | |||
| create a standalone filter. | |||
| This simply acts as a singleton AudioDeviceManager, which continuously | |||
| streams audio from the filter you give it with the setFilter() method. | |||
| To use it, simply create an instance of it (or use getInstance() if you're | |||
| using it as a singleton), initialise it like you would a normal | |||
| AudioDeviceManager, and call setFilter() to start it running your plugin. | |||
| */ | |||
| class AudioFilterStreamingDeviceManager : public AudioDeviceManager | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| AudioFilterStreamingDeviceManager(); | |||
| ~AudioFilterStreamingDeviceManager(); | |||
| juce_DeclareSingleton (AudioFilterStreamingDeviceManager, true); | |||
| //============================================================================== | |||
| /** Tells the device which filter to stream audio through. | |||
| Pass in 0 to deselect the current filter. | |||
| */ | |||
| void setFilter (AudioProcessor* filterToStream); | |||
| //============================================================================== | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| AudioFilterStreamer* streamer; | |||
| }; | |||
| #endif // __JUCE_AUDIOFILTERSTREAMER_JUCEHEADER__ | |||
| @@ -1,301 +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_StandaloneFilterWindow.h" | |||
| #include "../../juce_IncludeCharacteristics.h" | |||
| //============================================================================== | |||
| /** Somewhere in the codebase of your plugin, you need to implement this function | |||
| and make it create an instance of the filter subclass that you're building. | |||
| */ | |||
| extern AudioProcessor* JUCE_CALLTYPE createPluginFilter(); | |||
| //============================================================================== | |||
| StandaloneFilterWindow::StandaloneFilterWindow (const String& title, | |||
| const Colour& backgroundColour) | |||
| : DocumentWindow (title, backgroundColour, | |||
| DocumentWindow::minimiseButton | |||
| | DocumentWindow::closeButton), | |||
| filter (0), | |||
| deviceManager (0), | |||
| optionsButton (0) | |||
| { | |||
| setTitleBarButtonsRequired (DocumentWindow::minimiseButton | DocumentWindow::closeButton, false); | |||
| PropertySet* const globalSettings = getGlobalSettings(); | |||
| optionsButton = new TextButton (T("options")); | |||
| Component::addAndMakeVisible (optionsButton); | |||
| optionsButton->addButtonListener (this); | |||
| optionsButton->setTriggeredOnMouseDown (true); | |||
| JUCE_TRY | |||
| { | |||
| filter = createPluginFilter(); | |||
| if (filter != 0) | |||
| { | |||
| deviceManager = new AudioFilterStreamingDeviceManager(); | |||
| deviceManager->setFilter (filter); | |||
| XmlElement* savedState = 0; | |||
| if (globalSettings != 0) | |||
| savedState = globalSettings->getXmlValue (T("audioSetup")); | |||
| deviceManager->initialise (filter->getNumInputChannels(), | |||
| filter->getNumOutputChannels(), | |||
| savedState, | |||
| true); | |||
| delete savedState; | |||
| if (globalSettings != 0) | |||
| { | |||
| juce::MemoryBlock data; | |||
| if (data.fromBase64Encoding (globalSettings->getValue (T("filterState"))) | |||
| && data.getSize() > 0) | |||
| { | |||
| filter->setStateInformation (data.getData(), data.getSize()); | |||
| } | |||
| } | |||
| setContentComponent (filter->createEditorIfNeeded(), true, true); | |||
| const int x = globalSettings->getIntValue (T("windowX"), -100); | |||
| const int y = globalSettings->getIntValue (T("windowY"), -100); | |||
| if (x != -100 && y != -100) | |||
| setBoundsConstrained (x, y, getWidth(), getHeight()); | |||
| else | |||
| centreWithSize (getWidth(), getHeight()); | |||
| } | |||
| } | |||
| JUCE_CATCH_ALL | |||
| if (deviceManager == 0) | |||
| { | |||
| jassertfalse // Your filter didn't create correctly! In a standalone app that's not too great. | |||
| JUCEApplication::quit(); | |||
| } | |||
| } | |||
| StandaloneFilterWindow::~StandaloneFilterWindow() | |||
| { | |||
| PropertySet* const globalSettings = getGlobalSettings(); | |||
| globalSettings->setValue (T("windowX"), getX()); | |||
| globalSettings->setValue (T("windowY"), getY()); | |||
| deleteAndZero (optionsButton); | |||
| if (globalSettings != 0 && deviceManager != 0) | |||
| { | |||
| XmlElement* const xml = deviceManager->createStateXml(); | |||
| globalSettings->setValue (T("audioSetup"), xml); | |||
| delete xml; | |||
| } | |||
| deleteAndZero (deviceManager); | |||
| if (globalSettings != 0 && filter != 0) | |||
| { | |||
| juce::MemoryBlock data; | |||
| filter->getStateInformation (data); | |||
| globalSettings->setValue (T("filterState"), data.toBase64Encoding()); | |||
| } | |||
| deleteFilter(); | |||
| } | |||
| //============================================================================== | |||
| void StandaloneFilterWindow::deleteFilter() | |||
| { | |||
| if (deviceManager != 0) | |||
| deviceManager->setFilter (0); | |||
| if (filter != 0 && getContentComponent() != 0) | |||
| { | |||
| filter->editorBeingDeleted (dynamic_cast <AudioProcessorEditor*> (getContentComponent())); | |||
| setContentComponent (0, true); | |||
| } | |||
| deleteAndZero (filter); | |||
| } | |||
| void StandaloneFilterWindow::resetFilter() | |||
| { | |||
| deleteFilter(); | |||
| filter = createPluginFilter(); | |||
| if (filter != 0) | |||
| { | |||
| if (deviceManager != 0) | |||
| deviceManager->setFilter (filter); | |||
| setContentComponent (filter->createEditorIfNeeded(), true, true); | |||
| } | |||
| PropertySet* const globalSettings = getGlobalSettings(); | |||
| if (globalSettings != 0) | |||
| globalSettings->removeValue (T("filterState")); | |||
| } | |||
| //============================================================================== | |||
| void StandaloneFilterWindow::saveState() | |||
| { | |||
| PropertySet* const globalSettings = getGlobalSettings(); | |||
| FileChooser fc (TRANS("Save current state"), | |||
| globalSettings != 0 ? File (globalSettings->getValue (T("lastStateFile"))) | |||
| : File::nonexistent); | |||
| if (fc.browseForFileToSave (true)) | |||
| { | |||
| juce::MemoryBlock data; | |||
| filter->getStateInformation (data); | |||
| if (! fc.getResult().replaceWithData (data.getData(), data.getSize())) | |||
| { | |||
| AlertWindow::showMessageBox (AlertWindow::WarningIcon, | |||
| TRANS("Error whilst saving"), | |||
| TRANS("Couldn't write to the specified file!")); | |||
| } | |||
| } | |||
| } | |||
| void StandaloneFilterWindow::loadState() | |||
| { | |||
| PropertySet* const globalSettings = getGlobalSettings(); | |||
| FileChooser fc (TRANS("Load a saved state"), | |||
| globalSettings != 0 ? File (globalSettings->getValue (T("lastStateFile"))) | |||
| : File::nonexistent); | |||
| if (fc.browseForFileToOpen()) | |||
| { | |||
| juce::MemoryBlock data; | |||
| if (fc.getResult().loadFileAsData (data)) | |||
| { | |||
| filter->setStateInformation (data.getData(), data.getSize()); | |||
| } | |||
| else | |||
| { | |||
| AlertWindow::showMessageBox (AlertWindow::WarningIcon, | |||
| TRANS("Error whilst loading"), | |||
| TRANS("Couldn't read from the specified file!")); | |||
| } | |||
| } | |||
| } | |||
| //============================================================================== | |||
| PropertySet* StandaloneFilterWindow::getGlobalSettings() | |||
| { | |||
| /* If you want this class to store the plugin's settings, you can set up an | |||
| ApplicationProperties object and use this method as it is, or override this | |||
| method to return your own custom PropertySet. | |||
| If using this method without changing it, you'll probably need to call | |||
| ApplicationProperties::setStorageParameters() in your plugin's constructor to | |||
| tell it where to save the file. | |||
| */ | |||
| return ApplicationProperties::getInstance()->getUserSettings(); | |||
| } | |||
| void StandaloneFilterWindow::showAudioSettingsDialog() | |||
| { | |||
| AudioDeviceSelectorComponent selectorComp (*deviceManager, | |||
| filter->getNumInputChannels(), | |||
| filter->getNumInputChannels(), | |||
| filter->getNumOutputChannels(), | |||
| filter->getNumOutputChannels(), | |||
| true, false); | |||
| selectorComp.setSize (500, 350); | |||
| DialogWindow::showModalDialog (TRANS("Audio Settings"), &selectorComp, this, Colours::lightgrey, true, false, false); | |||
| } | |||
| //============================================================================== | |||
| void StandaloneFilterWindow::closeButtonPressed() | |||
| { | |||
| JUCEApplication::quit(); | |||
| } | |||
| void StandaloneFilterWindow::resized() | |||
| { | |||
| DocumentWindow::resized(); | |||
| if (optionsButton != 0) | |||
| optionsButton->setBounds (8, 6, 60, getTitleBarHeight() - 8); | |||
| } | |||
| void StandaloneFilterWindow::buttonClicked (Button*) | |||
| { | |||
| if (filter == 0) | |||
| return; | |||
| PopupMenu m; | |||
| m.addItem (1, TRANS("Audio Settings...")); | |||
| m.addSeparator(); | |||
| m.addItem (2, TRANS("Save current state...")); | |||
| m.addItem (3, TRANS("Load a saved state...")); | |||
| m.addSeparator(); | |||
| m.addItem (4, TRANS("Reset to default state")); | |||
| switch (m.showAt (optionsButton)) | |||
| { | |||
| case 1: | |||
| showAudioSettingsDialog(); | |||
| break; | |||
| case 2: | |||
| saveState(); | |||
| break; | |||
| case 3: | |||
| loadState(); | |||
| break; | |||
| case 4: | |||
| resetFilter(); | |||
| break; | |||
| default: | |||
| break; | |||
| } | |||
| } | |||
| @@ -1,96 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_STANDALONEFILTERWINDOW_JUCEHEADER__ | |||
| #define __JUCE_STANDALONEFILTERWINDOW_JUCEHEADER__ | |||
| #include "juce_AudioFilterStreamer.h" | |||
| //============================================================================== | |||
| /** | |||
| A class that can be used to run a simple standalone application containing your filter. | |||
| Just create one of these objects in your JUCEApplication::initialise() method, and | |||
| let it do its work. It will create your filter object using the same createFilter() function | |||
| that the other plugin wrappers use. | |||
| */ | |||
| class StandaloneFilterWindow : public DocumentWindow, | |||
| public ButtonListener | |||
| { | |||
| public: | |||
| //============================================================================== | |||
| StandaloneFilterWindow (const String& title, | |||
| const Colour& backgroundColour); | |||
| ~StandaloneFilterWindow(); | |||
| //============================================================================== | |||
| /** Deletes and re-creates the filter and its UI. */ | |||
| void resetFilter(); | |||
| /** Pops up a dialog letting the user save the filter's state to a file. */ | |||
| void saveState(); | |||
| /** Pops up a dialog letting the user re-load the filter's state from a file. */ | |||
| void loadState(); | |||
| /** Shows the audio properties dialog box modally. */ | |||
| virtual void showAudioSettingsDialog(); | |||
| /** Returns the property set to use for storing the app's last state. | |||
| This will be used to store the audio set-up and the filter's last state. | |||
| */ | |||
| virtual PropertySet* getGlobalSettings(); | |||
| //============================================================================== | |||
| /** @internal */ | |||
| void closeButtonPressed(); | |||
| /** @internal */ | |||
| void buttonClicked (Button*); | |||
| /** @internal */ | |||
| void resized(); | |||
| juce_UseDebuggingNewOperator | |||
| private: | |||
| AudioProcessor* filter; | |||
| AudioFilterStreamingDeviceManager* deviceManager; | |||
| Button* optionsButton; | |||
| void deleteFilter(); | |||
| StandaloneFilterWindow (const StandaloneFilterWindow&); | |||
| const StandaloneFilterWindow& operator= (const StandaloneFilterWindow&); | |||
| }; | |||
| #endif // __JUCE_STANDALONEFILTERWINDOW_JUCEHEADER__ | |||
| @@ -1,98 +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. | |||
| ============================================================================== | |||
| */ | |||
| #ifndef __JUCE_INCLUDECHARACTERISTICS_JUCEHEADER__ | |||
| #define __JUCE_INCLUDECHARACTERISTICS_JUCEHEADER__ | |||
| //============================================================================== | |||
| /* 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" | |||
| //============================================================================== | |||
| // The following stuff is just to cause a compile error if you've forgotten to | |||
| // define all your plugin settings properly. | |||
| #ifndef JucePlugin_IsSynth | |||
| #error "You need to define the JucePlugin_IsSynth value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_ManufacturerCode | |||
| #error "You need to define the JucePlugin_ManufacturerCode value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_PluginCode | |||
| #error "You need to define the JucePlugin_PluginCode value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_ProducesMidiOutput | |||
| #error "You need to define the JucePlugin_ProducesMidiOutput value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_WantsMidiInput | |||
| #error "You need to define the JucePlugin_WantsMidiInput value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_MaxNumInputChannels | |||
| #error "You need to define the JucePlugin_MaxNumInputChannels value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_MaxNumOutputChannels | |||
| #error "You need to define the JucePlugin_MaxNumOutputChannels value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_PreferredChannelConfigurations | |||
| #error "You need to define the JucePlugin_PreferredChannelConfigurations value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifdef JucePlugin_Latency | |||
| #error "JucePlugin_Latency is now deprecated - instead, call the AudioProcessor::setLatencySamples() method if your plugin has a non-zero delay" | |||
| #endif | |||
| #ifndef JucePlugin_SilenceInProducesSilenceOut | |||
| #error "You need to define the JucePlugin_SilenceInProducesSilenceOut value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #ifndef JucePlugin_EditorRequiresKeyboardFocus | |||
| #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 | |||
| #error "You need to define the JUCE_USE_VSTSDK_2_4 value in your JucePluginCharacteristics.h file!" | |||
| #endif | |||
| #endif // __JUCE_INCLUDECHARACTERISTICS_JUCEHEADER__ | |||