Brainstorming: Piano Roll

Funnily enough Joule point 1,2,3 that you make is the same thoughts that I had :slight_smile: Taking point 3, why bother and really how much advantage is it for the tracker musician and not just a fancy lua script programming exercise? To be honest I always felt it to be slightly more of a programming exercise. Slightly interesting nevertheless, and that is why I messed around with MiniRoll as much as I did. What I was going to probably do (if I ever got any real motivation factor, I always feel that you are programming something that is…meh?) is expand MiniRoll to use say the GTK interface, and pump the message events from renoise lua into my separate C program:

Attachment 7229 not found.

Unfortunately cross platform is more tricky this way. Going purely lua you wouldn’t have this complication :slight_smile:

Personally I think you would have to think of it more as a ‘tracker roll’ rather than a ‘piano roll’. Due to handling things like the fx column(s) and handling note movement/adding/deleting. I simplified it in my mind and I didn’t consider the fx column at all (for the moment). Just the algorithm for moving/adding/deleting notes and length (including the delay column) and calculating the position that that would be in the pattern (and what column.) As you know yourself Joule it is possible, it’s just getting the motivation and preferably a large continent of programmers :smiley:

Personally I think you would have to think of it more as a ‘tracker roll’ rather than a ‘piano roll’. Due to handling things like the fx column(s) and handling note movement/adding/deleting. I simplified it in my mind and I didn’t consider the fx column at all (for the moment). Just the algorithm for moving/adding/deleting notes and length (including the delay column) and calculating the position that that would be in the pattern (and what column.) As you know yourself Joule it is possible, it’s just getting the motivation and preferably a large continent of programmers :smiley:

I’m thinking there could be a checkbox if you want to move fx along with notes or not. When enabled, we have to assume that the fx are moved as-is (relative to the note, with no fancy stretching or padding of effects). I’d be content with that solution. Perhaps stretching/padding if you hold a modifier key (say you want to maintain a vibrato thru the whole note duration, even after stretching the note).

The issue that gets me most confused is moving/deleting notes and how to do it non-destructively - e g. what note column to select when inserting a note. The basic problem is that it WILL break the previous note on the same column, if there is one. Maybe the simple solution is to always let notes occupy the first free note column - left to right. That would seem acceptable?

It also implies that the column allocation would ideally also require a “cut oldest note” routine, which unfortunately is relatively heavy.

I’m thinking there could be a checkbox if you want to move fx along with notes or not.

That was exactly what I was going to (eventually) do to be truthful Joule :slight_smile:

The issue that gets me most confused is moving/deleting notes and how to do it non-destructively - e g. what note column to select when inserting a note. The basic problem is that it WILL break the previous note on the same column, if there is one. Maybe the simple solution is to always let notes occupy the first free note column - left to right. That would seem acceptable?

Yup, it would be a tricky algorithm particularly if you want to preserve as much of the ‘structure’ that the user has already in the track. Personally I think it would be fine going with the ‘let notes occupy first free column’ approach. I wouldn’t mind because I would look at it from the programmers side and not so much from the musicians side. I’m of the mindset that whatever makes it easier (for the moment anyway, complexity could be considered later?) for the programmer :slight_smile:

I would imagine Joule that most musicians initially just want a graphical way of picking a note, dragging/transposing, and adjusting length (with the delay/quantisation any note off calculated etc.) To be honest I simplified it down to initially be monophonic where it only considers 1 column at a time, then consider polyphonic/multiple columns later :slight_smile:

  1. What scheme to use for note columns when interpreting/converting piano roll data to pattern data

  2. Should fx be padded when resizing notes, and by what scheme?

Even before this, I would consider how to interpret the pattern. You can have combinations of effects, notes, even multiple notes tied together with Gxx commands.

Would you not want certain effects to “belong” to the voice, and be able to visualize that gliding notes are in fact connected?

If you let it, all of this could automatically be picked up by xVoiceRunner(the class, not the tool). I’m using that class for note-sorting, but it can do a lot more than just that.

Even before this, I would consider how to interpret the pattern. You can have combinations of effects, notes, even multiple notes tied together with Gxx commands.

Would you not want certain effects to “belong” to the voice, and be able to visualize that gliding notes are in fact connected?

If you let it, all of this could automatically be picked up by xVoiceRunner(the class, not the tool). I’m using that class for note-sorting, but it can do a lot more than just that.

I pondered about exactly these issues/ideas (and your class) today.

