Re: Hexaphonic AudioUnits in AUGraph that mixes to stereo
Re: Hexaphonic AudioUnits in AUGraph that mixes to stereo
- Subject: Re: Hexaphonic AudioUnits in AUGraph that mixes to stereo
- From: William Stewart <email@hidden>
- Date: Fri, 13 Jun 2008 19:44:43 -0700
Ah - the matrix mixer...
Here's the thing. The matrix mixer is ultimately just a collection of
input channels and output channels. It doesn't really matter how these
channels are bussed (that is, divided up into separate audio unit
elements) because for that mixer at the end it is a 2x2 matrix of
input and output channels.
So, you can just take your 6 channel output as a single 6 channel
input to the matrix mixer, and then address the volume for:
- each input channel
- each input to output channel
- each output channel
So, if you have a 6 in channel, 2 out channel, then each input channel
has a volume control for its overall input level, and how much it is
going to contribute to each output channel.
You address these volume by using the element ID in Get/Set Parameter
as a cross point (the top 16 bits represent the input channel, the
bottom 16 bits represent the output channel).
So, to set the volume scalar for an input channel:
0x0001FFFF (where FFFF is masking the output channel, so this doesn't
apply this to volume to the output channel but rather to "every"
output channel - and the 0001 is applying the parameter to the second
input channel) - its a zero based index of course
To set the volume for the first input channel (0x0) and the second
output channel (0x1), your element ID for this cross point is:
0x00000001
or ((input channel << 16) | output channel)
If you want to set the global volume - a scalar that is applied to
every crosspoint in the mixer, then the element ID is (0xFFFFFFFF).
You have to initialise all of the volumes (they default to 0) after
you have initialised the mixer. There's a print matrix mixer volumes
method in Public Utility that can help out here.
Bill
On Jun 13, 2008, at 12:54 PM, Brian Willoughby wrote:
Good point. If AUSplitter doesn't do what I want, then I could
create an AU which does what I want. If all I want is panning, that
should be easy enough, but beyond that it would be a waste to re-
implement the AU{Matrix,3D}Mixer features.
I'm still not quite sure whether AUMatrixMixer would accept 6 mono
busses from one unit and allow panning of each as if they came from
separate subgraphs. Same with AU3DMixer.
Brian
On Jun 13, 2008, at 04:15, tahome izwah wrote:
I'm afraid I don't know enough CoreAudio to offer a real suggestion
(especially when it comes to creating an AUGraph INSIDE an AudioUnit
plug in) but couldn't you just create an AudioUnit that has 6 inputs
and whatever number of outputs that you need and do the channel
mapping yourself? Since this is only one multiply-accumulate per
sample per channel doing this in an AU graph seems like overkill to
me...
--th
2008/6/13 Brian Willoughby <email@hidden>:
I've created an AudioUnit which supports hexaphonic processing.
In other
words, it allows six channels of audio to be processed
independently, but
all on one bus. The distinction is that this is not a 5.1 surround
arrangement, but a six-channel guitar effect. The output could be
to a
stereo or surround device, but there would be no direct mapping of
input
channel to speaker. In other words, the multichannel bus has
different
meanings in the beginning of the graph versus the final output.
How do I build an AUGraph to do this? I'm pretty sure I
understand how to
set up a 6-channel source bus, instantiate my AU with 6 channels
on one bus,
and put that into a graph. However, I need to take the output bus
of my AU
and then mix each of the 6 channels into its own pan position with
an
AUMatrixMixer, probably stereo, but potentially surround. How do
I get from
a 6-channel hexaphonic bus to a matrix mixer input where I can pan
each
channel independently?
Would it be possible to use an AUSplitter to take a 6-channel bus
on input
and deliver 6 mono bus outputs? If so, I could then attach each
output bus
to its own matrix mixer input, and then I would have control over
mapping
the channels to the output device. The 3D Mixer might also work,
but I
assume that the real challenge is splitting the channals onto
their own
busses.
Brian Willoughby
Sound Consulting
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden