Log InCreate An Account
  1. Plugins
  2. »
  3. octarone
  4. »
  5. FFT Randomizer
  6. »
  7. Details

FFT Randomizer

FFT Randomizer
FFT Randomizer by octarone is Soundware (samples or presets that load into other products).
Product
Version
1.0
ReaJS 2.36+ (free from ReaPlugs) / REAPER 5.25+

PLEASE NOTE: the (Mono) mode does not work in ReaJS yet, because it doesn't have the fft_real function, it needs an update from Cockos (works fine in REAPER).

The system requirements for either one those products will have to be fulfilled to be able to load this script in them. (e.g. ReaJS currently is Windows only as of 2016, but REAPER works on Win/Mac and even Linux alpha...)
Soundware
For
Copy Protection
None
Open Source
GPL 3
Important Note
** Latency may not be reported properly by ReaJS, the latency is equal to "FFT Size" samples. ** Samplerates of 88200Hz or above only process half of the spectrum, this is intended, NOT a bug!
My KVR - Groups, Versions, & More
10 KVR members have added FFT Randomizer to 9 My KVR groups 14 times.
Not In Your MY KVR Groups
(or group limitation prevents versioning)
+9 in private groups

KVR Rank

Overall: 6475   199

30-Day: 5304; 7-Day: 5893; Yesterday: 3832

FFT Randomizer is a JSFX script that does spectral randomization smoothly, both magnitude and phase, to shape audio randomly. It comes with similar settings as "cloud fractal noise" algorithms in imaging software (such as the layered cloud generation) but instead of generating images, you sculpt up the spectrum's both magnitude and phase with it. In effect, it's inspired by the Diamond-square algorithm, but it is not exactly the same, as it also allows you total control over each of the layers and obviously deals with sound, not images.

Be warned, this is a geeky and experimental effect, you will probably not understand it right away or find instant uses for it in your music. It's intended to design sounds or instruments and add some life to the basic noise types we're all used to, and shape up any sound you can think of randomly to make it more interesting. It's also an effect for perfectionists who like to fiddle around with sound in more bizarre ways.

This is not your conventional FFT randomizer/processor. Most of those FFT-based tools deal with FFT bins directly, for example by randomizing them all on each window, which doesn't have many uses in my opinion, because it's dependent on the window size for the underlying effects and limited to that "geometry". It uses mathematical models that are completely independent of the bins. The only time it affects the bins is at the end of the processing chain, when they are simply interpolated and smoothed based on the model calculated prior. Think of it as having a mathematical model that gets applied to pixels on an image with values between pixels interpolated — instead of randomizing each pixel itself, which is what standard and simple FFT tools would do. The latter is obviously worse, because its effect depends on the resolution of the image itself and is very limited in effect (it only makes high frequency noise!). As a result, the output on the sonogram can look like "clouds" if used on white noise input, but it works on any signal to shape it.

I strongly recommend that you use a Spectrogram/Sonogram to visualize what this effect does, best to start with white noise as input or while setting it up, and then replace it with the actual signal you wish to process. (for example I personally use Sonogram SG-1, an excellent and free Sonogram)

Features:

  • Filter any input sound randomly and dynamically by changing its magnitudes and phases, independently.
  • Layer-based random shape algorithm that changes with time, so you can have smooth shapes, or more noisy shapes, and have them slow or fast independently.
  • Exact and independent control over each layer, even including a spectral graph to change the layer's effect on the output, depending on frequency.
  • Special "Additive Mode" on phase amounts to have all the phases changed relative to a new "center", so the entire phase spectrum will shift, but randomly.
  • Ability to use special MIDI Program Change events as triggers to "reset" the shape and get a new one, within a time specified.

Since you're probably still confused about it and without having a video, follow the below two examples to get an idea of what it can do and start playing around with it.