Gxx should indeed make a note-pair (or more more) stay in the same column. And a handle is (eventually) a very nice idea as it will even let you drag the point of where the glide is completed (quite a novel visualization/control).

Another issue is what will happen when the user inserts a pattern. Any active notes will then be extended across that pattern. I think it’s important not to mess with any native behavior, so a custom “insert pattern” button in the piano roll could provide a way to do this task while keeping all note lengths.

PS. I did my own voicetable builder, as I also want it to be updated by line_notifiers in an optimized way. I wasn’t sure if your class/structure dealt with that, but anyway it wasn’t too difficult making a fast&cached voice scanner.

@joule, @4Tey and @Danoise… I do not know to what extent yourselves are able to build something that arrives somewhere with this theme of piano roll or the like, given the limitations of the API. I only want to indicate a couple of the details that I think so that you have them in mind, should you develop something serious.

The advantage of a simple piano roll, is not only the power to compose with it, that is, to place notes, to be able to drag them and to modify its length, etc. But also the ability to see the order of notes at the time of reproduction, once the piece is composed, after. I am more than convinced that a vertical piano roll is the best solution, which helps enormously to locate notes visually, and then modify them. It allows the mind to be released and the eyes to work at a different pace.

So the question I ask. Is it possible for the note blocks to light up, each time the note is played back in the pattern?I understand that with the current API is not possible. What you intend to build is only an editor, to include notes and modify them?

What I mean is that the piano roll would help a lot visually at the time of playing the notes. Let the blocks react to the notes as they are played or that there exist a moving marker, along with the lighting of the piano keys.

I think it has already been named in the forums, but I would ask Danoise to seriously consider adding the future API to an agile way of collecting information from the pattern editor during playback. For example, a button can not be lit when playing a note in the pattern. I think all this would be very useful for a possible piano roll.

A example… The other day I proposed another tool that was a sliding vertical bar to be able to modify the delay parameter of each note in real time, ranging from 00 to 255. Seen this, there were several bars, one for volume, another for panning, another For the delay (in reality this window would represent an enlarged cell, a quick way to manipulate numbers without typing any, but the parameters already written must be updated in the tool). But for this it is necessary that the API allows to collect the parameters writen in the pattern editor. In fact, many different and useful tools could be built if this were possible (to be able to read the parameters already written in the pattern editor).

I’ve found out it wouldn’t be terribly difficult to script a piano roll. Moving buttons (notes) in the viewbuilder is possible, for example, and it’s easy to tie them to notes in the pattern editor. After some experimenting it seems to me that the code would even be surprisingly small and a lot less complex than some of the tools we’ve seen so far.

The bigger questionmarks to me are:

  1. What scheme to use for note columns when interpreting/converting piano roll data to pattern data

  2. Should fx be padded when resizing notes, and by what scheme?

and maybe the biggest question,

  1. Who would undertake this project and why? I am guessing not many people would like to pay for this tool, so what would be the motivation? Ideally, I think it would be great if it was a community effort, possibly led by a “team” including a couple of scripters.

One API limitation would be the lack of context based mouse cursor, stupid things like changing the mouse cursor to a razor when split mode is enabled, but I don’t see any crippling limitations that would make it a bad idea trying to script it.

Any thoughts on how to proceed?

PS. A simple prototype to prove the mechanics: https://dl.dropboxusercontent.com/u/6812754/absolutely.gif

I am very curious about what you have built here joule, and the rest of ideas.Do not stop publishing things, please. If yourselves want to move forward with this theme, maybe it would be appropriate build a separate new forum, so that others can learn, and maybe contribute something.I mean, create a forum for this task, if in the end yourselves decides to do something.

Encourage everyone with this theme :rolleyes:!

