Skip to content

Reproduction classes

As introduced in the overview, the reproduction modules link between the rendering modules and the physical hardware. VA provides different classes each being useful for different combinations of renderer and hardware setups.

In the following, an overview of all reproduction classes will be given. Then, the individual reproduction classes are discussed in detail. This starts with general reproduction classes which are not restricted to a specific hardware type, followed by classes designed for headphone-based and loudspeaker-based reproduction.

Reproduction class overview

Class name Input stream Output stream Description
Talkthrough channel-based same as input Forwards the incoming stream directly to the audio hardware. Used a lot for plain headphone playback and channel-based renderings for loudspeaker setups.
Headphones two-channel equalized two-channel Forwards the incoming stream after euqalization of headphones (convolution with inverse HpTF).
LowFrequencyMixer arbitrary variable Mixes all channels or routes a specified channel to a single subwoofer or a subwoofer array. Handy for simple LFE support.
NCTC binaural two-channel variable Uses static or dynamic binaural cross-talk cancellation for arbitrary number of loudspeakers.
HOA Ambisonics, any order variable Calculates and applies gains for a loudspeaker setup using Higher Order Ambisonics methods (HOA).
BinauralMixdown channel-based binaural, two-channel [UNDER CONSTRUCTION] Uses dynamic binaural technology with FIR filtering to simulate channel-based sound playback from a virtual loudspeaker setup.
BinauralAmbisonicsMixdown Ambisonics, any order binaural, two-channel Calculates and applies gains for a loudspeaker setup using Higher Order Ambisonics methods, then spatialises the directions of the loudspeakers using HRTFs.

General reproduction

Talkthrough

This class simply forwards the output stream of a renderer directly to the connected hardware channels without modifying it. Typical use-cases are plain headphone playback or channel-based renderings for loudspeaker setups, e.g. VBAP.

LowFrequencyMixer

This class is designed for the reproduction of low frequency content (e.g. using a subwoofer array). For this purpose, the channels from the rendering output are mixed using the sample based average. The result is forwarded to every attached hardware channel. The user can specifiy which renderer channels are used for the mixing process in the VACore.ini:

Parameter name Description Default
MixingChannels Specify the renderer's channel to be mixed. Channel numbers start with 1 (e.g. 1, 2, 3 ). 1

Headphone-based reproduction

The following reproduction classes are designed for headphone reproduction. Thus, all have a two-channel output stream.

Headphones

This class takes a two-channel input stream and applies an inverse Headphone-to-ear transfer function (HpTF) using FIR convolution to equalize the headphones. The data must be provided using an audio file which is specified in the VACore.ini:

Parameter name Description Default
HpIRInvFile Audio file including the impulse response of the inverse HpTF. [REQUIRED]
HpIRInvCalibrationGain Allows to specify an additional gain factor for calibration. 1.0
HpIRInvCalibrationGainDecibel Do not use together with HpIRInvCalibrationGain. Specifies the same gain using a dB scale. 0.0
HpIRInvFilterLength Can be used to change the utitlized filter length in samples for the given inverse HpTF. Might result in cropping parts of the filter. Length of inverse HpTF

BinauralMixdown

Attention: This reproduction module is currently under construction and does not work yet

The idea behind binaural downmixing is taking a channel-based input signal rendered for a loudspeaker array and reduce this to a two-channel binaural output signal which can be played via headphones. For this purpose, the loudspeaker array is placed in a virtual scene (free-field). Each loudspeaker can be interpreted as a virtual source with position and orientation defined in the hardware configuration. The real-world pose of the receiver is used to specify position and orientation of the listener within this array. Typically, it is assumed that the listener resides within the center of the array and only rotates its head. Then, the binaural output signal is created convolving each loudspeaker signal with the respective HRTF and mixing all signals. Playing this via headphones, the result should sound similar as standing within the actual loudspeaker array.

