Old 03-26-2009, 03:49 AM   #1
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Third-Party JS FX Library

*** Please do not reply to this thread, send me a PM instead ***

As I love (most of) you guys so much I have put together this JS FX Library, with summary descriptions of the JS FX published by Reaper users, and links to the original threads.

I have organised them into categories, with the recent threads first. Please let me know, via PM, about any new JS FX, errors or omissions.

Shortcut links to the FX categories:
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 11-23-2015 at 02:55 AM. Reason: added MIDI FX section
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:50 AM   #2
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Audio Editing / Recording

Retrospective Record

JS-utility Records incoming data to the buffer during playback.
The buffer is refreshed when you start playback(if received new data).
Script Reads MIDI-data from the JS buffer and adds them to the currently selected track.
Supported basic data types:
NoteON-NoteOFF,PKeyPressue,ControlChange,ProgrammChange,C hanPressue,PWheel Change.

JS-utility Records incoming data to the buffer during playback.
The buffer is refreshed when you start playback.
Script Inserts Audio-Buffer from JS to the currently selected track.

- THE free drum replacing solution

- Velocity sensitive drum replacer
- Force variation-slider to avoid the machine gun-effect in for example snare fills (Round robin *beyond* layers)
- built-in sampler that supports any samplerate
- Dynamics-slider to control how hard the drummer beats those things
Put DrumReaplacer on any track where you want to replace a drum, lower the threshold until you hear it in action.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 11-23-2015 at 02:57 AM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:51 AM   #3
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Audio Analysis

v1.1a: http://forum.cockos.com/showthread.php?t=134869
v1.0: http://forum.cockos.com/showthread.php?t=133801
James HE

Multi-receive spectrum analyzer

JS-multifreaq is a tool that lets you see your mixing problems. You insert it into a track with up to 14 channels and route the tracks you want to observe instant frequency distributions of to the channels 1/2, 3/4... etc. For example: bass drum is sent to 1/2 and the bass to 3/4... and lead vocal to 5/6... in this case (if you only have 6 channels on the track) you'll see 3 different spectrums for each source.

Liteon's JS plugins pack

VUMeterGFX / VUMeterGFXSum (vumetergfx/vumetergfxsum)
- Vintage-style VU meter with response and release controls. Uses the GFX section to draw all graphics in real-time. Summed (L+R) and stereo versions.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 02-05-2014 at 02:54 AM. Reason: Added Oscope+
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:52 AM   #4
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Synths


* Waveform design with variable harmonic width
* Filter (2nd-order lowpass) with envelope
* LFO (can modulate filters, note freq/amp, or other LFOs)
* MIDI Controllers (can modulate filters, note freq/amp, LFOs)

a brand new JS Synthesizer and More



syn_binauralbeats, as the name says, binaural beats, brainwave synchronization, alpha waves...
syn_kick, very simple kick drum synth, ala/inspired by the ones in FL and lmms.
syn_plucked, plucked string synth, karplus strong, waveguide, ...
syn_reatalker, speech/phoneme synth, shaping up, but more work to do here

Liteon's JS plugins pack

* LorenzAttractor (lorenzattractor) - Synthesizer based on Lorenz Attractor formulas. Has two oscillators: one sine wave, one square wave. There are various parameters that control both the sound and the plotted graphics. Can be used to produce ambient sounds.
* Pink Noise Generator (filename: pinknoisegen)


* generates sine, noise or square wave based on triggered by track input
* gate has attack/release
* wet/dry mix
* noise and square wave can be low-pass filtered
* dynamic pitch
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-05-2016 at 03:45 AM. Reason: added geraintluff's PadSynth
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:53 AM   #5
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Generators


A MIDI sequencer that allows random selection of some (or all) notes in the sequence.

CC Injector

>>> https://i.imgur.com/yusgv.png

"Inject" the desired CC message from another track into the Automation path, via Jeffos' MIDItoReaControlPath:

VI Sculpt - to shape virtual instruments

VI Sculpt performs multiple tasks to help automate the sculpting of pre-recorded MIDI data for more organic playback, especially for virtual instruments that offer many articulations and/or CC automation, such as VSL and Spitfire Audio libraries.

arp!0 - groovy MIDI arp

arp!0 notable features:
  • independent length for each control sequence. parameter polyrhythms!
  • all real-time controls visible at once. change anything immediately.
  • expandable control grids for even more immediacy!
  • accent and offset sequences can create cool rhythmic grooves.
  • step length and voices sequences for uneven, chordal arpeggios.
  • variants for quick change arps with mouse or midi programs changes.
  • user definable sort transforms rearrange input notes in unique ways.
  • syncs to the beat when the host is playing or recording.
  • plays in time as settings change, and through variant & preset changes!
  • all arp parameters are saved in Reaper presets.
  • real-time display of active notes, played notes, and current steps.
  • pronounced "arp!-oh" (the bang is silent :^)


  • normal mode & trigger on note mode (optional restart)
  • 2 trigger note ranges
  • freerun without "gaps" when changing frequency
  • simple LFO-stuff like pulsewidth & phase
  • trigger on CC (first CC toggles on, next CC toggles off, next on, ...), CC# definable
  • LFO fade in & fade out in trigger mode (various fade shapes)
  • CC support for every slider

Nova Two - generative sequencer

