On Jan 1, 2008 10:10 PM, Stephen Sinclair <radarsat1@...> wrote:
> Sorry for the delayed response.. :)
> I was preparing to play a set at a new year's party, so I didn't want
> to give you a quick answer. You put a lot of thought into your posts
> so I like to give myself time to consider carefully before answering.
Not a problem at all. I much prefer a thorough response to a timely one.
> (ps. the set went well, though i played so late in the night that
> there weren't many people left... loopdub worked perfectly however!
> First time doing a set using Linux on a borrowed MacBook Pro.)
Glad to hear it!
> > The essential problem here is that it just makes no sense to have MIDI
> > pick-up for a controller that can move in a non-stepwise manner;
> Perhaps, but I think it's best to assume that any control can move in
> a non-stepwise manner.
That would be the ideal solution, yes. It would be much simpler to not
have to make the distinction. And, as you point out, perhaps it would
even be necessary.
> > My button goes to 64 when I turn it on, and
> > 0 when I turn it off, so I can never get to 32. I'm stuck in pick-up
> > mode; my button is rendered useless.
> Pick-up mode doesn't need to detect proximity to the current value.
> It only needs to remember which side the MIDI control was on (relative
> to the GUI value) before going into pick-up mode.
Yes, you're right. I like your algorithm. It seems to encapsulate the
essential characteristic of MIDI pick-up, which is that the MIDI
control value has to pass through the internal control value before
the program will respond to it again. Of course, we're also in
agreement that sometimes this just isn't what you want, which is why
we want to be able to disable pick-up selectively.
> One situation however comes to mind: what about those controllers
> where the settable knobs are magnetically controlled? If you send a
> MIDI value to one of the knobs, it swings into place over some amount
> of time. During this particular delta time, wouldn't you want to
> ignore values during the slide? It seems pick-up mode might be useful
> for saying "go to this value, but ignore incoming CC messages until
> that value is reached."
For such a device, I would say that you would want to enable pick-up
mode for its knobs. This would do the right thing when an internal
control change causes the hardware control to move; it would also do
the right thing when you load a preset or something like that. If
you're not in pick-up mode (that is, the hardware control value
matches the internal control value), and you load a preset, then the
controller sends CCs for each control until the control reaches its
new value: thus, the slide in the hardware control value is matched by
a corresponding slide in the internal control value. This seems to me
to be desirable, not undesirable. Similarly, if any of the controls
are in pick-up mode, their CCs will be ignored until they reach the
internal value, and then they will slide the rest of the way to their
final value. This is, I think, the right thing to do. If a control is
in pick-up mode and the movement between its initial value and its
final value does not pass through the internal value, then the
internal value will not change at all. This is _arguably_ the right
thing to do. There may be a better solution, but I think that it is
not worth further exploring until we have confirmed that a device with
these characteristics actually exists.
With the point on magnetically controlled knobs aside, I think that we
have arrived at a design that we can both agree on: pick-up
implemented using your algorithm, with the ability to selectively
disable pick-up for different controls.