Need Some Testers For CSS VST/AU Delay Compensation Solution

Dewdman42

Senior Member
good point. The VST could be compiled as AU-MFX pretty easily if he's doing AU anyway. I'm not sure whether PDC is handled through those midi plugin slots though, quite possibly not.
 
OP
calebfaith

calebfaith

Active Member
Logic doesn't support putting a VST or AU before Kontakt, only MIDI FX scripts.



How? Some kind of "is a note already being held down" detector?
Hmm I have another alternative rather than a VST I'm working on at the moment. I'm starting to think a VST won't work for other DAWs which is a pity because of the delay compensation.

Yeah it literally just has counter for notes active which you increment on note down messages and decrement on note up messages. I do this before any processing so if notes active > 1 it means legato is active. I saw you did a script for Logic maybe you could incorporate that so you don't have to select the start of a phrase?
 

NoamL

Winter <3
I'll do that, if you don't mind me borrowing your idea. Here's an idea for you, if you haven't thought of it already, you should exclude keyswitch notes (below the playable range) from this counter. I've seen many people drag out KS notes below the entire relevant phrase for clarity.
 
OP
calebfaith

calebfaith

Active Member
I'll do that, if you don't mind me borrowing your idea. Here's an idea for you, if you haven't thought of it already, you should exclude keyswitch notes (below the playable range) from this counter. I've seen many people drag out KS notes below the entire relevant phrase for clarity.
Yeah no worries. Thanks, I didn't think of that!
 

Dewdman42

Senior Member
Just did a test. AU-MFX plugins can report latency and LPX appears to recognize it. So...I think it could be compiled as AU-MFX for use in LPX and PDC should be handled properly.
 
OP
calebfaith

calebfaith

Active Member
Just did a test. AU-MFX plugins can report latency and LPX appears to recognize it. So...I think it could be compiled as AU-MFX for use in LPX and PDC should be handled properly.
Great that's good to know. Looks like there are several possible solutions, I'm also investigating the possibility of a Kontakt multiscript but then we lose the auto latency delay compensation. Not sure whether it will be possible but checking it out.
 

Nite Sun

Member
Cubase supports MIDI out AFAIK. Very interested to see a vst plugin with auto latency delay compensation etc. Would be cool if the plugin could have user-configurable options to deal with the latencies of other libraries as well.
 

Nite Sun

Member
My ultimate dream would be if you and @NoamL collaborated on a cross-DAW vst solution with a flexible framework to conform the latency and dynamic discrepancies between all the different libraries out there. Users could upload their library specific presets to save the developer doing all that work. Would definitely pay for that.
 

tack

Damned Dirty Ape
collaborated on a cross-DAW vst solution with a flexible framework to conform the latency and dynamic discrepancies between all the different libraries out there
The cross-DAW part makes this tricky, because to do it properly it needs to be articulation-aware, because within a given library, different articulations require different delay compensations.

At some point I plan to integrate this capability into Reaticulate, whose raison d'etre is managing articulations, but that doesn't help non-Reaper users (or non-Reaticulate Reaper users for that matter).

I put together a prototype JSFX for Reaper (looks crudely like this -- let me know if there's any interest in playing with it and I'll post the code), which supports different delays for legato and non-legato notes for up to 8 different velocity ranges, and eventually got it working well enough but ran into some serious obstacles for real-world use, which I believe would be fundamental to any similar type of solution:
  1. Overdubbing on the same channel is basically impossible, because AFAICT something in the FX chain can't discriminate between notes being performed realtime (which you mustn't apply any delay compensation to) and notes being played back from a MIDI item (which require delay compensation). A good solution would at least require some workaround (perhaps involving designation of a separate MIDI channel for realtime input).

  2. My JSFX proof-of-concept wouldn't apply any delay compensation unless the transport was playing. It seemed intuitive that if the transport was stopped or paused no delay should be applied (e.g. you're just noodling at the keyboard) or likewise during recording you wouldn't want any delay imposed on you as you inputted notes.

    However the problem with the record case is that you want tracks you're not recording on to still be delay-compensated. So this requires the FX plugin to understand whether the track is armed for recording or not, and if it's not armed for recording, still apply delay compensation when the transport is recording.

    This is something that at least a JSFX in Reaper can't do by itself. This is where I stopped my proof-of-concept because it required support from a script running outside the context of a track FX chain. (This is something I'll be able to do with Reaticulate since it has that architecture of a long-running DAW-level plugin combined with per-track FX plugins.)
 
Last edited:

NoamL

Winter <3
to do it properly it needs to be articulation-aware, because within a different library, different articulations require different delay compensations.
I've given up on that. I messed around with Logic's articulationID briefly but it's just not worth it. Seems like a design dead end IMO. One track per articulation, or at least, per group of articulations that have the same delay compensation needs, seems inevitable if people want a cross DAW capable solution. The real dynamite features here, that might have broad appeal, are
  • volume balance,
  • delay compensation,
  • and dynamic-matching
You, Caleb, I, and @Ihnoc all have good first stabs at the delay compensation, thanks to CSS lighting a fire under our asses. ;)

I have a first stab at the dynamic-matching.

Volume balance is pretty trivial, that would just be a chart of published test values that the user can copy in their template.
 
OP
calebfaith

calebfaith

Active Member
Just an update for everyone - it looks like NoamL and myself may be teaming up together to create a plugin but first we need to look at whether it is technically possible.

So first of all I want to get this working in Cubase and then working in Logic potentially with AU-MFX. If that is verified we'll be proceeding with it.


The cross-DAW part makes this tricky, because to do it properly it needs to be articulation-aware, because within a given library, different articulations require different delay compensations.
I do think that this is possible if we track keyswitches + CC values. But this would be something I think we should target after getting base functionality down.
 
OP
calebfaith

calebfaith

Active Member
Thankyou for all the volunteers! I'll send a PM if we need your help.

I now have a version successfully working in Cubase as a MIDI insert rather than a VST. Sadly we don't get automatic PDC but it is working with the different delays for legato types with that. End product is exactly the same as the previous video except you have to apply a -400ms track delay.

Next on the list to verify that it is possible is Logic and an AU-MFX.
 
OP
calebfaith

calebfaith

Active Member
We've made some progress and have an AU-MIDIFX version detected by Logic and available to use before any instrument FX. NoamL is going to do some more testing in Logic to see how well it functions.

So it looks like we'll be proceeding with this :)
 

beyd770

Active Member
We've made some progress and have an AU-MIDIFX version detected by Logic and available to use before any instrument FX. NoamL is going to do some more testing in Logic to see how well it functions.

So it looks like we'll be proceeding with this :)
This is wonderful news! Would love to test in Cubase if you need more volunteers! :)
 

Ihnoc

Active Member
I now have a version successfully working in Cubase as a MIDI insert rather than a VST. Sadly we don't get automatic PDC but it is working with the different delays for legato types with that. End product is exactly the same as the previous video except you have to apply a -400ms track delay.
I would love to know your authoring process to get MIDI inserts in Cubase. My impression was that the inserts available could not be changed, but that is mainly based on a lack of information on adding MIDI plugins. Exciting!