From d08840a61f405bc89e730c0cef51537e89e6dbb5 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 3 May 2023 17:23:12 +0200 Subject: replace sqrt scaling of normalized input velocity by a curve function similar to what is implemented in Edrumulus --- src/inputprocessor.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index a15c9c1..f0b2935 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -298,9 +298,12 @@ auto target_max_power_db = 10 * log10(instr->getMaxPower()); auto sel_power_db = 10 * log10(sample->getPower()); auto target_dynamic_db = 40.0; // dB -auto target_power_db = sqrt(event.velocity) * target_dynamic_db + target_max_power_db - target_dynamic_db; -auto diff_power_db = target_power_db - sel_power_db; -event_sample.scale = pow(10.0, diff_power_db / 20); +static auto a = 0.981; +static auto factor = 126.0f / (pow(a, 126.0f) - 1.0f); +auto y = (factor * (pow(a, event.velocity * 127.0f - 1.0f) - 1.0f) + 1.0f) / 127.0f; +auto target_power_db = y * target_dynamic_db + target_max_power_db - target_dynamic_db; +auto diff_power_db = target_power_db - sel_power_db; +event_sample.scale = pow(10.0, diff_power_db / 20); //printf("event_sample.scale: %f, diff_power_db: %f, target_power_db: %f, sel_power_db: %f\n", event_sample.scale, diff_power_db, target_power_db, sel_power_db); -- cgit v1.2.3