I’ve now started working on the piano roll (PR). It will naturally have some differences from the
piano rolls you’ve used in sequencers like sonar/cakewalk, cubase and logic, because of the underlying
structure is a trackerpattern with all advantages and limitations that comes with that. Among the
things it will have to deal with are allocating notecolumns for every note inserted, and varying speed
throughout a pattern. I think I’ve sorted most issues out now (it’s still mostly in my head and on
scetches), and will here give you an outline of my thoughts. Any comments, additions and bright
ideas are welcome. By writing this post I might even get new ideas myself .
Like any PR, there will be a “ruler”, a “piano” and an open space with a grid where you view and
enter the notes, which I will mention as the “paper”. These three parts together form a piano roll.
Also, there will be scrollbars and a toolbar, and an envelope editor below.
A primary goal I’ve set for this PR is that everything should be accessible by your computer keyboard,
contrary to the common practice to force the user to use the mouse all the time. Entering notes will
be just as fast and easy, if not faster than in the pattern editor. Of course, full mouse support will
also be given for those who want that.
The PR will be zoomable and scrollable in both directions, independent of where the edit cursor is.
The edit cursor will be like the timeline in normal sequencers, with the addition of a marking (a cross
or something else) on the line for showing pitch position. This allows for (de)selection not unlike
in the pattern editor (ctrl+B/E).
The ruler will have marks for:
- Lines or rows in pattern editor (taking varying speed into account)
- Beats (24 ticks)
And of course line numbers.
There will be an editstep like in the pattern editor, and this will be selectable in both ticks or lines.
Ticks will also be selectable as note sizes (for those who can read scores).
In addition, there will be another setting; notelength, which is the length the following
inserted notes will have.
When inserting notes, the note column with space best fitting the selected notelength will be
chosen, and noteoffs will be inserted automatically if necressary to set the note lengths. If
there are no columns available with enough space, there are two options: shortening the note
to fit the best column, or rearranging the notecolumns if possible. The rearranging will be possible
to turn on/off, since it will modify the structure of the track. If rearranging is not possible, and the
columns are simply full, a status bar message will be shown.
When rearranging, moving a note will also move the contents of the volume- and panningcolumn
from the note position and to the next note in the column. Later, I might also implement some
sort of graphical editing of these columns. I’ve been thinking of some sort of popup note
envelopes for this purpose. But this will not be in the first stage anyway.
Selections will be completely flexible, allowing any notes to be (de)selected individually
and in groups by timerange, noterange or both.
There will be a range of operations working on the current selection:
- Transpose up/down halfnote or octave
- Move (in time)
- Anything else?
Selecting and deselecting can be done in the following ways:
By mouse (left button selects, right button deselects):
- Dragging the ruler (de)selects all notes starting within the timerange.
- Dragging the piano (de)selects all notes with pitch within the dragged range.
- Pressing a piano key (de)selects all notes with this pitch.
- Dragging over the paper selects the notes starting within this rectangle.
- Clicking a note on the paper.
- Ctrl+B begins selection, move cursor with regular keys, ctrl+E ends it.
Phew. Long post
Something I’ve forgotten?
Something you’d like to see different?
I will listen to all constructive criticism, but please don’t make any
“piano rolls sux” posts in this thread.