Quickstart:

  1. Use a Spectrogram/Sonogram that allows you to visualize easily in realtime (the one I use: Sonogram SG-1), insert it after this script, and keep it open (to look at it).
  2. Send white noise to the input of this script, it should show up as white noise on the Sonogram for now.
  3. Reduce the Gain so it won't blow your speakers, say set it to -20dB.
  4. You should have Layer 1 selected in the drop-down by default. Then adjust the Magnitude Range (dB) to an amount that is less than the Gain, say to 16dB.
  5. Increase the Magnitude Speed (Hz) so the changes start to happen faster, make it about 1 Hz or so to be smooth, since we're on Layer 1.
  6. You should see patterns in the sonogram on the noise! Your white noise is no longer boring and static, and it varies over time: its magnitude over different frequencies is being changed. Try play with Magnitude Contrast and see what you get! What is the difference? Increasing the contrast clearly makes the variations more sharp, right? What about decreasing it?

And remember this is just one layer, try changing the layer from the drop-down menu and see the difference it makes (don't forget to also set that new layer's respective parameters, as all of the above are specific to each layer, except for Gain). Also remember that, while white noise is a good way to see and learn how this works, and even during designing the parameters and setting it up, the script can actually be used on any input! Please don't forget to turn Gain lower if you add multiple layers with more dB range, though.

Simple Example Showcase

Here's a very simplistic example of a nice evolving sound you can generate with it by just adjusting a few parameters:

  1. Send white noise to this effect.
  2. We want to change Layer 5, so click on Edit Layer dropdown list, and select Layer 5.
  3. Set the Gain (dB) to -27.
  4. Set the Magnitude Range (dB) to 42.
  5. Set the Magnitude Contrast to 15 (max).
  6. Set the Magnitude Speed (Hz) to 0.5.
  7. Set the Magnitude Speed Modulation Rate (%) to 120.

Behold a nice atmospheric and evolving breathy texture! And so far we've only been demonstrating white noise as input, when in fact it can be used on any input. You can hear this example in the audio player. The same settings, but applied to an Octaved Supersaw can be heard in the second audio example.

There are way more things and parameters which won't be explained in this introduction. For more information, visit its dedicated page here. You can look at the comments below for a lengthy explanation if you are confused of its purpose, or read that "essay" on its page at the Closing Words & Another Example section. :)

Remember that you will need a JSFX processor that loads JSFX scripts to load it. ReaJS from ReaPlugs is free in VST format, while REAPER can also load JSFX natively. (technically I believe Cockos open-sourced the interpreter, so there could be more)

Please note that the mono mode does not work yet in ReaJS as of this time, until Cockos updates it to add fft_real, it will only work in REAPER. The stereo one works fine though so you can use it in any DAW with ReaJS, but will use more CPU, otherwise it is identical.

Lastly, because it is a fully open script with no obfuscation, feel free to take a look at it or even edit it, I tried to comment where I found necessary. Be WARNED, though, that I optimized the audio processing part for speed. If you find it unreadable in certain parts, it is not on purpose! Just a side-effect of the optimizations... Most of the math is, however, not commented, since it would take too long to explain and I'm not good at explaining math (I used Computer Algebra Software to devise it from ideas anyway).

Latest User Reviews

Average user rating of 0.00 from 0 reviews

Products similar to FFT Randomizer...

Comments & Discussion for octarone FFT Randomizer

Discussion
Discussion: Active
Codesound
Codesound
4 December 2016 at 10:17am

Windows 10 x64, Reaper 5.29, reaplugs236_x64-install.exe.

Hi, .

I try to install fft_randomizer in my system but Reaper 5.29 doesn't see this script:

the reajs plugin isn't installed with the standard Reaper setup; I need to install reaplugs separately but when copy/paste fft_randomizer in the (for example)

C:\VST\Reaplugs\JS\Effects or in any other dir, refresh the plugin list in "Reaper Options/Vst...", the fft_randomizer doesn't appear in Reajs list....

what am I doing wrong?

