Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Oct 20, 2018 18:38:53 GMT 1
P.S. Jeff made a small tweak to improve the precision of the timing(SE side not module side) a couple of weeks ago, it shouldn't in theory require any code re-writes, but ya never know. Change is stated in changelog.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Oct 20, 2018 18:16:16 GMT 1
I actually didn't look at your prefab the first time, people not understanding Delay2 is super common, there are 2 reverbs in your prefab, the bottom Moore reverb wasn't tuned at all(all delay times were the same), feedback on all the allpasses where 8 - which is on the high side(try 6.5), your 1 pole lowpass filters are set to octaves and @5 Volts so 0.44kHz which is low too, change to 1 Volt/kHz and start with a value like 3 Volts aka 3kHz... so it's hard to say what is wrong. Also use 32bit SE (so that you can load 3rd party VSTs), and check that your allpasses are actually allpass. If you put white noise through it and look at with frequency analyzer, the reponse should be flat. Also note that the Moore reverb comes from an academic paper from the 70s so it's not gonna sound like a good commercial reverb.
As for my module, I did realize that the ratio defaults to 5 instead of 0.5 (oops), but that in itself shouldn't cause a crash( but set it lower than 1 if using), I tested in SE1.4 64bit and SE1.3 32bit - works fine here, does all the modules like the filters crash? Or only the reverb?
Pic of it processing a saw-wave:
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Oct 17, 2018 21:26:21 GMT 1
The Delay2 module is a bit weird, the "Modulation" pin is the normalized time between 0-10Volts. Do this: Click Delay2, on the right pane you'll see a hidden pin called "Delay Time (sec)" set this to 0.1. Now you have a 100ms delay, to get 76ms, put the modulation pin on 7.6Volts. 10 Volts "Modulation" equals the maximum delay time set by the "Delay Time (sec)" parameter. SE has a reverb module under "Effects" in the navigation pane, it's based on the Moore design, but doesn't handle different samplerates other that 44.1kHz well. I also have a Module called "TD_ReverbHall" based on a highly modified and time variant FDN if you are curious.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Aug 28, 2018 6:15:49 GMT 1
I read your post like my behind. If you would like to make an EQ (32bit/64bit), you can either use the Rob Herder(RH) Biquad or my(TimeDomain Modules) EQ_A or EQ_B modules, both support 64 bit. Website links are on the SynthEdit page. www.synthedit.com/modules/
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Aug 27, 2018 14:12:10 GMT 1
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Aug 11, 2018 21:36:35 GMT 1
Thanks Andrew! Will definitely try going with Ms Visual instead, got to try MinGW and CodeBlocks as advised on synthedit.com . Also thanks for the C++ material, I'm not new to the material, but I also wouldn't consider myself a coder at all. I did buy both books from Will Pirkle that cover designing audio plugins and effects in C++ specifically so I definitely am aiming to go that route. Time however is always short and I hope to save a lot of time using SynthEdit as a platform getting familiar with the building blocks and signal types and values in a visual way. Downloading the latest community edition of Visual and will give it a go, thanks again!
O, and btw, as a lot of links to older mods are dead, if you do happen to stumble on an existing mod (preferably a recent one 64-bit) that achieves what I'm going for with the host playback location I'd be happy to know! Just remember that SE is 19 years old so some of it is examples may not load, generally stuff made with SE1.1 and above should load okay(made about 2008/2009 or after if my memory isn't failing me), I would suggest to steer clear of any GUI/sub-control stuff as that might give headaches. Been a SE user for just over a decade myself, but only coding for 4 years and I generally suck at it - basically just learned c++ purely to use SDK3 to get around some of the SE limitations(i.e. feedback delay). DSP coding is very complicated, so be prepared to fail multiple times before you succeed. I've sometimes taken up to 2 years just to get some of my modules/code working correctly, and some are still 'broken'...3 years and counting.
I'd suggest to first mess around with simpler modules, i.e. take the gain example and make it stereo, check out how 'sleep mode' works(filter examples - use the Diagnostic 'Monitor' module in SE to see if it sleeps properly), make an LFO(super easy) - then make a on/off switch(not as easy as you might think) etc etc. Achieving small goals will help to learn the SDK as well as SE, and will give you the courage and hopefully the patience to implement more advanced stuff via the SDK.
I'd consider a 'host playback positioning' module to be a bit above beginner level. That being said, I don't really understand why you need it though. For a super simple bread n butter Trancegate, you can start with a BPM Clock4, Level Adjust and a Step Counter2 module like so:
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Aug 11, 2018 20:34:07 GMT 1
Steps I did: - Install latest Visual Studio community edition, with option: Desktop Development with C++, Windows XP support fot C++, C++/CLI support, Visual C++ MFC for x86 and x64, and VC++ 2015,3 v14.00 (v140) toolset for desktop. - Made sure SE SDK files are available for build - Open project BPMClock3 , change the IDs in the xml files to make sure SynthEdit does not cry about duplicate naming. - Build - Load the sem in synthedit, open the BPM Clock4b (I edited the ID to 4b) plugin, connect the Pulse Out to a volt meter, run it and crash..
Seems like you've skipped a step, I've made this very mistake a couple of times myself. You also need to change the ID in the .cpp. So for your example, in the .xml ID = "4b". in .cpp REGISTER_PLUGIN2(BpmClock4, L"4b");
FYI, as far as I understand it there is a reason for the two IDs(that should be exatly the same - c++ is CaSe sensitive): the xml registers the pins for SE the program, this gets stripped out when you export as VST, kind of like copy protectionfor your modules. The REGISTER_PLUGIN2 or REGISTER_PLUGIN method registers with the audio 'factory'(in SDK speak), which is the audio engine.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Aug 10, 2018 17:53:08 GMT 1
I highly recommend that you rather use MS Visual as a compiler/IDE - it's free and all the SDK3 examples should compile right off the bat. With MinGW it depends on what version you have, and if you have a problem you generally need to dumpster-dive through it's 400+ page manual to find a fix sometimes i.e. not recommended for beginners. And if you are wondering - the compiled code uses about the same amount of CPU on average.
I also recommend brushing up on basic algebra and c++ if you intent to code a module like that, keeping time in DAWs is a real PITA, it all depends on PPQN and then there is a bunch of corner cases because finite systems(like PCs) have precision issues representing float numbers which will bite you in the behind if you don't keep track of the error. It's actually pretty tricky.
If you don't know c++, I'd go through this first.
If you believe your math/c++ knowledge is sufficient, check out the BPM Clock4 example in the SDK3 files, note that it is actually under "BPMClock3" folder, some of the basic math is already in there.
G'd Luck!
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 6, 2018 20:56:16 GMT 1
You need a VCA module and an envelope. That picture you posted will keep all voices active(which it shouldn't), hence the loud signal. There is a great beginner's tutorial in the SE help file that learns the basics.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 6, 2018 20:49:55 GMT 1
There is actually quite a bit of 64bit modules already(compared to 32bit), just not a lot of GUI stuff 'cause that part of the SDK(which module developers use) is in a bit of a constant beta(alongside SE). Just in case you do not have it, check out RoyTech modules - it's in the now deprecated yahoo group under files, really useful stuff. That being said, once you really get into SE, you don't even need that many modules to do something cool, just imagination. I've seen some really crazy jaw-dropping stuff being done with stock modules through the years. P.S. I've been using SE over a decade(only coding for 4 years though), and I've only ever made 1 synth myself too I'm an effects guy, hence all the stereo stuff/phasers/filters with slightly different characters.
P.P.S. Come hell or high water - the pack will be updated by the end of this month.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 6, 2018 20:31:55 GMT 1
Hey Andrew, time is indeed a problem for me atm. Sure, add the balance module to your pack. My vacation starts soon tho! Cool beans, consider it done. Not on vacation but got a deadline myself - end of this month, i.e. before my studies begin again. Looking forward to the ports of the Daz modules!
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 4, 2018 19:52:09 GMT 1
Nice to see. Question about the envelope module. Are the shape pins for adjusting curves? Yip, adjusts shape from log to linear.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 4, 2018 18:36:43 GMT 1
The module pack update is taking longer than expected , but I have been making some headway...
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jul 4, 2018 18:02:48 GMT 1
@rob - I can add a Stereo Balance Control module to my pack if you don't have enough time on your hands, just give me a shout.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 23, 2018 19:33:50 GMT 1
After checking it out, that taylor sin/cos approximation is a bit too inaccurate for the range it is used(0 to PI/2), here is my new version:
float taylorSin (float x) { float x2 = x*x; return (1.f/5040.f)*x*(x2*(x2*(42.0f-1.0f*x2)-840.0f)+5040.0f); } float taylorCos(float x) { float x2 = x*x; return (1.f/720.f)*(x2*(x2*(30.0f-1.0f*x2)-360.0f)+720.0f); }
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 23, 2018 11:50:37 GMT 1
@rob - here is sqrt taper example, maybe it will clarify some things:
float balance = Clip02(balanceKnob+1.f);//assume -1 +1 balanceKnob range - clip internal range to 0-2 to prevent user-error i.e. sqrt(negative number) = NaN
if (balance <= 1.f) { LevelLeft = 1.f; LevelRight = sqrtf(balance); } else { LevelLeft = sqrtf(1.f-(balance - 1.f));//subtract 1 to get in 0-1 range LevelRight = 1.f; }
Edit: Here is the panning version (from my Stereo panning module that I'm coding today ):
if (pan >= 0.f)//pan in -1 +1 range inernally { Left = inputL * sqrtf(1.f-pan);//lower side Right = inputR + inputL * sqrtf(pan);//blend side } else { Left = inputL + inputR * sqrtf(-pan); Right = inputR * sqrtf(1.f+pan); }
Note: in the balance I'm switching/branching only the Left/Right Levels, in the pan version I'm branching everything.
Cheers
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 23, 2018 10:26:40 GMT 1
I agree with Dave - centre should be 0dB(it's like that in my DAW). Think you can just modify the code posted "simplest version - linear balance" up above.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 21, 2018 18:11:27 GMT 1
Well i dont want to annoy you and i can totally accept a "not gonna happen". But VST2 does support Midi output. Ist it really important that Steinberg dropped vst2 support? I program midi vst2 plugins myself and they are working perfectly fine. If you dont believe me there are lots of midi plugins out there (vst2, and midi goes in and comes out). But you said that vst2 synthedid plugins (in 64bit atleast) are wrapped vst3 plugins. So that would need a serious rewrite to change. i accept that. I actually dont need midi plugins. I Just want to make plugins that can communicate with my own vst software plugins. I wanted to do it over midi but there are propably different ways. I could let them communicate over parameters. Surely there are also more classical ways to let two programs talk to each other instantly on the same computer... I mean when i understand it correctly i can integrate custom dlls in synthedit synths. So there should be a way to solve this.
Nothing is impossible given a lot of time, effort and/or money. You can theoretically bypass the DAW and write to the OS and then 'loop-back' the data - would be super-tricky because there might be timing and thread-safety issues. If I could take a guess at the time/money involved, also taking into account the complexity, I would say 3months or 5k to 30k USD for a professional to do it or you to do it yourself with the SDK.
My hope is to just skip all of the above and hope that Steinberg fixes their issues, especially considering the new MIDI-CI standard that is about to be released, would be a shame for plug-ins to miss out on that action.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 21, 2018 17:55:33 GMT 1
Random note: Got my EQ filters done today, still can't beat the old Biquad for efficiency when not modulating: Not Modulating: RH Biquad(Peak): 0.082% TD EQ A(Peak) : 0.112% Modulating: RH Biquad(Peak): 0.349% TD EQ A(Peak) : 0.213%
Oh, you do have the source right? Good that you've got better performance while modulating. My note: Am such a noob, al these years the biquad source from Earlevel.com was supereasy to include in SE as is. Don't know what I was thinking back then, but now have a test module with biquad as an object.
Nah, don't have the source code around, just did a quick side by side test with the modules. I'm actually using some of Nigel Redmon's(Earlevel) envelope generator code in my upcoming modules, not his code 100% but the math part, which is quite brilliant.
|
|
Andrew
Developer
Posts: 110
Posts: 110
|
Post by Andrew on Jun 20, 2018 16:35:53 GMT 1
Nope and it has nothing to do with SE actually, the Steinberg VST SDK does not support it so Jeff can't implement it. Even if an SE plug could send proper MIDI - it would crash the DAW because it is not supported. Remember that VST are plug-ins not applications, so that have to abide by a certain set of rules. And in this case, Steinberg makes the rules. P.S. Steinberg also officially dropped support for VST2 SDK support.
|
|