Old 05-16-2017, 02:46 PM   #1
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default Matching VST param curve for tempo drifting solution

My big frustration with delay plugs is that I like to sync to tempo, but have them drift off a little - which most delay plugs don't support. Hard syncing to tempo is super dull to me. I can set time values manually, but I want the drifts to follow tempo changes perfectly (so I never have to set them manually again if I change or automate tempo later).

I'm trying to solve it via JS. I've written the code that reads the playback tempo, offers various drift adjustments, and spits out a modified millisecond value that the delay plugin should use.

I now want to modulate the delay's 'Time' parameter with this value - but parameter modulation is linear, while the plugs typically use a non-linear mapping on their dials. So that would have to be reverse-engineered for every delay to apply my millisecond value correctly!

Reaper however seems to know that mapping, as it displays the actual millisecond value in automation lanes for the delays I've tried (Echoboy, Guitar Rig 5).

Can a JS plug get access to this mapping? Or set the millisecond value directly at the plugin somehow so that Reaper (or the plug) take care of the mapping?
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 05-16-2017 at 02:51 PM.
DeBased is offline   Reply With Quote
Old 05-16-2017, 02:49 PM   #2
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

An even better approach would be if Reaper could 'lie' to plugins by reporting a modified version of the actual project tempo. That way ALL tempo-syncing plugins would be sync-with-drift capable automatically.

There's probably no way to do that for 3rd party devs? But it would be a very cool feature to build straight into Reaper.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-16-2017, 03:51 PM   #3
junh1024
Human being with feelings
 
Join Date: Feb 2014
Posts: 240
Default

Output the compensated value as a slider & use parameter modluation to link it with any delay plug JS VST etc.

OR use JS global variables & edit an existing delay JS (can get messy)
junh1024 is offline   Reply With Quote
Old 05-16-2017, 05:12 PM   #4
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by junh1024 View Post
Output the compensated value as a slider & use parameter modluation to link it with any delay plug JS VST etc.
I have, the problem is that the VST parameter is typically non-linear (to make the UI control nicer to use), so my linear millisecond value does not map correctly to the VST parameter. You would have to reverse engineer the non-linear shape of each plug's delay param, as they all use different curves.

(EDIT: done, see below).
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 05-18-2017 at 11:35 AM.
DeBased is offline   Reply With Quote
Old 05-16-2017, 09:25 PM   #5
junh1024
Human being with feelings
 
Join Date: Feb 2014
Posts: 240
Default

VST mcfx_delay seems to be linear (also hint: use the wet knob)

Last edited by junh1024; 05-16-2017 at 09:36 PM.
junh1024 is offline   Reply With Quote
Old 05-17-2017, 01:52 AM   #6
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by junh1024 View Post
VST mcfx_delay seems to be linear (also hint: use the wet knob)
I need this to work with my preferred delay VST, as they're more than basic delays.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-17-2017, 07:56 AM   #7
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

The problem is that parameter linking modulation is always linear 0.0-1.0. Even if you could solve non-linear parameter shapes, you also need to know the millisecond value range of the param, which is again different for every plugin.

But Reaper _does_ understand all that for the delays I've tested, it shows actual millisecond values in automation lanes!



I'm guessing JS doesn't have access to this deeper understanding of VST parameters? I'm looking for a more universal solution that will work with many plugins (and happy to share it once it works), so having that param understanding is crucial. If JS can't get it, is it available in Reascript/C++?

A second problem is that one of the delays I need this for, Echoboy, doesn't respond to parameter modulation at all on its time parameter, even though it responds to automation. Anyone know why?
Attached Images
File Type: jpg ms.jpg (55.1 KB, 688 views)
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-17-2017, 08:44 AM   #8
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

... it looks like Reascript can do what I need, I'll report back if it works.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-17-2017, 08:57 AM   #9
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

