SAF
Loading...
Searching...
No Matches
binauraliser_nf_internal.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 Michael McCrea, Leo McCormack
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10 * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14 * PERFORMANCE OF THIS SOFTWARE.
15 */
16
39#ifndef __BINAURALISER_NF_INTERNAL_H_INCLUDED__
40#define __BINAURALISER_NF_INTERNAL_H_INCLUDED__
41
43#include "binauraliser_nf.h" /* Include header for this example */
44#include "saf.h" /* Main include header for SAF */
45#include "saf_externals.h" /* To also include SAF dependencies (cblas etc.) */
46
47#ifdef __cplusplus
48extern "C" {
49#endif /* __cplusplus */
50
51/* ========================================================================== */
52/* Structures */
53/* ========================================================================== */
54
61typedef struct _binauraliserNF {
62 //struct _binauraliser; /**< "inherit" member vars of binauraliser struct - requires -fms-extensions compile flag */
63
64 /* The following variables MUST match those of the _binauraliser struct */
65
66 /* audio buffers */
67 float** inputFrameTD;
68 float** outframeTD;
69 float_complex*** inputframeTF;
70 float_complex*** outputframeTF;
71 int fs;
72 float freqVector[HYBRID_BANDS];
73 void* hSTFT;
75 /* sofa file info */
77 float* hrirs;
84 float* weights;
86 /* vbap gain table */
87 int hrtf_vbapTableRes[2];
92 /* hrir filterbank coefficients */
93 float* itds_s;
94 float_complex* hrtf_fb;
95 float* hrtf_fb_mag;
96 float_complex hrtf_interp[MAX_NUM_INPUTS][HYBRID_BANDS][NUM_EARS];
98 /* flags/status */
103 int recalc_hrtf_interpFLAG[MAX_NUM_INPUTS];
107 /* misc. */
108 float src_dirs_rot_deg[MAX_NUM_INPUTS][2];
109 float src_dirs_rot_xyz[MAX_NUM_INPUTS][3];
110 float src_dirs_xyz[MAX_NUM_INPUTS][3];
114 /* user parameters */
116 float src_dirs_deg[MAX_NUM_INPUTS][2];
121 float yaw;
122 float roll;
123 float pitch;
128 float src_gains[MAX_NUM_INPUTS];
130 /* End copied _binauraliser struct members. The following are unique to the _binauraliserNF struct */
131
132 float b_dvf[MAX_NUM_INPUTS][NUM_EARS][2];
133 float a_dvf[MAX_NUM_INPUTS][NUM_EARS][2];
137 /* misc. */
138 float src_dists_m[MAX_NUM_INPUTS];
144 float (*src_dirs_cur)[2];
146 /* flags/status */
147 int recalc_dvfCoeffFLAG[MAX_NUM_INPUTS];
150
151
152/* ========================================================================== */
153/* Internal Functions */
154/* ========================================================================== */
155
161void binauraliserNF_initTFT(void* const hBin);
162
166void binauraliserNF_resetSourceDistances(void* const hBin);
167
168
169#ifdef __cplusplus
170} /* extern "C" { */
171#endif /* __cplusplus */
172
173#endif /* __BINAURALISER_INTERNAL_NF_H_INCLUDED__ */
#define MAX_NUM_INPUTS
Maximum number of input channels supported.
Definition _common.h:233
PROC_STATUS
Current status of the processing loop.
Definition _common.h:219
CODEC_STATUS
Current status of the codec.
Definition _common.h:201
#define HYBRID_BANDS
Number of frequency bands.
INTERP_MODES
Available interpolation modes.
Convolves input audio (up to 64 channels) with interpolated HRTFs in the time-frequency domain.
Convolves input audio (up to 64 channels) with interpolated HRTFs in the time-frequency domain,...
void binauraliserNF_initTFT(void *const hBin)
Initialise the filterbank used by binauraliserNF.
void binauraliserNF_resetSourceDistances(void *const hBin)
Resets the source distances to the default far field distance.
#define NUM_EARS
2 (true for most humans)
Main include header for the Spatial_Audio_Framework (SAF)
Include header for SAF externals.
Main structure for binauraliserNF.
float * itds_s
interaural-time differences for each HRIR (in seconds); nBands x 1
char * sofa_filepath
absolute/relevative file path for a sofa file
float * hrir_dirs_deg
directions of the HRIRs in degrees [azi elev]; FLAT: N_hrir_dirs x 2
float_complex *** outputframeTF
time-frequency domain input frame; HYBRID_BANDS x NUM_EARS x TIME_SLOTS
float_complex * hrtf_fb
hrtf filterbank coefficients; nBands x nCH x N_hrirs
int N_hrtf_vbap_gtable
Number of interpolation weights/directions.
int bFlipRoll
flag to flip the sign of the roll rotation angle
float pitch
pitch (Euler) rotation angle, in degrees
int useDefaultHRIRsFLAG
1: use default HRIRs in database, 0: use those from SOFA file
float * hrirs
time domain HRIRs; FLAT: N_hrir_dirs x NUM_EARS x hrir_len
int nTriangles
Number of triangles in the convex hull of the spherical arrangement of HRIR directions/points.
int enableRotation
1: enable rotation, 0: disable
CODEC_STATUS codecStatus
see CODEC_STATUS
float ** inputFrameTD
time-domain input frame; MAX_NUM_INPUTS x BINAURALISER_FRAME_SIZE
PROC_STATUS procStatus
see PROC_STATUS
char * progressBarText
Current (re)initialisation step, string.
float head_radius_recip
Reciprocal of head radius.
float * hrtf_fb_mag
magnitudes of the hrtf filterbank coefficients; nBands x nCH x N_hrirs
int hrir_loaded_len
length of the loaded HRIRs, in samples
float * weights
Integration weights for the HRIR measurement grid.
float farfield_thresh_m
Distance considered to be far field (no near field filtering), meters.
INTERP_MODES interpMode
see INTERP_MODES
float_complex *** inputframeTF
time-frequency domain input frame; HYBRID_BANDS x MAX_NUM_INPUTS x TIME_SLOTS
int useRollPitchYawFlag
rotation order flag, 1: r-p-y, 0: y-p-r
int fs
Host sampling rate, in Hz.
int recalc_M_rotFLAG
1: re-calculate the rotation matrix, 0: do not
int * hrtf_vbap_gtableIdx
N_hrtf_vbap_gtable x 3.
int hrir_runtime_len
length of the HRIRs being used for processing (after any resampling), in samples
int enableHRIRsDiffuseEQ
flag to diffuse-field equalisation to the currently loaded HRTFs
float roll
roll (Euler) rotation angle, in degrees
float yaw
yaw (Euler) rotation angle, in degrees
int hrir_loaded_fs
sampling rate of the loaded HRIRs
float farfield_headroom
Scale factor applied to farfield_thresh_m when resetting to the far field, and for UI range,...
int nSources
Current number of input/source signals.
int N_hrir_dirs
number of HRIR directions in the current sofa file
float head_radius
Head radius, used calculate normalized source distance meters, def.
int hrir_runtime_fs
sampling rate of the HRIRs being used for processing (after any resampling)
int bFlipPitch
flag to flip the sign of the pitch rotation angle
int new_nSources
New number of input/source signals (current value will be replaced by this after next re-init)
float progressBar0_1
Current (re)initialisation progress, between [0..1].
int bFlipYaw
flag to flip the sign of the yaw rotation angle
float ** outframeTD
time-domain output frame; NUM_EARS x BINAURALISER_FRAME_SIZE
float nearfield_limit_m
Minimum distance allowed for near-field filtering, from head center, meters, def.
int reInitHRTFsAndGainTables
1: reinitialise the HRTFs and interpolation tables, 0: do not
float * hrtf_vbap_gtableComp
N_hrtf_vbap_gtable x 3.