Introduction

The new binaural reverb opcodes were introduced in Csound 5.15, and are discussed from a practical point of view in this article. For a review of the literature and implementation specifics, see [1], [2], [3]. For details of parameter defaults and limitations, see The Canonical Csound Reference Manual pages for the HRTF opcodes for Csound version 5.15 or later . 


I. Background

HRTF Opcodes

The binaural reverb opcodes follow from the development of the Head Related Transfer Function (HRTF) opcodes introduced in Csound 5.08. Details on implementation, algorithm generation and literature reviews can be found in [3], [4], [5], [6], [7] and The Canonical Csound Reference Manual pages for hrtfmove, hrtfmove2 and hrtfstat. The HRTF opcodes have been updated and optimised as part of the process of developing the new reverb opcodes. The operating/algorithmic principles remain the same; updates are mainly for optimisation. Data files have also been reduced in size (essentially due to complex FFT processing being replaced by real FFT use), so users should ensure that up to date HRTF data files are being used.

Details on binaural spatialisation are covered elsewhere [1], [3]. Briefly, the HRTF describes how a sound is altered from source to eardrum. In pairs (for left and right ears), they can be used as filters to artificially spatialise audio, exploiting sound localisation cues such as interaural differences and spectral alterations. The process works best for headphones.

Implementation of a HRTF based binaural spatialisation system involves several challenges, primarily related to generating a dynamic digital filter that describes the HRTF. The HRTF opcodes are based on novel solutions to these challenges, which approach the problem in the spectral domain, from a psychoacoustical point of view. The treatment of the phase of the HRTF is focused upon, where hrtfmove uses a phase truncation method, and hrtfmove2 derives a functional phase. The new approaches perform extremely well both objectively and subjectively when compared to existing, widely-employed techniques (i.e. minimum phase based).

Reverberation

Reverberation occurs when sound is generated in an enclosed space. Several approaches to artificially recreating reverberation exist [3]. A common technique involves considering the process in two stages. Firstly, the early reflections are processed, emulating the source signal reflecting off boundaries in the enclosed space. Secondly, the later, diffuse reverberation can be considered more generally; less accuracy is required as the reflections build to a diffuse field. This approach is taken here. The many subtleties involved are discussed elsewhere [2], [3].

II. New Opcodes

Early Reflections: hrtfearly

The hrtfearly opcode allows user control over early reflection processing. Several parameters are available, allowing flexibility. A shoebox-shaped geometry is assumed. Required arguments are the (dynamic) location of the source and listener in the x, y and z plane (asrc, ksrcx, ksrcy, ksrcz, klstnrx, klstnry, klstnrz), and the HRTF datafile location/names and a default room argument (ifilel, ifiler, and idefroom). The location of the source/listener will dictate the time and spatial location of each reflection. Each reflection is processed with a high resolution HRTF filter, exploiting new optimisations in the phase truncation HRTF algorithm. File locations follow the usual standards. Default rooms are medium (1: 10 10 3), small (2: 3 4 3) or large (3: 20 25 7). From the example below, the following line of code will move the source relative to the x axis according to kx, staying at a static y and z location. The listener is static (at the mid-back of a medium room).

aearlyl,aearlyr, irt60low, irt60high, imfp hrtfearly gasrc, kx, 5, 1, 5, 1, 1,\ 
"hrtf-44100-left.dat", "hrtf-44100-right.dat", 1

Reflected sound will be reduced in amplitude by the extra distance travelled and the absorption of the reflecting surface. This absorption will typically be frequency specific, depending on the material of the reflecting surface.

The output, input and optional input parameters for hrtfearly are shown below.

aleft, aright, irt60low, irt60high, imfp hrtfearly asrc, ksrcx, ksrcy, ksrcz, klstnrx, klstnry, klstnrz, ifilel, ifiler, idefroom [,ifade, isr, iorder, ithreed, kheadrot, iroomx, iroomy, iroomz, iwallhigh, iwalllow, iwallgain1, iwallgain2, iwallgain3, ifloorhigh, ifloorlow, ifloorgain1, ifloorgain2, ifloorgain3, iceilinghigh, iceilinglow, iceilinggain1, iceilinggain2, iceilinggain3]

