Reaper 5.25 broke Nora? 0_o

Official support for: www.squaredheads.com
Post Reply New Topic
RELATED
PRODUCTS

Post

I've been away from computer music for the summer. Recently I've updated Reaper to latest 5.25, and today found that Nora somehow behaves wrong.

If you have more than one note pressed (Reaper is stopped btw) and the phrase has a whole bunch of notes with start time of 0 (right from the phrase start I mean), Nora cannot catch up with all of those and for the first loop of the phrase only one note (of a few pressed) is used. The second loop catches up with all of the notes. It seems to me it behaved differently before. I've tried some Reaper options (Nora hasnt too much :) with no effect. Could that issue be addressed soon, not at v3 release?

Post

I have experienced this often in Logic and Mainstage. Even if there is only a single note beginning at the very start.

Post

Hello, if I'm right, I think the problem isn't from Reaper - but an intended behavior, as I will explain later - since it the same for every host when playing on STOP + STATIC MODE + (INTERNAL SYNC MODE - switched automatically and no visible when the host is stopped).

This issue, as we talked before, isn't similar to the one you say Protocol_b (unless something has changed) since you told me this http://www.kvraudio.com/forum/viewtopic ... 4#p6535104. If I'm wrong let me know.

Ok, let's go with the problem. Please load your project and try this with default settings (STATIC/HOSTSYNC and the host in stop) and try something like this:
Image

Now, if you use just one key (or more), it will sound as expected and without any problem right? But now, with the same Nora phrase, play two loops holding a d-5 and a c-4 (or d-4 and c-3, you got the idea), but play them making you sure you pressed the D key slightly before than C key. Before playing, think: what do you expect to hear? Two loops based on C or D or mixed?

The right answer is mixed. When you start playing (when the host send information to Nora), it sends only a D key, since you pressed it before than C. Then Nora start playings. Since Static mode is used, Nora only will evaluate Key changes once the notes in the arpeggiator ends. In another way:

You press D-5 and the host send to Nora the D-5. Then Nora thinks:

- Hey, the boss want I move my ass even when the host is stopped, I switch to INTERNAL SYNC mode and I start playing. What do we have here? I see, just a D-5, meh, boring. Ok. I assign D-5 to the bottom lane of each octave, so I play back three notes, D4, D5, D6.

But then, some milliseconds later, you press the C-4 key....

- Uh oh. dmitriyK is sending me a new input... just now... ok. My orders are be in static mode, so, I must wait until all the current note ends before reevaluate. Then - ignored.


And a couple of seconds later, the Notes in Nora's grid ends, and the loop start again.

- Ok, now I have two notes, D-5 and C-4. I will order them from bottom to top... it would be... C-4 and then D-5, done! Now I assign each note to each octave lane. First one, C-4, to first lane. Second one D-5 to second lane. Now I will play all notes within the first lane with a C4 (three notes, C3, C4, and C5). But D-5? There is no notes in any second lane of any octave! So ignored.

So what you have here: you played and hold D-5 and C-4 still you have a loop with D4D5D6 and another with C4C5C6, just because they were played in the wrong order! This is the root of your problem.

/*************************
Let's see what would happen with the same experiment using the Free mode. You can skip this free tutorial if you wish. Ok, you do the same than before, you play D-5 and some milliseconds later C-4.

- Ok! I start playing with D5 playing D4D5D6. But I just received a C4. Wait. I'm on free mode. The boss wants I re-evaluate as soon as possible, no matter what. Ok. D5 key was assigned to the first row. But now I change it to C4, and I move D5 to the second row. The three notes are playing D4D5D6 now should be C3C4C5! So, I mute them and I start some new ones. Easy boss! :)

It means Nora reevaluate which note should be in each Row in the same moment you press new keys. If there are changes, Nora stop the current note and start with new ones - this effect is pretty interesting when you are not playing on stop (or in a future...).

*************************/

Ok, now let's try a multi input key phrase like this one:

Image


(I will continue in few hours with the explanations)

Post

So, let's back to our example using C-5 and D-6 keys to trigger such phrase.

In short: If you would trigger both keys at the same exact moment, everything will be fine. But, let's back to the real world. Setup Nora again with Static mode, and while the host is stopped press C-5 and few milliseconds later, D-6. Only C-5 will be played (as the bottom row). Same as viceversa. Start playing D-6 and few milliseconds later play C-5. Now only D-6 will be playing (also, as the bottom row!). Why is this happening? Lets see how Nora see it.

The host send nora a NoteOn for the D-6....
- My owner want I start playing using my own clock again. Let's see what he is sending me. Oh, it's a D6. Fine, since there isn't any other note, it means this note belong to the bottom note row of each octave, so I start playing it and running the clock.

... but now, few milliseconds later, you send the C5:
- Wow, so fast! Another note. And this one is lowest than the prior note. So it means I must move the sounding note to the mid octave row and place this one in the lowest row. But... when should I do it? My mode is Static. It means that if one note start playing I must keep it sounding until it ends, doesn't matter what I receive. So, I will don't do nothing at the moment.


... once a new Nora chord comes, or once the phrase loops, and the keys are still hold.
- Ok! now it's the moment to reevaluate the notes and see which one should go in each row. Of course the lowest note will go to the lowest row, C5. And D6 will go to the mid row. And both should be playing.

