Forum rss-feed

Forum

Developers: Prototype open-source OSC EigenD agent available

STICKY

written by: geert

Hi everyone,

Given the current developer interest and barnone's motivation to dig into the code, Jim has spent some time creating a prototype EigenD agent that is able to output EigenD data streams directly through OSC.

This implementation is just a start and was quickly written in two days to bootstrap the learning process of users that wish to participate in the development. Its serves both as a documented example for creating agents as well as an initial step towards the OSC plans that we've been making. As time progresses, our OSC support will mature and the EigenD OSC protocol will be formalized in more detail, but this should give you an idea of the direction we're heading into. We've discussed various approaches towards how to handle the OSC representation over the network and have hit limitations of the network stack in the past due to the massive amount of performance data that the Eigenharp generates. This performance data is essential to the expressiveness of the Eigenharp and we obviously want to allow it to be exposed in as much detail as possible. The document named "OSC" that comes with this example agent briefly explains what we consider the best approach, it will mature as we further work on the OSC support.

The document named 'Roadmap' explains how to use this OSC agent and gives a high-level developer-centric explanation of EigenD's internal architecture. The source code is heavily documented and should make it easy to adapt towards any other functionalities that you might want to implement with an agent.

The source code can be found on GitHub in the 1.4 branch of EigenD. Here is a direct link towards the source of just the plg_osc agent:
https://github.com/Eigenlabs/EigenD/tree/1.4/plg_osc

More information about getting involved in EigenD development can be found on this wiki page:
http://www.eigenlabs.com/wiki/Developers/

Please realize that we have very limited resources to provide direct support to external developers as we're hard at work wrapping up the initial release of EigenD 2.0 and Workbench. We hope that this example will give you enough information to make EigenD development more accessible.

Take care,

Geert

written by: geert

Fri, 25 Nov 2011 15:10:45 +0000 GMT

@dhjdhj you might want to try starting with a really blank slate when loading the blank setup instead of loading your Guitar OSC setup beforehand. It could be that not all ports are released when you load the blank setup and create the OSC agent again there.


written by: dhjdhj

Fri, 25 Nov 2011 15:12:06 +0000 GMT

Not a problem for me...I have everything working very well just using my original setup. However, it wasn't clear to me that the problem getting a blank setup to work was related to the OSC or to a more fundamental issue where some other underlying stuff wasn't getting initialized. I figured that might be of interest to someone else.

In the mean time, I already have simple (from a usability perspective) max objects implemented that let me do splits, layering, multitimbral control, with different scales.....really enjoying being up and running again.

I just bought a second base station and I'll probably get a pico soon as well....I'm a happy camper now -:)


written by: dhjdhj

Fri, 25 Nov 2011 21:01:33 +0000 GMT

Wow --- just got home from thanksgiving trip and new basestation was at the door --- the mail from England seems to get here faster than the mail from the next state.

Geert, when I've recovered from turkey exhaustion, I'll try making the blank setup be the default and then restarting the EigenD from there and see what happens.

Thanks,
David


written by: barnone

Sat, 26 Nov 2011 02:04:14 +0000 GMT

"@dhjdhj you might want to try starting with a really blank slate when loading the blank setup instead of loading your Guitar OSC setup beforehand. "

Yes, this is why I'm starting EigenD using --noauto switch. But if I start with release version, I make sure I load the "Factory - Blank" setup on launch.

@dhjdhj You should try doing this to resolve your issue.


written by: dhjdhj

Sat, 26 Nov 2011 03:35:56 +0000 GMT

Ok, I have this working perfectly now with a blank slate. However, I had a lot of trouble getting to a blank slate and it was related to the "Load Default" being set. When I tried to uncheck that checkbox I kept causing EigenD to hang. Eventually, I unchecked that box and then quit. When I restarted, nothing was loaded, and I was able to get things going. I now have a new "blank with OSC" profile which loads instantly.

Thanks for all the suggestions and help, which is really appreciated.


written by: dhjdhj

Sat, 26 Nov 2011 16:03:06 +0000 GMT

I was under the impression that if I hold two (say) keys down, and then apply vibrato to both of them, the Eigenharp will send continuous events reflecting this.

I noted that when I did this, events would be sent for the second note pressed, but no longer for the first. I assumed this was a bug in my Max code but tracing backwards and printing the raw data coming in via udp packets, it would appear that indeed only events for the most recent key held down are being sent.

I'm wondering if this is a bug in OSC, an underlying behavior of the Eigenharp (which would surprise me), or whether in fact it really is something bizarrely wrong with my own code that I can't yet see.


written by: barnone

Sat, 26 Nov 2011 17:41:03 +0000 GMT

I don't see this. Specifically, the max patch I am using shows the individual streams clearly as the event channel values are displayed when holding down the keys.

If you are tracing backwards, use the raw output from oscdump rather than stuff coming in from MAX.


written by: dhjdhj

Sat, 26 Nov 2011 18:12:09 +0000 GMT

Thanks.....I'll try testing with your example patch as well.


written by: dhjdhj

