[Csnd] Recursive UDO Amplitudes
Date | 2024-06-28 18:33 |
From | Philipp Neumann |
Subject | [Csnd] Recursive UDO Amplitudes |
Hello Everybody! I’m sitting now quite a while at a instrument and i don’t get it… my head is maybe not working perfectly right now. But i have a few problems with recursive UDOs: - it’s too loud. of course, you say. you are adding a lot of signals together. yes, i know. but i don’t get the right spot to make it quiter. And also i don’t get the right factor to make it quiter. - when i change the order of my frequencies in my input kFreq array it’s also changing the sound. and i don’t get why. Maybe someone can help :) Philipp opcode saw_voice, a, kkpp kAmp, kFreq, iDetune, iIndex xin if iIndex < iDetune then aDetune saw_voice kAmp, kFreq, iDetune, iIndex+1 endif aSaw vco2 kAmp, kFreq + (random(-0.5,0.5)*randomi:k(kFreq*0.005, kFreq*0.01, 0.25, 1)) aVoice sum aSaw, aDetune xout aVoice/iDetune endop opcode saw_array, a, kk[]po kAmp, kFreqs[], iDetune, iIndex xin print iIndex iInstances lenarray kFreqs if iIndex < iInstances-1 then aVoice saw_array kAmp, kFreqs, iDetune, iIndex+1 endif kAmp = kAmp kFreq = kFreqs[iIndex] aSaw saw_voice kAmp, kFreq, iDetune, iIndex aOut sum aSaw, aVoice xout aOut endop instr 1 // signal kAmp = 1 kFreqs[] fillarray 65/2, 65*11, 65*17 iDetune = 1 aSaw saw_array kAmp, kFreqs, iDetune // amp env iAtt = 0.05 iRel = iAtt iSusTime = p3 - (iAtt + iRel) aEnv linseg 0, iAtt, 1, iSusTime, 1, iRel, 0 aSaw *= aEnv // output aOut1 = aSaw aOut2 = aSaw outs aOut1, aOut2 endin |
Date | 2024-06-28 20:14 |
From | Eduardo Moguillansky |
Subject | Re: [Csnd] Recursive UDO Amplitudes |
The general structure for a recursive udo is to generate your part and then call the rest, adding it to your part. A good way to scale the signal is to divide by the sqrt of the number of instances, this scales better than dividing by the instances itself opcode saw_voice, a, kkiio kAmp, kFreq, iDetune, iWidth, iIndex xin kFreq2 = kFreq * randomi:k(1 - iWidth, 1 + iWidth, 0.25, 1) aout = vco2(kAmp, kFreq2) if iIndex < iDetune - 1 then aout += saw_voice(kAmp/sqrt(iDetune), kFreq, iDetune, iWidth, iIndex + 1) endif xout aout endop opcode saw_array, a, kk[]iio kAmp, kFreqs[], iDetune, iWidth, iIndex xin aout saw_voice kAmp, kFreqs[iIndex], iDetune, iWidth, iIndex if iIndex < lenarray(kFreqs) - 1 then aout += saw_array(kAmp/sqrt(lenarray(kFreqs)), kFreqs, iDetune, iWidth, iIndex+1) endif xout aout endop On Fri, Jun 28, 2024 at 7:33 PM Philipp Neumann <philipp@von-neumann.com> wrote: Hello Everybody! |