Forum rss-feed


Developers: Extraneous note releases

Most Recent

written by: dhjdhj

I've thought about several approaches, I'm not sure how sophisticated one needs to get.
1) Collect the values for some short amount of time T. Use the maximum value

2) Measure rate of change of the first few (how many?) values to determine what the maximum value will be. Presumably that allows T to be smaller so less latency

3) Use some kind of exponential curve to estimate the value

I don't know whether the OSC data is available/processable fast enough compared to looking at raw USB data.

Would the EigenD developers care to share their approach?

written by: dhjdhj

Fri, 9 Mar 2012 21:55:48 +0000 GMT

I've been working on some performance material using the OSC support to give me raw data which I then process in Max.
I had noticed from time to time that a note would be suddenly cut off and figured that was my rusty playing style (grin) or something funky with a particular VST. It was completely random.
Today however I decided to track it down because I thought it might have been my Max translation code. However, by displaying the raw received OSC data, I have discovered that occasionally, seemingly at random, I am in fact receiving a keyoff message instantly after a keyon message. After trying this a number of times I discovered a pattern.

Take a look at the last few items from a trace below (from the Max debug window), in particular, the events associated with /key/6

I've noticed that anytime I get the cutoff, I always receive exactly TWO events that contain the note information followed by 0. 0. 0. 0. (i.e, the last four values) and then ONE event with all 0 values after the event number.

This exact pattern is seen every time I get the note cutoff immediately after touching a key.

I have no idea whether this is an Alpha problem, an OSC problem, or something else I haven't thought off.

Would appreciate some insights into what might be happening here.


print: /keyboard_1/key/0 42 41 2. 0.047119 0.023438 0.135742
print: /keyboard_1/key/0 42 41 2. 0.045654 0.025391 0.134766
print: /keyboard_1/key/0 42 41 2. 0.044678 0.027344 0.133789
print: /keyboard_1/key/0 42 41 2. 0.042725 0.026367 0.125977
print: /keyboard_1/key/0 0 0. 0. 0. 0.
print: /keyboard_1/key/6 93 92 0. 0. 0. 0.
print: /keyboard_1/key/6 93 92 0. 0. 0. 0.
print: /keyboard_1/key/6 0 0. 0. 0. 0.

written by: dhjdhj

Fri, 9 Mar 2012 22:27:50 +0000 GMT

Forgot to add, that when this happens, no OSC data at all is received again from that key until it is released and touched again. Other keys continue to send OSC data during that time.

written by: dhjdhj

Tue, 13 Mar 2012 17:03:03 +0000 GMT

Anyone have info on this issue? Is it fixed in the 2.0 version?

written by: john

Thu, 15 Mar 2012 12:54:44 +0000 GMT

Hi David

We think this issue is probably related to the issue that Stefan experienced (you can read about that here) that we worked on last week. In normal playing this is generally completely unnoticeable (Wayne, Jim and I had to work really hard to get it to happen when we were figuring the problem out) but it's more reproducible on Alpha's with maple keys than plastic or ebony. One has to play with a very light touch indeed to get it to occur, and we found that we had to slightly stroke the keys as we touched them to get it to happen. We suspect that the reason that no-one has ever noticed it before is due to the very small number of maple keyed instruments out there coupled with the fact that only now are people really getting to grips with how sensitive the keys actually are. The fact that you're experiencing it after a break in playing tends to support that thesis.

We found that by adjusting the key debounce window a little we could get to the point where we couldn't reproduce it at all. This isn't to say that it's definitely gone (we haven't heard back from Stefan yet, and he seems to be able to get it to happen fairly easily, he must have a very light touch) but it certainly seemed to make it go away for us. The debounce value is used in the instrument firmware and was not a user settable parameter until now. The 1.4 series does not support setting this, but we've introduced a parameter in the Alpha Agent for 2.0.36 onwards. It's in the open source distribution as well as the commercial release, so you can build your own version to give it a go if you don't want to subscribe to EigenD.

Please let us know how you get on...


written by: dhjdhj

Thu, 15 Mar 2012 13:54:53 +0000 GMT

Duh --- that never even occurred to me but it makes perfect sense. To perhaps corroborate the feedback from Stefan, I am using an extremely light touch and indeed the ability to barely touch the keys is a WONDERFUL property of the Alpha.

