[Experiment] Designing a "Digital Noise Source" in Gen
Caveat: Digital noise is flawed. Having said that, how ‘less flawed’ can we make it? Specifically with gen objects. (apologies to Mr. Castine)
Most digital noise circuits involve a linear feedback shift register’s output of 0s and 1s being smoothed / filtered into various noise types. The most known source is the MM5837 (Buchla’s Source of Uncertainty) which features a 17-bit LFSR. Unfortunately it’s almost a joke to consider this chip pseudo-random, as you can hear it repeating after only a few seconds. But it does make for a decent jumping off point.
I’ve emulated the MM5837 within Gen along with a typical filtering ‘circuit’ for outputting white noise. The result is definitely not white noise. The LFSR section is easily improved (experiment with length and taps), but it’s the filtering section that could be the downfall. I included some comments explaining what’s going on in the Gen subpatch in case anyone has any improvement ideas.
Anyone else messing around with similar ideas in Gen or does [noise] suit your tastes for the most part?
----------begin_max5_patcher---------- 3768.3oc6c11jqZaEG+0d+TP8zWby1cuWjDBLsIcRl1ISyzWjNsuL2LYXsY2 kDafAvIaRlb+rW.IaClGrjWdRrmLS7dArw57+bzQOfzO+62rX4CAu3FuT6up 8cZKV762rXQ9oxNwB9wKVty4k0achyeaKWGramqexx6XWKw8kj7y+4Z2e+8Z 9AdwtZZZeH8+ex0+S4m7ue3M+XzSOj8l0euN+L962ErOYqaR9MWuvM8G2Gm3 8n2ZmDu.+rKhNbSB7Sh89M27ygOdmBcRV+rm+S+Pj65DlAYXSSurlQ9qHy7+ fS+t09d9mwaSdQO3ge7dj0xB2eemc42+keUjmy1kmJrd9GJqnry8G2bS1K2I n1EuNHz8SKa01qyNXF.g+G8i+oNCAWaoEeMk1vzRPTP4BMqDm7qgtrx1xkGK DksGTy1CZkdAChnyNRuACxnyLnzavCtQMaJwdO4m4s0V931.mjSV1tfM4uGb sVJt8.yz6Z4X95TDbtFXW30lBToRFmdUBk6uj9UUoJdVE5KIdWHZPhJu7fir Wo1um1rhXJaM2heotQbcfKDo2Eust+raTb4zNKV5DFV3zKJ7QxTueLH+FYd2 wS44yNE53ohb+YuCedxwy5DkZ5Io189HVI+kUlKYWL0icygO5IcwNOolQ1ql Dyb8gZdRZRctOsNXK6K+6Ri6ruqvKnxuwsAq+I2MEx+j5YCc887CibiSSyeL 66wKuw8Qm8aS9g58jku9iNqca7CWqmZwxmh71D3mUHJ8IyN8gutz5KrTgzhF S96v2IrlObbpcrO9AmnL8+gsEqKmFdGDrs7kN5xSqk336syIwMwiUXw5Guod 6Bi77SJ8E456jdOdNdcTv1sktUrq7y0bkMoQEqc+EuMIOWJOQ1URe6dgGbAK OpQa7dxMNo74RbdJt7YJ0zdwv0hU+Kc91RCTIUPwy2bqBMmKnk7AWHMIh0tN AedVgJMpSWd12U8AcMkhntzDkErFSWzTJiy930k5ngzGMmB4RoQJkJ4rzIV5 mxlPo4GXoaVVREOiRiYUDHyhHYWtXFFAyxzRlFwx1bgLNWLqyEx7bwrOMkAp 8rPsmIp8rQslQporR0mYp9rSmWy37rTUtdqCLoZJquM79uZWn1+ya29s4AeZ u6e583itQt9qc0BdT6a7C2mn43uI8ekVsMwci12tOI8bmeK2546tNXOS4MO6 hUFiyIyY+CoBerGqujjytZsiF3rOak7AslAsvGLL3Pbx60om8NpIOKqWWXJK tWO+O1mWO+7wcPWVSIq4pe0OfpSoqto3A2MPwHecv1MZA4Ncs6QZIAZnVc9X Ey4aIfym0wapUgwhPrtfuGOC78r55Z+Kumd99vzOj1W6sMIsc+17+jos+uQu qAsf2kdoZ15y.uKK49L24xmZHyh4suj2EYNC7t+CsuPCs+quS6+9El0Dt1ni qcWi7N.7J1HSLYNBTkYxoNOfkB3.pLTvx5+iYsal1fYkVKaefgsO3vqzGvmV QJyUPMDxEPUeev8SGs2vrkAnWo4EiWo1iGesem2KSA0m+7NXyRhEUjHezqsq ajwW8ceILJqW6egmO5V7s+mu4CwN6B25FkNz4O9w+1DvyvaWvf0jLxRn1EPz 4UKyFV+6QukYVkBAaXFMCZY9Yu3jfneU6WQZ5SnTTlV4dCrPtgUpuaH1yeBk Fh0JM1TH02V8U+0a8Byxwj9enrIsN6+lPtC930vB0fMFo99i7FrQe3cYsUe6 6RGw1sgA+x6P5e7i2cu4m8Ye1zw2P3MXXQDx2Pdk9FcXXDEFFAechH1vHrU+ QQba5PnmNsQSXO1KrsPCf1X1zUooiG3X6Ch3ALwvTXzg4d3O7KBQjbOlH0O4 SpHVc5655QgwEWSxwGqzkE2YPlkI0zCgH48kwRn75lvrCMX807vpaRvYGReF M4D5SoImf2sSAmbBCXxI51ZArGMsXSNAElahd1avWp9hM2DD02c34OkdHlEW D7WLSj5O2CkmWHCqz5DS1YFhs1YPqDJOEtG8MkWSpYqfkKrrJysor2W6Nt3f 8QqOHq79BpU0J23Fm34eb079cmZVrl27yda1TckxxV7nwYKK0MWej30ZVYOd AwsKrj10NuM4q+NtOAqajMfRCayCYWqdzgGNkwwipV3FO0BKiZsRchBjvrrm kVUV0ajZXU5RXVT0wYISUqrUMip3tLjLJ70meEqayxnhpdDBSJjeM+noT9Up L4WUnLQ1xDbiTF6RplC0UGyBIamhvpgcQjwtTm1Nvxji0RcrKhjMcnFQgxji mnL9JSI6BsZz6ESoyDht9tufLx6TBwjM2yrU9P9QSntnHkhfUmIBPJ6xDqN1 kL8QwRc7WVRMtBzqqlIe3BD1NkGSMx1KkmeHlSpGFhNxOZBUu0RllcTmv.aY iB5CyR66uo5UN9uNY1cHBNNeAaz7h035nrA1nkEoQoEnwpqkxFCiPUcccMX7 Jwt3Nwr90wUome1DWIeIHZ7TQ9Rw0T+hpn4Uph32HwisttBKoj3oc73EoPzc s7+snvqd0wp7chMhbIDEQHWav5aFDEYSNgnHKLhkD.AHJBPTjpgnHAVBtq56 kfKkx2W7RrDbwyf0Vdl3Z02hqAa4RIm3RlGhqYuKt5WQjqw7Pbo8s3x6whbh KE1zOc95JSpM8ybXyfF67r1W546kLIV3k7lG4nC2BMDqtOBTMnfCfs723aJZ wpFPfZAcqSf2OFNn.DqV.xDpFzgd.RQhwHV0f4.uRlX0CzKN0iBVOXETOn67 .bT5QLjodfMTOni8B7MrKRldEoq90ClVdA9dRm+GAyFY.Yi5PO.euYfkIaDc VjMZJro3VU7m+AC62J7MbBAlDRweKsDL9m.w+cj5qW7GBLAi+QP7e24A3bcV pAkoCcFsi6LZA71JVmfrU+5.YOD.i99g.fuhmMn073ArP5czGcEOZvUyCsE2 6Z6U7jAMmErp.q8kbBLqsNaIsLEl.eF+hHx.NDp5ythLvgbxYrwIwYxzT4AW A5MBFQFDT1cEOu79bsHLXT.YlBJAYPJ.Rc1dxHo18Zj4ocYNOQ.AZlh1BEBZ Lj9DcPJBwNTHXMHkcYoNlEclRlKY1Q4Xx7ztTHyxRlvPyYJf3rlm1kBsO9kB 0PJDh5jBOXpSmMv5yShWIkcgoySzPg0mknFRcpcQkcdMdELxfZYmscWYvqAg OdvDhAFzADlOkjCN+PTY4vnKkCacUWNL6P4fhnptbrpCkCCCUO5nKScPU95J 48BnqjChopWWwtCUiIoXXOOghp8DfeVi.noFe9IYKJuZP.uZtNh.YHLuZzAd 0bJECvqFfWM.uZ500YCvqldTbAd0zmhKvqldb42A7pYjWao.uZ.d0.UC.d0. 7pApF.7pA3UCTO3MNuZlbbpQrcHOvoFfSMytwlAbpYDUefSMitG3sKmZlPsC TlWMB1N.vqFfWMyjNiVfSMh0H.voFfSM.mZ.N0.bpA3TSO5L.N0.bpA3TCvo FfSM.mZ.N0.bpA3TCvolE.mZ.N0.bpA3TCvolAyt.N0.bpQwrKfSMitcAbpo a4TixyZBfSM.mZV.bpA3TCvolIEmZnF.mZNEbX.bpYJZVyHN0LYoqBhJJcUJ s8uA5pT71.zUAnqBPWEftJcm3BzUoGEWftJ8n3BzUomDWftJisG.nqBrAl.5 pLM1.Skophf6iUfpJ.UUlYsB.TUYr8..UUFU0+sKUUlbzTQvVgAZp.zTYlD+ CzTYz8..MU.Zp.0C.ZpLpcBEnoROMY+.MU5OsEnoROps.MU.ZpL9NCflJ.MU .Zp.zTAnoBPSEflJ.MU.Zp.zTYAPSEflJ.MU.Zp.zTYvrKflJ.MUTL6Bnoxn aW.MU.Zp.zTYw.QSkSG.zT4NMp5Gc.zTAnoBPSEflJ.MUlazT4y0Ry+zNOUZ gYJnqlYJ783AewcPVU2iXsoUhjLDSAMLxXZEXMpott93IkrmYMawK1lRZdkJ o9vnjgO6DGDMdxHS.MrtjLRuVD9TiLd76n5y1+jxVWhsB5a0g7lk60rTwugI gtRmcqOUV8owZMZP5xLoRQokxr9jnLWsjTeQlNYJwUmtWgeHziVYtlhRCsMu ZZoyVhDMiDrLeVmEw14qPZzphyBQ9Qk+R6+5s5hZo3WkkhsJZo4GMzVJRv3P h9jINrFQugxLY5TlEMsJY0UFQwhgLPqXUgzqdjMsPvlMc3i0VInFTSB8wxuI ZZZqISI1RFQFIefFeJMP7kQJOkc1QCb3jkLYttdCEiKZn4GMUMTxqxPInhFZ 9QRYn7Q6yNS9qLiO2zJLPJlo1x.nNM3oa+zgSUYPSwdO4mNrjCkv5G1TCCYp 1cB.CYUGfF.9blmVZv6G1jHMOPoZFjT2HI+kATR3qWb1PHMIsJInwSR9S2+o iKg9AKPgu65IU1xHkTE8wSUtc3CTDotio83IIY4bunpbm1xGb7epI0Aespyg .Fy1BXLWMdpSny5eRS+8Zniy5WKSUUWEyv2ogVjVUEqwSUbeILR6O+H5CD7. pJLzaWc2xWRULkTUPWgprovMqhc+31.mjKY7GLbBQ.C2pvbVZ1jcSq25Ndyi RkhD2nefQf4icWQRKOdcP3orE0tirpk5VEQeFhua1HMYJjNK7MNLsHDETtTK cjZy6E3CzDSmSSfFrHpc2Ugb+tGbiDIe8Ywg6B1TDB3xk.O8tVBH2srEd4yv tsda0RozwK2kefWr6v0M.9ysA0.nIJs6BQCPtq7r.e50k8pkQJXqe.W8b7lT mgdj53udy4IGOeQpMjip9167RK8giYUFsaUqpOxsiy.69aabVKeFXtkb.BtG esNC4x4ey+TkeNVrx94ihmaAs+7TZZS+UZUVTcT6UG6cEorKKNklzqQuzXLo JM3AqzrRfRCYxUZPSlRCd3bUVXAJOVnASdrPBTdVMbxitHxyv4tLsE0cMPkG QBmOSDG8xyYhXuVdrDo7LbwylB0lt0vUdnhTdLGrxiARz56noS4wjLszGp8D q7bs8Jj0C5y9MZKqnb1uIam8awV0eC1Z52dszum+3l+enbhem -----------end_max5_patcher-----------
Hey, you might be interested in this:
I actually wrote a small bachelour paper about this. I might upload it somewhere or of you’re really interested I can send it to you.
Digital noise is flawed
Why? Because it is not random but pseudo random? Old discussion.. But you might also beinterested in knuth’s "The Art of Computer Programming" There is a great section on pseudo random algorithms and of course it shows algorithms capable of generating random numbers with periods that are so long and so "random" that they are apropriate for statistical problems that require much more quality than the human ear :)
I placed that there to address the debate and move past it. I meant in theory. The point is to generate and celebrate pseudo random noise. Both have their uses and faults depending on context. As a comparator noise seed or weird sound source it works great. I apologize for the confusion.
Here’s a new test patch I came up with while experimenting with different filter methods. After reading http://goo.gl/gYYhHi I tried to copy the 16-bit LFSR he starts with using a reworking of JVKR’s rungler register.
I generate two noise sources from this crossfaded with the left dial. One straight from the last bit and then one that’s been put through an 8-bit "DAC". As expected the only difference is volume.
Then I tried two different filtering methods. One using my weird op-amp sim that is probably incredibly flawed, and another that uses math to move the range down ‘-1 to 1′ from ’0 to 1′. This difference is selectable with the right dial. Op-Amp is noisy but squelchy(?). You can hear the pulse train in both but Math is "cleaner".
Both go to through the same gen onepole sub patch set to a cutoff of F/20 of the internal clock which is adjustable. When F is set to values at 44100 * 10^n weird behavior due to the sampling rate is observed. Notes are included.
Play around, have fun, share discoveries. ‘Choo Choo’ goes the pulse train!
(ignore patch name, it’s based on the inspiration paper. the results are definitely NOT white or pink noise.)
didn’t mean to hijack the thread.
great idea! will give it a go in gen~ soon.
but in the meantime, since you seem to also be asking about digital noise generation in general, thought you might be interested in this:
supercollider has great noise generators, i remember trying those max ports out early in max5 and being impressed… not sure if they still work in max6 but you could clone the git to look at the source code there if not.
"Anyone else messing around with similar ideas in Gen or does [noise] suit your tastes for the most part?"
noise~ seems great for full-spectrum white noise, but pink~ is interesting too.
Awhile back I made an automatic sah in gen~. It samples when the input changes enough; it’s also a way of removing low-level jitter from a signal, making it really useful in CV feedback loops. It could be interesting with these noise algorithms.
I’ve also been working on a gen-based Gaussian distribution with skew and scale in the vein of the Source of Uncertainty. (a biased skew rather than the normal statistical skew)
I’m currently building a Turing Machine Eurorack module, which is influenced from similar bitshifting techniques used in the Wiard and Buchla mods. The project is well documented, and includes some interesting links to research here which may be of some use.
@cudnylon I had to take a little peek into your patches and they’re nicely done (thx for the share!)
Personally, what drew me towards these modules was the "flawed" RNG aspect. I’m currently experimenting with scale quantization on the output, and trying to observe the effects it has on the RNG distribution as well as overall "musical usefulness". I’ll post something when i get a bit of time to finish it. In any case, its made me appreciate max-msp as a prototyping tool – its a lot easier than electronics :P
@Peter really cool work on the BEAP project. I haven’t had time to look into it in detail, but it would be good to add something along these type of mods. The gaussian module is ok, but thats a bit too random for me (although useful as part of the distribution).
@Justin, thanks. At some point I’d like to get the rest of the Source of Uncertainty implemented. Would be cool to get the Turing Machine integrated into BEAP.
I have a stretch quantizer from my synth library that I need to port over; it works well with the gaussian stuff. (stretch as in it maps the specified values over the range evenly, so sending a triangle wave LFO through will get you a nice even scale/arpeggio)
For rhythmic stuff, there’s also a new clock divider in BEAP based off of 4MS’ Rotating Clock Divider. (but with some extra fun stuff, like changing the step increment (e.g. 0.5 instead of 1 will double up))
We have an implementation of turing machine-style bit munging implemented as a full instrument in our group – It’s relatively simple, it all boils down to UI, really. I’ll ask if the maker has any insights.
@peter that quantizer sounds like fun!
(I’ve been thinking a lot about how in synth circles, quantisation clearly means "of pitch", while for a computer producer it invariably means "of time")
The Quantized Random Voltages section of the Source of Uncertainty is now in BEAP (the N+1 and 2^n sections).
It has a couple of tweaks on the original (the 266, not the 266e). There’s variable time correlation; with 100%, it uses an analog shift register of n sections, so the values are globally random, but locally correlated. At 0%, each stage uses it’s own random comparator. You can also choose whether the 2^n section is MSB or LSB, which is fun with time changing values of n.
There’s also a skew parameter which is CV adjustable. It basically adjusts the threshold for the comparators, but it works pretty well–I get the sense that may be what’s going on in the Stored Random Voltages section…