It is an evolution of Nova One and has enough new features that it's out there as a separate plugin. The main upgrades are:
- resizable matrix, up to 17x17
- user selectable scale, lots of predefined scales
- scale transposition
- triggers for rover deletion

Nova One, (inspired by Otomata http://www.earslap.com/), that generates MIDI sequences based on rovers moving through a matrix. Rovers that collide with walls make sound, rovers that collide with each other change direction, and rovers that strike obstacles have their direction and position affected in various ways. The end result is a sequence of notes that evolves and changes in (usually) pleasant and unpredictable ways.

Stepsequencer for Battery and other Drummies
  • JS sequencer baby modification
  • changed the size, so that it fits nicely on my second screen together with Battery
  • the Screen has a resolution of 1290x1024 pixels. I have Reaper running on my other screen.
  • If you have a larger screen, you can modify the size of it of course.

New Improved JS Super Arp!

Here's the new, improved version of whatsup's Super Arpeggiator (GUI version) which features:
  • New play modes
  • Chords
  • Multiple Patterns (up to 32)
  • New Slice options
  • New GUI (again!)
  • A help screen (click the question mark)

a brand new JS Synthesizer and More (Super Arp)



My original idea is/was that whenever one of these coloured squares light up, a MIDI note-on is sent out, pitch/note number defined by vertical/y-position, like a piano grid or normal step sequencer, and the x axis (horizontal) something else, perhaps some MIDI CC. and there can be three separate sets of these triggers (r,g,b).

Or, there can be three different 'output types', one for each colour. Red could be MIDI note, green control change and blue something else...

JS MIDI Note Preview

A plugin I made so that I can preview the drum sounds already loaded when I load my drum template tracks.

To be able to draw automation envelopes for external MIDI gear (or internal). Simply automate the plugin's parameters as needed.

El Chordero - js chords sequencer / micro arranger

MIDI Chord Splitter

Say you have a cool monophonic-synth (like FXpansion's free Orca) but you want to be able to play chords with it.
Solution: schedule the incoming polyphonic-MIDI-notes to individual Reaper-tracks. Each such track is embedding an instance of the monophonic-synth.
Endless possibilities: Adjust each channel separately (sound, panning, etc...)

1. create a track for MIDI-input
2. insert an instance of the MIDI Chord Splitter Effect
3. Set the number of voices to use
4. for each voice create another track and insert a VSTi of your choice
5. route the MIDI-output of the first track to each instrument track (1:n)

-- Track1: MIDI IN -> MIDI Chord Splitter (parameter Voices = 3)
-- Track2: VSTI Synth1a, Receive MIDI from Track1 to MIDI-Channel1
-- Track3: VSTI Synth1b, Receive MIDI from Track1 to MIDI-Channel2
-- Track4: VSTI Synth1c, Receive MIDI from Track1 to MIDI-Channel3

Sendo - JS Graphic, MIDI CC timed sender

This sends Controller changes based on a timed sequence, with randomization.

VeloCycle - MIDI Velocity Sequencer - Randomizer

FrAr - the free pattern arpeggiator

FrAr <Free Pattern Arpeggiator> is an arpeggiator which doesn't generate any sequence itself but uses an arbitrary melody as a pattern. When you play some chord, the melody becomes played by the notes of this chord preserving its timing and dynamics.

LaRa - MIDI drum layerer/randomizer

LaRa is a MIDI-plugin for drum sounds layering/randomization. Using it with any (even the simplest) multichannel sampler you can build drumkits with up to 16 'drumpads', each having up to 4 layers with individual velocity curves and 16-to-1 sound variation randomization.

Pianolla Micro Keyboard

Sequencer Baby Modification

This modification slows down the steps from 1/4 to 4 measures. I can use it to drive groove agent and boomstick bassist where variations are triggered by notes. In this manner the making of a varied pattern of multiples measures is easy as pie.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-05-2016 at 04:06 AM. Reason: added DarkStar's CC Injector
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:55 AM   #6
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Editing II

MIDI Routing Matrix
This FX allows arbitrary routing of MIDI channels.


-- detects redundant CC messages (same CC number, MIDI channel and value) and deletes them
-- Match menu choices:
Ignore MIDI channel, match only on CC number and value
For each channel, match on CC number and value
For the selected channel only, match on CC number and value
-- Match CC# choices:
check all CC message numbers
check the selected CC number only
MIDI Nudge

*** Derived from the Reaper time_adjustment JSFX **
Moves MIDI messages forwards or backwards.

Set either of the top two sliders (960 ticks per beat). Set the third slider, if desired. The net resulting delay is shown on the 4th and 5th sliders.

It should do negative nudges too - by passing a PDC value back to Reaper.


MIDI Transposer and Compressor

You'll recognise the problem: you've got a Kontakt instrument with articulations selected by key switches. So you set your MIDI keyboard up so you can trigger the articulations, probably with keys on the left-hand side of the keyboard. So far, so good.

But you've only got a small keyboard. So if you change it up an octave you can play higher notes, but all the key-switch keys are no longer available.

-- the range of keys for the key switches can be defined
-- the other (playable) keys can be transposed by an octave at a time
-- the octave transpose can be changed from 2 buttons (sending CC value of 127) on the MIDI keyboard
-- the range of keys (above the highest key switch) is displayed, as a reminder
-- many of the controls can be automated / controlled from the keyboard

Also, there is a MIDI velocity "compressor" to alter the velocities of the notes played.
-- it has 4 draggable nodes to set the compression curve.
-- different curves can be saved as Reaper presets

PC Channelizer
On receipt on any Program Change message, the channel of future MIDI notes / CC messages is increased / decreased. PC message, value 0, resets the MIDI channel to 01.


Uploaded with **************

-- the top track is 3 MIDI clips with various notes and Program Changes in them,
-- higher PC number increases the MIDI channel number (cycles round),
-- lower PC number decreases the MIDI channel number (cycles round),
-- the middle clip has a single Program Change - with a value of 0 (to reset the channel),
-- the lower track is the result after the MIDI has gone through the JS FX.

-- it will not handle SYSEX messages,
-- I left the Bank Change messages in to indicate where the Program Changes were.

Download the attachment, remove the .txt extension and put it in (a sub-folder in) your App Data \ Effects folder. Then start Reaper (v.xx upwards) and load it on the track as an Input FX.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 04-10-2015 at 08:25 AM. Reason: Added boreg's MIDI Routing Matrix
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:56 AM   #7
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Editing I

PC Splitter

This JS FX reads a (multi-channel) MIDI clip, extracts the events on the selected channel and puts them on a new channel every time a Program Change message is found
My thanks goes to those whose JS code snippets I've snipped.

Uploaded with **************

-- remove the .txt extension from the file
-- put it in (a sub-folder in) in your App Data \ Effects folder
-- load it on the track
-- select the MIDI channel you want to process (the other controls are for monitoring the results)
-- right-click the clip, select "Apply track FX as new take (MIDI)"
-- right-click the clip >> Takes >> Explode all takes in place
-- move the new take to a new track
-- right-click it >> Item processing >> Explode multichannel .. to new mono items


Big pic: http://img545.**************/img545/8...spcsplit02.png

CC HiHat controller (v0.3)

This JS FX allows e-drummers to re-map incoming hit hat notes depending on how they groove on their foot pedal. Even a single incoming note can be used to trigger 6 hit hat sounds (1 closed + 5 opened hit hat sounds).

General info:
  • The typical config. for this JS is: e-drum -> Reaper/this JS -> drums VSTi
  • 6 levels: the 1st level is usually a closed hit hat sound and the 5 other levels opened hit hat sounds (drums VSTis often provide 5 open hit hat sounds)
  • Default INPUT settings = Roland TD-3 ones
  • Default OUTPUT settings = Addictive drums, default kit.
  • Pass through for unmapped MIDI events (see other pass-through properties bellow)
    => other FX can be used for further mappings (kick, snare, ...)
  • Related Reaper's thread: http://forum.cockos.com/showthread.php?t=37580

MIDI Velocity Humanizer V1.1

MIDI CC Message Ranger

This FX select a specified MIDI CC message within a value range and rescales the value into a new range.

This example would capture CC# 74 messages on any channel and if the data value is between 73 and 127, rescale them to be within 106 and 127. The data values received and sent are shown in the lowest 2 sliders.

Split multi-channel single track MIDI

To split your single track (type 0) multi-channel MIDI clip onto several tracks?

Channel->Keyswitch converter

Using MIDI channels (that are not 1) to trigger keyswitches
A keyswitch is basically a special note that you can play on a virtual instrument: instead of producing a pitch/scrape/whatever, it silently changes the sound set for actual notes when you play them later.
An example would be switching between legato, staccato, non vibrato and sul ponticello articulations for a solo violin. Typically they live around C0, C#0 etc or way up high™ for bass instruments.

Roland TD3 > Addictive Drums Mapper

Here are some JS files made for use with the Roland TD3 and Addictive Drums. Just insert TD3-KickSnareHHToms-AddictiveDrums and TD3-Cymbals-AddictiveDrums before Addictive Drums and you are done

MIDI Note Velocity Ranger

It selects MIDI notes within a velocity range and rescales the velocity into a new range

MIDI VeloTrol

Velocity Control
Block High
Block Low
Compress Range

MIDI Micro & MIDI Scale Tuners

MIDI Micro Tuner adjust any incoming note by the amount of the Cents slider
MIDI Scale Tuner checks the note and tunes it accordingly. Omni can be enforced because this is using channel wide Pitch Bend. The last note played when not in Omni mode decides the # of Cents all notes will be bent.

MIDI Keyboard Deploy

This is a Keyboard splitter.
Some features are:
Pass Through
Send CC to New Channels
Full range of 1 through 127 notes for each Channel's output.
Learn range.

Poor's man Poly aftertouch

Converts channel pressure to key pressure on the last note pressed.
You need a keyboard that sends aftertouch, thought it's easy to change the code using a CC instead. A CC is used to keep pressure to the current key, so a new note won't steal pressure assignment. I'm using a foot pedal for this.
Then you need a synth that supports Poly Aftertouch and I don't think there are too many of them.
Saukar30: "I only have seen 1 free synth that supports Polyphonic Aftertouch: LinPlug's AlphaCM from Computer Music."

IXix and mbncp
Holds each note until next note is pressed. Pressing the same note will just turn it off. Enable legato, using an optional CC to turn it on or off

An optional CC to turn note holding on/off. It still plays mono in that case, but the legato switch is available in both situations. Switching to Hold off using a CC will also turn off the playing note.
If the input channel is set to 0 (any) it should get notes from different channels now, which means that only a single channel will play and a single note at any time. Great if you have 16 synths and want to hold a note until you reach the next one 20 meters away

MIDI Legato, by Note or Range

These effects let you:
a) increase the length of a set of notes; each note may have its own delay setting.
b) increase the length of all notes in a given range

