From fe1986214251bcd110837b81ed2159d75c58f8e2 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 10 Apr 2021 18:36:47 +0200 Subject: Get rid of big stack allocation during resampler (re-)configuration. --- src/drumgizmo.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/drumgizmo.cc') diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index ca91c12..345e89d 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -463,10 +463,13 @@ void DrumGizmo::setSamplerate(float samplerate, float resampling_quality) zita[c].set_inp_data(nullptr); zita[c].set_inp_count(null_size); - constexpr auto sz = 4096 * 16; - sample_t s[sz]; - zita[c].set_out_data(s); - zita[c].set_out_count(sz); + auto scratch_buffer_size = (null_size / ratio) + 1; + if(scratch_buffer.size() < scratch_buffer_size) + { + scratch_buffer.resize(scratch_buffer_size); + } + zita[c].set_out_data(scratch_buffer.data()); + zita[c].set_out_count(scratch_buffer_size); zita[c].process(); } -- cgit v1.2.3 From 2a3a269b12a28f0bfadca30ed800184a98f215b8 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 4 Jul 2021 19:04:56 +0200 Subject: Clear all active events (ie. stop playing samples) when loading a new kit. --- src/drumgizmo.cc | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/drumgizmo.cc') diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 345e89d..d84799d 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -119,6 +119,12 @@ void DrumGizmo::setRandomSeed(unsigned int seed) bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) { + if(settings_getter.drumkit_file.hasChanged()) + { + // New kit loaded/loading - old events no longer makes sense. + events_ds.clear(); + } + if(settings_getter.enable_resampling.hasChanged()) { enable_resampling = settings_getter.enable_resampling.getValue(); -- cgit v1.2.3 From 39118c5f8577451c434531cf38c7505762c69484 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 4 Jul 2021 19:05:38 +0200 Subject: Skip events whose audio-files has not yet been loaded. --- src/drumgizmo.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/drumgizmo.cc') diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index d84799d..a38186f 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -352,8 +352,9 @@ void DrumGizmo::getSamples(int ch, int pos, sample_t* s, size_t sz) if(!af.isLoaded() || !af.isValid() || (s == nullptr)) { - removeevent = true; - break; + // This event cannot be played - schedule for deletion and continue. + to_remove.push_back(sample_event.id); + continue; } if(sample_event.offset > (pos + sz)) -- cgit v1.2.3 From 17dbc476f4c2d984d083d66d142cca496ed5f84e Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 4 Jul 2021 19:06:01 +0200 Subject: Fix compiler warning. --- src/drumgizmo.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/drumgizmo.cc') diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index a38186f..d3665c2 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -438,7 +438,7 @@ float DrumGizmo::samplerate() void DrumGizmo::setSamplerate(float samplerate, float resampling_quality) { - DEBUG(dgeditor, "%s samplerate: %f\n", __PRETTY_FUNCTION__, samplerate); + DEBUG(engine, "%s samplerate: %f\n", __PRETTY_FUNCTION__, samplerate); settings.samplerate.store(samplerate); // Notify input engine of the samplerate change. @@ -470,7 +470,8 @@ void DrumGizmo::setSamplerate(float samplerate, float resampling_quality) zita[c].set_inp_data(nullptr); zita[c].set_inp_count(null_size); - auto scratch_buffer_size = (null_size / ratio) + 1; + std::size_t scratch_buffer_size = (null_size / ratio); + if(scratch_buffer.size() < scratch_buffer_size) { scratch_buffer.resize(scratch_buffer_size); -- cgit v1.2.3