Sat, 26 Nov 2011 18:59:31 +0000 GMT

Yep --- seems to work fine with your CVPatch ---- has to be my bug --- thanks for helping eliminate external factors.


written by: dhjdhj

Sun, 27 Nov 2011 19:22:22 +0000 GMT

I would like to thank Chris, Geert and Ferdinand (no particular order!) for their help and patience and responding to my questions while I tried to get Max/EigenD integration working properly. I did also figure out and solve the problem I was having with continuous events.

As of now, I have a basic (but elegant by my own definition!) model running that integrates cleanly to the rest of my environment.


The goal is that a workable patcher can be created very quickly using a few abstractions.

For anyone interested, take a look at this picture
http://i.imgur.com/bUnOw.jpg


There are two "keygroups" (I'll probably change the name to "split" soon) defined, one for row 1 to 8 and another for row 10 to 20. The output from keygroups consist of the Row/Col of the key pressed (always normalized to zero by the way) along with note on/off and X, Y, Z parameters)

Each keygroup feeds into an [Eigen.Scale.Guitar] object which imposes guitar-string tuning (top 5 strings). The arguments are the starting note number and the MIDI channel to be used. If you wanted each key to generate two notes a fifth apart (say) you could just use two [Eigen.Scale.Guitar] objects with different starting note numbers. Clearly, creating other scales can be done by replacing [Eigen.Scale.Guitar] with something else. An obvious enhancment would be to allow just the "highest" note in each column to play, thereby supporting bar chords.

These then can feed into an external MIDI instrument or into a VST using my [GenericVST] object which is a useful helper object to hide some of the more bizarre control requirements.

Essentially, once the Max backend stuff is running, one can create really simple patchers to get useful results very quickly.

Using this technique, I have already been able to duplicate my "Lament" performance which uses a few keys in one group to trigger chords in a sequence and then another group to play the melody.
http://i.imgur.com/Riifx.jpg

I haven't had much time (probably two full days worth spread over two weeks) but I'm very encouraged. I still haven't figured out how best to detect initial velocity and those experiments will start as soon as I have more time, but to paraphrase the possibly apocryphal comment by Galileo at his trial... "damn it, it works"

Thanks, again.
David


written by: barnone

Sun, 27 Nov 2011 21:55:43 +0000 GMT

Nice work David. It's looking good.


written by: dhjdhj

Thu, 1 Dec 2011 14:11:24 +0000 GMT

Thanks --- I continue to improve it a little as I have time --- now able to easily select just small areas of the keyboard (e.g, rows 1 through 3 but only column 4 and 5) and pass that into a VST or trigger, etc.
One of my partners who has a Pico is getting interested to see how this stuff could be easily integrated into M4L as it seems this would become a trivial way to use a pico to trigger clips and then play solos.

I'm wondering whether it will be possible to detect strips at some point?


written by: dhjdhj

Fri, 2 Mar 2012 15:42:52 +0000 GMT

Hey everyone, I haven't been following the forums recently (yeah, I know...sigh of relief from some!).

I was just wondering if there has been a new build of the raw OSC only stuff that includes the ribbons.


written by: NothanUmber

Fri, 2 Mar 2012 21:37:29 +0000 GMT

Geert heard you, since three hours ago the answer seems to be: yes :)
https://github.com/Eigenlabs/EigenD/commit/47a1ff7a9aee4a4f4da3f980195d3d6bfd7ab5ca (this is in the EigenD 2 branch)


written by: dhjdhj

Sat, 3 Mar 2012 02:08:19 +0000 GMT

OK --- so this isn't in the 1.4 branch, which is what I've been using.

Sounds like I will have to start all over again to build a 2.x version and then get just enough functionality to have OSC.


written by: john

Sat, 3 Mar 2012 09:05:13 +0000 GMT

Hi David

If you wait 'till next week, it'll be in the new 2.0 release due out then.

John


written by: dhjdhj

Sat, 3 Mar 2012 14:53:42 +0000 GMT

Terrific --- thanks for letting me know.


written by: steveelbows

Mon, 12 Mar 2012 15:21:42 +0000 GMT

Hello, Im back with my Eigenharp Pico after a lengthy absence. Very pleased to see that most of the things I complained about in the early days have been sorted.

Anyway I purchased a 6-month Pro package yesterday, can you tell me whether the OSC stuff made it into workbench yet, as thats my main reason for trying 2.0. I am just starting to learn workbench now, and I see an OSC agent listed, but Im not sure if its supposed to work since you mention a newer software release that I don't think has happened yet?


written by: steveelbows

Mon, 12 Mar 2012 17:00:20 +0000 GMT

OK I'm more clued up now, have OSC working with a workbench setup, and realise that your above comment about new version is related to an OSC agent that supports the ribbons.


written by: geert

Thu, 22 Mar 2012 17:18:46 +0000 GMT

No, it changed, based on the new keystream data that we're fine-tuning. Note that the OSC Output agent and EigenD 2 are still experimental, we could still be making backwards incompatible changes. Things will only freeze as we enter testing phase.

Take care,

Geert



Please log in to join the discussions