Overview
Smoothly varying channel router module
Discussion
This module routes (or copies) an arbitrary collection of input pins to a single multichannel output pin. Each input pin can have an arbitrary number of interleaved channels, but they must all have the same block size. The array channelIndex specifies the mapping from input pin/channel to the output pin/channel. The array has the same length as the number of output channels and the kth array value specifies the mapping from the input pins to the kth output channel. Each array value is a 32-bit packed integer. The high 16 bits represents the input pin number (zero-based) and the low 16 bits represent the channel number (zero-based) to select. If the pin index or channel index is out of range, then the particular output channel is muted. For example, you can mute a channel by setting the index to -1 (unless, of course, you happen to have 65536 pins and 65536 channels). When a router is first instantiated, all of the channel index values are -1.
This channelIndex of this module can be modified at run-time without introducing audible clicks. Internally, the module smooths transitions using the following algorithm. When the channelIndex is first modified, the module maintains the input to output channel mapping and smoothly ramps the gain from 0 dB to -100 dB. Then, when the gain is at -100 dB, the module switches the channelIndex and starts copying the newly selected input channel. The switching transition occurs when the gain is at -100 dB. After switching the channels, the module smoothly unmutes from -100 dB to 0 dB.
The smoothingTime parameter adjusts the rate of smoothing. Typically, values in the range of 10 msec are adequate.
Note that this module is smoothly varying. If you need a more efficient unsmoothed implementation, use the router_module.m instead.
Type Definition
typedef struct _ModuleRouterSmoothed { ModuleInstanceDescriptor instance; // Common Audio Weaver module instance structure FLOAT32 smoothingTime; // Time constant of the smoothing process. FLOAT32 smoothingCoeff; // Smoothing coefficient. INT32* channelIndex; // Specifies input to output channel routing. Each item in the array corresponds to an output pin and contains two packed values: input pin number in the high 16 bits; input channel number in the low 16 bits. INT32* currentChannelIndex; // Similar to the channelIndex, but specifies the current routing for each channel. FLOAT32* currentGain; // Instantaneous gain for each output channel. } ModuleRouterSmoothedClass;
Variables
Properties
Name | Type | Usage | isHidden | Default value | Range | Units |
smoothingTime | float | parameter | 0 | 10 | 0:1000 | msec |
smoothingCoeff | float | derived | 1 | 0.002081 | Unrestricted | |
channelIndex | int* | parameter | 0 | [1 x 1] | Unrestricted | |
currentChannelIndex | int* | state | 1 | [1 x 1] | Unrestricted | |
currentGain | float* | state | 1 | [1 x 1] | Unrestricted |
Pins
Input Pins
Name: in1
Description: Input signal
Data type: float
Channel range: Unrestricted
Block size range: Unrestricted
Sample rate range: Unrestricted
Complex support: Real and Complex
Name: in2
Description: Input signal
Data type: float
Channel range: Unrestricted
Block size range: Unrestricted
Sample rate range: Unrestricted
Complex support: Real and Complex
Output Pins
Name: out
Description: Output signal
Data type: float
MATLAB Usage
File Name: router_smoothed_module.m
M=router_smoothed_module(NAME, NUMINPIN, NUMOUTCHANNEL) Creates a smoothly varying router module which selects channels from multiple input pins and combines them into a single multichannel output. No audible clicks occur when switching between channel due to sample-by-sample smoothing. This modules works in the Audio Weaver environment. Arguments: NAME - name of the module. NUMINPIN - number of input pins. NUMOUTCHANNEL - number of interleaved outputs. There is a single output pin.