├── assets ├── knob generator │ ├── .gitignore │ ├── run.cmd │ ├── conf.moon │ └── main.moon └── interface.afdesign ├── images ├── time.png ├── cover.png ├── drive.png ├── ducking.png ├── filter.png ├── volume.png ├── feedback.png ├── screenshot.png └── screenshot.psd ├── source ├── CocoaDelay.exp ├── resources │ ├── English.lproj │ │ └── InfoPlist.strings │ ├── img │ │ ├── bg.png │ │ ├── knob left.png │ │ ├── knob right.png │ │ ├── pan modes.png │ │ ├── filter modes.png │ │ ├── knob middle.png │ │ └── tempo sync times.png │ ├── CocoaDelay.icns │ ├── CocoaDelay.ico │ ├── CocoaDelay.entitlements │ ├── CocoaDelay-VST2-Info.plist │ ├── CocoaDelay-VST3-Info.plist │ ├── CocoaDelay-AAX-Info.plist │ ├── CocoaDelay-RTAS-Info.plist │ ├── CocoaDelay-OSXAPP-Info.plist │ ├── CocoaDelay-AU-Info.plist │ └── CocoaDelay-Pages.xml ├── CocoaDelay-rtas.def ├── installer │ ├── changelog.txt │ ├── CocoaDelay-installer-bg.png │ ├── intro.rtf │ ├── readmewin.rtf │ ├── readmeosx.rtf │ ├── license.rtf │ └── CocoaDelay.iss ├── manual │ └── CocoaDelay_manual.pdf ├── CocoaDelay-aax.vcxproj.user ├── CocoaDelay-app.vcxproj.user ├── CocoaDelay-rtas.vcxproj.user ├── Knob.cpp ├── StatefulDrive.h ├── .gitignore ├── Knob.h ├── app_wrapper │ ├── main.mm │ ├── app_resource.h │ └── app_main.h ├── StatefulDrive.cpp ├── CocoaDelay-vst2.vcxproj.filters ├── Util.h ├── CocoaDelay.xcconfig ├── validate_audiounit.command ├── Filter.cpp ├── CocoaDelay-vst3.vcxproj.user ├── CocoaDelay-vst2.vcxproj.user ├── CocoaDelay.xcodeproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── All.xcscheme │ │ ├── VST2.xcscheme │ │ ├── VST3.xcscheme │ │ ├── RTAS.xcscheme │ │ ├── AAX.xcscheme │ │ ├── AU.xcscheme │ │ └── APP.xcscheme ├── Filter.h ├── makedist-win.bat ├── CocoaDelay.h ├── PresetMenu.h ├── resource.h ├── CocoaDelay-app.vcxproj.filters ├── CocoaDelay.props ├── CocoaDelay.rc ├── update_version.py ├── CocoaDelay-aax.vcxproj.filters ├── Presets.cpp ├── CocoaDelay-rtas.vcxproj.filters ├── makedist-mac.command ├── CocoaDelay-vst3.vcxproj.filters ├── generate_plists.py ├── CocoaDelay.sln ├── CocoaDelay-vst2.vcxproj └── CocoaDelay-app.vcxproj ├── readme.md ├── license.md └── manual.md /assets/knob generator/.gitignore: -------------------------------------------------------------------------------- 1 | *.lua -------------------------------------------------------------------------------- /assets/knob generator/run.cmd: -------------------------------------------------------------------------------- 1 | moonc . 2 | love --console . -------------------------------------------------------------------------------- /assets/knob generator/conf.moon: -------------------------------------------------------------------------------- 1 | love.conf = (t) -> 2 | t.window.msaa = 16 -------------------------------------------------------------------------------- /images/time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/time.png -------------------------------------------------------------------------------- /images/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/cover.png -------------------------------------------------------------------------------- /images/drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/drive.png -------------------------------------------------------------------------------- /images/ducking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/ducking.png -------------------------------------------------------------------------------- /images/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/filter.png -------------------------------------------------------------------------------- /images/volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/volume.png -------------------------------------------------------------------------------- /source/CocoaDelay.exp: -------------------------------------------------------------------------------- 1 | _CocoaDelay_Entry 2 | _CocoaDelay_ViewEntry 3 | _CocoaDelay_Factory 4 | -------------------------------------------------------------------------------- /source/resources/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ -------------------------------------------------------------------------------- /images/feedback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/feedback.png -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/screenshot.png -------------------------------------------------------------------------------- /images/screenshot.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/images/screenshot.psd -------------------------------------------------------------------------------- /assets/interface.afdesign: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/assets/interface.afdesign -------------------------------------------------------------------------------- /source/CocoaDelay-rtas.def: -------------------------------------------------------------------------------- 1 | LIBRARY CocoaDelay 2 | EXPORTS 3 | NewPlugIn @1 4 | _PI_GetRoutineDescriptor @2 -------------------------------------------------------------------------------- /source/resources/img/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/bg.png -------------------------------------------------------------------------------- /source/installer/changelog.txt: -------------------------------------------------------------------------------- 1 | CocoaDelay changelog 2 | www.olilarkin.co.uk 3 | 4 | 00/00/00 - v1.00 initial release -------------------------------------------------------------------------------- /source/resources/CocoaDelay.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/CocoaDelay.icns -------------------------------------------------------------------------------- /source/resources/CocoaDelay.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/CocoaDelay.ico -------------------------------------------------------------------------------- /source/manual/CocoaDelay_manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/manual/CocoaDelay_manual.pdf -------------------------------------------------------------------------------- /source/resources/img/knob left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/knob left.png -------------------------------------------------------------------------------- /source/resources/img/knob right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/knob right.png -------------------------------------------------------------------------------- /source/resources/img/pan modes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/pan modes.png -------------------------------------------------------------------------------- /source/resources/img/filter modes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/filter modes.png -------------------------------------------------------------------------------- /source/resources/img/knob middle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/knob middle.png -------------------------------------------------------------------------------- /source/resources/img/tempo sync times.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/resources/img/tempo sync times.png -------------------------------------------------------------------------------- /source/installer/CocoaDelay-installer-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tesselode/cocoa-delay/HEAD/source/installer/CocoaDelay-installer-bg.png -------------------------------------------------------------------------------- /source/CocoaDelay-aax.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/CocoaDelay-app.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/CocoaDelay-rtas.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/Knob.cpp: -------------------------------------------------------------------------------- 1 | #include "Knob.h" 2 | 3 | bool Knob::Draw(IGraphics * pGraphics) 4 | { 5 | int i = mValue * mBitmap.N; 6 | i = BOUNDED(i, 1, mBitmap.N); 7 | return pGraphics->DrawBitmap(&mBitmap, &mRECT, i, &mBlend); 8 | } 9 | -------------------------------------------------------------------------------- /source/StatefulDrive.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class StatefulDrive 6 | { 7 | public: 8 | double Process(double input, double amount); 9 | 10 | private: 11 | double previous = 0.0; 12 | }; 13 | 14 | -------------------------------------------------------------------------------- /source/.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.sdf 3 | *.opensdf 4 | *.zip 5 | *.suo 6 | *.ncb 7 | *.vcproj.* 8 | *.pkg 9 | *.dmg 10 | *.depend 11 | *.layout 12 | *.mode1v3 13 | *.db 14 | *.LSOverride 15 | *.xcworkspace 16 | *.xcuserdata 17 | *.xcschememanagement.plist 18 | build-* 19 | ipch/* 20 | gui/* 21 | 22 | Icon? 23 | .DS_Stor* 24 | .vs/* -------------------------------------------------------------------------------- /source/Knob.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "IControl.h" 4 | 5 | class Knob : public IKnobMultiControl 6 | { 7 | public: 8 | Knob(IPlugBase* pPlug, int x, int y, int paramIdx, IBitmap* pBitmap, 9 | EDirection direction = kVertical, double gearing = DEFAULT_GEARING) : 10 | IKnobMultiControl(pPlug, x, y, paramIdx, pBitmap, direction, gearing) {} 11 | bool Draw(IGraphics* pGraphics); 12 | }; 13 | 14 | -------------------------------------------------------------------------------- /source/app_wrapper/main.mm: -------------------------------------------------------------------------------- 1 | #import 2 | #include "swell.h" 3 | 4 | int main(int argc, char *argv[]) 5 | { 6 | return NSApplicationMain(argc, (const char **) argv); 7 | } 8 | 9 | void CenterWindow(HWND hwnd) 10 | { 11 | if (!hwnd) return; 12 | 13 | id turd=(id)hwnd; 14 | 15 | if ([turd isKindOfClass:[NSView class]]) 16 | { 17 | NSWindow *w = [turd window]; 18 | [w center]; 19 | } 20 | if ([turd isKindOfClass:[NSWindow class]]) 21 | { 22 | [turd center]; 23 | } 24 | } 25 | 26 | -------------------------------------------------------------------------------- /source/resources/CocoaDelay.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.device.microphone 8 | 9 | com.apple.security.device.usb 10 | 11 | com.apple.security.device.firewire 12 | 13 | com.apple.security.files.user-selected.read-write 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /source/installer/intro.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 2 | {\fonttbl\f0\fnil\fcharset0 LucidaGrande;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11900\paperh16840\margl1440\margr1440\vieww14440\viewh8920\viewkind0 5 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural 6 | 7 | \f0\fs26 \cf0 I hope you enjoy using CocoaDelay as much as I did making it. Please let me know how you use it and if you make any interesting recordings, I'd love to hear them.\ 8 | \ 9 | Oli Larkin\ 10 | \ 11 | contact@olilarkin.co.uk\ 12 | \ 13 | http://www.olilarkin.co.uk\ 14 | \ 15 | http://soundcloud.com/olilarkin} -------------------------------------------------------------------------------- /source/StatefulDrive.cpp: -------------------------------------------------------------------------------- 1 | #include "StatefulDrive.h" 2 | 3 | /* 4 | 5 | this is a combo of two airwindows plugins. it uses the behavior of PurestDrive: 6 | https://github.com/airwindows/airwindows/blob/master/plugins/WinVST/PurestDrive/PurestDriveProc.cpp 7 | 8 | but with the saturation algorithm of Spiral: 9 | https://github.com/airwindows/airwindows/blob/master/plugins/WinVST/Spiral/SpiralProc.cpp 10 | 11 | */ 12 | 13 | double StatefulDrive::Process(double input, double amount) 14 | { 15 | auto driven = input == 0.0 ? 0.0 : sin(input * input) / input; 16 | auto mix = fabs(previous + driven) * .5 * amount; 17 | previous = driven; 18 | return input * (1.0 - mix) + driven * mix; 19 | } 20 | -------------------------------------------------------------------------------- /source/installer/readmewin.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 LucidaGrande;}} 2 | {\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\lang2057\b\f0\fs26 Thanks for installing CocoaDelay\b0\par 3 | \par 4 | I hope you enjoy using CocoaDelay as much as I did making it. Please let me know how you use it and if you make any interesting recordings, I'd love to hear them.\par 5 | \par 6 | Oli Larkin\par 7 | \par 8 | contact@olilarkin.co.uk\par 9 | http://www.olilarkin.co.uk\par 10 | http://soundcloud.com/olilarkin\par 11 | \par 12 | If you experience any problems with CocoaDelay, please contact me at the following address:\par 13 | \par 14 | \pard\b support@olilarkin.co.uk\b0\par 15 | } 16 | -------------------------------------------------------------------------------- /source/installer/readmeosx.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1138 2 | {\fonttbl\f0\fnil\fcharset0 LucidaGrande;\f1\fnil\fcharset0 Monaco;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11900\paperh16840\margl1440\margr1440\vieww14320\viewh8340\viewkind0 5 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural 6 | 7 | \f0\fs26 \cf0 The plugins will be installed in your system plugin folders which will make them available to all user accounts on your computer. 8 | \f1\fs20 9 | \f0\fs26 The standalone will be installed in the system Applications folder. \ 10 | \ 11 | If you don't want to install all components, click "Customize" on the "Installation Type" page.\ 12 | \ 13 | The plugins and app support both 32bit and 64bit operation.\ 14 | \ 15 | If you experience any problems with CocoaDelay, please contact me at the following address:\ 16 | \ 17 | support@olilarkin.co.uk} -------------------------------------------------------------------------------- /source/resources/CocoaDelay-VST2-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | CocoaDelay 9 | CFBundleGetInfoString 10 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 11 | CFBundleIdentifier 12 | com.AndrewMinnich.vst2.CocoaDelay 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | CocoaDelay 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | Ipef 23 | CFBundleVersion 24 | 1.0.0 25 | CSResourcesFileMapped 26 | 27 | LSMinimumSystemVersion 28 | 10.7 29 | 30 | 31 | -------------------------------------------------------------------------------- /source/resources/CocoaDelay-VST3-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | CocoaDelay 9 | CFBundleGetInfoString 10 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 11 | CFBundleIdentifier 12 | com.AndrewMinnich.vst3.CocoaDelay 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | CocoaDelay 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | Ipef 23 | CFBundleVersion 24 | 1.0.0 25 | CSResourcesFileMapped 26 | 27 | LSMinimumSystemVersion 28 | 10.7 29 | 30 | 31 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Cocoa Delay 2 | 3 | ![Cocoa Delay screenshot](images/screenshot.png) 4 | 5 | **Cocoa Delay** is a free, open-source delay plugin in VST format. It focuses on clean design, easy operation, and a warm, lively sound. 6 | 7 | Notable features: 8 | - Delay time drift, for giving the wet signal a slight wow/flutter effect 9 | - Adjustable wet level ducking based on the input signal 10 | - Static, ping-pong, and circular pan modes 11 | - Drive section based on open-source Airwindows saturation code 12 | 13 | ## Contributing 14 | 15 | Feel free to give feedback on design, report bugs, make pull requests, etc. I like all sorts of involvement! 16 | 17 | ### Building Cocoa Delay 18 | 19 | 1. Clone [wdl-ol](https://github.com/olilarkin/wdl-ol). 20 | 2. Add the necessary include files for the build targets you want to use. See [Martin Finke's tutorial](http://www.martin-finke.de/blog/articles/audio-plugins-002-setting-up-wdl-ol/) for more information. 21 | 3. Clone the cocoa-delay repo into the wdl-ol base directory. 22 | 4. Open CocoaDelay.sln in Visual Studio and build the project for the desired target. 23 | -------------------------------------------------------------------------------- /license.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Andrew Minnich 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /source/CocoaDelay-vst2.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vst2 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | vst2 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {ea16de74-9d15-4c60-ba09-d0924088d3e5} 31 | 32 | 33 | -------------------------------------------------------------------------------- /source/resources/CocoaDelay-AAX-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | CocoaDelay 9 | CFBundleGetInfoString 10 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 11 | CFBundleIdentifier 12 | com.AndrewMinnich.aax.CocoaDelay 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | CocoaDelay 17 | CFBundlePackageType 18 | TDMw 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | PTul 23 | CFBundleVersion 24 | 1.0.0 25 | CSResourcesFileMapped 26 | 27 | LSMinimumSystemVersion 28 | 10.7 29 | LSMultipleInstancesProhibited 30 | true 31 | LSPrefersCarbon 32 | 33 | NSAppleScriptEnabled 34 | No 35 | 36 | 37 | -------------------------------------------------------------------------------- /source/resources/CocoaDelay-RTAS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | CocoaDelay 9 | CFBundleGetInfoString 10 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 11 | CFBundleIdentifier 12 | com.AndrewMinnich.rtas.CocoaDelay 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | CocoaDelay 17 | CFBundlePackageType 18 | TDMw 19 | CFBundleShortVersionString 20 | 1.0.0 21 | CFBundleSignature 22 | PTul 23 | CFBundleVersion 24 | 1.0.0 25 | CSResourcesFileMapped 26 | 27 | LSMinimumSystemVersion 28 | 10.7 29 | LSMultipleInstancesProhibited 30 | true 31 | LSPrefersCarbon 32 | 33 | NSAppleScriptEnabled 34 | No 35 | 36 | 37 | -------------------------------------------------------------------------------- /source/resources/CocoaDelay-OSXAPP-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | CocoaDelay 9 | CFBundleGetInfoString 10 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 11 | CFBundleIconFile 12 | CocoaDelay.icns 13 | CFBundleIdentifier 14 | com.AndrewMinnich.standalone.CocoaDelay 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | CocoaDelay 19 | CFBundlePackageType 20 | BNDL 21 | CFBundleShortVersionString 22 | 1.0.0 23 | CFBundleSignature 24 | Ipef 25 | CFBundleVersion 26 | 1.0.0 27 | CSResourcesFileMapped 28 | 29 | LSApplicationCategoryType 30 | public.app-category.music 31 | LSMinimumSystemVersion 32 | 10.7 33 | NSMainNibFile 34 | MainMenu 35 | NSPrincipalClass 36 | SWELLApplication 37 | 38 | 39 | -------------------------------------------------------------------------------- /source/app_wrapper/app_resource.h: -------------------------------------------------------------------------------- 1 | // RESOURCE IDS FOR STANDALONE APP 2 | 3 | #ifndef IDC_STATIC 4 | #define IDC_STATIC (-1) 5 | #endif 6 | 7 | #define IDD_DIALOG_MAIN 40001 8 | #define IDD_DIALOG_PREF 40002 9 | #define IDI_ICON1 40003 10 | #define IDR_MENU1 40004 11 | 12 | #define ID_ABOUT 40005 13 | #define ID_PREFERENCES 40006 14 | #define ID_QUIT 40007 15 | 16 | #define IDC_COMBO_AUDIO_DRIVER 40008 17 | #define IDC_COMBO_AUDIO_IN_DEV 40009 18 | #define IDC_COMBO_AUDIO_OUT_DEV 40010 19 | #define IDC_COMBO_AUDIO_IOVS 40011 20 | #define IDC_COMBO_AUDIO_SIGVS 40012 21 | #define IDC_COMBO_AUDIO_SR 40013 22 | #define IDC_COMBO_AUDIO_IN_L 40014 23 | #define IDC_COMBO_AUDIO_IN_R 40015 24 | #define IDC_COMBO_AUDIO_OUT_R 40016 25 | #define IDC_COMBO_AUDIO_OUT_L 40017 26 | #define IDC_COMBO_MIDI_IN_DEV 40018 27 | #define IDC_COMBO_MIDI_OUT_DEV 40019 28 | #define IDC_COMBO_MIDI_IN_CHAN 40020 29 | #define IDC_COMBO_MIDI_OUT_CHAN 40021 30 | #define IDC_BUTTON_ASIO 40022 31 | #define IDC_CB_MONO_INPUT 40023 32 | 33 | #define IDAPPLY 40024 34 | 35 | // some options for the app 36 | 37 | #define ENABLE_SYSEX 0 38 | #define ENABLE_MIDICLOCK 0 39 | #define ENABLE_ACTIVE_SENSING 0 40 | #define NUM_CHANNELS 2 41 | #define N_VECTOR_WAIT 50 42 | #define APP_MULT 0.25 43 | -------------------------------------------------------------------------------- /source/Util.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | const double pi = 2 * acos(0.0); 6 | 7 | // https://stackoverflow.com/a/707426 8 | inline int wrap(int kX, int const kLowerBound, int const kUpperBound) 9 | { 10 | int range_size = kUpperBound - kLowerBound + 1; 11 | 12 | if (kX < kLowerBound) 13 | kX += range_size * ((kLowerBound - kX) / range_size + 1); 14 | 15 | return kLowerBound + (kX - kLowerBound) % range_size; 16 | } 17 | 18 | // http://musicdsp.org/archive.php?classid=5#93 19 | inline float interpolate(float x, float y0, float y1, float y2, float y3) 20 | { 21 | // 4-point, 3rd-order Hermite (x-form) 22 | float c0 = y1; 23 | float c1 = 0.5f * (y2 - y0); 24 | float c2 = y0 - 2.5f * y1 + 2.f * y2 - 0.5f * y3; 25 | float c3 = 1.5f * (y1 - y2) + 0.5f * (y3 - y0); 26 | return ((c3 * x + c2) * x + c1) * x + c0; 27 | } 28 | 29 | inline void adjustPanning(double inL, double inR, double angle, double &outL, double &outR) 30 | { 31 | auto c = cos(angle); 32 | auto s = sin(angle); 33 | outL = inL * c - inR * s; 34 | outR = inL * s + inR * c; 35 | } 36 | 37 | // random numbers 38 | 39 | // https://stackoverflow.com/questions/1640258/need-a-fast-random-generator-for-c 40 | static unsigned long x = 123456789, y = 362436069, z = 521288629; 41 | inline unsigned long xorshift(void) 42 | { 43 | unsigned long t; 44 | x ^= x << 16; 45 | x ^= x >> 5; 46 | x ^= x << 1; 47 | t = x; 48 | x = y; 49 | y = z; 50 | z = t ^ x ^ y; 51 | return z; 52 | } 53 | 54 | const double xorshiftMultiplier = 2.0 / ULONG_MAX; 55 | inline double random() 56 | { 57 | return -1.0 + xorshift() * xorshiftMultiplier; 58 | } -------------------------------------------------------------------------------- /assets/knob generator/main.moon: -------------------------------------------------------------------------------- 1 | knobRadius = .43333333 2 | outlineThickness = 1/8 3 | scale = 64 4 | buffer = .25 5 | 6 | color = 7 | body: {226/255, 229/255, 242/255} 8 | gray: {226/255, 229/255, 242/255, .25} 9 | accent: {171/255, 56/255, 133/255} 10 | 11 | drawKnob = (angle, originAngle) -> with love.graphics 12 | angle = math.rad angle 13 | originAngle = math.rad originAngle 14 | .push 'all' 15 | .setBlendMode 'alpha', 'premultiplied' 16 | .setColor color.gray 17 | .circle 'fill', .5, .5, knobRadius + outlineThickness / 2, 64 18 | .setColor color.accent 19 | .arc 'fill', 'pie', .5, .5, knobRadius + outlineThickness / 2, angle, originAngle, 64 20 | .setColor color.body 21 | .circle 'fill', .5, .5, knobRadius - outlineThickness / 2, 64 22 | .setColor color.accent 23 | .circle 'fill', .5 + .2 * math.cos(angle), .5 + .2 * math.sin(angle), 1/16, 64 24 | .pop! 25 | 26 | drawKnobStrip = (originAngle) -> with love.graphics 27 | .push 'all' 28 | .translate buffer, buffer 29 | for angle = -215, 45, 5 30 | drawKnob angle, originAngle 31 | .translate 0, 1 + 2 * buffer 32 | .pop! 33 | 34 | exportKnobStrip = (originAngle, filename) -> with love.graphics 35 | frames = (45 + 215) / 5 + 1 36 | width = scale * (1 + 2 * buffer) 37 | height = scale * (frames * (1 + 2 * buffer)) 38 | canvas = .newCanvas width, height, 39 | msaa: 16 40 | canvas\renderTo -> 41 | .push 'all' 42 | .scale scale 43 | drawKnobStrip originAngle 44 | .pop! 45 | canvas\newImageData!\encode 'png', filename .. '.png' 46 | 47 | exportKnobStrip -215, 'knob left' 48 | exportKnobStrip -90, 'knob middle' 49 | exportKnobStrip 45, 'knob right' 50 | 51 | love.draw = -> with love.graphics 52 | .push 'all' 53 | .scale 64 54 | drawKnobStrip -215 55 | .pop! -------------------------------------------------------------------------------- /source/resources/CocoaDelay-AU-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AudioComponents 6 | 7 | 8 | description 9 | CocoaDelay 10 | factoryFunction 11 | CocoaDelay_Factory 12 | manufacturer 13 | Acme 14 | name 15 | AndrewMinnich: CocoaDelay 16 | resourceUsage 17 | 18 | 19 | sandboxSafe 20 | 21 | subtype 22 | Ipef 23 | type 24 | aufx 25 | version 26 | 65536 27 | 28 | 29 | AudioUnit Version 30 | 0x00010000 31 | CFBundleDevelopmentRegion 32 | English 33 | CFBundleExecutable 34 | CocoaDelay 35 | CFBundleGetInfoString 36 | CocoaDelay v1.0.0 Copyright 2017 Acme Inc 37 | CFBundleIdentifier 38 | com.AndrewMinnich.audiounit.CocoaDelay 39 | CFBundleInfoDictionaryVersion 40 | 6.0 41 | CFBundleName 42 | CocoaDelay 43 | CFBundlePackageType 44 | BNDL 45 | CFBundleShortVersionString 46 | 1.0.0 47 | CFBundleSignature 48 | Ipef 49 | CFBundleVersion 50 | 1.0.0 51 | CSResourcesFileMapped 52 | 53 | LSMinimumSystemVersion 54 | 10.7 55 | NSPrincipalClass 56 | CocoaDelay_View 57 | 58 | 59 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../common.xcconfig" 2 | 3 | //------------------------------ 4 | // Global settings 5 | 6 | // the basename of the vst, vst3, app, component, dpm, aaxplugin 7 | BINARY_NAME = CocoaDelay 8 | 9 | ADDITIONAL_INCLUDES = // $(SRCROOT)/../../../MyDSP/ 10 | //ADDITIONAL_LIBRARY_PATHS = // 11 | 12 | // for jack headers 13 | //ADDITIONAL_APP_INCLUDES = /usr/local/include 14 | 15 | // Flags to pass to compiler for all builds 16 | GCC_CFLAGS = -Wno-write-strings 17 | 18 | //------------------------------ 19 | // Preprocessor definitions 20 | 21 | // Preprocessor definitions for all VST builds 22 | VST_DEFS = VST_API VST_FORCE_DEPRECATED 23 | 24 | VST3_DEFS = VST3_API 25 | 26 | // Preprocessor definitions for all AU builds 27 | AU_DEFS = AU_API 28 | 29 | RTAS_DEFS = RTAS_API 30 | 31 | AAX_DEFS = AAX_API 32 | 33 | APP_DEFS = SA_API __MACOSX_CORE__ 34 | 35 | // Preprocessor definitions for all Debug builds 36 | DEBUG_DEFS = _DEBUG 37 | 38 | // Preprocessor definitions for all Release builds 39 | RELEASE_DEFS = NDEBUG //DEMO_VERSION 40 | 41 | // Preprocessor definitions for all Tracer builds 42 | TRACER_DEFS = TRACER_BUILD NDEBUG 43 | 44 | // Preprocessor definitions for cocoa uniqueness (all builds) 45 | // If you want to use swell inside of iplug, you need to make SWELL_APP_PREFIX unique too 46 | COCOA_DEFS = SWELL_CLEANUP_ON_UNLOAD COCOA_PREFIX=vCocoaDelay SWELL_APP_PREFIX=Swell_vCocoaDelay 47 | 48 | //------------------------------ 49 | // Release build options 50 | 51 | //Enable/Disable Profiling code 52 | PROFILE = NO //NO, YES - enable this if you want to use shark to profile a plugin 53 | 54 | // GCC optimization level - 55 | // None: [-O0] Fast: [-O, -O1] Faster:[-O2] Fastest: [-O3] Fastest, smallest: Optimize for size. [-Os] 56 | RELEASE_OPTIMIZE = 3 //0,1,2,3,s 57 | 58 | //------------------------------ 59 | // Debug build options 60 | DEBUG_OPTIMIZE = 0 //0,1,2,3,s 61 | 62 | -------------------------------------------------------------------------------- /source/installer/license.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 2 | {\fonttbl\f0\fswiss\fcharset0 ArialMT;} 3 | {\colortbl;\red255\green255\blue255;} 4 | \paperw11900\paperh16840\margl1440\margr1440\vieww17060\viewh12300\viewkind0 5 | \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\ql\qnatural\pardirnatural 6 | 7 | \f0\b\fs20 \cf0 Caveat: 8 | \b0 \ 9 | By installing this software you agree to use it at your own risk. The developer cannot be held responsible for any damages caused as a result of it's use.\ 10 | \ 11 | 12 | \b Distribution: 13 | \b0 \ 14 | You are not permitted to distribute the software without the developer's permission. This includes, but is not limited to the distribution on magazine covers or software review websites.\ 15 | \ 16 | 17 | \b Multiple Installations*: 18 | \b0 If you purchased this product as an individual, you are licensed to install and use the software on any computer you need to use it on, providing you remove it afterwards (if it is a shared machine). If you purchased it as an institution or company, you are licensed to use it on one machine only, and must purchase additional copies for each machine you wish to use it on.\ 19 | \ 20 | 21 | \b Upgrades*: 22 | \b0 If you purchased this product you are entitled to free updates until the next major version number. The developer makes no guarantee is made that this product will be maintained indefinitely.\ 23 | \ 24 | 25 | \b License transfers*: 26 | \b0 If you purchased this product you may transfer your license to another person. As the original owner you are required to contact the developer with the details of the license transfer, so that the new owner can receive the updates and support attached to the license. Upon transferring a license the original owner must remove any copies from their machines and are no longer permitted to use the software.\ 27 | \ 28 | 29 | \b CocoaDelay is \'a9 Copyright Oliver Larkin 2004-2011\ 30 | 31 | \b0 \ 32 | http://www.olilarkin.co.uk\ 33 | \ 34 | VST and VST3 are trademarks of Steinberg Media Technologies GmbH. \ 35 | Audio Unit is a trademark of Apple, Inc. \ 36 | RTAS and AAX are trademarks of Avid, Inc.\ 37 | \ 38 | * Applies to full version only, not the demo version.} -------------------------------------------------------------------------------- /source/validate_audiounit.command: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | # shell script to validate your iplug audiounit using auval 3 | # run from terminal with the argument leaks to perform the leaks test (See auval docs) 4 | 5 | BASEDIR=$(dirname $0) 6 | 7 | cd $BASEDIR 8 | 9 | OS_VERSION=`sw_vers -productVersion | egrep -o '10\.[0-9]+'` 10 | 11 | x86_ARGS="" 12 | x64_ARGS="" 13 | 14 | if [[ $OS_VERSION == "10.9" ]] || [[ $OS_VERSION == "10.10" ]] 15 | then 16 | x86_ARGS="-32" 17 | x64_ARGS="" 18 | else 19 | x86_ARGS="" 20 | x64_ARGS="-64" 21 | fi 22 | 23 | PUID=`echo | grep PLUG_UNIQUE_ID resource.h` 24 | PUID=${PUID//\#define PLUG_UNIQUE_ID } 25 | PUID=${PUID//\'} 26 | 27 | PMID=`echo | grep PLUG_MFR_ID resource.h` 28 | PMID=${PMID//\#define PLUG_MFR_ID } 29 | PMID=${PMID//\'} 30 | 31 | PII=`echo | grep PLUG_IS_INST resource.h` 32 | PII=${PII//\#define PLUG_IS_INST } 33 | 34 | PDM=`echo | grep PLUG_DOES_MIDI resource.h` 35 | PDM=${PDM//\#define PLUG_DOES_MIDI } 36 | 37 | TYPE=aufx 38 | 39 | if [ $PII == 1 ] # instrument 40 | then 41 | TYPE=aumu 42 | else 43 | if [ $PDM == 1 ] # midi effect 44 | then 45 | TYPE=aumf 46 | fi 47 | fi 48 | 49 | if [ "$1" == "leaks" ] 50 | then 51 | echo "testing for leaks (i386 32 bit)" 52 | echo 'launch a new shell and type: ps axc|awk "{if (\$5==\"auvaltool\") print \$1}" to get the pid'; 53 | echo "then leaks PID" 54 | 55 | export MallocStackLogging=1 56 | set env MallocStackLoggingNoCompact=1 57 | 58 | auval $x86_ARGS -v $TYPE $PUID $PMID -w -q 59 | 60 | unset MallocStackLogging 61 | 62 | else 63 | 64 | echo "\nvalidating i386 32 bit... ------------------------" 65 | echo "--------------------------------------------------" 66 | echo "--------------------------------------------------" 67 | echo "--------------------------------------------------" 68 | echo "--------------------------------------------------" 69 | echo "--------------------------------------------------" 70 | 71 | auval $x86_ARGS -v $TYPE $PUID $PMID 72 | 73 | echo "\nvalidating i386 64 bit... ------------------------" 74 | echo "--------------------------------------------------" 75 | echo "--------------------------------------------------" 76 | echo "--------------------------------------------------" 77 | echo "--------------------------------------------------" 78 | echo "--------------------------------------------------" 79 | 80 | auval $x64_ARGS -v $TYPE $PUID $PMID 81 | 82 | fi 83 | 84 | echo "done" 85 | 86 | -------------------------------------------------------------------------------- /source/Filter.cpp: -------------------------------------------------------------------------------- 1 | #include "Filter.h" 2 | 3 | double OnePoleFilter::Process(double dt, double input, double cutoff, bool highPass) 4 | { 5 | cutoff *= 44100 * dt; 6 | cutoff = cutoff > 1.0 ? 1.0 : cutoff; 7 | a += (input - a) * cutoff; 8 | return highPass ? input - a : a; 9 | } 10 | 11 | double TwoPoleFilter::Process(double dt, double input, double cutoff, bool highPass) 12 | { 13 | cutoff *= 44100 * dt; 14 | cutoff = cutoff > 1.0 ? 1.0 : cutoff; 15 | a += (input - a) * cutoff; 16 | b += (a - b) * cutoff; 17 | return highPass ? input - b : b; 18 | } 19 | 20 | double FourPoleFilter::Process(double dt, double input, double cutoff, bool highPass) 21 | { 22 | cutoff *= 44100 * dt; 23 | cutoff = cutoff > 1.0 ? 1.0 : cutoff; 24 | a += (input - a) * cutoff; 25 | b += (a - b) * cutoff; 26 | c += (b - c) * cutoff; 27 | d += (c - d) * cutoff; 28 | return highPass ? input - d : d; 29 | } 30 | 31 | double StateVariableFilter::Process(double dt, double input, double cutoff, bool highPass) 32 | { 33 | input *= .9; 34 | 35 | // f calculation 36 | cutoff *= 8000.0; 37 | auto f = 2 * sin(pi * cutoff * dt); 38 | f = f > 1.0 ? 1.0 : f < 0.0 ? 0.0 : f; 39 | 40 | // processing 41 | auto high = input - (low + band); 42 | band += f * high; 43 | low += f * band; 44 | 45 | return highPass ? high : low; 46 | } 47 | 48 | void MultiFilter::SetMode(FilterModes m) 49 | { 50 | if (currentMode != m) 51 | { 52 | previousMode = currentMode; 53 | currentMode = m; 54 | crossfading = true; 55 | currentModeMix = 0.0; 56 | } 57 | } 58 | 59 | void MultiFilter::Process(double dt, double & l, double & r, double cutoff, bool highPass) 60 | { 61 | switch (crossfading) 62 | { 63 | case true: 64 | { 65 | currentModeMix += 100.0 * dt; 66 | if (currentModeMix >= 1.0) 67 | { 68 | auto current = currentMode; 69 | currentModeMix = 1.0; 70 | crossfading = false; 71 | filters[(int)previousMode]->Reset(); 72 | } 73 | 74 | auto inL = l; 75 | auto inR = r; 76 | auto tempOutL = 0.0; 77 | auto tempOutR = 0.0; 78 | l = 0.0; 79 | r = 0.0; 80 | 81 | filters[(int)previousMode]->Process(dt, inL, inR, cutoff, tempOutL, tempOutR, highPass); 82 | l += tempOutL * (1.0 - currentModeMix); 83 | r += tempOutR * (1.0 - currentModeMix); 84 | filters[(int)currentMode]->Process(dt, inL, inR, cutoff, tempOutL, tempOutR, highPass); 85 | l += tempOutL * currentModeMix; 86 | r += tempOutR * currentModeMix; 87 | 88 | break; 89 | } 90 | case false: 91 | filters[(int)currentMode]->Process(dt, l, r, cutoff, l, r, highPass); 92 | break; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /source/CocoaDelay-vst3.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(VST3_32_HOST_PATH) 5 | WindowsLocalDebugger 6 | $(TargetPath) 7 | $(TargetDir) 8 | 9 | 10 | $(VST3_32_HOST_PATH) 11 | WindowsLocalDebugger 12 | $(TargetPath) 13 | $(TargetDir) 14 | 15 | 16 | $(VST3_32_HOST_PATH) 17 | WindowsLocalDebugger 18 | $(TargetPath) 19 | $(TargetDir) 20 | 21 | 22 | $(TargetPath) 23 | 24 | 25 | $(TargetDir) 26 | WindowsLocalDebugger 27 | $(VST3_64_HOST_PATH) 28 | 29 | 30 | $(TargetPath) 31 | 32 | 33 | $(TargetDir) 34 | WindowsLocalDebugger 35 | 36 | 37 | $(TargetPath) 38 | 39 | 40 | $(TargetDir) 41 | WindowsLocalDebugger 42 | 43 | -------------------------------------------------------------------------------- /source/CocoaDelay-vst2.vcxproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(TargetPath) /noload /nosave 5 | 6 | 7 | $(TargetDir) 8 | WindowsLocalDebugger 9 | $(VST2_32_HOST_PATH) 10 | 11 | 12 | $(TargetPath) /noload /nosave 13 | WindowsLocalDebugger 14 | $(TargetDir) 15 | $(VST2_32_HOST_PATH) 16 | 17 | 18 | $(TargetPath) /noload /nosave 19 | WindowsLocalDebugger 20 | $(TargetDir) 21 | $(VST2_32_HOST_PATH) 22 | 23 | 24 | $(TargetDir) 25 | WindowsLocalDebugger 26 | $(TargetPath) /noload /nosave 27 | $(VST2_64_HOST_PATH) 28 | 29 | 30 | $(TargetDir) 31 | WindowsLocalDebugger 32 | $(TargetPath) /noload /nosave 33 | $(VST2_64_HOST_PATH) 34 | 35 | 36 | $(TargetDir) 37 | WindowsLocalDebugger 38 | $(TargetPath) /noload /nosave 39 | $(VST2_64_HOST_PATH) 40 | 41 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/All.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /source/Filter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | enum class FilterModes 8 | { 9 | onePole, 10 | twoPole, 11 | fourPole, 12 | stateVariable, 13 | numFilterModes, 14 | noFilter 15 | }; 16 | 17 | class OnePoleFilter 18 | { 19 | public: 20 | void Reset() 21 | { 22 | a = 0.0; 23 | } 24 | double Process(double dt, double input, double cutoff, bool highPass = false); 25 | 26 | private: 27 | double a = 0.0; 28 | }; 29 | 30 | class TwoPoleFilter 31 | { 32 | public: 33 | void Reset() 34 | { 35 | a = 0.0; 36 | b = 0.0; 37 | } 38 | double Process(double dt, double input, double cutoff, bool highPass = false); 39 | 40 | private: 41 | double a = 0.0; 42 | double b = 0.0; 43 | }; 44 | 45 | class FourPoleFilter 46 | { 47 | public: 48 | void Reset() 49 | { 50 | a = 0.0; 51 | b = 0.0; 52 | c = 0.0; 53 | d = 0.0; 54 | } 55 | double Process(double dt, double input, double cutoff, bool highPass = false); 56 | 57 | private: 58 | double a = 0.0; 59 | double b = 0.0; 60 | double c = 0.0; 61 | double d = 0.0; 62 | }; 63 | 64 | class StateVariableFilter 65 | { 66 | public: 67 | void Reset() 68 | { 69 | band = 0.0; 70 | low = 0.0; 71 | } 72 | double Process(double dt, double input, double cutoff, bool highPass = false); 73 | 74 | private: 75 | double pi = 2 * acos(0.0); 76 | double band = 0.0; 77 | double low = 0.0; 78 | }; 79 | 80 | class DualFilterBase 81 | { 82 | public: 83 | virtual void Reset() {} 84 | virtual void Process(double dt, double inL, double inR, double cutoff, double &outL, double &outR, bool highPass = false) {} 85 | }; 86 | 87 | template 88 | class DualFilter : public DualFilterBase 89 | { 90 | public: 91 | void Reset() 92 | { 93 | left.Reset(); 94 | right.Reset(); 95 | } 96 | void Process(double dt, double inL, double inR, double cutoff, double &outL, double &outR, bool highPass = false) 97 | { 98 | outL = left.Process(dt, inL, cutoff, highPass); 99 | outR = right.Process(dt, inR, cutoff, highPass); 100 | } 101 | 102 | private: 103 | T left; 104 | T right; 105 | }; 106 | 107 | class MultiFilter 108 | { 109 | public: 110 | void SetMode(FilterModes m); 111 | void Process(double dt, double &l, double &r, double cutoff, bool highPass = false); 112 | 113 | private: 114 | std::array, (int)FilterModes::numFilterModes> filters = { 115 | std::unique_ptr(new DualFilter()), 116 | std::unique_ptr(new DualFilter()), 117 | std::unique_ptr(new DualFilter()), 118 | std::unique_ptr(new DualFilter()) 119 | }; 120 | FilterModes currentMode = FilterModes::onePole; 121 | FilterModes previousMode = FilterModes::noFilter; 122 | bool crossfading = false; 123 | double currentModeMix = 1.0; 124 | }; -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/VST2.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 48 | 49 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 70 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/VST3.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 48 | 49 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 70 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/RTAS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 48 | 49 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 70 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/AAX.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 48 | 49 | 50 | 56 | 57 | 58 | 59 | 60 | 61 | 67 | 70 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /source/makedist-win.bat: -------------------------------------------------------------------------------- 1 | echo off 2 | 3 | REM - batch file to build VS2010 project and zip the resulting binaries (or make installer) 4 | REM - updating version numbers requires python and python path added to %PATH% env variable 5 | REM - zipping requires 7zip in %ProgramFiles%\7-Zip\7z.exe 6 | REM - building installer requires innotsetup in "%ProgramFiles(x86)%\Inno Setup 5\iscc" 7 | REM - AAX codesigning requires ashelper tool added to %PATH% env variable and aax.key/.crt in .\..\..\..\Certificates\ 8 | 9 | echo Making CocoaDelay win distribution ... 10 | 11 | echo ------------------------------------------------------------------ 12 | echo Updating version numbers ... 13 | 14 | call python update_version.py 15 | 16 | echo ------------------------------------------------------------------ 17 | echo Building ... 18 | 19 | if exist "%ProgramFiles(x86)%" (goto 64-Bit) else (goto 32-Bit) 20 | 21 | :32-Bit 22 | echo 32-Bit O/S detected 23 | call "%ProgramFiles%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 24 | goto END 25 | 26 | :64-Bit 27 | echo 64-Bit Host O/S detected 28 | call "%ProgramFiles(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 29 | goto END 30 | :END 31 | 32 | REM - set preprocessor macros like this, for instance to enable demo build: 33 | REM - SET CMDLINE_DEFINES="DEMO_VERSION" 34 | 35 | REM - Could build individual targets like this: 36 | REM - msbuild CocoaDelay-app.vcxproj /p:configuration=release /p:platform=win32 37 | 38 | msbuild CocoaDelay.sln /p:configuration=release /p:platform=win32 /nologo /noconsolelogger /fileLogger /v:quiet /flp:logfile=build-win.log;errorsonly 39 | msbuild CocoaDelay.sln /p:configuration=release /p:platform=x64 /nologo /noconsolelogger /fileLogger /v:quiet /flp:logfile=build-win.log;errorsonly;append 40 | 41 | #echo ------------------------------------------------------------------ 42 | #echo Code sign aax binary... 43 | #REM - x86 44 | #REM - x64 45 | 46 | REM - Make Installer (InnoSetup) 47 | 48 | echo ------------------------------------------------------------------ 49 | echo Making Installer ... 50 | 51 | if exist "%ProgramFiles(x86)%" (goto 64-Bit-is) else (goto 32-Bit-is) 52 | 53 | :32-Bit-is 54 | "%ProgramFiles%\Inno Setup 5\iscc" /cc ".\installer\CocoaDelay.iss" 55 | goto END-is 56 | 57 | :64-Bit-is 58 | "%ProgramFiles(x86)%\Inno Setup 5\iscc" /cc ".\installer\CocoaDelay.iss" 59 | goto END-is 60 | 61 | :END-is 62 | 63 | REM - ZIP 64 | REM - "%ProgramFiles%\7-Zip\7z.exe" a .\installer\CocoaDelay-win-32bit.zip .\build-win\app\win32\bin\CocoaDelay.exe .\build-win\vst3\win32\bin\CocoaDelay.vst3 .\build-win\vst2\win32\bin\CocoaDelay.dll .\build-win\rtas\bin\CocoaDelay.dpm .\build-win\rtas\bin\CocoaDelay.dpm.rsr .\build-win\aax\bin\CocoaDelay.aaxplugin* .\installer\license.rtf .\installer\readmewin.rtf 65 | REM - "%ProgramFiles%\7-Zip\7z.exe" a .\installer\CocoaDelay-win-64bit.zip .\build-win\app\x64\bin\CocoaDelay.exe .\build-win\vst3\x64\bin\CocoaDelay.vst3 .\build-win\vst2\x64\bin\CocoaDelay.dll .\installer\license.rtf .\installer\readmewin.rtf 66 | 67 | echo ------------------------------------------------------------------ 68 | echo Printing log file to console... 69 | 70 | type build-win.log 71 | 72 | pause -------------------------------------------------------------------------------- /source/CocoaDelay.h: -------------------------------------------------------------------------------- 1 | #ifndef __COCOADELAY__ 2 | #define __COCOADELAY__ 3 | 4 | #include 5 | #include "Filter.h" 6 | #include "Knob.h" 7 | #include "PresetMenu.h" 8 | #include "StatefulDrive.h" 9 | #include "Util.h" 10 | #include 11 | #include "IPlug_include_in_plug_hdr.h" 12 | 13 | const int numPrograms = 128; 14 | const int tapeLength = 10; 15 | 16 | enum class Parameters 17 | { 18 | delayTime, 19 | lfoAmount, 20 | lfoFrequency, 21 | driftAmount, 22 | driftSpeed, 23 | tempoSyncTime, 24 | feedback, 25 | stereoOffset, 26 | panMode, 27 | pan, 28 | duckAmount, 29 | duckAttackSpeed, 30 | duckReleaseSpeed, 31 | filterMode, 32 | lowPassCutoff, 33 | highPassCutoff, 34 | driveGain, 35 | driveMix, 36 | driveCutoff, 37 | driveIterations, 38 | dryVolume, 39 | wetVolume, 40 | numParameters 41 | }; 42 | 43 | enum class TempoSyncTimes 44 | { 45 | tempoSyncOff, 46 | whole, 47 | dottedHalf, 48 | half, 49 | tripletHalf, 50 | dottedQuarter, 51 | quarter, 52 | tripletQuarter, 53 | dottedEighth, 54 | eighth, 55 | tripletEighth, 56 | dottedSixteenth, 57 | sixteenth, 58 | tripletSixteenth, 59 | dottedThirtysecond, 60 | thirtysecond, 61 | tripletThirtysecond, 62 | dottedSixtyforth, 63 | sixtyforth, 64 | tripletSixtyforth, 65 | numTempoSyncTimes 66 | }; 67 | 68 | enum class PanModes 69 | { 70 | stationary, 71 | pingPong, 72 | circular, 73 | numPanModes 74 | }; 75 | 76 | class CocoaDelay : public IPlug 77 | { 78 | public: 79 | CocoaDelay(IPlugInstanceInfo instanceInfo); 80 | ~CocoaDelay(); 81 | 82 | IParam* GetParam(Parameters p) { return IPlug::GetParam((int)p); } 83 | void Reset(); 84 | void OnParamChange(int paramIdx); 85 | void ProcessDoubleReplacing(double** inputs, double** outputs, int nFrames); 86 | 87 | private: 88 | void InitParameters(); 89 | void InitGraphics(); 90 | void InitPresets(); 91 | double GetDelayTime(); 92 | void GetReadPositions(double & l, double & r); 93 | void InitBuffer(); 94 | void UpdateReadPositions(); 95 | void UpdateWritePosition(); 96 | void UpdateParameters(); 97 | void UpdateDucking(double input); 98 | void UpdateLfo(); 99 | void UpdateDrift(); 100 | double GetSample(std::vector &buffer, double position); 101 | void WriteToBuffer(double** inputs, int s, double outL, double outR); 102 | 103 | IGraphics* pGraphics; 104 | double dt = 0.0; 105 | 106 | // delay 107 | std::vector bufferL; 108 | std::vector bufferR; 109 | int writePosition; 110 | double readPositionL; 111 | double readPositionR; 112 | bool warmedUp = false; 113 | 114 | // fading parameters 115 | PanModes currentPanMode = PanModes::stationary; 116 | double parameterChangeVolume = 1.0; 117 | double stationaryPanAmount = 0.0; 118 | double circularPanAmount = 0.0; 119 | 120 | // filters 121 | MultiFilter lp; 122 | MultiFilter hp; 123 | 124 | // drive 125 | StatefulDrive statefulDrive; 126 | DualFilter driveFilter; 127 | 128 | // modulation 129 | double duckFollower = 0.0; 130 | double lfoPhase = 0.0; 131 | double driftVelocity = 0.0; 132 | double driftPhase = 0.0; 133 | }; 134 | 135 | #endif 136 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/AU.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 48 | 49 | 50 | 56 | 57 | 58 | 59 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 76 | 77 | 78 | 80 | 81 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /source/PresetMenu.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "IPlug_include_in_plug_hdr.h" 4 | 5 | class PresetMenu : public IPanelControl 6 | { 7 | private: 8 | WDL_String mPreviousPath; 9 | 10 | public: 11 | PresetMenu(IPlugBase *pPlug, IRECT pR) 12 | : IPanelControl(pPlug, pR, &COLOR_BLUE) 13 | {} 14 | 15 | bool Draw(IGraphics* pGraphics) 16 | { 17 | pGraphics->FillIRect(&COLOR_WHITE, &mRECT); 18 | 19 | int ax = mRECT.R - 8; 20 | int ay = mRECT.T + 4; 21 | int bx = ax + 4; 22 | int by = ay; 23 | int cx = ax + 2; 24 | int cy = ay + 2; 25 | 26 | pGraphics->FillTriangle(&COLOR_GRAY, ax, ay, bx, by, cx, cy, &mBlend); 27 | 28 | return true; 29 | } 30 | 31 | void OnMouseDown(int x, int y, IMouseMod* pMod) 32 | { 33 | if (pMod->L) 34 | { 35 | doPopupMenu(); 36 | } 37 | 38 | Redraw(); // seems to need this 39 | SetDirty(); 40 | } 41 | 42 | void doPopupMenu() 43 | { 44 | IPopupMenu menu; 45 | 46 | IGraphics* gui = mPlug->GetGUI(); 47 | 48 | menu.AddItem("Previous preset"); 49 | menu.AddItem("Next preset"); 50 | menu.AddSeparator(); 51 | menu.AddItem("Save Program..."); 52 | menu.AddItem("Save Bank..."); 53 | menu.AddSeparator(); 54 | menu.AddItem("Load Program..."); 55 | menu.AddItem("Load Bank..."); 56 | menu.AddSeparator(); 57 | menu.AddItem("Dump preset..."); 58 | 59 | if (gui->CreateIPopupMenu(&menu, &mRECT)) 60 | { 61 | const char* paramEnumNames[] = 62 | { 63 | "delayTime", 64 | "lfoAmount", 65 | "lfoFrequency", 66 | "driftAmount", 67 | "tempoSyncTime", 68 | "feedback", 69 | "stereoOffset", 70 | "panMode", 71 | "pan", 72 | "duckAmount", 73 | "duckAttackSpeed", 74 | "duckReleaseSpeed", 75 | "lpMode", 76 | "lpCut", 77 | "hpCut", 78 | "driveGain", 79 | "driveMix", 80 | "driveFilter", 81 | "dryVolume", 82 | "wetVolume", 83 | }; 84 | 85 | int itemChosen = menu.GetChosenItemIdx(); 86 | WDL_String fileName; 87 | 88 | //printf("chosen %i /n", itemChosen); 89 | switch (itemChosen) 90 | { 91 | case 0: 92 | mPlug->RestorePreset(mPlug->GetCurrentPresetIdx() - 1); 93 | break; 94 | case 1: 95 | mPlug->RestorePreset(mPlug->GetCurrentPresetIdx() + 1); 96 | break; 97 | case 3: //Save Program 98 | fileName.Set(mPlug->GetPresetName(mPlug->GetCurrentPresetIdx())); 99 | GetGUI()->PromptForFile(&fileName, kFileSave, &mPreviousPath, "fxp"); 100 | mPlug->SaveProgramAsFXP(&fileName); 101 | break; 102 | case 4: //Save Bank 103 | fileName.Set("IPlugChunksBank"); 104 | GetGUI()->PromptForFile(&fileName, kFileSave, &mPreviousPath, "fxb"); 105 | mPlug->SaveBankAsFXB(&fileName); 106 | break; 107 | case 6: //Load Preset 108 | GetGUI()->PromptForFile(&fileName, kFileOpen, &mPreviousPath, "fxp"); 109 | mPlug->LoadProgramFromFXP(&fileName); 110 | break; 111 | case 7: // Load Bank 112 | GetGUI()->PromptForFile(&fileName, kFileOpen, &mPreviousPath, "fxb"); 113 | mPlug->LoadBankFromFXB(&fileName); 114 | break; 115 | case 9: 116 | fileName.Set("preset"); 117 | GetGUI()->PromptForFile(&fileName, kFileSave, &mPreviousPath, "txt"); 118 | mPlug->DumpPresetSrcCode(fileName.Get(), paramEnumNames); 119 | break; 120 | default: 121 | break; 122 | } 123 | } 124 | } 125 | }; -------------------------------------------------------------------------------- /source/resource.h: -------------------------------------------------------------------------------- 1 | #define PLUG_MFR "Andrew Minnich" 2 | #define PLUG_NAME "Cocoa Delay" 3 | 4 | #define PLUG_CLASS_NAME CocoaDelay 5 | 6 | #define BUNDLE_MFR "Andrew Minnich" 7 | #define BUNDLE_NAME "Cocoa Delay" 8 | 9 | #define PLUG_ENTRY CocoaDelay_Entry 10 | #define PLUG_FACTORY CocoaDelay_Factory 11 | #define PLUG_VIEW_ENTRY CocoaDelay_ViewEntry 12 | 13 | #define PLUG_ENTRY_STR "CocoaDelay_Entry" 14 | #define PLUG_VIEW_ENTRY_STR "CocoaDelay_ViewEntry" 15 | 16 | #define VIEW_CLASS CocoaDelay_View 17 | #define VIEW_CLASS_STR "CocoaDelay_View" 18 | 19 | // Format 0xMAJR.MN.BG - in HEX! so version 10.1.5 would be 0x000A0105 20 | #define PLUG_VER 0x00010001 21 | #define VST3_VER_STR "1.0.1" 22 | 23 | #define PLUG_COPYRIGHT "Copyright 2018 Andrew Minnich" 24 | 25 | // http://service.steinberg.de/databases/plugin.nsf/plugIn?openForm 26 | // 4 chars, single quotes. At least one capital letter 27 | #define PLUG_UNIQUE_ID 'TesD' 28 | // make sure this is not the same as BUNDLE_MFR 29 | #define PLUG_MFR_ID 'Tesa' 30 | 31 | // ProTools stuff 32 | 33 | #if (defined(AAX_API) || defined(RTAS_API)) && !defined(_PIDS_) 34 | #define _PIDS_ 35 | const int PLUG_TYPE_IDS[2] = {'EFN1', 'EFN2'}; 36 | const int PLUG_TYPE_IDS_AS[2] = {'EFA1', 'EFA2'}; // AudioSuite 37 | #endif 38 | 39 | #define PLUG_MFR_PT "AndrewMinnich\nAndrewMinnich\nAcme" 40 | #define PLUG_NAME_PT "CocoaDelay\nIPEF" 41 | #define PLUG_TYPE_PT "Effect" 42 | #define PLUG_DOES_AUDIOSUITE 1 43 | 44 | /* PLUG_TYPE_PT can be "None", "EQ", "Dynamics", "PitchShift", "Reverb", "Delay", "Modulation", 45 | "Harmonic" "NoiseReduction" "Dither" "SoundField" "Effect" 46 | instrument determined by PLUG _IS _INST 47 | */ 48 | 49 | #define PLUG_CHANNEL_IO "2-2" 50 | 51 | #define PLUG_LATENCY 0 52 | #define PLUG_IS_INST 0 53 | 54 | // if this is 0 RTAS can't get tempo info 55 | #define PLUG_DOES_MIDI 0 56 | 57 | #define PLUG_DOES_STATE_CHUNKS 0 58 | 59 | // Unique IDs for each image resource. 60 | #define BG_ID 101 61 | #define KNOBLEFT_ID 102 62 | #define KNOBMIDDLE_ID 103 63 | #define KNOBRIGHT_ID 104 64 | #define TEMPOSYNCTIMESMENU_ID 105 65 | #define PANMODESMENU_ID 106 66 | #define FILTERMODESMENU_ID 107 67 | 68 | // Image resource locations for this plug. 69 | #define BG_FN "resources/img/bg.png" 70 | #define KNOBLEFT_FN "resources/img/knob left.png" 71 | #define KNOBMIDDLE_FN "resources/img/knob middle.png" 72 | #define KNOBRIGHT_FN "resources/img/knob right.png" 73 | #define TEMPOSYNCTIMESMENU_FN "resources/img/tempo sync times.png" 74 | #define PANMODESMENU_FN "resources/img/pan modes.png" 75 | #define FILTERMODESMENU_FN "resources/img/filter modes.png" 76 | 77 | // GUI default dimensions 78 | #define GUI_WIDTH 184*4 79 | #define GUI_HEIGHT 128*4 80 | 81 | // on MSVC, you must define SA_API in the resource editor preprocessor macros as well as the c++ ones 82 | #if defined(SA_API) 83 | #include "app_wrapper/app_resource.h" 84 | #endif 85 | 86 | // vst3 stuff 87 | #define MFR_URL "tesselode.github.io" 88 | #define MFR_EMAIL "aminnich3@gmail.com" 89 | #define EFFECT_TYPE_VST3 "Fx|Delay" 90 | 91 | /* "Fx|Analyzer"", "Fx|Delay", "Fx|Distortion", "Fx|Dynamics", "Fx|EQ", "Fx|Filter", 92 | "Fx", "Fx|Instrument", "Fx|InstrumentExternal", "Fx|Spatial", "Fx|Generator", 93 | "Fx|Mastering", "Fx|Modulation", "Fx|PitchShift", "Fx|Restoration", "Fx|Reverb", 94 | "Fx|Surround", "Fx|Tools", "Instrument", "Instrument|Drum", "Instrument|Sampler", 95 | "Instrument|Synth", "Instrument|Synth|Sampler", "Instrument|External", "Spatial", 96 | "Spatial|Fx", "OnlyRT", "OnlyOfflineProcess", "Mono", "Stereo", 97 | "Surround" 98 | */ 99 | -------------------------------------------------------------------------------- /source/CocoaDelay-app.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {6a6c24bd-7110-4436-97af-07990da17abf} 6 | 7 | 8 | {ef87c677-1479-44bc-aef8-7ba960ef233d} 9 | 10 | 11 | {b91b9db4-5584-4959-a395-7394ba3cf5a3} 12 | 13 | 14 | 15 | 16 | app\RtAudioMidi 17 | 18 | 19 | app\RtAudioMidi 20 | 21 | 22 | app\RtAudioMidi 23 | 24 | 25 | app\ASIO_SDK 26 | 27 | 28 | app\ASIO_SDK 29 | 30 | 31 | app\ASIO_SDK 32 | 33 | 34 | app\ASIO_SDK 35 | 36 | 37 | app\ASIO_SDK 38 | 39 | 40 | app\ASIO_SDK 41 | 42 | 43 | app 44 | 45 | 46 | 47 | 48 | app 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | app\RtAudioMidi 60 | 61 | 62 | app\RtAudioMidi 63 | 64 | 65 | app\ASIO_SDK 66 | 67 | 68 | app\ASIO_SDK 69 | 70 | 71 | app\ASIO_SDK 72 | 73 | 74 | app 75 | 76 | 77 | app 78 | 79 | 80 | 81 | app 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /source/CocoaDelay.xcodeproj/xcshareddata/xcschemes/APP.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /source/CocoaDelay.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CocoaDelay 8 | SA_API;__WINDOWS_DS__;__WINDOWS_MM__;__WINDOWS_ASIO__; 9 | VST_API;VST_FORCE_DEPRECATED; 10 | VST3_API 11 | _DEBUG; 12 | NDEBUG; 13 | TRACER_BUILD;NDEBUG; 14 | $(ProjectDir)\..\..\..\MyDSP\; 15 | ..\..\ASIO_SDK;..\..\WDL\rtaudiomidi; 16 | dsound.lib;winmm.lib; 17 | ..\..\VST3_SDK; 18 | .\..\..\AAX_SDK\Interfaces;.\..\..\AAX_SDK\Interfaces\ACF;.\..\..\WDL\IPlug\AAX 19 | AAX_API;_WINDOWS;WIN32;_WIN32;WINDOWS_VERSION;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE 20 | lice.lib;wininet.lib;odbc32.lib;odbccp32.lib;psapi.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comctl32.lib; 21 | .\..\..\WDL\IPlug\RTAS;.\ 22 | RTAS_API;_STDINT;_HAS_ITERATOR_DEBUGGING=0;_SECURE_SCL=0;_WINDOWS;WIN32;_WIN32;WINDOWS_VERSION;_LIB;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE 23 | comdlg32.lib;uuid.lib;msimg32.lib;odbc32.lib;odbccp32.lib;user32.lib;gdi32.lib;advapi32.lib;shell32.lib 24 | 25 | 26 | $(BINARY_NAME) 27 | <_ProjectFileVersion>10.0.30319.1 28 | 29 | 30 | 31 | $(ADDITIONAL_INCLUDES);..\..\WDL;..\..\WDL\lice;..\..\WDL\IPlug 32 | 33 | 34 | IPlug.lib;lice.lib;%(AdditionalDependencies) 35 | 36 | 37 | 38 | 39 | $(BINARY_NAME) 40 | 41 | 42 | $(APP_DEFS) 43 | 44 | 45 | $(VST_DEFS) 46 | 47 | 48 | $(VST3_DEFS) 49 | 50 | 51 | $(DEBUG_DEFS) 52 | 53 | 54 | $(RELEASE_DEFS) 55 | 56 | 57 | $(TRACER_DEFS) 58 | 59 | 60 | $(ADDITIONAL_INCLUDES) 61 | 62 | 63 | $(APP_INCLUDES) 64 | 65 | 66 | $(APP_LIBS) 67 | 68 | 69 | $(VST3_INCLUDES) 70 | 71 | 72 | $(AAX_INCLUDES) 73 | 74 | 75 | $(AAX_DEFS) 76 | 77 | 78 | $(AAX_LIBS) 79 | 80 | 81 | $(RTAS_INCLUDES) 82 | 83 | 84 | $(RTAS_DEFS) 85 | 86 | 87 | $(RTAS_LIBS) 88 | 89 | 90 | -------------------------------------------------------------------------------- /manual.md: -------------------------------------------------------------------------------- 1 | # Cocoa Delay Manual 2 | 3 | **Cocoa Delay** is an audio plugin that adds echo effects to sounds. It takes the input signal, modifies it, and then writes it to a buffer that will played back with a certain delay. This signal, as well as the input signal, will be written to the buffer again, and so on. 4 | 5 | ## Time section 6 | 7 | ![Time section screenshot](images/time.png) 8 | 9 | The time section affects the timing of echoes. 10 | 11 | - **Delay** 12 | - **Time** - adjusts the delay time from 10 milliseconds to 2 seconds. 13 | - **Tempo sync** - sets the delay time to a certain note length based on the tempo of the project. 14 | - Note: when set to anything other than "Off", this overrides the time knob. The time knob will be grayed out to reflect this. 15 | - **LFO** 16 | - **Amount** - sets the amount of oscillation to apply to the delay time. 17 | - **Frequency** - sets the speed of the oscillation from 0.1Hz to 10Hz. 18 | - **Drift** 19 | - **Amount** - sets the amount of random fluctuation of the delay time. 20 | - **Speed** - sets the speed of the fluctuation. 21 | 22 | ## Feedback section 23 | 24 | ![Feedback section screenshot](images/feedback.png) 25 | 26 | The feedback section affects the sound of the echoes. 27 | 28 | - **Amount**: sets the volume of the signal to feed back into the buffer. 29 | - When the feedback knob is set to the 12 o'clock position, there will still be one echo. 30 | - When the knob is turned to the left, the signal will be inverted each time it is written to the buffer. This results in some slight destructive interference, which can make sounds seem less "heavy" or "muddy". Set to taste. 31 | - **Stereo**: sets the difference in delay time between the left and right channels, creating a stereo widening effect. 32 | - **Pan**: sets the amount and direction the echoes should be panned. 33 | - **Pan mode**: sets the way audio should be panned. 34 | - **Static**: the position of the echoes does not move. 35 | - **Ping pong**: the echoes bounce back and forth between the left and right channel 36 | - **Circular**: the signal is panned further and further each time it is written to the buffer. Sounds will eventually loop back around to the other side. Try it, it's weird sounding! 37 | 38 | ## Ducking 39 | 40 | ![Ducking section screenshot](images/ducking.png) 41 | 42 | The ducking section allows you to to decrease the volume of the echoes when the input signal is louder, creating an effect much like sidechain compression. 43 | 44 | - **Amount**: sets the amount of ducking to perform. 45 | - **Attack**: sets how quickly the volume level responds to increases in the input signal. 46 | - **Release**: sets how quickly the volume level returns to normal when the input signal decreases. 47 | 48 | ## Filter 49 | 50 | ![Filter section screenshot](images/filter.png) 51 | 52 | The filter section allows you to remove high or low frequencies from the signal each time it is written to the buffer, making each echo sound duller or brighter. 53 | 54 | - **Mode** - sets the low-pass filter type. 55 | - **1P** - a 6dB one-pole filter with a gentle, smooth sound. 56 | - **2P** - a 12dB two-pole filter with a steeper cutoff. 57 | - **4P** - a 24dB four-pole filter with a clear cutoff. 58 | - **SVF** - a state variable filter with a more resonant sound. 59 | - **Low cut** - sets the frequency above which sounds will be removed. 60 | - **High cut** - sets the frequency below which sounds will be removed. 61 | 62 | ## Drive 63 | 64 | ![Drive section screenshot](images/drive.png) 65 | 66 | The drive section adds a subtle (or un-subtle) saturation effect to the signal before it is written to the buffer. 67 | 68 | - **Gain**: sets the amount to boost the audio before applying saturation. Turn this knob all the way to the left to bypass the drive section completely. 69 | - **Mix**: sets the amount of saturated audio to mix with the unsaturated audio. 70 | - **Filter**: sets the cutoff of a low-pass filter to apply to the audio after saturation. The filter is a 12dB two-pole filter. 71 | - **Iterations**: sets the number of times to run the signal through the drive section, from 1 to 16. Higher values can give a thicker, lusher distortion at the cost of increased CPU usage. 72 | -------------------------------------------------------------------------------- /source/CocoaDelay.rc: -------------------------------------------------------------------------------- 1 | #include "resource.h" 2 | 3 | BG_ID PNG BG_FN 4 | KNOBLEFT_ID PNG KNOBLEFT_FN 5 | KNOBMIDDLE_ID PNG KNOBMIDDLE_FN 6 | KNOBRIGHT_ID PNG KNOBRIGHT_FN 7 | TEMPOSYNCTIMESMENU_ID PNG TEMPOSYNCTIMESMENU_FN 8 | PANMODESMENU_ID PNG PANMODESMENU_FN 9 | FILTERMODESMENU_ID PNG FILTERMODESMENU_FN 10 | 11 | #ifdef SA_API 12 | //Standalone stuff 13 | #include 14 | 15 | IDI_ICON1 ICON DISCARDABLE "resources\CocoaDelay.ico" 16 | 17 | IDD_DIALOG_MAIN DIALOG DISCARDABLE 0, 0, GUI_WIDTH, GUI_HEIGHT 18 | STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX 19 | CAPTION "CocoaDelay" 20 | MENU IDR_MENU1 21 | FONT 8, "MS Sans Serif" 22 | BEGIN 23 | // EDITTEXT IDC_EDIT1,59,50,145,14,ES_AUTOHSCROLL 24 | // LTEXT "Enter some text here:",IDC_STATIC,59,39,73,8 25 | END 26 | 27 | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 28 | IDD_DIALOG_PREF DIALOG DISCARDABLE 0, 0, 223, 309 29 | STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU 30 | CAPTION "Preferences" 31 | FONT 8, "MS Sans Serif" 32 | { 33 | DEFPUSHBUTTON "OK", IDOK, 110, 285, 50, 14 34 | PUSHBUTTON "Apply", IDAPPLY, 54, 285, 50, 14 35 | PUSHBUTTON "Cancel", IDCANCEL, 166, 285, 50, 14 36 | COMBOBOX IDC_COMBO_AUDIO_DRIVER, 20, 35, 100, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 37 | LTEXT "Driver Type", IDC_STATIC, 22, 25, 38, 8, SS_LEFT 38 | COMBOBOX IDC_COMBO_AUDIO_IN_DEV, 20, 65, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 39 | LTEXT "Input Device", IDC_STATIC, 20, 55, 42, 8, SS_LEFT 40 | COMBOBOX IDC_COMBO_AUDIO_OUT_DEV, 20, 95, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 41 | LTEXT "Output Device", IDC_STATIC, 20, 85, 47, 8, SS_LEFT 42 | COMBOBOX IDC_COMBO_AUDIO_IOVS, 135, 35, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 43 | LTEXT "IO Vector Size", IDC_STATIC, 137, 25, 46, 8, SS_LEFT 44 | COMBOBOX IDC_COMBO_AUDIO_SIGVS, 135, 65, 65, 100, CBS_DROPDOWNLIST | CBS_HASSTRINGS 45 | LTEXT "Signal Vector Size", IDC_STATIC, 135, 55, 58, 8, SS_LEFT 46 | COMBOBOX IDC_COMBO_AUDIO_SR, 135, 95, 65, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 47 | LTEXT "Sampling Rate", IDC_STATIC, 135, 85, 47, 8, SS_LEFT 48 | GROUPBOX "Audio Device Settings", IDC_STATIC, 5, 10, 210, 170 49 | PUSHBUTTON "ASIO Config...", IDC_BUTTON_ASIO, 135, 155, 65, 14 50 | COMBOBOX IDC_COMBO_AUDIO_IN_L, 20, 125, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 51 | LTEXT "Input 1 (L)", IDC_STATIC, 20, 115, 33, 8, SS_LEFT 52 | COMBOBOX IDC_COMBO_AUDIO_IN_R, 65, 126, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 53 | LTEXT "Input 2 (R)", IDC_STATIC, 65, 115, 34, 8, SS_LEFT 54 | COMBOBOX IDC_COMBO_AUDIO_OUT_L, 20, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 55 | LTEXT "Output 1 (L)", IDC_STATIC, 20, 145, 38, 8, SS_LEFT 56 | COMBOBOX IDC_COMBO_AUDIO_OUT_R, 65, 155, 40, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 57 | LTEXT "Output 2 (R)", IDC_STATIC, 65, 145, 40, 8, SS_LEFT 58 | GROUPBOX "MIDI Device Settings", IDC_STATIC, 5, 190, 210, 85 59 | COMBOBOX IDC_COMBO_MIDI_OUT_DEV, 15, 250, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 60 | LTEXT "Output Device", IDC_STATIC, 15, 240, 47, 8, SS_LEFT 61 | COMBOBOX IDC_COMBO_MIDI_IN_DEV, 15, 220, 100, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 62 | LTEXT "Input Device", IDC_STATIC, 15, 210, 42, 8, SS_LEFT 63 | LTEXT "Input Channel", IDC_STATIC, 125, 210, 45, 8, SS_LEFT 64 | COMBOBOX IDC_COMBO_MIDI_IN_CHAN, 125, 220, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 65 | LTEXT "Output Channel", IDC_STATIC, 125, 240, 50, 8, SS_LEFT 66 | COMBOBOX IDC_COMBO_MIDI_OUT_CHAN, 125, 250, 50, 200, CBS_DROPDOWNLIST | CBS_HASSTRINGS 67 | AUTOCHECKBOX "Mono Input", IDC_CB_MONO_INPUT, 135, 127, 56, 8 68 | } 69 | 70 | IDR_MENU1 MENU DISCARDABLE 71 | BEGIN 72 | POPUP "&File" 73 | BEGIN 74 | // MENUITEM SEPARATOR 75 | MENUITEM "Preferences...", ID_PREFERENCES 76 | MENUITEM "&Quit", ID_QUIT 77 | END 78 | POPUP "&Help" 79 | BEGIN 80 | MENUITEM "&About", ID_ABOUT 81 | END 82 | END 83 | 84 | #endif // SA_API 85 | -------------------------------------------------------------------------------- /source/app_wrapper/app_main.h: -------------------------------------------------------------------------------- 1 | #ifndef _IPLUGAPP_APP_MAIN_H_ 2 | #define _IPLUGAPP_APP_MAIN_H_ 3 | 4 | #include "IPlugOSDetect.h" 5 | 6 | /* 7 | 8 | Standalone osx/win app wrapper for iPlug, using SWELL 9 | Oli Larkin 2012 10 | 11 | Notes: 12 | 13 | App settings are stored in a .ini file. The location is as follows: 14 | 15 | Windows7: C:\Users\USERNAME\AppData\Local\CocoaDelay\settings.ini 16 | Windows XP/Vista: C:\Documents and Settings\USERNAME\Local Settings\Application Data\CocoaDelay\settings.ini 17 | OSX: /Users/USERNAME/Library/Application\ Support/CocoaDelay/settings.ini 18 | 19 | */ 20 | 21 | #ifdef OS_WIN 22 | #include 23 | #include 24 | 25 | #define DEFAULT_INPUT_DEV "Default Device" 26 | #define DEFAULT_OUTPUT_DEV "Default Device" 27 | 28 | #define DAC_DS 0 29 | #define DAC_ASIO 1 30 | #elif defined OS_OSX 31 | #include "swell.h" 32 | #define SLEEP( milliseconds ) usleep( (unsigned long) (milliseconds * 1000.0) ) 33 | 34 | #define DEFAULT_INPUT_DEV "Built-in Input" 35 | #define DEFAULT_OUTPUT_DEV "Built-in Output" 36 | 37 | #define DAC_COREAUDIO 0 38 | // #define DAC_JACK 1 39 | #endif 40 | 41 | #include "wdltypes.h" 42 | #include "RtAudio.h" 43 | #include "RtMidi.h" 44 | #include 45 | #include 46 | 47 | #include "../CocoaDelay.h" // change this to match your iplug plugin .h file 48 | 49 | typedef unsigned short UInt16; 50 | 51 | struct AppState 52 | { 53 | // on osx core audio 0 or jack 1 54 | // on windows DS 0 or ASIO 1 55 | UInt16 mAudioDriverType; 56 | 57 | // strings 58 | char mAudioInDev[100]; 59 | char mAudioOutDev[100]; 60 | char mAudioSR[100]; 61 | char mAudioIOVS[100]; 62 | char mAudioSigVS[100]; 63 | 64 | UInt16 mAudioInChanL; 65 | UInt16 mAudioInChanR; 66 | UInt16 mAudioOutChanL; 67 | UInt16 mAudioOutChanR; 68 | UInt16 mAudioInIsMono; 69 | 70 | // strings containing the names of the midi devices 71 | char mMidiInDev[100]; 72 | char mMidiOutDev[100]; 73 | 74 | UInt16 mMidiInChan; 75 | UInt16 mMidiOutChan; 76 | 77 | AppState(): 78 | mAudioDriverType(0), // DS / CoreAudio by default 79 | mAudioInChanL(1), 80 | mAudioInChanR(2), 81 | mAudioOutChanL(1), 82 | mAudioOutChanR(2), 83 | mMidiInChan(0), 84 | mMidiOutChan(0) 85 | { 86 | strcpy(mAudioInDev, DEFAULT_INPUT_DEV); 87 | strcpy(mAudioOutDev, DEFAULT_OUTPUT_DEV); 88 | strcpy(mAudioSR, "44100"); 89 | strcpy(mAudioIOVS, "512"); 90 | strcpy(mAudioSigVS, "32"); 91 | 92 | strcpy(mMidiInDev, "off"); 93 | strcpy(mMidiOutDev, "off"); 94 | } 95 | }; 96 | 97 | extern WDL_DLGRET MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 98 | extern WDL_DLGRET PreferencesDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 99 | extern HINSTANCE gHINST; 100 | extern HWND gHWND; 101 | extern UINT gScrollMessage; 102 | extern IPlug* gPluginInstance; // The iplug plugin instance 103 | 104 | extern std::string GetAudioDeviceName(int idx); 105 | extern int GetAudioDeviceID(char* deviceNameToTest); 106 | 107 | extern void ProbeAudioIO(); 108 | extern bool InitialiseAudio(unsigned int inId, 109 | unsigned int outId, 110 | unsigned int sr, 111 | unsigned int iovs, 112 | unsigned int chnls, 113 | unsigned int inChanL, 114 | unsigned int outChanL 115 | ); 116 | 117 | extern bool AudioSettingsInStateAreEqual(AppState* os, AppState* ns); 118 | extern bool MIDISettingsInStateAreEqual(AppState* os, AppState* ns); 119 | 120 | extern bool TryToChangeAudioDriverType(); 121 | extern bool TryToChangeAudio(); 122 | extern bool ChooseMidiInput(const char* pPortName); 123 | extern bool ChooseMidiOutput(const char* pPortName); 124 | 125 | extern bool AttachGUI(); 126 | 127 | extern RtAudio* gDAC; 128 | extern RtMidiIn *gMidiIn; 129 | extern RtMidiOut *gMidiOut; 130 | 131 | extern AppState *gState; 132 | extern AppState *gTempState; // The state is copied here when the pref dialog is opened, and restored if cancel is pressed 133 | extern AppState *gActiveState; // When the audio driver is started the current state is copied here so that if OK is pressed after APPLY nothing is changed 134 | 135 | extern unsigned int gSigVS; 136 | extern unsigned int gBufIndex; // index for signal vector, loops from 0 to gSigVS 137 | 138 | extern char *gINIPath; // path of ini file 139 | extern void UpdateINI(); 140 | 141 | extern std::vector gAudioInputDevs; 142 | extern std::vector gAudioOutputDevs; 143 | extern std::vector gMIDIInputDevNames; 144 | extern std::vector gMIDIOutputDevNames; 145 | 146 | #endif //_IPLUGAPP_APP_MAIN_H_ 147 | 148 | -------------------------------------------------------------------------------- /source/update_version.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # this script will update the versions in plist and installer files to match that in resource.h 4 | 5 | import plistlib, os, datetime, fileinput, glob, sys, string 6 | scriptpath = os.path.dirname(os.path.realpath(__file__)) 7 | 8 | def replacestrs(filename, s, r): 9 | files = glob.glob(filename) 10 | 11 | for line in fileinput.input(files,inplace=1): 12 | string.find(line, s) 13 | line = line.replace(s, r) 14 | sys.stdout.write(line) 15 | 16 | def main(): 17 | 18 | MajorStr = "" 19 | MinorStr = "" 20 | BugfixStr = "" 21 | 22 | for line in fileinput.input(scriptpath + "/resource.h",inplace=0): 23 | if "#define PLUG_VER " in line: 24 | FullVersion = int(string.lstrip(line, "#define PLUG_VER "), 16) 25 | major = FullVersion & 0xFFFF0000 26 | MajorStr = str(major >> 16) 27 | minor = FullVersion & 0x0000FF00 28 | MinorStr = str(minor >> 8) 29 | BugfixStr = str(FullVersion & 0x000000FF) 30 | 31 | 32 | FullVersionStr = MajorStr + "." + MinorStr + "." + BugfixStr 33 | 34 | today = datetime.date.today() 35 | CFBundleGetInfoString = FullVersionStr + ", Copyright AndrewMinnich, " + str(today.year) 36 | CFBundleVersion = FullVersionStr 37 | 38 | print "update_version.py - setting version to " + FullVersionStr 39 | print "Updating plist version info..." 40 | 41 | plistpath = scriptpath + "/resources/CocoaDelay-VST2-Info.plist" 42 | vst2 = plistlib.readPlist(plistpath) 43 | vst2['CFBundleGetInfoString'] = CFBundleGetInfoString 44 | vst2['CFBundleVersion'] = CFBundleVersion 45 | vst2['CFBundleShortVersionString'] = CFBundleVersion 46 | plistlib.writePlist(vst2, plistpath) 47 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 48 | 49 | plistpath = scriptpath + "/resources/CocoaDelay-AU-Info.plist" 50 | au = plistlib.readPlist(plistpath) 51 | au['CFBundleGetInfoString'] = CFBundleGetInfoString 52 | au['CFBundleVersion'] = CFBundleVersion 53 | au['CFBundleShortVersionString'] = CFBundleVersion 54 | plistlib.writePlist(au, plistpath) 55 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 56 | 57 | plistpath = scriptpath + "/resources/CocoaDelay-VST3-Info.plist" 58 | vst3 = plistlib.readPlist(plistpath) 59 | vst3['CFBundleGetInfoString'] = CFBundleGetInfoString 60 | vst3['CFBundleVersion'] = CFBundleVersion 61 | vst3['CFBundleShortVersionString'] = CFBundleVersion 62 | plistlib.writePlist(vst3, plistpath) 63 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 64 | 65 | plistpath = scriptpath + "/resources/CocoaDelay-OSXAPP-Info.plist" 66 | app = plistlib.readPlist(plistpath) 67 | app['CFBundleGetInfoString'] = CFBundleGetInfoString 68 | app['CFBundleVersion'] = CFBundleVersion 69 | app['CFBundleShortVersionString'] = CFBundleVersion 70 | plistlib.writePlist(app, plistpath) 71 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 72 | 73 | plistpath = scriptpath + "/resources/CocoaDelay-RTAS-Info.plist" 74 | rtas = plistlib.readPlist(plistpath) 75 | rtas['CFBundleGetInfoString'] = CFBundleGetInfoString 76 | rtas['CFBundleVersion'] = CFBundleVersion 77 | rtas['CFBundleShortVersionString'] = CFBundleVersion 78 | plistlib.writePlist(rtas, plistpath) 79 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 80 | 81 | plistpath = scriptpath + "/resources/CocoaDelay-AAX-Info.plist" 82 | aax = plistlib.readPlist(plistpath) 83 | aax['CFBundleGetInfoString'] = CFBundleGetInfoString 84 | aax['CFBundleVersion'] = CFBundleVersion 85 | aax['CFBundleShortVersionString'] = CFBundleVersion 86 | plistlib.writePlist(aax, plistpath) 87 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 88 | 89 | # plistpath = scriptpath + "/resources/CocoaDelay-IOSAPP-Info.plist" 90 | # iosapp = plistlib.readPlist(plistpath) 91 | # iosapp['CFBundleGetInfoString'] = CFBundleGetInfoString 92 | # iosapp['CFBundleVersion'] = CFBundleVersion 93 | # iosapp['CFBundleShortVersionString'] = CFBundleVersion 94 | # plistlib.writePlist(iosapp, plistpath) 95 | # replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 96 | 97 | print "Updating Mac Installer version info..." 98 | 99 | plistpath = scriptpath + "/installer/CocoaDelay.pkgproj" 100 | installer = plistlib.readPlist(plistpath) 101 | 102 | for x in range(0,6): 103 | installer['PACKAGES'][x]['PACKAGE_SETTINGS']['VERSION'] = FullVersionStr 104 | 105 | plistlib.writePlist(installer, plistpath) 106 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 107 | 108 | print "Updating Windows Installer version info..." 109 | 110 | for line in fileinput.input(scriptpath + "/installer/CocoaDelay.iss",inplace=1): 111 | if "AppVersion" in line: 112 | line="AppVersion=" + FullVersionStr + "\n" 113 | sys.stdout.write(line) 114 | 115 | if __name__ == '__main__': 116 | main() -------------------------------------------------------------------------------- /source/resources/CocoaDelay-Pages.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CocoaDelay by AndrewMinnich. 6 | PageTable 1 7 | 8 | 9 | 10 | 11 | 1 12 | 13 | 14 | 15 | 16 | 17 | MasterBypass 18 | 19 | 20 | 21 | 22 | 1 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | MasterBypass 31 | 32 | 33 | 34 | 35 | MasterBypass 36 | 1 37 | 38 | 1 39 | 1 40 | 1 41 | 1 42 | 1 43 | 1 44 | 1 45 | 1 46 | 1 47 | 1 48 | 1 49 | 1 50 | 1 51 | 52 | 53 | 54 | 55 | 1 56 | MasterBypass 57 | 58 | 1 59 | 1 60 | 1 61 | 1 62 | 1 63 | 1 64 | 1 65 | 1 66 | 1 67 | 1 68 | 1 69 | 1 70 | 1 71 | 72 | 73 | 74 | 75 | 1 76 | MasterBypass 77 | 78 | 1 79 | 1 80 | 1 81 | 1 82 | 1 83 | 1 84 | 1 85 | 1 86 | 1 87 | 1 88 | 1 89 | 1 90 | 1 91 | 92 | 93 | 94 | MasterBypass 95 | 1 96 | 97 | 1 98 | 1 99 | 1 100 | 1 101 | 1 102 | 1 103 | 1 104 | 1 105 | 1 106 | 1 107 | 1 108 | 1 109 | 1 110 | 111 | 112 | 113 | MasterBypass 114 | 115 | 116 | 1 117 | 118 | 119 | 120 | 121 | 122 | 123 | Ma 124 | Byp 125 | MByp 126 | Mstr Byp 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | RTAS: CocoaDelay 136 | 137 | 138 | 139 | 140 | MasterBypass 141 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /source/CocoaDelay-aax.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {ed0eb9dd-b586-4a3f-98af-ebd9c084fff2} 6 | 7 | 8 | {a484aa50-ad02-4746-957e-117c8bb5c192} 9 | 10 | 11 | {57d1624e-a679-47da-bd3e-9609f02fdd7b} 12 | 13 | 14 | 15 | 16 | IPlug 17 | 18 | 19 | IPlug 20 | 21 | 22 | IPlug 23 | 24 | 25 | IPlug 26 | 27 | 28 | IPlug 29 | 30 | 31 | IPlug 32 | 33 | 34 | IPlug 35 | 36 | 37 | IPlug 38 | 39 | 40 | IPlug 41 | 42 | 43 | IPlug 44 | 45 | 46 | IPlug\AAX 47 | 48 | 49 | IPlug\AAX 50 | 51 | 52 | IPlug\AAX 53 | 54 | 55 | 56 | Libs 57 | 58 | 59 | 60 | 61 | IPlug 62 | 63 | 64 | IPlug 65 | 66 | 67 | IPlug 68 | 69 | 70 | IPlug 71 | 72 | 73 | IPlug 74 | 75 | 76 | IPlug 77 | 78 | 79 | IPlug 80 | 81 | 82 | IPlug 83 | 84 | 85 | IPlug 86 | 87 | 88 | IPlug 89 | 90 | 91 | IPlug 92 | 93 | 94 | IPlug 95 | 96 | 97 | IPlug 98 | 99 | 100 | IPlug 101 | 102 | 103 | IPlug 104 | 105 | 106 | IPlug 107 | 108 | 109 | IPlug\AAX 110 | 111 | 112 | IPlug\AAX 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | Libs 123 | 124 | 125 | Libs 126 | 127 | 128 | Libs 129 | 130 | 131 | Libs 132 | 133 | 134 | -------------------------------------------------------------------------------- /source/Presets.cpp: -------------------------------------------------------------------------------- 1 | #include "CocoaDelay.h" 2 | 3 | void CocoaDelay::InitPresets() 4 | { 5 | MakeDefaultPreset("Init", 1); 6 | 7 | MakePresetFromNamedParams("Blue Skies", 20, 8 | (int)Parameters::delayTime, 0.200000, 9 | (int)Parameters::lfoAmount, 0.000000, 10 | (int)Parameters::lfoFrequency, 1.175000, 11 | (int)Parameters::driftAmount, 0.001000, 12 | (int)Parameters::tempoSyncTime, 0, 13 | (int)Parameters::feedback, -0.713542, 14 | (int)Parameters::stereoOffset, 0.054688, 15 | (int)Parameters::panMode, 2, 16 | (int)Parameters::pan, 0.965385, 17 | (int)Parameters::duckAmount, 0.000000, 18 | (int)Parameters::duckAttackSpeed, 9.999999, 19 | (int)Parameters::duckReleaseSpeed, 9.999999, 20 | (int)Parameters::filterMode, 1, 21 | (int)Parameters::lowPassCutoff, 0.528281, 22 | (int)Parameters::highPassCutoff, 0.019840, 23 | (int)Parameters::driveGain, 1.310289, 24 | (int)Parameters::driveMix, 1.000000, 25 | (int)Parameters::driveCutoff, 0.786016, 26 | (int)Parameters::dryVolume, 1.000000, 27 | (int)Parameters::wetVolume, 0.453125); 28 | 29 | MakePresetFromNamedParams("Hard Sell", 20, 30 | (int)Parameters::delayTime, 0.200000, 31 | (int)Parameters::lfoAmount, 0.002852, 32 | (int)Parameters::lfoFrequency, 0.100000, 33 | (int)Parameters::driftAmount, 0.004201, 34 | (int)Parameters::tempoSyncTime, 13, 35 | (int)Parameters::feedback, 0.567708, 36 | (int)Parameters::stereoOffset, 0.000000, 37 | (int)Parameters::panMode, 1, 38 | (int)Parameters::pan, -0.466330, 39 | (int)Parameters::duckAmount, 0.000000, 40 | (int)Parameters::duckAttackSpeed, 9.999999, 41 | (int)Parameters::duckReleaseSpeed, 9.999999, 42 | (int)Parameters::filterMode, 2, 43 | (int)Parameters::lowPassCutoff, 0.742266, 44 | (int)Parameters::highPassCutoff, 0.001000, 45 | (int)Parameters::driveGain, 2.685615, 46 | (int)Parameters::driveMix, 1.000000, 47 | (int)Parameters::driveCutoff, 0.827266, 48 | (int)Parameters::dryVolume, 1.000000, 49 | (int)Parameters::wetVolume, 0.322917); 50 | 51 | MakePresetFromNamedParams("Claustrophobic", 20, 52 | (int)Parameters::delayTime, 0.063977, 53 | (int)Parameters::lfoAmount, 0.000000, 54 | (int)Parameters::lfoFrequency, 2.000000, 55 | (int)Parameters::driftAmount, 0.005758, 56 | (int)Parameters::tempoSyncTime, 0, 57 | (int)Parameters::feedback, 0.833333, 58 | (int)Parameters::stereoOffset, 0.000000, 59 | (int)Parameters::panMode, 2, 60 | (int)Parameters::pan, 0.957204, 61 | (int)Parameters::duckAmount, 1.640625, 62 | (int)Parameters::duckAttackSpeed, 100.000000, 63 | (int)Parameters::duckReleaseSpeed, 2.003070, 64 | (int)Parameters::filterMode, 3, 65 | (int)Parameters::lowPassCutoff, 0.479297, 66 | (int)Parameters::highPassCutoff, 0.001000, 67 | (int)Parameters::driveGain, 3.681708, 68 | (int)Parameters::driveMix, 0.500000, 69 | (int)Parameters::driveCutoff, 0.796328, 70 | (int)Parameters::dryVolume, 1.000000, 71 | (int)Parameters::wetVolume, 0.687500); 72 | 73 | MakePresetFromNamedParams("Syncopated Drummer", 20, 74 | (int)Parameters::delayTime, 0.200000, 75 | (int)Parameters::lfoAmount, 0.000000, 76 | (int)Parameters::lfoFrequency, 2.000000, 77 | (int)Parameters::driftAmount, 0.000000, 78 | (int)Parameters::tempoSyncTime, 5, 79 | (int)Parameters::feedback, -0.687500, 80 | (int)Parameters::stereoOffset, 0.000000, 81 | (int)Parameters::panMode, 2, 82 | (int)Parameters::pan, 1.570796, 83 | (int)Parameters::duckAmount, 0.000000, 84 | (int)Parameters::duckAttackSpeed, 9.999999, 85 | (int)Parameters::duckReleaseSpeed, 9.999999, 86 | (int)Parameters::filterMode, 0, 87 | (int)Parameters::lowPassCutoff, 1.000000, 88 | (int)Parameters::highPassCutoff, 0.001000, 89 | (int)Parameters::driveGain, 0.000000, 90 | (int)Parameters::driveMix, 1.000000, 91 | (int)Parameters::driveCutoff, 1.000000, 92 | (int)Parameters::dryVolume, 1.000000, 93 | (int)Parameters::wetVolume, 0.500000); 94 | 95 | MakePresetFromNamedParams("Gentle Comb", 20, 96 | (int)Parameters::delayTime, 0.001000, 97 | (int)Parameters::lfoAmount, 0.012207, 98 | (int)Parameters::lfoFrequency, 0.100000, 99 | (int)Parameters::driftAmount, 0.001773, 100 | (int)Parameters::tempoSyncTime, 0, 101 | (int)Parameters::feedback, 0.723958, 102 | (int)Parameters::stereoOffset, 0.000000, 103 | (int)Parameters::panMode, 0, 104 | (int)Parameters::pan, 0.000000, 105 | (int)Parameters::duckAmount, 0.000000, 106 | (int)Parameters::duckAttackSpeed, 9.999999, 107 | (int)Parameters::duckReleaseSpeed, 9.999999, 108 | (int)Parameters::filterMode, 2, 109 | (int)Parameters::lowPassCutoff, 0.494766, 110 | (int)Parameters::highPassCutoff, 0.001000, 111 | (int)Parameters::driveGain, 0.100000, 112 | (int)Parameters::driveMix, 1.000000, 113 | (int)Parameters::driveCutoff, 1.000000, 114 | (int)Parameters::dryVolume, 1.000000, 115 | (int)Parameters::wetVolume, 0.380208); 116 | 117 | MakePresetFromNamedParams("What", 20, 118 | (int)Parameters::delayTime, 0.002640, 119 | (int)Parameters::lfoAmount, 0.020104, 120 | (int)Parameters::lfoFrequency, 9.355469, 121 | (int)Parameters::driftAmount, 0.005324, 122 | (int)Parameters::tempoSyncTime, 0, 123 | (int)Parameters::feedback, 0.901042, 124 | (int)Parameters::stereoOffset, 0.078125, 125 | (int)Parameters::panMode, 2, 126 | (int)Parameters::pan, 1.153554, 127 | (int)Parameters::duckAmount, 0.000000, 128 | (int)Parameters::duckAttackSpeed, 9.999999, 129 | (int)Parameters::duckReleaseSpeed, 9.999999, 130 | (int)Parameters::filterMode, 0, 131 | (int)Parameters::lowPassCutoff, 0.907266, 132 | (int)Parameters::highPassCutoff, 0.001000, 133 | (int)Parameters::driveGain, 0.000000, 134 | (int)Parameters::driveMix, 1.000000, 135 | (int)Parameters::driveCutoff, 1.000000, 136 | (int)Parameters::dryVolume, 1.000000, 137 | (int)Parameters::wetVolume, 0.500000); 138 | 139 | MakeDefaultPreset("-", numPrograms); 140 | } -------------------------------------------------------------------------------- /source/installer/CocoaDelay.iss: -------------------------------------------------------------------------------- 1 | [Setup] 2 | AppName=CocoaDelay 3 | AppVersion=1.0.0 4 | DefaultDirName={pf}\CocoaDelay 5 | DefaultGroupName=CocoaDelay 6 | Compression=lzma2 7 | SolidCompression=yes 8 | OutputDir=.\ 9 | ArchitecturesInstallIn64BitMode=x64 10 | OutputBaseFilename=CocoaDelay Installer 11 | LicenseFile=license.rtf 12 | SetupLogging=yes 13 | 14 | [Types] 15 | Name: "full"; Description: "Full installation" 16 | Name: "custom"; Description: "Custom installation"; Flags: iscustom 17 | 18 | [Components] 19 | Name: "app"; Description: "Standalone application (.exe)"; Types: full custom; 20 | Name: "vst2_32"; Description: "32-bit VST2 Plugin (.dll)"; Types: full custom; 21 | Name: "vst2_64"; Description: "64-bit VST2 Plugin (.dll)"; Types: full custom; Check: Is64BitInstallMode; 22 | Name: "vst3_32"; Description: "32-bit VST3 Plugin (.vst3)"; Types: full custom; 23 | Name: "vst3_64"; Description: "64-bit VST3 Plugin (.vst3)"; Types: full custom; Check: Is64BitInstallMode; 24 | Name: "rtas_32"; Description: "32-bit RTAS Plugin (.dpm)"; Types: full custom; 25 | Name: "aax_32"; Description: "32-bit AAX Plugin (.aaxplugin)"; Types: full custom; 26 | Name: "aax_64"; Description: "64-bit AAX Plugin (.aaxplugin)"; Types: full custom; Check: Is64BitInstallMode; 27 | Name: "manual"; Description: "User guide"; Types: full custom; Flags: fixed 28 | 29 | [Files] 30 | Source: "..\build-win\app\Win32\bin\CocoaDelay.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode; Components:app; Flags: ignoreversion; 31 | Source: "..\build-win\app\x64\bin\CocoaDelay.exe"; DestDir: "{app}"; Check: Is64BitInstallMode; Components:app; Flags: ignoreversion; 32 | 33 | Source: "..\build-win\vst2\Win32\bin\CocoaDelay.dll"; DestDir: {code:GetVST2Dir_32}; Check: not Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion; 34 | Source: "..\build-win\vst2\Win32\bin\CocoaDelay.dll"; DestDir: {code:GetVST2Dir_32}; Check: Is64BitInstallMode; Components:vst2_32; Flags: ignoreversion; 35 | Source: "..\build-win\vst2\x64\bin\CocoaDelay.dll"; DestDir: {code:GetVST2Dir_64}; Check: Is64BitInstallMode; Components:vst2_64; Flags: ignoreversion; 36 | 37 | Source: "..\build-win\vst3\Win32\bin\CocoaDelay.vst3"; DestDir: "{cf}\VST3\"; Check: not Is64BitInstallMode; Components:vst3_32; Flags: ignoreversion; 38 | Source: "..\build-win\vst3\Win32\bin\CocoaDelay.vst3"; DestDir: "{cf32}\VST3\"; Check: Is64BitInstallMode; Components:vst3_32; Flags: ignoreversion; 39 | Source: "..\build-win\vst3\x64\bin\CocoaDelay.vst3"; DestDir: "{cf64}\VST3\"; Check: Is64BitInstallMode; Components:vst3_64; Flags: ignoreversion; 40 | 41 | Source: "..\build-win\rtas\bin\CocoaDelay.dpm"; DestDir: "{cf32}\Digidesign\DAE\Plug-Ins\"; Components:rtas_32; Flags: ignoreversion; 42 | Source: "..\build-win\rtas\bin\CocoaDelay.dpm.rsr"; DestDir: "{cf32}\Digidesign\DAE\Plug-Ins\"; Components:rtas_32; Flags: ignoreversion; 43 | 44 | Source: "..\build-win\aax\bin\CocoaDelay.aaxplugin\*.*"; DestDir: "{cf32}\Avid\Audio\Plug-Ins\CocoaDelay.aaxplugin\"; Components:aax_32; Flags: ignoreversion recursesubdirs; 45 | Source: "..\build-win\aax\bin\CocoaDelay.aaxplugin\*.*"; DestDir: "{cf}\Avid\Audio\Plug-Ins\CocoaDelay.aaxplugin\"; Components:aax_64; Flags: ignoreversion recursesubdirs; 46 | 47 | Source: "..\manual\CocoaDelay_manual.pdf"; DestDir: "{app}" 48 | Source: "changelog.txt"; DestDir: "{app}" 49 | Source: "readmewin.rtf"; DestDir: "{app}"; DestName: "readme.rtf"; Flags: isreadme 50 | 51 | [Icons] 52 | Name: "{group}\CocoaDelay"; Filename: "{app}\CocoaDelay.exe" 53 | Name: "{group}\User guide"; Filename: "{app}\CocoaDelay_manual.pdf" 54 | Name: "{group}\Changelog"; Filename: "{app}\changelog.txt" 55 | ;Name: "{group}\readme"; Filename: "{app}\readme.rtf" 56 | Name: "{group}\Uninstall CocoaDelay"; Filename: "{app}\unins000.exe" 57 | 58 | ;[Dirs] 59 | ;Name: {cf}\Digidesign\DAE\Plugins\ 60 | 61 | [Code] 62 | var 63 | OkToCopyLog : Boolean; 64 | VST2DirPage_32: TInputDirWizardPage; 65 | VST2DirPage_64: TInputDirWizardPage; 66 | 67 | procedure InitializeWizard; 68 | begin 69 | if IsWin64 then begin 70 | VST2DirPage_64 := CreateInputDirPage(wpSelectDir, 71 | 'Confirm 64-Bit VST2 Plugin Directory', '', 72 | 'Select the folder in which setup should install the 64-bit VST2 Plugin, then click Next.', 73 | False, ''); 74 | VST2DirPage_64.Add(''); 75 | VST2DirPage_64.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\'); 76 | 77 | VST2DirPage_32 := CreateInputDirPage(wpSelectDir, 78 | 'Confirm 32-Bit VST2 Plugin Directory', '', 79 | 'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.', 80 | False, ''); 81 | VST2DirPage_32.Add(''); 82 | VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\WOW6432NODE\VST,VSTPluginsPath|{pf32}\Steinberg\VSTPlugins}\'); 83 | end else begin 84 | VST2DirPage_32 := CreateInputDirPage(wpSelectDir, 85 | 'Confirm 32-Bit VST2 Plugin Directory', '', 86 | 'Select the folder in which setup should install the 32-bit VST2 Plugin, then click Next.', 87 | False, ''); 88 | VST2DirPage_32.Add(''); 89 | VST2DirPage_32.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\VST,VSTPluginsPath|{pf}\Steinberg\VSTPlugins}\'); 90 | end; 91 | end; 92 | 93 | function GetVST2Dir_32(Param: String): String; 94 | begin 95 | Result := VST2DirPage_32.Values[0] 96 | end; 97 | 98 | function GetVST2Dir_64(Param: String): String; 99 | begin 100 | Result := VST2DirPage_64.Values[0] 101 | end; 102 | 103 | procedure CurStepChanged(CurStep: TSetupStep); 104 | begin 105 | if CurStep = ssDone then 106 | OkToCopyLog := True; 107 | end; 108 | 109 | procedure DeinitializeSetup(); 110 | begin 111 | if OkToCopyLog then 112 | FileCopy (ExpandConstant ('{log}'), ExpandConstant ('{app}\InstallationLogFile.log'), FALSE); 113 | RestartReplace (ExpandConstant ('{log}'), ''); 114 | end; 115 | 116 | [UninstallDelete] 117 | Type: files; Name: "{app}\InstallationLogFile.log" -------------------------------------------------------------------------------- /source/CocoaDelay-rtas.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {73d47a52-ce2f-4264-9bb9-f0b3c16f889d} 6 | 7 | 8 | {f61218de-bb49-4fd2-b3b8-d4d3a4f905de} 9 | 10 | 11 | {f55aca3b-4b35-490a-99d6-51d6724f0396} 12 | 13 | 14 | {13073ee3-c4e8-497c-b935-b091b14197c2} 15 | 16 | 17 | 18 | 19 | Libs 20 | 21 | 22 | Libs 23 | 24 | 25 | Libs 26 | 27 | 28 | Libs 29 | 30 | 31 | Libs 32 | 33 | 34 | Libs 35 | 36 | 37 | Libs 38 | 39 | 40 | 41 | 42 | IPlug 43 | 44 | 45 | IPlug 46 | 47 | 48 | IPlug 49 | 50 | 51 | IPlug 52 | 53 | 54 | IPlug 55 | 56 | 57 | IPlug 58 | 59 | 60 | IPlug 61 | 62 | 63 | IPlug 64 | 65 | 66 | IPlug 67 | 68 | 69 | IPlug 70 | 71 | 72 | IPlug 73 | 74 | 75 | IPlug 76 | 77 | 78 | IPlug 79 | 80 | 81 | IPlug 82 | 83 | 84 | IPlug 85 | 86 | 87 | IPlug 88 | 89 | 90 | IPlug 91 | 92 | 93 | IPlug\RTAS 94 | 95 | 96 | IPlug\RTAS 97 | 98 | 99 | IPlug\RTAS 100 | 101 | 102 | IPlug\RTAS 103 | 104 | 105 | IPlug\RTAS 106 | 107 | 108 | IPlug\RTAS 109 | 110 | 111 | IPlug\RTAS 112 | 113 | 114 | IPlug\RTAS\include 115 | 116 | 117 | 118 | 119 | IPlug\RTAS 120 | 121 | 122 | 123 | 124 | IPlug 125 | 126 | 127 | IPlug 128 | 129 | 130 | IPlug 131 | 132 | 133 | IPlug 134 | 135 | 136 | IPlug 137 | 138 | 139 | IPlug 140 | 141 | 142 | IPlug 143 | 144 | 145 | IPlug 146 | 147 | 148 | IPlug 149 | 150 | 151 | IPlug 152 | 153 | 154 | IPlug 155 | 156 | 157 | IPlug\RTAS 158 | 159 | 160 | IPlug\RTAS 161 | 162 | 163 | IPlug\RTAS 164 | 165 | 166 | IPlug\RTAS 167 | 168 | 169 | IPlug\RTAS\include 170 | 171 | 172 | IPlug\RTAS\include 173 | 174 | 175 | IPlug\RTAS\include 176 | 177 | 178 | 179 | IPlug\RTAS 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /source/makedist-mac.command: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | #shell script to automate IPlug Project build, code-signing and packaging on OSX 4 | 5 | BASEDIR=$(dirname $0) 6 | cd $BASEDIR 7 | 8 | #--------------------------------------------------------------------------------------------------------- 9 | 10 | #variables 11 | 12 | VERSION=`echo | grep PLUG_VER resource.h` 13 | VERSION=${VERSION//\#define PLUG_VER } 14 | VERSION=${VERSION//\'} 15 | MAJOR_VERSION=$(($VERSION & 0xFFFF0000)) 16 | MAJOR_VERSION=$(($MAJOR_VERSION >> 16)) 17 | MINOR_VERSION=$(($VERSION & 0x0000FF00)) 18 | MINOR_VERSION=$(($MINOR_VERSION >> 8)) 19 | BUG_FIX=$(($VERSION & 0x000000FF)) 20 | 21 | FULL_VERSION=$MAJOR_VERSION"."$MINOR_VERSION"."$BUG_FIX 22 | 23 | PLUGIN_NAME=`echo | grep BUNDLE_NAME resource.h` 24 | PLUGIN_NAME=${PLUGIN_NAME//\#define BUNDLE_NAME } 25 | PLUGIN_NAME=${PLUGIN_NAME//\"} 26 | 27 | # work out the paths to the binaries 28 | 29 | VST2=`echo | grep VST_FOLDER ../../common.xcconfig` 30 | VST2=${VST2//\VST_FOLDER = }/$PLUGIN_NAME.vst 31 | 32 | VST3=`echo | grep VST3_FOLDER ../../common.xcconfig` 33 | VST3=${VST3//\VST3_FOLDER = }/$PLUGIN_NAME.vst3 34 | 35 | AU=`echo | grep AU_FOLDER ../../common.xcconfig` 36 | AU=${AU//\AU_FOLDER = }/$PLUGIN_NAME.component 37 | 38 | APP=`echo | grep APP_FOLDER ../../common.xcconfig` 39 | APP=${APP//\APP_FOLDER = }/$PLUGIN_NAME.app 40 | 41 | # Dev build folder 42 | RTAS=`echo | grep RTAS_FOLDER ../../common.xcconfig` 43 | RTAS=${RTAS//\RTAS_FOLDER = }/$PLUGIN_NAME.dpm 44 | RTAS_FINAL="/Library/Application Support/Digidesign/Plug-Ins/$PLUGIN_NAME.dpm" 45 | 46 | # Dev build folder 47 | AAX=`echo | grep AAX_FOLDER ../../common.xcconfig` 48 | AAX=${AAX//\AAX_FOLDER = }/$PLUGIN_NAME.aaxplugin 49 | AAX_FINAL="/Library/Application Support/Avid/Audio/Plug-Ins/$PLUGIN_NAME.aaxplugin" 50 | 51 | PKG="installer/build-mac/$PLUGIN_NAME Installer.pkg" 52 | PKG_US="installer/build-mac/$PLUGIN_NAME Installer.unsigned.pkg" 53 | 54 | CERT_ID=`echo | grep CERTIFICATE_ID ../../common.xcconfig` 55 | CERT_ID=${CERT_ID//\CERTIFICATE_ID = } 56 | 57 | echo "making $PLUGIN_NAME version $FULL_VERSION mac distribution..." 58 | echo "" 59 | 60 | #--------------------------------------------------------------------------------------------------------- 61 | 62 | #call python script to update version numbers 63 | ./update_version.py 64 | 65 | #here you can use the touch command to force xcode to rebuild 66 | #touch MyPlugin.h 67 | 68 | #--------------------------------------------------------------------------------------------------------- 69 | 70 | #if you are zipping the binaries, remove existing dist folder 71 | #if [ -d installer/dist ] 72 | #then 73 | # rm -R installer/dist 74 | #fi 75 | 76 | #mkdir installer/dist 77 | 78 | #remove existing binaries 79 | if [ -d $APP ] 80 | then 81 | sudo rm -f -R -f $APP 82 | fi 83 | 84 | if [ -d $AU ] 85 | then 86 | sudo rm -f -R $AU 87 | fi 88 | 89 | if [ -d $VST2 ] 90 | then 91 | sudo rm -f -R $VST2 92 | fi 93 | 94 | if [ -d $VST3 ] 95 | then 96 | sudo rm -f -R $VST3 97 | fi 98 | 99 | if [ -d "${RTAS}" ] 100 | then 101 | sudo rm -f -R "${RTAS}" 102 | fi 103 | 104 | if [ -d "${RTAS_FINAL}" ] 105 | then 106 | sudo rm -f -R "${RTAS_FINAL}" 107 | fi 108 | 109 | if [ -d "${AAX}" ] 110 | then 111 | sudo rm -f -R "${AAX}" 112 | fi 113 | 114 | if [ -d "${AAX_FINAL}" ] 115 | then 116 | sudo rm -f -R "${AAX_FINAL}" 117 | fi 118 | 119 | #--------------------------------------------------------------------------------------------------------- 120 | 121 | # build xcode project. Change target to build individual formats 122 | xcodebuild -project $PLUGIN_NAME.xcodeproj -xcconfig $PLUGIN_NAME.xcconfig -target "All" -configuration Release 2> ./build-mac.log 123 | 124 | if [ -s build-mac.log ] 125 | then 126 | echo "build failed due to following errors:" 127 | echo "" 128 | cat build-mac.log 129 | exit 1 130 | else 131 | rm build-mac.log 132 | fi 133 | 134 | #--------------------------------------------------------------------------------------------------------- 135 | 136 | #icon stuff - http://maxao.free.fr/telechargements/setfileicon.gz 137 | echo "setting icons" 138 | echo "" 139 | setfileicon resources/$PLUGIN_NAME.icns $AU 140 | setfileicon resources/$PLUGIN_NAME.icns $VST2 141 | setfileicon resources/$PLUGIN_NAME.icns $VST3 142 | setfileicon resources/$PLUGIN_NAME.icns "${RTAS}" 143 | setfileicon resources/$PLUGIN_NAME.icns "${AAX}" 144 | 145 | #--------------------------------------------------------------------------------------------------------- 146 | 147 | #strip debug symbols from binaries 148 | 149 | echo "striping binaries" 150 | strip -x $AU/Contents/MacOS/$PLUGIN_NAME 151 | strip -x $VST2/Contents/MacOS/$PLUGIN_NAME 152 | strip -x $VST3/Contents/MacOS/$PLUGIN_NAME 153 | strip -x $APP/Contents/MacOS/$PLUGIN_NAME 154 | strip -x "${AAX}/Contents/MacOS/$PLUGIN_NAME" 155 | strip -x "${RTAS}/Contents/MacOS/$PLUGIN_NAME" 156 | 157 | #--------------------------------------------------------------------------------------------------------- 158 | 159 | #ProTools stuff 160 | 161 | echo "copying RTAS PLUGIN_NAME from 3PDev to main RTAS folder" 162 | sudo cp -p -R "${RTAS}" "${RTAS_FINAL}" 163 | 164 | echo "copying AAX PLUGIN_NAME from 3PDev to main AAX folder" 165 | sudo cp -p -R "${AAX}" "${AAX_FINAL}" 166 | 167 | echo "code sign AAX binary" 168 | #... consult PACE documentation 169 | 170 | #--------------------------------------------------------------------------------------------------------- 171 | 172 | #Mac AppStore stuff 173 | 174 | #xcodebuild -project $PLUGIN_NAME.xcodeproj -xcconfig $PLUGIN_NAME.xcconfig -target "APP" -configuration Release 2> ./build-mac.log 175 | 176 | #echo "code signing app for appstore" 177 | #echo "" 178 | #codesign -f -s "3rd Party Mac Developer Application: ""${CERT_ID}" $APP --entitlements resources/$PLUGIN_NAME.entitlements 179 | 180 | #echo "building pkg for app store" 181 | #echo "" 182 | #productbuild \ 183 | # --component $APP /Applications \ 184 | # --sign "3rd Party Mac Developer Installer: ""${CERT_ID}" \ 185 | # --product "/Applications/$PLUGIN_NAME.app/Contents/Info.plist" installer/$PLUGIN_NAME.pkg 186 | 187 | #--------------------------------------------------------------------------------------------------------- 188 | 189 | #10.8 Gatekeeper/Developer ID stuff 190 | 191 | echo "code app binary for Gatekeeper on 10.8" 192 | echo "" 193 | codesign -f -s "Developer ID Application: ""${CERT_ID}" $APP 194 | 195 | #TODO: code-sign plug-in binaries too? 196 | 197 | #--------------------------------------------------------------------------------------------------------- 198 | 199 | # installer, uses Packages http://s.sudre.free.fr/Software/Packages/about.html 200 | sudo sudo rm -R -f installer/$PLUGIN_NAME-mac.dmg 201 | 202 | echo "building installer" 203 | echo "" 204 | packagesbuild installer/$PLUGIN_NAME.pkgproj 205 | 206 | echo "code-sign installer for Gatekeeper on 10.8" 207 | echo "" 208 | mv "${PKG}" "${PKG_US}" 209 | productsign --sign "Developer ID Installer: ""${CERT_ID}" "${PKG_US}" "${PKG}" 210 | 211 | rm -R -f "${PKG_US}" 212 | 213 | #set installer icon 214 | setfileicon resources/$PLUGIN_NAME.icns "${PKG}" 215 | 216 | #--------------------------------------------------------------------------------------------------------- 217 | 218 | # dmg, can use dmgcanvas http://www.araelium.com/dmgcanvas/ to make a nice dmg 219 | 220 | echo "building dmg" 221 | echo "" 222 | 223 | if [ -d installer/$PLUGIN_NAME.dmgCanvas ] 224 | then 225 | dmgcanvas installer/$PLUGIN_NAME.dmgCanvas installer/$PLUGIN_NAME-mac.dmg 226 | else 227 | hdiutil create installer/$PLUGIN_NAME.dmg -srcfolder installer/build-mac/ -ov -anyowners -volname $PLUGIN_NAME 228 | 229 | if [ -f installer/$PLUGIN_NAME-mac.dmg ] 230 | then 231 | rm -f installer/$PLUGIN_NAME-mac.dmg 232 | fi 233 | 234 | hdiutil convert installer/$PLUGIN_NAME.dmg -format UDZO -o installer/$PLUGIN_NAME-mac.dmg 235 | sudo rm -R -f installer/$PLUGIN_NAME.dmg 236 | fi 237 | 238 | sudo rm -R -f installer/build-mac/ 239 | 240 | #--------------------------------------------------------------------------------------------------------- 241 | # zip 242 | 243 | # echo "copying binaries..." 244 | # echo "" 245 | # cp -R $AU installer/dist/$PLUGIN_NAME.component 246 | # cp -R $VST2 installer/dist/$PLUGIN_NAME.vst 247 | # cp -R $VST3 installer/dist/$PLUGIN_NAME.vst3 248 | # cp -R $RTAS installer/dist/$PLUGIN_NAME.dpm 249 | # cp -R $AAX installer/dist/$PLUGIN_NAME.aaxplugin 250 | # cp -R $APP installer/dist/$PLUGIN_NAME.app 251 | # 252 | # echo "zipping binaries..." 253 | # echo "" 254 | # ditto -c -k installer/dist installer/$PLUGIN_NAME-mac.zip 255 | # rm -R installer/dist 256 | 257 | #--------------------------------------------------------------------------------------------------------- 258 | 259 | echo "done" -------------------------------------------------------------------------------- /source/CocoaDelay-vst3.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | vst3\VST3SDK\pluginterfaces\base 7 | 8 | 9 | vst3\VST3SDK\pluginterfaces\base 10 | 11 | 12 | vst3\VST3SDK\public.sdk\common 13 | 14 | 15 | vst3\VST3SDK\public.sdk\vst 16 | 17 | 18 | vst3\VST3SDK\public.sdk\vst 19 | 20 | 21 | vst3\VST3SDK\public.sdk\vst 22 | 23 | 24 | vst3\VST3SDK\public.sdk\vst 25 | 26 | 27 | vst3\VST3SDK\public.sdk\vst 28 | 29 | 30 | vst3\VST3SDK\public.sdk\vst 31 | 32 | 33 | vst3\VST3SDK\public.sdk\main 34 | 35 | 36 | vst3\VST3SDK\public.sdk\main 37 | 38 | 39 | vst3\VST3SDK\public.sdk\vst 40 | 41 | 42 | vst3 43 | 44 | 45 | vst3\VST3SDK\pluginterfaces\base 46 | 47 | 48 | vst3\VST3SDK\pluginterfaces\base 49 | 50 | 51 | 52 | 53 | 54 | 55 | vst3\VST3SDK\pluginterfaces\base 56 | 57 | 58 | vst3\VST3SDK\pluginterfaces\base 59 | 60 | 61 | vst3\VST3SDK\pluginterfaces\base 62 | 63 | 64 | vst3\VST3SDK\pluginterfaces\base 65 | 66 | 67 | vst3\VST3SDK\pluginterfaces\base 68 | 69 | 70 | vst3\VST3SDK\pluginterfaces\base 71 | 72 | 73 | vst3\VST3SDK\pluginterfaces\base 74 | 75 | 76 | vst3\VST3SDK\pluginterfaces\base 77 | 78 | 79 | vst3\VST3SDK\pluginterfaces\vst 80 | 81 | 82 | vst3\VST3SDK\pluginterfaces\vst 83 | 84 | 85 | vst3\VST3SDK\pluginterfaces\vst 86 | 87 | 88 | vst3\VST3SDK\pluginterfaces\vst 89 | 90 | 91 | vst3\VST3SDK\pluginterfaces\vst 92 | 93 | 94 | vst3\VST3SDK\pluginterfaces\vst 95 | 96 | 97 | vst3\VST3SDK\pluginterfaces\vst 98 | 99 | 100 | vst3\VST3SDK\pluginterfaces\vst 101 | 102 | 103 | vst3\VST3SDK\pluginterfaces\vst 104 | 105 | 106 | vst3\VST3SDK\pluginterfaces\vst 107 | 108 | 109 | vst3\VST3SDK\pluginterfaces\vst 110 | 111 | 112 | vst3\VST3SDK\pluginterfaces\vst 113 | 114 | 115 | vst3\VST3SDK\pluginterfaces\vst 116 | 117 | 118 | vst3\VST3SDK\pluginterfaces\gui 119 | 120 | 121 | vst3\VST3SDK\public.sdk\common 122 | 123 | 124 | vst3\VST3SDK\public.sdk\vst 125 | 126 | 127 | vst3\VST3SDK\public.sdk\vst 128 | 129 | 130 | vst3\VST3SDK\public.sdk\vst 131 | 132 | 133 | vst3\VST3SDK\public.sdk\vst 134 | 135 | 136 | vst3\VST3SDK\public.sdk\vst 137 | 138 | 139 | vst3\VST3SDK\public.sdk\vst 140 | 141 | 142 | vst3\VST3SDK\public.sdk\main 143 | 144 | 145 | vst3\VST3SDK\public.sdk\vst 146 | 147 | 148 | vst3 149 | 150 | 151 | vst3\VST3SDK\pluginterfaces\base 152 | 153 | 154 | vst3\VST3SDK\pluginterfaces\base 155 | 156 | 157 | vst3\VST3SDK\pluginterfaces\base 158 | 159 | 160 | vst3\VST3SDK\pluginterfaces\base 161 | 162 | 163 | vst3\VST3SDK\pluginterfaces\base 164 | 165 | 166 | vst3\VST3SDK\pluginterfaces\base 167 | 168 | 169 | vst3\VST3SDK\pluginterfaces\base 170 | 171 | 172 | vst3\VST3SDK\pluginterfaces\base 173 | 174 | 175 | vst3\VST3SDK\pluginterfaces\base 176 | 177 | 178 | vst3\VST3SDK\pluginterfaces\base 179 | 180 | 181 | vst3\VST3SDK\pluginterfaces\base 182 | 183 | 184 | vst3\VST3SDK\pluginterfaces\base 185 | 186 | 187 | vst3\VST3SDK\pluginterfaces\base 188 | 189 | 190 | vst3\VST3SDK\pluginterfaces\base 191 | 192 | 193 | vst3\VST3SDK\pluginterfaces\base 194 | 195 | 196 | 197 | 198 | {0028f8fa-40ce-4098-b1d7-1930d1a7774b} 199 | 200 | 201 | {d33dc1fa-0b31-40b9-a240-b065db740979} 202 | 203 | 204 | {1da1c979-a505-4558-b877-1a2da0e4e758} 205 | 206 | 207 | {cf0c95d2-7b5a-4afa-8a3e-546800d9b337} 208 | 209 | 210 | {babb4a18-d1d6-467e-af1c-fb852400f591} 211 | 212 | 213 | {a0598a21-18c6-4da8-98a8-bebbf0f37b34} 214 | 215 | 216 | {bc78847c-a41c-4ad7-8a8e-2ea825bc2f8e} 217 | 218 | 219 | {23863805-5085-4669-8675-167aba1f0fc9} 220 | 221 | 222 | {00ff2592-e5ef-4ab1-8b06-c42242d80c52} 223 | 224 | 225 | {ec7b025c-4ef1-4403-956b-b3673b4715b8} 226 | 227 | 228 | 229 | 230 | 231 | -------------------------------------------------------------------------------- /source/generate_plists.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | # this script will create the info plist files based on resource.h 4 | 5 | # 6 | # 7 | # 8 | # 9 | # 10 | # manufacturer 11 | # 12 | # subtype 13 | # 14 | # type 15 | # 16 | # description 17 | # 18 | # name 19 | # 20 | # version 21 | # 65536 22 | # factoryFunction 23 | # 24 | # sandboxSafe 25 | # 26 | # 27 | # 28 | # 29 | 30 | 31 | kAudioUnitType_MusicDevice = "aumu" 32 | kAudioUnitType_MusicEffect = "aumf" 33 | kAudioUnitType_Effect = "aufx" 34 | 35 | import plistlib, os, datetime, fileinput, glob, sys, string 36 | scriptpath = os.path.dirname(os.path.realpath(__file__)) 37 | projectpath = scriptpath #os.path.abspath(os.path.join(scriptpath, os.pardir)) 38 | 39 | def replacestrs(filename, s, r): 40 | files = glob.glob(filename) 41 | 42 | for line in fileinput.input(files,inplace=1): 43 | string.find(line, s) 44 | line = line.replace(s, r) 45 | sys.stdout.write(line) 46 | 47 | def main(): 48 | 49 | print "Processing Info.plist files..." 50 | 51 | MAJORSTR = "" 52 | MINORSTR = "" 53 | BUGFIXSTR = "" 54 | PLUG_VER_STR = "" 55 | 56 | BUNDLE_MFR = "" 57 | BUNDLE_NAME = "" 58 | PLUG_NAME_STR = "" 59 | PLUG_MFR_NAME_STR = "" 60 | PLUG_CHANNEL_IO = "" 61 | PLUG_COPYRIGHT = "" 62 | PLUG_UID = "" 63 | PLUG_MFR_UID = "" 64 | PLUG_FACTORY = "" 65 | PLUG_ENTRY = "" 66 | PLUG_VIEW_ENTRY = "" 67 | PLUG_IS_INST = 0 68 | PLUG_DOES_MIDI = 0 69 | 70 | # extract values from resource.h 71 | for line in fileinput.input(projectpath + "/resource.h", inplace=0): 72 | if "#define PLUG_VER " in line: 73 | PLUG_VER_STR = string.lstrip(line, "#define PLUG_VER ") 74 | PLUG_VER = int(PLUG_VER_STR, 16) 75 | MAJOR = PLUG_VER & 0xFFFF0000 76 | MAJORSTR = str(MAJOR >> 16) 77 | MINOR = PLUG_VER & 0x0000FF00 78 | MINORSTR = str(MINOR >> 8) 79 | BUGFIXSTR = str(PLUG_VER & 0x000000FF) 80 | 81 | if "#define PLUG_NAME " in line: 82 | PLUG_NAME_STR = string.lstrip(line, "#define PLUG_NAME ") 83 | 84 | if "#define PLUG_MFR " in line: 85 | PLUG_MFR_NAME_STR = string.lstrip(line, "#define PLUG_MFR ") 86 | 87 | if "#define BUNDLE_MFR " in line: 88 | BUNDLE_MFR = string.lstrip(line, "#define BUNDLE_MFR ") 89 | 90 | if "#define BUNDLE_NAME " in line: 91 | BUNDLE_NAME = string.lstrip(line, "#define BUNDLE_NAME ") 92 | 93 | if "#define PLUG_CHANNEL_IO " in line: 94 | PLUG_CHANNEL_IO = string.lstrip(line, "#define PLUG_CHANNEL_IO ") 95 | 96 | if "#define PLUG_COPYRIGHT " in line: 97 | PLUG_COPYRIGHT = string.lstrip(line, "#define PLUG_COPYRIGHT ") 98 | 99 | if "#define PLUG_UNIQUE_ID " in line: 100 | PLUG_UID = string.lstrip(line, "#define PLUG_UNIQUE_ID ") 101 | 102 | if "#define PLUG_MFR_ID " in line: 103 | PLUG_MFR_UID = string.lstrip(line, "#define PLUG_MFR_ID ") 104 | 105 | if "#define PLUG_ENTRY " in line: 106 | PLUG_ENTRY = string.lstrip(line, "#define PLUG_ENTRY ") 107 | 108 | if "#define PLUG_FACTORY " in line: 109 | PLUG_FACTORY = string.lstrip(line, "#define PLUG_FACTORY ") 110 | 111 | if "#define PLUG_VIEW_ENTRY " in line: 112 | PLUG_VIEW_ENTRY = string.lstrip(line, "#define PLUG_VIEW_ENTRY") 113 | 114 | if "#define PLUG_IS_INST " in line: 115 | PLUG_IS_INST = int(string.lstrip(line, "#define PLUG_IS_INST "), 16) 116 | 117 | if "#define PLUG_DOES_MIDI " in line: 118 | PLUG_DOES_MIDI = int(string.lstrip(line, "#define PLUG_DOES_MIDI "), 16) 119 | 120 | FULLVERSIONSTR = MAJORSTR + "." + MINORSTR + "." + BUGFIXSTR 121 | 122 | #strip quotes and newlines 123 | PLUG_VER_STR = PLUG_VER_STR[0:-1] 124 | BUNDLE_MFR = BUNDLE_MFR[1:-2] 125 | BUNDLE_NAME = BUNDLE_NAME[1:-2] 126 | PLUG_NAME_STR = PLUG_NAME_STR[1:-2] 127 | PLUG_MFR_NAME_STR = PLUG_MFR_NAME_STR[1:-2] 128 | PLUG_CHANNEL_IO = PLUG_CHANNEL_IO[1:-2] 129 | PLUG_COPYRIGHT = PLUG_COPYRIGHT[1:-2] 130 | PLUG_MFR_UID = PLUG_MFR_UID[1:-2] 131 | PLUG_UID = PLUG_UID[1:-2] 132 | PLUG_FACTORY = PLUG_FACTORY[0:-1] 133 | PLUG_ENTRY = PLUG_ENTRY[0:-1] 134 | PLUG_VIEW_ENTRY = PLUG_VIEW_ENTRY[0:-1] 135 | 136 | CFBundleGetInfoString = BUNDLE_NAME + " v" + FULLVERSIONSTR + " " + PLUG_COPYRIGHT 137 | CFBundleVersion = FULLVERSIONSTR 138 | CFBundlePackageType = "BNDL" 139 | CSResourcesFileMapped = True 140 | 141 | fileinput.close() 142 | 143 | LSMinimumSystemVersion = "10.7.0" 144 | 145 | BASE_SDK = "macosx10.13" 146 | DEPLOYMENT_TARGET = "10.7.0" 147 | 148 | # extract values from common.xcconfig 149 | for line in fileinput.input(projectpath + "/../../common.xcconfig", inplace=0): 150 | if not "//" in line: 151 | if "BASE_SDK = " in line: 152 | BASE_SDK = string.lstrip(line, "BASE_SDK = ") 153 | # if "MACOSX_DEPLOYMENT_TARGET = " in line: 154 | # DEPLOYMENT_TARGET = string.lstrip(line, "MACOSX_DEPLOYMENT_TARGET = ") 155 | 156 | BASE_SDK = BASE_SDK[0:-1] 157 | # DEPLOYMENT_TARGET = DEPLOYMENT_TARGET[0:-1] 158 | # DEPLOYMENT_TARGET += ".0" 159 | 160 | LSMinimumSystemVersion = DEPLOYMENT_TARGET 161 | 162 | # VST3 163 | 164 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-VST3-Info.plist" 165 | vst3 = plistlib.readPlist(plistpath) 166 | vst3['CFBundleExecutable'] = BUNDLE_NAME 167 | vst3['CFBundleGetInfoString'] = CFBundleGetInfoString 168 | vst3['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".vst3." + BUNDLE_NAME + "" 169 | vst3['CFBundleName'] = BUNDLE_NAME 170 | vst3['CFBundleVersion'] = CFBundleVersion 171 | vst3['CFBundleShortVersionString'] = CFBundleVersion 172 | vst3['LSMinimumSystemVersion'] = LSMinimumSystemVersion 173 | vst3['CFBundlePackageType'] = CFBundlePackageType 174 | vst3['CFBundleSignature'] = PLUG_UID 175 | vst3['CSResourcesFileMapped'] = CSResourcesFileMapped 176 | 177 | plistlib.writePlist(vst3, plistpath) 178 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 179 | 180 | # VST2 181 | 182 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-VST2-Info.plist" 183 | vst2 = plistlib.readPlist(plistpath) 184 | vst2['CFBundleExecutable'] = BUNDLE_NAME 185 | vst2['CFBundleGetInfoString'] = CFBundleGetInfoString 186 | vst2['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".vst." + BUNDLE_NAME + "" 187 | vst2['CFBundleName'] = BUNDLE_NAME 188 | vst2['CFBundleVersion'] = CFBundleVersion 189 | vst2['CFBundleShortVersionString'] = CFBundleVersion 190 | vst2['LSMinimumSystemVersion'] = LSMinimumSystemVersion 191 | vst2['CFBundlePackageType'] = CFBundlePackageType 192 | vst2['CFBundleSignature'] = PLUG_UID 193 | vst2['CSResourcesFileMapped'] = CSResourcesFileMapped 194 | 195 | plistlib.writePlist(vst2, plistpath) 196 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 197 | 198 | # AUDIOUNIT 199 | 200 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-AU-Info.plist" 201 | au = plistlib.readPlist(plistpath) 202 | au['AudioComponents'] = [{}] 203 | au['AudioUnit Version'] = PLUG_VER_STR 204 | au['CFBundleExecutable'] = BUNDLE_NAME 205 | au['CFBundleGetInfoString'] = CFBundleGetInfoString 206 | au['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".audiounit." + BUNDLE_NAME + "" 207 | au['CFBundleName'] = BUNDLE_NAME 208 | au['CFBundleVersion'] = CFBundleVersion 209 | au['CFBundleShortVersionString'] = CFBundleVersion 210 | au['LSMinimumSystemVersion'] = LSMinimumSystemVersion 211 | au['CFBundlePackageType'] = CFBundlePackageType 212 | au['CFBundleSignature'] = PLUG_UID 213 | au['CSResourcesFileMapped'] = CSResourcesFileMapped 214 | 215 | #Steinberg AU Wrapper stuff 216 | 217 | #Apple 10.7+ SDK stuff 218 | #https://developer.apple.com/library/mac/technotes/tn2276/_index.html 219 | 220 | if PLUG_IS_INST: 221 | COMP_TYPE = kAudioUnitType_MusicDevice 222 | elif PLUG_DOES_MIDI: 223 | COMP_TYPE = kAudioUnitType_MusicEffect 224 | else: 225 | COMP_TYPE = kAudioUnitType_Effect 226 | 227 | #if compiling against 10.6 sdk, delete AudioComponents key 228 | if (BASE_SDK == "macosx10.5") or (BASE_SDK == "macosx10.6"): 229 | print "Component manager entry point only" 230 | if(au['AudioComponents']): 231 | del au['AudioComponents'] 232 | else: 233 | print "AudioComponent and Component manager entry points" 234 | au['AudioComponents'] = [{}] 235 | au['AudioComponents'][0]['resourceUsage'] = {} 236 | 237 | au['AudioComponents'][0]['description'] = PLUG_NAME_STR 238 | au['AudioComponents'][0]['factoryFunction'] = PLUG_FACTORY 239 | au['AudioComponents'][0]['manufacturer'] = PLUG_MFR_UID 240 | au['AudioComponents'][0]['name'] = PLUG_MFR_NAME_STR + ": " + PLUG_NAME_STR 241 | au['AudioComponents'][0]['subtype'] = PLUG_UID 242 | au['AudioComponents'][0]['type'] = COMP_TYPE 243 | au['AudioComponents'][0]['version'] = PLUG_VER 244 | 245 | #Sandbox stuff 246 | # https://developer.apple.com/library/Mac/technotes/tn2247/_index.html 247 | au['AudioComponents'][0]['sandboxSafe'] = True 248 | #au['AudioComponents'][0]['resourceUsage']['temporary-exception.files.all.read-write'] = True 249 | 250 | plistlib.writePlist(au, plistpath) 251 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 252 | 253 | # AAX 254 | 255 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-AAX-Info.plist" 256 | aax = plistlib.readPlist(plistpath) 257 | aax['CFBundleExecutable'] = BUNDLE_NAME 258 | aax['CFBundleGetInfoString'] = CFBundleGetInfoString 259 | aax['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".aax." + BUNDLE_NAME + "" 260 | aax['CFBundleName'] = BUNDLE_NAME 261 | aax['CFBundleVersion'] = CFBundleVersion 262 | aax['CFBundleShortVersionString'] = CFBundleVersion 263 | aax['LSMinimumSystemVersion'] = LSMinimumSystemVersion 264 | aax['CSResourcesFileMapped'] = CSResourcesFileMapped 265 | 266 | plistlib.writePlist(aax, plistpath) 267 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 268 | 269 | 270 | # RTAS 271 | 272 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-RTAS-Info.plist" 273 | rtas = plistlib.readPlist(plistpath) 274 | rtas['CFBundleExecutable'] = BUNDLE_NAME 275 | rtas['CFBundleGetInfoString'] = CFBundleGetInfoString 276 | rtas['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".rtas." + BUNDLE_NAME + "" 277 | rtas['CFBundleName'] = BUNDLE_NAME 278 | rtas['CFBundleVersion'] = CFBundleVersion 279 | rtas['CFBundleShortVersionString'] = CFBundleVersion 280 | rtas['LSMinimumSystemVersion'] = LSMinimumSystemVersion 281 | rtas['CSResourcesFileMapped'] = CSResourcesFileMapped 282 | 283 | plistlib.writePlist(rtas, plistpath) 284 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 285 | 286 | # APP 287 | 288 | plistpath = projectpath + "/resources/" + BUNDLE_NAME + "-OSXAPP-Info.plist" 289 | osxapp = plistlib.readPlist(plistpath) 290 | osxapp['CFBundleExecutable'] = BUNDLE_NAME 291 | osxapp['CFBundleGetInfoString'] = CFBundleGetInfoString 292 | osxapp['CFBundleIdentifier'] = "com." + BUNDLE_MFR + ".standalone." + BUNDLE_NAME + "" 293 | osxapp['CFBundleName'] = BUNDLE_NAME 294 | osxapp['CFBundleVersion'] = CFBundleVersion 295 | osxapp['CFBundleShortVersionString'] = CFBundleVersion 296 | osxapp['LSMinimumSystemVersion'] = LSMinimumSystemVersion 297 | osxapp['CFBundlePackageType'] = CFBundlePackageType 298 | osxapp['CFBundleSignature'] = PLUG_UID 299 | osxapp['CSResourcesFileMapped'] = CSResourcesFileMapped 300 | osxapp['NSPrincipalClass'] = "SWELLApplication" 301 | osxapp['NSMainNibFile'] = "MainMenu" 302 | osxapp['LSApplicationCategoryType'] = "public.app-category.music" 303 | osxapp['CFBundleIconFile'] = BUNDLE_NAME + ".icns" 304 | 305 | plistlib.writePlist(osxapp, plistpath) 306 | replacestrs(plistpath, "//Apple//", "//Apple Computer//"); 307 | 308 | print "Processing .exp symbol export file..." 309 | 310 | # expfile = open(BUNDLE_NAME + ".exp", "w") 311 | 312 | # expfile.write("_" + PLUG_FACTORY + "\n") 313 | # expfile.write("_" + PLUG_ENTRY + "\n") 314 | # expfile.write("_" + PLUG_VIEW_ENTRY + "\n") 315 | 316 | # expfile.close() 317 | 318 | if __name__ == '__main__': 319 | main() 320 | -------------------------------------------------------------------------------- /source/CocoaDelay.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.21005.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CocoaDelay-app", "CocoaDelay-app.vcxproj", "{41785AE4-5B70-4A75-880B-4B418B4E13C6}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 9 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 10 | EndProjectSection 11 | EndProject 12 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IPlug", "..\..\WDL\IPlug\IPlug.vcxproj", "{33958832-2FFD-49D8-9C13-5F0B26739E81}" 13 | ProjectSection(ProjectDependencies) = postProject 14 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 15 | EndProjectSection 16 | EndProject 17 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lice", "..\..\WDL\lice\lice.vcxproj", "{3059A12C-2A45-439B-81EC-201D8ED347A3}" 18 | EndProject 19 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CocoaDelay-vst2", "CocoaDelay-vst2.vcxproj", "{2EB4846A-93E0-43A0-821E-12237105168F}" 20 | ProjectSection(ProjectDependencies) = postProject 21 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 22 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 23 | EndProjectSection 24 | EndProject 25 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CocoaDelay-vst3", "CocoaDelay-vst3.vcxproj", "{079FC65A-F0E5-4E97-B318-A16D1D0B89DF}" 26 | ProjectSection(ProjectDependencies) = postProject 27 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 28 | {33958832-2FFD-49D8-9C13-5F0B26739E81} = {33958832-2FFD-49D8-9C13-5F0B26739E81} 29 | {5755CC40-C699-491B-BD7C-5D841C26C28D} = {5755CC40-C699-491B-BD7C-5D841C26C28D} 30 | EndProjectSection 31 | EndProject 32 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "base", "..\..\VST3_SDK\base\win\base.vcxproj", "{5755CC40-C699-491B-BD7C-5D841C26C28D}" 33 | EndProject 34 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CocoaDelay-aax", "CocoaDelay-aax.vcxproj", "{DC4B5920-933D-4C82-B842-F34431D55A93}" 35 | ProjectSection(ProjectDependencies) = postProject 36 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 37 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53} = {5E3D286E-BF0D-446A-AFEF-E800F283CE53} 38 | EndProjectSection 39 | EndProject 40 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AAXLibrary", "..\..\AAX_SDK\Libs\AAXLibrary\WinBuild\AAXLibrary.vcxproj", "{5E3D286E-BF0D-446A-AFEF-E800F283CE53}" 41 | EndProject 42 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CocoaDelay-rtas", "CocoaDelay-rtas.vcxproj", "{8F427C1E-B580-4793-BEAC-F2CFEFA003F5}" 43 | ProjectSection(ProjectDependencies) = postProject 44 | {3059A12C-2A45-439B-81EC-201D8ED347A3} = {3059A12C-2A45-439B-81EC-201D8ED347A3} 45 | {D2CE28FF-63B8-48BC-936D-33F365B4053F} = {D2CE28FF-63B8-48BC-936D-33F365B4053F} 46 | EndProjectSection 47 | EndProject 48 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugInLib", "..\..\PT9_SDK\AlturaPorts\TDMPlugIns\PlugInLibrary\WinBuild\PlugInLib.vcxproj", "{D2CE28FF-63B8-48BC-936D-33F365B4053F}" 49 | EndProject 50 | Global 51 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 52 | Debug|Win32 = Debug|Win32 53 | Debug|x64 = Debug|x64 54 | Release|Win32 = Release|Win32 55 | Release|x64 = Release|x64 56 | Tracer|Win32 = Tracer|Win32 57 | Tracer|x64 = Tracer|x64 58 | EndGlobalSection 59 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 60 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.ActiveCfg = Debug|Win32 61 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|Win32.Build.0 = Debug|Win32 62 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.ActiveCfg = Debug|x64 63 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Debug|x64.Build.0 = Debug|x64 64 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.ActiveCfg = Release|Win32 65 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|Win32.Build.0 = Release|Win32 66 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.ActiveCfg = Release|x64 67 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Release|x64.Build.0 = Release|x64 68 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.ActiveCfg = Tracer|Win32 69 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|Win32.Build.0 = Tracer|Win32 70 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.ActiveCfg = Tracer|x64 71 | {41785AE4-5B70-4A75-880B-4B418B4E13C6}.Tracer|x64.Build.0 = Tracer|x64 72 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|Win32.ActiveCfg = Debug|Win32 73 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|Win32.Build.0 = Debug|Win32 74 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|x64.ActiveCfg = Debug|x64 75 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Debug|x64.Build.0 = Debug|x64 76 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|Win32.ActiveCfg = Release|Win32 77 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|Win32.Build.0 = Release|Win32 78 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|x64.ActiveCfg = Release|x64 79 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Release|x64.Build.0 = Release|x64 80 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|Win32.ActiveCfg = Tracer|Win32 81 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|Win32.Build.0 = Tracer|Win32 82 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|x64.ActiveCfg = Tracer|x64 83 | {33958832-2FFD-49D8-9C13-5F0B26739E81}.Tracer|x64.Build.0 = Tracer|x64 84 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|Win32.ActiveCfg = Debug|Win32 85 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|Win32.Build.0 = Debug|Win32 86 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|x64.ActiveCfg = Debug|x64 87 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Debug|x64.Build.0 = Debug|x64 88 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|Win32.ActiveCfg = Release|Win32 89 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|Win32.Build.0 = Release|Win32 90 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|x64.ActiveCfg = Release|x64 91 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Release|x64.Build.0 = Release|x64 92 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|Win32.ActiveCfg = Release|Win32 93 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|Win32.Build.0 = Release|Win32 94 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|x64.ActiveCfg = Release|x64 95 | {3059A12C-2A45-439B-81EC-201D8ED347A3}.Tracer|x64.Build.0 = Release|x64 96 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|Win32.ActiveCfg = Debug|Win32 97 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|Win32.Build.0 = Debug|Win32 98 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|x64.ActiveCfg = Debug|x64 99 | {2EB4846A-93E0-43A0-821E-12237105168F}.Debug|x64.Build.0 = Debug|x64 100 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|Win32.ActiveCfg = Release|Win32 101 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|Win32.Build.0 = Release|Win32 102 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|x64.ActiveCfg = Release|x64 103 | {2EB4846A-93E0-43A0-821E-12237105168F}.Release|x64.Build.0 = Release|x64 104 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|Win32.ActiveCfg = Tracer|Win32 105 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|Win32.Build.0 = Tracer|Win32 106 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|x64.ActiveCfg = Tracer|x64 107 | {2EB4846A-93E0-43A0-821E-12237105168F}.Tracer|x64.Build.0 = Tracer|x64 108 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.ActiveCfg = Debug|Win32 109 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|Win32.Build.0 = Debug|Win32 110 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.ActiveCfg = Debug|x64 111 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Debug|x64.Build.0 = Debug|x64 112 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.ActiveCfg = Release|Win32 113 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|Win32.Build.0 = Release|Win32 114 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.ActiveCfg = Release|x64 115 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Release|x64.Build.0 = Release|x64 116 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.ActiveCfg = Tracer|Win32 117 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|Win32.Build.0 = Tracer|Win32 118 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.ActiveCfg = Tracer|x64 119 | {079FC65A-F0E5-4E97-B318-A16D1D0B89DF}.Tracer|x64.Build.0 = Tracer|x64 120 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|Win32.ActiveCfg = Debug|Win32 121 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|Win32.Build.0 = Debug|Win32 122 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|x64.ActiveCfg = Debug|x64 123 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Debug|x64.Build.0 = Debug|x64 124 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|Win32.ActiveCfg = Release|Win32 125 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|Win32.Build.0 = Release|Win32 126 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|x64.ActiveCfg = Release|x64 127 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Release|x64.Build.0 = Release|x64 128 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|Win32.ActiveCfg = Release|Win32 129 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|Win32.Build.0 = Release|Win32 130 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|x64.ActiveCfg = Release|x64 131 | {5755CC40-C699-491B-BD7C-5D841C26C28D}.Tracer|x64.Build.0 = Release|x64 132 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|Win32.ActiveCfg = Debug|Win32 133 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|Win32.Build.0 = Debug|Win32 134 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|x64.ActiveCfg = Debug|x64 135 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Debug|x64.Build.0 = Debug|x64 136 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|Win32.ActiveCfg = Release|Win32 137 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|Win32.Build.0 = Release|Win32 138 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|x64.ActiveCfg = Release|x64 139 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Release|x64.Build.0 = Release|x64 140 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|Win32.ActiveCfg = Tracer|Win32 141 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|Win32.Build.0 = Tracer|Win32 142 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|x64.ActiveCfg = Tracer|x64 143 | {DC4B5920-933D-4C82-B842-F34431D55A93}.Tracer|x64.Build.0 = Tracer|x64 144 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Debug|Win32.ActiveCfg = Debug|Win32 145 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Debug|Win32.Build.0 = Debug|Win32 146 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Debug|x64.ActiveCfg = Debug|x64 147 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Debug|x64.Build.0 = Debug|x64 148 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Release|Win32.ActiveCfg = Release|Win32 149 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Release|Win32.Build.0 = Release|Win32 150 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Release|x64.ActiveCfg = Release|x64 151 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Release|x64.Build.0 = Release|x64 152 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Tracer|Win32.ActiveCfg = Release|Win32 153 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Tracer|Win32.Build.0 = Release|Win32 154 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Tracer|x64.ActiveCfg = Release|x64 155 | {5E3D286E-BF0D-446A-AFEF-E800F283CE53}.Tracer|x64.Build.0 = Release|x64 156 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Debug|Win32.ActiveCfg = Debug|Win32 157 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Debug|Win32.Build.0 = Debug|Win32 158 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Debug|x64.ActiveCfg = Debug|Win32 159 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Release|Win32.ActiveCfg = Release|Win32 160 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Release|Win32.Build.0 = Release|Win32 161 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Release|x64.ActiveCfg = Release|Win32 162 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Tracer|Win32.ActiveCfg = Tracer|Win32 163 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Tracer|Win32.Build.0 = Tracer|Win32 164 | {8F427C1E-B580-4793-BEAC-F2CFEFA003F5}.Tracer|x64.ActiveCfg = Tracer|Win32 165 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Debug|Win32.ActiveCfg = Release|Win32 166 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Debug|Win32.Build.0 = Release|Win32 167 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Debug|x64.ActiveCfg = Debug|Win32 168 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Release|Win32.ActiveCfg = Release|Win32 169 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Release|Win32.Build.0 = Release|Win32 170 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Release|x64.ActiveCfg = Release|Win32 171 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Tracer|Win32.ActiveCfg = Release|Win32 172 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Tracer|Win32.Build.0 = Release|Win32 173 | {D2CE28FF-63B8-48BC-936D-33F365B4053F}.Tracer|x64.ActiveCfg = Release|Win32 174 | EndGlobalSection 175 | GlobalSection(SolutionProperties) = preSolution 176 | HideSolutionNode = FALSE 177 | EndGlobalSection 178 | EndGlobal 179 | -------------------------------------------------------------------------------- /source/CocoaDelay-vst2.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | Win32 8 | 9 | 10 | Debug 11 | x64 12 | 13 | 14 | Release 15 | Win32 16 | 17 | 18 | Release 19 | x64 20 | 21 | 22 | Tracer 23 | Win32 24 | 25 | 26 | Tracer 27 | x64 28 | 29 | 30 | 31 | {2EB4846A-93E0-43A0-821E-12237105168F} 32 | CocoaDelay 33 | CocoaDelay-vst2 34 | 10.0 35 | 36 | 37 | 38 | DynamicLibrary 39 | true 40 | MultiByte 41 | v143 42 | 43 | 44 | DynamicLibrary 45 | true 46 | MultiByte 47 | v143 48 | 49 | 50 | DynamicLibrary 51 | false 52 | true 53 | MultiByte 54 | v143 55 | 56 | 57 | DynamicLibrary 58 | false 59 | true 60 | MultiByte 61 | v143 62 | 63 | 64 | DynamicLibrary 65 | false 66 | true 67 | MultiByte 68 | v143 69 | 70 | 71 | DynamicLibrary 72 | false 73 | true 74 | MultiByte 75 | v143 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | build-win\vst2\$(Platform)\bin\ 107 | 108 | 109 | build-win\vst2\$(Platform)\bin\ 110 | 111 | 112 | build-win\vst2\$(Platform)\$(Configuration)\ 113 | 114 | 115 | 116 | 117 | build-win\vst2\$(Platform)\$(Configuration)\ 118 | 119 | 120 | 121 | build-win\vst2\$(Platform)\bin\ 122 | 123 | 124 | build-win\vst2\$(Platform)\bin\ 125 | 126 | 127 | build-win\vst2\$(Platform)\$(Configuration)\ 128 | 129 | 130 | build-win\vst2\$(Platform)\$(Configuration)\ 131 | 132 | 133 | build-win\vst2\$(Platform)\bin\ 134 | 135 | 136 | build-win\vst2\$(Platform)\bin\ 137 | 138 | 139 | build-win\vst2\$(Platform)\$(Configuration)\ 140 | 141 | 142 | build-win\vst2\$(Platform)\$(Configuration)\ 143 | 144 | 145 | 146 | Level3 147 | Disabled 148 | $(VST_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 149 | MultiThreadedDebug 150 | 151 | 152 | true 153 | Windows 154 | 155 | 156 | 157 | 158 | Level3 159 | Disabled 160 | $(VST_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 161 | MultiThreadedDebug 162 | 163 | 164 | true 165 | Windows 166 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 167 | 168 | 169 | 170 | 171 | Level3 172 | MaxSpeed 173 | true 174 | true 175 | $(VST_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 176 | true 177 | Speed 178 | 179 | 180 | true 181 | true 182 | true 183 | Windows 184 | 185 | 186 | 187 | 188 | Level3 189 | MaxSpeed 190 | true 191 | true 192 | $(VST_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 193 | true 194 | Speed 195 | 196 | 197 | true 198 | true 199 | true 200 | Windows 201 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 202 | 203 | 204 | 205 | 206 | Level3 207 | MaxSpeed 208 | true 209 | true 210 | $(VST_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 211 | true 212 | 213 | 214 | true 215 | true 216 | true 217 | Windows 218 | $(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 219 | 220 | 221 | 222 | 223 | Level3 224 | MaxSpeed 225 | true 226 | true 227 | $(VST_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 228 | true 229 | 230 | 231 | true 232 | true 233 | true 234 | Windows 235 | $(x64_LIB_PATHS);$(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | -------------------------------------------------------------------------------- /source/CocoaDelay-app.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | Win32 8 | 9 | 10 | Debug 11 | x64 12 | 13 | 14 | Release 15 | Win32 16 | 17 | 18 | Release 19 | x64 20 | 21 | 22 | Tracer 23 | Win32 24 | 25 | 26 | Tracer 27 | x64 28 | 29 | 30 | 31 | {41785AE4-5B70-4A75-880B-4B418B4E13C6} 32 | CocoaDelay 33 | CocoaDelay-app 34 | 10.0 35 | 36 | 37 | 38 | Application 39 | true 40 | MultiByte 41 | v143 42 | 43 | 44 | Application 45 | true 46 | MultiByte 47 | v143 48 | 49 | 50 | Application 51 | false 52 | true 53 | MultiByte 54 | v143 55 | 56 | 57 | Application 58 | false 59 | true 60 | MultiByte 61 | v143 62 | 63 | 64 | Application 65 | false 66 | true 67 | MultiByte 68 | v143 69 | 70 | 71 | Application 72 | false 73 | true 74 | MultiByte 75 | v143 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | build-win\app\$(Platform)\bin\ 107 | 108 | 109 | build-win\app\$(Platform)\bin\ 110 | 111 | 112 | build-win\app\$(Platform)\$(Configuration)\ 113 | 114 | 115 | 116 | 117 | build-win\app\$(Platform)\$(Configuration)\ 118 | 119 | 120 | 121 | build-win\app\$(Platform)\bin\ 122 | 123 | 124 | build-win\app\$(Platform)\bin\ 125 | 126 | 127 | build-win\app\$(Platform)\$(Configuration)\ 128 | 129 | 130 | build-win\app\$(Platform)\$(Configuration)\ 131 | 132 | 133 | build-win\app\$(Platform)\bin\ 134 | 135 | 136 | build-win\app\$(Platform)\bin\ 137 | 138 | 139 | build-win\app\$(Platform)\$(Configuration)\ 140 | 141 | 142 | build-win\app\$(Platform)\$(Configuration)\ 143 | 144 | 145 | 146 | Level3 147 | Disabled 148 | $(APP_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 149 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 150 | MultiThreadedDebug 151 | 152 | 153 | true 154 | $(APP_LIBS);%(AdditionalDependencies) 155 | Windows 156 | 157 | 158 | SA_API 159 | 160 | 161 | 162 | 163 | Level3 164 | Disabled 165 | $(APP_DEFS);$(DEBUG_DEFS);%(PreprocessorDefinitions) 166 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 167 | MultiThreadedDebug 168 | 169 | 170 | true 171 | $(APP_LIBS);%(AdditionalDependencies) 172 | Windows 173 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 174 | 175 | 176 | SA_API 177 | 178 | 179 | 180 | 181 | Level3 182 | MaxSpeed 183 | true 184 | true 185 | $(APP_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 186 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 187 | true 188 | Speed 189 | 190 | 191 | true 192 | true 193 | true 194 | $(APP_LIBS);%(AdditionalDependencies) 195 | Windows 196 | 197 | 198 | SA_API 199 | 200 | 201 | 202 | 203 | Level3 204 | MaxSpeed 205 | true 206 | true 207 | $(APP_DEFS);$(RELEASE_DEFS);%(PreprocessorDefinitions) 208 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 209 | true 210 | Speed 211 | 212 | 213 | true 214 | true 215 | true 216 | $(APP_LIBS);%(AdditionalDependencies) 217 | Windows 218 | $(x64_LIB_PATHS);%(AdditionalLibraryDirectories) 219 | 220 | 221 | SA_API 222 | 223 | 224 | 225 | 226 | Level3 227 | MaxSpeed 228 | true 229 | true 230 | $(APP_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 231 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 232 | true 233 | 234 | 235 | true 236 | true 237 | true 238 | $(APP_LIBS);%(AdditionalDependencies) 239 | Windows 240 | $(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 241 | 242 | 243 | SA_API 244 | 245 | 246 | 247 | 248 | Level3 249 | MaxSpeed 250 | true 251 | true 252 | $(APP_DEFS);$(TRACER_DEFS);%(PreprocessorDefinitions) 253 | $(APP_INCLUDES);%(AdditionalIncludeDirectories) 254 | true 255 | 256 | 257 | true 258 | true 259 | true 260 | $(APP_LIBS);%(AdditionalDependencies) 261 | Windows 262 | $(x64_LIB_PATHS);$(WDL_PATH)\lice\build-win\$(Platform)\Release\;%(AdditionalLibraryDirectories) 263 | 264 | 265 | SA_API 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | --------------------------------------------------------------------------------