[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Date Index][
Thread Index][
Author Index]
RE: Scripting/Command Chaining in the Max/MSP Kaiser Looper
I forget what the question was, but in general Max/MSP is going to be
more powerful than Mobius scripts, not so much due to limitations in
the scripting language but due to MSP's object architecture. The
Mobius architecture is relatively fixed, you have a great deal of
control over how it behaves but you can't add fundamentally new
behavior such as your "pedal controlled portamento" example.
The tradeoff is that there are things built into Mobius that would be
incredibly difficult to do in Max. Not impossible mind you, but hard
enough that no one would bother. (Your question about Mobius buffer
handling touches on some of that, I don't have time to respond to
that one right now.)
> 5. However, I hook up my expression pedals to two inlets in the object
> (~line) that determines the start pitch, end pitch, and duration times,
>such
> that with one pedal I control the ending pitch (or it could be
>beginning),
> and the other pedal controls the time it takes for the pitch change from
> beginning to end point to occur).
As Per says, the fundamental missing feature is continuously
variable pitch shifting, Mobius only exposes shifting in chromatic
steps. Internally of course a pitch shift is just a floating point
number, I just restrict the selection of those numbers in the UI. If
there were enough interest I could expose a new CC controller for
continuous pitch and rate shift.
Assuming for a moment that we did have the ability to set arbitrary
pitches, you would script this something like this:
- Write three "control scripts" that monitor the CCs for
start pitch, end pitch, and duration. These take the raw
MIDI CC values and store them in a global variable. This
is their only function, they just set global variables.
- Write a portamento script that does the following:
- gets the "start pitch" global variable, scale it from
a MIDI CC number to a pitch value (with some provided
conversion functions)
- enter a loop for some predefined number of iterations,
this number forms the "granularity" of the portamento,
there is never actually continuous portamento, you just
set the pitch to a value, waiting a short amount of time,
then setting the pitch to the next value. The granularity
needs to be fine enough so that you don't hear the "steps".
- pause for a number of milliseconds calculated from the
duration global variable and the granularity
- Raise/lower the pitch to move toward the end pitch
global variable. The amount of shift is calculated
from the current duration, the number of remaining
granules, and the distance to the target pitch.
- repeat the loop until we reach the desired pitch
While I think this is possible, there is likely to be a lot more
math involved than the corresponding Max configuration.
Jeff