Mixer Actor
Introduction
The mixer actor is a process actor that takes in multiple inputs and
generates their linear combination for mixing purposes. It has two
mixing modes: matrix and non-matrix. In non-matrix mode, all inputs are
combined into one single (but may be multichannel) output, and the
output is fed into the VSS main busses as any other actor, and is
subject to SetPan and SetElev messages. This is the default mode.
In matrix mode, arbitrary combinations of mono inputs are
sent to the output channels. The output channels directly correspond to
VSS final output channels, i.e. the speakers. SetPan and SetElev are
ignored. The dimension of the matrix can only be 2x2, 4x4 or 8x8, and
cannot be greater than VSS channels.
Usage
To use the mixer actor, load mixer.so and create an actor of
type MixerActor. Then create a handler of the actor using BeginSound,
and use the following messages to direct sound sources through the mixer.
The maximum number of sources that can be mixed is currently set to 8.
MixerActor messages
In addition to the messages understood by all generator actors, the
MixerActor understands the following messages:
- SetFaderAmp hActor x
- Set the default linear fader value for new instances created by this
actor to the scalar x. Valid range is [-128,128].
- SetFaderGain hActor x
- Set the default log fader value for new instances created by this actor
to x dB. Valid range is (-Inf,42]. This log fader value is converted
to linear value and stored in the variable for default linear fader value
immediately. So SetFaderAmp and SetFaderGain override each other.
- SetAllFaderAmp hActor x time
- Set the linear fader values of all children to x, and set
the default value for all future children. If time is specified,
children will modulate to the new value over the specified duration. Default
value is always set immediately regardless of time.
- SetAllFaderGain hActor x time
- Similar with SetAllFaderAmp. Same as SetFaderAmp and SetFaderGain, SetAllFaderAmp
and SetAllFaderGain override each other.
MixerActor handler messages
In addition to the messages understood by all handlers, the handler
for the MixerActor understands the following messages:
- SetNumberOfInputs hHandler x
- Set the total number of input sources feeding into the mixer hHandler
to be x. The mixer will then sum its mixing channel 1 to x. Valid range is [1,8].
- SetAllInputs hHandler [hSound0 hSound1 ...]
- Set the input sources for all mixing channels of the mixer handler
hHandler. The number of sources should match the number set by
SetNumberOfInputs. Use a special source name "-1" to keep the
current source of the corresponding channel unchanged.
- SetAllFaderAmp hHandler [x0 x1 ...] time
- SetAllFaderGain hHandler [x0 x1 ...] time
- Set the linear/log fader values of all mixing channels (different
from the mixer actor messages with the same names). The number of
sources should match the number set by SetNumberOfInputs. Use a special
value of 1000 (both for SetFaderAmp and SetFaderGain) to keep the
current fader value of the corresponding channel unchanged. If
time is specified, VSS will modulate to the new values
over the specified duration.
The following messages deal with one specific channel:
- SetOneChannelAmp hHandler channel source x time
- SetOneChannelGain hHandler channel source x time
- Set the input source of channel to source, then set the linear/log fader value of the channel to x.
If time is specified, VSS will modulate to the new value
over the specified duration.
- SetChannelNum hHandler x
- Set the number of channel to be used for later messages including SetOneInput, SetOneFaderAmp and SetOneFaderGain, to of the handler hHandler
to be x. All following SetOne* messages will operate on that channel until a new channel number is set by SetChannelNum. Valid range is [1,8].
- SetOneInput hHandler hSound
- Set the input source of current mixing channel to one sound source
handler hSound for the mixer handler hHandler. If no
hSound is specified, that channel will use a null source thus produce
no output.
- SetOneFaderAmp hHandler channel x time
- SetOneFaderGain hHandler channel x time
- Set the linear/log fader value of the channel, or the current mixing channel if channel isn't specified, to x.
If time is specified, VSS will modulate to the new value
over the specified duration.
- SetNumberOfInputs hHandler x
- This is the same message mentioned above. User should note that the number of inputs will be set to the number of parameters provided in each SetAll* message. So if a later SetOne* message is going to use a higher-numbered channel, SetNumberOfInputs must be used in order to include that channel into mixer output. For example, the following sequence of messages are valid (hMixer and h1-h6 are existing actor handlers):
SetNumberOfInputs hMixer 3;
SetAllInputs hMixer [h1 h2 h3];
SetAllFaderAmp hMixer [.2 .4 .6];
SetNumberOfInputs hMixer 6;
SetOneChannelGain hMixer 4 h4 .9 5;
SetChannelNum hMixer 5;
SetOneInput hMixer h5;
SetOneFaderAmp hMixer .1;
SetOneInput hMixer h6;
SetOneFaderGain hMixer 6 .5 10;
The following messages deal with matrix mode:
- SetMatrixMode hHandler boolean
- Set matrix mode to boolean. Default to 0.
- SetMatrixInRow hHandler input_channel [x]
time
- Set one fader matrix row that corresponds to
input_channel to array x, i.e. to specify the amplitudes
of the input in input_channel to be sent to all output channels.
If time is specified, modulate to the new values over that period.
- SetMatrixOutCol hHandler output_channel [x]
time
- Set one fader matrix column that corresponds to
output_channel to array x, i.e. to specify the
amplitudes of all the inputs to be sent to output_channel. If
time is specified, modulate to the new values over that
period.