PDA

View Full Version : MIDI controllers: controller feedback, relative controllers


moinho
10-31-2009, 01:16 PM
Hi Jeff, hi everyone,

I'd like to do some writeup/reqspec regarding the topic of a more powerful implementation of MIDI CCs in Mobius. This refers to some thoughts discussed in http://www.circularlabs.com/forums/showthread.php?t=15.

Summary
There's two use cases I'll discuss, namely
a) visual feedback about controller changes (e.g. when triggered by a script),
b) avoiding controller "snapping" (e.g. if your knob is set to Feedback 0, Mobius uses a value of 127 and you want to reduce that by turning the knob, resulting in a sudden jump to feedback=1).
There's three technological approaches for this:
1. snapping algorithm
2. MIDI controller feedback,
3. relative MIDI controllers.
Not that both 2 and 3 require the controller to support this functionality.
It will be discussed how these two technologies can be used for those two use cases, and to which type of controller (e.g. footpedal, rotary) they can be applied.

Types of controllers
First of all, I'm gonna name several kinds of controllers which are relevant here for transmitting CCs.
i) rotary encoders (with end positions) and foot pedals
ii) endless rotary encoders, including the Boomerang-type wheel encoder
iii) endless rotary encoders with visual feedback (e.g. LEDs)
iv) faders
v) motorized faders

Use Cases:
This section simply explains our two use cases in more detail:
a) visual feedback:
Especially if Mobius is used without a computer screen, visual feedback for the controllers can make sense, i.e. that your faderbox displays the current value of the parameter you are controlling. This is of course only possible for controllers that provide a controllable visual feedback, so it's limited to iii) and v).

b) controller snapping:
Typically, MIDI CC sources (like those mentioned in the "Types of Controllers" section) send messages when you move them. Now here's the problem. Let's assume you place your footpedal (which you use to control output volume) to toe-down (i.e. value 0) and then load Mobius, which initializes the output volume to 127.

Using the technologies to address the use cases:
Starting with use case a), this can only be done using technology 2. Obviously, this requires the controllers to be of sort iii) or v).
As a sidenote, this can also be used to transmit non-controller information for visual clues - e.g. the circular loop position display could be sent to a LED ring round an unused controller.

For use case b), the mapping is somewhat more complicated:
For controllers ii) and iii), 3. can be used, while 1. and 2. is possible for all kinds of controllers.

Putting it together
As we've seen, there's only one technology that will solve both use cases at once, namely 2. On the other hand, the only technology that works with all kinds of controllers is 1. 3, finally, is only of use for controllers of type ii) and iii) and offers better handling than 1, but (like 1) only solves use case b).

So there's a reason for any technology to be implemented:
1. works with all kinds of controllers for use case b)
2. solves use cases a) and b) and allows for additional visual feedback, but requires controllers that support this technology.
3. solves use case b) for controllers of groups ii) and iii) which support this technology.

moinho's recommendation
As said before, none of these technologies does everything perfectly. From my personal experience with controllers, 3 is required the least, so a first implementation should perhaps focus on technology 1, followed by 2.

Jeff
10-31-2009, 05:52 PM
Thanks for the writeup Rainer!

I have been working on approach 2, MIDI controller feedback, and will
release it tomorrow after I fix some more bugs.

> As a sidenote, this can also be used to transmit non-controller
> information for visual clues - e.g. the circular loop position
> display could be sent to a LED ring round an unused controller.

That's very interesting. I just ordered a Novation Launchpad and have been
reading their programmer's documentation. When I'm finished, you will be
able to use the Launchpad with Mobius just like you do with Live:
triggering loops, adjusting volumne and pan.

But now that we have an 8x8 grid of multi-colored (9 shades) programmable
buttons, there is a lot of visual feedback we could provide. Any ideas
on what would be useful here?

> 1. snapping algorithm

I'm not sure how to do this. Consider your example of a pedal at 0 and
Mobius starting up at 127, then move the pedal to 1.

One approach is to have Mobius enter a "synchronzing CC" mode immediately after it starts. When CC messages come in, they are ignored until the until the CC value reaches the current parameter value. So in your
example nothing would happen as the pedal sweeps from one to 127, then
once it reaches 127 it "sticks" and starts changing the parameter.

Then I guess we would enter this special CC sync mode whenever the
parameter value changes in a script or from a UI knob.

My concern would be that it isn't clear when you're in this mode, you
start turning a knob and nothing happens so you start turning it wildly
until it sticks then you get a similar kind of snap. But this certainly
sounds like a useful option.

> 3. relative MIDI controllers.

This feels useful for changing parameters that don't have any
audible effect while you're changing them, but less useful for
things like output level.

If I understand correctly, with a pedal at 64 and Mobius starting at 127,
moving the pedal from 64 to 63 would change the parameter from 127 to 126 and moving the pedal from 64 to 65 would hange the parameter from 127 to 0?

Now you would have a snap in the middle of the pedal range. For things
like 8thsPerCycle and Quantize this doesn't really matter since you're
just trying to dial in a value, but for volume it would be audible.

Thanks for your thoughts.

buzap
10-31-2009, 10:19 PM
Hi Jeff

I'm excited to hear that you enter the Launchpad business ;-)
I'd suggest:
- 8 Tracks x 8 Loops,
- green=playing, red=record/ovedub/multiply, yellow=loop exists.

