Huge Midi Oversight? --> Nna For Midi Out And Plugins Missing

Hi there,

I wasn’t really sure where to put this, but since the implications of this oversight are so big, I think it needs to be addressed asap:
https://forum.renoise.com/t/vdrums-midi-renoise-is-note-off-behavior-in-renoise-a-limitation/31012

Basically you cannot have overlapping notes, because the new note will stop the one before. The only way to do this right now is via different note columns (this has to be done manually though!!!), which is limited to 12, however!

Regards,
fladd

Its up to whatever generates the sound on how to deal with Note-Offs. We can’t suppress sending note offs for MIDI/plugins completely, or they will “hang” forever… So NNAs IMHO will not really help here when set up per instrument.

And 12 notes is not really a show stopper in practice? Its hard to find 12 notes that are, when all played together, do not sound like a mess? And if you really need more, you still can use more than one track.

@taktik , It’s not about the amount of notes , It’s about how renoise handles note off’s

Trust him, you don’t want NNA for Midi and plugins: it’s about how the Midi device and plugins handles note off’s and the fact that a Midi device does not support NNA the way Renoise needs to control it. Once notes are fired across the fence, Renoise has no way to monitor what’s happening behind the fence. Renoise could only attempt to buffer all entered notes when new notes are triggered but you are the one who has to monitor which notes you have triggered and which notes you want to have shut down. that would mean you would have to add extra note-offs to silence each earlier note that has not been silenced with a previous note. That results in hard explainable multiple extra note-offs underneath eachother, perhaps on spots where you would like to trigger a new note and who knows across how many patterns these triggers spans and across how many patterns you need to manually add note-offs to shut down each still running note.

With internal instruments, Renoise has all control on it and can effectively fade or kill older triggered notes according to your volume envelope that you can set. But not every plugin or Midi instrument has similar options and even if they do, specially the plugins, they still can remain running voices which are hogging precious CPU time but which aren’t audible at all but as other notes are still playing, the auto-silence plugin option that you can set in renoise, no longer works effectively as audio is still streaming from the plugin.

You are better off by using another track if you need more than 12 notes. Expanding tracks with more notecolumns has no use either, i have note seen cases where striking more than 12 notes simultaneously was easy or common.

Well, my reply to this is very simple:

It is not about how hardware and other devices handle note offs, it is about how Renoise handles it.
Having 15 notes of the same type and each with a length of 10 seconds, all triggered with a note on difference of let’s say 500 ms, is just not possible with Renoise!

The problem is that in other DAWs you can stack MIDI items on top of each other (think piano roll) and they are all played with no problem and without interacting! In Renoise this is somehow solved by the different coloumns, because in Renoise (and this is the problem) notes in the same column WILL interact with each other (namely a new one will cut of the old one)!

Now if you plan to programme everything by hand, then yes, one can hack around this problem by spanning the notes over 12 columns and beyond this by using more tracks or whatever. But the point is recording MIDI performances (which is also a very important aspect of the whole MIDI thing). And in this scenario one can easily think of a case where this matters: There is no way to effectively record cymbal swells for instance!

Even worse, in some cases note offs are important for controlling certain things (for e-drums for instance, the hi hat etc.). This hardware cannot be used with Renoise right now, which is sad I think.
ice
I mean, I do realize that the problem here is the tracker paradigm (which is very nice for other things), but the strong part of Renoise is that it keeps the good things of the tracker paradigm while expanding it with modern and useful things. A proper MIDI implementation falls into the latter category in my view.

Sit in front of a piano, pick a single note to play, and then tell me how many note-ons you can trigger without triggering any note-offs. (The answer is: one)
(Sustain pedal doesn’t count, since you still have to lift up the piano key to strike it again)

Sit in front of a drum kit, pick a single cymbal to hit, and then tell me how many note-ons you can trigger without triggering any note-offs. (The answer is: one)
(And even if you hit the cymbal with both drum sticks, it can still only physically produce a single monophonic sound)

Beginning to see a pattern here?

This isn’t a ‘huge oversight’ and it isn’t a problem with note-offs at all. The way that a particular sampler, VSTi, external piece of gear, etc. handles consecutive notes and their note-on/note-off behaviour is entirely the job of that particular thing, not the job of Renoise. If there’s a problem here at all, then it’s with the actual number of available note columns in Renoise, and the structure of the note data within those columns.