is something do-able with the api TrackFX_ stuff?
jrk is offline   Reply With Quote
Old 05-17-2017, 09:02 AM   #10
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by jrk View Post
is something do-able with the api TrackFX_ stuff?
Yes I think so. It has TrackFX_SetParamNormalized() (which I assume is the usual linear 0.0-1.0) but also SetParam() (which I'm hoping is the actual millisecond value, mapped correctly).

I've done lots of JS (and general C++) but no Reascript, so I'm just figuring out the basics...
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-17-2017, 09:35 AM   #11
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Make it work - I've got a use for something like this :-)
jrk is offline   Reply With Quote
Old 05-17-2017, 12:29 PM   #12
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Unfortunately SetParam and SetParamNormalized() both do the same thing with the plugs I've tried - they both use 0.0 to 1.0, not actual milliseconds. Is there a way to set params based on Reaper's knowledge of their units and ranges?

(BTW, the Echoboy Time param modulation problem was due to them calling the actual dial 'Note', as it adjusts both the Note value in Note mode and the millisecond value in Time mode. To modulate the time you have to touch the up/down arrows next to the time readout, that control is called 'Time'.)
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-18-2017, 01:14 AM   #13
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

what does TrackFX_GetParamEx do?
jrk is offline   Reply With Quote
Old 05-18-2017, 06:23 AM   #14
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Echoboy: returns min = 0, max = 1, mid = 0 (strangely).

The theory is that the VST supplies the msec readout only as a text string for DAWs to display in their automation, but doesn't actually allow setting anything other than 0-1. Haven't verified but it sounds likely.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 05-18-2017 at 06:29 AM.
DeBased is offline   Reply With Quote
Old 05-18-2017, 06:38 AM   #15
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

I've posted a FR for per-plugin instance Tempo modification, which would make this work for all syncing plugs right inside Reaper.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-18-2017, 10:44 AM   #16
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

In the meantime I've reverse-engineered Echoboy's time param, if anybody wants to try it out.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-18-2017, 11:35 AM   #17
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

.. now also supports ReaDelay and Guitar Rig's QuadDelay.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased is offline   Reply With Quote
Old 05-19-2017, 04:44 AM   #18
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Quote:
Originally Posted by DeBased View Post
if anybody wants to try it out.
Yes. Where do I find it?
jrk is offline   Reply With Quote
Old 05-19-2017, 08:41 AM   #19
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by jrk View Post
Yes. Where do I find it?
Over here: http://forum.cockos.com/showthread.php?p=1846538
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)

Last edited by DeBased; 05-19-2017 at 09:07 AM.
DeBased is offline   Reply With Quote
Old 05-21-2017, 10:37 AM   #20
jrk
Human being with feelings
 
Join Date: Aug 2015
Posts: 2,969
Default

Pity TrackFX_GetParamEx is no good. I believe you only need 3 points to fit (or interpolate) an exponential curve (which is what these curves are going to be, probably) - why GetParamEx should have been useful.
jrk is offline   Reply With Quote
Old 05-29-2017, 07:36 AM   #21
DeBased
Human being with feelings
 
DeBased's Avatar
 
Join Date: Jun 2010
Location: UK
Posts: 412
Default

Quote:
Originally Posted by jrk View Post
Pity TrackFX_GetParamEx is no good. I believe you only need 3 points to fit (or interpolate) an exponential curve (which is what these curves are going to be, probably) - why GetParamEx should have been useful.
Yeah. Did you try the JS?

I just wanted to 'drift' the BPM param of another SoundToys plug, 'Tremolator', and that's even easier as it's linear (0-1 mod value = new_tempo - 30 / 210). Also works identically in Echoboy. Setting the BPM rather than time is actually cleaner as you can set the whole beats/notes thing in the plugin (and change at any time) and not worry about it in the script.
__________________
Reaper5, Win10Pro, Ryzen 5950x/64GB, RME UFX/BabyFace Pro, Behringer X-Touch
- my true 'global' (project-tab independent) Send/Receive FX
- my Behringer X-touch mods + XCtrl mode for CSI (coloured scribble strips!)
DeBased 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 06:28 AM.


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