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