That's is how Nora work with the static mode. But in free mode Nora reevaluate inmediatelly.

As you see, there is almost nothing anybody can do about it, unless the VST specification changes. However there are two ways to improve this with hard detrimental effects. I would solve a problem to create another one: (notice the host send to nora packets of 1-2 ms).

1. Delaying the first time you play keys, let's say, 20ms. After that time I would re-evaluate the note(s) in the first bunch of packets. Then I will see which note is on and I would generate some delayed note like this each time you start playing.

Image

This is hardcore to code in the current Nora status, and wouldn't be avaliable until the next version. Also, this gap cannot be saved in any way.

2. Creating a latency of 20ms. Then I would process the notes and I would have time to reevaluate them, without mind their timing (in those 20ms). All the notes, not only the first one, would be delayed, however their lengths too. And you could use your host to compensate the latency of the plugin - if it can compensante the MIDI latency, because some host only compensate the audio latency!. This is also hard to do, but not as hard as 1. And I'm not sure if I can change in real time the latency, if I cannot, this would affect to all the users - and the most of them will hate it!

The solution isn't easy for this, it needs a lot of effort and still it produces undesirable effects. It's a problem like... "why when I drop my pencil it falls towards down instead top?". However if you have another suggestions I would listen them.

Post

Oh I do remember now why I did my phrases this way... :) Used a chord plugin.

Still, you're supposing some pretty straightforward solutions while you can do smarter: catch up whith the note-ons later. I think the VST standart doesnt interfere with inner processings of Nora, so you can catch up the "new" notes (the ones you got milliseconds later than the first one that triggered phrase playback) by doing some reverse search in a phrase. Sonically it would be no noticeable change, and if someone finds Nora's midi output chords slighly "arpeggioed" -- let him quantize them, coz nothing comes without a price.

Post

Notice that while I can reverse the search in a phrase, I cannot do it with the external midi unless I use a buffer (with the two solutions I offered). In others words, Nora work in this simplified way. The host send the packet, and Nora replies to the host. Then the packet is lost forever, unless I decide to remember it, but anyway the host received the reply of this packet and he is doing its stuff.

Packet 1: size=1ms, note on for D-5 at 0,000ms; (Nora start running)
Packet 2: size=1ms, empty;
Packet 3: size=1ms, note on for C-4 at 0.025ms; (Nora reevaluates the order of the notes, depending modes like STATIC/FREE)
Packet 4: size=1ms, empty;
etc.

Of course, If I create a 20ms buffer I can reverse the search in the external MIDI, but for that, I need add some delay (you would need a plugin delay compensation) or just start a bit delayed the firsts 20ms. So I wouldn't be sending any reply to the host in that time, 20ms.

Using a chord plugin like NoraHarm has the advatage that all the notes are going in the same packet with the same time, so it solves this problem without any added delay

Post

I still dont understand why do you need a 20ms pre-delay if you start playing the phrase from the first note accepted. If you say you need it, I'm ok with that.

In my mind it is like that:
1) start playing the phrase with the first 1-2 keys pressed with same timing;
2) if more keys are pressed (even 2ms later), and the cursor position at the time that key "arrives" is in a midst of a note (note on is past), send out note on and the phrase note as calculated.

This raised some kind of conceptual question: do the lanes of a phrases correspond to pitch in any way or just represent the order? The latter is correct, but visually confusing... we got accustomed that height means pitch. Can those laned somehow reorder automatically? :) Kidding.

Post

dmitriyK wrote:This raised some kind of conceptual question: do the lanes of a phrases correspond to pitch in any way or just represent the order? The latter is correct, but visually confusing... we got accustomed that height means pitch. Can those laned somehow reorder automatically? :) Kidding.

That's the key to understand this. Yes, lane 1 will always be the lowest sounding note NOW, lane 2 the second lowest sounding note NOW... etc. So if you first play the note that should be in the second lane (because soon, you will play another lower than it), Nora will think that note is the lowest, since it's the only sounding now, then the clock will start. Late when the true lowest note come in, Nora must reassign the notes to the rows, from lowest to highest, the moment Nora does it depends of the mode STATIC/FREE.

So, if I stop the time, and I order Nora it doesn't reorder the rows until the first 20 ms, then I will have a clear idea about the chord you played with your hands, and I would be able to reorder them. But as I told you, this behavior have secondary effects :/ I'm looking for a good solution since Nora 1, but I didn't find it yet. Static mode was a byproduct to help here. Originally only Free mode was avaliable.

Post

Btw, since I'm not good with the keyboard... could you record yourself in MIDI playing few chords?. Moreover, let me know the original bpm and ppq.

Post

OK.

I've been thinking about Nora's conception and read Nora's manual. The STATIC mode doesnt seem well explained to me, but anyway... Two modes seem intuitive to me:
- SORTED mode, where the phrase is recalculated when new keys are pressed, and the keys are re-sorted from low to high;
- AS_PLAYED mode, where rows represent order of the pressed keys. I would imagine some fance on-the-fly rearranging of the phrase, so it would show how really the phrase looks like with this order of the pressed keys...

Post Reply

Return to “Squaredheads”