kosua20 / MIDIVisualizer

A small MIDI visualizer tool, using OpenGL
MIT License
1.02k stars 136 forks source link

Allow ability to create separate colors for individual note sections #123

Closed sreich closed 1 year ago

sreich commented 2 years ago

See here https://www.youtube.com/watch?v=HiJ_D81QgJ8

I don't know how this is done technically, it isn't a matter of "take the lower notes and make them orange". Because you can bounce around, and it isn't based on major or minor from what I see in this video and others like antinpiano

Would this require manually specifying what the color is, for every single note? If this is the case, it might be best to say, allow export to csv of what notes there are in the stream with a default color. Then allow you to import it when playing/rendering it. So you can say "note 5 is RGB(red)", and so on. I'm sure MIDI doesn't allow you to embed that sort of information, so probably separate format is better.

kosua20 commented 1 year ago

Hello, sorry for the late answer. Currently MIDIVIsualizer support multiple modes to group notes in "sets" that can each have their own color. You can split at a given note (quite basic), color each key differently, color each MIDI track or each MIDI channel differently. To do this you will have to check the "Per-set colors" in the "Notes" section and click the "Define sets..." popup.

For the last two you could modify your MIDI file in some editing software, and assign a different channel/track to each hand for instance. I know some devices/softwares can do this easily, which is I think how these are done usually.

I'll see if I can find easier ways to do this. One way would be to keep the "split at a note" but allow the note to be changed along the track.

kosua20 commented 1 year ago

In the latest release v7.0 a new way of defining sets has been added: the "List" mode. In the dedicated settings panel, you can create control points to define which ranges of keys should be assigned to each set, and control points can be placed at any time along the track. That way it's possible to define two sets corresponding to the two hands even if they overlap. You can also define control points in a CSV and import them if it's easier.