From 93e71f0554d08b515aecd42d795cd62a980ff791 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 12 Mar 2012 17:54:16 -0700 Subject: [PATCH] Some HRTF clarifications --- hrtf.txt | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/hrtf.txt b/hrtf.txt index 2e794fb0..7a83f7d1 100644 --- a/hrtf.txt +++ b/hrtf.txt @@ -58,7 +58,7 @@ Afterward, an unsigned 16-bit integer specifies the total number of HRIR sets for a convolution filter). The next unsigned 16-bit integer specifies how many samples are in each HRIR set (the number of coefficients in the filter). The following unsigned 8-bit integer specifies the number of elevations used by the -data set. +data set. The elevations start at the bottom, and increment upwards. Following this is an array of unsigned 16-bit integers, one for each elevation which specifies the index offset to the start of the HRIR sets for each given @@ -67,28 +67,29 @@ to the next elevation, or by the total count for the last elevation). The actual coefficients follow. Each coefficient is a signed 16-bit sample, with each HRIR set being a consecutive number of samples. For each elevation, -the HRIR sets first start with a "neutral" set (that is, one that is applied -equally to the left and right outputs). After this, the HRIR sets follow a -clockwise pattern, with the first half specifying the "occluded" HRIRs (for the -ears on the opposite side of the sound source) for half of the head, and the -remaining specify the "unoccluded" HRIRs (for the ears on the side of the sound -source) for half of the head. OpenAL Soft will automatically select the HRIR +the HRIR sets first start with a neutral "in-front" set (that is, one that is +applied equally to the left and right outputs). After this, the HRIR sets +follow a clockwise pattern, with the first half specifying the "occluded" HRIRs +(a half-circle for the ear on the opposite side of the sound source), and the +second half specify the "unoccluded" HRIRs (a half-circle for the ear on the +same side as the sound source). OpenAL Soft automatically selects the two HRIR sets to use based on the angle to the source from the listener, and swap them -depending on which side the sound is on. +depending on which side the sound is on to create a complete sphere for both +the occluded and unoccluded sets. After the coefficients is an array of unsigned 8-bit delay values, one for each HRIR set. This is the delay, in samples, after recieving an input sample before before it's added in to the convolution filter that the corresponding HRIR set -operates on. +operates on and gets heard. Note that the HRTF data is expected to be minimum-phase reconstructed. The time delays are handled by OpenAL Soft according to the specified delay[] values, and afterward the samples are fed into the convolution filter using the corresponding coefficients. This allows for less processing by using a shorter -convolution filter, as it skips the first set of coefficients that do little -more than insert a timed delay, as well as the tailing coefficients that are -used to equalize the length of all the sets and contribute nothing. +convolution filter, as it skips the first coefficients that do little more than +cause a timed delay, as well as the tailing coefficients that are used to +equalize the length of all the sets and contribute nothing. For reference, the built-in data set uses a 32-sample convolution filter while even the smallest data set provided by MIT used a 128-sample filter (a 4x -- 2.11.4.GIT