Octatrack MKII midi notes sticking in OP-1 and Organelle

Fanboy or not, what’s the difference?
If you have gear that doesn’t work with Note on Vel 0 that’s not OT’s problem. End of the story.

NOTE-OFF MIDI provides two roughly equivalent means of turning off a note (voice). A note may be turned off either by sending a Note-Off message for the same note number and channel, or by sending a Note-On message for that note and channel with a velocity value of zero. The advantage to using “Note-On at zero velocity” is that it can avoid sending additional status bytes when Running Status is employed. Due to this efficiency, sending Note-On messages with velocity values of zero is the most commonly used method. However, some keyboard instruments implement release velocity where a Note-Off code (8nH) accompanied by a “velocity off” byte is used. A receiver must be capable of recognizing either method of turning off a note, and should treat them identically.

https://www.midi.org/specifications-old/item/the-midi-1-0-specification

2 Likes

This is ridiculous.

You think it’s not a problem with Octatrack.
I say: yes it is.

End of the story, okay?

Prove it then.
Use another sequencer using Note On Vel 0 for example.

That’s personal and doesn’t concern Octatrack. :smile:

Sending Notes Off or Notes On Vel 0?

1 Like

Honestly I don’t care.
It does not work. I’m a videocutter and music is my hobby.

I think I’ll live with the situation and rearrange my setup now.
I really don’t need to fight for a grey box. Or program a cable. Programming is not my hobby, so I guess I will move on.

Don’t feel offended if I don’t want to waste my time :wink:

I don’t care. This was offensive :

Sorry for that.

Except for “if everyone is driving in the wrong direction it has to be you”. I don’t see why this is offensive. I meant the Octatrack and not you. Are you an Octatrack? :wink:

@sezare56 is right, even though it does not work with your particular setup the OT is not strictly at fault, it is actually down to synth manufacturers not ensuring their midi code supports note velocity 0 as a note off.

Personally I am not a fan of having 2 distinct ways of handling note off, but it is part of the midi spec so if a synth has midi in, it should support it, or it isn’t fully midi compliant, I’d contact the manufacturer.

4 Likes

Not seen this thread before, and it’s a bit long now.

Is this still a problem for you between octatrack and organelle?
if you have an organelle-m have you upgraded to latest OS (4.0) , which contains related fixes.

Note-off and note-on/vel 0 should be handled the same by organelle. Without any ‘extras’ required :wink:

( as @darenager says it’s part of the midi spec that everyone is very aware of - no excuses ;))

also is it all patches?
can you detail a factory patch that misbehaves, so we can rule out a ‘patch error’.

2 Likes

I’m writing right now an email to Dübreq. I don’t know if they could fix it with a firmware update. Perhaps. Perhaps not. The Gen-r8 does not have patches.
If not and I cant get the cable working in a way that it fixes it I don’t use OT to sequence it, done.

Anyway, the posted code above isn’t correct as it seems.
I’m in contact with Gerrit from Retrokits. He is a very very kind person and tries really hard to help here. I promise to post again if I have success in any way.

@darenager @thetechnobear @sezare56
You all are right, but I can’t live with such things.

These things are infuriating for sure, for one because they take time to diagnose exactly what the cause is, but also because the time when you want to be creating you are having these WTF moments which are a total buzz kill.

You mention you also have a Pyramid - why not try connecting OT midi out to Pyramid midi in, and record the OT sequences into Pyramid, this way you can capture the things you like about OT sequencing (presumably the arp?) into Pyramid and have the best of both worlds? The Pyramid should convert the note offs that your other synths will work with, so in that sense you can have your cake and eat it :wink:

Actually I want to use the OT. It‘s my most loved one. Yes, it makes me restless. I don‘t connect that much with the other boxes.

I‘m sorry for the bad vibes. I‘m fighting too long with technical things. Perhaps it‘s not good for me.

Yeah I get you, I’m not to into connecting sequencers into sequencers to do workarounds either, but sometimes it can be a great source of new ideas, especially since the Pyramid has some great midi mangling via the fx you can add to the OTs sequence, might be worth a try?

I love the Pyramid for midi, OT for audio, I rarely use the OT for sequencing midi but the arp is something I should utilise more.

Actually I recorded Octatrack midi arps into the 707, for a 707 only track. It works good.
But I would prefer zu just use the OT as sequencer for all, dial in then sounds on the 707 and twist some knobs on the gen-r8 :wink:
I don’t have much place on my synth table, another box is too much.

1 Like

After a short dive into how the RK002 works, I guess I’ve fixed your problem (not tested, just an on-paper fix).

I think the problem in your code above is that you always use return true, which hints the surrounding system to forward the incoming message.

#include <RK002.h>

RK002_DECLARE_INFO("SAMPLE CODE","duy@retrokits.com","1.0","7b47d3dd-991a-4197-ac02-d340cdabfb59")

