[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