Even with a piano roll editor, if you think of each available note on the piano roll as being a note column, then you can still only have one note event occurring per note column at any given moment in time. New events on that column cut off old events. You can stack multiple neighbouring notes, but you cannot stack multiple identical notes on top of each other. In other words, it’s not possible to have fifteen C-4 notes layered on top of each other.

The difference is just that the piano roll offers more simultaneous note columns by design. For Renoise to work in exactly the same way as a piano roll, each track would need to have 128 note columns (one for every possible MIDI note), and any notes recorded would then have to be locked to their respective note column. Obviously this would be more than a little bit impractical, given the current interface design.

Thinking ahead a little bit…

At the moment, Renoise already has regular note tracks, send tracks, and a master track, so it’s not inconceivable that there could be another type of note track in the future. This new note track could have all 128 note columns, but they would be hidden by default. As you recorded different notes into the track, then the corresponding note column could be made visible and your note would be locked to that particular column. The track would dynamically grow in size and complexity to accommodate your personal needs.

These two note track types could exist side by side, with the original/current type there for people who prefer it, and the newer type there for those that want the piano roll style behaviour.

For sure there is, but you indeed need to stack them vertically across multiple note-columns and on a pianoroll, this wouldn’t be possible because you would have to retrigger the same note in the same space.

If you really need a cymbal swell:Sample it into Renoise and then set the sample NNA to continue, because that is what you need right?.

That it is not possible to facilitate a result in one specific way doesn’t mean that it cannot be achieved in another way.
I’m many times wondering why this specific one way always have to be implemented and folks rather don’t use or sometimes even don’t want to try the alternative.

Mm, I think many drum plugins are mostly interested about note-ons, not note-offs, so swelling cymbal is done simply by hitting it multiple times and increasing velocity.

You never heard of a reverb tail? Hit a block of wood or clap in a massivly reverbarant chamber. Now do this a few times quickly. The sounds, although very short themselves, overlap in teh reverb. You need to keep the reverb with some samples, you don’t want it cut off as a new hit is triggered.

Is this relevant to the initial post? if you don’t want the sample to be cut you can place the next trigger in another collum right?

Yes it is very relevant to this topic! I know this, we went all through this in his original thread. Why did you not ask dBlue who was trying to argue that what he wanted to do was not realistic rather than me pointing out that in fact it is. Have you got a problem or something?

That’s not very nice of you, My post was set in an asking manner, I’m not judging you or anything.

Each column has 6 voices only. So its max 12*6 voices per track for samples max, but also only 6 per column.

Obviously I’m familiar with what you’re talking about, but the physics of sound itself doesn’t really apply to what is being said here. I was just trying to make a simple point about the note triggering behaviour, and how NNAs don’t really exist in the real world. It’s not the piano key string or the cymbal itself that’s generating the reverb, is it? It’s just an interesting phenomena that occurs from sound bouncing off surfaces in the room/space you’re playing in, and in some cases within the body of the instrument iself. This is really beside the point, though.

But of course I understood what you were getting at…

I totally agree, but let me try to explain a bit more.

If we’re talking about playing sounds through an external sampler (or VSTi sampler, or drum module, or whatever the case may be), then it’s the responsibility of the sampler itself to handle any special characteristics correctly. AndyRx7’s original post mentions that he’s using a Roland VDrum kit and a hardware sampler, which is why I’m even bringing this up at all.

Renoise’s only job here should be to deliver note-ons and note-offs to the sampler, and then the sampler should decide how to interpet those events and generate sound accordingly. It’s mainly up to the user to structure the notes in a way that achieves the desired result. If you have a sound with a reverb tail that should be played polyphonically to avoid the reverb tails being cut off prematurely, then it’s the sampler’s job to implement NNA type behaviour and play the sound correctly.

It’s not Renoise’s job to handle NNA type behaviour for the MIDI notes themselves, or to attempt to deliver specially crafted sequences of note-ons without the corresponding note-offs. Doing so would probably only result in buggy behaviour and stuck notes. So… when dealing with MIDI notes sent to external samplers, NNA for MIDI notes is not the answer in my opinion.

Now… to the issue of actually playing samples directly in Renoise, which is where this gets a bit more interesting…