I'm not much of a hardware person but I'd love to know how you were able to make those keys so sensitive. Is it a similar technology to what was used in the old IBM Trackpoint that showed up on all the Thinkpads?

I will order a subscription today ---- absolutely worth it to get that fix!

written by: GoneCaving

Thu, 15 Mar 2012 15:01:49 +0000 GMT

David, you should take a look at the talk John gave at the Developer Conference where he explained how the keys work:

written by: dhjdhj

Thu, 15 Mar 2012 17:41:32 +0000 GMT

So that's what John looks like!!!!

written by: dhjdhj

Fri, 16 Mar 2012 12:13:21 +0000 GMT

I have bought an EigenD Pro subscription to get access to 2.0.

A couple of questions before I download and try the new version:

Somebody very kindly helped me create a very simple EigenD setup that contains only the OSC and LED control stuff so that I could have a very lightweight EigenD app running in the background. This is for 1.4

1) Can I run the regular EigenD 2.0 to change the debounce value and then go back to using my 1.4 code with the lightweight setup or
2) Alternatively, will the EigenD 2.0 version import that 1.4 setup? or
3) Can I get an EigenD 2.0 setup that just contains the OSC and LED stuff in it

Would appreciate guidance for how to proceed.

Thank you,

written by: mikemilton

Fri, 16 Mar 2012 12:14:42 +0000 GMT

FWIW, I actually can reproduce this and it explains something I'd attributed to a plugin (specifically PianoTeq.

