Binaural rendering with Jconvolver


This tutorial describes how to render the Ambisonic signals through headphones via binaural convolution.

The principle is as follows: Instead of sending the decoded signals to real loudspeakers, the signals are convolved with the Head Related Impulse Response (HRIR) of each loudspeakers with both ears and summed to obtain two signals : one for the left hear and one for the right ear.
This technique allows to use the flexibility of Ambisonics to render a three dimensional surround sound scape through headphones.

Figure 1: The virtual source (red dot) is reproduced with Ambisonics on the spherical loudspeaker array. Each virtual loudspeaker (color balls) radiates a driving signal. The binaural rendering is made by convolving for each loudspeaker the driving signal with the corresponding head related impulse response: between the loudspeaker and the ear (manikin in grey).

The result should be as is you were standing in a spherical loudspeaker array in place of the manikin in Fig. 1.

In addition of head tracking, the movement of your head could be tracked and use to rotate in consequence the Ambisonic sound scene. Thus, you would be as the manikin in grey in Fig 1. but free to rotate the head.

Head Related Transfer Functions (HRTF) are the frequency-domain equivalent of time domain HRIR. Since HRTF depend strongly on the head and torso geometry, each HRTF set is personal and the binaural immersion relies a lot on it. This means that if you’re not using your own set of HRTF the result may be not as immersive as if you were really standing in a spherical array of loudspeakers.

HRTF set

For the moment, only one set of HRTF is available with ambitools. This set is taken from reference [1] and it’s under a Creative Commons CC BY-SA 3.0 license the raw content is available here

It corresponds to the HRTF of a Neumann KU-100 dummy head in anechoic environment with Genelec 8260A loudspeaker, as shown on Fig. 2. The array we use here is a Lebedev grid with 50 loudspeakers which is able to works for 3D ambisonics up to order 5 [2].

Figure 2 : The HRTF set from [1] are obtained for a Neumann KU-100 dummy head and Gelenec 8260A loudspeaker.  Credit photo : Philipp Stade

Using Jconvolver under Linux with Jack

Jconvolver runs with a configuration file and associated filters impulse responses stored in wav files. To run the real-time multichannel convolution, follow the following steps:

  • The HRIR set is stored in ambitools in folder FIR/hrir/hrir_lebedev50/. For each virtual loudspeaker there is a left-ear right-ear pair of wav files. For example, 1st loudspeaker pair is named as hrir_1_L.wav for 1st loudspeaker on left-ear and hrir_1_R.wav for 1st loudspeaker on right-ear, and so on.
  • The configuration file is in the same folder: hrir_lebedev50.conf. Open a text editor to replace the line
    #/cd /put/here/your/absolute/path/to/ambitools/FIR/hrir/hrir_lebedev50/

    with the actual absolute path to the folder with the wav files.

  • Once the file is correctly set save it and just run the following command in a terminal in the directory hrir_lebedev50:
    $ jconvolver hrir_lebedev50.conf

    When the convolution has started you should see a jack client with 50 inputs (50 loudspeakers signals) and 2 outputs (left and right headphone channels).

  • Finally, connect the decoder outputs hoa_decoder_lebedev50 to inputs of jconvolver. You can do it manually with your jack connection manager or by the following command in a terminal:
    $for i in `seq 0 49`; do jack_connect "hoa_decoder_lebedev50:out_$i" "jconvolver:In-$((i+1))";done;

    (note that this command can be found in the jack_connect_help file in folder Documentation of ambitools). The outputs of jconvolver can be connected to the outputs of your sound card and listened through headphones. The resulting connections in Claudia (KXStudio LADISH session manage) are visible in Fig. 3:

Connection for jconvolver in Claudia
Connection for jconvolver in Claudia

As in [1] the experimental setup involves a loudspeaker at radius 3.25 m from the center of the dummy head, this value should be reported in hoa_decoder_lebedev50 for near field compensation.


[1] B. Bernschütz, “A spherical far field hrir/hrtf compilation of the neumann ku 100,” in Proceedings of the 40th Italian (AIA) Annual Conference on Acoustics and the 39th German Annual Conference on Acoustics (DAGA) Conference on Acoustics, 2013, p. 29.

[2] P. Lecomte, P.-A. Gauthier, C. Langrenne, A. Garcia, and A. Berry, “On the use of a Lebedev grid for Ambisonics,” in Audio Engineering Society Convention 139, 2015.