Short post today to design the MIDI Editor interactions to my liking.
This is all text, and ideas for my interaction with the MIDI editor on a fairly basic level. I’m posting this to get feedback and let myself sit on it before I start changing a bunch of actions.
Currently using REAPER 6.16
- 30 days of Starting over with REAPER
- Rants and GUI Tweaks (again)
- MIDI Command Inventory
- Item Editing Design and Inventory
- Project Template, Preferences and Mouse Modifiers
- Hotkeys, again! ...?
- Look Ma! No Hands
- An evaluation and conclusion
Contents
- Introduction
- A note on note movement
- Step Input
- Temporal movement
- Selection
- Note Split
- Note Length
- Summary
- Meta
Introduction
If you’ve read the previous posts then you’d know that I prefer working 100% keyboard if possible. This means that I need a few general commands:
- Reset - Go back to a known state, regardless of the current state
- Cursor Movement - Ways to quickly move the cursor to a point
- I don’t want to be pressing the arrow key 40 times to get somewhere. < 3 (nearby!) key presses should get me to 80% locations.
- Selections - Select notes:
- Relative to the current selection.
- Relative to the cursor.
- Inside a time selection.
- Data movement - Move a note to common places.
- Moving in thirds offers a reasonable compromise
- Input via MIDI is a much better option.
- Place a note at the current cursor position.
- Via MIDI
- Computer keyboard, at a given octave.
- Split notes
- At cursor
- Only selected notes?
- At time selection
- Only selected notes?
- At cursor
- Change note length
- All selected notes to cursor
- Nearest selected note to cursor, all others expanded by that delta.
I’m not considering MIDI cc, as I believe that’s almost universally best input via mouse or MIDI controller. I may change my mind at some point though.
A note on note movement
NOTE - Assuming 12-tet, because that’s all I work in anymore.
I’m a believer in composability of keyboard commands, which implies some sort of grammar.
Start with a set of clear, non-complex commands, then build up larger actions from these commands. Western music allows me (us?) to build a dictionary of 4 commands:
- Semitone
- Octave
- Minor Third
- Major Third
Thirds
Most western harmony is built on thirds, and even when it isn’t - it is. Let me go through every interval up to 13ths and map out the use of the previous 4 commands:
- (s)emitone - 1 semitone shift.
- (O)ctave - 12 semitone shift.
- Minor (t)hird - 3 semitone shift.
- Major (T)hird - 4 semitone shift.
Now how these can be composed for quickly moving notes using the letter in the parentheses. + for shift up in pitch, - for shift down in pitch.
Any of these commands can be executed in any order, and b9 and higher are the same, but with O prefixed.
- Minor 2nd - s+
- Major 2nd - s+ s+
- Minor 3rd - t+
- Major 3rd - T+
- Perfect 4th - T+ s+
- Aug 4th/Dim 5th - t+ t+
- Perfect 5th - T+ t+
- Aug 5th - T+ T+
- Major 6th - O+ t- or T+ t+ s+
- Dominant 7th - O+ s- s- or T+ t+ t+
- Major 7th - O+ s-
- Octave - O+
The worst case scenario is the dominant 7th, and 9th to 15th with 3 key presses. With some practice it should be possible to type these approximately as fast as reaching to grab the mouse or a single command with modifier keys.
This is a form of binary search, I guess a quaternary search?
Not Thirds
I hope the astute reader was rolling their eyes a bit at the last part. What’s easier than the above? Playing it on an instrument.
The major of input will be from the piano for me, however there are times where I will want to select a note and make a small change or when I want to work on my laptop.
I will be setting this up though!
Step Input
Most DAWs have some concept of “Step Input”. The idea is that cursor control is driven by input, and cursor movement and note length are controlled by a grid value.
- Either:
- Input on MIDI controller
- Note is created at grid length (or separate note length parameter)
- Input command (or out of the way MIDI note) that either:
- Moves the cursor forward by the grid amount or
- Moves the cursor backward by the grid amount.
- Input on MIDI controller
- Cursor moves by grid length
- Input new note or
- Change grid size.
As a bonus I like if I have some way to:
- Select notes at cursor via MIDI
- Input MIDI data (cc/pitch/etc…) at cursor.
- Optionally interpolate data between nearest two points to the cursor
Then I’m quite happy.
Temporal movement
It’s time for time!
Once again, n-division narrowing buys us a lot of functionality with few commands:
- Jump - Move to an arbitrary time or a time >3 bars away.
- Move to start of measure
- Move by grid (!)
- Move to nearest pitch by pitch-class
Grid
The existence of a grid simplifies cursor movement, and note length and selection.
I generally only use the following grid positions, which I believe are enough to get to the common locations in 3 or fewer key presses.
- 1 measure
- 1/2
- 1/4
- 1/4t - 5 (one key above 1/4)
- 1/8
- 1/8t - 9 (one key above 1/8)
- 1/16
- 1/16t - 7 (one key above 1/16)
- 1/32
The bolded number is the hotkey I use, this is non negotiable since I already use these in other DAWs.
(Note that triplets are DivisionNumber+1.)
Selection
Thus far I’ve discussed topics that allow me to work on individual notes in some manner (besides piano input). MIDI editing and input require working on multiple notes at a time which means some method of marking notes to be worked on.
There’s two dimensions of selection necessary:
- Time
- Pitch, or “notes”
Time is contiguous in most linear DAWs, so I won’t concern myself with multiple time selections.
Note selection is often non-contiguous. I believe the best method is to have a method of selecting all notes at the cursor via MIDI input. If that’s not an option, then I will need to rethink.
Note Split
Note split can happen with a time selection or at the cursor. There are two types of selections:
- Pitch - Split all notes selected by pitch at the cursor.
- Time - In/Out points should split all pitch selected notes at the cursor.
I’d like “At cursor” and “At selection” to be separate commands. I don’t think that I’ll use different selection commands such as “at start”, “at end” and “both”.
Note Length
Given a number of selected notes, it should be possible to do two actions:
- Move the end of all notes to the cursor.
- Find the note off nearest to the cursor:
- Determine the distance between that note-off and the cursor.
- Adjust all selected note lengths by that amount.
Summary
This is a brain dump of thoughts about MIDI note editing. Almost all of these apply to item editing as well.
I welcome comments about things I missed or ideas to explore.
Meta
This post took:
- 5 hours to write.