PianoTeq has a very delicate sound at ppp and a couple of my favourite pieces benefit from that. Of course, this also promotes a very light touch. This (rarely) resulted in a 'sttuter' that I had attributed to either my accidentally hitting the same note in different courses (which confounds some AU's) or to the plugin itself.

Let me be clear that this was just me drifting off into a bit of a haze of delicacy (shortly I'd have started chanting 'ohmmm' or some such thing)

It is nice to know the cause and fix. It is also astounding to, once again, be reminded of the incredible sensitivity of these keys.

written by: dhjdhj

Fri, 16 Mar 2012 14:09:00 +0000 GMT

I actually ran into this issue when I first started using the alpha before I started working with Max and because it was happening with all my plugins, I just assumed it was due to my "beginner" status and figured I just needed to learn to play better.

It was only after I recently started working more seriously on some songs and had this happen a number of times on a single song that I decided to investigate and started looking at the raw OSC data that I was receiving and realized that there was something else going on.

I'm excited to get this issue resolved with the new code but would like to get answers to the questions I posed before I do anything as I still just want to use the OSC environment.

written by: john

Fri, 16 Mar 2012 14:43:33 +0000 GMT

Hi David (and Mike)

If you're experiencing re-triggering of notes, this is not the issue that I was referring to (which is where a key can become momentarily unresponsive if triggered for a very short period of time then let go), it will be your playing style - if you are playing very lightly it does take some learning to prevent multiple initial triggers, this is just a consequence of the key sensitivity. You could turn the key sensitivity down to alleviate this, or widen the debounce interval still further (though I think it has a hardware limitation of 50mS), but that does seem a bit pointless as its also easily avoided by playing a little more firmly. There are limits to how clever we can be in software to make playing more comfortable.

David, setups built in 1.X series software are not compatible with 2.X, so you'll need to rebuild that setup you're using. That's pretty easy using Workbench and shouldn't take you more than a few minutes. There's reasonably complete documentation for Workbench here, including a growing series of tutorials on building setups from scratch. Between that and the EigenD reference you should be in good shape. Remember to keep an eye on the version number that you're looking at - this defaults to the latest stable, which is 1.4 at the moment, and quite a bit of the documentation has been updated, improved and expanded in 2.0. I've been caught out a couple of times, staring at 1.4 docs and wondering why something isn't working like that.

The debounce parameter is voltile and is not saved in the instrument. It is saved in the setup though (provided you save that) so when you run EigenD again it will automatically get set. Not in 1.4 though.

BTW, please bear in mind that the OSC Agent is not a supported Agent - we haven't formally tested it in 2.0 and I have no idea if it works well or not. I think some people have had a go with it and it seems to work fine though, so you may well be ok. It would be nice to know how you get on - I suspect that you're the main person using this out there. LIghts and the way they behave have had a lot of changes in 2.0 (good changes, that stuff has got a lot more flexible) but I don't know how you were lighting lights before, you might need to experiment some.


written by: dhjdhj

Fri, 16 Mar 2012 16:08:21 +0000 GMT

No, I am not experiencing re-triggering....I am experiencing MUTING....i.e, occasionally (but more than once in a song) I will touch a key gently to play a note but that note will just play for an instant and then stop. I have never been able to reproduce on demand, but it just "happens".

While I originally thought it was just me (which is why I had never mentioned this issue until now), these days I'm playing sufficiently with the Alpha responding perfectly fine that it became clear that the glitches were not due to my playing style. That's when I started looking at the OSC data and realized there was a problem somewhere.

I will take another look at the docs and see if the process has gotten easier --- the difficulty in understand how things were supposed to work was my greatest frustration with the software.

Other than this glitch, the Max stuff works absolutely beautifully with the Alpha. I created a few high-level objects to let me define groups and then impose guitar-style fingering for each group and it works great. A couple of other objects let me turn on individual LEDs or entire rows at a time.

Here's an example of my main environment in Max with the Eigenharp and a small novation keyboard as the controllers for a virtual environment in my office.

written by: stbohne

Fri, 16 Mar 2012 17:11:49 +0000 GMT

(double post)

written by: stbohne

Fri, 16 Mar 2012 17:11:21 +0000 GMT

@dhjdhj Muting describes pretty well what I experienced. The key just stops sending any data until you release it and press it again. And I also noticed sometimes, that the note is triggered for a fraction of second before the key becomes muted.

@john I haven't said anything so far, because I couldn't verify your fix yet. The current git version doesn't work for me. For some reason it does not load the audio agent. So no sound is produced. I made a bug report (maybe it's fixed already). And because I heard someone say that a 2.0 release is around the corner, I didn't spend any more time on this. Once I have a working EigenD with the fix, I'll be sure to let you know.

written by: dhjdhj

Fri, 16 Mar 2012 17:14:26 +0000 GMT

Yes, the note IS triggered but a 'release' is triggered immediately after but of course what you hear will depend on the VST that is being used.
And yes, when this happens, the key no longer sends any data out until you let go. So we are definitely seeing the same thing.

written by: dhjdhj

Fri, 30 Mar 2012 02:52:56 +0100 BST

Hey everyone --- I have EigenD version 2.x working with my Max environment and after changing the debounce value from 20000 to 31500 (the max), the problem I was having went away completely.

So I have finally managed to play a song from beginning to end with ZERO glitches.


Thanks everyone for the help in getting this fixed.

written by: geert

Fri, 30 Mar 2012 08:52:53 +0100 BST

That's great to hear, glad you got your whole environment working exactly how you want now!

written by: dhjdhj

Fri, 30 Mar 2012 11:31:36 +0100 BST

Oh, still lots to do ---- I still need the belcanto commands to configure control of the LEDs from incoming OSC messages.

Also need to add support for those strips now that they also produce OSC

I also haven't decided on the best way to detect initial velocity without introducing too much latency.

(But it's more fun now :-)

written by: steveelbows

Fri, 30 Mar 2012 15:31:29 +0100 BST

Yes the question of initial velocity is one that I have run into when programming a strange chord strumming setup using OSC. How many OSC key messages should I ignore before using one to set the MIDI note velocity, thats the question. Or do I try to do something more sophisticated such as looking at the difference in pressure between the initial messages, and using one to trigger MIDI only once the difference in pressure between messages settles down below a certain threshold. How do relevant EigenD agents handle this I wonder.

written by: dhjdhj

Fri, 30 Mar 2012 17:11:05 +0100 BST

I've thought about several approaches, I'm not sure how sophisticated one needs to get.
1) Collect the values for some short amount of time T. Use the maximum value

2) Measure rate of change of the first few (how many?) values to determine what the maximum value will be. Presumably that allows T to be smaller so less latency

3) Use some kind of exponential curve to estimate the value

I don't know whether the OSC data is available/processable fast enough compared to looking at raw USB data.

Would the EigenD developers care to share their approach?

Please log in to join the discussions