Merge pull request #110 from tesselode/fixes
[wdl/wdl-ol.git] / IPlugExamples / Examples.rtf
blob92321df992dac9c332848d57f111b210c0ec45ce
1 {\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
2 \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 Courier-BoldOblique;\f2\fmodern\fcharset0 Courier;
3 \f3\fmodern\fcharset0 Courier-Bold;}
4 {\colortbl;\red255\green255\blue255;}
5 {\*\expandedcolortbl;;}
6 {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}
7 {\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid2}
8 {\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid3}
9 {\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid4}
10 {\list\listtemplateid5\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid5}
11 {\list\listtemplateid6\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid501\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid6}
12 {\list\listtemplateid7\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid601\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid7}
13 {\list\listtemplateid8\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid701\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid8}}
14 {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}}
15 \paperw11900\paperh16840\vieww25380\viewh19600\viewkind0
16 \deftab720
17 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
19 \f0\b\fs38 \cf0 WDL-OL IPlug Examples Instructions
20 \fs24 \
21 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
23 \b0 \cf0 www.olilarkin.co.uk\
24 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\pardirnatural\partightenfactor0
25 \ls1\ilvl0\cf0 \
26 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\pardirnatural\partightenfactor0
27 \ls1\ilvl0
28 \b\fs28 \cf0 Introduction
29 \b0\fs24 \
30 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
31 \cf0 \
32 This folder contains example/template projects to demonstrate how to use different features of my modified IPlug and WDL. They also serve as a testbed to make sure that the various aspects are working. Each folder contains scripts which automate the build process and package everything along with a pdf manual in an installer. The scripts also code sign binaries/installers and set icons where required.\
34 Projects are provided for Visual Studio 2017 and Xcode 9. You cannot downgrade the VS2017 projects to work with older versions.\
36 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
38 \b \cf0 Requirements:
39 \b0 \
41 Some of these are optional, but without them the build-scripts will need to be edited, otherwise you'll get errors.\
43 Windows\
45 \b \
46 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\partightenfactor0
47 \ls2\ilvl0
48 \b0 \cf0 {\listtext     \'95    }Msysgit {\field{\*\fldinst{HYPERLINK "http://code.google.com/p/msysgit/"}}{\fldrslt http://code.google.com/p/msysgit/}}
49 \b \
50 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\partightenfactor0
51 \ls3\ilvl0
52 \b0 \cf0 {\listtext     \'95    }Visual Studio Community 2017\
53 {\listtext      \'95    }Python 2.x {\field{\*\fldinst{HYPERLINK "http://www.python.org/"}}{\fldrslt http://www.python.org/}}\
54 {\listtext      \'95    }Innosetup {\field{\*\fldinst{HYPERLINK "http://www.jrsoftware.org/isinfo.php"}}{\fldrslt http://www.jrsoftware.org/isinfo.php}}\
55 {\listtext      \'95    }7zip {\field{\*\fldinst{HYPERLINK "http://www.7-zip.org/"}}{\fldrslt http://www.7-zip.org/}} (if you want to zip instead of make an installer)\
56 {\listtext      \'95    }Pace tools and certificate for code signing AAX binaries\
57 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
58 \cf0 \
59 Mac
60 \b \
62 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\partightenfactor0
63 \ls4\ilvl0
64 \b0 \cf0 {\listtext     \'95    }Git-osx {\field{\*\fldinst{HYPERLINK "http://code.google.com/p/git-osx-installer/"}}{\fldrslt http://code.google.com/p/git-osx-installer/}}
65 \b \
66 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\partightenfactor0
67 \ls5\ilvl0
68 \b0 \cf0 {\listtext     \'95    }Xcode 9.x installed, including command-line tools \
69 {\listtext      \'95    }Packages for building macOS installers {\field{\*\fldinst{HYPERLINK "http://s.sudre.free.fr/Software/Packages/about.html"}}{\fldrslt http://s.sudre.free.fr/Software/Packages/about.html}}\
70 {\listtext      \'95    }setfileicon utility {\field{\*\fldinst{HYPERLINK "http://maxao.free.fr/telechargements/setfileicon.gz"}}{\fldrslt http://maxao.free.fr/telechargements/setfileicon.gz}}\
71 {\listtext      \'95    }Mac Developer ID Certificates for code signing installers for 10.8>\
72 {\listtext      \'95    }Mac 3rd Party App Dev Certificates for code signing binaries and installers for the Mac App Store\
73 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\partightenfactor0
74 \ls6\ilvl0\cf0 {\listtext       \'95    }Pace tools and certificate for code signing AAX binaries\
75 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
76 \cf0 \
77 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\pardirnatural\partightenfactor0
78 \ls7\ilvl0
79 \b\fs28 \cf0 About the examples:\
80 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\pardirnatural\partightenfactor0
82 \fs24 \cf0 \
83 \pard\tx220\tx720\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\li720\fi-720\pardirnatural\partightenfactor0
84 \ls8\ilvl0
85 \b0 \cf0 {\listtext     \'95    }IPlugChunks - shows how to use chunks in a plugin. Chunks allow you to store arbitrary data in the plugin's state as apposed to just a value for each parameter.\
86 {\listtext      \'95    }IPlugControls -  demos the various IControl classes (example by Captain Caveman)\
87 {\listtext      \'95    }IPlugConvoEngine - demos WDL_ConvolutionEngine() - Cockos' fast convolution engine (example by Tale)\
88 {\listtext      \'95    }IPlugDistortion - demos Tale's bessel filter implementation for realtime oversampling (example by Tale)\
89 {\listtext      \'95    }IPlugEEL - demonstrates using Cockos' EEL library for run-time expression evaluation \
90 {\listtext      \'95    }IPlugEffect - The most basic IPlug plugin, a gain control similar to AGain in the VST2 SDK, however it has a GUI\
91 {\listtext      \'95    }IPlugGUIResize - has three buttons to choose different gui sizes at runtime\
92 {\listtext      \'95    }IPlugHostDetect - displays the host name and version (not very reliable at the moment)\
93 {\listtext      \'95    }IPlugMonoSynth - a basic monophonic IPlug synth, showing how to handle MIDI messages sample accurately. Also shows how to use Tale's IKeyboardControl.\
94 {\listtext      \'95    }IPlugMouseTest - demonstrates an XY pad IControl which is linked to two plugin parameters\
95 {\listtext      \'95    }IPlugMultiChannel  - demos a multi-channel IPlug plugin, and how to test if channels are connected\
96 {\listtext      \'95    }IPlugMultiTargets - a midi effect plugin that also demos compilation to IOS, getting tempo info, and pop up menus\
97 {\listtext      \'95    }IPlugOpenGL - using OpenGL in IPlug\
98 {\listtext      \'95    }IPlugPlush -  shows how to use Cockos' Plush to do basic 3D Graphics\
99 {\listtext      \'95    }IPlugPolySynth - a basic polyphonic IPlug synth\
100 {\listtext      \'95    }IPlugResampler - demonstrates using WDL_Resampler\
101 {\listtext      \'95    }IPlugSideChain - a plugin that shows how to setup a sidechain input, for VST3, AU and RTAS\
102 {\listtext      \'95    }IPlugText - demos different ways to draw text\
103 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
104 \cf0 \
105 The IPlugEffect project is the main starting project I use. If you are not interested in AAX, RTAS etc, I suggest you duplicate this and manually remove those targets to give you a new clean starting template with just your preferred formats in it.\
107 Rather than changing settings for individual targets/projects inside the Xcode Project/Visual Studio solutions, most customisations can be done in the xcconfig and property sheets.\
109 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
111 \b\fs28 \cf0 Duplicating Projects\
112 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
114 \fs24 \cf0 \
115 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
117 \b0 \cf0 The IPlugExamples folder contains a python script to duplicate an IPlug project. This allows you to very quickly create a new project based on one of the examples. It does a multiple file find and replace to substitute the new name of the project for the old name, and also to change the manufacturer name. Once you have done this you only need to change two more things by hand in resource.h to make your plugin unique.\
119 You can duplicate a project as follows with the following commands in the macOS terminal or on the windows command prompt. In this example i will copy the IPlugEffect project to a new project called MyNewPlugin\'85\
121 - open terminal or cmd.exe and navigate to the IPlugExamples folder\
122 - type \
123 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
125 \f1\i\b \cf0    duplicate.py [inputprojectname] [outputprojectname] [manufacturername]\
126 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
128 \f0\i0\b0 \cf0 \
129 e.g\
130 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
132 \f2 \cf0        
133 \f1\i\b duplicate.py IPlugEffect MyNewPlugin OliLarkin\
134 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
136 \f0\i0\b0 \cf0 \
137 you might need to do 
138 \f1\i\b ./duplicate.py
139 \f0\i0\b0  on macOS\
141 - open  
142 \f3\b MyNewPlugin/resource.h
143 \f0\b0  and change 
144 \f3\b PLUG_UNIQUE_ID
145 \f0\b0  and 
146 \f3\b PLUG_MFR_ID
147 \f0\b0 \
150 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
152 \b\fs28 \cf0 Debugging Setups\
153 \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardeftab720\partightenfactor0
155 \fs26 \cf0 \
157 \b0 .xcscheme files are set up to use some common hosts for debugging the various formats in Xcode.
158 \b \
160 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardeftab720\partightenfactor0
162 \b0\fs24 \cf0 To debug an Audiounit using auval, remember to change the auval executable arguments to match plugin's type and IDs: 
163 \b aufx/aumf/aumu PLUG_UNIQUE_ID PLUG_MFR_ID
164 \b0 \
166 AU hosts cache information about the plugin I/O channels etc, so I have added a build script that deletes the caches after a build. If this becomes annoying (it will cause Logic to rescan plugins) you can disable it.\
168 There is also a 
169 \b validate_audiounit.command
170 \b0  shell script which will is a helper that runs auval with your plugins' unique IDs, and optionally performs the leaks test.\
172 The windows debug setups use {\field{\*\fldinst{HYPERLINK "http://www.hermannseib.com/english/savihost.htm"}}{\fldrslt SAVIHost}} for VST2 debugging, and VST3PluginTestHost for VST3 debugging (in Steinberg VST3 SDK)\
174 You should install VSTHost to 
175 \b C:\\Program Files\\VSTHost\\vsthost.exe
176 \b0  (on x64 you should install the 64bit version here)\
178 To debug RTAS you need to install the PT Dev build. By default my debugging setup expects it to be installed in 
179 \b /Applications/Avid/ProTools_3PDev
180 \b0  on mac and 
181 \b %ProgramFiles%\\ Avid\\ProTools_3PDev
182 \b0  on windows\
186 \b\fs28 Installers & one-click build scripts\
188 \fs24 \
190 \b0 The example projects contain shell scripts for both Windows (
191 \b makedist-win.bat
192 \b0 ) and macOS (
193 \b makedist-mac.command
194 \b0 ) that build everything, code-sign (where relevant) and package the products in an installer including license, readme.txt, changelog.txt and manual. On Windows the installer program "Innosetup" is used, on macOS "Packages". A python script 
195 \b update_version.py
196 \b0  is called to look at 
197 \b resource.h
198 \b0  and get the version from the 
199 \b PLUG_VER #define
200 \b0 . It then updates the 
201 \b info.plist
202 \b0  files and installer scripts with the version number (in the format major.minor.bugfix). If you aren't building some components, e.g. RTAS, the build scripts may need to be modified. Please alter the license and readme text and remove my name from them if you release a plugin publicly. On macOS the script can also code-sign the standalone app and builds a .pkg for the appstore (commented out).
203 \b \
205 \b0 \