New IX MIDI stuff (Updated 1st Feb 2008)

Allows each incoming note to choke (note-off) up to 4 other notes (independent channels). You can store separate mappings for all 128 possible input notes and you can save the mappings as presets if you wish. For example you could set it so that pressing C4 on channel 1 would cut E5 on channel 2, G#3 on channel 5, F6 on channel 10 and Bb2 on channel 16.
Probably most useful for live control of multiple samplers.

A personal favourite. The lazy drum programmers wet dream.
Treats incoming notes velocities as a percentage probability that the note will be passed through the plugin. A velocity of 127 has a 100% chance of being played and a velocity of 12 has around a 10% chance of being played.
You can compensate for the softer velocities of less likely notes and get all output into a suitable velocity range by using the offset and scale controls. Scale multiplies the natural velocity by whatever percentage you select and offset adds or subtracts a fixed amount from the scaled value. Works sort of like a velocity compressor/expander.

As you might expect from the catchy title, it loops MIDI. So much fun hiding behind such a dull description!
  • Trigger 0 clears the buffers (setting 0 loop length does the same).
  • Trigger 1 toggles recording on/off
  • Changing the loop length will scale any existing loop to fit the new loop but changing the units will reset the loop (it sounds really bad when you change from 4 seconds to 4 milliseconds by accident )
  • Repeats sets number of times notes will be repeated (applies to new notes only.)
  • Fade reduces note velocity to zero in n steps, n being the number of repeats (applies to new notes only.)
  • Dry Output blocking is overridden by record off (it assumes you want to play over a loop.)

