Transport Handler ......
-
Okay - I'm trying to use the transport handler in any way I can but I clearly dont have enough information and the documentation is frustrating....
I want(eventually) to have the transport handler to run synced to the DAW, and when the DAW stops I want it to keep running using the last set of values it got from the DAW... but Im so far from that I'd have to stand on a chair to see it...
so lets start with some basic questions:
What's the HISE controller doing here? Pretending to be an external DAW?
Loading the snippet on the TH page:
https://docs.hise.dev/scripting/scripting-api/transporthandler/index.htmlWhy does the transport handler fail when I change to 5/4 from 4/4 ? - it keeps to a strict 4/4 timing - so :
inline function onBeat(beat, isNewBar) { if(isNewBar) { Console.print("new bar"); } local id = Synth.addNoteOn(1, 80 + isNewBar * 12, 127, 0); Synth.noteOffDelayedByEventId(id, 800); }
prints "new bar" every 4 beats.... when clearly thats not a new bar in a 5/4 bar....
The documentation kindly/frustratingly says:
In order to use the master clock with modules, you need to
- enable the grid callback
- set the synchronisation mode to one of the four available modes
...and not unusually fails to list those modes....
It also says:
setLinkBpmToSyncMode
If enabled, this will link the internal / external BPM to the sync mode....what does that even mean ?
-
@Lindon said in Transport Handler ......:
Why does the transport handler fail when I change to 5/4 from 4/4 ? - it keeps to a strict 4/4 timing - so :
Are you trying this inside Hise?
If so, the Hise controller is buggy.
https://forum.hise.audio/topic/10078/hise-controller-is-buggy -
@ulrik well yes - so thanks for that... now what is the HISE Controller pretending to be? The DAW?
-
@Lindon Ok well Im capturing transport start and stop, so now...
Given I want the transport handler to keep issuing pulses, how do I switch the transport handler between external and internal (which I assume will then do what I want)???
-
@Lindon Right well some C++ diving gives us:
Inactive, //> No syncing going on ExternalOnly, //< only reacts on external clock events InternalOnly, //< only reacts on internal clock events PreferInternal, //< override the clock value with the internal clock if it plays PreferExternal, //< override the clock value with the external clock if it plays SyncInternal, //< sync the internal clock when external playback starts
Now how to start the internal clock.....
guessing its:
TransportHandler.startInternalClock(int timestamp)
whats "timestamp" here? any one got any ideas?
-
@Lindon so eventually I get to here:
void ScriptingApi::TransportHandler::startInternalClock(int timestamp) { auto& clock = getMainController()->getMasterClock(); if(clock.changeState(timestamp, true, true)) { if(getMainController()->isInsideAudioRendering()) { auto gi = clock.processAndCheckGrid(getMainController()->getBufferSizeForCurrentBlock(), {}); auto ph = clock.createInternalPlayHead(); getMainController()->handleTransportCallbacks(ph, gi); } } }
but I still dont know if this is in ms or samples or something else? Anyone got any idea?
-
@Lindon said in Transport Handler ......:
Okay - I'm trying to use the transport handler in any way I can but I clearly dont have enough information and the documentation is frustrating....
I want(eventually) to have the transport handler to run synced to the DAW, and when the DAW stops I want it to keep running using the last set of values it got from the DAW... but Im so far from that I'd have to stand on a chair to see it...
In this example the transport handler will continue to run even after the daw playback has stopped
and if starting the daw again, the transport handler will sync to the daw position again.HiseSnippet 1347.3ocsW01aaaCDlJIZX1acXcX+.H5mbB7RriccR5vP8ryaFqIwX1qXepEzRmrHhLo.EUc8F1+u8yY+C1NRIaI63tUDr5ODHRdu7vm6NdWFpjdPRhTQbpNdQLPb9R2QKD5v9gLtfL3bhy23NVwDIwRk9ZlvOBTjdKhYIIfOwwY2qLx4TYOh82e8xdrHlvCJ1hPdsj6AuhOiqK1cX2ehGEcIyGFymUR51cG3IE8kQxTDS651fDy7tmMEtkYDaGWx0rjPhyAtMddG.NoUfuOqUK+Nc5b1om09rlrfFsYSZ14r1G29jiO8j.hymcgOWKUizLMjPb1qmzewnP4bQlCdMOgOIBLKZRFgdNa6KkQ9lqnYWR+Pdj+vkjUBAsxvBpa2Lp6acug6yWseAE901CnEZTl.c1Yc3s6ZvqYY30nD71BjbJAo8xfzScG4o3w5hSL34KbGHzfJfgwoxPISVxN+oqaeIJgPe3L18vkJbwJMpcbiF0osZzX+uuZULVknoiul9CzKDS4B3POEf2iMSYpYDlKhPInAoBOMWJnSPIQRRLEpY9bfvGdecJO4VXdOlZ+p+d0JKgwTP2WNKVJvE0dVOT5WMI5Y6eXBfK0v60OqNckMPe8Gn6Fes436D8JbiVkB0K4WCpd.rzKwdtR7jgQrEbwTKhN5nJIy4ZuPzL54.Hnn2AkfEQ8hjd2Sq4yluOEu1Ttn7AVUwynwYVi9cFdaNVEPSVH7nZIUGxz0y1BuvVbZMTrLgaf1JSjnkwInAzgvFdghQDMWjBV6wwMBTxYz4gfBLhulIhA+RqYJsEancyLUA1lf0fY.DnnvIV4BAFpdFKiuY3cizuDYQeId8NbnBB.0EKYnWX1yH6fbPuQnZ7FTeV7Zi.hIngf1jYRSRsWKjmLPacFHwfXOYpPat9hkfeE1yXQquwOVhn9FabmXIjGgGUKfEkjkqXh9VhxnxVn+GjLIEiLxaspIYVIip4sLStN8crnTvlWY+JizrdXM7Tqw9Yb2CPZsF4T31qTJbdVwRND5yhhLwzZaAd4z6f.p..epLfNShjbrB73IfMenNMMwP67jWfxdfQbMf9jhuOHUXELEckg8adJ0j3g4zgbrhYFfARZyi5zdrQGd.cgL0ZKSMDV55Ss1oN83VYYen4T.F6wh.i4rZlmsbgfgOKdkh6mmlz7zs8HyTTf7rIaDpNkoldr8usV9DShLBNLVggxLYLTZQR4UEVHyQElDE7fipVsTz9VoFtSTyZYzHzMOJHXqmky81WJ2xwldjp+MEqIRmMATkSnLBh8AVu4h6Gt4R4dedYISkDTJFH356hAwGpiHIOCzzHJGUnnZaanuJuMTuTsVJHbe6bFqx7HVTWdjAxuL3bllszVnYQWECJM2bKbNGdGNRQVKtJtmCI2i0E3zAqx7wl9ebd98Ed87tKVsnKzcN2WGVb5a5FB7og5xxSJ4uJY96I496UrIPj0cUbyaWU1WsK4KbwF9xekubc7w0AHELh+akXnS6BXbkYCcHIikOFYylr5ACAfieH8SiX50mIwL4V9AXtzZCBXdhQf8bVTdxt+2FT4iEhO0cnoQ61w3NaAiX5xmBLlOd2SbuHH.7zE.bO2K+0OMyxQ9YYJ1Da5MLshi4Mt2lNaDNRrGXd3Q.QlZYmcLUcYqarL9OBeG0t3uwe4G1zr1I+vlKOjLi4oju0KqV0L.4ma2AwjvNrcE2aLqoMeX84Lbd1254stodfhG+XUr0iUw1OVEe9iUwNOVEO4wp3o+2JZ92M9wTsbVVYCgbyvKrum53j01zlsR9G.0.qgn
so lets start with some basic questions:
What's the HISE controller doing here? Pretending to be an external DAW?
I think that is the purpose, yes
Loading the snippet on the TH page:
https://docs.hise.dev/scripting/scripting-api/transporthandler/index.htmlWhy does the transport handler fail when I change to 5/4 from 4/4 ? - it keeps to a strict 4/4 timing
bug in Hise Controller?
Compile a plugin and try in your dawsetLinkBpmToSyncMode
If enabled, this will link the internal / external BPM to the sync mode....what does that even mean ?
I have no idea
-
@Lindon Christopher explained here what is timestamp in the onGridChange callback:
https://forum.hise.audio/post/59358“timestamp is the sample position of the grid event in the current buffer so you could pass this onto any message you create to assure sample-accuracy”
So I’m guessing this one is the same? Measured in samples, used to start the clock at a specific position in the buffer.
I still don’t understand why in the Clocksynced Arpeggiator snippet the calls on TransportHandler that have a timestamp as a parameter seems to be almost interoperable between getting a specific timestamp value from a note or just putting it as zero. I’ve tried to swap it but can’t seem to note any difference in the execution of the code. Also I’m always having zero as the value of timestamp in the onGridChange callback.
-
@ulrik I think it’s easier to just compile HISE as a VST and run it inside a DAW directly, faster then having to compile your project VST to debug and more reliable then the HISE Controller. that’s what I do anyways. I just have issues with compiling HISE as a multichannel VST (it crashes Reaper).
-
@jp3dr0 said in Transport Handler ......:
@ulrik I think it’s easier to just compile HISE as a VST and run it inside a DAW directly, faster then having to compile your project VST to debug and more reliable then the HISE Controller. that’s what I do anyways. I just have issues with compiling HISE as a multichannel VST (it crashes Reaper).
Yes if he has Hise compiled as a plugin, that will make it easier to check.
-
@ulrik As always mate ...perfect.