A Smart method to Select the Highest and Lowest Pitches in MIDI

Hi,

It would be nice to have as in Logic Pro ( see video below) the ability to select the highest and the lowest pitch on the fly even if they chord notes are don’t start and end at exact same points.

This was posted in another post: Logic "select highest / lowest notes" function - can it be done in Cubase? - YouTube

Maybe for the lowest with LE one can achieve this. But I am pretty sure there is no function in Cubase for selecting the highest notes like in Logic Pro. Please correct me if I am wrong!

It would be great if this be added to LE as context menu parameter to be used for creating more diverse presets. I found this very helpful for editing and also working with score editor to move notes between the lower and upper staves.

Agreed. To take it even further, the option to select multiple specific notes as DP allows you to do would be great. I’ve come over to Cubase only recently and am surprised that it lags behind in this area…

You are right. Cubase MIDI implementation is not very flexible. We should ask for change and features. These are more important for the composers than plugging, VST’s.

+1

+1

And while we’re at it, maybe we could have a 'select 2nd from bottom", “2nd from top”, “3rd from bottom”, “select notes that are *N octave intervals above the bassline”, “select all 3rds intervals of each chord”, etc…

Once you have an algorithm for finding different chords/group voicing throughout a section of MIDI, then I’m sure there’s all sorts of additional commands that could be made around it.

All but the octave and ‘from top’ parameter already exist in context variables.

That’s what I thought too. Because I know there’s a “select high note” and “select low note”. But those only select a single pitch for the whole selection. It doesn’t have an algorithm to determine what out of the selection are separate groupings/chords and find separate high notes per group.

Or am I missing something?

Hmm I’m playing around with the Logical Editor and I think I see the issue. So, you can actually select all the root notes for a set of chords automatically.

Context Variable->Equal->Position In Chord->Root

However, inside the “Position In Chord” function, there is no way to select “highest note”. There IS a highest note option in the context variables, but it will only select the highest note of the entire midi part, it won’t calculate it based on the individual chords. Also, there is an option inside the “Position In Chord” for selecting specific intervals from the root (maj 3rd, perfect 5th, etc…), but there aren’t more relative options like “2nd note from the bottom” where it would select the note 2nd from the bottom regardless of what interval that may be. In fact, there isn’t an option for selecting the low note either, just the root, which is often not the same thing when dealing with inversions.

So, Cubase actually does already have a system/algorithm in place for detecting all the chords in a MIDI part. They just need to implement more commands/functions on top of that. Inside of “Position In Chord”, there should be a “Top”, a “Bottom”, and perhaps other options like “2nd from bottom” or “2nd from top” etc…

With due respect, I suggest you review the list of parameter 1 in the Context Variable list, along with the conditions and parameter 2 and the conditions list. There’s a lot you can do.

If what you need to do is an operation on a musical line, there’s the explode function in the Score editor. Create a polyphonic staff and Cubase can do a decent job of setting the musical lines to channels.

Currently this is the only way to count a Note’s position in a chord - how far from the bottom is it, starting with 0 for the bass.

Ohhh, I see. It’s under “Note Number In Chord”. Well why didn’t you just say that to begin with? lol

Guess I missed that after trying “highest pitch” “lowest pitch” and “position in chord”. I must have read that as “number of notes in chord” or something, although there is another one for that.

So yeah I guess you can calculate from the bottom. But you still can’t find the top note or calculate from the top. Or am I missing something? I know you said that you can’t calculate from the top, but is there even a way to calculate THE top notes?

If not, then I think the obvious suggestion from this thread is that we need a
“Logitcal Editor ->Context Variable → Note Number In Chord (highest = 0)”

Actually, it’s not. You can select notes based on specific intervals from the bottom, too. So, if you have a set of chords… let’s say CEG, FGAC, ACE, you could select just the perfect fifth notes: G, C, E. If you were to select something like “note from bottom->2” it would return G,A,E.

So there are 2 ways to count a note’s position:

  1. by the number of notes it is from the bottom
  2. by the specific interval it is from the bottom

We just need to have the ability to count from the top, now.

*EDIT actually when it calculates the interval from the bottom, it’s really calculating from the root which it doesn’t always count the bottom note as the root because it tries to calculate inversions of chords, which makes it a little annoying sometimes when you have more complex chords or just want to treat the bottom note as the root.

So in correction, here are the 2 ways to count a notes position:

  1. by the number of notes it is from the bottom
  2. by the specific interval it is ‘root’

You can count down from the top. Try creating additional filters and conditions to Highest Note, such as, less than or equal, etc. and see what that does.

It’s not really confusing when you understand that The LE either

  • calculates the chord’s intervals without regard to the order of the voicing, or
  • it does it based on the order from bottom to top without regard to the chordal intervals.

Maybe you got confused due to an ideé fixe you had about bottom notes and roots.

Yeah, obviously. Did you read what I said? That’s exactly what I just said. It calculates it from the number of notes from the bottom or by the musical interval from the root.

Why so cryptic? Do you have a solution or not? You’re saying you have a solution but you’re not actually providing one. Am I confused or are you confused? The “highest note” command, as I’ve already mentioned, selects the highest note (actually called “Highest Pitch”) command selects the highest pitch out of the entire selection. It doesn’t group likely chords together and use that context to select the highest pitch of each chord. Obviously the technology and algorithms are in place, they just haven’t implemented a feature for counting top to bottom. Unless you can actually tell me how to count from top to bottom using the Logical Editor, I’m going to assume you’re wrong. If there was a way to invert a MIDI note selection, the I guess you could invert everything, select notes from the bottom, and then re-invert as a work around. But I don’t think there is a way to invert a MIDI note selection. The …“LE” is great, but it’s nowhere near a fully functioning script editor.

The closest thing I can think of to a work around (other than the inversion idea), is having multiple iterations of selections where you do “if the number of voicings in part == 4 and the note number from the bottom is 3, select” and then “if the number of voicings in part == 5 and the not number from the bottom is 4, select”… but if you put those into a macro and run it, it won’t work because each time you select you’re deselecting everything previously. If there was an option to add to selection instead of just ‘select’, then this would be a good alternative, although you’d have to enter a LOT of conditions in for it to work consistently. OR… you could include it all into one command except one of the largest flaws with the “LE” (as you call it) is that you have no power over the logical order of conditions/operations. The And/OR just all happens linearly. For example, I can’t have “(something AND something) OR (something AND something)”. In the “LE” (logical editor), you can only have “something and something or something and something”. Or what if I want it to be “something and (something or something) and something”?

IF I DID have control over that, then I could make a command that would be
if(
(voices in part==1 AND note number from bottom ==0) OR
(voices in part==2 AND note number from bottom ==1) OR
(voices in part==3 AND note number from bottom ==2) OR
(voices in part==4 AND note number from bottom ==3) OR
(voices in part==5 AND note number from bottom ==4) OR
(voices in part==6 AND note number from bottom ==5) etc…
)
select

^^that would select the ‘topline’/high notes of each part/chord.
But I don’t have that option because the logical editor is not as powerful as you make it out to be. It has many many limitations.

I mean, there’s many ways to ALMOST do it. I’m not seeing this magic solution of yours, Steve. Can you enlighten me?



So you don’t have a solution lmfao, you’re just gonna keep pretending like you do.

I offer my help gratis, sorry you don’t find it helpful. I can only point out that from your posts, it looks like you haven’t tried my suggestion above.