I’d like to be able to pass a BPM Curve to TimeSynth or Quartz and have it update the BPM in real time as it plays a song so the subdivisions of the bars stay in sync with the audio. An alternative would be to be able to specify BPMs for specific measures and then interpolating to those values from the previous BPM, rather than the current implementation which is one tempo change per bar.
I’m working on a Beat Saber/Synth Rider style game and I want to be able to handle songs that have Accelerando and Retardando. I used automation in Ableton to create tempo changes for a test song and I was able to replicate these tempo automations using a Curve in UE4, where the X-axis is bars (starting at 1) and the Y axis is BPM.
Then as long as I manually keep track of what percentage way through the bar I am at every tick, I can get the float BPM value at that point through the song and subsequently keep track of the bars and beats. So I can do this manually, and it is quite accurate, but it is not accurate at all when trying to update TimeSynth or Quartz.
According to the documentation, Set BPM for Time Synth “Sets just the BPM of the time synth on the next bar event” so that level of precision is not suitable. I have tried doing this in testing and although it seems like it may be updating more than per bar (it’s hard to tell) the beat gets way out of sync after only a few bars, whilst my manual tracking stays in time.
It would be amazing if we could provide a Tempo curve object (as in the screenshot) to TimeSynth or Quartz and have it automatically update the tempo values as it progresses. Or a less accurate alternative would be to have an array of beats or bars and their corresponding tempo markings, but as you can see from my screenshots I am using curves, not just linear accel and ■■■■■■, so this would be more limiting.
I first tried with the Time Synth component and then with the Quartz Subsystem (strange that the TimeSynth indexes beats from 0 and Quartz from 1)
Also, when calling “Set BPM” it resets the bar count back to zero which I don’t think it should do but maybe there’s a reason for it.