By the way, I can not stop think about the use of the layers, merging the automation editor with a pianoroll, the fusion taking advantage of the area.What a rage that Taktik does not touch this subject :(.

@Raul,

Flashing notes is possible by observing the line_index with an idle notifier. It’s not realtime, but I believe it’s fast enough not to appear terribly lagging (the update frequency is said to be something like 0.1s).

Rendering the piano roll as vertical or horizontal is mostly a matter of switching all height values with all width values, and all x_pos values with y_pos values. I think it would be a bad idea not to make a toggle for selecting vertical or horizontal mode.

The API is enough to make a decent piano roll imo. I don’t see any technical hurdles that can’t be dealt with, but it’s mainly a question of who has the motivation.

I dont agree. Maybe it would be a good idea to make this in lua, if 1. the api was much faster and less laggy 2. had a solid graphics/canvas functionality, 3. and the created gui could be displayed within the renoise gui, not as a floating windows.

I also think that there are already piano rolls for renoise made in lua?

I think you will waste your time with such a project.

@Raul,

Flashing notes is possible by observing the line_index with an idle notifier. It’s not realtime, but I believe it’s fast enough not to appear terribly lagging (the update frequency is said to be something like 0.1s).

Rendering the piano roll as vertical or horizontal is mostly a matter of switching all height values with all width values, and all x_pos values with y_pos values. I think it would be a bad idea not to make a toggle for selecting vertical or horizontal mode.

The API is enough to make a decent piano roll imo. I don’t see any technical hurdles that can’t be dealt with, but it’s mainly a question of who has the motivation.

Ooh please, could you build a simple tool with a single button that lights up with the passage of a note in the playback?Or explain to me exactly how to do it? 0.1 seconds is pretty fast, I think. On the whole, would not it be something heavy for overall performance?At least, if I had a basic example, I could implement it in my tool, GT16-Colors, which includes his piano.With line_index it is possible to associate each individual note with a specific button?

EDIT:The button should be turned off with an note-OFF or a new note below.

Puff, I do not have enough knowledge to build a pianoroll, yet, but if I knew it would already be built.It would be a great hobby to build it, and then see that it works. Would be wonderful.

If there were a button to change from vertical to horizontal, it would be better, of course.

Danoise does not lack motivation. He is always building things.Encouragement!4I think you would be encouraged too.If you want, I build the icons ^_^.

I also think that there are already piano rolls for renoise made in lua?

I have not seen any…

I dont agree. Maybe it would be a good idea to make this in lua, if 1. the api was much faster and less laggy 2. had a solid graphics/canvas functionality, 3. and the created gui could be displayed within the renoise gui, not as a floating windows.

The performance is not an issue. I find most of the API to be quite fast, GUI wise (at least the classes involved here). And known canvas methods are good enough (for a piano roll). But non-floating window isn’t possible, no.

The basic concept isn’t too difficult to script, but of course there’s “endless” incremental development involved, implementing stuff like quantization, tracker-specific ties/features et c.

Danoise does not lack motivation. He is always building things.Encouragement!4I think you would be encouraged too.If you want, I build the icons ^_^.

Just speculating here :slight_smile: I have a feeling that they wouldn’t want to build it with the current API. There are some undocumented ‘exploits’ involved, and it’s quite possible that there are planned API improvements at a distant horizon that would imply a different approach to how it would be built.

I think I just had an idea that is pretty feasible, and which might actually satisfy a good number of people who just want a visualization for chords and melodies:

Just slap the Instrument View piano on the Track FX panel, and make it so that it shows all the notes on the current line (without having to hit play.) Add some other stuff, like highlighting the specific note under the cursor, and maybe highlighting whole selections of notes over rows and columns too. I guess you could even make it so you could click and drag a note to transpose it.

Frankly, that’s all I need. It might not be a full visualization over time and all that, but it’s a good, doable compromise for the time being.

Edit:

Looking at it some more, there will be a lot of dead space left over. I filled some room with things from the advanced pattern editor pane. I have a whole bunch of suggestions for how to improve the advanced panel but maybe that’s best for another thread. (Does anyone else hate that there’s no way to remap instruments with [src: any] -> [dst: xx]?)

Added a play button (for previewing a chord.) Would be good to have a “sort” button too, even if it just called a script, like the VoiceRunner tool.

Hello folks,

I’m brand new here. Been looking for the perfect DAW, which led me to Renoise. But there are certain things I like about ‘piano rolls’ and I’ve come up with a visual of how I would like to see it incorporated into Renoise:

7347 demo image.png

Features of my design:

  1. I’ve never seen the appeal of horizontal piano rolls. My piano roll is vertical with notes arranged left to right like a real keyboard.
  2. Each note is shown as a waveform, with a line at the very top to clearly indicate the start of each sample
  3. There’s no piano keyboard image - I only need to see the shape of the melodies
  4. Notes are entered with keys - I’d hate to “draw” notes with a mouse.
  5. The notes in each track automatically stretch to fill the column width
  6. …This means if a track only uses 1 pitch, the waveform fills the entire width
  7. Width of each note slightly overlaps the adjacent notes, making better use of the space
  8. Multiple tracks can be “grouped”, combining their notes together in the same space. This could be automatic for all adjacent tracks using the same samples
  9. Note: This is only a rough sketch - I can develop this more, and have more ideas.
  10. Note: I haven’t even downloaded Renoise myself yet. This was based on a random screenshot I found online.

Also just to note that yesterday I made a new thread about my idea. I had searched the forum for “piano roll” but I didn’t see this one as it was on page 2 of Google, dated “28 Dec 2002”.

:oGo, I had to reread the last comments of this thread to notice the situation and remember the problems I had last year with the vertical piano roll.

I just want to announce that I have already built my first vertical piano roll, and wow, I think it is a magnificent tool, very much in keeping with my hobbies and way of thinking. As we suspect, the code of the tool is surprisingly short. The XRNX (that is, the ZIP) occupies less than 60 KB. Another thing is the performance itself of the tool, which is somewhat heavy if the user increases considerably the number of lines and the number of octaves to be displayed. However, as a compact editor, I think it’s pretty good.

Almost since I registered in these forums, I have been researching and learning the API and LUA to get to build a vertical piano roll in the form of a tool, among other tools. I can say that I have reached the end of a trip.

We all know that another member of the forum built his own pianoroll (horizontal). But for some reason, it did not end. But, anyway, it is already proven that a piano roll is possible and fully functional. It is best to add a horizontal piano that is compatible with MIDI input. In this way, it is possible to play a MIDI keyboard and observe how the roll shows the notes arranged horizontally (since the piano roll is vertical).

I want to warn you of the problems that may arise if someone wants to build their own pianoroll. Renoise can show 12 notes per track. That is, you can show even the same note 12 times on the same line within the same track, thanks to the 12 note columns. This translated into a piano roll implies that the same “square” could contain those 12 notes, one on top of the other, say in layers. Therefore, it requires a configuration to establish which layer will be on top and which will be below. In my experience, the best way is to always set the most left note columns as upper layers.Something similar if you want to represent several tracks in the pianoroll.

Another issue is the use of blocks. If a note is represented by a rectangle to set its length, it is a direct problem of representing notes (always talking about Renoise as a background). I mean, by extending the length of the note in a long rectangle, you can hide other notes below, so the user will see less information (fewer notes represented). Therefore, I think that the best way to approach a piano roll for Renoise is to use frames for notes, and to cut the notes with another box that represents the note-off. This also solves the jump between patterns.

In short, if someone wants to build their own piano roll, I will be happy to discuss these things with him.I think the simpler the editor is, the better…

I am aware that a tool is an extension, not something native. A native pianoroll could be useful as a secondary editor. It’s not any joke. Conceptually, it helps the musician to order his notes in the head. Even if the pianoroll has problems of overlapping notes, it would be worth it. You do not see this, until you have a pianoroll running together with renoise at the same time. You realize how messy or arbitrary a tracker is when it comes to placing notes according to his tone, and it’s easy to contrast it visually (the tracker with the pianoroll and vice versa).

I believe that Taktik affirmed that a pianoroll would not be a solution, or something feasible. At least we know that it is possible to have an editor in the form of piano roll as a tool. And I am convinced that there are a few members of the forum experts in programming able to build their own pianoroll. I just wanted to say that it’s really worth having one together with Renoise.

I do not know, maybe in the next version of renoise we will see a vertical piano roll as a tool, at least. :wink:

I really do admire your work Raul, even you never programmed that RAS tool for the community :wink: YET A Pianolol will never happen, so get over it!

I guess you mean a “native piano roll”. I am talking about a piano roll as a tool.This has already happened (several times even).Regarding the RAS, that I have not published anything does not imply that it does not exist.

I think I’ve already stated it elsewhere, but… The main thing that would be lacking is the support of modifier keys. Everything else is doable - including something complex like drag-selecting multiple notes and drag all of them simultaneously to make their duration longer. Other than support for modifier keys, this is a good measure of what consitutes a piano roll worth releasing IMO. Anything else, I wouldn’t use.

(Your remark about overlapping notes is invalid. This is something that can occur in other DAWs as well, and that the user has to deal with. Sure, the risk is ‘higher’ if you render something that’s already been tracked.)

modifier keys?You refer to being able to do, for example, CTRL + left mouse click. Or simply right click or central for another order?Because I also miss this.And also the “released” of the keyboard keys.

I suppose that selecting several notes to lengthen or shorten them would be a typical operation to configure chords.

If you make a mesh of frames (buttons) with the ability to insert notes, or delete notes with the same click, it is very quick to change the length of several notes. If there are 3, it would only be 3 clicks. In the end, many operations can be solved with several clicks, and that would avoid having to select an area, and then apply a specific operation on it (lengthen or shorten the notes). I’m just discussing things.I suppose that using blocks (rectangles) to modify the duration of the note is something sacred for many pianorolls (because all DAWs use that). But it does not have to be like that always. Cubes can be used at any time.At all times I am talking about something functional, understandable to the eye (one cube, represent the trigger note, and another cube the note-off, would be the most faithful representation to Renoise).

Regarding the overlapping notes. Do other DAWs allow you to play the same note 12 times on the same track of the same instrument? Maybe I’m kind of lost here. I know that other DAW’s have problems with layer overlap too. But I do not know if they are so similar to the amount of information that Renoise can show with its 12 note columns. In a pianoroll a note corresponds to a square. You have 120 boxes for 120 notes. With Renoise you have that multiplied by 12. From my point of view, with Renoise there can be many cases where information is lost (vision of the notes) by that “superposition of layers”.Other DAW’s will also have this problem of overlapping notes, but is it possible that they do not have so many combinations? It is clear that if you use the pianoroll, it is likely that you will not superimpose notes, and if you do, you will see that something strange or different is happening.

Regarding selection, drag and other operations, it is something more complex. I have not used it. I have invented the possibility of editing by blocks (groups of lines), for a note column (selected ones) or for all note columns. It is more limited than a selectable area, but for most operations, it works very well, even with cutting, copying and pasting.At all times I have tried to make it as simple and functional as possible, without being influenced by the rest of the horizontal pianorolls.I think it’s not about “copying” what other pianorolls offer. It is possible to be something original with what we have.

When you have the roll in front, and you realize how easy it is to change the tone of a note, with just a click (nothing of drag), you realize the power of the mouse.Up to now it is the most interesting tool that I have built, because it has allowed me to think how to do certain operations in another way, such as modifying notes without dragging, or a reasonable selection method that is very simple to use.

So you still cannot grasp the elementary concept of a tracker as it seems Raul. You are not talking about a tool but just admitting that you are a fool if not able to realize that there is a piano roll in Renoise already. Just switch your monitor 90 degrees and there it is, your infamous vertical piano roll. VOILÀ :rolleyes:

What you are actually talking about the whole time in this thread, is a piano editor for the purpose of laying down chords and harmonies easier. Maybe you can gRASp this by now :excl: So there we are again, as this is the most urgent new tool one could make, adding"Instant Gratification" to Renoise.

But as usual you still want to keep it for yourself instead of lifting up the whole community. Your EGO must be very proud of you !!

Please, stop saying nonsense and disrespecting people. If you continue like this, it is possible that you do not last long in these forums. Again!

Just to locate you a little…

…we already have a piano in Renoise which we use to enter notes into the pattern editor or phrases…

The piano that you see in Renoise, does not serve to introduce notes, unfortunately, neither within the pattern editor, nor within the phrases editor.You can use your USB keyboard or MIDI keyboard, but not the mouse on the piano, which is the essence of the pianoroll.That piano of Renoise is basically a note trigger, but it’s not good for editing.It is a part of the instrument editor.

So what we both might also want is an editor to lay down notes like in a “piano roll” and being able to edit them.

That’s what we were talking about. Before, I just wanted to point out that it is possible to make a tool that is a piano roll shaped editor.I can affirm it, because I have been able to build it (with the peculiarities of my thoughts). Whether it is vertical or horizontal is indifferent, from the point of view of design. That is, if you can make a horizontal tool, you can also make it vertical, at least very similar, and vice versa.

For the rest, anyone programer who schedules tools for Renoise, it is usual to have “their personal touch”, since it is common for the tool to be for own use. Whether they share it, sell it or not, is another issue.Take a look at the wide variety of existing tools. You will see that all are different according to the programmer, despite using the same code.

On how to build a pianoroll tool, is that it is possible to build it in several ways, and control it in several ways, and all are valid as long as they work coherently with their design… “Pianoroll” is not a unique concept, it has not to be the same in everything, with the same appearance and all that.The good thing about programming is that you can do what you want, not what the great mass of people expect it to be. Precisely because you do not programs for anyone in particular and nor is there any binding contract or anything like that…

Edited.