An easier and more flexible approach to key re-mapping, made possible by recent JS updates. Schwa did something similar ages ago but it was foiled by the buffer clearing problem and the broken @serialize. Now those problems have been fixed so this new KeyMap is much easier to work with and you can save your mappings as presets instead of fiddly data files.

Forces the specified keys to hold until they are pressed again. Sort of like having extra fingers.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 08-06-2014 at 02:53 AM. Reason: Added DarkStar's PC Splitter
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:58 AM   #8
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Message Converters

CME UF keyboards - control surface expander

This FX maps ALL incoming MIDI-channels to one output MIDI-channel, at the same time mapping each CC-7 message (from each incoming channel for the two banks set as 'mixer controls') to a different CC-message. You can set the output CC-message for each of the incoming volume-faders.

convert MIDI CC to Envelope Automation

A kind of hacker* VST plug that routes incoming MIDI events to Reaper's control path and/or to the standard MIDI path. The VST uses Reaper's extension API for that and thus is only intended to be used with Reaper.

Use case examples:
  • enabling automations only for some MIDI inputs and for some MIDI msg types
  • easier learn (i.e. filter channel + type of MIDI message)
  • combined other MIDI FXs, you can now process events before sending them to the control path, example: routing all CC4 to a given channel, so that it triggers the same action whatever is its original channel.
  • FX params driven at "play time" through recorded MIDI items
  • Complex/conditional FX control through JS effects (generating the CC events).
  • One of my use cases: reaDelay length live control according to the e-drummer's beat (live = no metronome)

convert Envelope Automation to MIDI Expression

