Forum rss-feed


Developers: Scheduler extensions

Most Recent

written by: 0beron

Hmm, latest bit of detective work on the Looper front was to compile a copy of eigenD 1.4.12 and stuff some printing into the existing recorder agent. The wire_create routine I'd been looking at before also doesn't seem to get called at all, so maybe this is a red herring.

I must have got something right, since if I plug together a setup with a chain of agents as follows:

pico/alpha keyboard -> keygroup -> Looper -> synth rig -> console mixer-> audio

then I can still play notes and hear them in real time, so the plumbing for passing events through must be in place. I just haven't yet figured out the machinery to capture and store the events as they go past.

Jim has started on an in depth developer guide on the wiki I see, and in its current form it touches on bundles and wires. I hope to see this guide filled out :)

written by: 0beron

Mon, 30 Jan 2012 13:01:35 +0000 GMT

The area I'd most like to get going on in eigenD development is the loop scheduler. I've a few questions though - the most important of which is whether eigenlabs themselves are soon to start working in this area (as has been suggested a few times), and if anything I do will end up being a duplication.

What I'd like to start with perhaps is the ability to control the synchronisation of parts once they have been recorded. I was thinking this could take the form of a new set of lights in the existing scheduler keygroup, or alternatively a second keygroup containing only these new controls. These would contain a button for each recorded take, similar to the current scheduler, but pressing them would cause that take to be queued up for playback after a certain number of (rounded) bars. ie if you set the offset to 1 bar, then selecting a take any time during a bar will cause it to start playback at the start of the next bar. You can control the offset to give yourself more time.

Another scheduling trick that would be useful is to somehow offset the drummer playback, ie press a key, and then the drummer will start from bar 1 of all its loops at the start of the next bar. Useful if you play a section of an odd number of bars, and then want a 4 bar loop to resynchronise with you instead of going out of phase.

I'll add this to the wiki perhaps to make a more detailed spec. Anyone else with scheduler ideas can add them to the list.

written by: mikemilton

Mon, 30 Jan 2012 13:23:04 +0000 GMT

Well, I'd like to be able to use it as a simple looper (ie: not tied to beats and bars but working like the typical looper you see in pedal boards like this one Boss Loop Station)

Most likely one would want to run this in a keygroup (as is sometimes done with drum loops or scales) but it would be nice to use the basestation switches).

The end result is the above in a small keygroup that lets you pick which (other) keygroup to record, overdub, play, etc and either keys and or footswitches to start/stop, etc)

Oh, and while making outrageous requests, could it also record audio and/or data (specifically including the mic, but possibly other audio from the host.

The application would allow something like this: K T Tunstall except replace the guitar with an Alpha and the pedalboard with the looper underdiscussion.

Can you provide singing lessons as well ;-)

written by: carvingCode

Mon, 30 Jan 2012 17:30:25 +0000 GMT

I'm wondering if, without a way to label loops, is looping on Eigenharp actually practical in a live environment? Will one be able to remember what loops are stored where in 3 or 4 sets of tunes? Seems to me this is one place the 'no computer' moral falls down. It would be useful to be able to name loops and change their order in a drag/drop fashion.

written by: 0beron

Mon, 30 Jan 2012 17:43:26 +0000 GMT

I was thinking you would refer to loops in the same way the current scheduler does - effectively chronological in the order they were played. When looping you would have to remember which loops (by their position in the list) made up your verse section and which made up your chorus.

Really we need to work out what things are useful when live looping, and how to achieve it on the harp itself. Drag n drop would probably possible on the Alpha and Tau keyboards - you draw each loop as a run of lights, and if you press the starting key and slide your finger over the keyboard, it follows you until you release. Some threshold for timing would mean that the gaps between the keys could be accommodated. Then it's a question of how you want this drag and drop interface to behave. It's more similar to the arranger at this point.

written by: 0beron

Mon, 30 Jan 2012 17:44:50 +0000 GMT

I've added a wiki page for these ideas.

written by: mikemilton

Mon, 30 Jan 2012 17:48:17 +0000 GMT

hmmmm, there seem to be a fair number of loopers (people who loop) out there who do just fine with no labels. Here is a great resource: Loopers Delight

Also, do watch the (live) video above and anything by Zöe Keating.

The point it that they do not store loops for sets of tunes.

So, yes it is quite useful in these contexts

written by: mikemilton

Mon, 30 Jan 2012 17:58:54 +0000 GMT

Not being a wiki-competent, let me just say that i is likely not a good idea use the metronome toggle for the kind of looping mentioned above if only because:
- one might reasonably want to use drum loops (or arrangers) as well and not have them start / stop
- one might reasonably want multiple loops (of different length, potentially) that are independently operated.

