Fork me on GitHub

Jonty Harrison's Voyages - ATK in action!
Posted by

alt text

Jonty Harrison’s latest CD, Voyages, is now out. The liner notes include a very brief note describing how this all came about and the involvement of the Ambisonic Toolkit. The big question being, “How to successfully ‘down-mix’ Harrison’s (very-)multi-channel Espaces cachés and Going / Places to two channel stereo for CD release?” You know the answer to this one: Use the ATK!


Some (Spatial) problems and (Spatial) solutions

The big problem: Espaces cachés and Going / Places are composed for large loudspeaker arrays. (32 channels!) That’s great if you’ve got a big room like a concert hall to fill. But what about squeezing down to stereo?

Sensibly, the speakers can be be grouped into ‘spatial stems’ according to their role in the pieces. E.g., of the 32 channels the array for Espaces cachés, there are three 8 channel sub-groups: distant, main, and close. In concert, the speakers for each of these sub-groups are placed in the actual space accordingly. For the CD mix, we’ve got to somehow reproduce this impression. But, just modeling the space (via designed or measured RIRs) isn’t going to do the right thing. That would end up sounding like ‘adding reverb’ to the mix… not good!

The answer, of course, is to model the spatial impression, instead. For each ‘spatial stem’, we apply a different spatial filter set. The processing for the above sub-groups can be summarized as:

  • distant: diffusion filtering
  • main: mid-field proximity filtering
  • close: near-field proximity filtering

Details are slightly more complicated, of course, but the idea is to use the ATK’s spatial filtering / processing to express the intended role of each spatial stem. If we’ve got it right, we should hear the layering intended by the composer in the UHJ stereo mix. (Yeah… we got it right!)


How to Listen?

By design, Ambisonic UHJ Stereo is stereo compatible. Listening over your own stereo system, it’ll sound great. (This is one of the aspects of working with Ambisonics I find so convenient, auto-magic stereo down-mix.) But what about hearing Harrison’s Voyages in full surround-y gloriousness?

If you haven’t done so already, follow the installation instructions for ATK for SuperCollider and / or ATK for Reaper. You’ll then need to set up a signal chain where you:

  1. Encode: from UHJ Stereo to B-format
  2. Decode: from B-format to your favorite loudspeaker array

If you’ve got quad, use the quad decoder. If you’ve got 5.0, use the 5.0 decoder. If you’ve got a cube of eight speakers, use the periphonic decoder. If you’ve got headphones (who doesn’t), try the binaural decoder. You get the picture.

Here’s a very simple example from the Help for ATK for SuperCollider. You won’t exactly want to do it this way because the below code loads the complete file into memory. Instead, use DiskIn.ar to stream in audio from a file.

// encoding a UHJ file to B-format, then decoding through an HRTF decoder
(
var cond;
s.boot;
cond = Condition.new;
s.waitForBoot({
    Routine.run({
        ~encoder = FoaEncoderKernel.newUHJ;
        ~decoder = FoaDecoderKernel.newListen(1013);
        ~sndbuf = Buffer.read(s, Atk.userSoundsDir ++ "/uhj/Palestrina-O_Bone.wav");
        s.sync(cond);
        SynthDef(\kernelEncodeDecode, {arg buffer;
            var out, src, encode;
            src = PlayBuf.ar(2, buffer);
            encode = FoaEncode.ar(src, ~encoder);
            out = FoaDecode.ar(encode, ~decoder);
            Out.ar(0, out);
        }).add;
        s.sync(cond);
        Synth(\kernelEncodeDecode, [\buffer, ~sndbuf]);
        // press command period when done
        CmdPeriod.add({~encoder.free; ~decoder.free; ~sndbuf.free});
    })
})
)

As a side note, you’ll be interested to hear that all the processing was done with the vapour-ware HOA version of the ATK. (We should really call it the super secret development version.) The mix was made in NFC-HOA5.