mobius-looper / mobius

Other
17 stars 5 forks source link

"Chopping" in FL Studio when using Host Sync for timing #7

Open cllunsford opened 6 months ago

cllunsford commented 6 months ago

User observes chops/repeats of timing when using Host Sync with FL Studio. Not observed when using MIDI for timing.

In recorded video, the clock gets to the end of the cycle and then skips backward a bit (sometimes once, twice, or none) before continuing with the next cycle.

Seen with: v2.5.1-rc.1

cllunsford commented 6 months ago

I was not able to reproduce this issue after an initial attempt.

Installed FL Studio, registered the 64-bit plugin. Opened Mobius, set the Sync Source to "Host" for Track 1. Confirmed that raising/lowering the tempo in FL Studio changed the tempo within the Mobius plugin. Recorded a short loop and was able to hear the click track play back on loop without any skips, chops, or timing resets.

cllunsford commented 6 months ago

Able to reproduce now with FL Studio v21.2.2 and Mobius VST v2.5.1-rc.2.

Looks to be a drift correction event. Here's a log from a playback sequence with a number of stutters that align with the drift corrections.

One drift event looks like this:

00000045    6.49865818  [41352] 0 0: SyncTracker Host: Bar offset 207 drift 4   
00000046    6.49878359  [41352] 0 0: SyncTracker Host: Beat pulse 244 advance 40707 drift 0 
00000047    6.95855284  [41352] 0 0: SyncTracker Host: Beat offset 206 drift 20358  
00000048    6.95868540  [41352] 0 0: SyncTracker Host: Beat pulse 245 advance 20354 drift 0 
00000049    7.42847538  [41352] 0 0: SyncTracker Host: Beat Start offset 205 drift 20359    
00000050    7.42854500  [41352] 101 122118: Sync: Tracker Host start point, loop frame 122118 dealign 0 
00000051    7.42855501  [41352] 0 0: Sync: Beginning drift correction for tracker Host  
00000052    7.42860937  [41352] 101 7: Sync: Drift correction of track 1 from 7 to 101766   
00000053    7.42867661  [41352] 0 0: SyncTracker Host: Drift correction of tracker from 7 to 101766 
00000054    7.42870140  [41352] 0 0: SyncTracker Host: Beat pulse 246 advance 20354 drift 0 
00000055    7.42875767  [41352] 101 101978: Layer: Capture fade tail, 128 frames at 8199    
00000056    7.42881918  [41352] 101 101978: Layer: Starting play fade in at 109958  
00000057    7.88761997  [41352] 0 0: SyncTracker Host: Beat Start offset 210 drift 1    
00000058    7.88766384  [41352] 101 122118: Sync: Tracker Host start point, loop frame 122118 dealign 0 

Full log: host-sync-drift.log

jlarson2000 commented 6 months ago

Thanks for your work here... Drift correction is normal, but should be relatively rare and not obvious. It is host dependent as not all hosts are accurate with VST sync pulses and there could be other configuration differences. Most plugins don't care about host pulse variance, they just adjust their timing. But since we're playing audio it needs to be more precise. I saw a comment about the Mobius cycle length not matching the FL bar length. This is normal, cycle length is independent of host bar length. I don't think this should impact sync drift though. If this happens a lot, the first thing I'd check is sample rate. Mobius probably has assumptions about a 44.1 rate and if the host is using 48 that could cause problems.

cllunsford commented 6 months ago

Thanks, Jeff. I'd been operating under the assumption that this was some fallout from the 64-bit update. I'll compare to other hosts, as well, and check the sample rates and configurations.

jlarson2000 commented 6 months ago

FL Studio was always a temperamental host when I was testing with it. That was 10 years ago, and I gave up on it since not many users were interested in it at the time. It would be nice if we could make it work today, but it seemed to have a philosophy about the way things "should work" and didn't like plugins that didn't follow those rules. My focus was always Ableton and Logic on Mac.

jlarson2000 commented 6 months ago

In other news, I've begun rewriting the front end in Juce which will eventually include all the VST/AU/OSC interfaces. It's going to take awhile but at some point I'd like to reconnect with you and work toward building a simplified Mobius core library that can run inside it. I thought about rewriting the whole thing, and it is due for that, but I'd like to work on that second. The first priority is to get the old code working in a modern plugin environment with a new UI.

cllunsford commented 6 months ago

Sure, that sounds great, please reach out when you'd like to sync up.

cllunsford commented 6 months ago

Playing with some settings in FL Studio, I've noticed that in the Plugin Wrapper settings, enabling "Use time offset" for the Mobius plugin seems to stabilize the timing a bit and drastically reduces the amount of skips/drift correction in short loops.

image

I'm reading through FL Studio's docs to see what their various delay compensation features do to figure out where the misalignment is happening with Mobius' host sync.

Wrapper settings: https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/plugins/wrapper.htm

Use time offset - When loading old projects (made prior to FL Studio 20.7), try turning this off for any plugin that is unexpectedly out of sync. Usually this setting will be off and you should check 'PDC' and 'Fixed size buffer' settings for out of sync plugins.

Mixer PDC: https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/mixer_trackprops.htm#Mixer_PDC

cllunsford commented 6 months ago

Also interesting to see FL Studio's list of "plugins behaving badly" https://support.image-line.com/action/knowledgebase/?ans=145

In many cases, the solution is to use one (or more) of these settings:

Enabling "Use fixed size buffers" w/o "Process maximum size buffers" seems to have a similar calming effect for Mobius as "Use time offset."

ClaudioCas commented 6 months ago

In other news, I've begun rewriting the front end in Juce which will eventually include all the VST/AU/OSC interfaces. It's going to take awhile but at some point I'd like to reconnect with you and work toward building a simplified Mobius core library that can run inside it. I thought about rewriting the whole thing, and it is due for that, but I'd like to work on that second. The first priority is to get the old code working in a modern plugin environment with a new UI.

Really good news! Last year krawumski said he started working with JUCE, unfortunately we haven't heard from him again, but it's possible he could help Jeff with development if he had some free time.