How do I manage the data generated by jit.conway?
Hi All. Im working on designing an instrument using the jit.conway object
I want to take the data it generates to be used as an argument for another object like an oscillator
How do I best manage the output data from the Matrix and/or jit.pwindow?
The idea is to have the CA running in the jit.conway object and have it output data
This data will be organised in some way to make it produce sounds via controlling an argument for oscillators (ideally I want 9 that divide up the ifno in the jit.pwindow
(eg for cells 0-9 across and 0-9 down = numbers to be organised for oscillator 1
…for cells 10-19 across and 0-9 down = numbers to be organised for oscillator 2
I want the evolution of the CA to be represented as a number to control something that generates sound
Any help, advice, links to other posts, objects, list manipulation help etc etc would be seriously helpfull
feel free to chop and change the patch as you see fit
Here’s a link to a vid of my ‘Life’ instrument using jit.conway. I ended up using the RGB channels as the basis for three synths. They used a combination of jit.peek~ and ioscbank~ to ‘sonify’ each plane:
You might want to look at my Boids one too. In this each boid represented an oscillator in a kind of additive synth. I took the x position to control things like panning, FX amount etc and the y position to control what note was played. They also controlled a bass synth and sort of controlled a couple of drum machines too, but it was more of a random thing.
It sounds like additive synthesis might work for you too. So you use jit.spill to get your list of values from your matrix which could decide the levels/frequency of each oscillator in the additive synth. Just an idea…
Wow! thanks these are great! I’m not as advanced at Max as you are clearly but think I might be able to get my head round these. The maths for managing specific data is the part that drives me nuts. Is there any chance I can have a look at a patch you may have. I’ve been mucking arounfd with jit.peek and jit.spill for a while now and not really understanding how to correctly connect the objects or manage the numbers involved
In theory I assume I want to send a number to a number box and the maths behind the scenes determines the exact number but its the idea of mapping that I don’t really get.
The boids instrument is awesome but I think that may be a bit advanced for me, although again if I could check out the patch it would help fill in a lot of the details.
If its not possible to see your patches I fully respect that, but if thats the case could I ask for some advice on how to use your idea of the RGB planes. I notice in the youtube video there are some subpatches involved. The idea of coloured pixels ties into the idea I originally had which was about emulating a chemical oscillator but thats proved to be too taxing for a reletive newbie like myself.
sorry for the rant but you seem to know how to do a lot of the things I’ve been trying to work out for some time. All advice greatly recieved.
These were my first major Max projects from a few years back and there’s some hideously bad patching in there (I hadn’t even discovered send and receive for the boids one, patch cables everywhere!). I’ll try and separate some of the helpful bits for you. I also made a bit of a tool with the matrixctrl object that lets you draw new patterns and save them into a coll so that might help you. The matrixctrl is a good example of how jit.conway can be used as a controller with jit.spill, so each cell has an on or off (0 or 255) and each cell could represent an oscillator, sample sound or loop, note, volume whatever. I’ll fix you up some examples when I’ve got a bit more time.
awesome! I’ll get stuck into the jit.spill , jit.peek etc families of objects to get up to speed. I haven’t used the mtrixcntrl at all yet so will get into that one too.
Its a pretty open ended idea for a uni project but fundamental to me getting the instrument working is understanding all the relevant objects and the maths.
Thanks for your help again, I’ll get stuck into the patches when they come, no major rush – but really looking forward to seeing them
Here’s something to get you started, watch your volume!
----------begin_max5_patcher---------- 3990.3oc6cs0iihbE94d9UTxZkVondcntvsHsRa1rRI4g7x9RdXzpVXnZa1F CV.t6Y1U6n7aI+zxujT2vFrAbgMkabOsFMlFro3b9pysppSc32+vcyVj8IZw LveA7Qvc286e3t6DWheg6Tme2r0AeJLInP7ylElsdMMsb18xuqj9oRw0+GAO SAAfjrrm.wofUzbJ3wrbvuFWNeCk9DXaAs5ldLKsrH92n7aDhlaotb510woI zRwCBpt3lfxvUwoKeHmFVJITaeG18.fDe9ADhHNXM2B7KpaJNRPSYK90uyws 9SMMXs3oN6ulGGjLa+CNaaY0S1hew+3Cef+w8ZhJozWXOri.kM6X+gv5V8v5 XqZrtseubt8f475OXZtheULLqYhSnOSyKhyRq0Cc2r8jGgn5K73GbcEzGl3r m.Y.4xjrvmnQ0df2MKh93vZkrMzz82g.TZ7QyeYb5lbZASrMnTQ70exAaSJe n8Nlle+iAgzNu4VA36lsLONJKkSDMtS9kqdbeD.sE8p10oawuHMXSK2bYVVx hf7miKhWjPazWvDSCRiWGTRKikzCxZ28EudSdbZYi1hlFvZiUEg4YIIMZJ42 7bKeSD843P5KwQkqDs0dzpg4jZxNMTfZb8dMuzTa5eyLvvrpvMwvzJDVWBBK ieNt7ybSNkqnfxrMfGiYVhxydo.j8n3hLzHO9SruCDlSYHCnHaaZz8fzrRvl f7x3vsIA4IeV90r69dvhskffT.8SAq2jP4Mz1B9y7.0YA8kDmRCYsnfHQ09h NDo5xTWm57Hg7uPDgPjmPpIobfZOxc1AzP6RlcX36tJiex+39yrergAwlci+ ouvjXPy5Bnfys8sgdt0AkZJuM7CHUa7Hsp4eDNiNAN2n4HvCssdHPCsOWftd Gt7xkedixTvrh3koraF7KWmdC1i6K.x7gzcLDgWGWu4PerukOyRtybWBw02k gt1mDccdKftLYcLZ9HJqaQ1ggil.es1TCod22B8KaVETjk+Efsk0YK4qG555 N21Ba64v9ySKz68V.bqbR9EPR7iTDXLs0yBMzyywCNhh+6aRn0oE+8O2dHjF 8P2ClcMMMMNtgI1tR+ltiha3lM2oMHgrdy3FFaL2v1Dq8tg8GfaXD7c2vsHb Z4NdtgaoM0PpG8VxMLwbtgUnqm0.bCiHu6Fte4eh6n4F93lTC2vH62cCePWC F4I8a5OJtga1bZLtf2NtgQFyMLg0.b2vXlaXO3PFM76tgaSV2xe7bC2RapgT +aJ2vXy4FVgtdngLZX76tg6W9m3OZtgOtI0Yzvj2cCePWCzWtBc9nQwMbyl6 zFj7ey3EFZLuvHW7duvnA3E19cmvsHZBQimS3VZySKy67VxGLxb9fUfqm8.7 A69tK39k9sQilK3iaRMbA6cS4Al9aQAgeoNQ8bP9NJNXaY1JZxlGX+nYmIHh HXAj4IPNoMchcOyjfeOKHd8U4OKLPlEDS0.RFzZePjQUn4RciucFbeKIPRWh XOH.6VC.oLHuDDrMJNa3Y5wkFchERJ.KlVLrHpbLtm9F3THeO1DjRS5BzEv4 KwouDk8xCG8KGB3.kqYGxUlAfVBCl18nda2PxcQVdDMOLKIKuJwwv9HnsHzE 2c+ED55PX+E7Xi4cXcP1vGJVrXYsGkPIqwGW0vosLV3zPr69voqsFF3SNIt3 uNim9LLTCsGP7vX62RADCMXJZH.WOuADOL14q9.hOCwWlEZ8inE69pDR69Lu k6luijXUvh7uuc7uHaadX0CrJGAAM4zHZQYb5tDQ9i6CCE.a7CWEGE0LweEc wwQaxhSKUDniEYtMCOk4EJx0a2YZJKYVNx5h4H1fgLLGwSfDi1GQbbj7.Vbn pOhc1jfirtXNppOxbbDOaP0hifmYejo5If51SXOonadhHpGd6ddRPlBuI5h2 noEciFhbxDht01af0jhtg95JeOsv6VT25wN3Dhtw5R2SK8Rnt1u4qD5Tx9so ioAyFzuvmOoQLMDyEAfoio4.NpJlFCxQngHaMgzIz0GKbZYyWWSmNSJpVWGr dSJ6O9F17Cz2Wpd5zXXuNFaPh9F15yALTk0GywP5Ff+zJNBmAnMLcnZro8c4 HGGNwsgviqwDdvlN7hlLTk5sAYHccNfstjdH9dKlPvDK1ee3ULEmoqJCdhMx RcGwfnqa534CaOD5drva0EYLfrBdTD7LM5A1igFV9PPYYd7hskxI0tQE8nsh ZgopDF87UmpHbrLIaQPhprjrqMl8g8nv.qWKcUEa9mOB9b1VvKAok75Ew1BJ 3m+6+HuJRjBvqAuDmj.VxquD7e0yAIaoEh5PAMHbEXSRP5tZbSa4JvkW3aDq opir7n3fOrTPzXUTHuh08F95KgWOVk6GrXIibQpRdic2k7lc4oh1LMQc0iVt HwBEU8eo50HIi8SYoeKS5hwkOAhKK.OSy+Lf93iwgwToXW91TPfprkDVlm.d LOacUYLIJnL.DjFAdJl8Q1i.gwgDZQAHnPHWFFjB90sEkBwWdAPIIlcB+9jE 1DlPL6ayCXFDpUVSJ1vEtYO8UrFOgJeNhGbEo.dgx9E7Gc0SIWTOf3Oj3Bvl 7rPNUvZhjrfH.qqrjosV.XjWF+VxAgYIIyaUCAONxJDY8QBgwx79RleSdsKs rK0uLpJx9twp1ry8V29LVyFRjY+SshdzrEOsLMZSr72O6eIZ2eRZ47G4e07M g6j1XH810oBJ.i5CDCY8os2l+M12TuIaCtcjvsZShIG7Bl.6P6D1NpVQe7Z1 i37NUJ4BxbERwwyRobMSBMXI8HkRq1LV42t7Gpa.A6I6Dwx7Sx4vx5TaYto1 RevNsUMpPAbbfBhLO1zBJvnWYrnC+XEzDVHZHa6A.Iv9jNT6hCgxssvFEzsc HANXWY3tfjEAoK4ZMUGGUHZSP3SLLh8uAfQ3dvHrzOusvouZuA2AFgsmthM3 QRMB4qRjYq8oCZmxL3ghGnSIyLp3hvaOMGfvC.arOM13JN33zG1PFuPC4kPu ZQGJpndiHJsMkqSMRVbjABUY3wpWDBNZROJDZrQlJ4mAoa0i7C1RFlHRG4G7 sh7CO3nG2ltOKqGIYHY0FUVMB6DkHilE4yOFudFTpbPN+fXj5.H3G3OjDZ5x xU.WGuwAupxbeksZmdU5PnQSo67MWukMN0ssNZ8lo+4r3R5Z0zPM6m+tMrAw jwvjL9S9d9G7qDDQCCJWkjkt+xaSJBxmsi+aEI4bxto3pGzUl5+XUMyA2WEv kLZgPUWkcTidBrYaYboNXu1heR.RtWxjV76BeF0vmtzZGrbj6tJxVFsCZfUN 3S2FlstAa8dcC9UptA2SxtWBV.R.gITlIHiUd0TE2BtCRuSV0DN27aG2W9su Khc1+kL6ntaBZNaAGNdmR9zHA9FH3aP7oEu1PlG8sTfqbKEH2dQP07J30ytL xHaXiq1V032R.whwLYX7DtapROwtyvHaNiwemFKeDytHEZjkr.6aW8YWfBQu 8Pb0JBrewqFGdUvVcxpV5vpJF9jbp84quL.fvH6EGcWXV3zJ2QzMSKlVqdul T8DKyFuYoZzMIUC0IMItExRBqWurjvxfYIQmSCWRhAFwpLeFr6cD8HhoVf+8 qaZxC7k99PgfCWoZV2g5Wcrmomneto34LQphTUeG3iXiwhP4QnOeRhtWd8pi t6jeaSWS09vVaenp8gUsORcDqNRTGq9ui5nq5nWM5xVG5.0KedD+AUOSe4yT btq5bO0uySc8py8qQGmoVLc8B4TG.G+zF5+8e9u.YMCgmtEKYhkyGSED0llF JlyK+dUPtNozPGqbrXXm2CjiDcfreeqjrfs8qMG8cjPGP3zb8.2.3CONJO3k Q0roJZcYoAzoWwB33s.6hd2wc59vRhmuqhO6o6q8138o66qto6KmIwRAPiMU et0p7Pp7S2Dy02Ud5R5eFnxyJu.DEoCh55tO625snA8Uw7OorsiczbBnv2xS .092aLWzLsMhy+jAzhdl9oM4fuIF9mIF1zDRFOf6qS0r85UenxoLGdQ.0hOX rhErRSTdvy+0oXzd8P0pz4q.b9kcKhdPpkHvdW7qSMn85s7XFq9kgbU69dYJ QfjanLCTqXmH.oAWUQjCrVgk7zPo+ssZtLwlMVPxUnoLYwT6oYi7xiQqkD+f jY07v62+8fqfrJV2wfXlWdL6yaQyCnxA0cE7yC8bzLINPuIFYWQBaH5.rYGa ms89OMyK7kulvzp48yxQSTkb6ipR8eFsUPM6nmj69DMd2DYe6Cp7DhVsyNkk AVHHbUPNfXwhMG7Ckqx2Z74QyQUH5gl68Adu.NCCdPhAWUnuZvqKM6fWqd0J B2mQvuBuauuZnpHSOM8DAHilkXc39P+HvzLuYN5OVVij3T5V6i3EzB7vSUCj qDK8kAx54s6rW4Rez4xOdxbo6pwO2lE1Lsqnud2j0isIVgwkbaVuSQ2j4ro1 UOY7zir0Im7fmokDjsb107q+pso9IPmpchos5jW85n6zxnofbf2f0QWsMahu Mq0otSOxVKwD3sYYhdhIceqVIeg2lUxWsqEz9SOxFZtpWZ0.ObUu.41e1q79 kv98b3epkC+GM2eMmtuQIAUkBfP4TpBQ8mfp1iVcPn0ozyPnlZFSwHPyclv3 .cREY3wqeZqSL5z.4JyVtLgN67DU1wn8vttCLekG6xqxZZYdFv1ZLyvcI6qJ 8e81aibF6D4db0NByReI3yFvJhrZx4.6EbbmTpB8saQ3aF.PbpX+hr4k3znr W3ENyfnHv2lD+L8aEK1cwb8KmrmI7pdgpJqYMPYJET+0MaC705Zr6R5cS1js ltqvhN2.aBMX8z6tS4L30.GDujFkhFUM5hfvmVlyDChpyMC0HKrdcIpS6rjK t7CIZ1lKDgjuOLNSE2e7r+0XxWzZFZNNxx1ip7n9BcoolybTWCO85RSdZPRh 5RNReRB6KxsPaKwhyfc82c1ERr15zmZOL7C4YKlwPjmZGxUcxERqDhFDKAdU 6rIXc6sG.MgghLdjPH0J0aMOyVZZjWcesUmcM3jlSIzf4Do3q3rKkZg5HKLT pkHoVK4ZKC2e1XPsvSgsVCjZkuyJHVpowGt6rKkZszUlFN.pU12aKK.wXm8m coTqNd.HWUiBXcrphgCU3TzA6fpWAZadFRUuqcjkkeuKWvEiLfyLBDZFmYHW C3M6RoIcjOuxjjNcpjApxf7EKSH1VdPZIUb1kFhmNgcdPOuwC6TGE7Cf4SRS p.kj.nBNgiA.pULdWWKjMWRLsV0TySS5D.Dw55RSHSDeNVLXBLTDIoZO1T+j QOxcHz.rADajQY.0I5GuqqTfkFZK3KQagcxe7g+ODNPN3 -----------end_max5_patcher-----------
Getting some good ideas form your patch. Thanks very much!!
One question though about the jit peek subpatch…
If the ‘jit.peek~ life2 2′ takes two inputs.
left inlet = dimension 0 (choice of column) and,
Right inlet = dimension 1 (choice of row)
How does the data work in terms of sending data to each ‘jit.peek~ life2 2′?
If a ‘phasor’ is attatched to the left inlet and the ‘sig~’ attatched to the right,
the ‘sig~’ object has the argument 1 then 2 then 3 etc for each ‘sig~’,
Does this mean row 1, row 2, row 3, etc as in this tells jit.peek that the value for its right inlet (choice of row) is to be 1,2,3 etc? If so is ‘sig’ herefore a way of saying ‘I constantly want the value sent to the jit.peek right inlet to be 1, 2 for the next ‘jit.peek’, 3 etc?
Secondly if this is the case then as the phasor supplies data for the left inlet (choice of column) how does this actually specify a number for the left inlet to take?
Is it because this becasue the matrix we are using is only 1 plane?
I guess what im asking is how and why is the phasor involved? what data does it produce to provide a number fr the ‘jit.peek life 2 2"s left inlet and how does
‘jit.peek life 2 2′ handle this data (translate it)?
Yes the sig~ is effectively constantly sending a number and telling jit.peek to look at corresponding row. The phasor~ combined with [*~ 32] is effectively just counting through the columns for that row.
So jit.peek is looking at the named matrix ‘life2′, the 2 says how many dimension inputs we want the object to have and if we had more than one plane we could put the number of the plane we wanted to examine after that. jit.peek requires signal inputs so instead of something like [counter] to count the columns we have to use something like phasor~. It makes a good control signal and timer and you’ll often see it being used in this way. We multiply its 0 to 1 signal by 32 so we are scanning through the columns on our chosen row to generate sound when we see a live pixel. The higher the frequency of phasor~ the faster it counts through the columns and the higher pitch the sound is.
Clear as mud?