Limiter User Guide Supplement

The Limiter object can be used to create a hard-stop peak limit on an input signal.  Because it operates on a feedback basis only, there is the possibility for the input signal to overshoot the limit set by the user for a short duration while the algorithm pulls down the signal gain.

The basic trade-off of any feedback limiter is strict regulation to the threshold versus distortion. The more aggressively the limiter is working to pull down (attack) the signal level to the threshold, the more distortion will be produced. Distortion, fluttering and/or pumping can also be produced when the signal level is released from regulation, if the resulting gain lift happens too fast.

Limiter Operation Description

  • Attack Phase – When the Limiter detects that the Threshold value has been exceeded, it reduces the gain at a rate set by a combination of the Attack parameter and how much the input signal exceeds the Threshold value. The gain is reduced until the signal level is at or below the Threshold value. The faster the gain is reduced, the more distortion will be created. There is a minimum attack time time period during which the algorithm is determining signal level.
  • Hold Phase – After the signal drops below the Threshold value, the Limiter will hold the gain steady for a time determined by the Hold parameter. It stops the gain reduction phase and begins to hold. Then at the point when the signal has fallen below the Hold threshold value, the Release phase begins.
  • Release Phase – The gain is raised back to the starting gain, set by the Gain parameter, at a rate determined by the Release parameter. The faster the gain is raised, the more distortion will be created.

Limiter Tuning Parameters In-Depth Description

  • Gain – this is a gain stage before the limiting portion of the algorithm, which sets the starting gain. This gain is applicable before limiting starts, after limiting is fully released and while no limiting is occurring. Gain changes during limiting will be added to this value.
  • Threshold – this is the peak level under which the Limiter will attempt to keep the signal. Overshoot can happen during the Attack phase, both while the algorithm is computing signal level and while reducing gain to meet the Threshold value.
  • Hold Threshold – this is the signal level, relative to the Threshold value, under which the Release phase will begin. This small offset keeps the algorithm from changing phases too quickly and provides an extra guard against exceeding the Threshold value, helping to reduce fluttering and distortion.
  • Attack Time – this is how fast, and thus how aggressively, the Limiter will pull down the signal to meet the threshold. If strict adherence to the Threshold parameter is desired, then Attack should be set very low. This will produce more distortion than a more relaxed Attack value, but if the input signal is not anticipated to exceed the Threshold by very much, then the distortion will be relatively low. Worst case is when the Attack is set low and the input signal level is high compared to the Threshold value. There is a minimum attack time the user can set, which corresponds to the time period during which the algorithm is determining signal level.
  • Hold Time – this sets the time during which the Limiter will hold the gain value steady. Having a non-zero value here can smooth the Limiter operation so that fluttering and pumping are less audible.
  • Release Time – this sets the time during which the Limiter will begin raising the gain back to the original value. Extremely short release times cause very fast gain changes which can lead to fluttering, pumping and distortion.

SFD-Core Objects Toolbox

The Toolbox contains the core objects that were retrieved from the xAF dll. The objects that can be used within the core to create the device signal flow are called core objects. Each core object has its own purpose and solves parametric issues which block routing within the core.

Core Objects are classes that are part of the Audio Core (virtual core) class and operate at a higher level than audio objects. The audio processing class itself is a core object. The relationship between core objects and Audio core is similar to that of audio objects and the Audio Processing class.
Graphical user interface Description automatically generated

The execution order (or index) of the core object is displayed by Core Object Id. Routing determines the order in which core objects are executed within a core. The core objects that are connected to the core input will be executed first, and the core objects that are connected to the root object after that will be given the next execution order.

The device identification feature is enabled for audio libraries version 13 and higher.

Xaf Instance

The Xaf Instance is the core object inside which the signal flow for that instance can be created.
Graphical user interface, text Description automatically generated

  • Core Object Id (execution order of core-object with-in core) and Instance Id (index of xAF instance with-in core, based on execution order) will be displayed as read-only fields.
  • The sample rate and block length of the instance will control signal flow within the instance. You can change the sample rate and block length of the instance in the properties section.
    Graphical user interface, application Description automatically generated

Further information on signal flow creation is available in the GTT Signal Flow Designer guide.

Buffer

