MuLab Plugin - Composer Sync Issue
- KVRian
- 545 posts since 1 Dec, 2021
Hi, I noticed this problem with the composer some time ago - it makes it pretty unusable in my workflow. The attached video shows my testing procedure:
Two identical loops - 1st in MuLab Composer, 2nd directly on DAW's audio track playing simultaneously. Switching the phase polarity of 2nd track should null the output - and its true for the first 15 seconds. After that, we can hear the phasing issues - MuLab plays out of sync in both scenarios: Beat Lock "On" and Beat Lock "Off".
It happens not only with audio loops, but also with plugins playing loops and hosted in Mulab Composer: NI Maschine plugin plays the loop perfectly in sync when loaded directly to DAW's instrument track (and out of sync when placed in MuLab Composer Plugin loaded to DAW's instrument track). Also, automation envelopes have some time variations because of that, so triggering timing is not perfect and it can get messy.
Two identical loops - 1st in MuLab Composer, 2nd directly on DAW's audio track playing simultaneously. Switching the phase polarity of 2nd track should null the output - and its true for the first 15 seconds. After that, we can hear the phasing issues - MuLab plays out of sync in both scenarios: Beat Lock "On" and Beat Lock "Off".
It happens not only with audio loops, but also with plugins playing loops and hosted in Mulab Composer: NI Maschine plugin plays the loop perfectly in sync when loaded directly to DAW's instrument track (and out of sync when placed in MuLab Composer Plugin loaded to DAW's instrument track). Also, automation envelopes have some time variations because of that, so triggering timing is not perfect and it can get messy.
- KVRAF
- 3156 posts since 28 Mar, 2008 from a Galaxy S7 far far away
- KVRAF
- 13862 posts since 24 Jun, 2008 from Europe
Unfortunately it's normal.
Please see this doc page: https://www.mutools.com/info/M9/docs/mu ... -host.html
Thing is that as soon as a loop starts playing in MuLab it uses its own independent clock, of course at the same time tempo as the host DAW. Theoretically if you play 2 loops at the same tempo they will stay in sync infinitely. But due to rounding errors, in host DAW and/or in MuLab (even 64 bit float values are not perfect and induce rounding errors; also host DAW and MuLab may use different calculation methods which can result in a difference in the rounding errors) it might be that when you let play a loop for a longer time then these rounding errors accumulate and start being hearable, as you experience.
These very very small phase differences are musically not a problem most of the time.
If for a techncal reason it is a problem and you really need a phase sync as sample accurate as possible, then best to retrigger MuLab's musical content from the DAW, using note events, as much as possible to keep both clocks synced as tight as possible, because each time a play-trigger note is received MuLab will restart playing from the DAW's position.
Please see this doc page: https://www.mutools.com/info/M9/docs/mu ... -host.html
Thing is that as soon as a loop starts playing in MuLab it uses its own independent clock, of course at the same time tempo as the host DAW. Theoretically if you play 2 loops at the same tempo they will stay in sync infinitely. But due to rounding errors, in host DAW and/or in MuLab (even 64 bit float values are not perfect and induce rounding errors; also host DAW and MuLab may use different calculation methods which can result in a difference in the rounding errors) it might be that when you let play a loop for a longer time then these rounding errors accumulate and start being hearable, as you experience.
These very very small phase differences are musically not a problem most of the time.
If for a techncal reason it is a problem and you really need a phase sync as sample accurate as possible, then best to retrigger MuLab's musical content from the DAW, using note events, as much as possible to keep both clocks synced as tight as possible, because each time a play-trigger note is received MuLab will restart playing from the DAW's position.
- KVRAF
- 13862 posts since 24 Jun, 2008 from Europe
PS: About the limitations of IEEE754 float data:
Doing N times A = A + B may not give the same result as doing A = A + (N * B)
This may be one of the possible causes why host and plugin clocks might drift a little bit over a longer time because host and plugin might use different calculation methods.
Doing N times A = A + B may not give the same result as doing A = A + (N * B)
This may be one of the possible causes why host and plugin clocks might drift a little bit over a longer time because host and plugin might use different calculation methods.
- KVRian
- Topic Starter
- 545 posts since 1 Dec, 2021
That's not good. Are there any plans to make it work like NI Maschine / Akai MPC plugins (in terms of synchronization)? Currently, I use MuLab's sequence players triggered by 3rd party sequencers to modulate instrument parameters, but it's not very convenient.mutools wrote: Tue Apr 11, 2023 11:07 am
Unfortunately it's normal.
Please see this doc page: https://www.mutools.com/info/M9/docs/mu ... -host.html
- KVRAF
- 13862 posts since 24 Jun, 2008 from Europe
As i explained, it's mathematically unavoidable. The fact that some plugins might sync well to a host for a longer time may be a coincidence because they coincidentally both use the same calculation methods. When i discovered this unavoidable mathematical imperfection (see my PS example about the IEEE 754 float data type) i gave up on trying to do it perfectly, because it's mathematically impossible, and also because there is another very important aspect regarding syncing: When you start playing from 1.1.0000 and play MIDI notes, then the actual sample accurate points where the note on and off are sent might differ when you start playing from 5.1.000, at the exact same tempo! Again this is not MuLab's fault, the very cause is embedded in the imperfection of the IEEE 754 float data type. I could give you complicated examples (with embedded step sequencers at odd tempi etc, i spent A Lot of time investigating that) where things play right 99.9% of the time but then unexpectedly cause a hanging note due to a mismatch in the sample accurate timing between note ons and note offs. And as playing and combining musical clips & loops is one of the main goals of MuLab, and as *guaranteed* perfect syncing to a host DAW is impossible anyway, i decided to give priority to internal timing integrity and ensure that internal timing is guaranteed to be equal independent from the start position of a clip, and thus that combining clips even from various modules at different points in the module hierarchy will be perfectly compatible wrt note ons and note offs (or any other events). Again, syncing to a host DAW musically works fine. And if in some specific case you really need an even more close-to-sample-accurate timing of musical clips and loops being played in parallel then retrigger them often enough. The only thing i can do, and that's indeed on the wishlist (not on short term though), is to use an 128 bit value for timing, that will decrease rounding errors, but even then it will not be a solution for the possible small differences in sample accurate timing between a host and a plugin. Blame the IEEE 754 float data type.
- KVRian
- Topic Starter
- 545 posts since 1 Dec, 2021
Ok, thanks for the detailed explanation. It seems that sequence players and plugins placed within the mux directly are not affected, so I thought the problem is with the composer module itself - not with the MuLab.
- KVRian
- Topic Starter
- 545 posts since 1 Dec, 2021
Hi, I’m back with some more thoughts on the issue. I found that all other plugins I use for MIDI and Audio Sequencing and Looping “coincidentally” sync well to my host. Can this sort of “coincidence” be also implemented in MuLab Plugin?mutools wrote: Tue Apr 11, 2023 12:56 pm The fact that some plugins might sync well to a host for a longer time may be a coincidence because they coincidentally both use the same calculation methods.
Currently, the only benefit of using MuLab 9 Plugin over the MUX 8 is the ability to map 128 MP Knobs instead of 32. The capability of opening MuLab projects using MuLab 9 Plugin is pretty useless and the Project Bar only takes space.
These are the Audio/MIDI sequencing and Hosting plugins, Groove boxes, Audio Loopers etc. that “coincidentally” sync well to my host:
NI Maschine and Kore, PluginGuru Unify, Audiomodern Loopmix, FXpansion Geist 2, Spectrasonics StylusRMX, Steinberg Groove Agent, Toontrack EZ/Superior Drummer line, Toontrack EZplayer, Reason Rack, Akai MPC, Modalics Beat Scholar, Plogue Bidule, Image Line Minihost Modular and many more…
