|
11-20-2011, 02:59 PM
|
#1
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
WDL-OL
I have just uploaded my version of WDL/IPlug to github, which includes support for building RTAS, VST3, Standalone and IOS, plus numerous enhancements. Nearly all the features that I desired for WDL-CE are implemented. I will no longer be working on WDL-CE because progress was too slow. If anyone else wants to bring these changes into WDL-CE, be my guest.
The projects are set up how I like them, using the IDEs/OSs that I use. There is an entire build-chain for plugin projects that will make installers including all the various binaries/manual etc and a duplicate script which rapidly speeds up development time. You may well need to tweak certain paths etc to build on your system.
There are 13 example projects. Some of which still need to be finished. Parts of the code are based on other people's work which is credited (I hope) and has a similar license to the rest of WDL. The RTAS wrapper has been approved by AVID and does not breach their NDA. You will need to be a registered AVID developer with access to their SDK if you wish to build RTAS plugins.
It's all somewhat a work in progress - see the todo.txt, but has been tested with my Endless Series Plugin. There are some missing features that I haven't added simply because I didn't need them yet.
https://github.com/olilarkin/wdl-ol
To get started you'll want to read the file IPlugExamples/examples.rtf
enjoy!
oli
p.s please don't complain if the commits aren't organised enough for you to cherry-pick changes into your WDL. I'm careful when committing anything to WDL code other than IPlug (e.g. SWELL, LICE), because I know Cockos are actively developing them but as far as IPlug is concerned I just make commits with enough info for myself. Also I've been learning git as I go and made a couple of mistakes at some places which meant some commits were lost.
list of features/differences from stock IPlug...
- Win/OSX RTAS
- Win/OSX VST3
- Win/OSX Standalone app
- IOS 4.3 wrapper (gui handled by apple ui libraries, not IPlug's gui stuff)
- Win/OSX 64 bit support out of the box
- Better xcode/msvc projects using .xconfig/property sheets
- One-click build scripts to build all targets and installer including binaries/license/manual etc.
- Update version script (updates all version numbers based on value in resource.h)
- Easy project duplicator script
- Better example projects - lots of them
- Improved text rendering (multiple font colours, styles, font sizes)
- Text entry support on OSX
- Text entry doesn't flicker on windows
- Text entry character filtering
- Win/OSX Keyboard input handling
- Popup menus
- Simple bitmap monospace font renderer
- IGraphicsLice merged into IGraphics -> less passthrough code
- Fixed cocoa class name conflicts
- VST2 fxp/fxb saving/loading
- OSX file selector
- Better state saving (& chunks)
- Save Preset as bin64 blob for specifying presets in chunks based plugins
- Sidechain support for AU/RTAS/ *VST3*todo
- Complex installer scripts (iceberg and innosetup)
- Less compiler warnings
- ITimeInfo struct for ppq/tempo etc
- Fixes IPlugAU.cpp memory leaks
- Debugging setups in example projects for common hosts
- validate_audiounit script
gotchas...
- IControl text entry prompts are not enabled by default‚ set IControl::mDisablePrompt to false to enable
- IControl takes an IRect, not an address of an IRect (&IRECT) in constructor, keeps gcc happy
- IText default sizes may be different to stock IPlug
- Not tested to build for osx 10.4sdk or ppc‚ might work though
- JPEG resources are disabled by default
Last edited by olilarkin; 04-10-2012 at 10:34 AM.
|
|
|
11-21-2011, 12:09 AM
|
#2
|
Human being with feelings
Join Date: Jul 2008
Location: The Netherlands
Posts: 3,645
|
Cool, thanks for sharing.
|
|
|
11-21-2011, 12:50 AM
|
#3
|
Human being with feelings
Join Date: Jul 2008
Location: Tuscany (Italy)
Posts: 144
|
Thanks, much appreciated, today i'll try it!!!
|
|
|
11-21-2011, 02:24 AM
|
#4
|
Human being with feelings
Join Date: Mar 2009
Posts: 256
|
Fantastic Oli!
|
|
|
11-21-2011, 06:46 AM
|
#5
|
Human being with feelings
Join Date: Jul 2008
Location: Tuscany (Italy)
Posts: 144
|
Maybe i've found a small bug, the text entry is a bit too long
[img]hxxp://www.thepriest.site11.com/web_images/dpclat.gif[/img]
Vertical faders works better.
I'm on windows (XP 32 bit).
Last edited by Ollie; 01-25-2014 at 04:35 AM.
Reason: removed link due to Google malware warning
|
|
|
11-21-2011, 07:50 AM
|
#6
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
I added an argument to IControl::PromptUserInput() to specify exactly the area where the text entry should appear as an IRECT.
To use it you need to make a new IControl that inherits from IFaderControl and override OnMouseDown calling e.g. PromptUserInput(&mTextRECT). See the IPlugEffect example
If the rect is not specified PromptUserInput() attempts to put it in the middle of the control... but by the looks of things that might not be working correctly.
Last edited by olilarkin; 11-21-2011 at 08:01 AM.
|
|
|
09-02-2012, 07:41 AM
|
#7
|
Human being with feelings
Join Date: Aug 2011
Posts: 89
|
I have a slight bug to report for Debug builds: When IPlugBase::IPlugBase starts running it does a Trace thing and logs the time so it runs CurrentTime and at some point because I'm on a French system it proceeds to create a string containing "Paris, Madrid (heure d'été)" and does an isupper() on each character of this string and the assertion _ASSERTE((unsigned)(c + 1) <= 256) fails on 'é' characters because according to the debugger their original int value is -23. So every time I debug I have a few such errors to skip.
Either way I don't know what this is supposed to do (only copy the letters in caps??) but somehow it doesn't look right (from Log.cpp in CurrentTime()):
Code:
for (i = 0, j = 0; i < nZ; ++i)
{
if (isupper(cTZ[i]))
{
tz[j++] = cTZ[i];
}
}
tz[j] = '\0';
I'd wanna change it to something else but I'm not even sure what this does.
|
|
|
09-02-2012, 10:53 AM
|
#8
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
what OS does this happen on?
|
|
|
09-02-2012, 12:22 PM
|
#9
|
Human being with feelings
Join Date: Aug 2011
Posts: 89
|
Quote:
Originally Posted by olilarkin
what OS does this happen on?
|
Oh yeah I forgot this is on Windows (XP).
|
|
|
09-04-2012, 02:27 AM
|
#10
|
Human being with feelings
Join Date: Jul 2008
Location: The Netherlands
Posts: 3,645
|
Quote:
Originally Posted by A_SN
Either way I don't know what this is supposed to do (only copy the letters in caps??) but somehow it doesn't look right (from Log.cpp in CurrentTime()):
Code:
for (i = 0, j = 0; i < nZ; ++i)
{
if (isupper(cTZ[i]))
{
tz[j++] = cTZ[i];
}
}
tz[j] = '\0';
I'd wanna change it to something else but I'm not even sure what this does.
|
I guess it is supposed to abbreviate North American time zones, so e.g. "Eastern Standard Time" becomes "EST". However, in your case it would result in "PM"...
One solution would be to simply remove the time zone string:
Code:
diff --git a/WDL/IPlug/Log.cpp b/WDL/IPlug/Log.cpp
index 8d222ad..29466f2 100644
--- a/WDL/IPlug/Log.cpp
+++ b/WDL/IPlug/Log.cpp
@@ -2,7 +2,6 @@
#include "stdio.h"
#include "string.h"
#include "time.h"
-#include <fstream>
#ifdef _WIN32
#define LOGFILE "C:\\IPlugLog.txt"
@@ -137,22 +136,11 @@ const char* CurrentTime()
time_t t = time(0);
tm* pT = localtime(&t);
- char cStr[64];
- strftime(cStr, 64, "%Y%m%d %H:%M ", pT);
+ char cStr[32];
+ strftime(cStr, 32, "%Y%m%d %H:%M", pT);
- char cTZ[64], tz[64];
- strftime(cTZ, 64, "%Z", pT);
- int i, j, nZ = strlen(cTZ);
- for (i = 0, j = 0; i < nZ; ++i) {
- if (isupper(cTZ[i])) {
- tz[j++] = cTZ[i];
- }
- }
- tz[j] = '\0';
-
- static char sTimeStr[256];
+ static char sTimeStr[32];
strcpy(sTimeStr, cStr);
- strcat(sTimeStr, tz);
return sTimeStr;
}
Or, if you really want to include a time zone, you could change it to
±hhmm format:
Code:
diff --git a/WDL/IPlug/Log.cpp b/WDL/IPlug/Log.cpp
index 8d222ad..847c402 100644
--- a/WDL/IPlug/Log.cpp
+++ b/WDL/IPlug/Log.cpp
@@ -2,7 +2,6 @@
#include "stdio.h"
#include "string.h"
#include "time.h"
-#include <fstream>
#ifdef _WIN32
#define LOGFILE "C:\\IPlugLog.txt"
@@ -137,22 +136,27 @@ const char* CurrentTime()
time_t t = time(0);
tm* pT = localtime(&t);
- char cStr[64];
- strftime(cStr, 64, "%Y%m%d %H:%M ", pT);
+ char cStr[32];
+ strftime(cStr, 32, "%Y%m%d %H:%M ", pT);
- char cTZ[64], tz[64];
- strftime(cTZ, 64, "%Z", pT);
- int i, j, nZ = strlen(cTZ);
- for (i = 0, j = 0; i < nZ; ++i) {
- if (isupper(cTZ[i])) {
- tz[j++] = cTZ[i];
- }
+ int tz = 60 * pT->tm_hour + pT->tm_min;
+ int yday = pT->tm_yday;
+ pT = gmtime(&t);
+ tz -= 60 * pT->tm_hour + pT->tm_min;
+ yday -= pT->tm_yday;
+ if (yday != 0)
+ {
+ if (yday > 1) yday = -1;
+ else if (yday < -1) yday = 1;
+ tz += 24 * 60 * yday;
}
- tz[j] = '\0';
+ int i = strlen(cStr);
+ cStr[i++] = tz >= 0 ? '+' : '-';
+ if (tz < 0) tz = -tz;
+ sprintf(&cStr[i], "%02d%02d", tz / 60, tz % 60);
- static char sTimeStr[256];
+ static char sTimeStr[32];
strcpy(sTimeStr, cStr);
- strcat(sTimeStr, tz);
return sTimeStr;
}
Last edited by Tale; 09-04-2012 at 03:07 PM.
Reason: Removed ':' from time zone
|
|
|
09-13-2012, 07:27 PM
|
#11
|
Human being with feelings
Join Date: Apr 2009
Posts: 191
|
Hi guys,
I'm testing "next" branch, but I've a problem to compile my RTAS test plugin,
My dir structure:
project
->WDL
-->WDL-OL
-->OTHER-WDL
->PluginSRC
I've changed Paths_90_SDK.txt
but when I try to compile my plugin I get:
Code:
1>ClCompile:
1> IPlugGroup.cpp
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(69): error C2065: 'PLUG_MFR_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(70): error C2065: 'PLUG_NAME_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(82): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(83): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(84): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(85): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(86): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(87): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(88): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(89): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(90): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(91): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(92): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(93): error C2065: 'PLUG_TYPE_PT' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(110): error C2065: 'PLUG_TYPE_IDS' : undeclared identifier
1>..\WDL\wdl-ol\WDL\IPlug\RTAS\IPlugGroup.cpp(111): error C2065: 'PLUG_NAME_PT' : undeclared identifier
I've duplicated an example with py script to get RTAS project files, I've edited the project files to keep the right paths.
IPlugGroup can't include "Mac2Win.H" "IPlugGroup.h" "IPlugDigiView.h" "CEffectTypeAS.h" "CEffectTypeRTAS.h"
What is RTAS_INCLUDES, where is defined?
I am fighting for hours, but I can not make it work.
Thanks
|
|
|
09-14-2012, 12:14 AM
|
#12
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
two things...
1) i strongly recommend you don't mess around with the WDL-OL folder structure if you want an easy life. Put your projects in a folder at the same level as IPlugExamples, i.e.
WDL-OL/IPlugExamples
WDL-OL/WDL
WDL-OL/VST_SDK
WDL-OL/...
WDL-OL/MyPlugins/MyPlugin1
WDL-OL/MyPlugins/MyPlugin2
WDL-OL/MyPlugins/MyPlugin3
the folder names "WDL-OL" and "MyPlugins" could be anything, what matters is their relationship to the WDL and VST_SDK etc folders
you shouldn't need to modify Paths_90_SDK.txt or edit paths in the project files
2) Lots of things have changed on the next branch (which you should be using). Many of the things that have changed are to do with the folder structure of a WDL-OL IPlug project, so if you switch from the master branch to next branch you will need to re-duplicate the IPlugEffect Project and modify it to bring in your source code. You must pay attention to resource.h, because some things have changed there lately, i.e. PLUG_TYPE_DIGI became PLUG_TYPE_PT, hence the error you are seeing.
The folder structure is not going to change much in the near future and soon I will merge next branch to master, since I think I have fixed some outstanding issues. Just don't have much time at the moment!
|
|
|
09-14-2012, 11:09 AM
|
#13
|
Human being with feelings
Join Date: Apr 2009
Posts: 191
|
Thanks oli,
I have changed the resources.h (*_DIGI to *_PT) now it compiles.
protools loads my test plugin, but when I change any knob value it crash protools, probably something I'm doing wrong.
I will try to detect the problem.
Cheers!
|
|
|
04-07-2013, 03:01 AM
|
#14
|
Human being with feelings
Join Date: Mar 2013
Posts: 75
|
From XCode to VS2010
Hi Oli
I have some problems with OSX and Win releases.
When I take my project from OSX and want to compile it in Visual Studio 2010, it don't find my resource files. So I loaded the resources new in VS2010. That don't worked too.
Made a new project in VS2010, drop the source files in my project and load the resources new to my rc folder and everything works.
Is this happen normally or is something wrong in my setup?
I thought I can take the whole project from OSX, the iPlug does the win files already for me?
thanks
|
|
|
04-07-2013, 03:09 AM
|
#15
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
you need to edit the .rc file in a text editor to add your resource IDs for windows. check the examples
|
|
|
04-12-2013, 02:57 AM
|
#16
|
Human being with feelings
Join Date: Mar 2013
Posts: 75
|
Thank you. It's working.
Another thing: Can't I name my AU plugin started with a number?
Got an error in Audiounit linking:
Code:
Undefined symbols for architecture i386:
"_10BandEQ_Entry", referenced from:
-exported_symbol[s_list] command line option
"_10BandEQ_ViewEntry", referenced from:
-exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
|
|
|
04-12-2013, 03:32 AM
|
#17
|
Human being with feelings
Join Date: Nov 2009
Location: memory
Posts: 633
|
Has anyone else has encountered these minor issues?
• IPlugBase::GetHost() doesn't seem to work in VST3 (iirc, it always returns -1)
• IPlugBase::GetHostVersion() i couldn't make it work in any format.
• Is there a call to tell whether an OSX DAW is using Cocoa or Carbon graphics?
• in IGraphics.cpp, i set #define DEFAULT_FPS 30 (iirc the original default is 24). The result is that
my plug-in draws better in OSX, but not in Windows, where it appears to be drawing at a much slower framerate.
__________________
welcome to epoch
enjoy volt
|
|
|
04-12-2013, 04:10 AM
|
#18
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
cisdsp - you don't want your class names etc to begin with a number, so when duplicating call it something like TenBandEQ, then in resource.h change #define PLUG_NAME "10BandEQ"
cerberus -
GetHost() is not implemented in VST3. IIRC this is due to a limitation in the VST3 SDK
GetHostVersion() / GetHostVersionStr() have never worked reliably
IGraphics::GetGUIAPI() will tell you if it's carbon or cocoa on OSX.
re framerate, why not supply a different FPS argument when you create the gui on win/mac
|
|
|
08-16-2017, 06:49 AM
|
#19
|
Human being with feelings
Join Date: Jul 2017
Posts: 3
|
wdl-ol
I have tried this wdl-olm and can not get it to work on vs C++2010, 2015 or 2017. I have used RackaFX, Csounds, Juce, Synthedit, Synthmaker and Native Instruments with great success. Why is it so hard to compile and run this program "IEffects". I looks simple but it turns out to be a headache. Is there anyone here that can help me get the program running on any one of the APIs.
|
|
|
12-06-2017, 01:01 PM
|
#20
|
Human being with feelings
Join Date: Jul 2007
Posts: 5
|
Sorry for a basic question. I am new to Xcode and big IDEs and SDKs in general, so please excuse me if it is something straightforward that I am missing.
I can't get the examples to compile at all in Xcode 9.2, macOS 10.12.6. I followed all the readmes and when I try to build an App target of IPlugEffect, without modyfing anything apart from setting the BASE_SDK = macosx10.6 and DEPLOYMENT_TARGET= 10.6, I get this for target lice_32&64_intel:
Code:
error: There is no SDK with the name or path '/Volumes/Projects/Coding/plugin-development/wdl-ol/WDL/lice/macosx10.6'
I have the MacOSX10.6.sdk in
Code:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
Can you please help?
|
|
|
12-06-2017, 01:29 PM
|
#21
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
set BASE_SDK = macosx10.13
in common.xcconfig
|
|
|
12-07-2017, 11:05 AM
|
#22
|
Human being with feelings
Join Date: Jul 2007
Posts: 5
|
Thank you very much. The SDK not found error in lice is solved. I am now facing a few issues(20 to be exact) with what seems like the SDK itself?? Few examples are:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1/bits/stl_algobase.h:292:12: Too many template arguments for class template '__copy'
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1/bits/stl_algobase.h:182:9: Expected unqualified-id
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1/bits/stl_algobase.h:274:12: Explicit specialization of non-template struct '__copy'
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1/limits:290:21: Expected ';' at end of declaration list
Does this have to do with the chosen compiler?
|
|
|
12-07-2017, 11:11 AM
|
#23
|
Human being with feelings
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
|
hmm,
try
CLANG_CXX_LANGUAGE_STANDARD = c++11
CLANG_CXX_LIBRARY = libc++
|
|
|
Thread Tools |
|
Display Modes |
Hybrid Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 09:45 PM.
|