Beginner ambisonics questions

hi all

a friend send me a recording using an ambisonics mic [sennheiser ambeo]. i want to:

  1. listen on speakers and headphones [sennheiser hd25]
b.free;
b = Buffer.read(s, "/home/igor/0.WAV");

~dec = FoaDecoderMatrix.newStereo(angle: 110.degrad/2, pattern: 0.5);

(
SynthDef(\amb, {
	var sig;
	sig = PlayBuf.ar(4, b, BufRateScale.ir(b));
	sig = FoaDecode.ar(sig, ~dec);
	Out.ar(0, sig);
}).play
)

which angle & pattern for this mic should i choose on decoder?
how can i listen in binaural?
should i have to make transformations [encode>transform>decode]?
or choose another decoder for this?

  1. how can i render (nrt) a file from both (stereo/binaural)?

thx in advance!

Personally, I always use VSTPlugin (Releases · Pure Data libraries / vstplugin · GitLab) + IEM plugin suite (https://plugins.iem.at/)

Here’s an example of a Synth that reads from an ambisonic bus and outputs a binaural stereo signal:

VSTPlugin.search; // search for plugins (only really needed for the first time)

(
~numChannels = 16; // set to number of ambisonic channels
~ambiBus = Bus.audio(s, ~numChannels);

// SynthDef for a binaural decoder
SynthDef(\binaural, { |in, out|
	var sig = In.ar(in, ~numChannels);
	sig = VSTPlugin.ar(sig,  2);
	Out.ar(out, sig);
}).add;
)

(
// create Synth and open plugin
~synth = Synth(\binaural, [ in: ~ambiBus, out: 0 ]);
~ctl = VSTPluginController(~synth).open("BinauralDecoder");
)

// choose input normalization
~ctl.set(1, 1); // set to SN3D (= default)
~ctl.set(1, 0); // set to N3D

~ctl.editor; // or set in the GUI

Then you just need to play your soundfile to the ~ambiBus (before the \binaural Synth).

Of course, you can put everything in one SynthDef, but conceptionally I find it cleaner to separate the two. After all, the decoder is typically permanent whereas the sound sources may come and go.

Hello @igormpc, welcome to the exciting world of SuperCollider + Ambisonics!

To start, if you haven’t already, you may like to review Eli Fieldsteel’s SuperCollider Tutorial: 31. Ambisonics.


The very first thing you’ll want to do is to confirm that the soundfile you have from the Sennheiser AMBEO mic has been converted from the four tetrahedral microphone feeds (aka a-format) into b-format.

If yes, you’ll then want to confirm whether it has been converted to ambiX OR classic FuMa encoding. (The Sennheiser plugin allows both options for encoding.)

Once you’ve confirmed the encoding, you’ll then be able to leverage the appropriate tools found in the ATK.


The ATK’s FOA toolset (along with SuperCollider’s inbuilt Ambisonic UGens) works with classic FuMa encoded signals. If your AMBEO file is in ambiX encoding, you’ll need to transcode to FuMA to use FoaDecode, etc.

Here’s a snippet that would do that job:

~myFoa = FoaEncode.ar(~myAmbiX, FoaEncoderMatrix.newAmbix1);

Answers to your specific questions:

which angle & pattern for this mic should i choose on decoder?

Have a look at the documentation here. We’ve listed a number of different standard stereo microphone options. You might start with cardioids at 131 degrees. (This stereo mic visualization tool is fun!)

how can i listen in binaural?

Eli Fieldsteel’s Tutorial: 31. Ambisonics includes a brief review.

AND, here’s an example of binaural FOA decoding.

should i have to make transformations [encode>transform>decode]?

The (FOA) transforms are spatial filters. If you just want to audition the file as originally recorded, you don’t need to do so.

On transform you might like to use could be a rotation, as this will re-aim the microphone.

how can i render (nrt) a file from both (stereo/binaural)?

Have a look at this page.

Hope this helps… have fun!!!

2 Likes