Re: Effects/SASL/Dynamic instr MIDI easedropping ...

From: Robin Davies (rerdavies@msn.com)
Date: Sat Apr 29 2000 - 20:04:23 EDT


----- Original Message -----
From: "John Lazzaro" <lazzaro@cs.berkeley.edu>
To: <saol-dev@media.mit.edu>; <saol-users@media.mit.edu>
Sent: Thursday, April 27, 2000 3:06 PM
Subject: Effects/SASL/Dynamic instr MIDI easedropping ...

> Also on this list is a problem most people who use
> the real-time low-latency linux stuff for music apps have
> complained about: its natural to want effects instruments
> (and perhaps SASL and dynamic instrs too) to "easedrop"
> on a MIDI channel, using the MIDIctrl[]/MIDIbend/MIDItouch
> standard names. The standard doesn't seem to mandate that
> these return 0 for instrs with preset numbers that are
> not launched via the MIDI method, so there seems to be
> some space to implement easedropping.
>
John,

Interesting point.

Here's a third method to consider that I think is *slightly* better than the
other two.

Most synths have a MIDI master channel. Since there doesn't appear to be any
semantics for MIDI controls for non-midi notes, perhaps you could just
connect all non-midi notes to the MIDI master channel (which would be
channel zero by default, but could be optionally set as a configuration
parameter).

The only thing that's rather hateful about this as well as the other two
schemes that you proposed is that, unfortunately, MIDI streams within an
MPEG stream are allocated 16 channels of their own that are separate and
distinct from the real-time MIDI channels. So... The obvious problem is
this: either the real-time master channel, or the MPEG stream master channel
will have control of the effects settings, but not both. As a result, you
won't be able to play a live MIDI stream to a SAOL synthesizer, and then
later embed that same stream into an MPEG file and expect to get the same
result, unless you also advocate a non-standard convention for MPEG files.

A potential solution to this problem is to allocate a range of NRPNs that
have global effect. ie. changes to the data value of NRPNs within the global
range set data values that are available to all instruments regardless of
their channel number or preset number or method of instantiation.

I suspect that musicians aren't going to be particularly grateful for the
global NRPN solution as a sole since trying to force standard MIDI
controllers to generate RPN or NRPN data values is difficult or impossible.
Presumably, musicians want to *control* their effects or they wouldn't be
complaining about this, and presumably, they're going to want to be able to
control their effects with controllers that they have at their disposal
(i.e. pitch wheels, MOD controllers &c on stock synthesizers).

In the same vein, something else to consider: the Microsoft DirectMusic
architecture supports extended channel numbers. DirectMusic synthesizers can
be dynamically allocated with an arbitrary number of channels. A great
thing, let me tell you. *s*. As a result, it's quite common practice (in the
Microsoft DirectMusic samples, anyway) to allocate 96 channels, select your
presets onto those 96 channels once and once only, and then use MIDI channel
numbers to select the preset that you want to play, instead of trying to do
awkward real-time preset changes.

I would like to propose the following convention:

1) All effect instruments and all SASL-instantiated instruments will be
connected to the MIDI master channel, determined as described in section
(2).

2) If the orchestra is running with real-time MIDI input, the MIDI master
channel is channel zero of the real-time MIDI input channnel by default,
although implementations may allow this to be
selected as a configuration parameter.

If the orchestra is running without a real-time MIDI input, then the MIDI
master channel will be channel zero of the first MIDI stream within the MPEG
file.

If an orchestra is running with both real-time MIDI input *and* MPEG
streaming MIDI input, then non-MIDI instruments will be connected to channel
zero of the real-time channel bank; midi control messages on channel zero of
the first MIDI stream within the MPEG file will *not* affect MIDI controller
settings on non-MIDI instruments.

I would be willing to support you in this convention.

In the same vein, we could probably do with conventions for RPNs and NPRN
support. Support the full range of RPNs and NPRN seems to me to be
impractical as the ammount of data multiplied by the number of possible MIDI
channels is potentially oppressive. 16000 RPN settings and 16000 potential
NRPN settings strike me as unmanageable.

I'd like to propose that real-time SAOL synthesizers support RPNs 0 through
127 and NRPNs 0 through 127 through a non-standard standard name (hehe)
_MIDIrpn_[128] and _MIDInrpn_[128]. In addition, NRPNs 128 to 256 control
global parameters accessible to all instruments regardless of their channel,
preset number, or method of instantiation. These values should be made
available to instruments through the non-standard standard name
_MIDIGlobalNrpn[128]/.

I'd be grateful if you could let me know what you decide to do.

Regards,

Robin Davies.



This archive was generated by hypermail 2b29 : Mon Jan 28 2002 - 11:46:39 EST