To automate the modwheel (CC#1) from an automation envelope. Selecting "CC A Value" will automate the Modwheel, "AT Value" will automate the channel pressure/aftertouch, and "PB value" will automate pitch bend.

a brand new JS Synthesizer and More (MIDI Tool)


Detect play speed of MIDI notes

A JS script that allows you to detect the speed of a MIDI performance, either a live performance or upon playback. Also, the JS would toggle between MIDI channels based on performance speed.
It detects the length of notes, and outputs a MIDI controller from 0 to 127 based on ‘percentage’ of maximum length.

MIDI VeloCurve

13 sliders to adjust velocity response.
Meter Input and Output
Also Preset Lib to Import for various curves

MIDI CC-to-CC Remapper
Chris Tessmer

In the example above, all CC73 messages (on any channel) are translated into CC75 messages. This is handy for building FX chains and Templates for synths like Magnus Choir that use hard-coded and non-standard CC implementations. Now I can use the same knobs on my CME UF80 for every synth I own.

MIDI Modwheel to CC

Learn Input CC
Move Min and Max of the Input control. If the Min is Higher than Max the Slider is reversed. The ratio of the input is converted so the full range of the slider is still available, just the value of the output is changed. This means on my spring loaded Mod Wheel, It can be set to spring back to any value, so I can set it to 63 - 107 and have my mod wheel control volume, starting at 63, up to 107 full on.
Meter of Value In and Value out.

MIDI Pitch bend to CC

This converts Pitch Bend to CC.
1 invert. move PB min to 127, PB Max to 0.
2 Zero Value. My Pitch Bend is spring loaded to return to 64. This option allows moving the CC=0 up to 64. It automatically adjust the ratio for the remaining range, so no matter where CC=0 is, you can still bend up to CC=127.
3 Min and Max CC.
4 Meter for Value out.

MIDI CC to Pitch Bend

MIDI Velo to CC and CC to Velo

When sending Velocity to CC:
A note that is out of range, above Max Note or below Min Note, will send No CC.
A note's velocity that is out of range, above Max Vel or below Min, will send No CC.
When the generated CC is out of range, above Max CC, or below Min CC, the Max CC or Min CC will be sent.

When Sending CC to Velocity:
A note that is out of range, above Max Note or below Min Note, will send the original velocity.
A note Velocity that is out of range, above Max Vel or below Min Vel, will send the original Velocity.
The Min CC and Max CC act as limiters.
When a CC is below Min CC, the Min CC will be used for the Notes Velocity.
When a CC is above Max CC, the Mac CC will be used for the Notes Velocity.

MIDI Note to CC

This one converts notes to the channel/cc you wish.
It also has Center, Min, max for note in. Multiplier and Invert for Value Out. Auto generate with stepping between last and current CC value. And switch to shut off Original Message.

Audio Vol to CC

This script converts audio from selected channel 1 through 4 and converts the input to a CC. It can also Invert, Compress, Smooth. Option to use three meters for Current, Max, Min as controls for the range of CC output
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 11-29-2013 at 07:11 AM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:58 AM   #9
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Controllers

Instrument Range Display

It displays whether a note is within the range of an instrument.

MIDI velocity viewer

[img] http://img684.**************/img684/3600/midivelocityviewer.png[/img]

Developed to measure and improve the MIDI dynamics (velocities) of my Roland TD12 electronic drumkit.

Bernstraw / Reflected


Tutorial Video: http://vimeo.com/16399678

This is a JS adaptation of AudioMulch's Metasurface.

It stores the parameter values of instruments and effects in patch dots, and interpolates between these dots while dragging the cursor on the XY pad or following time based vectors.

X-Y pad controller

Video: http://b.imagehost.org/0750/vectorpad_movie.gif
This is a X-Y pad sending CC values via the mouse or a path of 4 vectors or both.
The yellow square follows the white path, the red square chases the yellow one and sends the two CC messages (mapped to Cutoff and Resonance here).

FoXY controller

FoXY is a XY controller plugin.

It can control VST plugins parameters (with the new VST parameter learn feature), and/or used with the excellent! Jeffos's VST plugin here http://forum.cockos.com/showthread.php?t=43741 (win32 only), send MIDI CC data to control, for example, volume and pan of tracks.

This version is limited to a maximum of 8 points (but can very easily be pushed to 32 via one init constant and sliders definition only). The points can have axis constraints, so it's possible to use the plugin as a pack of 8 vertical or horizontal sliders.

Using a simple USB gamepad as an expression controller

The script has 10 joystick presets and starts at preset 1 by default. The different presets only change how the analog joysticks work, the buttons and D-PAD (POV) are always the same. The presets configure the gamepad in the following way:

Preset 1:
  • Joy 0 up = pitchbend up
  • Joy 0 dn = pitchbend down
  • Joy 1 up = modwheel 0-127
  • Joy 1 dn = aftertouch (channel pressure) 0-127

Presets 2-10:
  • Joy 0 is now an XY controller with two CCs mapped to the XY axis. When centred the CCs transmit 63 for both. This is great for synths like Zebra and Alchemy that have XY expression controllers.
  • Joy 1 up is the same as Joy 0's X-axis.
  • Joy 1 down is the same as Joy 0's Y-axis.
  • The CCs for presets 2-10 go from 102 to 119 with even CCs being the Y-axis and odd CCs being the X-axis.

Reason remote Komplete

A (nearly) complete set of JS plugins for remote controlling Reason devices from Reaper.
  • combinator, malstroem, subtractor, NN19, NNXT, DrRex, Linemixer 6:2, Scream4, Vocoder, RPG8-Arp
  • 4 plugins for thor, covering filters && performance, sequencer, osc && mod-control.
  • Note names for redrum && DrRex

MIDI track control.

Like in Sonar/Cubase

VS-2480 Feedback
In order to get control surface feedback on my VS-2480, I have written a JS that sits on a dedicated track and reacts to incoming CCs and sends CCs back out on the track's MIDI hardware out. This is used to turn on LEDs, provide fader feedback and feedback for the transport buttons and leds on the vs-2480 (with blinking LEDs!).

MIDI-controlled track automation

This lets you use your MIDI controller device to control volume, pan and mute for audio tracks. This means you can e.g. select a volume/expression pedal to control the track's volume, select a knob to control panning, and perhaps the sustain pedal to mute the track. Of course you can record the MIDI data (on a separate track), and then route it back to the audio track, which essentially gives you MIDI-controlled track automation.

You can use any regular CC, but you can also select pitch bend, or even note on velocity, or channel aftertouch. You can reverse the controller's behaviour, so e.g. the track's volume actually lowers when you turn up the modulation wheel.

MIDI CC Automation

What does it do?
It controls three preset MIDI CC parameters (Filter cutoff, filter resonance and modulation wheel) and two CC parameters of your own choice. And I threw in the ability to control the pitchbend as well.

MIDI Pitch Bend and Modulation Wheel

To bend pitch, hold the left mouse down on the centre of the wheel, and drag up or down. Releasing the mouse button will return to the centre position.

Send Crossfader

It's a crossfader that allows you to create complex transitions by automating a single parameter. The way you do this is to create two different sends with different mixes, and use the Send Crossfader to crossfade between them

Effectively, it allows you to use a single parameter to approximate automating a whole bunch of things (EQ, volume, reverb level, pan - whatever you like) all at the same time, by fading between two mixes

Pitchwheel Control Centre

Converts channel aftertouch or any CC to PW (included a Learn mode). If both up and down use the same CC (or AFT) it uses a full range, so 64 becomes 0. If only Up or Dn is active, or we use different CCs, the full CC range will apply only to Up OR Dn PW.
Beside the max range limiter, I also added a zero limiter, mainly when using the modwheel or a foot pedal, as hitting exactly the middle value is impossible, this way you get a larger zero zone.
It also has MIDI channel input filter (others get sent untouched) and the possibility to select a specific output channel (only the Pitchwheel is affected)

MIDI track mixer

A little starting template to control external hardware synth, though it could be used for VSTis as well.

This one is not JS: We've got it! MIDI mixer and PATCH list

MIDI Mixer for external hardware synthesizers with editable script

New IX MIDI stuff (Updated 1st Feb 2008)

Just a bank/patch selection utility.

GM program changer

This allows you to select the GM program by name.
Probably only useful if you are using the onboard sounds of your computer. This was once again somewhat of a JS programming exercise for me.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 11-29-2013 at 02:34 AM. Reason: added davisan's Instrument Range Display
DarkStar is offline   Reply With Quote
Old 03-26-2009, 03:59 AM   #10
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI Analysis / Monitoring

Chord display

Shows the current playing chord.
It's a bit limited for now as it won't detect some chords if a key is missing and if the bass key is not part of a known chord.

Simple MIDI monitor

This is a simple MIDI monitor using sliders. The first slider let's you select the event type to watch.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-03-2011 at 02:46 PM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:00 AM   #11
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default FX Filters

formant filter / speech synthesis

My plan is to define a set of phonemes using noise/saw/square oscillator and formant filters, and some additional stuff for plosives and stuff. Then select/play those via MIDI notes and/or controllers.

Liteon's JS plugins pack

* StateVariable (morphing) filter (statevariable) -Filter which uses x,y pads to morph between different states - LP, HP, BP, BR.
* AppleFilter v.2 (applefilter72db) - Original filter from apple.com AU tutorial. Modification allows up to 12pole cascade (HP, LP).
* 3BandPeakFilter (3bandpeakfilter) - Filter bank containing two biquad peak filters from Stanley A. White's algorithms (JAES versions). Each filter provides three fully parametric bands. The plugin can be used as a three band EQ. Saturation control is also available.
* ShelvingFilter (shelvingfilter) - Plugin with LowShelf and HighShelf biquad filters based on James A. Moorer's formulas.
* Butterworth Filter (filename: butterworth24db)
* Chebyshev Filter - Type1 (filename: cheby24db)
* Moog Filter (filename: moog24db)
* RBJ Stereo Filter (filename: rbjstereofilter12db)
* Simple 6db LP Filter (filename: simplelp6db)
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-03-2011 at 02:45 PM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:01 AM   #12
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default FX EQs

Liteon's JS plugins pack

* tilt-eq
I've tried to model the "niveau filter" of the elysia mpressor here

* PresenceEQ (presenceeq) - Top-end EQ based on James A. Moorer's formulas. Can add presence to the top end of sounds. Bandwidth of the boost is somehow smart and frequency dependant.
Good sound.
* BassManager (filename: bassmanager) - This is a plugin for managing your bass samples. The idea behind this plugin is to make bass samples more present in the mix. It has full control over the low end. Sounds can be processed in stereo or mono. It has a 2pole lowshelf filter for boosting frequencies. Also a build in saturator, a control for high-end muffle and a limiter.

4-band 8-channel EQ (controls REAEQ) (beta)

A way for a JS plugin to control parameters on any other plugin. This is an example of controlling EQ on 8 tracks. There's a limit of 64 knobs per JS plugin, so that's why I don't have more controls. The fact is any UI can easily be made with this plugin to control any plug anywhere...

MIDI trigger EQ ducker/gater/pumper

A MIDI triggered EQ. Has also a gate and pump mode. Makes a superb MIDI triggered de-esser

Overtone EQ

Based on Scott Stillwell's RBJ Cookbook EQ.
It's a dynamic EQ that takes a MIDI note input and calculates the note frequency and harmonic overtones then adjusts each EQ bands frequency accordingly.
It is best used more as a sound shaping tool than a normal EQ and works well on monophonic lines, although it can also work on polyphonic lines when just fed the bass notes.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-03-2011 at 02:44 PM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:02 AM   #13
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default FX Dynamics

MCompressor clone
DJ Saint-Hubert

This should work like meldaproduction's mcompressor, except I also have an option to modulate the points/curves.

Liteon's JS plugins pack

* np1136: peak limiter
- fast attack and release, sidechain, detector highpass, gr limiter, program dependent mode, tone control, parallel compression etc, etc

UnPeak - Peak compressor/limiter using zero-crossings

The plugin limits peaks, and increases the overall loudness. Because it does not use attack/release scheme that most other compressor/limiters do, the resulting sound should be very, very transparent. It probably does its job best as the last effect in the chain on the master bus.
EDIT: After publishing this plugin someone pointed me to ZeroCrossingMaximizer, which does the same job, and it is already included with Reaper. However, my version now has some extra features, which you may like (or not).

my compressor: the axe murderer
jeff robertson

My compressor has no attack or release, it just kills peaks.
This is sort of a compressor, sort of a limiter, sort of a distortion effect. With the axe murderer, you don't pick a ratio you pick a threshold and a ceiling. The code calculates a ratio that will compress zero dBfs down to the chosen ceiling.
In soft mode, the effect is "all knee" (like the bundled soft clipper JS). At the threshold, the ratio actually used is 1:1. Between the threshold and "zero", the ratio increases linearly. At zero, the calculated ratio is actually used.

LOSER's DVC2JS GUI addition

GUI for for LOSER's excellent DVC2JS Digital Versatile Compressor.

New JS Limiter

It's basically very similar to my NULL Limiter (VST).
So what to use it for? - Just put it on the master instead of all other JS limiters . Seriously it's REALLY good (IMO) (and I haven't claimed that about my previous creations). Also I'm very much satisfied with this (which I also never really was with previous creations). I can't think of a single thing to change to improve it (well actually I can, though I won't give away the code for that).
So to sum it up ... I'd personally pick this limiter over any other freeware limiter out there, including the much loved W1 Limiter and also Baricade, EventHorizon.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 12-24-2015 at 03:03 AM. Reason: added DJ Saint-Hubert's MCompressor clone
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:02 AM   #14
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default FX Modulators (Choruses, Delays, Flangers etc)

a brand new JS Synthesizer and More (Delay only)


JS Modulator Pack GUI
  • JS Chorus
  • JS Delay
  • JS Flanger
  • JS Phaser
  • JS Tremolo
Big pic:

JS Delay GUI

JS Chorus GUI

DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-03-2011 at 02:43 PM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:04 AM   #15
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Audio FX

12ax7 tube emulation

12ax7 tube emulation, based on the odd and even harmonics generated by the Altec 1566 mic preamp clone:

LFO Generator (for Parameter Modulation)

Place this plugin early in the effects chain, route it around so any effects on the track can use it for modulating a parameter. You can then automate the LFO speed, height and offset.

ccernn/fx_glitch (updated: v0.0.9 with MIDI)


Trance Gate Effect

A very basic JS trance gate effect. You can separately control the pattern for left and right, adjust the pulse width, and create different feels by adjusting the pattern steps per beat. There is a rudimentary graphical display to help demonstrate what the sliders are doing

Liteon's JS plugins pack

* deesser
split-band (or multiband) de-esser. Linkwitz-Riley crossover. Allows fast or slow time constants. Monitor switch. High-pass or bandpass target. gr-meter

* pseudo-stereo fx

This is based on 'mdaStereo' by Paul Kellet. Can be used for:
  • mono-to-stereo conversations.
  • Uses one feedback delay on R ('Haas fx' mode)
  • or 2 separate feedback delays for L & R ('Comb' mode).
* RingModulator (ringmodulator) - A simple ring modulator circuit emulation. Uses a sinewave as the modulation signal, which can be 'waveshaped' with a diode, so that only the positive semi-periods of time sine wave pass through. Has feedback and non-linearities.
* WaveshaperMulti (filename: waveshapermulti) A waveshaper bank with different waveshaper formulas.

Subtractive Stereoizer

What it does:
Used it combination with another effect, it stereofies a mono signal in a way that is 100% mono compatible. (It subtracts the difference between the processed and the unprocessed channels from the unprocessed one.)
How to use it:
Put the Subtractive Stereoizer after another effect of your liking (EQ, transient modifier etc) and make sure that other effect is set to only input from and process one channel.

AudioBlank Marshall MG15-CD

It has a neat GUI simulating guitar amp Marshall MG15-CD. It doesn't do any audio processing. It can be used to keep the knobs' levels and button states set on the amp during recording a track.

Pan Left Pan Right

This creates a pan control for Left, a pan control for Right. Each channel can be shifted all the way, with mono in the middle. Also Pre and Post Volume for each channel, and an Master Volume Out.

JS GUI - Stompbox

A little wood and steel. Knobs are a bit off-axis but hey, that could happen in real life as well right? :-)