Buffer core object is used to convert the input block length into the required output block length. The buffer core object has an equal number of input and output channels. It can be used as a pass through core object OR it can be used to, as its name suggests, buffer samples from the input to the output. The object does not change the sample rate (it is the same at the input and the output).
Text Description automatically generated with low confidence

If you want to connect two core objects with different block lengths, you can use a buffer core object. As a result, the input block length will be the Block Length of the first core object, and the output block length should be the Block Length of the other core object.
Graphical user interface, application Description automatically generated

It can be configured as follows:

  • If the input block length is equal to the output block length, then it behaves as a pass through object (so you could have an audio core with a buffer object to connect the core input to the output)
  • Input and output block lengths must be integer multiple of each other
  • When input and output block lengths are not equal, the object handles taking in input at a lower block length and outputting it at a higher one and vice versa. For example, it facilitates the connection of an object at block length 32 to an object at block length 64

Introducing this object into your signal flow for any case but pass through WILL result in latency at the output.

Splitter

Splitter core object is used to convert one input to multiple outputs of the same sample rate and block length.
Text Description automatically generated

  • This core object always has a single input.
  • In order to make routing from any core object to the splitter both the source core object and splitter core objects sample rate and block length should match.
  • Number of output channels for the splitter is configurable.
    Graphical user interface, text, application Description automatically generated

It is not to be confused with the Splitter audio object.

This object operates in parallel to an xAF instance NOT within it.

Merger

Merger core object is used to merge multiple inputs into a single output of the same block length and sample rate.
Text Description automatically generated

  • This core object always has a single output.
  • In order to make routing from any core object to merger both the source core object and merger core objects sample rate and block length should match.
  • Number of input channels for the merger is configurable.
    Graphical user interface, application Description automatically generated

It is not to be confused with the Merger audio object.

This object operates in parallel to an xAF instance NOT within it.

Ssrc lir Int

Synchronous Sample Rate Converter (SSRCs) is used to convert the input sample rate to the required output sample rate.
SSRCs are core objects that can operate within an audio core. Currently there is one implementation of SRCs in Awx.
Text Description automatically generated

Two options are provided to convert the sample rate. Both these options are mutually exclusive.
Graphical user interface Description automatically generated

IIR Integer Multiple SSRC

This core object implements a synchronous sample rate converter whose input sample rate / input block length and output sample rate / output block length are integer multiple of each others. This is also an infinite impulse response implementation (IIR).

The object operates in one of 2 modes:

  • User Coefficients mode
  • Predefined Coefficients mode

Before we get into the details, there are some common configuration parameters between the two.

  • The input block length needs to be set by the user.
  • The Biquad filter topology. Currently 2 topologies are exposed.
    • Direct Form I
    • Direct Form II

User Coefficients mode: In this mode, the user has to provide the input and output sample rate. Input and output sample rates should not be equal. The Number of Biquads field is read-only.
User has to import the coefficients by clicking on the button “Import Co-efficients”. Based on the number of coefficients in the file, the Number of Biquads is updated.

Validations for User Coefficients mode: The Input and Output sample rates cannot be the same. Validation is shown when the same values are entered.
A screenshot of a computer Description automatically generated with medium confidence

After adding a new “Ssrc lir Int” object and selecting “User Coefficients Mode”, if the coefficients are not imported, the following message will be displayed on various operations such as “Save”, “Edit Device”, “Copy Core Objects” and “Paste Core Objects”. After importing coefficients, the user can perform the required operation.
Graphical user interface, text, application Description automatically generated

Predefined Coefficients mode: In this mode, the xAF dll is used to read the input sample rate, output sample rate, and the number of biquads. When a value in the combo box is selected, the xAF dll is also used to fetch the corresponding coefficients.

Biquad Co-efficient has to be re-imported whenever the mode is switched between Predefined Co- efficient mode to User Co-efficient mode.
A screenshot of a computer Description automatically generated with medium confidence

For these pre-defined coefficients, the quality measures are as follows:

  • Signal to noise ratio: 80 dB
  • Total harmonic distortion: 2e-3f
  • Spurious free dynamic Range: 59 dB
  • Total harmonic distortion plus noise: -60 dB
  • Frequency response flatness: 3 dB

Output block length (Displayed as a read-only field) = (Output sample rate /Input sample rate) * Input block length.

Float to Fixed

