Very lucidly put. Especially for one sleep deprived. Do you have kids?<g> I would advocate creating a special data type for MIDI. >>> - If we support MIDI and GMPI control data as separate types, then we dilute the potential compatibility of GMPI hosts and plugins. Some people will choose to write plugins which only take MIDI control, not because of inherent MIDI bytestream characteristics, but just because it is familiar. Some will write plugins that only handle GMPI control data because it is more flexible or easier to understand than MIDI or whatever their reason is. These plugins will not be able to exist in the same graph without translation (host-based or other plugin based). <<<< It's true, without translation these things can't coexist. So let's make the standard GMPI kit include 2 "glue" components, both plugins which have a single control input and single control output. One maps GMPI to MIDI, the other vice-versa. If a GMPI host wants to run MIDI plugins, it can add the glue. But more importantly, if a host that knows about raw MIDI wants to talk MIDI to a plugin that knows it, it can. >>> So here is my question for the whole group. Can you give me real-world examples of plugins whose functionality REQUIRES knowledge of the MIDI bytestream? <<< As Vincent said, hardware implementations of GMPI. To that I'll add, hardware synths that have been repurposed into software. I know of specific synths (some of the ones we did with Roland) which were originally hardware/ROM based and are now host based. Their engines were coded with specific awareness of MIDI. -----Original Message----- From: gmpi-bounce@xxxxxxxxxxxxx [mailto:gmpi-bounce@xxxxxxxxxxxxx] On Behalf Of Mike Berry Sent: Friday, June 18, 2004 5:41 AM To: gmpi@xxxxxxxxxxxxx Subject: [gmpi] Re: 3.15 MIDI (What does it mean to be a plugin) I have changed the thread name here to start a new thread because I believe that this discussion really gets down to the core of what being a plugin means. So here goes my shot (please bear with me, as this is a little long). Being a plugin means that your entire view of the world is mediated by your host. You tell the host: I can recieve such and such, and in response I can generate such and such. For GMPI, we have previously determined that there are two fundamental types of data in a GMPI graph: audio data and control data. Each has a set of attendent rules. During the audio format discussion, we talked about encoded audio where the host does not know the encoding. For example, lets say your plugin wanted to operate on a MPEG-1 compressed bitstream, to decompress it into PCM. We decided that this plugin is outside of the scope of GMPI. GMPI would only be plugins that were able to operate on PCM audio. Does this make a MPEG-1 decompressor invalid in any way? No. It simply means that it is not a GMPI plugin. So this brings us to control data. I believe that exactly the same reasoning that led us to disallow non-PCM audio formats to "tunnel" through the GMPI graph to be handled by specific plugins should lead us to disallow specific control data formats from tunnelling as well. MIDI is one of a number of formats for musical control data to be passed between components. It is a popular one, but it is also not appropriate to be the sole control data format inside GMPI (without extension, that is). No one, to my knowledge, has argued that MIDI, as is, should be the sole control data format in GMPI. I believe that it is a fundamental rule necessary to the success of GMPI that the host be able to understand, completely, all forms of data passing between plugins. This is because only the host knows the context in which a particular plugin exists. Without completely understanding the data flow, the host will never be able to properly place plugins in the graph. So where does this leave a plugin which transforms MIDI data? I currently believe that it leaves it outside of GMPI, but bear with me for a minute while I defend that, and I will give you a chance to change my mind. Processing GMPI control data into different control data output or audio output is a completely reasonable task for a GMPI plugin. But the plugin can never know where that data came from other than "it came from the host." It is the host's job to be the arbiter between the complex outer world, where many control formats exist, and the clean inner world, where just GMPI-intelligible formats exist. The whole reason that an author is writing a plugin instead of a host is that they want the host to handle that complexity for them, so that they can focus on a specific, specialized task not provided by the host. So there have been a number of questions about "how would I write this or that MIDI processor inside GMPI." I think that it comes down to a simple distinction. One possibility is that you are writing a control processor, which could operate on data that was originally MIDI, but could also operate on data that was originally OSC, or hand-drawn in a host UI, or another plugin's UI. In other words, you are a GMPI control data processor. The second choice is that you only process MIDI data, because of some intrinsic MIDIness of the data. This could be a reasonable plugin, but only in a system whose purpose was to process MIDI data (go back to my compressed MPEG example). So if I was a host which supported MIDI, I could host your plugin in the MIDI path. So the fundamental question for me is whether or not it is within the scope of GMPI to support MIDI-specific plugins. I.e., is MIDI a priviledged data type like two we have currently agreed upon, PCM audio and GMPI control data. I think that this is an interesting potential discussion to have, but not exactly the discussion that we have been having. One upshot of elevating MIDI to a fundamental type is that it makes possible a MIDI->MIDI processor plugin that is otherwise impossible. It is otherwise impossible because it explicitly must operate on the MIDI byte stream to have meaning. A trivial but functional example would be a plugin which replaced running status bytes with complete messages. This plugin has no meaning for non-MIDI control data. Another example would be a MIDI note number to frequency map. It takes in MIDI note-ons and produces a GMPI control output of a pitch. A third example would be any plugin that handled SysEx of any kind. So is MIDI is an important enough format to be elevated to fundamental status inside GMPI? My host (Premiere) currently operates without MIDI of any kind. We do audio data and control data only. So it is completely possible to write a GMPI application without MIDI. But this is not a reasonable argument for us to not have MIDI as a type. Premiere also does not have "instrument" plugins or a tempo system, but I can recognize that GMPI requires both of these to be a successful architecture. Premiere will simply not host the full set of GMPI plugins, because the functionality is not relevant to our task, and we could also not host plugins requiring MIDI inputs or outputs. So in order to make my personal decision on whether MIDI is a worthwhile fundamental format, let me expose what, to me, are the two counterbalancing arguments: - If we have MIDI as a format, then plugins can be written which explicitly exploit the MIDI byte stream in some way. - If we support MIDI and GMPI control data as separate types, then we dilute the potential compatibility of GMPI hosts and plugins. Some people will choose to write plugins which only take MIDI control, not because of inherent MIDI bytestream characteristics, but just because it is familiar. Some will write plugins that only handle GMPI control data because it is more flexible or easier to understand than MIDI or whatever their reason is. These plugins will not be able to exist in the same graph without translation (host-based or other plugin based). Right now, I think that the second consideration outweighs the first. I am more worried about the matrix of complexity and compatibility that results from having 3 fundamental types instead of 2, than for the lost possiblity of writing MIDI bytestream specific plugins. But I am willing to remain open minded here. So here is my question for the whole group. Can you give me real-world examples of plugins whose functionality REQUIRES knowledge of the MIDI bytestream? I have given two trivial examples, but I want to hear the real meaty examples which will sway me to say "Wow, if we leave that functionality out of GMPI then we will have failed." So strummer plugins or requantizer plugins in and of themselves are not examples of what I am asking for. While these could operate on MIDI data, they could also operate on GMPI control events. I want to know about the plugins that could only exist if ew elevate MIDI to a fundamental type. Thanks for reading this far on a long post which got me out of bed at 3 in the morning to write it because I couldn't sleep otherwise. -- Mike Berry Adobe Systems ---------------------------------------------------------------------- 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