@Rainer: Isn't the "snapping algorithm" called catch on faders?
Usually, controllers I know have three modes for faders:
- absolute value, fader position is always picked up
- only when moved (current Moebius setting)
- Rainer's catch mode
Personally, I prefer the current setting for most stuff. I usually don't run into Rainer's problems, but I can understand that you can screw up with it.

best regards
Buzap

Jeff
10-31-2009, 10:47 PM
Yes the 8 tracks by 8 loops will be what you get when
you're on the "session" page just like Live. But we've also got
two "user" pages (User 1 and User 2) and we can create as many
cycling virtual pages as we want. So I was just wondering what
else to do with all those buttons.

Something completely silly would be a pulsating graphic similar
to the Kaoss pad in time with the active loop. It's not something
you interact with but it might look cool :)

Per Boysen
11-01-2009, 01:13 AM
Please allow me to go way beyond "completely silly" and suggest a rotating PacMan! :D

Fantastic news with the Launchpad support! I have three 8x8 button hand pads here and no problems filling them up. Good to hear the "session page" gives 8 tracks x 8 loops! I would like to use use that page to remind me of what loops slots are used on other tracks (than the selected) and also the speed (length) of the playing loops on each track. Maybe I would use a second Launchpad for Buzzrap's suggested data monitoring, but my first priority is to make up for the missing Pacman's in a monitor-less looping rig (Mac Mini?) because I find it more important to keep track of timing (when using Multiply you may need visual guidance, especially with non rhythmic music). Since the Launchpad offers 9 colors I suggest that the loop slot button simply lights up with these nine colors on an equal timed row during loop playback. The sequence of the colors has to be fixed, so the the user can see by the color if the loop has just turned around or is approaching the end. It would be like "flickering through a rainbow" on each loop round. Some will suggest having colors change on musical timing values, but this will not work well because music in all timing measures will be played; one guy may play in 4/4 while another with will play in 9/8. So it will IMHO be most useful to keep the color sequence as a lose indicator of what part of the loop the "play-head" is at in this very moment. Does this make sens?

A very useful way to implement support for Launchpad, and similar devices, would be to offer a matrix in the preferences where every user can fill in the Mobius parameters of choice and if color shall be used as an "on/off" indicator, to indicate up to 9 modes or finally, to "do the Pacaman" which means mirroring a continuous variable's change (sequence of 9 color changes scaled to the full parameter range).

______________


Great write-up, Rainer! The host applications I use offer up to four alternative modes for continuous faders and knobs:

1. As stated globally in preferences.
2. Jump mode (parameter value jumps directly to the incoming new value).
3. Pickup mode (also called "soft takeover"; external control data needs to reach the parameter's value before it sticks)
4. Relative.

Speaking about "relative", Scaling could be quite useful. The two most useful scalings I can imagine are:
1) Invert Parameter Range.
2) Match Ranges.

With "Match Ranges" I mean a way to set what part of the controller range shall match what part of the target parameter's range. Different parameters and controllers have different ranges so this preference has to be open and scaled "under the hood". Let's imagine both the controller and the target parameter goes from 1 to 10.
Example: If you set "Ctrl 1-4 and Target 1-10" a setting of ctrl 2 would scale as 2,5 in the target parameter.

But finally I would like to add that this might not be very important since it is already available to any user that runs a plug-in version of Mobius under a host application.

moinho
11-01-2009, 06:51 PM
Hi Jeff,

first, about snapping/soft takeover:


One approach is to have Mobius enter a "synchronzing CC" mode immediately after it starts. When CC messages come in, they are ignored until the until the CC value reaches the current parameter value. So in your
example nothing would happen as the pedal sweeps from one to 127, then
once it reaches 127 it "sticks" and starts changing the parameter.

Yes, that's exactly how you do that. Note that this will end in rather unintutive behaviour if you're using a controller and at the same time change that controller value with a script - so it might make sense to be able to select this mode for each controller you assign.

And about relative controllers:

This feels useful for changing parameters that don't have any
audible effect while you're changing them, but less useful for
things like output level.

If I understand correctly, with a pedal at 64...
About which I said:
"For [endless rotary] controllers, [relative] controllers can be used..."

This answers your question: relative MIDI controllers only make sense in combination with endless controllers (and I believe those to be the only ones that offer this feature).
Basically, the message you send isn't "set controller to value x", but "change controller by value y".
As I said, this is advantageous over the use of controller feedback only in some very specific cases.

Rainer

buzap
11-02-2009, 08:55 AM
Hi Jeff

exciting stuff...

Other things that come into my mind:
- Various Parameters like Feedback, Levels, Panning...
- Toggle buttons for Quantize, LoopCopy
- No. Subcycles
- Custom Shuffles on the fly using 8x8 matrix
- Overview Undo steps
- Complex operations on Loop level (i.e. custom bounces)
- ...

Actually, what I would suggest is to have "Midi Out Bindings" where you can define settings (i.e. parameter mapping: Mobius parameter/value > Midi channel/value) and import/export them as XML. This way, you could have a "Launchpad package.xml" that you can simply install. Then Per would have "Per's Launchpad package.xml" some people would prefer etc. ;-)

best regards
Buzap