Skip to Content

Rendering Ambisonic Soundfields in MetaSounds

This guide demonstrates how to use the Ambisonic Renderer in MetaSounds to render Ambisonic soundfields and dynamically control the listener and source rotations in order to make the rendering react to their relative orientations.

The parameter update technique demonstrated in this guide can be used to control other parameters as well, like the headlocked mode, the output format (binaural vs. stereo), or parameters of the Spatializer node.

Prerequisites

This guide assumes that you are familiar with the basics of MetaSounds and Unreal Engine. Make sure you have installed atmoky TrueSpatial following the installation instructions.

In order to hear the spatialization effect, you will need a pair of headphones. You will also need a First Order Ambisonics audio file in ambiX format (ACN/SN3D) to use as the soundfield.

Adding a MetaSound Source

As a first step, we will create a MetaSound source that will be used to playback the Ambisonic soundfield using a Wave Player and route the audio into the Ambisonic Renderer.

In the Content Browser of your Unreal Engine project, right-click and select SoundsMetaSound Source to create a new MetaSound Source asset. Name it AmbisonicSource and double-click to open it.

The first thing we need to do is make the source play stereo audio. For this, click the MetaSound button and set the Output Format to Stereo. The canvas should now show two Output nodes: left and right.

Next, we will add a Wave Player node to the canvas. Right-click on the canvas and search for Wave Player and select the Wave Player (4.0, Quad) version. This node will be used to output the four channels of the Ambisonic soundfield. In its Wave Asset parameter, select your Ambisonic soundfield file. To make the player start playing automatically, connect the On Play input node to the Play input of the Wave Player. To make the patch happy, also connect the On Finished outlet to the On Finished output of the MetaSound patch.

Your patch should look like this:

Ambisonic Source Patch

Next, we want to route the output of the Wave Player into the Ambisonic Renderer. Right-click on the canvas and search for Ambisonic Renderer and select it. Connect the four output channels of the Wave Player to the inputs of the Ambisonic Renderer.

Finally, connect the two output vertices of the Ambisonic Renderer to the left and right output nodes of the MetaSound Source.

The updated patch should look like this:

Ambisonic Source Patch with Ambisonic Renderer

At this stage, you can preview the sound by clicking the Play button in the MetaSound Source asset. Per default, the sound will be played back binaurally, so make sure to use headphones. You can also change the rendering format to stereo by expanding the Ambisonic Renderer node and setting the Output Format to Stereo.

Adding MetaSound Source to the Scene

The quickest way to add out Ambisonic Source to the scene is to drag and drop the MetaSound Source asset from the Content Browser into the scene. For a static source that would be just fine, however, as we want to control the rotation of the source and listener dynamically, we will wrap the MetaSound Source in a Blueprint Actor.

Right-click in the Content Browser and select Blueprint Class, select Actor and name it AmbisonicSourceActor. Open the Blueprint by double-clicking on it.

From the Content Drawer, drag and drop the AmbisonicSource MetaSound Source asset into the Blueprint’s Components list in the upper left corner. For visualization we want to add a Cube component to the Blueprint. Click the Add Component button and search for Cube and select it.

The component tree should look like this:

Ambisonic Source Actor Blueprint Component Tree

Close the Blueprint and drag and drop the AmbisonicSourceActor Blueprint into the scene. You can now move the Cube around to position the source in the scene.

Hit Play to hear the Ambisonic soundfield being rendered in the scene.

You will notice that the sound is static and does not change when you rotate the Cube or the listener. In the next section, we will add controls to dynamically update the source and listener rotations.

Updating Source and Listener Rotations

Adding Rotation Parameters

To make the soundfield react to the relative orientation of the source and listener, we will first set up our MetaSound source to receive the necessary parameters.

Open the AmbisonicSource MetaSound Source asset and add 6 new input parameters by clicking the + button next to the Inputs list in the upper left corner. Name them:

  • SourceYaw
  • SourcePitch
  • SourceRoll
  • ListenerYaw
  • ListenerPitch
  • ListenerRoll

These parameters will be used to control the yaw, pitch, and roll of the source and listener, respectively. Per default, the parameters will be Floats which is fine for our use case.

We will first connect the Source rotations to the Ambisonic Renderer. To do this, drag the SourceYaw, SourcePitch, and SourceRoll parameters from the Inputs list to the canvas. We need to combine them into a Rotation object before we can feed them into the Ambisonic Renderer. Right-click on the canvas and search for atmoky Rotation and select it. Connect the three parameters to the Rotation node and connect the output of the Rotation node to the Source Rotation input of the Ambisonic Renderer.

If you want to preview the rotation effect, change the range of the parameters to -180 to 180 degrees. You can now adjust the values while the sound is playing. The soundfield rendering should now change as you rotate the source.

Perform the same steps for the Listener rotations. Drag the ListenerYaw, ListenerPitch, and ListenerRoll parameters to the canvas, combine them into a Rotation object, and connect the output to the Listener Rotation input of the Ambisonic Renderer.

The updated patch should look like this:

Ambisonic Source Patch with Rotation Parameters

Updating the Source Rotation

To control the rotation of the source soundfield by rotating the Source Actor in the scene, we need to add some Blueprint logic to update the rotation parameters of the MetaSound Source.

⚠️

In the next steps, you might want to deselect the “Context Sensitive” option in the Blueprint Editor’s search bar to see all available nodes.

Open the AmbisonicSourceActor Blueprint. To retrieve the current rotation of the Actor, right-click and search for Get Actor Rotation and select it. The output will hold all three rotation values: yaw, pitch, and roll. In order to access the individual values, drag the Return Value outlet to the canvas and search for Break Rotator. This will split the rotation into its individual components.

Next we need to update the MetaSound Source parameters. Drag the AmbisonicSource component from the Components list to the canvas. That’s the target of our parameter update. Right-click on the canvas and search for Set Float Parameter and select it. Make sure to select the one with the Target is Audio Component tooltip. Connect the AmbisonicSource with the Target input, set the In Name to SourceYaw and connect the Yaw output of the Break Rotator node to the In Value input.

Repeat the same steps for the SourcePitch and SourceRoll parameters.

In order to actually trigger the parameter update, we need to connect the Event Tick node to the Set Float Parameter nodes. We can do this with help of a Sequence node. Add a Sequence node to the canvas and connect the Event Tick to the Execute input of the Sequence. Connect the Set Float Parameter nodes to output pins of the Sequence.

The updated Blueprint should look like this:

Ambisonic Source Actor Blueprint with Source Rotation Parameters

This will update the parameters every frame. You can now go back to the scene and rotate the AmbisonicSourceActor to see/hear the soundfield react to the rotation.

Updating the Listener Rotation

As we haven’t connected the Listener rotation parameters to the Blueprint yet, the soundfield will not react to the rotation of the listener. To do this, we need to add the same logic as we did for the Source rotation, but we will use the Get Player Pawn node to retrieve the rotation of the player character.

After completing the previous steps for the Listener rotation, the Blueprint should look like this:

Ambisonic Source Actor Blueprint with Source and Listener Rotation Parameters

You can now rotate the player character in the scene to see/hear the soundfield react to the rotation.

In case you don’t get Listener rotation updates, you might want to use the Get Player Camera Manager node instead of the Get Player Pawn node to retrieve the camera rotation.

Last updated on

We use cookies to measure and improve your browsing experience, and serve personalized ads or content.