Skip to content

v1.6.0 — MIDI Utilities

Latest

Choose a tag to compare

@david-cilluffo david-cilluffo released this 17 Jul 16:40

MIDI Utilities — 13 tools for editing notes that already exist

The bridge changed — reinstall reaper_mcp_bridge.lua in REAPER (Actions → run it once per session, as before).

Every new tool takes the same optional filter — a pitch range, an onset window in beats from the item start, and a channel — so you can target a phrase without selecting anything by hand. Timing is in beats, pitch in semitones, and each tool is a single undo step.

Added

  • transpose_midi_notes — shift pitch; a note pushed outside 0–127 is left where it is (skipped), never wrapped.
  • snap_midi_notes_to_scale — snap off-key notes onto a scale (14 named scales, or a custom interval list); a tie resolves toward the middle of the selection so a line doesn't drift.
  • quantize_midi_notes — snap onsets to the project bar/beat grid, with strength and swing.
  • nudge_midi_notes — shift notes in time; lengths preserved.
  • stretch_midi_notes — scale timing about a fixed pivot (half-time, double-time, any ratio).
  • legato_midi_notes — run each note's end to the next onset, or set every note to one length.
  • humanize_midi_notes — seeded, reproducible timing + velocity jitter (same take + same seed = byte-identical).
  • strum_midi_notes — roll a chord out into a strum; invents no notes.
  • ramp_midi_note_velocities — linear velocity ramp across a phrase (a chord keeps one velocity).
  • scale_midi_note_velocities — multiply, set, or compress velocities toward a pivot.
  • set_midi_note — edit one note's pitch, velocity, timing, or channel.
  • get_selected_midi_notes — read the notes selected in REAPER's editor.
  • remove_overlapping_midi_notes — trim or delete overlapping same-pitch notes. The only one here that removes notes, and the only one flagged destructive.

Changed

  • Every returned MIDI note now carries start_beat / end_beat (item-relative beats) alongside the existing start_time / end_time seconds — on get_midi_notes too. No field was removed; a position you read back feeds the new beat filters directly.
  • Timing is computed in quarter-notes, so the tools behave correctly on tempo-mapped projects.

Removed

  • Five dead, unreachable MIDI handlers (QuantizeItem, TransposeMIDINotes, QuantizeMIDINotes, HumanizeMIDITiming, AnalyzeMIDIPattern) — unreachable from every public entry point, so no shipped behavior changes.

Full detail in CHANGELOG.md.