Float to Fixed core object accepts audio buffers that are in floating point format and outputs buffers that are in fixed point format (16-bit, 24-bit, 32-bit etc).
Graphical user interface, text Description automatically generated

  • # of Channels is configurable. No of Input channels = No of Output channels
  • The user can configure the scalar value to indicate what fixed point format is required. This scalar value is multiplied by the floating point input samples to convert them to fixed point.
    For example, to convert from float to 32 bit fixed point, this scalar value must be:
    (1 << (32-1) – 1) = 2,147,483,647
  • In order to make routing from any core object to Float2Fixed object both the source core object and Float2Fixed core objects sample rate and block length should match.

Float To Fixed core object is enabled for audio libraries version 16 and greater.
Graphical user interface, application Description automatically generated

Fixed to Float

Fixed to Float core object accepts audio buffers that are in fixed point format (16-bit, 24-bit, 32-bit, etc) and outputs buffers that are in floating point format.
Graphical user interface, text Description automatically generated

  • # of Channels is configurable. No of Input channels = No of Output channels.
  • The user can configure the scalar value to suit the fixed point format of the input samples. The reciprocal of this scalar value is multiplied by the fixed point input samples to convert them to floating point.
    For example, to convert from 32 bit fixed point to float, this scalar value must be:
    (1 << (32-1) – 1) = 2,147,483,647
  • In order to make routing from any core object to Fixed2Float object both the source core object and Fixed2Float core objects sample rate and block length should match.

Fixed To Float core object is enabled for audio libraries version 16 and greater.
Graphical user interface, application Description automatically generated

Nan Detector

The NaN (Not a Number) detector core object detects NaN from input samples and informs the platform using an xTP command if NaN is found. The xTP command will inform about the core id, core object instance id and channel index, so that platform can react accordingly by muting or resetting states. The input samples are copied to the output without doing any other processing. The number of output channel(s) is always same as the number of input channel(s).
Graphical user interface, text Description automatically generated

  • # of Channels is configurable. No of Input channels = No of Output channels.
  • Block length and Sample rate are configurable.
  • The number of input channels is user configurable and ranges from 1 to 255.
  • This core objects’ block length and sampling rate are the same at both input and output side.
  • Block length is configurable in the range of 4 to 4096 samples.
  • Sample rate is configurable in the range of 8 kHz to 192kHz.

In order to make routing from any core object to NaN Detector, both the source core object and NaN Detector core objects sample rate and block length should match.

NaN Detector core object is enabled for audio libraries version 19 and greater.
A screenshot of a computer Description automatically generated with medium confidence

Core Objects Validation

When the GTT is loaded with a version of the xAF library lower than 13. If a user tries to open a device view that contains core objects other than a XAF instance, they will see the following error message.
Graphical user interface, diagram Description automatically generated

Aside from the Xaf instance, every other core object will be red.
Graphical user interface Description automatically generated

Overview

This guide explores a comprehensive library of audio algorithms from Harman. It includes over 90 algorithms that can be used to create new, flexible audio processing units (Compound Audio Objects). These CAOs can be fine-tuned, protected with passwords, and shared as easily as any individual audio object.

For all Audio Objects, inside their respective tuneXTP() methods, the received tuning data is NOT checked for valid range limits.
– If the Audio Object (AO) is tuned from GTT, the GTT ensures that the tuning parameters remain within the range prescribed by the toolbox methods.
– If the Audio Object (AO) is tuned using methods other than GTT, like SVE or xTP tuning, it is the responsibility of those entities to ensure that the tuning parameter values remain within the valid range as mentioned in the Audio Object Description User Guide.

The audio objects are categorized into the following groups in the GTT.

Rate Control

The Rate Control audio object controls the rate at which control signals can pass through the object. This is implemented by blocking the controls for a duration that is specified as a tuning parameter.

Rate control Properties

Below table describes the audio object properties and functionalities.

Properties Description
Number of controls Enter the number of control inputs.

The number of control outputs is always 2. The index of the pin (which receives the first control signal) is sent out on the left output pin first and then the control signal itself is sent on the right output pin.

  • Range: 1 to 255
  • Data type: xFloat32
  • Default: 1
Display Name Display name of the Rate control audio object in signal flow design. It can be changed based on the intended usage of the object.

Mode

There are currently no modes available for the Rate control audio object.

Additional parameters

There are no additional parameters available for the Rate control audio object.

