As you mentioned, it doesn´t matter what we use, C++, Electron, Lua, the result will not be as good and seamless as we want.
The current Renoise API doesn´t allow what we need. OSC is a nice feature and a way to get what we need, but it doesn’t make sense to create a Renoise plugin and use unsafe network protocol to communicate with the Renoise sound engine.
Alright , understanding that this is nearly impossible due to the API , and also me budgeting the API development is probably not realistic… I’d give 1 suggestion and 1 alternative solution.
The suggestion is as I said to 4tey also , since you guys have taken this piano roll to some point with your projects and you’re unlikely to continue with it , make it available to everyone so maybe someone else can continue your work at some point , don’t let those projects just die out.
Moving on for now and as I read in another post , is it possible to have a tool that copies midi notes from one daw and pastes them directly in renoise correctly ? With 2 daws open ,without having to rename, export and import midi clips which is a tedious thing for me personally …enough to kill the vibe and creativity going.
Is that achievable ?
The current API is not aimed at the complex plugin like a piano roll. As Joule and 4tey wrote, we can use a different approach like developing a standalone application that communicates with the Renoise engine but in this case, it is better to use the power of Rewire communication and use what exists than to “reinvent velocipede”.
I don´t think that the basic API functions we need will cost a big amount of money. Let’s say we just need additional GUI functionality I mentioned and we can use the OSC server for sounds. From my point of view, it is a matter of 2-3 full days to make these API functions. If you can and you are able to pay this additional development, I suggest asking Taktik. When we have these needed functions I believe there are many skillful Renoise plugin developers that are able to complete good piano roll.
Releasing source code
I think many of us are willing to complete our incomplete tools but with more support from the Renoise API side. If we release our source code it doesn´t solve the situation because we all fight with the same API limits. Yes, maybe there is a genius that finds a way how to overcome all missing functionality for Win/Mac/Linux but I doubt we find him/her. And when someone finally finds a solution it will be more CPU hunger than a direct way. I don´t like this programming approach.
Midi vs Rewire
Why copy MIDI notes? As Joule and I wrote, use Rewire. It will solve your needs in an elegant way. Moreover, you can find a 32b/64b Rewire bridge that works and can help.
You know what? I suggest you one mission. Ask Taktik about further development and my task will be to think more about my further development on the plugin for free…
I will detail some things that I think are necessary in the API to address this issue: “create a horizontal Piano Roll”.
Main things for the API
Eduard Muller aka @taktik listen to the community about this demand. Without it, it makes no sense that we all discuss these things.
FUNCTIONAL AND TRANSPARENT XYPAD UPPER LAYER. Add in the API a new XYPAD (or improve the one that already exists), which allows overlapping (upper layer) on top of any element (lower layer), which can be transparent, and that allows controlling the lower layer directly (remove_child, add_child is a trick “not suitable”). The only thing that XYPAD has to do is return the table of values x and y at all times within its area. This will allow you to directly control the buttons (or other objects) on the bottom layer with your “pressed” and “released”. It is essential that we have direct control of any element of the lower layer, obtaining the X-Y coordinates of the mouse at the same time.
XYPAD SPEED CONTROL OF THE POINTER. Allows control of the mouse pointer speed when the user does not press any modifier key (such as CTRL).
With the API6 and these 3 additions (only 3), it would be possible to create a Classic Piano Roll, like those that some people want with their blocks, drag and drop and all that.
Secondary things for the API (by difficulty level to implement)
Secondary things would help to obtain a better GUI.
PRESSED and RELEASED FOR XYPAD. Allow to execute a function in both cases. Maybe this should be on the “main things” list. But it’s as if the XYPAD is still a beta. It is not thought in depth. This property should already exist from the beginning.
VERTICAL TEXT ROTATED 90º IN ANTI-HOUR SENSE. It would be great to have another property that allows you to rotate the text 90º counterclockwise, at least in the text, button objects, at least.
TOTAL MOUSE CONTROL. At least differentiate between right, left, center, and wheel rotation. This is because all mice (or the vast majority), have at least these physical mechanisms.
Some notes / tips
To build a Piano Roll, the drawing of the blocks, which would be “painting” (overlapping images, or coloring buttons) and other elements, must be done by reading the data already written from the pattern editor. The mouse pointer “when clicked” should not “paint anything”. Everything should be drawn from the pattern editor, and not vice versa. The tool must be activated.
Then, the Piano Roll tool will only have to edit data in the pattern editor (basically inserting notes and their note offs). Another function should automatically take care of “painting”. This also implies that the notes sound. Painting without sounding makes no sense.
It is essential to have direct control of the buttons (with their pressed and released), in order to control the OSC in some way (note_on, note_off trigger). It is not even necessary to ask @taktik direct control of the sound (this never will). With OSC it is enough.
Everything Renoise is capable of representing must be possible to represent on the Piano Roll, and not vice versa. The Piano Roll depends on Renoise, not the other way around. What Renoise offers (the data in the pattern editor) is more complex than a Piano Roll.
It is necessary to use a “layer priority” to address all overlapping notes between different note columns, within the same track. Additionally, the same if you want to represent multiple tracks at the same time.
We must address the jump between patterns. At least between the selected pattern, the previous pattern and the next pattern. This is quite complex. It is not enough just to represent notes of the current pattern. The drawing of a note block may depend on data contained in the previous pattern and in the following pattern. Here are certain limitations, which will depend on the number of lines of each pattern. If, for example, each pattern has only one line (Renoise allows that), it will be more complex to draw the blocks.