polyphonic synth – debugging
Hi there, I was wondering if I could get some help with debugging a patch of mine?
I’ve had this little polyphonic fm synth running for a while now. I have the modulation index controlled by an function envelope – which is also treated polyphonically. What I can’t figure out, is why the last value of my envelope is triggered directly before the envelope itself. This only seems to occur after I have run through each instance of the poly~ patch once.. ie all 16 instances have been used. I thought it might have had something to do with snapshot re-triggering the final value continuously, however adding the change object hasn’t fixed this.
I realise my little synth could be put together much more eloquently, however any ideas or suggestions on how to debug this particular problem would be greatly appreciated.
Thank you in advance everyone!
Hi all – I think my biggest problem in this must be the use of function from outside of the poly~ object. I would like to be able to control the instances of my poly~ subpatch polyphonically using the function object, but as you can see in my patch – all I could think of was to convert the line output of the function into control messages via snapshot – like I mentioned, not very eloquent! Does anybody have any idea how I would be able to do this another way? I was trying to avoid routing the line output directly into the poly~ object as I know that signals are passed to all instances of the subpatch.
Cheers for the help,
you can put the line~ object inside the poly~ and use the function outside of it. this means that you have to convert the text of the function message correctly so that line~ can understand it, you also need to send the message to the correct line~ object.
you can do this by using thispoly~ to get the instance number, and then use this to set the name of a receive object (env3 in the example) with the 3 being added with sprintf
also worth noting is that you need to use the fromsymbol object inside your poly~ so that line~ understands the message
if you are still struggling i can knock up a patcher with a poly~ to make it clearer
----------begin_max5_patcher---------- 960.3oc4XEsaZCCE8Y3qvxR8MVTrcrc7daeGqUUAhoMSfCJwr1tp8uOaGBDX jfoBLUpHgEwIgbtGetmbu98wifSKeUVCAeG7SvnQuOdzH2T1IFs43QvkYuNa QVs6xfSWq0kJ3jlSoVurPsPpcmCsaxx05CmsYJ8aqjMON3zL0SPvCaN8pL8r mKTO8Xkblt4JHHVT7D.hXGwwsiaukhbGhJm9quwg1o963w1gIdFJyWqloKNq fIoufY9hxLMbB.198jQGR3hKRpKFaBRZxwCOTKDyxyWUVnzaVxbbBxN33ozH lYfgLGFkfHbAwcByTQt4cm.6NSycDG69GZF.O7A3Pk7EC.agmV9pK5fUfVx8 QCANUVcTNNdyjyKUZU1RGWB+QUQ1B34IkFjnSvQIl.EmX4WdDgJD1eih4Con Rfc.WcwebOJDNJ9CPRKk00YOI+OVpVpxAR0uIGkcvglcXH5V1g0j5kdbxgbA ImdTPZvTvhAyL8kWvCZ.M4LTOBrkTXzHZ+5F5WGpAw1wMIXgSvXnkAHGhfDf zp6uexMLgBiMQiIKhvM7ffEQSLYTleSvVlo2LJQ70W3jKWXr8ttbyoeuGCsU 0foTqpIgLjSLI8KjcCFS1xNHbSEB3ASoRwAfcJqea4zxKCA8ASq36LaHXmrg JFV1DG.uFTzMzpYuTI9NqFQxfu7ly+BkO0Q1fZjMl5tGJehSCwqnLBmX2mM0 pm1V9tnoD8D.1TqJ0LXqN27wTcFIxTCex8v1+sEEJ4rx0Jc2NStIxvN0APIQ bya+RDV910ZBqWlN.950qpLsKMGX7uLAE3t4lhC.2UC+jvVM8ffvC6jwwAPR 11xXm9H21s3VwH0LUqRjjJNpRjdCq8huq1KjExsFhtDeNoG9kE.CwJSjHAts I.rnnVeQ7FI8xRs6Dwop0fRDBjkg5zXLZvFiIrj.l1toC46JtgkdzsEPdyVt DObBKQb8on4kUujUkeQ3kX+rqXDWCvTzvAepGAu6Nc9FGr6iNHXmeeFotbc0 r1UqMaIF.s84mKq0EpL2t4s6ZbRUvNT9bQdtT0MfWVr29o0yVfcNXhbBLwCJ h1+ocbDgBJhHdfHmDJfXh5iVZuqIDHJ1CDEv0Mqm1IwDMrXxVXzo4IQfYJtO YcGh8qNprsC6IpBmN2ssWe9PE+ynK0g5393JxM.UHuPU.WAS8yYHNrbEyKmg z.ipT+zU7.yUIdwUg1E0KcUJ4FfJjWqfgzE0qpXXAVWw8pZOVf4JmZ+zqfgs 9Jux.OntvyCSlC963+wsvSc7 -----------end_max5_patcher-----------
thanks mike – I’ll have a go at implementing this today. Thought of another option in the meantime as well – using the dump outlet of the function within the parent patch to update a function stored in the poly~ patch. If I used target 0, this would mean that all of the messages sent by the function remain inside the poly~, and the function drawn from the outside is simply to update each individual instance.. attached a patcher to illustrate.
Thanks for the help – I’m going to have to look into sprintf I think…
----------begin_max5_patcher---------- 586.3oc4V9rbZCCDF+r4oviNS8X8Wa2a84nSlNBaAQYrkYvhozlIu6UZkLA2 DBPflbnGvhck.8a+72J6GmkfVzuSMfR+Z52SSRdbVRBjxmHIFmf5j6pakCvx PF0O6W7.ZdXJqZmERaSWjtXL6xdicP+akeFLIKOl1rsSaZUV3OB+bx9s1wrj X1PJ6uVqBrgVHMqPyiio2EW1Zos9dsY0O1npsgUxxotMLkfK8CTFDjmku+2n a.fcEwWvrCI1H6fcC8sMZYKxOwSyl4uL+L0lN0vfbk5EhScqRt4RDGxqJN3i INmkfHJ.AAt5EmWUPn+GHHzfFHDmVOptsxwxslZqt2fdqFh0aTCJiU5W3ATS HwaifiNOdYOzSEF1wDlks8RquOZ7yI6mHDBnSj7PmDLfyORGUwXoIaZV2qM1 3YKDQFuhWv3dpKIBgnv8s4otTYLQYdQkeBVIjrByxJqnBrvsSPgld2Mz70rs a8mk2CWvAuG35X32x6w+D7d+qcQ37hywEg+.bQv9hZ0l+9we.897SEyg9sap GEfHjoj8z2nFrZCzzdvZbsCoOWg2qaZTvzi9rN8j5ixIYXWUwcHSygymHTbF OFcjtfyFX1DZdch4WFwLWSiCOBKbCU.2kmFInAWNyuPevsnLvmnL7OH6hpCR ATGbRnwjrO5Zo0wA8TvxtLXuVjnmgOn384Cp3vPvzBQWIrU2dVoLgmtxvqFR f2SbR.NOXiCGVMMhvpNnsDh9.pP76pBq3GfpO3JIke6IMdrvDayKbMtfml8G 0RI0xC -----------end_max5_patcher-----------