Random Smooth Signal

ZynAddSubFX free software-synthesizer by paulnasca 2

Random Smooth Signal is a free oscillator VST plugin for Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Random Smooth Signal is a JSFX script that generates a continuous random smooth signal. It basically generates a “control” signal as an audio signal (or random LFO), so it is definitely not meant to be listened to (directly)! The signal generated is random, however, it will be smooth between the random points generated. The smoothing method used is a quadratic function, based on the moving average of linear-interpolated randomly-generated points. Basically, think of it as generating a specific amount of random points for a given time frame, and drawing lines between these points: that’s your linear interpolation. Now, do the moving average on this whole thing (with the period or length set to the distance between points) — and you got the smooth random signal…

You can fully adjust the range that the signal can vary between (randomly), as well as the distance or duration of one random value until it changes to another, but it will always be smooth regardless of this setting, this just tells it how slow it should be with changes. Please note that the output is a mono signal, so if you use it in a stereo configuration, it will probably be the left channel. It continuously generates such a signal, there is no input to it. It is not triggered by any MIDI or audio.

The purpose of this script, much like a LFO, is to be used as a control signal to randomize other things. For example, you could use it to multiply another signal and randomly vary its volume, subtle or not (that’s up to your range, if you make it close to the value 1, then it will be subtle). Another use for it would be to automate a parameter of a synth, effect, or script. In this case, you can vary that parameter randomly for small amounts to have a less sterile and static sound. If you apply it to parameters that have subtle effects, the result can be much more dynamic than a boring static sound.

For more information and an example signal diagram visit its dedicated page here.

https://sites.google.com/site/octarone

Pitchbend Scaler

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Scaler is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Scaler is a very simple MIDI-only JSFX script that scales incoming Pitchbend messages by a specific factor, each channel has a different factor so it can be customized per-channel. This scaling is useful if the incoming pitchbend range is different than the range expected by the receiving synth after this script, and you can do it per-channel as well. For example a factor of 0.5 on Channel 1 will multiply all pitchbends on that channel by half, which means that the incoming pitchbend range is twice as small as the expected range (let’s say incoming pitchbend range is supposed to be ±1 semitone, while the next synth expects ±2 semitones, for example).

Despite the fact that the scale factor sliders are between 0…2, you can actually use any value outside this range, even negative values (which inverts the pitchbend but not as proper as the Pitchbend Inverter); you just have to type them manually instead of moving the slider. (which I recommend anyway for surgical precision to properly compensate for range differences)

https://sites.google.com/site/octarone

Pitchbend Smoother

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Smoother is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Smoother is a MIDI-only JSFX script that smooths incoming Pitchbend events by slowly going from the previous value to the new value just received, with adjustable randomization and curve shape. Both the shape and the interval can be randomized as well, but only within the range you specify. When using this script, remember that it will introduce lag in the actual pitchbend effects, by its nature. That is in fact very normal for smoothing and is the whole point of it.

For instance, if you have a smooth interval of 500ms, that means it takes half a second to go from current pitchbend to the new pitchbend that was just received. Thus, the “new” pitchbend value will be in effect after half a second, and that’s the job of this script: when it sees a pitchbend event, it will smoothly go from the current value to that new one, in the interval specified. If another event happens while it is already in one interval (in other words, for that example, you send another pitchbend event before the 500ms are finished), it will instead go from whatever value it reached towards the new value, in another interval. Without this script, the “new” pitchbend value would be in effect instantly.

For more information and a diagram explaining the curve shape values, visit its dedicated page here.

https://sites.google.com/site/octarone

Pitchbend Randomizer

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Randomizer is a free randomizer VST plugin for Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Randomizer is a MIDI-only JSFX script that generates smooth random signals to manipulate pitchbends directly with them. The generated internal signals are calculated in the same way as the Random Smooth Signal script, but only done for pitchbends. Then, it adds them to the input pitchbend (or zero, if none). This allows you to change the incoming pitchbend and vary it randomly, but smoothly, in time. The other difference is that it also generates a different signal for each channel — they will not be the same, and each channel will have a different variation.

The purpose of this script is to add some subtle (or not so subtle) variations to pitchbends, or use them as a control signal for some other parameter by linking them. You can even go crazy with it, to simulate some insane pitch effects.

