From a7e14b2065b6f1ee07aac3c6b936d968abfbd42c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Nusser?= <andre.nusser@googlemail.com>
Date: Sat, 21 Jul 2018 15:44:46 +0200
Subject: Fix visualization to be samplerate independent.

---
 src/latencyfilter.cc | 9 ++++++++-
 src/settings.h       | 8 ++++----
 2 files changed, 12 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/latencyfilter.cc b/src/latencyfilter.cc
index 9410b50..0f3259b 100644
--- a/src/latencyfilter.cc
+++ b/src/latencyfilter.cc
@@ -44,6 +44,12 @@ static T1 getLatencySamples(T1 latency_ms, T2 samplerate)
 	return latency_ms * samplerate / 1000.;
 }
 
+template<typename T1, typename T2>
+static T1 getLatencyMs(T1 latency_samples, T2 samplerate)
+{
+	return 1000. * latency_samples / samplerate;
+}
+
 bool LatencyFilter::filter(event_t& event, std::size_t pos)
 {
 	auto enabled = settings.enable_latency_modifier.load();
@@ -86,7 +92,8 @@ bool LatencyFilter::filter(event_t& event, std::size_t pos)
 	event.offset += latency_laid_back; // laid back offset (user controlled)
 	event.offset += latency_offset; // current drift
 
-	settings.latency_current.store(latency_offset + latency_laid_back);
+	auto latency_current_ms = getLatencyMs(latency_offset + latency_laid_back, samplerate);
+	settings.latency_current.store(latency_current_ms);
 
 	return true;
 }
diff --git a/src/settings.h b/src/settings.h
index f37a810..e698d20 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -126,8 +126,8 @@ struct Settings
 	static float constexpr latency_regain_default = 0.9f;
 	Atomic<float> latency_regain{latency_regain_default};
 
-	// Current latency offset - for UI
-	Atomic<int> latency_current{0};
+	// Current latency offset in ms - for UI
+	Atomic<float> latency_current{0};
 };
 
 //! Settings getter class.
@@ -177,7 +177,7 @@ struct SettingsGetter
 	SettingRef<float> latency_laid_back_ms;
 	SettingRef<float> latency_stddev;
 	SettingRef<float> latency_regain;
-	SettingRef<int> latency_current;
+	SettingRef<float> latency_current;
 
 	SettingsGetter(Settings& settings)
 		: drumkit_file(settings.drumkit_file)
@@ -268,7 +268,7 @@ public:
 	Notifier<float> latency_laid_back_ms;
 	Notifier<float> latency_stddev;
 	Notifier<float> latency_regain;
-	Notifier<int> latency_current;
+	Notifier<float> latency_current;
 
 	void evaluate()
 	{
-- 
cgit v1.2.3