Hello!
I am brand new to HISE and I set out to create an open source sequencer focused on live performance.
For the time being I need the sequencer to receive the MIDI clock from a DAW via IAC Driver Bus (on Mac).
I configured HISE MIDI settings to receive from the DAW and I can see that the noteOn/noteOff messages are firing up inside HISE, but I cannot get HISE to see the clock messages coming from the DAW.
It is my understanding that I need to use the TransportHandler to make this work. But when I do that I still can't get HISE to follow the DAW's tempo.
I am simply putting the code below in the onInit function of the root container and I can see the Transport Handler works (based on the console messages logging each new bar), the tempo changes from the DAW are simply not coming through.
What am I doing wrong? I am using the latest version of HISE (I did a git pull a day ago and built it in XCode).
const var TransportHandler = Engine.createTransportHandler();
// Configure for MIDI clock slave with fallback to internal
TransportHandler.setSyncMode(2); // PREFER_EXTERNAL = 2
TransportHandler.setEnableGrid(true, 4); // Enable grid with 4 steps per bar
Console.print("TransportHandler initialized - MIDI Clock Slave Mode");
// Variables for bar detection and BPM tracking
reg beatCount = 0;
reg barCount = 0;
reg lastBPM = 120.0; // Default BPM for comparison
// Create timer for monitoring beats
const var beatTimer = Engine.createTimerObject();
// Set timer callback
beatTimer.setTimerCallback(function()
{
// Get current BPM from Engine
reg currentBPM = Engine.getHostBpm();
// Print status every 30 callbacks (~3 seconds)
if (Math.random() < 0.033)
{
Console.print("Status: BPM=" + Math.round(currentBPM) + ", Bar=" + barCount + ", Beat=" + beatCount);
}
// Check for BPM changes
if (Math.abs(currentBPM - lastBPM) > 0.1) // Detect BPM changes (with small threshold)
{
Console.print("BPM changed: " + Math.round(lastBPM) + " -> " + Math.round(currentBPM));
lastBPM = currentBPM;
// Recalculate timer interval based on new BPM
reg newMsPerBeat = 60000 / currentBPM;
beatTimer.stopTimer();
beatTimer.startTimer(newMsPerBeat);
}
// Try to get beat position
beatCount = beatCount + 1;
// Every 4 beats = 1 bar
if (beatCount >= 4)
{
beatCount = 0;
barCount = barCount + 1;
Console.print("Bar: " + barCount);
}
});
// Calculate timer interval based on BPM
reg bpm = Engine.getHostBpm();
reg msPerBeat = 60000 / bpm;
// Start timer at beat rate
beatTimer.startTimer(msPerBeat);
// No onController function needed - MIDI clock is handled by TransportHandler
Console.print("Bar counter initialized - BPM: " + bpm);
