VST3 in Delphi
-
- KVRer
- Topic Starter
- 29 posts since 21 Jan, 2019
So, see subject.
I was wondering if I am the last (wo)man on earth still doing (hobby) VST development in Delphi... I guess I am, because I was not able to find anything related to VST3 / Pascal on the net. So, a few weeks ago I decided to create a VST3 wrapper for my VST2 plugins. You can see the result on my github page: https://github.com/RuudErmers/RMSVST3
Only tested in Reaper and only the basics.
It is a combined Processor/Controller and implements the following:
- Audio processing (synth or effect), two channel only.
- Midi CC processing
- Parameter processing
- Presets
- Tempo / Playstate.
An example Audio Gain which expands the code to any plugin (just a few lines of code) is available.
Anyone interested in something like this? If so, I would like to expand and improve the quality of the code. But, .. maybe ... I am the only one
I was wondering if I am the last (wo)man on earth still doing (hobby) VST development in Delphi... I guess I am, because I was not able to find anything related to VST3 / Pascal on the net. So, a few weeks ago I decided to create a VST3 wrapper for my VST2 plugins. You can see the result on my github page: https://github.com/RuudErmers/RMSVST3
Only tested in Reaper and only the basics.
It is a combined Processor/Controller and implements the following:
- Audio processing (synth or effect), two channel only.
- Midi CC processing
- Parameter processing
- Presets
- Tempo / Playstate.
An example Audio Gain which expands the code to any plugin (just a few lines of code) is available.
Anyone interested in something like this? If so, I would like to expand and improve the quality of the code. But, .. maybe ... I am the only one
-
- KVRAF
- 8388 posts since 11 Apr, 2003 from back on the hillside again - but now with a garden!
I think tobybear or Christian Budde looked at it some years ago when VST3 first came out, but at the time there were some issues with it, as I recall.. I could be wrong.
When I was doing BetaBugs (RIP) in the mid 00s all my plugs were Delphi based, but I work pretty much all in C++ as I can target both Mac as well as Win. Last I was doing DVST coding, Lazarus/FreePascal weren't exporting plugin UIs properly for Win, let alone Mac, it was a terrible mess. When the first version of Delphi targeting native Mac came out in 2010/11 I was hopeful for well ordered UI control for Mac, but the dylibs it created weren't up to it at the time for whatever reason. It just wasn't handling the UI handles correctly, FireMonkey was getting in the way when lower level access to the pointers was needed- I hope this has been updated!
However, I'm glad to see you are doing this, and I hope it all goes well for you
When I was doing BetaBugs (RIP) in the mid 00s all my plugs were Delphi based, but I work pretty much all in C++ as I can target both Mac as well as Win. Last I was doing DVST coding, Lazarus/FreePascal weren't exporting plugin UIs properly for Win, let alone Mac, it was a terrible mess. When the first version of Delphi targeting native Mac came out in 2010/11 I was hopeful for well ordered UI control for Mac, but the dylibs it created weren't up to it at the time for whatever reason. It just wasn't handling the UI handles correctly, FireMonkey was getting in the way when lower level access to the pointers was needed- I hope this has been updated!
However, I'm glad to see you are doing this, and I hope it all goes well for you
-
- KVRer
- Topic Starter
- 29 posts since 21 Jan, 2019
Duncan, thanks for your reply. I was waiting for all other Delphi fanatics, but I guess there aren't (m)any left. Too bad, but understandable. Creating this VST3 interface was fun because there are some tricky things with multiple inheritance and COM stuff I knew not much about. But I guess it will not be the product of the year. Too bad as Delphi right now is very stable and has a nice Community Edition (finally).
-
HrastProgrammer HrastProgrammer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=159519
- KVRist
- 50 posts since 10 Sep, 2007 from CPU
Great work! Thank you!
I am one of the rare fanatics who use Delphi and FreePascal/Lazarus for DSP-ing and VST-ing. My Tranzistow and Diodow synthesizers were initially developed in Delphi 7 (32-bit only), later ported to XE7 (for both 32-bit and 64-bit versions) and Lazarus (Windows/Linux, 32/64-bit). The complete audio engine is 100% assembler using SSE3 and AVX2 to gain maximum performance while "high-level" functions (GUI, patch management, etc) are Pascal. I also used Lazarus to port Diodow to Raspberry Pi3 and ARM/NEON assembler.
I will certainly consider this if I ever decide to port Tranzistow or Diodow to VST3 ...
Thanks again.
I am one of the rare fanatics who use Delphi and FreePascal/Lazarus for DSP-ing and VST-ing. My Tranzistow and Diodow synthesizers were initially developed in Delphi 7 (32-bit only), later ported to XE7 (for both 32-bit and 64-bit versions) and Lazarus (Windows/Linux, 32/64-bit). The complete audio engine is 100% assembler using SSE3 and AVX2 to gain maximum performance while "high-level" functions (GUI, patch management, etc) are Pascal. I also used Lazarus to port Diodow to Raspberry Pi3 and ARM/NEON assembler.
I will certainly consider this if I ever decide to port Tranzistow or Diodow to VST3 ...
Thanks again.
-
- KVRAF
- 1765 posts since 10 Jan, 2018
As someone who wrote an MP3 player in Delphi 7 around 2001 it's great to see it still alive for deeper audio work.
The Player did have some standout features I must admit and was extremely fast even when searching across multiple tags with a database of 30K songs.
The same search on other major players at the time that I tested either crashed or was about 100 times slower making them unusable.
I have a more recent version of Delphi but it's so different than V7 and I'm so out of the loop that converting it would be too much I think.
The Player did have some standout features I must admit and was extremely fast even when searching across multiple tags with a database of 30K songs.
The same search on other major players at the time that I tested either crashed or was about 100 times slower making them unusable.
I have a more recent version of Delphi but it's so different than V7 and I'm so out of the loop that converting it would be too much I think.
- KVRian
- 872 posts since 6 Aug, 2005 from England
FL Studio is written in Delphi.
https://www.embarcadero.com/case-study/ ... case-study
https://www.embarcadero.com/case-study/ ... case-study
Dave Hoskins. http://www.quikquak.com
-
- KVRist
- 489 posts since 24 Nov, 2008
I am just starting to research making a plugin version of ChordwarePA (Delphi Pascal). So yeah, I'm interested. And thanks for the work you do and share.
http://www.chordwarepa.com/index.html
Steve
http://www.chordwarepa.com/index.html
Steve
- KVRist
- 338 posts since 17 Feb, 2013 from Sayan Mountains, Siberia
You're not alone, I'm such a Delphi fanatic. I also wrote my PolyGAS synthesizer on it.
I am pleased to test your engine VST3.
¤ stone-voices.ru ¤
- KVRist
- 338 posts since 17 Feb, 2013 from Sayan Mountains, Siberia
Your VST3 example is not compiled.Eduur wrote: ↑Tue Feb 05, 2019 5:39 pm You can see the result on my github page: https://github.com/RuudErmers/RMSVST3
Here are the errors:
Code: Select all
Checking project dependencies...
Compiling RMSMyVST3.dproj (Debug, Win32)
brcc32 command line for "RMSMyVST3.vrc"
c:\program files (x86)\embarcadero\studio\16.0\bin\cgrc.exe -c65001 RMSMyVST3.vrc -foRMSMyVST3.res
dcc command line for "RMSMyVST3.dpr"
RMSMyVST3.dpr
[dcc32 Fatal Error] UCPluginFactory.pas(29): F2613 Unit 'CodeSiteLogging' not found.
Failed
Elapsed time: 00:00:01.5
¤ stone-voices.ru ¤
-
- KVRian
- 880 posts since 11 Jun, 2001 from Munich, Germany
Glad to see that good old Delphi/Lazarus/Pascal still gets some love! Keep up the good work!
- KVRist
- 338 posts since 17 Feb, 2013 from Sayan Mountains, Siberia
- KVRist
- 338 posts since 17 Feb, 2013 from Sayan Mountains, Siberia
In general, we managed to compile your code after what is called “танцы с бубном” in Russia (dancing with a shaman drum).
What version of Delphi did you use for the compilation?
Fixed a lot of errors before the plugin was compiled:
Ugly decorated code. As Russian programmers say "хуёвый код" (bad code).
In each module, you have a link to a non-existent CodeSite module.
Do not be lazy and correct this error by using conditional statements.
The same applies to the used section:
Compiled plugin does not work in FL Studio 12.
I’ll take a close look at the translation of your headlines from C to Pascal. The first thing that already caught my eye was your use of string instead of AnsiString.
What version of Delphi did you use for the compilation?
Fixed a lot of errors before the plugin was compiled:
Code: Select all
[dcc32 Error] UCEditController.pas(106): E2003 Undeclared identifier: 'CodeSite'
[dcc32 Error] UUIDHelper.pas(27): E2250 There is no overloaded version of 'IntToHex' that can be called with these arguments
[dcc32 Error] UCEditController.pas(75): E2010 Incompatible types: 'Pointer' and 'IPlugView'
In each module, you have a link to a non-existent CodeSite module.
Do not be lazy and correct this error by using conditional statements.
Code: Select all
{$IFDEF CodeSite}
CodeSite.Send('Bla-Bla-Bla');
{$ENDIF}
Code: Select all
{$IFDEF CodeSite}
uses CodeSiteLogging;
{$ENDIF}
I’ll take a close look at the translation of your headlines from C to Pascal. The first thing that already caught my eye was your use of string instead of AnsiString.
¤ stone-voices.ru ¤
-
- KVRer
- Topic Starter
- 29 posts since 21 Jan, 2019
Hi Vasyan, thanks for your reply and remarks!
I used the almost latest Community Edition XE10.2 RIO for compilation.
As I stated in the readme you should install CodeSite Express from the GetIt repositery, you won't regret it.
I don't get the errors you get, in fact everything compiles cleanly. What version are you using?
On AnsiStrings/string. String is the default preferred way of working with strings in Delphi. The AnsiString construction is only needed because the VST3 interface requires it.
I did update the code yesterday on github, with a new small synth and also FruityPlug output. The VST3 is running in FL Studio.
BTW. I looked at your PolyGAS and it looks and sounds great!
I used the almost latest Community Edition XE10.2 RIO for compilation.
As I stated in the readme you should install CodeSite Express from the GetIt repositery, you won't regret it.
I don't get the errors you get, in fact everything compiles cleanly. What version are you using?
On AnsiStrings/string. String is the default preferred way of working with strings in Delphi. The AnsiString construction is only needed because the VST3 interface requires it.
I did update the code yesterday on github, with a new small synth and also FruityPlug output. The VST3 is running in FL Studio.
BTW. I looked at your PolyGAS and it looks and sounds great!