From ba8d57e7ab18b28d693c3ac670bd6a35b534b32c Mon Sep 17 00:00:00 2001 From: Me Here Date: Thu, 28 May 2026 23:08:48 -0500 Subject: [PATCH] =?UTF-8?q?PM=5FK-1=20CircuitPython:=20fix=20polymeter=20(?= =?UTF-8?q?~)=20timing=20=E2=80=94=20true=20ratio=20polyrhythm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The firmware ran every lane at a fixed beat/sub, ignoring the ~ flag, so a poly lane (e.g. cowbell:3~) played quarter-notes instead of fitting its cycle into lane 1's bar — the duple 'and' coincided with a triplet note. Now match the web engine: a poly lane's whole cycle spans the master lane's bar (dur = master_bar / steps). Verified: claves:5~ over kick:4 -> both cycles = 2.400s (5-over-4); 3-over-2 lands correctly. Co-Authored-By: Claude Opus 4.7 (1M context) --- pico-cp/__pycache__/code.cpython-312.pyc | Bin 37303 -> 37635 bytes pico-cp/code.py | 10 ++++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pico-cp/__pycache__/code.cpython-312.pyc b/pico-cp/__pycache__/code.cpython-312.pyc index 736f66374bc6089b858ad70a445589538135939a..19a9796a259b32204672f73c4fd82aacc08a4290 100644 GIT binary patch delta 1977 zcmZvc3s96*6oCKp@4pMkOGE)dK$LhCNFaqTRD6tz&WpWaM*0D<({gqhGmBPWiAU^;iA&09BWlaL!+B}Iog z6)8p|4b}Rwfr(8j2xZ%*e<;GsY{pED3ruFMsr(3OtVsO}sIov1O!>4_9mpyd-Ue90 zw2S!e%jucHyWAk?fEr``hFaVOVXasLI&mZ)CgbS9BER)I1$NddYQ!3a zPC}XgmH4-a{8REd$;>&}Y9zi~)aI9MKAL808NTSva61Y5eDe1x{&sq1Nn#GUt#ot;t+SG|RQbgvT07x634{N4v;>DrE8-~;m zvB%eYT2maeI#N1{4ySg9bG$>9X=zSrE^0~b^&i*g8`t9z*Y7=S zXQDmKKD#lhep;XR*dEuhB!h2L@Hj496axkY2pKPU1qq-zy;GB>c|XzG$}Mc;&Zjx72e`}RAYu;<(hPb=8lG_vR*@!}s)Sn%;-VJx0~0}paoobtM!OR9&goWGZYVdG8}tQEmtw6+ zYc>;d0@d45{Y%7g)Kil3N`o$1lH*L;sG;C_c%3yCT#%rZ8j8oj9$H`g1{|Uh`pHk? zR-})Gqx4OEhUy?%e2?DM2l}+h)>i0Aq0T9m>bXNfC3E0yR!|bIf);8uP7XYV+H(-| z5GxUnQ*qfiBNWdwSVLVXr6ZCMEAh0a=+ugEXrl!cli>*4U2$76RJQkz?s587=#=VMxWP)QBb0EG*4M`H zqkdAm5PqiK8{*&&owgxXbpg-NM9Bs_e?@>6ZC)EJWiCn%|AO}nU3a7eo9CujkgAf zAhP+^eo%dj_O8-co4==gGnA&%!a^fyr)joP;7ScPBZSZ^w(?p}6Z$zmV(TQ-OWm`w7Lbzz!PIqjLbyX_EfAvr(Q)$=M z?XZ`s>vG_0>ZprxccS_w#ASM=u9+vJcH7vrLpX3A@fD&6@jD_1k&Bp(7o{5U2X>8! z9}!z|Y$Ku-@r4X}Z(DqV3ojp{#Xi1$a{L~+PAMzbRhAY`B|&_auNO>l{1LpX0DwOu kSl0HlVvtDzp#y@<5*Goajmp>DHn?qezkj!iCf8g320w>1ng9R* delta 1817 zcmZvc3s6*57=Z78AB*cEJ`%wPDvFO)R}^&+B^9wmrx-~#77&-kU1fn~*RzWZ3#LMj zyu|X9;u|p(9~pYIn6a{^e1I>A^06{gN)OGZ)NE?3nL7Vn%o)csbHDlTfBy47@403B z#gF!hK^J=U>M8JbMLRI(^3r2LTeR>xYtYUWA)VgQ{QyRGInXJ>GB&ICnre<{H^Rypb$5jt4r*c&3;WHZJ)MCf9T27c}*W|&kY!teAz z)Jgb?WlTu}_=h!5O%S0Eh3Fq)0KF6a7zWa=>G5!gj)@r#Luf)wrCcQI!&qm`hZ-2l z=$sQGOk)Z0<^Y(%8W-}Iiqd$C0EkhF~RU2HKe>e+8_w4 z#S$nHtq{vAwTfJlQ1S#|<+!YJ32jOXUgOmX0^d~zavjQtLET2322WH+%0iK#4@e|- zzH|3qzI?LVV{`o?p`oe96)lj{T=GfQ0-{%Zvd8YQ`2roze5c2mZ(nB4ca!6MpQIp; zap)zIq#nq37D_&Ng-WIf%?j?_ZK4L#(0N%<9(O%-aCuz$@`?qG{c4kHS8YrESZYo@ zpM1sCVrq{ywwY4f(#-9q%=XyKj_H=hq{f0nrUw#evw#@6>t!N!t?$n^n+AYp4|h!J z=+V@v;9y;;V}bW5Fg+Yr(uwI^;9>oii~%TQGcvY9_z`aF>rHHKo5$?RvlM09ELJzE zMGs!YVft|C2v|*n&Bbt=zHLr~h4ee~n7$*i-ySWGtS+lW;}#DX+ud6EIjvRH){c^e z5+O%NS5^)QE5a^o63IdCfgD2Y!id;evYX~+4hmNLx0NfO^bb~%db&Mxw5F6R-C6W( zX4EL-TW}=4Dd@BQ=R!XZZJ)H@eB60kOG5jkO^ z4r;ar$6}X!+W&{<3&^&(EglacpI{arU>2>2X0%g?vmoE9m(?+ny|l?X4yxEq>(?^u zq)qk_u$y++-+>02oip=E{}1LE;5faOW1PGnJsw0D5icS#xNp6#+aFi>l;w6}v--q5 zJFhV#cRsw!8ge5vJloclGY6f-GxHG(5V?r%IS(UqhhdWHmqt#Zl#GZ*~IOgmR41o`+0Z$O;OH8I=nX=PD`zrjen9d7;z!^vXwh2!uB zqK%bU3e8zA$5l43C{l#O)KeS**Xg$6@1dT)QDT5^*^!db3VcdC)=hvNn@bnLU7A!H z3HRu_QiG#|;=n|bykIpQ$IGvooBPT$TJ=FNu(g(-*qkkZK`rX7!9wU zvStgOfBNmhRQ&pTgH%gg+QcI7M|#{%fq3yA5@h5Lg9~L=Fp%6aO9l^2Xr? zB8)%o3PGUPtH(={l0|hJYhVxEzA+Up(?=U8=&qvWHN*`%zNU^(^I8&Zfyx&&l+0k64G(T99X(MM8KT{Jh|f s