Thanks, I think this is a much clearer specification of the real requirements. ----- Original Message ----- From: "Chris Grigg" <gmpi-public@xxxxxxxxxxxxxx> To: <gmpi@xxxxxxxxxxxxx> Sent: Tuesday, July 06, 2004 9:01 PM Subject: [gmpi] MIDI: Proposed Reqs (try #2) > OK, here's a whack at MIDI requirements; sorry for the time-lag, I'm > overbooked currently. > > Rather than line-by line commenting on Tim's first whack (quoted way > below for reference), I've gone at it from scratch because there > seemed to be more parts, and it felt like a different structure was > needed. Also, I know the phrase "(though the in-graph data need not > necessarily be in pure MIDI 1.0 format)" appears way too many times, > but that's just to be super-clear from the start -- since there's so > much sensitivity and confusion about what MiG vs. NMiG means any > more; I expect them to be mostly struck later. > > I hope I didn't miss anything. As written, this is all orthogonal to > the stapling issue. > > Have at, > > -- Chris G. > > 3.15. MIDI > > Req. 68: NO DRAG ON PURE GMPI - In general, none of the following > MIDI requirements should be met by handicapping the abstract design > of other, non-MIDI-related, 'pure GMPI' requirement areas; in > particular, MIDI's well-known limitations in terms of integer field > sizes, message model, etc. should not be taken as bounds on GMPI per > se. > > Req. 69: EXTERNAL MIDI IN & OUT - It must be possible for hosts to > control plugs from arbitrary MIDI 1.0 HW instrument controllers, HW > control surfaces, and SW outside the GMPI graph (though the in-graph > data need not necessarily be in pure MIDI 1.0 format). This includes > but is not limited to playing notes, adjusting parameters, host-side > ad hoc 'click-and-wiggle' controller mappings, and System Exclusive > communication. It must also be possible for plugs to communicate to > arbitrary external MIDI devices (including other SW outside the GMPI > graph) by effectively emitting MIDI 1.0 for the host to route to > destinations outside the GMPI graph (though the in-graph data need > not necessarily be in pure MIDI 1.0 format). Plugs must not need to > use platform native MIDI I/O APIs to achieve this, it must be > possible using only the GMPI API. > > Req. 70: MIDI I/O BY PLUGS - It must be possible for plugs to > effectively behave as MIDI 1.0 receivers and/or senders (though the > in-graph data need not necessarily be in pure MIDI 1.0 format) using > only the GMPI API. > > MORE: One option is to allow for MIDI->GMPI (& vice versa) > converter plug-ins. > > Req. 71: MIDI HW PROXIES - It must be possible for a GMPI plug to act > as a proxy for a connected hardware MIDI device in the studio (though > the in-graph data need not necessarily be in pure MIDI 1.0 format) > using only the GMPI API. > > Req. 72: HW/SW STUDIO ROUTING/MANAGEMENT - It must be possible to > effectively route MIDI 1.0 connections (though the in-graph data > need not necessarily be in pure MIDI 1.0 format) between proxied MIDI > HW devices and/or other GMPI plugs in the same GMPI graph, using only > the GMPI API. > > MORE: This is meant to promote host functionality like the > Environment in Logic. > > Req. 73: MIDI-ORIENTED MUSIC PROCESSORS - It must be possible to > effectively generate and process MIDI 1.0 streams (though the > in-graph data need not necessarily be in pure MIDI 1.0 format) with > GMPI plug-ins, using only the GMPI API. E.g. transposers, > channelizers, splitters, strummers, etc. that operate on just a > control stream, not audio; or e.g. generators like software LFOs. > > Req. 74: SINGLE EVENT DELIVERY MECHANISM - To preserve > sample-accurate timing and simplify automation state repeatability, > there must not be a separate message routing system for > MIDI-originated events; all MIDI-originated events must be > communicated to plugs, and from plugs to other plugs or the host, via > the same control signal system described in sections 3.8. Events, > 3.11. Parameters, and 3.12 Control I/O (though the in-graph data > need not necessarily be in pure MIDI 1.0 format). > > Req. 75: SINGLE EVENT CODING - To simplify automation state > repeatability, in addition to representing all pure GMPI event types, > the GMPI event system must also be able to represent all MIDI 1.0 > messages absolutely without loss of information (message content and > time) (though the in-graph data need not necessarily be in pure MIDI > 1.0 format). An initial proposal for a single, common event coding > intended to meet the needs of both MIDI 1.0 and all expected pure > GMPI messages has been drafted <link>. > > Req. 76: DEFINED TRANSCODING - GMPI must include a single, clear, > universal rule set for losslessly transcoding incoming MIDI 1.0 > messages to GMPI events, and for transcoding (with managed loss) > outgoing GMPI events to MIDI 1.0 messages. Transcoding must occur at > the MIDI 1.0 message level, not the individual MIDI byte level. > > MORE: > * Depending on the eventual design of the pure GMPI note > representation event(s), the relationship between MIDI messages > and GMPI events may not necessarily always be 1:1. > * For outgoing > GMPI events that are transcoded to MIDI 1.0, the rules will need > to exactly specify what truncation, rounding, etc. operations are > needed when converting float or other high-resolution GMPI > values to MIDI 1.0's limited integer fields. > * System Exclusive > messages must always be passed verbatim, with no transcoding. > > Req. 77: MIDI-PARAMETER MAPPING - Plugs with MIDI-driven parameters > (in the sense of section 3.11 Parameters) must be able to expose to > the host an arbitrary MIDI-messages-to-parameters map. The map must > be changeable at runtime, for example when the parameter set changes. > > Req. 78: MIDI AND ACTORS - For plugs with MIDI-driven parameters (in > the sense of section 3.11 Parameters) where changes to one parameter > via MIDI automatically produce changes in other parameters, all such > links must be correctly modelled by the plug's Actor component (per > section 4.21 The Parameter Pre-Processor Model). > > ..end.. > > > >Woops, I meant to change the subject... > > > >On Wed, Jun 23, 2004 at 02:26:25PM -0700, Tim Hockin wrote: > >> So how can we encapsulate what we've been discussing into requirements? > >> Obviously, Chris' proposal (with updates as discussed since then, right > >> Chris :) will be included or linked to in the More Info section. > > > > > >Proposed reqs for Section 3.15 "MIDI". I am sure there are more that are > >needed, and some rewording. Suggestions? > > > > > >* GMPI must provide complete interoperability with MIDI controllers. It > > must be possible to control plugins within a GMPI graph with MIDI input. > > MIDI input must be sent through the host like all GMPI events. > > > > MORE: For every MIDI message, there must be a corresponing parallel in > > GMPI. It must be possible to losslessy transcode a MIDI event into a > > GMPI event and back. A basic proposal covering the details of this > > transcoding has been developed. <link> > > > >* Plugins must be able to expose a preferred MIDI map, which allows the > > host to configure some automatic MIDI control of the plugin. > > > > MORE: It's probably OK to limit this MIDI map functionality to the > > following MIDI messages: 7-bit CC, 14-bit CC, RPN, NRPN, note-on, > > note-off, pitchbend, channel aftertouch, and poly aftertouch. > > > >* Plugins must be controllable through host-based MIDI-learn. This allows > > the host to map any incoming MIDI controller to any parameter. > > > > MORE: This is "click and wiggle" functionality. The user selects a > > parameter, then sends a MIDI controller message. That MIDI control is > > bound to the specified parameter. It's probably OK to limit this > > functionality to the following MIDI messages: 7-bit CC, 14-bit CC, RPN, > > NRPN, note-on, note-off, pitchbend, channel aftertouch, and poly > > aftertouch. > > > >* It must be possible for GMPI plugins to receive MIDI SysEx messages. > > GMPI hosts must not modify SysEx messages in any way. > > > >* It must be possible for plugins to send MIDI. > > > > MORE: One possible mechanism for plugins to send MIDI is for hosts to > > provide a GMPI->MIDI output plugin. Another possible option is for GMPI > > to define a host-based API for accessing virtualized MIDI outputs. > > > >---------------------------------------------------------------------- > >Generalized Music Plugin Interface (GMPI) public discussion list > >Participation in this list is contingent upon your abiding by the > >following rules: Please stay on topic. You are responsible for your own > >words. Please respect your fellow subscribers. Please do not > >redistribute anyone else's words without their permission. > > > >Archive: //www.freelists.org/archives/gmpi > >Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe > > > ---------------------------------------------------------------------- > Generalized Music Plugin Interface (GMPI) public discussion list > Participation in this list is contingent upon your abiding by the > following rules: Please stay on topic. You are responsible for your own > words. Please respect your fellow subscribers. Please do not > redistribute anyone else's words without their permission. > > Archive: //www.freelists.org/archives/gmpi > Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe > ---------------------------------------------------------------------- Generalized Music Plugin Interface (GMPI) public discussion list Participation in this list is contingent upon your abiding by the following rules: Please stay on topic. You are responsible for your own words. Please respect your fellow subscribers. Please do not redistribute anyone else's words without their permission. Archive: //www.freelists.org/archives/gmpi Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe