Transforming FOA:
Filter:
atk-sc3/Guides (extension) | Libraries > Ambisonic Toolkit > Guides & Tutorials

Transforming FOA
ExtensionExtension

First Order Ambisonic (FOA) transforming examples
 

Imaging

For the artist, the real power of the ATK is found in the imaging transforms. These are spatial domain filters which reorient, reshape or otherwise spatially filter an input soundfield. Many users will be familiar with the soundfield rotation transform, as SuperCollider provides the inbuilt Rotate2.

The ATK provides a much wider and comprehensive toolset, including:

Imaging tools are provided in two forms: static and dynamic implementations. While most transforms are provided in both categories, a number are found in only one guise.1

The examples below are intended to briefly illustrate some of the first order tranform options made available in the Ambisonic Toolkit.

NOTE: See FoaTransform, FoaXform and FoaXformerMatrix for more details regarding FOA imaging.

________________

NOTE: The text immediate below follows a workflow in explicit sclang. For a quick review, you may prefer to jump below to try the included transform audition and visualization utilities.

Choose a decoder

With the examples below, we'll start by first choosing a suitable decoder with with to audition.

Choose a decoder suitable for your system, as discussed here. You'll end up definining ~decoder and ~renderDecode .

NOTE: If you choose a kernel decoder, FoaDecoderKernel, be sure to free the kernel after use.

Dynamic examples

Dynamic transforms are rendered via UGens accepting continuously varying arguments. The below examples use the FoaTransform wrapper as a convenience. Users may choose to employ the underlying wrapped UGen, as desired. These are noted for each example below.

Rotate

Rotation is one of the most used soundfield transforms. In this case we'll it to centre the subject of a field recording.

The soundfield is controlled by MouseX, which specifies the rotation angle (pi to -pi; left to right of display).

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: A UGen type transformer, see FoaRotate for further details.
NOTE: Soundfile Credits

DominateX

Dominance specified in gain is a classic Ambisonic production technique. Here we apply gain across the X axis. With these example recordings, we adjust both the stage width and the subject to reverb balance.

The soundfield is controlled by MouseY, which specifies the dominance gain (4.5 dB to -4.5 dB; top to bottom of display).

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: A UGen type transformer, see FoaDominateX for further details.
NOTE: Soundfile Credits

Focus

Here we encode four channels of decorrelated and comb filtered PinkNoise as a decorrelated soundfield, resulting in a maximally diffuse soundfield. FoaFocus is used to "focus" on various parts of the soundfield. At extremes, it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a diffuse soundfield.

The soundfield is controlled by MouseX and MouseY, where MouseX specifies the incident azimuth angle (pi to -pi; left to right of display) and MouseY the FoaFocus angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: A UGen type transformer, see FoaFocus for further details.

Push and RTT

Here we encode four channels of Klank resonated Dust from A-format. FoaPush is used to "push" the soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a spatially active soundfield. Additionally, FoaRTT is used to continuously reorient the granular stream so that individual A-format directions don't predominate, and the complete soundfield is filled with activity.

The soundfield is controlled by MouseX and MouseY, where MouseX specifies the incident azimuth angle (pi to -pi; left to right of display) and MouseY the FoaPush angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformers, see FoaPush and FoaRTT for further details.

Push and RTT with newSpread

Here we encode the mono component of a stereo soundfile via the FoaEncoderKernel: *newSpread encoder. FoaPush is used to "push" the soundfield so that it becomes a planewave (infinite distance, in an anechoic environment) arriving from some direction. This technique gives the opportunity to continuously modulate between a directional and a spatially spread soundfield. Additionally, FoaRTT is used to continuously reorient the frequency spread soundfield so that individual frequencies are moved throughout the space, and the complete soundfield is constantly in motion.

The soundfield is controlled by MouseX and MouseY, where MouseX specifies the incident azimuth angle (pi to -pi; left to right of display) and MouseY the FoaPush angle (0 to pi/2; bottom to top of display). With the mouse at the bottom of the display, the soundfield remains decorrelated. Placed at the top of the display, the soundfield becomes directional, and varying left/right position will vary the incident azimuth of the resulting planewave.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformers, see FoaPush, FoaRTT and FoaEncoderKernel: *newSpread for further details.

