==MIDI==
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.

==AUDIO==
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.

Features:
- 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.

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.

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

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.

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.

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

A plugin I made so that I can preview the drum sounds already loaded when I load my drum template tracks.
Why?
To be able to draw automation envelopes for external MIDI gear (or internal). Simply automate the plugin's parameters as needed.

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

Usage:
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)

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

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.

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

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

NB:
-- 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.

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.

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

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

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.

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.

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.

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

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

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

MIDI_Looper
As you might expect from the catchy title, it loops MIDI. So much fun hiding behind such a dull description!
Notes:

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

MIDI_KeyMap II:
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.

MIDI_Latch:
Forces the specified keys to hold until they are pressed again. Sort of like having extra fingers.

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.

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)

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 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.
Julio
It detects the length of notes, and outputs a MIDI controller from 0 to 127 based on ‘percentage’ of maximum length.

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.

Options:
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.

This converts Pitch Bend to CC.
Options
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.

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.

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.

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

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.
[img]http://img546.**************/img546/9673/bsvectorpad01.png[/img]
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).

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.

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.

VS-2480 Feedback http://forum.cockos.com/showthread.php?t=30647
yhertogh
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!).

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.

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.

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

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)

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.

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

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

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.

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

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.

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

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

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.

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.

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.

JS "Disco"http://forum.cockos.com/showthread.php?t=17738
Youn
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...

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

Quote:

Originally Posted by ”Subz”

this code that does loop correctly

Quote:

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

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

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

-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: