HISE FX and delay compensation
-
@Dan-Korneff ah the example might precede the broadcaster addition, so that‘s kind of outdated as a best practice but if it works…
-
@Christoph-Hart could you please share an example of checking the sample rate with a broadcaster? I see a attachToProcessingSpecs call in the docs but a simple example would be of great help!
-
Is this the correct logic?
// Broadcaster definition const var SampleRateBroadcaster = Engine.createBroadcaster({ "id": "SampleRateBroadcaster", "args": ["sampleRate", "blockSize"], "tags": [] }); // attach to event Type SampleRateBroadcaster.attachToProcessingSpecs(""); SampleRateBroadcaster.addListener("sampleRate", "blockSize", function(component, event) { Console.print(Engine.getSampleRate()); });
-
@tomekslesicki no you get the samplerate and blocksize as function arguments (which you named component and event).
-
@Christoph-Hart could you please tell me how should I call this then? I'm new to broadcasters!
-
-
@d-healey thank you!
-
On a very high level you give the broadcaster an event source (in this case a change to the processing specifications) and then you can add functions (=listeners) that are called whenever the source event occurs. You are free to call the function parameters as you wish, but there is a expected number of parameters for each event source - in this case it's two, and the first parameter will hold the sample rate and the second one the block size.
Now you've probably copy & pasted this from somewhere (or the broadcaster wizard spat this out) and the function parameters are named
component
andevent
(probably from a mouse callback source type), just rename them and address them.SampleRateBroadcaster.addListener("sampleRate", "blockSize", function(component, event) { Console.print(Engine.getSampleRate()); });
Also where you put
"sampleRate"
and"blockSize"
in your example, it expects a object and a comment that will show up in the broadcaster map, but both are optional, it's looks a bit misleading.So basically you need to do this instead:
SampleRateBroadcaster.addListener("", "will be called when sample rate changes", function(sampleRate, blockSize) { Console.print(sampleRate); });
-
@tomekslesicki said in HISE FX and delay compensation:
Is this the correct logic?
// Broadcaster definition const var SampleRateBroadcaster = Engine.createBroadcaster({ "id": "SampleRateBroadcaster", "args": ["sampleRate", "blockSize"], "tags": [] }); // attach to event Type SampleRateBroadcaster.attachToProcessingSpecs(""); SampleRateBroadcaster.addListener("sampleRate", "blockSize", function(component, event) { Console.print(Engine.getSampleRate()); });
So how can this broadcaster be used for dynamic delay compensation?
-
-
@Christoph-Hart said in HISE FX and delay compensation:
@resonant Call this function instead of Console.print in the callback and hope that every DAW supports dynamic changing of the latency.
I understand, I hope it works correctly in every DAW.
I've never tried it before, but my approach for dynamic delay compensation is to set it to the highest stable delay compensation value and try to compensate with a delay node at lower delay values while the oversampling value changes.
-
@Christoph-Hart is this broadcaster supposed to fire when audio is converted to a different sample rate during bounce? I'm testing in Ableton and Reaper so far, and in both DAWs, rendering to a lower sample rate is triggering the broadcaster.
-
@tomekslesicki Perhaps you can use the transport handler
isNonRealtime
function to control the behaviour?HISE | Scripting | TransportHandler
A class that manages callbacks for host playback events
(docs.hise.audio)
-
Of course it is triggering the callback, why shouldn‘t it do it?
-
@Christoph-Hart because if I remember it correctly, what's actually happening is the DAW bounces the file at the currently set (preferences) sample rate, and then converts the result to the target?
-
@tomekslesicki but then the DAW tells the plugin a wrong information, which I'm pretty sure would cause issues with all plugins.
I'm just forwarding the call with the specs provided by the DAW and it shouldn't be the plugin's responsibility to care about whether it's an offline bounce and the DAW might be giving you the wrong information.