Thanks, R.

octarone
octarone
5 December 2016 at 11:15am

If you installed REAPER without the Portable option, ReaJS will look first inside Reaper's "Effects" folder in AppData, so you have to place it there, I believe, or uninstall REAPER/delete the AppData folder of Reaper. Of course, that is assuming you don't want to use REAPER in the first place (REAPER can load the JSFX by itself without ReaJS too).

Alternatively, you can have a look at reajs_info.txt and create a small reajs.ini and place it near reajs.dll with the path to the "JS" folder that contains the "Effects" folder (relative to reajs.dll), but unfortunately someone else said this did not work, but removing REAPER's AppData folder did work.

If that still doesn't work, sorry I honestly have no idea why, I think it would be best to search REAPER forums or ask Cockos then or post on REAPER forums about it.

THIS POST HAS BEEN REMOVED

Codesound
Codesound
5 December 2016 at 10:10pm

Hi, .

I'm stupid.... in the video below is described how to install jsfx in Reaper... now fft-randomizer work fine.

https://www.youtube.com/watch?v=9EegrN-gF5o

thanks for all.

R.

octarone
octarone
6 December 2016 at 4:21pm

Glad you got it sorted, also thanks for the video link, now I can show people if they still have problems with JSFX, makes it easier. Have fun. :)

Architeuthis
Architeuthis
5 December 2016 at 9:58pm

Could you post a demo of the effects on impulses rather than noise? A low frequency sawtooth and also maybe an audio-rate sawtooth.

octarone
octarone
6 December 2016 at 1:08pm

Ok, I've added a simple octaved Supersaw example with the same (simple/slow moving) settings for the FFT Randomizer but with some phase randomization too (probably inaudible xD). The chord progression is slow because I wanted to highlight the effect, since it was set at 0.5Hz movement (on the only Layer), you could obviously make it faster but I wanted to illustrate same settings vs the white noise. I also used a slight compressor at the end of the chain, because this effect can get quite wild in dynamic range! In fact, it would benefit from more compression in my opinion for such "drastic" effects like this (42dB range for a single layer, the Magnitude Range setting), but I wanted to leave it more "raw" so people know what to expect, so didn't apply much compression.