Ozzifier GUI

DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 03-10-2012 at 12:30 PM. Reason: Alberto PG's Tube emulation
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:05 AM   #16
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default MIDI FX

Mipressor - MIDI expander/compressor
Adam Fulara

Mipressor is a MIDI expander/compressor for changing dynamics range of MIDI instruments.

  • Linear - linear dependency: for LOW -> 1, for HI -> 127
  • Level - All notes louder: for HI and more -> 127, for less -> linear dependency
  • Knee - like linear, but you can change knee of dependency. Mouse-touchpad changes knee.
  • Learn - learn Mipressor levels: play louder and silent notes, then change to one of above options. Low and Hi will be equal to loudest and quietest notes played.
  • Bypass - bypass mode
  • Const - All notes the same level; mouse-touchpad changes volume.

Mipressor - MIDI expander/compressor
Adam Fulara

Mibrato is a LFO MIDI Vibrato effect with CC support (Hold pedal, Tap tempo), Mouse tap tempo, Tempo from grid, Pitch bend wheel support, 3 bend modes: bend up, down and centre, and visualization of the vibrato effect. It has special feature 6 channels for MIDI guitar vibrato pitchbends on 6 channels.

MIDI Delay_Pan

Called Delay_Pan, you can delay Audio/MIDI Pre-Post
Full control on each Audio channel.
Link is in whatsup's signature.

