Best method for tight syncing to Live transport in M4L
I have tried a few methods for syncing to lives transport but they all seem to have timing problems. Locked Phasor toedge, metro at 16n or ticks, reading the ticks from an observed transport but all seem to be very loose when connected to a counter. It always seems to need a few restarts in order to lock in. Once it is locked it is usually okay but then when I restart I have to do it again.
Does anybody have a sure fire way for tight sync to Live transport. Just something simple that I can re-use.
you want ableton to be the master? what are you syncing?
I want Ableton to be the master. I am creating sequencers in M4L and sending it out but I seem to have a lot of problems with timing. It just seems sloppy. I was wondering if somebody could post a method of slaving M4L’s [counter] to lives transport. I can do it but it tends to be sloppy. I wonder what other people do to get tight timing.
Alfonso I’ll try plugsync~.
Basically, plugsync~ allows sample accurate synchronization.
I’m using it to build counters for any bar division in the range 1-128.
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 854.3ocyXssiaBCD8YxWABo9RUZVrABY6aca+KVUsxAbRbKXi.SZ1tZ62d8E fPRvIjan8Et3wd7wGOyYL71HKm4rM3BG6uZ+rsk0airrTMIavp5cKmTzlnDT gpaNQrzTLk6LVaii2vUs+cVIk+vSn7ZKzxTBMAyUCCT0XVNtPLZDmvnujii3 5oFLch6X6GUWCTWAyl3Z+ypQsfQ4Ej+hUdxUXtYFXk75ont0LDOZEgtrk6gd .oO8.paAOdvDzFVsgKIVs1Xy+0W..mVnghRUnw4a4DThizv6iFIuLtm7n.7y wWAYA.P0hw8xXK3QXKPnhs7lZXBLwVZ2yeMCqcjCQFmX6LGQW5zL51bpqYN0 9IVR7EQr3+H78AwmepSpFdNbF3jbFbVfh5fSB1iy5ja5hS7uCTxQyYulfPct pe3MOiEn8bUFaGSPOxXCusIrlHwePVSJjn3xSk0rXvsW2CNS5yYvKmDC9Xo5 EduD8.9tCjnm2vo48fs+j6prGHvWQT998U1aQBC0svG7NvKIj03IxXNQup79 ZTdiy6vrbxWfhvsyrN+vTOUXpNVBDzhO5eQX8QV.tdF7TuiGkAiGg0aTIyP4 BdQTN3ELEMOA21oEn033WPbdNYdIGu8ohJxuh8kzaRIlsnt451a6dVdrPBXK +tiwX7ByFKxv33DRpBZS5pGDpTLtB8c5BNNqvjQDkxp1QahQb5ne3MYLprVf QbTRI7B9qlwQpHNUMbkDcW1IzisLIboBrNjqdecmtTGA.LO7C2n2kpVwx4GI WYW7xhaVQgch4DFc443M852saeQn+V5Ki6jRGvhMx9D5BlwcW0dm1p1nRzo9 1sQYNZkn7.9n0A6k1r2IqnA8UmAv+vuppSkhppWlNcJLX3pdQ1dXq6SwqJBB 3esmYG5ObrxmERBCAs.BmcCpoCGNhIKobYwqzn+c8YUOZlcp94A5xxZotdDz Ld+aZJarTHrX2FZd3DYhSOClUMdwTQ2+W8nVfx12ktKXk4Q03u5iRs2tDiwE bBs4jGOu8i4a0oUj3XLs8wnRIwYLwxoBC1+ry899BIoRzIwj+vBovdBIvfAI QTh8zSfHYR5GsMNugER8I9dObe2wDrOXZfCv6CjfCZ.dux4tl.bwKuO5+vtl Bp. -----------end_max5_patcher-----------
Thanks for the patch Broc… I’ll check it out later when I am on my computer. I am using it to make a Lemur controlled sequencer/processing device for the AcidLab Miami 808 clone… so tight timing is important.
I made the guts of the drum sequencer (patterns from a list, accents, repeats with vel sen). The timing is a lot better. Cheers.
I wonder would anybody have any idea’s how to get swing on to it. I usually use the old delay bang trick, it’s simple but it’s never great.
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 2111.3oc6bs0aaaCE94jeEBFXurkjJdSTZXX.squTfs8vJvdosHP1l1gqxRF RxYIsn629jHobrazkikUnUVGPqritPdNe7b+P4Oe9YSllbmHahyO57NmyN6y me1YpSUdhyL+8YSVEd2rnvL0sMY5l77j3IWnuT7lUIaxiD4pKhLmUep76WKz i7jogwKm37AykWGlO6FY7xqSEyx02gOiek6ENr.R4GX2piaeF4b0rmL8utD6 uyrKi2N4km6Kmed4gK.xLwh+tXDqFtbwcJxYRTR3bEIOvbImpYODSwrpiH+5 4RDkVM8KRhyiCWollIuLUFF47pjn40iB67LYxOodFTAP1CvYVxpUh37GgN+1 ad8abde7umjKptVjLVLKYSr5FvU.PpHq34CykIwWW6crOt5V2y8.3gBBJwKN p7Hkp.xfcvtZvau.eMPyZ5Y1Yp1E81acfbhWGZPHM04xKuTCoGlXZqhnd9J7 k3q.KFsUQTrWefF2moPCGqrQg88f.MrwIzj0Az31L+S4Z9WqAx7Zm+IiTqW+ oHx4sh3BCX+gXsHrXdsnMLrKVKBorGE.wFF2ScaTs7VcOS21v7cOwKF4IKWF IZWYrIHySAVDTCAF7HcXY45Sa.Jw.nrFFQ..J+IODjkg4BGjCZPMfY3bsiTp eaJv7dYZGagnOBi2DF893B8XqF8ARo45QgG8guq1PIwu+QevIOe0bQbEjwYC klqOCqATuiPyk9Tq49CGrRKT91Sk8.AeEqE8V1IVuso3N9aYAe4fGVKZ9ZSY r.slV6Vzv8AYHCGxjEImKR6kpDQa8AwePvGQaUWpUXKfnFHJF0z3AQSBMXZR qDYYgKEORnAckia0+p86npuqNNjRVTOkYKhmILW8GdMHZ4NRcVpCw05Ypi1F kJTekLcTdTla+8U54ORS43kylI5Q9V9d5Tw04LfzPSSV273iTl+s4h0YGdtl AJQ.B0CBuyNw7di1uvtCp2Nc1eTj2NwAzfIIF+DaRpILweXgDsmeJhB.RFqg FIhZJpHbqkZ9BXxKDtNCZRa5PL7HUdoyX.bexhAnB+vT.w.vPiSoqOE4Dmey AJdAVzpRBqUQqSczQGUNrnGzcFhbX8vd5Hb76eNrT+me4vVw25pAzdNrTuuk xg0ipyt2kzcNrT1ING1FPle14xAWfw23YGPQOn3wo.StyTGY4+qGanc4cuDi tX++DPCpHt5tdFzFjQbGmc0LtHW0B73fSXfSUhKd9FyLsoE0u1V9zqEsJ7ih R9uXXcK++A5zdQTRnRdQ+k12HBZzR2DufVakW+5j2.hVQxaEWUL3k2kYTuML cKgrykeG5CsiYM0iIcy07w5R9nS4r0pqABkMvKyysgwEfud7V6pqCSKX4bQ5 0h3voQhcefZURyBuUL+5v77T4zM4hG9VlArMncIbFsQjrn5zUme24bSrTO5S LzydWMIsrxlOngt2EmKVz7EyVKDyijqTD9U0dGpBHzviKiuUlIMnQc2f3t0I wBcwrpe7CiKz4zRDakopiGUHP98MOUqJjZUSixLbcWWpVkcq8pURW0ykx7Bs scV3qEntIIMuc0h8omj4cPwQIwKOvArMVLRF+wxgqwUyxAHYdKvvhD8xi9ZJ 6HUeLLlfkCcTLlf63AcGEC18ar5STANDZ20m.E7sT50dDccvQtcmdMZr1o9e orIBu3UgoS5SSDza3CDpoMaTcEMVmq.l6Zh+8QOCfs6WKkw4IOj3BiqM0fPL HzRm.PMUKuVCWW.XKqRBL8xg0vHCASGo4Z7cCrw9JrhR61XOYLqzJNFUVyFz kCQikn2aLFM15dltktXmNE1l.wWKKiJsocIOHTTejxfY2y3sn+fn+yXqd9Cu QOL93M5gGmF8dgC8PaRR2Y5RLI25BnXcnSsoO30S3HDJ0pgCWsDLw13gOhRI v6coDJQ8Egy1Myr+u7BmrxK32Z4EpmLLkPvzUqJwlZq.ABTEHPGREHF1xO7e zZOL6lB+RMzlRRaVOLt05L7TiWMW8l+q8h9xFmdujG7qzCPTAwA35BSGmEg3 6KT5Gde5FfQW8gN.lQZC3VGsYY18wy9m5QmfNBTb+O11ekHY19mX6W.pIhMs eAuSR6M+dfNR2Xe+jyq1Hil6bexlTG06DpXwhBVz4FQZ6a2TvM0S2XJ86bgO 6Q6Izc6.7HEjds3V4Lgyshzb4rBZoHTDYGM27F474h8hgqFjQmRhNsYDp08L Pv3K+XkzRdhyuV3S+f6zqI3WSwFzEMdWohEoKmVARjKJOPKOVb.0vt2tCYGm 2jGFImsKWLKIJIs6IoabEM735hzjU8DYMhSJ0M+iGX8d1ArM0Xd4bYe1TBlW wN8KuQG6IgwY7VkbtLdfC4RCKDMpz5N6F8DgJp4R4b5q9suPQskmeenJqvG2 rJ1q52fBmGH44hrbY71jue2CugL6bSOXXuRjo.cWmTfVFhv4C0tvAklJe0u5 jl9JB+ollPPHIqRQD.TTYCKrHIggrvQrKIwARRH6IJUDimiWWxR3w2JGxxzD EhNGytzDFBMQsqoIHVBTDNZbo1grro.P3jm8oIDDZxhqctPvIKu1Ax+qqcsi G.klrns.O.zT4lu2h3DECklv1il.4uKvpqcTHghSsq8IJX4I6QSLH1BX1Uui AwlIytwOwfn2w31ml5xeGytxSDHqcHO6SSHHzDxtzDAhdmkoI73xV.eDJOwg Xyr7GVFK5ClwfRS1SdhwGezDGCMdbKRSPxMmyFekMjiGewzwsqcbNjX531sF Fbv3zHq.qVNOXDrRrZ4jNwfxRvtZdpe1o6VjxcDRTriocKE+wWN+eADQK2RH -----------end_max5_patcher-----------
I think this is a Ableton Live bug. And in my opinion very critical.
It seems by default everything is instantiated in 4/4, if the music is always in this time signature no one will ever notice this problem. But there is very easy steps to recreate this problem, and all objects that lock to the transport seems to fail: plugsync~, transport, phasor~, etc, etc.
1) Changing time signature somewhere in the middle of the bar (with markers or manually);
2) Dropping your device at some point in the middle of the sequence/bar with a time signature different from 4/4;
3) start playing in the middle of a bar after dropping the device, more or less the same as previous;
*Usually everything resets when the playhead crosses a time signature marker.
**property resetbarcount from transport turns always off in M4L environment.
The problem seems to be internal to the timing system of Ableton, I don’t think there’s anything we can do with max patches to solve it.
I hope they address this issue ASAP.
I also feel your pain. I did not find a permanent solution but I did make a quick fix for the initial sync. I would start the live transport and the sequencer at the same time I would feed in a midi channel into the sequencer patch. I would use the difference of two events that would usually be synchronized to delay the signal with
pipe 0. 0. once the slight delay is calculated it almost never changes and it’s usually a 20ms deviation.
How about using a midi clip as a kind of timecode, fed into your midi sequencer?
Locked phasor~ or plugsync~ should get you there.
No need for any MIDI clip weirdness. I would suspect that MIDI would introduce more timing inconsistencies than doing the synchronization at audio rate within the patch.
If you are changing time signatures/BPMs/dropping devices in the middle of the bar I’m not surprised you’d run into a few timing issues. If you are going to be doing stuff like that, you should build in some systems for handling such cases.
Using midi clips to drive a sequencer is pretty reliable in my experience. Internally, Live’s MIDI is sample tight as far as I can tell. Its Max’s processing of midi that introduces jitter, and that will also occur whether you’re using a phasor~ to drive a midi sequence, or processing midi notes. Live’s buffer size should be as small as you can make it, for best timing.
Here’s an example of a basic clip driven sequencer. You’ll need to play a clip into it of sixteen 1/16th notes, starting from C3 and rising in semitones. This method also allows you to use Live’s own swing settings on the clip.
-- Pasted Max Patch, click to expand. --Copy all of the following text. Then, in Max, select New From Clipboard.----------begin_max5_patcher---------- 932.3ocyXssihBCF9Z8ofzrW5ZZADj8tceM1rYRUpZmAJl1hqyNYd22d.7z. XkQIiIhZas8666+H713QfEE6IBf2O79s2nQuMdzHyP5AFU86Qfb79kYXgYYf L5NxTVYtdUSryuCyY3bRaSq9EkkQjl+OpZvsX4xMT15m3jkR64GlDLMR8ZVz DOTxT3DuXj9JZ1Tn2ep9ezTywTr34uOCbXu3piWR3OQX3EYjSOG0gWTJqOc+ pQsCIecKwdz.vDOvprBrBJ0mj.uij9DVJ4zEkRxwuIpTmJ4Qy+rRRwp5gqG+ TfkUvV2gFc1ZEaJ3RWWbMGfMLWIiJExWsBhuc92GO93GlquOdhildF4uJcuV 0kj8FCGHmlRWUvyUhWSV73Nr3AAFCLJR+wbe8UeXKV6DPilzZC8AhB.sYjoL s489Q7s3ku3A8fMRa+qR64lqQgSm0Aqi9zr9tR4b7KDVgj3EA8PPy6FYe3UY eXh0zC6znGzL8Cbm91n5Ie3K8SUTwgD9MmXqxM2v3YcR3v4ckTC1YRMW7ETz eAlsterOmHD30jO3Trhnnr22P0SrpfIEz+YyCqo9sEdfhLoCP9S8SBhgHklY FvOnEMKn6XDMbNjN8mbJNC7nidxKyjTQFM8nyhfHUzWsJ6F6GZ3Hb9IbxU+o JAJztEIPafjeypSfeMBVuoPHWf45olA6uaVskM5HytnJjqth8SbU0fkEraMH rxoJv5JEVesIIyG8oS51+fr9khAgBuLloy7Lnjuv4YZo1y28NqG.mxkL+Tid RWUZQwe45uPnZ3bqtZa+XMzT0INtS+.H3yZq0rdx8m7kLc6U2Zbfg4wytNwC +pxac2zpXRAoWTOH95cR2R4x3aL2c06SjgIOTQQghFav.1bCFNzOVnwOIrS+ D+lEKXq8V38qhrzFZv39JFT1cRKrdMFcn6BF2ZOVsoCNm7zfB0s+xt74SXXg d7ykNQQIeY8tUeGidGISJQHoLrjp5c33h7OaManooD1oF3TpPWUzHDvFsgNC mHGfyEX9ghm.WvSzvhGjK3AML3wE4QiY+AAN56LzM7LLlqPWbeBFtvqPGfit amADNHWfyv3LaLDWCOW3h8PwiCVqvACMHWpTDNbwV56E45NyCWohKbTaoRJZ XwyU0m3gCOtjJrmnw1FDd61cDtnZKM.Q0q3yE7CctqZKjY+oYGAbxNZ85MOo F.lqZ9Sp57qja6Ea+b6SWFjWjR3rRpoitw5S98w+GL424+A -----------end_max5_patcher-----------
Its Max’s processing of midi that introduces jitter, and that will also occur whether you’re using a phasor~ to drive a
Are they using MIDI at all though? That was never mentioned. They just said they were making a sequencer. It’s just as likely that there is 0 midi data at all in their implementation.
Also if you’re clocking at 1/16th note, that’s a pretty large resolution (especially if this is meant to simulate MIDI clock. That comes at a much faster rate). It just seems silly to use external MIDI clips to synchronize something that can be done completely at audio rate within a patch. Of course if your solution solves the issues of whatever the dude was talking about with changing time signatures etc., then it’s a great solution.
OP is making a MIDI sequencer to drive an audio instrument. I was responding to loadmess’s complaint about loss of sync upon changing tempo, time sig, dropping mid bar. You can have a clip run not just 1/16ths but at any resolution up to Live’s own resolution.
The problems that I’ve found with locked objects (phasor~ metro etc.) is that it can be confusing when the transport returns to loopstart, to know whether that is because play has looped back to the start (play note) , or whether the playhead has just been moved to the start without transport running (don’t play note). I can use something like plugsync~ or M4L.api.ObserveTransport to tell me, but then I have to reset counters in the right order, or I get missed or extra notes. Its possible, and I usually go this route, but it can get confusing sometimes.
If you want to be sure that the notes that come out will definitely play at the same time as notes on your clip under a range of conditions, the clip method is an option, though it has its own problems. You can do other cool stuff easily though, like playing one sequence with another sequence for evolving melodies or drum patterns.
Forums > Max For Live