When playing samples directly in Renoise, then Renoise obviously is the sampler. In this scenario, then it’s entirely Renoise’s job to handle the playback of those samples correctly, and that’s why he have those NNA actions in the first place. This is where I start to agree with some of what has been said. It’s clear that 12 note columns and 6 notes polyphony per column (max 72 notes) is not going to be enough for everyone. There are limits to Renoise’s internal sampler, and I fully agree that some of those limits could be improved.

There could also be some improvements made to how Renoise handles MIDI notes that are being recorded. There could potentially be a ‘drum kit mode’ or ‘piano roll mode’, for example, which dynamically separates each note into its own dedicated note column as you play. When individual drum hits are separated into their own columns, then 12 sounds at once with 6 note polyphony for each sound is actually pretty decent (but of course, more would be better). It seems like a tool could be made to handle this note recording/sorting behaviour, just to test things out and see if it feels more satisfying this way, I dunno.

Edit: I personally only use one sound per track in Renoise anyway, so the 12x6 thing is not a huge problem for me, but in general I think it would be nice if we had access to more note columns. It would great be if stuff like this was effectively only limited by your CPU power, rather than some arbitrary value. At the same time, I understand the need for some limits, but a value higher than 12 certainly seems doable and desirable here.

The point is it does behave differently if you use one or more columns. This is clearly down to the fact Renoise must be sending a Note Off directly before an Note Event in the same column (I assume looking back to send it on the correct Note value.) With internal samples you can choose whether it does this or not.

Is there any reason somebody shouldn’t be able to record a live drum pattern, which will obviously all go in one column as long as only one hit is activated at a time, and not have each drum sample play to the end? Doesn’t matter if we’re talking a drum machine like a SR16, an MPC type machine or the V-Drums used by the original poster you are still talking about samples, many of which are less than half a second, longest probably no longer than 2-3 seconds. Why should Renoise not be able to handle all these in the same column like it does its internal samples. A Note On is only followed by a Note Off or a Change! There is not a This Note Is Still Active sent every polling opportunity! As we are talking short drum samples there is little need to send Note Offs a lot of the time and overlapping within the same column would make live recording from MIDI devices so much less of a pain!

Or maybe some kind of Drum Recording Mode, where you can create a Track of a certain amount of Columns and Renoise would advance on to the Right with each Note entered, thus reducing amount of Notes erroneously cut short?.. If people really don’t like the idea of the user being able to control Note Off generation being in the hands of the user.

Apparently Kazakore is the only one understanding what the actual issue is! It is not about not sending note offs, it is about the case when the note of will be later then a new note (which will force a premature note off)!

In my first post I linked to another post with a MIDI example which Renoise just cannot handle! Period! That is the problem which I think should be faced.

Yes, but the easiest way to visualize the problem is that this is not possible:

C-4(1)

C-4(2)

Off(1)

Off(2)

The C-4(2) will cut off C-4(1), although it shouldn’t. This is solvable by using another column, but only up to 12 and this will also not happen automatically when recording (if I correctly understood the post I linked to in the beginning).

The issue is simply that the 2nd note in a column will cut off the 1st note in that same column, while two notes played in separate columns works normally (assuming that they are actually different notes). The first 2 patterns in your example demonstrate things quite sufficiently in this regard.

The last 2 patterns are unnecessary I think. If anything, they only reveal how well that particular MIDI device handles its note input, which is not really a limitation that Renoise can control. Attempting to trigger 12 simultaneous C-4 notes in any synth is going to be weird.

Many will simply reject 11 of those notes, for example, while others will handle it differently. My own “Microsoft GS Wavetable SW Synth” (set to a nice classy GM piano sound!) simply triggers all 12 in rapid fire style, leaving only the final C-4 playing. Again, this is mostly a limitation of the synth itself (and MIDI in general) rather than how Renoise handles it.

In any case, I think it would be a bit more accurate if you change your example so that it attempts to play 12 different notes all at once. Here’s a slightly modified version:
http://illformed.org/temp/MIDIPolyphony2.xrns

Edit: With all the back and forth that’s occurred within this thread, I think the answer is simply more available note columns, and some smarter behaviour on Renoise’s part when recording notes into the pattern itself. Trying to hack in NNAs for MIDI notes doesn’t feel like the right approach to me.

Actually, rereading the post I linked to, even this does not seem to be possible:

Column1…Column2

C-4(1)…—
------…—
------…C-4(2)
------…—
Off(1)…—
------…—
------…—Off(2)

As reported in the other thread, again, C-4(2) will cut off C-4(1).

(edit: nevermind)