Tuning Parameters

There are blocking times associated with each control input pin which could be changed as a tuning parameter.

Parameter Description Data Type Range Default Unit
BlockingTime Time for which any new control signal is blocked xFloat32 0 – 60 0 seconds

Control Interface

There are no control parameters available for the Rate control audio object.

Native Panel

Rate control audio object does not support a native panel.

Lookup Table (LUT) Panel

LUT object supports native panel.  Double-click on the LUT object to open the native panel. Set the values accordingly.

Redo/Undo: The redo and undo functions enable you to rollback or repeat the modifications made to panel cell values, units, minimums, and maximums.

Customizable Axis Label: The customizable axis label allow to change the axis label name. Double-click on axis label will show textbox where you can change axis label name.

FastConv Panel

Fast Conv filter native panel allows you to configure the Mode of each enabled filter and to load coefficients as well. In order to see the graphs, you need to import coefficients. Use ‘Import’ or ‘Import All’ option  to import coefficients.
To open the native panel, double-click on the Fast Conv filter audio object in the signal flow designer.

Amplitude/Phase: When the coefficients are given and “Amplitude/Phase” option is selected, the graph display the value.

Coefficients:  When the coefficients are given and the “Coefficients” option is selected, the graph displays the values as per below figure. You can change the graph style using the “Chart Style” option.

Line chart style: when “Chart Style” selected as Line, the Coefficients graph.
Dot chart style: when “Chart Style” selected as Dot, the Coefficients graph.

Group Delay: When the coefficients are given and “Group Delay” option is selected, the graph display the values.

Curves Legend: This option allows you to show the details of which graph tab (Amplitude/Phase, Coefficients, Group Delay) is selected.

On the selection of Amplitude/Phase graph tab Curves Legend will show below information. A screenshot of a computer Description automatically generated
On the selection of Coefficients graph tab and Chart Styles ‘Dots’, Curves Legend will show below information. A screenshot of a computer Description automatically generated
On the selection of Coefficients graph tab and Chart Styles ‘Line’, Curves Legend will show information. A screenshot of a graph Description automatically generated
On the selection of Group Delay graph tab, Curves Legend will show information. A screenshot of a computer program Description automatically generated

Additional Functionalities

  • Flat: This is used to make the graph flat by making coefficients to 0.
  • Import: This function is used to import the coefficients for a single active filter. Click the “Import” button, then enter the file path and click Ok.
    All coefficients for the selected filter will be imported, as shown in the graph. If the number of coefficients does not match the number of taps as shown in the screenshot below, a warning pop up will appear. Click ‘Yes’ to import available coefficients or click ‘No’ to cancel the import.
  • Export: This option is used to export coefficients for selected active filter into csv file.
  • Export All: This option is used to export all active filters in one go. Click the “Export All” button, then enter the path and file name, then click Ok. A xml file will be created which will have coefficients for each active filter. 
  • Import All: This option is used to import all coefficients in one go. Click the “Import All” button, then enter the XML file path and click Ok. All the given coefficients will be imported and can be seen in the graph. 
  • Read:  This is used to read from the target to display in the panel.
  • Send: This is used to send the values changed in panel to target.

Control Router panel

The Control Router audio object supports native panel. The native panel window is a dynamic native panel. Panel get adapted in size based on the Router AO configuration. 

By default, all outputs are disconnected.

Every output has an input that can be configured. More than one output can be assigned to a single input signal.
It is possible that some input signals are not assigned to any output.

Additionally, this panel enables to store presets for specific configuration.

Name of preset is configurable in separate window after click Store button:

Control Mixer panel

The Control Mixer object supports native panel. The native panel window consists of rows and column. The number of row and column depends on “number of control inputs and outputs” configured. 

In Non Weight Mode, table cells can have only two values 0 or 1.

In Weight Mode, table cells can have values from 0 to 1.

Control Mixer supports copy-pasting values from and into Excel sheets.

You can store the specific configuration and recalled via Store Preset option available on the panel. Configure the tuning parameters and select the free preset slot numbers, enter the name of the slot, and click Store preset. This saves and stores the current tuning data to the selected slot.

If you do not enter a name of the slot, then it will take the default named “New Preset”.

You can switch between presets slots and apply their values by simply clicking on them. Additionally, after clicking to override the preset, you can modify the tuning values in that tab or change the preset name.

