aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/hrtf.h
Commit message (Collapse)AuthorAgeFilesLines
* Rename MAX_AMBI_COEFFS and MAX_AMBI2D_COEFFSChris Robinson2019-02-191-1/+1
|
* Use std::arrays for HRIR coeffs and valuesChris Robinson2019-02-071-6/+11
|
* Pass the distance to GetHrtfCoeffsChris Robinson2019-01-281-1/+1
|
* Collect HRTF field info into a structChris Robinson2019-01-281-2/+6
|
* Make IncRef and DecRef member functionsChris Robinson2019-01-241-2/+6
|
* Use a flexible array for DirectHrtfState and ALvoiceChris Robinson2019-01-121-4/+10
|
* Make Create methods for structs with flexible array members ...Chris Robinson2019-01-081-0/+2
| | | | ... that are used with unique_ptr.
* Cleanup some includesChris Robinson2018-12-251-2/+8
|
* Rename a couple HRTF structsChris Robinson2018-12-221-7/+7
|
* Don't convert the HRTF decoder virtual speaker positions to radiansChris Robinson2018-12-211-2/+3
|
* Avoid static global initialization functionsChris Robinson2018-12-081-2/+0
|
* Make a DirectHrtfState constructor to try appeasing MSVCChris Robinson2018-11-221-2/+4
|
* Use unique_ptr for DirectHrtfStateChris Robinson2018-11-221-0/+3
|
* Clean up some unnecessary specifiersChris Robinson2018-11-221-6/+6
|
* Use a standard string for the enumerated HRTF namesChris Robinson2018-11-181-1/+0
|
* Use a regular vector for the enumerated HRTF listChris Robinson2018-11-181-10/+3
|
* Pass a normal const char* to EnumerateHrtfChris Robinson2018-11-151-2/+1
|
* Convert panning.c to C++Chris Robinson2018-11-031-0/+8
|
* Add a RESTRICT macro to help with C++ compatibilityChris Robinson2018-10-291-2/+2
|
* Don't hardcode the max channels for HRTF B-Format decodingChris Robinson2018-05-261-6/+0
|
* Fix a function commentChris Robinson2018-05-151-2/+3
|
* Use a proper struct for specifying angular pointsChris Robinson2018-02-181-1/+6
|
* Use an alternate ambisonic HRTF decode layoutChris Robinson2018-02-131-1/+1
| | | | | | Similar to the previous, but includes the top and bottom HRTF responses. The higher-order decode (for the "basic" HRTF output) also now uses 2H1P mixed- order instead of 2H1V, which seems more stable.
* Use an alternate virtual layout for Ambisonic HRTF decodingChris Robinson2018-02-101-1/+1
| | | | | This uses 16 channels, an 8-channel octagon + 8-channel cube, which should improve horizontal resolution without affecting vertical too much.
* Move some HRTF structures to hrtf.hChris Robinson2018-01-111-0/+31
|
* Store the HRTF distance in the Hrtf handleChris Robinson2017-10-231-0/+2
|
* Don't bother returning the IR length for B-Format decodingChris Robinson2017-07-311-2/+1
|
* Remove unused macrosChris Robinson2017-07-251-4/+0
|
* Store the HRTF coeffs as a stereo pairChris Robinson2017-04-071-2/+2
| | | | | This will make it easier to handle HRTF data sets that have separate left and right ear responses. Will need an mhr version update to take advantage of that.
* Reference count HRTFs and unload them when unusedChris Robinson2017-04-061-0/+5
|
* Load HRTF files as neededChris Robinson2017-04-051-6/+3
| | | | | Currently only applies to external files, rather than embedded datasets. Also, HRTFs aren't unloaded after being loaded, until library shutdown.
* Store the loaded hrtf entry container in the enumerated hrtf entryChris Robinson2017-04-051-9/+17
|
* Store the HRTF's filename separate from the entry storageChris Robinson2017-04-051-3/+0
|
* Load HRTF coefficients as pre-normalized floatsChris Robinson2017-03-311-1/+1
|
* Rework HRTF coefficient fadingChris Robinson2017-03-111-1/+1
| | | | | | | | | | | | | | | This improves fading between HRIRs as sources pan around. In particular, it improves the issue with individual coefficients having various rounding errors in the stepping values, as well as issues with interpolating delay values. It does this by doing two mixing passes for each source. First using the last coefficients that fade to silence, and then again using the new coefficients that fade from silence. When added together, it creates a linear fade from one to the other. Additionally, the gain is applied separately so the individual coefficients don't step with rounding errors. Although this does increase CPU cost since it's doing two mixes per source, each mix is a bit cheaper now since the stepping is simplified to a single gain value, and the overall quality is improved.
* Allocate as many channels for DirectHrtfState as neededChris Robinson2017-03-111-1/+1
|
* Move the B-Format HRTF virtual speaker stuff to InitHrtfPanningChris Robinson2017-01-181-15/+12
| | | | | This keeps the decoder matrices and coefficient mapping together for if it changes in the future.
* Use ALsizei for sizes and offsets with the mixerChris Robinson2017-01-161-3/+3
| | | | | | Unsigned 32-bit offsets actually have some potential overhead on 64-bit targets for pointer/array accesses due to rules on integer wrapping. No idea how much impact it has in practice, but it's nice to be correct about it.
* Use second-order ambisonics for basic HRTF renderingChris Robinson2017-01-151-1/+1
| | | | | | This should improve positional quality for relatively low cost. Full HRTF rendering still only uses first-order since the only use of the dry buffer there is for first-order content (B-Format buffers, effects).
* Don't interpolate between nearest HRIRsChris Robinson2016-10-091-1/+1
| | | | | | | | It still fades between HRIRs when it changes, but now it selects the nearest one instead of blending the nearest four. Due to the minimum-phase nature of the HRIRs, interpolating between delays lead to some oddities which are exasperated by the fading (and the fading is needed to avoid clicks and pops, and smooth out changes).
* Decode directly from B-Format to HRTF instead of a cubeChris Robinson2016-08-111-0/+7
| | | | | | | | | | | | | | | | | | | | | Last time this attempted to average the HRIRs according to their contribution to a given B-Format channel as if they were loudspeakers, as well as averaging the HRIR delays. The latter part resulted in the loss of the ITD (inter-aural time delay), a key component of HRTF. This time, the HRIRs are averaged similar to above, except instead of averaging the delays, they're applied to the resulting coefficients (for example, a delay of 8 would apply the HRIR starting at the 8th sample of the target HRIR). This does roughly double the IR length, as the largest delay is about 35 samples while the filter is normally 32 samples. However, this is still smaller the original data set IR (which was 256 samples), it also only needs to be applied to 4 channels for first-order ambisonics, rather than the 8-channel cube. So it's doing twice as much work per sample, but only working on half the number of samples. Additionally, since the resulting HRIRs no longer rely on an extra delay line, a more efficient HRTF mixing function can be made that doesn't use one. Such a function can also avoid the per-sample stepping parameters the original uses.
* Avoid function calls to get the HRTF sample rate and IR sizeChris Robinson2016-07-071-4/+14
|
* Improve radius behavior with scaling of ambisonic coefficientsChris Robinson2016-04-241-1/+1
|
* Remove an unused declarationChris Robinson2016-02-201-2/+0
|
* Include the HRTF filename in the HRTF memory chunkChris Robinson2016-02-201-1/+0
|
* Use an 8-channel cube for HRTF's virtual format.Chris Robinson2016-02-201-1/+0
| | | | | | There were phase issues caused by applying HRTF directly to the B-Format channels, since the HRIR delays were all averaged which removed the inter-aural time-delay, which in turn removed significant spatial information.
* Calculate HRTF stepping params right before mixingChris Robinson2016-02-141-1/+0
| | | | | This means we track the current params and the target params, rather than the target params and the stepping. This closer matches the non-HRTF mixers.
* Don't pass the channel count to GetBFormatHrtfCoeffsChris Robinson2016-02-091-1/+1
| | | | Since it's hard-coded anyway, there's no need to specify it.
* Use the enumerated HRTF list for selecting an HRTFChris Robinson2015-10-061-5/+4
| | | | Also report the proper specifier of the one currently in use.
* Store the Hrtf struct with the corresponding HrtfEntryChris Robinson2015-10-061-0/+2
| | | | | Also store the filename with the Hrtf struct so it can be reused for multiple HrtfEntry objects.