Now one thing to keep in mind is that to hear the effect profoundly you need a "rich" input source, which is why I went with not just a supersaw but also octaved (it's doubled 1 octave below). This makes it able to work with more sound material, thus you can hear it much better, if that's what you're after. Of course I didn't play with the graphs at all so all frequencies have the same "shaping" randomization, you can see it clearly if you inspect the .mp3 with a spectrogram/sonogram, but you can change that, and per layer too.

Please note, however, that since it uses the FFT and not a Wavelet-based transform (not available in JSFX anyway), the shaping etc is linear, thus the majority of the effect will be in higher frequencies that most people consider "less important". This can be both a blessing and a curse. A curse because, well, most people care of the lower frequencies so they won't instantly find a use for this effect, but that's fine since I intended it to be more unique/experimental/not like anything out there, not to be super popular (although that's fine, but I doubt it will be hah :)). A blessing because there are incredibly few plugins out there that allow you to create dynamic shapes in the higher spectrum with enough precision. I mean, there's not much choice out there in the wild especially not free.

For instance, it can work great on "simple" input like a simple instrument, especially the phase randomization there, but in those cases it will be very subtle in effect but that's okay. It adds "dynamic variation" to otherwise static sounds. If you look at the spectrogram/sonogram of a real acoustic instrument you will see such "shapes" and variations in its noise/breathiness/etc AND in its harmonic/inharmonic tones.

It is my firm belief that this is something overlooked by a lot of developers out there! They focus too much on what every other synth/effect does, but looking at a synthesized sound versus a real sampled one is very recognizable purely by this "subtle" higher-frequency shaping and dynamic variations. This effect can help with that, too. A lot of things we hear are subconscious and not always immediately known "why" they give a certain vibe. I think part of the "magic" of real acoustic instruments is this subtle variation in not just the lower frequencies/phases but also the upper ones. It makes the instruments more "alive". For example think of a bowed or wind instrument and its 'breath' noise effect.

Most synthesized sounds use just filtered white noise. It's "static" and too simple (in shape). But real breath sound changes not just in amplitude, but in fact, its shape is constantly changing in time, subtly but subconsciously we "pick" this up, IMO. The human voice is incredibly complex in this "dynamic filtering". Synthesized voices ALWAYS lack this integral effect, you can inspect their spectrograms to see it yourself, that's why they always "sound the same" when you make them sing a long note or repeat a melody/passage. They have no "life" to them. That's why synthesized choirs work better than voices: this effect becomes less pronounced, because of the average random filtering of everyone in the choir, so it becomes more like "white noise" instead.

Of course with the FFT Randomizer you don't need to apply it just to the noise, you apply it to the whole thing! In those cases, "subtle" settings make the most sense. A range of 42dB in the shape is far from subtle (because it's both +/- so it's huge), for those cases you'd use 6-10dB per layer or less! And of course, phase randomizations too. Phases are mostly inaudible, but *changes* in phase add more dynamic variations (which is the point of the effect). Phase changes are noticeable in transients (it diffuses them) however. For example if you use it on samples, you'd get some sort of free subtle round-robins because no samples will be the same! They'll differ slightly in spectral shapes AND phases. Keep in mind for transients to mix this with the original if you do phase manipulations, otherwise you'll get a lot of diffuses transients, which can be cool but if you want to keep their punch I guess no. :)

I'm not saying that the FFT Randomizer does the exact natural dynamic filtering found in acoustic instruments. It doesn't use physical modelling at all (even though most physically modelled instruments, apart from stringed ones, lack this dynamic variation too...), but it's inspired from purely artificial "imaging software algorithms". If you used GIMP/Photoshop, you know of these "cloud" effects that are used to make artificial textures, it's the same principle. Natural things tend to be... ahem, "random". :)

Still, it helps to give some life into them, better than nothing.

Plus, you CAN use it experimentally and for sound FX design too. Like the two examples I posted, including this supersaw demo. These are exaggerated effects, but that's what demos should be for I suppose, so people get hooked to its possibilities. In these cases you use exaggerated settings to make the effect strongly known...

One last thing: if the linear frequency shaping bothers you and you'd like to use it logarithmically like other effects, you can always try to make the higher-frequency shapes more audible if you want, by pitching it down after, or use transformative spectral VST to reshape those higher frequencies down But for sound FX only, otherwise it throws the harmonics out of line. Still, such "dramatic" and strong effects are made more for sound design, anyway, not for the subtle variations I spoke of earlier.

Obviously, this is for sound design things, but I figured I'd say that the output from the FFT Randomizer can be *extremely complex* and varying as an input source to crazy modulated effects you can use after. So you can use it for *anything* to post-process it as a complex input. If you need a rich and dynamically varying "texture" for your sound design and want to process the hell out of it afterwards for effects, consider the FFT Randomizer at the beginning of the chain too. And you can guarantee that almost nobody will have the same texture, unlike if you use an already made texture from a sample pack :P.

Ok, this was a super long comment! I'll probably add it to its dedicated page, but thanks for making me realize it was lacking this kind of information. Being the developer of something makes you lose focus of what unfamiliar people will think of it. haha. :)

octarone
octarone
6 December 2016 at 1:14pm

Oh and one more thing I forgot to mention, if you are bothered by the effect "carrying over" to the new chord for instance and you'd rather want it to be a completely different shape (good for transient effects or other fast attack cases), send it a Program Change a few milliseconds before the desired spectral change (and use the MIDI Force Change (ms) parameter to adjust how fast it changes).

THIS POST HAS BEEN REMOVED

Please log in to join the discussion