Please see Random Smooth Signal for more information on how the randomized signal is generated and how it looks like. Even though it is similar to it, this script operates fully in the MIDI domain, no audio signals are present whatsoever, not even internally. You don’t have to worry about it, but the code can be quite messy because of this fact.

Lastly, please remember that the generated random smooth curve is randomly reset whenever there is a new note from an inactive channel, so there will be a discontinuity there. This is to give each brand new note that activates a given channel a different random variation and not carry over from a former note that already ended. Keeps it more natural and randomized. If you don’t want this behavior, filter the notes before sending MIDI to this script, and merge them later with the pitchbends on the MIDI bus (after the script).

https://sites.google.com/site/octarone

Pitchbend Filter by Note Channel

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Filter by Note Channel is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Filter by Note Channel is a simple MIDI-only JSFX script that filters the Pitchbend messages by the last Note On’s channel, while leaving all other messages intact. That is, if a Note On is encountered, it will filter out any pitchbends with a channel that does not match the channel of the note, until the next Note On is received which may change this channel. Keep in mind that even if these pitchbends may be filtered out, their values are still remembered, so that if a new Note On happens that uses another channel’s pitchbend, its value will be restored to the exact last value it had (even though it wasn’t sent before).

The main purpose of this script arised from the Key Tuner. This is because the Key Tuner splits notes on different channels with different pitchbends, so we want a way to filter out the respective pitchbends for a given note’s channel. If you have a note splitter available but cannot split the Pitchbends properly to different paths/synths, then just send the entire pitchbend bus to the different destinations, and use this script as the first thing in each of them to filter out pitchbends that are unwanted, by using the notes and their channels (that were split).

You’ll probably not find a use for this script unless you’re doing weird stuff like me, but I released it anyway, who knows maybe it is useful to you. Slightly more information on its dedicated page here.

https://sites.google.com/site/octarone

Pitchbend Inverter

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Inverter is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Inverter is a very simple MIDI-only JSFX script that inverts the Pitchbend’s effective value: up-shifts become down-shifts of equal amount, as long as the receiving synth has an equal up/down range on both sides (which should be the most common case). It also handles the fact that negative (down) pitchbends are slightly more precise than positive (up) pitchbends (8192 values instead of 8191, because of zero), so it does the proper conversion. Please note that it inverts all pitchbend messages, on any channel. If you want only a specific channel inverted, then please route it accordingly in the host.

One use of this script would be to link the inverted result to a synth parameter that should go the opposite way of the pitchbend. For example, let’s say you have a simple sampler that does basic pitchbending by slowing down or speeding up the samples. You want to time-stretch the sample itself, without affecting its pitch, but only its speed. To do that, send the pitchbend to the sampler to have the samples play faster or slower (which also modifies their pitch), and then use a pitch shifter effect, with the amount of shift equal to the inverted pitchbend. Basically, you play the sample faster and then down-pitch it back, or play it slower and then up-pitch it back. So, you just achieved crude (and manual) time-stretching. This is just one example, feel free to use it for anything else.

https://sites.google.com/site/octarone

Pitchbend Adder

ZynAddSubFX free software-synthesizer by paulnasca 2

Pitchbend Adder is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Pitchbend Adder is a simple JSFX script used to add an audio signal to Pitchbend events on the channels specified. The audio signal should be “normalized” between -1 and 1, representing the pitchbend range, which gets added to the pitchbend messages already present in the MIDI bus (but also creating new pitchbend messages if needed). So be careful! You can actually get out of range quite easily (it will get capped to max/min values in such a case). Other MIDI events are passed through. The input audio signal that gets added to the Pitchbend is mono, and it is added to all the channels specified. If you use it in a stereo configuration, it will probably be the left channel, so keep it in mind.

As you can imagine, the purpose of this little script is to be able to manipulate Pitchbend from audio, while adding it on top of other Pitchbend messages already present. If there are no such messages, then it will simply create Pitchbend messages out of the audio signal (because it is added to zero), while its precision is not limited to buffer chunks (unlike ReaControlMIDI), so it is superior even if you use it only to create pitchbends out of audio signals.

https://sites.google.com/site/octarone

Key Tuner

Key Tuner free tuner by octarone