Among the optional [ ] input parameters shown above are: 1. the fade length, ifade, for the phase truncation algorithm [4], [5], 2. the sampling rate of processing, isr, (this should match the data sampling rate of the files), 3. the order of the processing, iorder, (first order processing implies processing the first reflections, second order processes the first and second, etc), 4. whether three dimensional processing is employed, ithreed, (two dimensional is the default for efficiency; adding the z dimension increases processor requirements, particularly for higher order processing), 5. a dynamic angular head rotation control value, kheadrot, 6. room dimensions, iroomx etc, (read when a room default is not used), and finally, 7. high and low absorption values for each surface, iwallhigh etc, as well as three gain values for a low, mid and high frequency equalisation filter for each surface, iceilinghigh etc, (the surfaces considered are the roof, ceiling and walls where a typical room setup is assumed). It is expected that default room values should be adequate in most usage scenarios; however control is offered over all aspects of the processing using the optional parameters.

Of particular interest, from a point of view of integration with the later reverberant tail, is the fact that the opcode has a number of outputs in addition to the stereo processed audio. The overall low and high frequency reverb time suggested by the room and materials, as well as the mean free path in the room are also output. The mean free path is the mean distance of a sound ray between two reflections in a room.

Later Diffuse Field: hrtfreverb

The later diffuse field reverberation is processed using a feedback delay network setup [3]. Averaged binaural filters add a sense of externalisation and space. The hrtfreverb opcode is designed to work with hrtfearly, but can work independently as well, for example, when reverb is being used creatively and when the processing cost of processing early reflections is undesirable. The feedback delay model essentially uses a cross-fertilisation paradigm to build up the late reverb tail. A number of delay lines are used, each one feeding into the others to add density. The algorithm also uses averaged binaural filters, as well as accurate interaural coherence [3].

The required arguments for the hrtfreverb opcode are input audio (asrc), low and high reverb times (ilowrt60, and ihighrt60—these are used to control the feedback delay network and can be patched directly from an instance of hrtfearly if desired), and file locations or names (ifilel, and ifiler). Optional values are sample rate (isr—this value should agree with the processing or data file sample rate value), and a mean free path and order (imfp, and iorder). When used, the latter two parameters calculate an appropriate delay for the late tail, considering the room size and order of processing of the early reflections. These parameters thus become relevant when using hrtfreverb with hrtfearly. The processed audio and the appropriatly calculated delay time are output from the opcode. The output, input and optional input parameters for hrtfreverb are shown below.

aleft, aright, idel hrtfreverb asrc, ilowrt60, ihighrt60, ifilel, ifiler [,isr, imfp, iorder]

The code example below is a .csd file showing typical use of the hrtfearly and hrtfreverb opcodes.

<CsoundSynthesizer>
<CsOptions>

; Select flags here
; realtime audio out
 -o dac
; file ouput 
; -o hrtf.wav
  
</CsOptions>
<CsInstruments>

nchnls = 2
gasrc init 0 ;global

instr 1	;a plucked string, distorted and filtered
  iamp = 15000
  icps = cpspch(p4)

  a1 pluck iamp, icps, icps, 0, 1
  adist distort1 a1, 10, .5, 0, 0
  afilt moogvcf2 adist, 8000, .5 
  aout linen afilt, 0, p3, .01
  
  gasrc = gasrc + aout
endin

instr 10 ;uses output from instr1 as source
  ;simple path for source
  kx line 2, p3, 9

  ;early reflections, room default 1
  aearlyl,aearlyr, irt60low, irt60high, imfp hrtfearly gasrc, kx, 5, 1, 5, 1, 1, \ 
 	"hrtf-44100-left.dat", "hrtf-44100-right.dat", 1

  ;later reverb, uses outputs from above
  arevl, arevr, idel hrtfreverb gasrc, irt60low, irt60high, "hrtf-44100-left.dat", \
	"hrtf-44100-right.dat", 44100, imfp

  ;delayed and scaled
  alatel delay arevl * .1, idel
  alater delay arevr * .1, idel

  outs	aearlyl + alatel, aearlyr + alater
  gasrc = 0
endin
  
</CsInstruments>
<CsScore>