For this class the user has to specify two hardware output groups in the VACore.ini: The Output parameter refers to the real hardware used for the actual playback (typically headphones). The VirtualOutput refers to the "hardware setup" describing the virtual loudspeaker array.

Parameter name Description Default
VirtualOutput ID of Output used as virtual loudspeaker array. [REQUIRED]
TrackedListenerID ID of the receiver (listener) which is used for the tracking. If set to -1, tracking is disabled. 1
HRIRFilterLength Filter length used for the HRIR convolution in samples. 128

BinauralAmbisonicsMixdown

This class is similar to BinauralMixdown but does an ambisonics decoding before doing the actual downmix. Thus, it requires an ambisonics encoded input signal and has a binaural two-channel output stream. In addition, to the VACore.ini parameters of the BinauralMixdown class, there are parameters for the Ambisonics decoder:

Parameter name Description Default
TruncationOrder Maximum ambisonics order used for reproduction. Input channels referring to higher orders will not be driven. [REQUIRED]
ReproductionCenterPos Center position of the virtual loudspeaker array. It is recommended to specify a 3D vector (e.g. 0, 0, 0). Otherwise, VA will try calculating the center position based on the loudspeaker positions. AUTO
RotationMode Rotations of the virtual listener can be effeciently implemented by rotating the scene in Ambisonics format instead of updating the HRIRs. In future versions "ViewUp" will include the virtual listeners translation, while "Quaternion" or "BFormat" only account for listener rotation. BFormat
HRIR Path to the HRIR dataset that should be used for binaural downmixing. DefaultHRIR
TrackingDelaySecond Defer motion updates in the virtual scene by a given amount of seconds. 0
Decoder to be implemented Select one of the following decoder algorithms: MMAD, EPAD, AllRAD, AllRAD+. MMAD
UseRemax to be implemented Use to enable ReMAx decoding (Only works up to ambisonics order 20). false

Loudspeaker-based reproduction

NCTC

This class uses a cross-talk cancellation (CTC) implementation to reproduce a binaural two-channel input with an arbitrary number of loudspeakers. For a dynamic CTC the real-world pose of the listener, i.e. position and orientation within the array, can be tracked. The following parameters can be specified in the VACore.ini:

Parameter name Description Default
TrackedListenerID ID of the receiver (listener) which is used for the tracking. If set to -1, tracking is disabled. 1
UseTrackedListenerHRIR File pointing to the inverse HpTF. false
CTCDefaultHRIR Used if UseTrackedListenerHRIR is set to false. Point to a HRIR daff file. -
CTCFilterLength Length in samples used for the CTC filters. 4096
DelaySamples Sets a delay in samples which is used for all channels. CTCFilterLength / 2
RegularizationBeta Regularization factor (β ≥ 0, 0 = no regularization) used to stabilize the inversion during CTC filter calculation. 0.001

HOA

This class takes an ambisonics encoded signal as input and decodes it for the connected loudspeaker array. The user can set a truncation order for the ambisonics decoding and select between different decoder algorithms in the VACore.ini:

Parameter name Description Default
TruncationOrder Maximum ambisonics order used for reproduction. Loudspeaker channels referring to higher orders will not be driven. [REQUIRED]
ReproductionCenterPos Center position of loudspeaker array. It is recommended to specify a 3D vector (e.g. 0, 0, 0). Otherwise, VA will try calculating the center position based on the loudspeaker positions. AUTO
Decoder Select one of the following decoder algorithms: MMAD, EPAD, AllRAD, AllRAD+. MMAD
UseRemax Use to enable ReMAx decoding (Only works up to ambisonics order 20). false
VirtualOutput The virtual loudspeaker array(s) is required when using AllRAD(+) decoders. The ambisonics signals will be decoded to the VirtualOutput, afterwards these virtual loudspeaker signals will be mapped to the real Outputs using VBAP. If you provided multiple Outputs you can specify one virtual output per real output, or use the same VirtualOutput for all Outputs. -