From 2f1e2a9b9de5ddd05604e737b4cb4164336f96df Mon Sep 17 00:00:00 2001 From: Giso Grimm Date: Mon, 11 Nov 2024 18:28:47 +0100 Subject: [PATCH] make allpass filter radius configurable --- libtascar/include/fdn.h | 8 +- libtascar/src/acousticmodel.cc | 11 +- libtascar/src/fdn.cc | 21 ++-- plugins/src/receivermod_simplefdn.cc | 15 ++- test/Makefile | 100 ++++++++++--------- test/expected_ir_simplefdn_biquadallpass.wav | Bin 0 -> 64104 bytes test/test_ir_simplefdn_biquadallpass.tsc | 9 ++ 7 files changed, 97 insertions(+), 67 deletions(-) create mode 100644 test/expected_ir_simplefdn_biquadallpass.wav create mode 100644 test/test_ir_simplefdn_biquadallpass.tsc diff --git a/libtascar/include/fdn.h b/libtascar/include/fdn.h index 56ea9925..0a3b7a26 100644 --- a/libtascar/include/fdn.h +++ b/libtascar/include/fdn.h @@ -185,7 +185,7 @@ namespace TASCAR { public: enum gainmethod_t { original, mean, schroeder }; fdn_t(uint32_t fdnorder, uint32_t maxdelay, bool logdelays, gainmethod_t gm, - bool feedback_); + bool feedback_, std::vector rallpass); ~fdn_t(){}; void set_logdelays(bool ld) { logdelays_ = ld; }; inline void process(std::vector& src, bool use_biquad) @@ -196,8 +196,8 @@ namespace TASCAR { // rotation: for(auto& path : fdnpath) { foa_sample_t tmp(path.delayline[path.pos]); - path.reflection.filter(tmp, use_biquad); path.rotation.rotate(tmp); + path.reflection.filter(tmp, use_biquad); path.dlout = tmp; outval += tmp; } @@ -247,8 +247,8 @@ namespace TASCAR { // rotation: for(auto& path : fdnpath) { foa_sample_t tmp(path.delayline[path.pos]); - path.reflection.filter(tmp, use_biquad); path.rotation.rotate(tmp); + path.reflection.filter(tmp, use_biquad); path.dlout = tmp; outval += tmp; } @@ -279,6 +279,8 @@ namespace TASCAR { reflectionfilter_t prefilt1; // FDN path: std::vector fdnpath; + // allpass filter radius, requires four entries: + std::vector rallpass; }; } // namespace TASCAR diff --git a/libtascar/src/acousticmodel.cc b/libtascar/src/acousticmodel.cc index 4400d0e4..f40a18c2 100644 --- a/libtascar/src/acousticmodel.cc +++ b/libtascar/src/acousticmodel.cc @@ -260,8 +260,8 @@ uint32_t acoustic_model_t::process(const TASCAR::transport_t& tp) return 1; } } // of visible - } // of layers check - } // of ISM order check + } // of layers check + } // of ISM order check } else { delayline.add_chunk(audio); } @@ -631,8 +631,9 @@ void receiver_t::configure() scatter_handle = create_diffuse_state_data(f_sample, n_fragment); scatterfilterpath.resize(scatterreflections); if(scatterreflections > 0) { - scatterfilter = new TASCAR::fdn_t(scatterreflections, (uint32_t)f_sample, - true, TASCAR::fdn_t::mean, false); + scatterfilter = + new TASCAR::fdn_t(scatterreflections, (uint32_t)f_sample, true, + TASCAR::fdn_t::mean, false, {0.0f, 0.0f, 0.0f, 0.0f}); scatterfilter->set_scatterpar( scatterspread, f_sample * (0.1f * scatterstructuresize / 340.0f), f_sample * (scatterstructuresize / 340.0f), f_sample, @@ -750,7 +751,7 @@ void receiver_t::postproc(std::vector& output) // path.dlout = x; ++kflt; } - scatterfilter->process(scatterfilterpath,false); + scatterfilter->process(scatterfilterpath, false); scatterbuffer->w()[k] = scatterfilter->outval.w; scatterbuffer->x()[k] = scatterfilter->outval.x; scatterbuffer->y()[k] = scatterfilter->outval.y; diff --git a/libtascar/src/fdn.cc b/libtascar/src/fdn.cc index 2bd1e07c..1d266f24 100644 --- a/libtascar/src/fdn.cc +++ b/libtascar/src/fdn.cc @@ -36,14 +36,20 @@ void fdnpath_t::init(uint32_t maxdelay) }; fdn_t::fdn_t(uint32_t fdnorder, uint32_t maxdelay, bool logdelays, - gainmethod_t gm, bool feedback_) + gainmethod_t gm, bool feedback_, std::vector rallpass_) : logdelays_(logdelays), fdnorder_(fdnorder), maxdelay_(maxdelay), - feedbackmat(fdnorder_ * fdnorder_), gainmethod(gm), feedback(feedback_) + feedbackmat(fdnorder_ * fdnorder_), gainmethod(gm), feedback(feedback_), + rallpass(rallpass_) { + if(rallpass.size() != 4u) + throw TASCAR::ErrMsg( + "Allpass filter radius vector requires four entries, received " + + std::to_string(rallpass.size())); for(auto& v : feedbackmat) v = 0.0f; prefilt0.set_allpass(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f); - prefilt1.set_allpass(0.87f, 0.87f, 0.87f, 0.87f, 0.87f, 0.25f * TASCAR_PIf); + prefilt1.set_allpass(0.87f, rallpass[0], rallpass[1], rallpass[2], + rallpass[3], 0.25f * TASCAR_PIf); fdnpath.resize(fdnorder); for(size_t k = 0; k < fdnpath.size(); ++k) { fdnpath[k].init(maxdelay); @@ -85,8 +91,8 @@ void fdn_t::setpar_t60(float az, float daz, float t_min, float t_max, float t60, uint32_t d((uint32_t)std::max(0.0f, t_)); fdnpath[tap].delay = std::max(2u, std::min(maxdelay_ - 1u, d)); fdnpath[tap].reflection.set_allpass( - 0.87f * (float)tap / ((float)fdnorder_ - 1.0f), 0.87f, 0.88f, 0.89f, - 0.9f, + 0.87f * (float)tap / ((float)fdnorder_ - 1.0f), rallpass[0], + rallpass[1], rallpass[2], rallpass[3], TASCAR_PIf * (0.001f + 0.25f * (float)tap / ((float)fdnorder_ - 1.0f))); // eta[k] = 0.87f * (float)k / ((float)d1 - 1.0f); t_mean += (float)(fdnpath[tap].delay); @@ -182,10 +188,9 @@ void fdn_t::set_scatterpar(float daz, float t_min, float t_max, float t60, uint32_t d((uint32_t)std::max(0.0f, t_)); fdnpath[tap].delay = std::max(2u, std::min(maxdelay_ - 1u, d)); fdnpath[tap].reflection.set_allpass( - 0.87f * (float)tap / ((float)fdnorder_ - 1.0f), 0.87f, 0.88f, 0.89f, - 0.9f, + 0.87f * (float)tap / ((float)fdnorder_ - 1.0f), rallpass[0], + rallpass[1], rallpass[2], rallpass[3], TASCAR_PIf * (0.001f + 0.25f * (float)tap / ((float)fdnorder_ - 1.0f))); - // eta[k] = 0.87f * (float)k / ((float)d1 - 1.0f); t_mean += (float)(fdnpath[tap].delay); } // if feed forward model, then truncate delays: diff --git a/plugins/src/receivermod_simplefdn.cc b/plugins/src/receivermod_simplefdn.cc index b3b0071a..92426c0a 100644 --- a/plugins/src/receivermod_simplefdn.cc +++ b/plugins/src/receivermod_simplefdn.cc @@ -56,6 +56,7 @@ class simplefdn_vars_t : public TASCAR::receivermod_base_t { bool use_lowcut = false; bool truncate_forward = false; bool use_biquad_allpass = false; + std::vector rallpass = {0.96f, 0.95f, 0.951f, 0.93f}; }; simplefdn_vars_t::simplefdn_vars_t(tsccfg::node_t xmlsrc) @@ -101,6 +102,12 @@ simplefdn_vars_t::simplefdn_vars_t(tsccfg::node_t xmlsrc) GET_ATTRIBUTE_BOOL( use_biquad_allpass, "Use biquad allpass filters instead of first order filters"); + GET_ATTRIBUTE(rallpass, "[0,1]", + "Allpass filter radius vector (requires four entries)"); + if(rallpass.size() != 4u) + throw TASCAR::ErrMsg( + "Allpass filter radius vector requires four entries, received " + + std::to_string(rallpass.size())); } simplefdn_vars_t::~simplefdn_vars_t() {} @@ -264,14 +271,14 @@ void simplefdn_t::configure() if(feedback_delay_network) delete feedback_delay_network; srcpath.resize(fdnorder); - feedback_delay_network = - new TASCAR::fdn_t(fdnorder, (uint32_t)f_sample, logdelays, gm, true); + feedback_delay_network = new TASCAR::fdn_t(fdnorder, (uint32_t)f_sample, + logdelays, gm, true, rallpass); for(auto& pff : feedforward_delay_network) delete pff; feedforward_delay_network.clear(); for(uint32_t k = 0; k < forwardstages; ++k) - feedforward_delay_network.push_back( - new TASCAR::fdn_t(fdnorder, (uint32_t)f_sample, logdelays, gm, false)); + feedforward_delay_network.push_back(new TASCAR::fdn_t( + fdnorder, (uint32_t)f_sample, logdelays, gm, false, rallpass)); if(foa_out) delete foa_out; foa_out = new TASCAR::amb1wave_t(n_fragment); diff --git a/test/Makefile b/test/Makefile index be5baf43..dee9002a 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,50 +1,56 @@ -TESTS = test_snd_pink_diffuse test_ir1 test_ir2 test_ir3 test_ir4 \ - test_ir_proxy_air test_ir_proxy_gain test_ir_proxy_delay \ - test_ir_proxy_direction test_ir6_ismminmax test_snd1 \ - test_snd_include_sound test_snd2 test_snd4 test_snd3 test_snd5 \ - test_pos1 test_pos2 test_pos_trackinterp test_snd_door1 \ - test_snd_door2 test_snd_door3 test_pos_door test_snd_layers \ - test_snd_rec_amb1h1v test_wav_diffuse test_wav_diffuse_hoa2d \ - test_ir_hoa2d_offset test_wav_diffuse_nsp4 test_wav_diffuse_hoa2d4 \ - test_wav_diffuse_layerbug test_wav_diffirs test_sndgainramp \ - test_sndgainramp2 test_ir_spkcorr test_snd_calib1 test_snd_calib2 \ - test_snd_vbap51 test_snd_pink test_snd_sndfile test_snd_sndfile2 \ - test_snd_door4 test_snd_roommic test_level_vbap3d test_ir_ortf_0deg \ - test_ir_ortf_55deg test_ir_scatter test_ir_noscatter \ - test_ir_scatter_ortf test_snd_sourcedir_generic \ - test_snd_sourcedir_generic1 test_snd_sourcedir_generic_cardioid \ - test_ir_wfs test_ir_wfs_noplanewave test_level_hoa2d_basic \ - test_level_hoa2d_maxre test_ir_reverb test_ir_simplefdn \ - test_ir_simplefdn_gain test_ir_simplefdn_feedforward \ - test_snd_vbap3d_speakermatch test_ir_volumetric test_pos_obstacle \ - test_pos_obstacle_inner test_level_absorption test_ir_hrtf_0deg \ - test_ir_hrtf_45deg test_ir_hrtf_75deg test_ir_hrtf_90deg \ - test_ir_hrtf_105deg test_ir_hrtf_135deg test_ir_hrtf_180deg \ - test_ir_hrtf_225deg test_ir_hrtf_270deg test_ir_hrtf_315deg \ - test_ir_hrtf_el90deg test_ir_hrtf_el-90deg test_ir_hrtf_el45deg \ - test_ir_hrtf_el-45deg test_ir_hrtf_diffuse1 test_ir_hrtf_diffuse2 \ - test_ir_delay test_ir_delay2 test_ir_delay3 test_snd_reverb \ - test_wav_multichannel test_snd_zeros test_ir_sub test_ir_sub_hoa2d \ - test_ir_sub_nsp test_ir_partconvrev test_ir_partconvrev_offset \ - test_ir_micarray_az0deg test_ir_micarray_az45deg \ - test_ir_micarray_az75deg test_ir_micarray_az90deg \ - test_ir_micarray_az105deg test_ir_micarray_az135deg \ - test_ir_micarray_az180deg test_ir_micarray_az225deg \ - test_ir_micarray_az270deg test_ir_micarray_az315deg \ - test_ir_micarray_el45deg test_ir_micarray_el90deg \ - test_ir_micarray_el-45deg test_ir_micarray_el-90deg \ - test_snd_diffuse_micarray test_snd_micarray_az0deg \ - test_ir_micarraysinc test_ir_amb1 test_ir_amb1_y test_ir_amb1_z \ - test_snd_diffuse_0deg test_snd_diffuse_17deg \ - test_snd_diffuse_rec17deg test_snd_maskplugin_fig8 \ - test_snd_maskplugin_multibeam test_snd_maskplugin_multibeam1 \ - test_snd_maskplugin_sampledgain test_snd_diffuse_inphase \ - test_snd_diffuse_basic test_snd_diffuse_maxre \ - test_snd_maskplugin_multibeam_diff test_ir_apfilter_highpass \ - test_ir_apfilter_lowpass test_snd_hoa2d_fuma_hos \ - test_ir_material_carpet test_ir_material_window test_ir1_spkcalib \ - test_snd_spkcorr0 test_snd_spkcorr70 test_snd_nospkcorr \ - test_snd_spkcorr_long test_ir_nodelaylineimagesource +TESTS = test_snd_pink_diffuse test_ir1 test_ir2 test_ir3 test_ir4 \ + test_ir_proxy_air test_ir_proxy_gain test_ir_proxy_delay \ + test_ir_proxy_direction test_ir6_ismminmax test_snd1 \ + test_snd_include_sound test_snd2 test_snd4 test_snd3 \ + test_snd5 test_pos1 test_pos2 test_pos_trackinterp \ + test_snd_door1 test_snd_door2 test_snd_door3 test_pos_door \ + test_snd_layers test_snd_rec_amb1h1v test_wav_diffuse \ + test_wav_diffuse_hoa2d test_ir_hoa2d_offset \ + test_wav_diffuse_nsp4 test_wav_diffuse_hoa2d4 \ + test_wav_diffuse_layerbug test_wav_diffirs test_sndgainramp \ + test_sndgainramp2 test_ir_spkcorr test_snd_calib1 \ + test_snd_calib2 test_snd_vbap51 test_snd_pink \ + test_snd_sndfile test_snd_sndfile2 test_snd_door4 \ + test_snd_roommic test_level_vbap3d test_ir_ortf_0deg \ + test_ir_ortf_55deg test_ir_scatter test_ir_noscatter \ + test_ir_scatter_ortf test_snd_sourcedir_generic \ + test_snd_sourcedir_generic1 \ + test_snd_sourcedir_generic_cardioid test_ir_wfs \ + test_ir_wfs_noplanewave test_level_hoa2d_basic \ + test_level_hoa2d_maxre test_ir_reverb test_ir_simplefdn \ + test_ir_simplefdn_biquadallpass test_ir_simplefdn_gain \ + test_ir_simplefdn_feedforward test_snd_vbap3d_speakermatch \ + test_ir_volumetric test_pos_obstacle test_pos_obstacle_inner \ + test_level_absorption test_ir_hrtf_0deg test_ir_hrtf_45deg \ + test_ir_hrtf_75deg test_ir_hrtf_90deg test_ir_hrtf_105deg \ + test_ir_hrtf_135deg test_ir_hrtf_180deg test_ir_hrtf_225deg \ + test_ir_hrtf_270deg test_ir_hrtf_315deg test_ir_hrtf_el90deg \ + test_ir_hrtf_el-90deg test_ir_hrtf_el45deg \ + test_ir_hrtf_el-45deg test_ir_hrtf_diffuse1 \ + test_ir_hrtf_diffuse2 test_ir_delay test_ir_delay2 \ + test_ir_delay3 test_snd_reverb test_wav_multichannel \ + test_snd_zeros test_ir_sub test_ir_sub_hoa2d test_ir_sub_nsp \ + test_ir_partconvrev test_ir_partconvrev_offset \ + test_ir_micarray_az0deg test_ir_micarray_az45deg \ + test_ir_micarray_az75deg test_ir_micarray_az90deg \ + test_ir_micarray_az105deg test_ir_micarray_az135deg \ + test_ir_micarray_az180deg test_ir_micarray_az225deg \ + test_ir_micarray_az270deg test_ir_micarray_az315deg \ + test_ir_micarray_el45deg test_ir_micarray_el90deg \ + test_ir_micarray_el-45deg test_ir_micarray_el-90deg \ + test_snd_diffuse_micarray test_snd_micarray_az0deg \ + test_ir_micarraysinc test_ir_amb1 test_ir_amb1_y \ + test_ir_amb1_z test_snd_diffuse_0deg test_snd_diffuse_17deg \ + test_snd_diffuse_rec17deg test_snd_maskplugin_fig8 \ + test_snd_maskplugin_multibeam test_snd_maskplugin_multibeam1 \ + test_snd_maskplugin_sampledgain test_snd_diffuse_inphase \ + test_snd_diffuse_basic test_snd_diffuse_maxre \ + test_snd_maskplugin_multibeam_diff test_ir_apfilter_highpass \ + test_ir_apfilter_lowpass test_snd_hoa2d_fuma_hos \ + test_ir_material_carpet test_ir_material_window \ + test_ir1_spkcalib test_snd_spkcorr0 test_snd_spkcorr70 \ + test_snd_nospkcorr test_snd_spkcorr_long \ + test_ir_nodelaylineimagesource #test_ir_simplefdn_optimt60 #test_ir_scatter_reflections diff --git a/test/expected_ir_simplefdn_biquadallpass.wav b/test/expected_ir_simplefdn_biquadallpass.wav new file mode 100644 index 0000000000000000000000000000000000000000..65c8f571c24bdc1881546faa7f1c02914d3d63fd GIT binary patch literal 64104 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 literal 0 HcmV?d00001 diff --git a/test/test_ir_simplefdn_biquadallpass.tsc b/test/test_ir_simplefdn_biquadallpass.tsc new file mode 100644 index 00000000..030c3835 --- /dev/null +++ b/test/test_ir_simplefdn_biquadallpass.tsc @@ -0,0 +1,9 @@ + + + + + + + + +