; Play Instrument 1: a simple arpeggio
i1 0 .2 8.00 
i1 + .2 8.04
i1 + .2 8.07
i1 + .2 8.11
i1 + .2 9.02
i1 + 1.5 8.11
i1 + 1.5 8.07
i1 + 1.5 8.04
i1 + 1.5 8.00
i1 + 1.5 7.09
i1 + 4 8.00

; Play Instrument 10 for 13 seconds.
i10 0 13

</CsScore>
</CsoundSynthesizer>

The following partial code is an example of creative usage demonstrating an unnaturally large reverberant space, and creating a drone like effect by changing only instrument 10 from the example .csd file, above.

instr 10 ;uses output from instr1 as source
  ;non-natural later reverb
  irt60low = 80
  irt60high = 75
  
  arevl, arevr, idel hrtfreverb gasrc, irt60low, irt60high, "hrtf-44100-left.dat", \ 
	"hrtf-44100-right.dat"
  outs	arevl*.5, arevr*.5
  gasrc = 0
endin

Design

These opcodes are designed with a multi-source setup in mind. Thus several hrtfearly processing units can feed one hrtfreverb. Individual sources can therefore be given accurate spatial cues by including accurate binaural direct and early reflection processing options. A more diffuse late reverberant field can be achieved with just one instance of hrtfreverb, thus optimising performance. A multi-channel binaural implementation of this processing model which offers the ability to audition multi-channel sound in standard stereo headphones is presented in the accompanying article, MultiBin, A Binaural Tool for the Audition of Multi-channel Audio. That articles helps demonstrate the advanced potential for using the opcodes more comprehensively. You can also download the .csd files for the above examples here: CartyReverbExs.zip.

III. Conclusion

It is hoped that this article clearly illustrates the rationale and overall concepts of the new binaural reverb opcodes. Further detail on any topics discussed can be found through the references listed below.

IV. Acknowledgements

This work was supported by the Irish Research Council for Science, Engineering and Technology: funded by the National Development Plan and NUI Maynooth. I would also like to thank Bill Gardner and Keith Martin for making their HRTF measurements available.

V. References

[1] B. Carty, "Brian Carty," 2011. [Online]. Available: http://www.bmcarty.com/pubs.html. [Accessed Nov. 28, 2011].

Note: The above URL is no longer valid. The material is now accessible at http://www.bmcarty.ie/pubs [accessed February 19, 2014]

[2] B. Carty, and V. Lazzarini, HRTFearly & HRTFreverb: Flexible Binaural Reverberation Processing, International Computer Music Conference (ICMC) 2010, Poster/Demo Session, June 01, 2010.

[3] B. Carty, "Movements in Binaural Space: Issues in HRTF Interpolation and Reverberation, with applications to Computer Music," NUI Maynooth ePrints and eTheses Archive, March 2011. [Online]. Available: http://eprints.nuim.ie/2580/. [Accessed Nov. 28, 2011].

[4] B. Carty, and V. Lazzarini, "Binaural HRTF Based Spatialisation: New Approaches and Implementation," In Proceedings of the International Conference on Digital Audio Effects (DAFx-09) September 1-4, 2009, pp 49-54. [Online]. Available: http://dafx09.como.polimi.it/proceedings/papers/paper_15.pdf. [Accessed Nov. 28, 2011].

[5] B. Carty, and V. Lazzarini, "Frequency-Domain Interpolation of Empirical HRTF Data," presented at 126th AES Convention, Munich, May 2009. [Online]. Available: http://www.aes.org/e-lib/browse.cfm?elib=14921. [Accessed Nov. 29, 2011].

[6] V. Lazzarini, and B. Carty, "New Csound Opcodes for Binaural Processing," Proceedings of the 2008 Linux Audio Conference, Cologne, February 2008, pp 28-35. [Online]. Available: http://lac.linuxaudio.org/2008/download/papers/4.pdf. [Accessed Nov. 29, 2011].

[7] B. Carty, "HRTFmove, HRTFstat, HRTFmove2: Using the new HRTF Opcodes," The Csound Journal, Issue 9, July 28, 2008. [Online]. Available: http://www.csounds.com/journal/issue9/newHRTFOpcodes.html. [Accessed Nov. 29, 2011].