How to use:
  • put this plug the first on FX chain
  • set the delay mode - MIDI.
You can set
  • Pre (will play before other tracks)
  • Post (will play after other tracks)
-- set the delay amount
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 09-03-2011 at 02:40 PM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:05 AM   #17
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Production - Mixing

AB Level Matching

This script combo matches automatically the loudness level at the beginning of your plug-in chain with the level at the end.

It also provides a manual delay compensation. Additionally it could automatically calculate the PDC of your plug-in chain in order to compare audio streams at the sample position.

It also shows some audio-statistics and a GUI for loudness distribution.A short manual is included.

Accompanying video: http://forum.cockos.com/showthread.php?t=141676

chanmix2 GUI (Rev 2)

talkback plugin

Talkback control - mutes on play, rec and when audio exceeds threshold


I thought this might go at the end after some EQ and Reverb.
4 stereo channels, Level for each channel, with an option at the end to send all channels back to 1+2
Each channel has Mute/On/Solo, Volume, Pan
Master section to select Output: None/1+2/3+4/5+6/7+8/Original/All
Master Vol and Pan.

chanmix2 GUI

Here's another GUI for the chanmix2 plugin (by special request of Teej). This one's a little "out there" but I wanted to do something different than the usual "sliders and knobs".
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 06-17-2014 at 01:17 AM. Reason: added TBProAudio's AB Level Matching
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:06 AM   #18
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Entertainment

