Edits from host
-
are there any callbacks on note duration, position or velocity changes from host that plugin can react to?
-
@karlito31 I don't believe this is possible because hosts don't provide that information to plugins. The usual way of handling this is to have a processing delay in your plugin, so that during playback you can examine the MIDI a bar or two ahead.
-
@d-healey
That's exactly what I'm trying to avoid. :) -
@karlito31 you'll have to talk to all the daw developers
-
@karlito31 actually I wonder if the creators of CLAP thought about this, might be worth checking.
-
@d-healey
I sure will, thanks. -
@karlito31
Actually, if it can't be done like that, would it be possible to implement whole piano roll in plugin and sand midi messages created in it to host (or other VST Instruments)? -
@karlito31 Yes, all the API is there. You can create any kind of UI you want with the ScriptPanel, you can create artificial events upstream and they'll propagate properly to your Sound Processors, and you can then send these MIDI messages out of the plugin.
Relevant classes are
- ScriptPanel
- Synth
- Message
- MessageHolder
-
@karlito31
Thank you. -
@karlito31 There's also the MIDI player module and some examples in the docs on how to use it.
-
Eh, sorry for the bother, some additional questions pop up by themselves... is it possible to at least get a tempo map from the host? How else can I sync my piano roll with the host? After a day of research, it seems trivial to achieve this with ARA, but almost impossible with vanilla VST? HISE + ARA? Possible? In the future?
-
@karlito31
Engine.getHostBpm();
The transport handler might also be of interest to you.It looks like the ARA SDK is under the Apache license which I believe is compatible with the GPLv3, so perhaps a feature request for Christoph?
-
@d-healey
Thanks again. Is there an official channel for feature requests? -
@karlito31 said in Edits from host:
@d-healey
Thanks again. Is there an official channel for feature requests?yes its the Feature Requests category here in the forum.
-
Allright, hopefully last question. Engine.getHostBpm() will return global project tempo. But what about variable tempo extracted from live recordings and imposed on host timeline as tempo map?
-
@karlito31 I think that's probably where you want to use the transport handler. It has various callbacks such as
setOnTempoChange()
- https://docs.hise.dev/scripting/scripting-api/transporthandler/index.html#setontempochange -
@d-healey
Yes, but in order to draw grid of piano roll that will reflect all tempo fluctuations throughout project/track I will need tempo map. I guess this is what Im asking actualy, is it possible to get tempo map of a project, not just average BPM? -
@karlito31 I don't think so, the DAW doesn't provide that information.
-
@karlito31 I haven't done any tempo syncing in HISE yet, so take what I say with a grain of salt.
I think in this case it's important to understand how is a DAW reporting tempo changes to plugins. What's the resolution? Is it once per sample? Is it once per buffer?
If this info doesn't already exist somewhere, you'll have to find out yourself.
You definitely need your transport callback that acts on tempo change. But to find out, you should create a minimal plugin with some logging or display features where you'll just log each tempo change as well as the time of the change, and you'll get your answer about the resolution. Now, test it in different DAWs to see if there's anything different in how they act.
Now you can try and do your compute inside these tempo change callbacks and see how it affects performance.
-
@aaronventure
But to gather all tempo changes one will have to play once through whole track/project, store changes and than eventualy construct tempo map. One that is allready created by host (or, reather Melodyne) if you just drag audio to timeline (at least, this is how it works in Studio one and Sonar, probbably Pro Tools and some others). And since the tempo map already exists, I was hoping to be able to pull it in at the plugin initialization and use the data to plot the bars inside the piano roll. If the tempo map is not created at the time of plugin initialization, the BPM is sufficient, obviously. But at some point, the tempo map will be created and then the plugin would have to update the entire grid. And move all notes along with it. So, it cannot be achieved through a stream/realtime mechanics you are suggesting.