Previous: Exercise_02_HOA_converting_SN3D_N3D_FuMa
Next: Exercise_04_HOA_plane_versus_spherical_waves
Having mostly looked at HOA B-format multichannel signals so far, this exercise is about listening to them. To this end, the HOA library provides 3 different spherical decoders based on Lebedev grids.
HOADecLebedev50
The basic decoder (mode-matching) for Lebedev grid with 50 nodes, is working up to order 5 [1]. Possibility to choose with or without near-field compensation [2].
[1] Lecomte, P., Gauthier, P.-A., Langrenne, C., Garcia, A., & Berry, A. (2015). On the use of a Lebedev grid for Ambisonics. In Audio Engineering Society Convention 139. New York.
[2] Lecomte, P., & Gauthier, P.-A. (2015). Real-Time 3D Ambisonics using Faust, Processing, Pure Data, And OSC. In 15th International Conference on Digital Audio Effects (DAFx-15). Trondheim, Norway.
Lebedev Grids https://en.wikipedia.org/wiki/Lebedev_quadrature. are equidistant points on a sphere, in the case of a decoder they correspond to virtual speaker positions. Each signal of the virtual speakers is then convolved with corresponding HRIR kernels to yield two headphone signals.
Further down you also find a HOA binaural decoder that implements symetrized KU100 IRs.
HOABinaural
They were created using KU100 HRIR measurements presented in [1] and the rendering approach proposed in [2].
[1] Bernschütz, Benjamin. "A Spherical Far Field HRIR/HRTF Compilation of the Neumann KU 100", Proceedings of the 40th Italian (AIA) Annual Conference on Acoustics and the 39th German Annual Conference on Acoustics (DAGA) Conference on Acoustics. 2013. http://audiogroup.web.th-koeln.de/ku100hrir.html[2] Schoerkhuber, Christian; Zaunschirm, Markus; Hoeldrich, Robert. "Binaural Rendering of Ambisonic Signals via Magnitude Least Squares", Fortschritte der Akustik, DAGA, 2018
For the headphone correction filters: The impulse responses were created by Benjamin Bernschuetz. [1] Bernschuetz, B. (2013. A Spherical Far Field HRIR/HRTF Compilation of the Neumann KU 100. AIA-DAGA 2013 Merano. http://audiogroup.web.th-koeln.de/ku100hrir.html
The examples below show how to monitor the playback of HOA b-format via headphones.
In case you have not done so yet: let's start the sound server, which we configure first to get more audio buses and 36 output channels
Start the oscilloscope showing all the channels for the selected order of the b-format.
Let's make a node that generates a HOA signal ( white noise ) control the direction with the mouse. we won't see it since we don't monitor it.
Now let's make a node that can take in (multichannel) HOA signals.
Still we don't see anything yet in the scope because ~hoaSignal and ~decoder are not connected yet.
Now you see in the scope the B-format from ~hoaSignal going untransformed through ~decoder. Here is where the advantages of proxyspace with Ambisonics come is handy. Lets change the NodeProxies one step at a time. First the ~hoaSignal itself:
Then the decoder, first we decode into a Lebedev Grid with 26 positions, which is enough points for order 3:
Now let's load HRIR filters for each of the 26 channels. You can find these filters inside the resource/
directory.
To load the HRIR filters, execute the following:
This is likely quite heavy on the CPU, because it means 26 * 2 convolutions with an FFT. For monitoring purposes you might want to listen to the first order, for which you can use HOADecLebedev06. which results in 12 FFT convolutions.
Now you might want to change the HOA signal again to hear something. Watch the phase and amplitude shifts.
The previous binauralization examples are CPU costly but can in principle use personalized HRIRs, should you happen to have some measurements for the positions of Lebedev grids. There is another possibility to binauralize b-format For, which is a very efficient and takes advantage of the symmetry of the KU100 see the following example:
Load the IRs as well as the headphone correction filters
Initilaize the binaural decoder and feed it with 3 noise sources
You can use HOABinaural in combination with the HOAEncLebedev50 in order to listen to VBAP spatializations:
First extract the Lebedev nodes grid positions (azimuth and elevation), pack them in pairs and convert them to degrees. Use these positions as speaker positions in your VBAP array.
Now encode a Noise source over VBAP with the Lebedev speaker positions and feed this 50 channels into the HOAEncLebedev50 e.g. for the 5th order. Then, binauralize the resulting b-format.
This one is just for comparison with the hard coded Lebedev50BinauralDecoder (in case you have it on your system).
Previous: Exercise_02_HOA_converting_SN3D_N3D_FuMa
Next: Exercise_04_HOA_plane_versus_spherical_waves