[gmpi] Re: Topic 7: Audio packaging
- From: Chris Grigg <gmpi-public@xxxxxxxxxxxxxx>
- To: gmpi@xxxxxxxxxxxxx
- Date: Fri, 23 May 2003 16:55:34 -0700
> I agree with Sebastien, the semantics of multichannel audio formats
are more complicated than the hinting approach alone is able to
account for. We need to find a way for a plug to advertise to the
In all the discussion, I haven't seen a SINGLE thing that well-hinted
mono-streams can't do. If Someone gives me one solid reason, I'll shut up.
I just thing hinted mono streams is a much more elegant, simple, and
flexible basis for an API.
Allow a user to connect an arbitrary multichannel signal from a
source to a destination of like format in a single operation?
Preserve the information that LEFT in a stereo line is not
necessarily the same kind of creature as LEFT FRONT in a 5.1 line?
> host what multichannel formats it supports, directly in terms like
mono, stereo, quad, 5.1, 7.1, 9.1, ambisonic, M/S, etc. While there
could be a role for hinting within each of those worlds, it seems
like matching hint tags is unnecessary -- why not just have
per-format rules, e.g. in 5.1 buffer 0 is LF, 1 is CF, 2 is RF, 3 is
LR, 4 is RR, 5 is Sub? This is efficient and unambiguous.
Matching hints seems FAR easier than barfing if the target doesn't fully
understand my stream.
Sometimes it's important that a tool refuse to do a wrong thing
rather than make a possibly incorrect guess at what it should really
do. Sometimes barfing is the right thing to do. (And barfing is
very easy.)
Suppose for example that I have a 5.1 sampler. It exports 6 mono streams.
I want to do some processing to just the front L and R and some other
processing to front C.
If all the formats are bundled what do I do? I have to add some plugin that
converst 5.1 into 6 streams then add one that converts the L and R into a
stereo stream. now I have a Stereo, a Mono, and 3 other Mono streams. I
can process the stereo and mono. Then I have to add a plugin to convert 6
streams to 5.1. But first I have to decouple the stereo into 2 monos.
When you atomically group channels together, you force something like this
to happen.
If you have a bunch of hinted streams, you can connect the L and R outs to
the L and R ins of the the processor, the C out to the Mono in of some other
processor, and have them meet their other 3 friends at the next 5.1 plugin.
No bizarre channel conversions needed.
Your example, in addition to being IMHO a little on the contrived
side, makes certain unnecessary assumptions about how it would work.
It could work lots of ways, including having the host handle it
automatically by popping up a window when you try to make an un-like
connection, ala:
The Source is 5.1, but the Destination is Mono.
Connect which channel?:
[FL] [C] [FR] [RR] [RL] [Sub] [Cancel]
Or else:
The Source is Stereo, but the Destination is 5.1.
Connect which channels?:
L --> (o) FL (_) C (_) FR (_) RR (_) RL (_) Sub
R --> (_) FL (_) C (o) FR (_) RR (_) RL (_) Sub
[Cancel] [OK]
Or if that puts you off -- which I can't understand why it would --
Y your sampler's 5.1 output to (3) 5.1 passthrough plugs which,
through the miracle of process-in-place, take zero CPU. On #1 turn
off all but RR, LR, and Sub, routed to a 5.1 output. On #2 turn on
only L & R, routed to a stereo output. On #3 turn on only C, routed
to a mono output. Patch your stereo & mono plugs inline. Patch the
three outputs into a 5.1 bundler plug. If the lines preserve the
original channel semantics (remember I said hinting -might- have a
role even in an enumerated scheme) then you don't even need to
configure the bundler, it knows what to do.
Where's the pain? It's the moral equivalent of having to use a Y
cord to get at one channel of a stereo signal.
Even simpler: If you really care about doing this kind of thing very
often, then buy stereo and mono plugs with flexible inputs, i.e. will
accept different multichannel input formats on different 'pins,' and
let you pick which one/two channels out of those actually get
processed.
These are all level-of-abstraction decisions that plug vendors can
make for themselves, but if we dn't provide grouping than there's
noreal possibility of achieving its ease-of usein any other way .
Besides, if any particular host wants to expose the individual lines
in a multichannel bundle, then fine, whatever. Nothing's stopping
that. They can sell it as a competitive advantage for certain
markets.
> Once such an approach is chosen, the advantages of the
multiple-channels-per-pin approach become more apparent. The pin has
a property for its multichannel audio format (again mono, stereo,
quad, 5.1, 7.1, 9.1, ambisonic, M/S, etc.), and truly these are each
Some of these are formats, and some are encodings - they are not the same.
Yeah... but they're still different and not interoperable despite
having the same channel counts. And this is not just a stereo issue,
I bet there are cases in the theatre/home-theatre multichannel world
where different formats have the same number of channels but the
speakers are in different places (think of all the combinatoins of
multiple front speakers, split surround, multiple subwoofs, etc.).
Channel count is not the end of the discussion.
I'd argue that M/S and Lt,Rt etc have no place inside a GMPI graph. The
oare a way to encode N channels M channels. If you need to read an M/S
source, convert it into whatever format you want a N mono channels.
???... so here I am with my M-S DAT tape collection -- sound effects
for film post production, for example -- and it's all digitized in a
huge library on my sound library server -- and I'm prohibited from
using a GMPI plug-in in Peak to convert it to stereo at the width I
need? Or more like, I want to dynamically vary the width in ProTools
based on a time-variant automation parameter, so the M-S file is
what's placed in the session, but GMPI says M-S doesn't belong in the
graph, so I can't do that? Seems like the wrong answer.
> of like formats. Otherwise how is a plug supposed to be able to tell
the difference between a stereo stream, an LtRt stream, and an M-S
stream? They're all two channels, after all, but they're not
> interoperable.
Again, Lt,Rt and M/S are encodings.
This seems like saying that because they're inconvenient to one
particular view of the world, we're going to ignore them. What
happens when some wants to use ProTools to reconstruct some damaged
track from the only surviving LtRt mag? Sorry, GMPI can't help
you...?
I mean, yes, in both my examples the question is one mainly of ease
of use and preventing patching errors for the user. But your
examples are also about ease of use, but in stranger/more
creative/less pro use cases. I have the feeling that people (me
included) who know enough to be interested in doing stranger things
will always be able to figure out how to drill down to the detail
stuff, like picking one line out of a bundle. The more industrial
and consumer-level things get, the more important handholding and
convenience and error prevention become.
Sorry for latency on my replies - been a busy week.
Same here, thanks for staying engaged.
-- Chris
----------------------------------------------------------------------
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
Other related posts: