@@ -125,8 +125,8 @@ void binauraliser_interpHRTFs
125125void binauraliser_initHRTFsAndGainTables (void * const hBin )
126126{
127127 binauraliser_data * pData = (binauraliser_data * )(hBin );
128- int i , new_len ;
129- float * hrtf_vbap_gtable , * hrirs_resampled ;//, *hrir_dirs_rad;
128+ int i ;
129+ float * hrtf_vbap_gtable ;//, *hrir_dirs_rad;
130130#ifdef SAF_ENABLE_SOFA_READER_MODULE
131131 SAF_SOFA_ERROR_CODES error ;
132132 saf_sofa_container sofa ;
@@ -148,11 +148,11 @@ void binauraliser_initHRTFsAndGainTables(void* const hBin)
148148 }
149149 else {
150150 /* Copy SOFA data */
151- pData -> hrir_loaded_fs = (int )sofa .DataSamplingRate ;
152- pData -> hrir_loaded_len = sofa .DataLengthIR ;
151+ pData -> hrir_fs = (int )sofa .DataSamplingRate ;
152+ pData -> hrir_len = sofa .DataLengthIR ;
153153 pData -> N_hrir_dirs = sofa .nSources ;
154- pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_loaded_len )* sizeof (float ));
155- memcpy (pData -> hrirs , sofa .DataIR , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_loaded_len )* sizeof (float ));
154+ pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
155+ memcpy (pData -> hrirs , sofa .DataIR , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
156156 pData -> hrir_dirs_deg = realloc1d (pData -> hrir_dirs_deg , pData -> N_hrir_dirs * 2 * sizeof (float ));
157157 cblas_scopy (pData -> N_hrir_dirs , sofa .SourcePosition , 3 , pData -> hrir_dirs_deg , 2 ); /* azi */
158158 cblas_scopy (pData -> N_hrir_dirs , & sofa .SourcePosition [1 ], 3 , & pData -> hrir_dirs_deg [1 ], 2 ); /* elev */
@@ -166,41 +166,43 @@ void binauraliser_initHRTFsAndGainTables(void* const hBin)
166166#endif
167167 if (pData -> useDefaultHRIRsFLAG ){
168168 /* Copy default HRIR data */
169- pData -> hrir_loaded_fs = __default_hrir_fs ;
170- pData -> hrir_loaded_len = __default_hrir_len ;
169+ pData -> hrir_fs = __default_hrir_fs ;
170+ pData -> hrir_len = __default_hrir_len ;
171171 pData -> N_hrir_dirs = __default_N_hrir_dirs ;
172- pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_loaded_len )* sizeof (float ));
173- memcpy (pData -> hrirs , (float * )__default_hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_loaded_len )* sizeof (float ));
172+ pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
173+ memcpy (pData -> hrirs , (float * )__default_hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
174174 pData -> hrir_dirs_deg = realloc1d (pData -> hrir_dirs_deg , pData -> N_hrir_dirs * 2 * sizeof (float ));
175175 memcpy (pData -> hrir_dirs_deg , (float * )__default_hrir_dirs_deg , pData -> N_hrir_dirs * 2 * sizeof (float ));
176176 }
177177
178+ /* Resample HRIRs if needed */
179+ pData -> hrir_orig_fs = pData -> hrir_fs ;
180+ if (pData -> hrir_fs != pData -> fs ){
181+ strcpy (pData -> progressBarText , "Resampling HRIRs" );
182+ pData -> progressBar0_1 = 0.3f ;
183+ float * hrirs_resampled ;
184+ int hrir_length_resample ;
185+ resampleHRIRs (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_len , pData -> hrir_fs , pData -> fs , 1 , & hrirs_resampled , & hrir_length_resample );
186+
187+ /* Replace with resampled HRIRs */
188+ pData -> hrir_fs = pData -> fs ;
189+ pData -> hrir_len = hrir_length_resample ;
190+ pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
191+ memcpy (pData -> hrirs , hrirs_resampled , pData -> N_hrir_dirs * NUM_EARS * (pData -> hrir_len )* sizeof (float ));
192+
193+ /* Clean-up */
194+ free (hrirs_resampled );
195+ }
196+
178197 /* Convert from the 0..360 convention, to -180..180 */
179198 convert_0_360To_m180_180 (pData -> hrir_dirs_deg , pData -> N_hrir_dirs );
180199
181200 /* estimate the ITDs for each HRIR */
182201 strcpy (pData -> progressBarText ,"Estimating ITDs" );
183202 pData -> progressBar0_1 = 0.4f ;
184203 pData -> itds_s = realloc1d (pData -> itds_s , pData -> N_hrir_dirs * sizeof (float ));
185- estimateITDs (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_loaded_len , pData -> hrir_loaded_fs , pData -> itds_s );
204+ estimateITDs (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_len , pData -> hrir_fs , pData -> itds_s );
186205
187- /* Resample the HRIRs if needed */
188- if (pData -> hrir_loaded_fs != pData -> fs ){
189- strcpy (pData -> progressBarText ,"Resampling the HRIRs" );
190- pData -> progressBar0_1 = 0.5f ;
191- hrirs_resampled = NULL ;
192- resampleHRIRs (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_loaded_len , pData -> hrir_loaded_fs , pData -> fs , 1 , & hrirs_resampled , & new_len );
193- pData -> hrirs = realloc1d (pData -> hrirs , pData -> N_hrir_dirs * NUM_EARS * new_len * sizeof (float ));
194- cblas_scopy (pData -> N_hrir_dirs * NUM_EARS * new_len , hrirs_resampled , 1 , pData -> hrirs , 1 );
195- free (hrirs_resampled );
196- pData -> hrir_runtime_fs = pData -> fs ;
197- pData -> hrir_runtime_len = new_len ;
198- }
199- else {
200- pData -> hrir_runtime_fs = pData -> hrir_loaded_fs ;
201- pData -> hrir_runtime_len = pData -> hrir_loaded_len ;
202- }
203-
204206 /* generate VBAP gain table */
205207 strcpy (pData -> progressBarText ,"Generating interpolation table" );
206208 pData -> progressBar0_1 = 0.6f ;
@@ -223,7 +225,7 @@ void binauraliser_initHRTFsAndGainTables(void* const hBin)
223225 /* convert hrirs to filterbank coefficients */
224226 pData -> progressBar0_1 = 0.6f ;
225227 pData -> hrtf_fb = realloc1d (pData -> hrtf_fb , HYBRID_BANDS * NUM_EARS * (pData -> N_hrir_dirs )* sizeof (float_complex ));
226- HRIRs2HRTFs_afSTFT (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_runtime_len , HOP_SIZE , 0 , 1 , pData -> hrtf_fb );
228+ HRIRs2HRTFs_afSTFT (pData -> hrirs , pData -> N_hrir_dirs , pData -> hrir_len , HOP_SIZE , 0 , 1 , pData -> hrtf_fb );
227229
228230 /* HRIR pre-processing */
229231 if (pData -> enableHRIRsDiffuseEQ ){
0 commit comments