Ring modulator below 20hz
-
@Morphoice I never used the ring mod, I know one exists in Faust if you look into it.
Generally you can right click on any parameter to change its minimum and maximum values, and double click on it to change its mid value. Check out the bipolar mod template in ScriptNode to see how to create modulations.
HiseSnippet 1664.3oc2Y8zaaaCEmxNxoNMqncqEaG0gdHEnvvNsqa.6Pb9maCVchQTVZ2oLFIZaBKQpQQkDugcZW5sct21Ggcc25WfALf9EXeD58cX6QQYKIa2Dauj1s4.jX9dj78iu+SlVBtCILjKPFkOne.AYrrocelr6lcwTFZmsPF2vrINTRDVZRazO.GFRbQFFEerhfQ4EPwedyZaf8vLGRJID5PN0g7TpOUlRsU8uj540.6RNf5mY1Or9NNb1lbOdDfmhlUQAXmd3NjcwpoUvDYTZaWpjKrkXIIDlyFb291c4mxzy+PZH8XOhZPMjMrQZxnM6R8baM3rFhPFlsRO4E0m7aa1j5RGROUCbyXFVoqHqNvnv4AoZy.jLx.oEzP5Vl1NBZfLkiBOW2bGFXPZiAUcVnnmKx3UlaxgIvjU7w8HMDvfgKXkGUs58sfecuuncDyQR4LKNaWtjrGak6sz2uT4k9gkrFkU61SjmRLBtmGQLQ1Jqq37V3JrH+iIh6acB1KhLbhvwOuNszzoSczm5LSjy1gQk6EPRF2f64pzUpuOtE.kn1fu8U6rEVhUFkDZv7BHBIUAGisHm.d0ZSTYysHg8j7.vudL6G34vci7vx7tSp3lDFf9HmMTYnXgTY+rwUyfOV0y0GaZg3sLaQkNcmLFKLALBZpqBLlDY9Ala2tMwQlBvELa774MLr5LGFtTRXHHSkvWNYnUimWahAfuvL0YOPPBvBxA7Vd39qDh8C7H6CX79VG6wc5YS+Nx3QHAZHrgZFq3zEyXDuv4IPpzkTxIz97HIk0oIVJnmAoO2Mx2FRS6P1LAc.MiBpXH83ppwJ+BaByMdveAeRXVSM1HgYsALyD9sKQdJWzK1bj7cjwhJceYy8Uvf6hV2yie5lb+.ZhKJX.ho0h60OnKmQcTjzyX.LW2mGARHAqOAGd.l5o7osiBgrDt6wrgIGWCyn3gDQX7FunY0JvOfO9tbWfkYCrCnU62BK6pBVTId.OShnhyPOzTfl0CQs9AE3z5G.e9pCcb4shYRyn8DUif3rBZ+tcBOTw0A6gNTYoUHGo1S0zS.WIcQ6ioAbOr3HeNngyg2amAu.WMjUNEsvBnPKTnPkiqvr.6APnXh9QiVXyOJj1gAn8BTXC2s6Ztof.9pVXK8JsNFL+DBypZkJUpY0kHHWfBMEMF4PCOzA55PkmabzHHUxvddMXJVPz8YCJcrEML.B52HBRdoSsjihxpxbImMv+eaHD1EJOEu7AwDYrIfoc3H36MorDefzjvMwmMBsaV2VRBTYYxVPwtG4TsRHKUkdpjpb.AM1NiNeQ+l0FSzu30iJ5e9ku7WGWz0+Q+eaMcaMMDjuMBh95mS9O5AO3OWa1kOp5LdzWNV9V6qxlfFa+QyttGD1Lp6eL35ekIZHc6aUzKZ1pKNb1s6WFxtTb+PS5XOGICyFufxjPrrIjOYUHiT9f+aX5C+sxPdI8GBEJm9b.ExkCHW.qw6BKmdCF2xk4zWxLff6k+neccduXFS+oMUCYrPtycZuhGfEcHxvjlmYDGc043xS63p.SGk8dnpQSK1G3pNCZdqSgLVGyqVqSVUQX9npqHIqujXRa5iJ84rKijZoIFvI4M0YzmHX9icJlQGs335nu9Uiqi.8wzTw4Uc9k6T+sm4AgVORxg7B5a6L6Y.q+SSWkuu4i150I1JaeNW1EZXbTv7v5Wf7uLzCKatOIjHeaIRxEAsAm2yGG2a9+3aIeGMyqa9L7Ij3mcJt046DOtMW3a8XBzjnporZmyCO86S6COEL0O7zdNR.BGHvrv.dHoV1cdDdqlk2VDYDK+z0jxMK0wqAb7xLuqUe.wUyRrElkayfw41olpKiMX3er11LLbcNaBbZb2Ksg1LoFZE4ERdF0U1sV1ElRd0rjeBV3B1EmbWzuX96Ttvzcmx7u4Ql4OgqfW58viyc47vIuGeambObQ4AXzlpJntM6DhGDZFiwODhEaii7jCnlO1pImwGb84Tq99D3h+c5PxWmYRGn0kRrSuTJ2t99DOhp4xgjta8mBW9CKhupw7oKl82Rch1qOwTCWKUBAq+69lbE+e8axM8QeP9v+caE+XSHu7pVwlRq2O1x2EOk26BY3icD7ibzu.pJn+ZwTfyMK9+WTYylpwV0PmLZKM9PIiibbxuUisvUm2E9f4cgObdW3mNuK7Qy6B+r4cge9EuPUE8jdvUwFPaNs1VemNCcGNwgIn+FzkKLlH
-
@HISEnberg cool example. I learned a lot thanks. doesnt do the trick on higher frequencies though. I'll have to have a look at faust, I compiled it but will have to find some tutorials to make my first faust scriptnode.
-
@Morphoice Just add a faust node inside of Scriptnode. Click the square box on the node which will open a scripting window.
Put this in there:
declare id "ring_modulator"; declare name "Ring Modulator Mono"; declare shortname "Ring Modulator"; declare category "Modulation"; import("stdfaust.lib"); freq = hslider("freq[name:Freq]", 240, 120, 1600, 0.5); wet_dry = hslider("dry/wet[name:Mix]", 0.5, 0, 1, 0.05); process = ((1 - wet_dry)*_,(_*os.osc(freq))*wet_dry);
Now it should operate just like any other node in Scriptnode. I am not sure if this snippet will work but here you go:
HiseSnippet 1303.3ocuVstaaTDEdVmroDS4RAd.V4e4DEbsyklVpPIMNwfEjTqtgnJg.qI6Na7Hu6LKyLtIFD+mWg9O9KuE7nviPeCfyYmcs23XBMV.NRal4bYNey45vtxvDgrv9ZAOMkYHDmk5ojALsVpHNUOcbJi3beW+wByf1CnbAo6gDm228Xp1vTdVRGLNkp0rPhiyReARvY0kIY+dydGPioh.1TRDxYRd.6q4IbyTp81+q3wwcngrS4Ikjd686FHEskwxQ.dVxsIIkFLjdA6DJJVEWxWR0CHNq69jc1oEMLZ2nVa05ImGFEv1Z2lOZ6c2jtyiih1sYqs2Jb2nsAPtxQgbiT4anFlFNzCjgi8GHuTXMvYbM+7XFtoEwGrrkLo8.db3DmiFbUKWxUsj0U8ItGyC4SnO0k8gYL7lpQYmlSkaCRstCPxoDjV1BoG35Gn3olobP77ttcEPDLhBwlxPwJKw42caKAADlFIzgrNJXyDEp+nlM2vC9r1SiFIBLbovSJNQZXOWTesp+T0Uq9yU8lkUTzb4glQIiiYp4xFSGT2lh0EiRNmo1v6Uz3QrIBBW+q6SW4symFXu0kDTJ5J3lmmxx22QFGh9Jb8Mi.jb2Fr5a5dH0PwfRNMPtTlxvQ33bH6UPYfMDsp6gL8PiLEJDtQ7CxbjgiholqmNgEZ4L.+w0hgXfRn4lwkKDuC4XMu0br2VH9.2dbSvf4iwJyAifm5+BLlWY9dtGEEwBLSA3xtcd4hVF17NWFVMuLDrIZ76mu0qyKaM2BvewcZxdphkRUrSk8hoiqqoIowrW.XbCuyikAC84+H6lUHoVHb.JQ8fATgfEqWjBoU9Wp4D4ExQFt3hioFE+Jhi6IiR7g95Ar14nCn4TAqgr6ah6w7BeXHU1l+D9kyrEt2ImYqBlkJ+NgYtTpFlENxWSbtG56+H2WfvPF1OOjbE4YwwxKaKSR444pPjHiVOY73zARAO.IYkn.uOKQNBLUNngAQmR4wXxs+HMztH74BeP3roeNKcFSoyN3641rA7GjrehLDXsRGZ.3dG2iZFfUMXGHHEkoZDLIUcNHtbNicX3bDBsPwvSqqDtAIn+AGclMqunijMoE2AkjUronc0mgbCnwjyvjB7tkclVmpE9nn2yMhNRaHW6pbe3pnXMrbtIbKz4NgwJyfwUcaGCma2vB.tZgSHqGPYQ+.LeqGUAFGlioKTvZRRIFnUJ1A2ui4hhydRipioWMCs2rmugkhUh4z90W+5eaO+grKs9jxRZAdnZ7CuDdx0LGzerG41s92u+Ms9q2eFqmcP+8VeE2HE6Gl0zh8I9Wh8rOkptfYzy3VHGHkCSnYkTK1vs+OZ.jPCTx9A1dZXv7cxn.IRhrztUg2tB68ZQd0rQ0D3EZ8CBt9QcCE2bQUbqEUwsWTE2YQU7QKph6tnJ93+YEwGP+rQFYhsCMTE16nrjPGmiDTXDTVyEBClhEBuPy1DDyUmPQvtpCzQNq6UDGmYUA+mEIersezCy6ezHTmV7ZPRktNtgrfXXHrGOzyyqlBjpeRwqdp8zpErwCyqFdHdSdTDrRHKIidfTYlmfkjI.l1dAzK0q1zWPArqxSRAkqWSaByvaiX940VCXfUzdet2.cLODdxbMb+2hF4y5.q9tZa3s41vy1asI9I6E7MarCnHzCpOzKprp4slrZeL+JTYPX3CnJtrIpX07WX.ZVudKuO0K+jVa89aTu+5RcCoNnNBi0Va8BdOkP9KFTBC5A
-
@HISEnberg bloody brilliant! I remember Christoph saying somewhere shippets wont have faust scripts in them so I didnt try the snippet way but I got faust working and played with some examples. Your Ringmodulator is perfect! Thank you so much! Exactly what I wanted.... Now I have faust to learn. lol this is like dark magic
-
@HISEnberg said in Ring modulator below 20hz:
process = ((1 - wet_dry)*,(*os.osc(freq))*wet_dry);
how would I make this stereo?
process = (_*os.osc(freq))*wet_dry,(_*os.osc(freq))*wet_dry);
gives me a stereo ringmodulated signal but
completely loses the dry signal. I don't fully get the syntax yet -
@Morphoice Oh and I forgot to adjust it, but the hslider is presetned in this format:
defaulValue, minValue, MaxValue, stepSize
. So if you want to lower it all the way down to 1Hz just change the freq slider:freq = hslider("freq[name:Freq]", 240, 1, 1600, 0.5);
-
@HISEnberg that I got, just not how to make the signal stereo without losing the dry signal when dry/wet is turned down...
-
@Morphoice Yes sorry I am using my laptop speakers but I see how I messed that up, I think this should resolve it:
declare id "ring_modulator"; declare name "Ring Modulator Stereo"; declare shortname "Ring Modulator"; declare category "Modulation"; import("stdfaust.lib"); // Parameters freq = hslider("freq[name:Freq]", 240, 1, 1600, 0.5); wet_dry = hslider("dry/wet[name:Mix]", 0.5, 0, 1, 0.05); // Ring mod function ring_modulate(input) = (1 - wet_dry) * input + wet_dry * (input * os.osc(freq)); // Process stereo signal, the _, _ repersent the left and right input process = _, _ :> ring_modulate, ring_modulate;
Also typically, I won't use the dry/wet within faust itself. Instead I would use the Scriptnode dry/wet template. It doesn't make it difference, but it could if you want to do further processing within Scriptnode. Either way works fine.
-
@HISEnberg said in Ring modulator below 20hz:
process = _, _ :> ring_modulate, ring_modulate;
works perfect thanks.
that process syntax is something I really have to look at."_" is the original signal, that I got.
"*" is self explanatory, but the rest... gotta binge some tutorials -
@Morphoice This is how I got started with it, though I don't think it is the greatest tutorial series I have watched: https://www.kadenze.com/courses/real-time-audio-signal-processing-in-faust/info
Romain Michon is the GOAT when it comes to Faust resources so just finding his course lectures and online material is good place to start.
-
@HISEnberg superb I'll work through that tonight.
I'm playing around with the examples
process = dm.greyhole_demo;
is a great one... How would I add a dry_wet slider to that?
-
@Morphoice Scriptnode dry wet template is what I would do. If you want to edit source code in Faust, you need to look through their libraries (lib) online and in github:
-
@HISEnberg scriptnode dry/wet. I feel stupid. ;)))))
-
@HISEnberg well the library looks easy enough.
greyhole(dt, damp, size, early_diff, feedback, mod_depth, mod_freq) = (si.bus(4) :> seq(i,3,diffuser_nested(4,ma.PI/2,(-1^i)*diff,10+19*i,size)) : par(i,2,si.smooth(damp_interp))) ~((de.fdelay4(512, 10 + depth + depth*os.oscrc(freq)),de.fdelay4(512, 10 + depth + depth*os.oscrs(freq))) : (de.sdelay(65536,44100/2,floor(dt_constrained)),de.sdelay(65536,44100/2,floor(dt_constrained))) : par(i,2,*(fb))) with { fb = feedback:linear_interp; depth = ((ma.SR/44100)*50*mod_depth):linear_interp; freq = mod_freq:linear_interp; diff = early_diff:linear_interp; dt_constrained = min(65533,ma.SR*dt); damp_interp = damp:linear_interp; linear_interp(x) = (x+x')/2; };
to design an entire reverb is wow. ofc the real magic happens in the diffusor and delay blocks but that needn't concern me
-
@HISEnberg said in Ring modulator below 20hz:
Romain Michon is the GOAT when it comes to Faust resources so just finding his course lectures and online material is good place to start.
funny enough I'm already subscribed to him on youtube lol