FocusX, ZoomX & PushX

With this example we encode four channels of comb filtered Dust as planewaves arriving from the cardinal directions. FoaFocusX, FoaZoomX and FoaPushX are used to distort the soundfield. At extremes, encoded planewaves are distorted to arrive from the same direction. This example allows one to compare these transforms on the x-axis.

The soundfield is controlled by MouseY, with angle varying between -pi/2 and pi/2. With the mouse in the centre of the display, the soundfield remains unchanged. Placed at the top or bottom of the display, the soundfield is distorted.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformers, see FoaFocusX, FoaZoomX & FoaPushX for further details.

Balance and Asymmetry

With with the above example we encode four channels of comb filtered Dust as planewaves arriving from the cardinal directions. FoaZoomY and FoaAsymmetry are used to distort the soundfield. At extremes, encoded planewaves are distorted to arrive from the same direction. This example allows one to compare these transforms on the y-axis.

The soundfield is controlled by MouseX, with angle varying between -pi/2 and pi/2. With the mouse in the centre of the display, the soundfield remains unchanged. Placed at the left or right of the display, the soundfield is distorted.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformers, see FoaZoomY and FoaAsymmetry for further details.

Proximity

FoaProximity facilitates the introduction of the proximity effect to encoded signals. At extremes, the proximity effect introduces a strong bass boost, as well as phase differences. The proximity effect can be an important contributor to perceptions of nearness.

The soundfield is controlled by MouseY, with distance varying between 0.05 and 0.5 meter. With the mouse at the bottom of the display, the soundfield receives the strongest effect, contributing to as sense of nearness.

WARNING: As FoaProximity includes a 1st-order integration, signals must be highpass filtered before application. HPF is usually a suitable choice to control low frequency boost.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformer, see FoaProximity for further details.

NFC

FoaNFC facilitates the reduction or removal of the proximity effect from encoded signals. The proximity effect can be an important contributor to perceptions of nearness.

The soundfield is controlled by MouseY, with distance varying between 0.5 and 0.05 meter. With the mouse at the top of the display, the soundfield receives the strongest effect (removal), contributing to as sense of distance.

If you haven't already choosen a ~decoder and defined ~renderDecode, do so now.

NOTE: UGen type transformer, see FoaNFC for further details.
NOTE: Soundfile Credits

Static examples

Rather than using the UGen wrapper FoaTransform to render dynamicly changing spatial filtering, as above, FoaXform is used to render the transform specified by FoaXformerMatrix, which returns a fixed spatial filtering matrix.

This functionality is provided to complete the matrix processing paradim of the ATK.

Rotate

Rotation is one of the most used soundfield transforms. In this case we'll it to centre the subject of a field recording.

If you haven't already choose a ~decoder and defined ~renderDecode, do so now.

NOTE: A matrix type transformer, see FoaXformerMatrix: *newRotate for further details.
NOTE: Soundfile Credits

MirrorO

In mirroring through the origin and delaying the soundfield, we can generate a new set of echos in this fireworks field recording.

If you haven't already choose a ~decoder and defined ~renderDecode, do so now.

NOTE: A matrix type transformer, see FoaXformerMatrix: *newMirrorO for further details.
NOTE: Soundfile Credits

DominateX

Dominance adjusts the gain of a soundfield in a particular direction. Here we'll increase the amount of reverberation in this natural soundfield recording. As the image is warped at the same time, we'll also hear the frontal stage widen.

If you haven't already choose a ~decoder and defined ~renderDecode, do so now.

NOTE: A matrix type transformer, see FoaXformerMatrix: *newDominateX for further details.
NOTE: Soundfile Credits

Transform utilities

The ATK includes the following useful transform audition and visualization utilities:

FoaAudition
Audition FOA recordings, panning planewaves, diffuse soundfields, and transforms
FoaXformDisplay
Visualize, audition and customize FOA soundfield transforms

These tools offer a very quick and convenient way to become familiar with the ATK's imaging tranforms. You might like to start with the visualizer, FoaXformDisplay, as a quick way to understand transformer parameters change a soundfield.

[1] - It is also useful to note that the dynamic transforms are also available as individual UGens. However, users are advised to use FoaTransform for convenience.