Engine.getPlayhead() functionality

  • Hey guys,

    I was searching for a way to sync HISE to the host's playhead and came upon a post about modifying HISE source to un-comment some lines used for accomplishing this sort of thing in the hi-core main.cpp module. (originally from post: https://forum.hise.audio/topic/2307/the-things-we-all-want-to-see-in-hise-3-0/18).

    void MainController::storePlayheadIntoDynamicObject(AudioPlayHead::CurrentPositionInfo &/*newPosition*/)
    	//static const Identifier bpmId("bpm");
    	//static const Identifier timeSigNumerator("timeSigNumerator");
    	//static const Identifier timeSigDenominator("timeSigDenominator");
    	//static const Identifier timeInSamples("timeInSamples");
    	//static const Identifier timeInSeconds("timeInSeconds");
    	//static const Identifier editOriginTime("editOriginTime");
    	//static const Identifier ppqPosition("ppqPosition");
    	//static const Identifier ppqPositionOfLastBarStart("ppqPositionOfLastBarStart");
    	//static const Identifier frameRate("frameRate");
    	//static const Identifier isPlaying("isPlaying");
    	//static const Identifier isRecording("isRecording");
    	//static const Identifier ppqLoopStart("ppqLoopStart");
    	//static const Identifier ppqLoopEnd("ppqLoopEnd");
    	//static const Identifier isLooping("isLooping");
    	//ScopedLock sl(getLock());
    	//hostInfo->setProperty(bpmId, newPosition.bpm);
    	//hostInfo->setProperty(timeSigNumerator, newPosition.timeSigNumerator);
    	//hostInfo->setProperty(timeSigDenominator, newPosition.timeSigDenominator);
    	//hostInfo->setProperty(timeInSamples, newPosition.timeInSamples);
    	//hostInfo->setProperty(timeInSeconds, newPosition.timeInSeconds);
    	//hostInfo->setProperty(editOriginTime, newPosition.editOriginTime);
    	//hostInfo->setProperty(ppqPosition, newPosition.ppqPosition);
    	//hostInfo->setProperty(ppqPositionOfLastBarStart, newPosition.ppqPositionOfLastBarStart);
    	//hostInfo->setProperty(frameRate, newPosition.frameRate);
    	//hostInfo->setProperty(isPlaying, newPosition.isPlaying);
    	//hostInfo->setProperty(isRecording, newPosition.isRecording);
    	//hostInfo->setProperty(ppqLoopStart, newPosition.ppqLoopStart);
    	//hostInfo->setProperty(ppqLoopEnd, newPosition.ppqLoopEnd);
    	//hostInfo->setProperty(isLooping, newPosition.isLooping);

    I made these specific changes, recompiled HISE without issue, and tested things out, but I've been unable to get this to work. I always get "undefined" as a result of calling Engine.getPlayhead().isPlaying, for instance (I've tried all the available functions though, and have uncommented them all). I've made these experiments in the AU/VST versions of HISE running inside Live, Logic, and Bitwig.

    I looked around for other variables in the HISE code that could be preventing these features from working, but couldn't find anything obvious. Am I missing something obvious?

    Having MIDI playback functionality without any transport sync is fairly useless for my purposes. Has anyone gotten this particular change to work, or is there another way I should be going about this?

    Thanks in advance 🙂


  • Nothing to add really except that this is sorely needed , for LFO and modulation purposes as well 🙂

  • For some reason, I couldn't get this to work before. I tried recompiling everything, and now it appears to be working for me. Go figure 😕

    I'll report back after I've had a while to do some testing and make sure it works correctly. Currently, all I've confirmed is that isPlaying() seems to report transport state correctly.


  • @lalalandsynth +1 On Synced Lfo's
    Thanks, Lala For Mentioning This.

Log in to reply