Spectral Stamper

This FX does not generate noise, but stamps the image over the actual audio spectrogram. So the spectrogram must be quite rich for the image to be visible. Inside the silent parts, it won't be visible.

Some musicians may want to add their logo into the songs, etc.

realtime raytracer

JS "Disco"
Use the triggers and keypad numbers to strike a poses, arm all parameters and record a dance routine to your choice of music, or create your own poses and animations...
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 11-14-2012 at 04:40 AM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:07 AM   #19
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059
Default Utilities

Midi Clocks
mbncp, Subz and Adam Fulara

Originally Posted by "mbncp”
This one has two options:
1) Start offset (see below)
Useful if you need to compensate for latency.

2) Start resolution (in beats)
If you set this slider to 4, it will wait until the beginning of the next bar before sending the start message(assuming you are in 4:4).
This gives some time to the other device to catch the proper tempo, plus it's necessary if you want a negative delay (start early).
Originally Posted by ”Subz”
this code that does loop correctly
Originally Posted by "Adam Fulara”
This is Midi clock with SPP, just load FX and set output to midi out connected to external device. If you need compensation, Ctrl+P, Midi devices -> Midi out ->Offset output to this device by:.... (I use -3ms).

IX SwixMitch GUI
IXix and argee

XSenderA and XReceiverA (beta)

Place XSenderA in any FX bin, put XReceiverA in any FX bin. Just be careful not to create a loop.
When you insert XSenderA, it will find the next free instance number. Each XSenderA needs its own instance number.
When you insert XReceiver in an FX bin, set the Instance number to the XSender Instance number you want to hear.


Two for experimenting with the 'innards' of Reaper
For testing the CPU use of various Reaper JS commands and things, and can be some kind of benchmark. Not that interesting for others than myself, when I made it, I guess, but, well, never know...

For testing various ways of inter-plugin communication, gmem, regs, via audio channels (and later, MIDI). multiple instances of this one, in various tracks, items, etc, and you (may) get a glimpse of what's going on internally here and there.
DarkStar ... interesting, if true. . . . Inspired by ...

Last edited by DarkStar; 05-24-2013 at 03:49 AM.
DarkStar is offline   Reply With Quote
Old 03-26-2009, 04:08 AM   #20
Human being with feelings
DarkStar's Avatar
Join Date: May 2006
Location: Surrey, UK
Posts: 18,059

... placeholder 20
DarkStar ... interesting, if true. . . . Inspired by ...
DarkStar is offline   Reply With Quote
Old 01-24-2011, 03:52 AM   #21
James cuck
Join Date: Jan 2011
Posts: 1

Very informative posts in this thread.
James cuck is offline   Reply With Quote
Old 02-09-2011, 08:42 PM   #22
Human being with feelings
Join Date: Mar 2010
Location: NC
Posts: 175

Thanks for all your hard work on this. Great and informative thread!
dkeatscary is offline   Reply With Quote
Old 03-02-2011, 05:25 AM   #23
Human being with feelings
Join Date: Apr 2008
Posts: 1,883

Darkstar, this is certainly a good start. Thanks for the effort!

-but I think it would be helpful to separate these into two threads, one for audio plugins & one for midi plugins. There are so many of each that it makes for too large a list, if everything is lumped together.

## I also think that it would be UBER useful to list the plugins in two different ways:

1: Alphabetically. (- but still separated into "audio" and "midi" sub-groups.

2: Separated by intended function. That is, state a specific task, then simply list the names of all plugins that can be used for that one task alone. - possibly with a little extra info (but not too much.) For instance, in my notes I have (a longer version of) this:

Change a midi channel: IX/MIDI_Router - can filter notes, control, or both. Also limits range.

TRANSPOSE THE KEY: midi_transpose - can be set to a range limit, if needed.

Limit key-response range: midi_note_filter - simple!

CHANGE CC# NUMBERS ( 67 to 69, etc) MIDI_CC_Mapper


Randomize Values: (FM8) IX/MIDI_Tool - try around 2% - & you can limit it to just the high end.

Anyway, thanks.

Last edited by Cableaddict; 03-03-2011 at 12:01 AM.
Cableaddict is offline   Reply With Quote

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT -7. The time now is 06:28 PM.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, vBulletin Solutions Inc.