├── 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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------