Have a look at Escape Artist as an example of deep, multi-layered looping.

I would envisage assembling a keygroup with a row of controls (some duplicated with pedals) and keys to select individual loops (using lights for status). perhaps with an additional key for each loop to provide controller input (volume, filter, whatever) for each loop). It would likely look a lot like the mixer controls

written by: mikemilton

Mon, 30 Jan 2012 18:29:12 +0000 GMT

SooperLooper is a popular live looper. Players often run multiple instances.

Looking through the features yields a good idea of a set of specs for this discussion

written by: carvingCode

Mon, 30 Jan 2012 20:45:09 +0000 GMT

When I mentioned naming loops, I was thinking about doing this in Stage.

written by: john

Mon, 30 Jan 2012 22:09:07 +0000 GMT

Hi Robin

The current recorders (which give you the looping behaviours) are due a major revisit in the near future. There are multiple reasons we plan to look to them afresh, the largest one being that they're not really compatible with the new Rig's. At present recorders are part of an instrument, there's one for each. In the old world where instruments are a permanent part of a setup this made sense. In the new world it really doesn't as the ability to record a Rig really ought to be outside of that Rig, especially once we get Rig's to be pluggable components so that they can be easily swapped out for a different sound. There are other reasons that we don't like the way recorders work at the moment, the main one being that it's hard to move takes between different instruments and even harder to have a general overview (arrange window style) of recorded takes.

Our current thinking on this is to change the way this all works by creating a new kind of recorder that can manage multiple 'channels'. Each channel corresponds to an input/output pair. Each input/ouput is connected to a 'tap agent' that sits in a signal flow and enables that signal flow to be both recorded, substituted and in the case of channelised signals to be played back in parallel. Rig gateways would support these 'tap' signals in an idiomatic way so that Rigs could be recorded.

In this way each recorder (and one could just have one in a setup) would also be able to support an overview of takes (perhaps via Stage as well as the keys on a harp) and manage where they were played back, giving access to the kinds of functionality that people are used to in DAW's.

This is quite a sweeping set of changes and I'm not sure that it really falls into the 'first EigenD project' kind of scope - it will probably have some implications in the broader system in the way that these kind of things tend to have. I think it'll be difficult and error prone even for someone very used to working inside EigenD.

I would probably suggest that if you're interested in looping behaviours specifically, create a new 'looper' agent and play with that. I think there's scope anyway for a nice, simpler 'looper pedal' type of agent, sometimes single purpose, specific programs can be much nice to use than 'do it all' things. And here are some great ideas in this thread already - I doubt that something like that would be superseded by improved recorders.

Adding audio to the current recorders wouldn't actually be that difficult btw. The problem is not adding it in, it's making it stream to disk. The reason they don't do it already is that we realised that as soon as we implemented it, people would use them to record long passages of sound, quite probably whole performances. The way the recorders work at the moment is that they store everything in memory, and this is only written or retrieved from disk when saving or loading the setup, so not only would audio recording use a lot of memory (which is a scarce resource) but it would also make loading setups potentially very slow. We could have put it in anyway, but our experience so far is that a feature that doesn't work as expected is worse than no feature at all in many ways, so we left it out and decided to wait until be could find the time to make recorders stream on and off of disk (as the samplers do) properly, which is a whole lot more difficult to get right, as we found out with the soundfont oscillators.

I think a pared down 'looper' agent would be a great thing, especially if it had some nice Belcanto support so that people could manipulate its playback intelligently with Talkers. Could even do audio, if you put a sensible (small) take time limit on it.


written by: john

Mon, 30 Jan 2012 22:28:57 +0000 GMT

Hi Randy

I think you can already name loops, you just need to use a valid Belcanto name of some sort. I know you'd like to be able to put text names on setups, loops and the rest but we really aren't ever going to do that. It would break the whole Belcanto system irretrievably, and it's just too useful to do that. After seeing John N's voice -> Belcanto demo yesterday I am even more convinced that it has an interesting future in live performance, and something that only occasionally works ok (as in 'oh dammit I called that setup 77GHJ~~ now how do I recall it?') is worse than useless in my opinion. Normally I'd be agreeing with you, I hate software that doesn't let me do things I want to do, but in this case there is a really good reason and it's one that isn't going away. And loops are an even stronger example of something that you want to be able to use from Belcanto than setups, I can imagine a lot of scenarios where one would like to define Talkers to manipulate them, for example, never mind using Belcanto directly.


written by: 0beron

Tue, 31 Jan 2012 11:47:08 +0000 GMT

Sounds like a separate punch in/ punch out looper agent is a good one to start with. The other ideas in this thread and on the wiki are a bit of a brain dump on my part, worth noting them down in case there's something useful.