Key Tuner is a free tuner VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Key Tuner is a little MIDI-only JSFX that allows you to play any scale you want with standard MIDI, with any tuning you choose, and it works on any synth as long as it supports pitchbending (or the VST2 per-note detune, but very few do, and even so you will need special conversions). Microtonal scales? Scales with more than 12 notes per octave? No problem. You can define any kind of relationship between the notes that you want, AND tune a specific base note to whatever frequency you want.

The way it works is pretty simple even though slightly more complex under the hood. It maps each input note based on a scale formula to a specific output note with Pitchbend. So basically, input note → output note + pitchbend (on a specific channel). Furthermore, for each scale, you can change the root dynamically to a note on the scale relative to the base (or key), so it still falls on the scale relative to the base, but the relationship between the notes is now around the new root. This allows you to use ONE scale even for different chord roots (but on the same scale) by just supplying a MIDI note on Channel 16 corresponding to the new root. So, you can have one Just Intonation scale for example, but be able to play chords with any root and proper relationships. What’s more, it can actually store up to 128 Scales which you can change with a Program Change as desired, the scales can be completely different this time (and arbitrary tunings for each), no need to have several instances of this script for the same instrument.

Features:

  • Play any scale with normal MIDI notes, and tune it to any base frequency you want.
  • Scales can have arbitrary relationships between their notes, and any number of notes (per octave).
  • Works with any synth as long as it accepts Pitchbend events by sending it (and the respective notes) on different channels for polyphony.
  • Pitchbend range (of the receiving synth) is adjustable per instance, and goes down to half a semitone.
  • Tries to make best use of all the available channels (max specified by user); the iteration favors notes that were released for a longer time.
  • The root can be changed relative to the base (key) of the scale as you play! Notes/Chords will then play relative to the new root, so they will have proper relationships for chords.
  • You can individually fine-tune (detune) notes, even in chords, using special Note After-Touch events on Channel 16. This is on a note-by-note basis.
  • Pitchbend input is accepted as well and simply added on top of the detune pitchbend. (please make sure it doesn’t get clipped, though).
  • It can store up to 128 Scales for each instance, which can be changed with Program Change messages.
  • Scales and their tunings use a custom text format in an external tool (and imported into this), but it is pretty close to the popular Scala .scl format, notes can be copy/pasted.
  • Master and Slave versions are available and bundled, to share scales per process and control them from one place (the Master).

PLEASE NOTE: Key Tuner cannot edit the scales itself, it has to load them. I’ve bundled a simple AutoHotkey script that reads the custom Scale format specific to this script and then dumps the preset or bank which can be loaded into ReaJS (which hosts this JSFX). Unfortunately, the import won’t work if hosted natively into Reaper without ReaJS (i.e using the built-in JSFX hoster); this is because native JSFX cannot load fxp or fxb files, and as far as I know, they do not allow loading of a preset, only importing one to the preset library (which is not what is needed). So, you’ll have to use ReaJS as a VST plugin even if you use Reaper.

You may find it a bit lame to have this restriction (and with AutoHotkey) but it is all pretty readable and open source so feel free to change it if you have different requirements and needs. That said, I personally use it mainly on Linux with Wine and it works just fine so I’ve no problems with it (could work also on Mac OS X if you aren’t bothered by it being non-native).

For more information and a tutorial visit its dedicated page here.

https://sites.google.com/site/octarone

FFT Randomizer

FFT Randomizer free soundbank by octarone

FFT Randomizer virtual instrument is a free sound bank for Reaper and Reajs, by octarone.

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).

https://sites.google.com/site/octarone

Combiner (Pitchbend)

ZynAddSubFX free software-synthesizer by paulnasca 2

Combiner (Pitchbend) is a free studio tools VST plugin Reajs and Reaper developed by octarone. Compatible OS(s): anyos.

Combiner (Pitchbend) is a very simple MIDI-only JSFX script that just combines pitchbends from two different channels into one, by summing them up. Channels 1-8 are the main channels, while 9-16 are the channels that get summed up (combined) with the main channels, but in regards to Pitchbend only — other messages are passed through unchanged. For example, channels 1 and 9 will combine into output channel 1 (that contains the sum of their pitchbends), channels 2 and 10 will combine to output channel 2, and so on. (so only the first 8 channels will have pitchbend outputs)

This can be useful if you already have pitchbend messages but want to fine-tune it manually by combining them into one, if the synth does not support multiple ways to control that behavior.

https://sites.google.com/site/octarone