boolean RK002_onNoteOn(byte channel, byte key, byte velocity)
{
  boolean sendthru = true;
  
  if (velocity == 0) {
    RK002_sendNoteOff(channel, key, velocity);
    sendthru = false; /* don't pass on incoming event */
  }
  
  return sendthru;
}

boolean RK002_onNoteOff(byte channel, byte key, byte velocity)
{
  return true; /* always pass on incoming event */
}

void setup()
{
}

void loop()
{
}
1 Like

Hi @tnussb thank you for pointing me to it.

I’m in contact with Retrokit - the new point from you for me is now that I should pass on the onNoteOff. I thought that’s not needed because it’s default. I’m trying this now too.

He also told me about the return value of the handlers.
As soon as I have a working version I will share!

I’ve just left that in, because I haven’t verified the default implementation and I wanted to demonstrate the point of the passing on / not passing on of events.

(I already thought it probably isn’t necessary)

I now tried it with a declared onNoteOff handler.
on the right side is the log.

“After uploaddone: OK” I put the cable from ot out (dark side) into midi interface (orange side), and sent from octatrack a c3 on channel 8, velocity 100.

I guess somethings wrong, because I can see a noteOn Vel 0 - that should not be there.

Then I modified the noteOn handler just for fun and put a noteOff into it, just to see if anything happens:

There you can see: yes, noteOff does work. But there is a noteOn vel0 event too that should not be there, like before. I did this stupid second test just to prove that upload into cable works well.

I installed a linux on a very, very, very old macbook, just to be able to program the cable, because it does not work on windows. On linux I can program it, there it works.

Maybe it’s not meant to be.
Dunno.

I wrote an email to dübreq with this problem. They might be able to provide me an updated firmware. If this turns out well I could use it like I want. If not I hope to get this cable fixed. I would really love to to have a cable that fixes this, if I encounter another synth that starts droneing (my sledge I don’t own anymore did this…).

Also my first verision here in this post does not work if i test it from octatrack directly into gen-r8.

And if nothing works I will fix it till the end of the days.

Thank you for reading.

I guess I found a bug, I’m not sure:

this:

#include <RK002.h>
 
RK002_DECLARE_INFO("SAMPLE CODE","duy@retrokits.com","1.0","7b47d3dd-991a-4197-ac02-d340cdabfb59")
 
boolean RK002_onNoteOn(byte channel, byte key, byte velocity)
{
  RK002_printf("onNoteOn_channel:_<%d>_key:_<%d>_velocity:_<%d>", channel, key, velocity);
  boolean retval = true;
  if (velocity == 0)
  {
    RK002_sendNoteOff(channel, key, velocity);
    retval = false;
  }

  return retval;
}

boolean RK002_onNoteOff(byte channel, byte key, byte velocity)
{
  RK002_printf("onNoteOff_channel:_<%d>_key:_<%d>_velocity:_<%d>", channel, key, velocity);
  return true;
}
 
void setup()
{
}
 
void loop()
{
}

Results in:

As you can see the retrokit cable thinks like the octatrack it would be great to send velocity 0 instead of note off. This renders the cable useless for this task. But I will keep it. Its programmable and if you know the pits you can avoid them.

Dübreq is on programming and will contact me later. Perhaps this particular synth will get a new firmware because I’m an annoying contemporary.

Thank you for laughing.

It’s a rollercoaster of emotions.
The tension is killing me.
But now, it is actuall done.
It now works.

If you need to sequence something with Octatrack, but it starts droneing because the receiving synth does not understand that Midi Note On with Velo 0 means Note Off, you can buy a RK002 from Retrokits, and program it with this sketch:

#include <RK002.h>
 
RK002_DECLARE_INFO("SAMPLE CODE","duy@retrokits.com","1.0","7b47d3dd-991a-4197-ac02-d340cdabfb59")

boolean RK002_onNoteOff(byte chn, byte key, byte vel)
{
  RK002_sendNoteOff(chn, key, vel);
  return false;
}

void setup()
{
}
 
void loop()
{
}

Albert and Gerrit from Retrokits are awesome. They didn’t give up.
They are stronger than me.

Explanation:

*) RK002_onNoteOff() is correctly being called by the internal parser upon reception of noteOn/vel0 (because the MIDI standard dictates: noteOn/0 should be handled exactly the same as NoteOff (!))

*) normally the RK002 would literally pass-through the received bytes (so: noteOn/vel0 ----> {no handler} --> passed as NoteOn/vel0)

*) but because now the handler explicitly transforms it into a NoteOff message, the path will be: noteOn/vel0 —> {noteOff handler called} --> explicit NoteOff message sent

I guess you can’t imagine how happy an old man can be.
I can sequence now my loved Gen-R8 with the Octatrack.

I was on the way to throw the grey monster out of the window and call it done.

2 Likes