To reset the selected preset or all the preset values.

  • Click Reset Selected to clear the preset that is currently selected.
  • Click Reset All to clear every preset in the corresponding native panel.

VolumeLite

The purpose of the VolumeLite audio object is to control the volume in the audio pipeline. The VolumeLite audio object is lightweight and different from the “Volume Mute” AO. The object can alter the output volume by either attenuating or amplifying the audio.
This audio object supports ramping and each channel has its own set of – state variables as well as ramping parameters.

Use Case: The object can be used to control the volume of an audio channel.

VolumeLite Properties

Below table describes the VolumeLite audio object properties and functionality.

Properties Description
# of Channels In SFD, the number of channels is specified, and the number of input channels is equal to the number of output channels.

  • Range: 1 to 128
  • Default: 1
Block Control The object supports Block Control when the object is configured with more than one channel. It has one block control input which controls the output volume of which size is equal to the number of channels configured for the audio object. Block Control is enabled by default and cannot be disabled.

Mode

There are no mode available for VolumeLite audio objects.

Additional Parameters

Parameter Description
Boot Level It specifies the required volume level at boot time when configured. It is applicable for all the channels.

Range: -128 dB to +20 dB.

Default: 0 dB

Tuning Parameters

The following are the tuning parameters that can be configured from GTT.

Parameters Description Range Default Data Type
Ramp Up Time Ramp up time in ms per channel. 0 to 1000 ms 5 ms Float
Ramp Down Time Ramp downtime in ms per channel. 0 to 1000 ms 5 ms Float
Ramp Shape The shape of the volume will change accordingly once it is triggered and applied across all channels.
  • Linear
  • Exponential
Linear ULong
Volume Volume to be applied per input channel -128 to 20 dB 0 dB Float

All the channels can be tuned with one command as all are in the same subblock compared to the Volume Mute object.

Control Interface

The Volume control is triggered whenever a control message is addressed to the audio object. Block Control is deployed only when the object has more than one channel. It has one block control input, the size of which is equal to the number of channels configured for the audio object.

Parameters Description Range Unit
Volume Volume to be applied per input channel -128 to 20 dB dB

Native Panel

The native panel for the VolumeLite audio object is under development.

Fader Matrix

The FaderMatrix audio object is used to calculate the weighted output based on a combination of input audio where the weighting factors are provided as control input.

Use Case: The FaderMatrix takes in a configurable number of input, output and control channels. Each output of this object is a weighted sum of all the input channels where weighting factors can be tuned from control inputs.

Fader Matrix Properties

Below table describes about the FaderMatrix audio object properties and functionality.

Properties Description
# of Audio In Number of input channels.

  • Range: 1 to 64
  • Default: 2
# of Audio Out Number of output channels.

  • Range: 1 to 64
  • Default: 2
# of Elements Number of Control Inputs.

  • Range: 0 to 64
  • Default: 0
Display Name Display the name of the FaderMatrix audio object in signal flow design. It can be changed based on the intended usage of the object.

Mode

There are no modes available for FaderMatrix audio object.

Additional Parameters

The FaderMatrix audio object can be configured with the following additional parameter:

Parameters Description
Gain Type The audio object has an additional configuration ‘Gain Type’ to specify the weighting factors scale.

  • 0 – Linear [default]: Weights are configurable in a linear scale in the range of -100 to 100.
  • 1 – Logarithmic: Weights are configurable in a logarithmic scale in the range between -128 to 40 dB.

Tuning Parameters

The FaderMatrix audio object has one control index tuning parameter for each input channel that will used to compute the output of each channel. Thus there will be NumInputs * NumOutputs control indices (tuning parameters).

When the control index is set to zero, none of the control inputs will be used and this particular input will not be considered for computation of that particular output

Parameter Description Range Unit
Control Index Index of the control input for selecting weight factor for each input and output combination. 0 to NumElements None

Control Interface

The FaderMatrix control is triggered whenever a control message is addressed to the audio object. The FaderMatrix audio object has configurable control input pins for weighting factors.

Parameter Description Gain Type Data Type Range Default Unit
Weighting Factor Weight factor for each input and output combination. Linear Float -100 to 100 0 None
Logarithmic Float -128 to 40 -128 dB

Native Panel

The FaderMatrix AO does not support native panel.