For a looper agent that doesn't use the recorders, I suppose I can look at the existing recorder agent to see how it stores events in memory and borrow that mechanism?

written by: mikemilton

Tue, 31 Jan 2012 11:57:43 +0000 GMT

@John - That sounds perfect and much more flexible. Many audio loopers have quite short time limits and remain useful (the HD500 is something like 30sec, if I recall and only one loop, the boss is a bit longer but more loops).

Being able to put text (free form) on a stage layout is an idea mentioned earlier and it would let one make tabs with big names beside big buttons (that might be simply numbered). One can push the button or, when able, speak the (simple) belcanto.

The current (dense) tabs are great for setup and practice, but a few, sparse, performance tabs with guiding text would be easy for the player to set up. Boxes (or other graphical elements) might be useful in grouping by song / set and could be used directly or as a cheat sheet for using the existing keygroup or the future voice control. In fact, it might be nice to have tabs that are set up as song notes or lead sheets alone (or annotated PDF's?)

written by: mikemilton

Tue, 31 Jan 2012 12:20:01 +0000 GMT

@robin - yes, very useful and thanks for organizing them so well.

I wonder if there are two or possibly three separate things under discussion that have their own paths and need to be referred to more clearly. The drum loops, the recorders and a free-form looper overlap but are actually fairly separate constructs that:
- might be used in parallel
- probably use many of the same underlying bits.

Just calling them all loopers is a bit inconvenient.

written by: john

Tue, 31 Jan 2012 12:55:07 +0000 GMT

Hi Robin

The existing recorders would probably be a good place to start, if you're working in contrib you could just copy them, rename and start editing. If you can keep the inputs agnostic as to type (in fact is you make it do audio too that makes them properly agnostic), that would be cool. It might be a good idea to write down a stripped down, bare bones spec on the wiki as a starting point - I'd keep it as un-ambitious as possible to start with so that you can get a useful functioning agent out there as soon as possible. This could be a dead useful one too, even in bare-bones form.

I've added the word 'looper' (6 8 7) into the lexicon to give you a name for your agent. It'll be in the next release.

Happy hacking...


written by: 0beron

Tue, 31 Jan 2012 14:33:31 +0000 GMT

I think I'll start as john says with a really simple looper, mainly to stop my head exploding. I'll borrow from the recorders, but leave them otherwise alone since they are in for an eigenlabs overhaul.

If I can get to an agent that takes an input stream of _whatever_, plus two or three verbs that equate to the pedals on a loop box (ie start/stop overdub), then that'll be a good starting point to add more complicated stuff.

edit: forum squashed my angle brackets...

written by: mikemilton

Tue, 31 Jan 2012 14:34:29 +0000 GMT

@robin - actually, that would be extremely valuable even if it is a destination vs a start.

written by: carvingCode

Tue, 31 Jan 2012 23:39:59 +0000 GMT

@robin - Will be interested in seeing what you come up with.


written by: 0beron

Wed, 8 Feb 2012 11:58:13 +0000 GMT

I've gone through the recorder agent piece by piece picking out bits I think I might need. This way I'm beginning to understand how it fits together, and I'm steadily getting more fluent in the dialect of C++ and python (ie some of the API functions are getting more familiar).

The alternative was to try and clone the recorder, then turn it into a looper but I don't think I'd get my head round it in one chunk.

I've now got a stubbed out looper agent that I can build in workbench, and that has likely looking inputs and outputs. I've got past compiler errors, linker errors, then python tracebacks, and I'm now ready to fiddle with my lexicon file so I can hook a talker to the looper and hit 'go'.

I anticipate the first try will lead to a series of spectacular crashes, but I hope to get to a point eventually where hitting a start/stop button will print out 'start' and 'stop' respectively....

One _BIG_ problem I have encountered while developing is that you end up running eigenD with an Alpha plugged into it, and it's ever so easy to close your text editor and launch into 3 hours of noodling - a tricky balance to maintain for those of us who develop but also play!

written by: 0beron

Thu, 9 Feb 2012 15:07:43 +0000 GMT

Found a way round the lexicon problem for now - all you need do is change the 'names' field in the agent definition, that seems to be the only part where the belcanto name is referred to in the code. This way I can attach a talker to it.

Now I'm banging my head against the callback mechanisms involved in the recorder event handling. I can't seem to work out where this 'wire_create' routine:
is called from. I have an equivalent routine in my looper, and nothing seems to trigger it.

I also seem to have a problem with the commander - if I open eigenD 2.0.35-experimental and load the 'partial factory setup' or 'modular synth setup', then the commander loads and connects just fine. If I load a setup containing my looper or the noise agent from the devcon, the commander refuses to connect to the belcanto interpreter. I added my talker by clicking around in workbench instead.

Please log in to join the discussions