COCKOS
CONFEDERATED FORUMS
Cockos : REAPER : NINJAM : Forums
Forum Home : Register : FAQ : Members List : Search :
Old 11-20-2011, 02:59 PM   #1
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default 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
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook

Last edited by olilarkin; 04-10-2012 at 10:34 AM.
olilarkin is offline   Reply With Quote
Old 11-21-2011, 12:09 AM   #2
Tale
Human being with feelings
 
Tale's Avatar
 
Join Date: Jul 2008
Location: The Netherlands
Posts: 3,645
Default

Cool, thanks for sharing.
Tale is offline   Reply With Quote
Old 11-21-2011, 12:50 AM   #3
ThePriest
Human being with feelings
 
Join Date: Jul 2008
Location: Tuscany (Italy)
Posts: 144
Default

Thanks, much appreciated, today i'll try it!!!
ThePriest is offline   Reply With Quote
Old 11-21-2011, 02:24 AM   #4
cc_
Human being with feelings
 
Join Date: Mar 2009
Posts: 256
Default

Fantastic Oli!
cc_ is offline   Reply With Quote
Old 11-21-2011, 06:46 AM   #5
ThePriest
Human being with feelings
 
Join Date: Jul 2008
Location: Tuscany (Italy)
Posts: 144
Default

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
ThePriest is offline   Reply With Quote
Old 11-21-2011, 07:50 AM   #6
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

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.
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook

Last edited by olilarkin; 11-21-2011 at 08:01 AM.
olilarkin is offline   Reply With Quote
Old 09-02-2012, 07:41 AM   #7
A_SN
Human being with feelings
 
Join Date: Aug 2011
Posts: 89
Default

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.
A_SN is offline   Reply With Quote
Old 09-02-2012, 10:53 AM   #8
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

what OS does this happen on?
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Old 09-02-2012, 12:22 PM   #9
A_SN
Human being with feelings
 
Join Date: Aug 2011
Posts: 89
Default

Quote:
Originally Posted by olilarkin View Post
what OS does this happen on?
Oh yeah I forgot this is on Windows (XP).
A_SN is offline   Reply With Quote
Old 09-04-2012, 02:27 AM   #10
Tale
Human being with feelings
 
Tale's Avatar
 
Join Date: Jul 2008
Location: The Netherlands
Posts: 3,645
Default

Quote:
Originally Posted by A_SN View Post
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
Tale is offline   Reply With Quote
Old 09-13-2012, 07:27 PM   #11
pylorca
Human being with feelings
 
Join Date: Apr 2009
Posts: 191
Default

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
pylorca is offline   Reply With Quote
Old 09-14-2012, 12:14 AM   #12
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

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!
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Old 09-14-2012, 11:09 AM   #13
pylorca
Human being with feelings
 
Join Date: Apr 2009
Posts: 191
Default

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!
pylorca is offline   Reply With Quote
Old 04-07-2013, 03:01 AM   #14
cisdsp
Human being with feelings
 
cisdsp's Avatar
 
Join Date: Mar 2013
Posts: 75
Default 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
__________________
Website: CIS DSP Factory
cisdsp is offline   Reply With Quote
Old 04-07-2013, 03:09 AM   #15
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

you need to edit the .rc file in a text editor to add your resource IDs for windows. check the examples
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Old 04-12-2013, 02:57 AM   #16
cisdsp
Human being with feelings
 
cisdsp's Avatar
 
Join Date: Mar 2013
Posts: 75
Default

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
__________________
Website: CIS DSP Factory
cisdsp is offline   Reply With Quote
Old 04-12-2013, 03:32 AM   #17
cerberus
Human being with feelings
 
Join Date: Nov 2009
Location: memory
Posts: 633
Default

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
cerberus is offline   Reply With Quote
Old 04-12-2013, 04:10 AM   #18
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

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
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Old 08-16-2017, 06:49 AM   #19
GuitarLord
Human being with feelings
 
Join Date: Jul 2017
Posts: 3
Default 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.
GuitarLord is offline   Reply With Quote
Old 12-06-2017, 01:01 PM   #20
Vyedmic
Human being with feelings
 
Join Date: Jul 2007
Posts: 5
Default

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?
Vyedmic is offline   Reply With Quote
Old 12-06-2017, 01:29 PM   #21
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

set BASE_SDK = macosx10.13

in common.xcconfig
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Old 12-07-2017, 11:05 AM   #22
Vyedmic
Human being with feelings
 
Join Date: Jul 2007
Posts: 5
Default

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?
Vyedmic is offline   Reply With Quote
Old 12-07-2017, 11:11 AM   #23
olilarkin
Human being with feelings
 
Join Date: Apr 2009
Location: Berlin, Germany
Posts: 1,248
Default

hmm,

try

CLANG_CXX_LANGUAGE_STANDARD = c++11
CLANG_CXX_LIBRARY = libc++
__________________
VirtualCZ | Endless Series | iPlug2 | Linkedin | Facebook
olilarkin is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 08:20 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.