summaryrefslogtreecommitdiff
path: root/gtk2_ardour/logmeter.h
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/logmeter.h
parente4b9aed743fc765219ac775905a221c017c88fba (diff)
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/logmeter.h')
-rw-r--r--gtk2_ardour/logmeter.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/gtk2_ardour/logmeter.h b/gtk2_ardour/logmeter.h
new file mode 100644
index 0000000000..f7ed1dd2be
--- /dev/null
+++ b/gtk2_ardour/logmeter.h
@@ -0,0 +1,49 @@
+#ifndef __ardour_gtk_log_meter_h__
+#define __ardour_gtk_log_meter_h__
+
+#if 0
+inline float
+_log_meter (float power, double lower_db, double upper_db, double non_linearity)
+{
+ return (power < lower_db ? 0.0 : pow((power-lower_db)/(upper_db-lower_db), non_linearity));
+}
+
+inline float
+log_meter (float power)
+{
+ return _log_meter (power, -192.0, 0.0, 8.0);
+}
+#endif
+
+inline float
+log_meter (float db)
+{
+ gfloat def = 0.0f; /* Meter deflection %age */
+
+ if (db < -70.0f) {
+ def = 0.0f;
+ } else if (db < -60.0f) {
+ def = (db + 70.0f) * 0.25f;
+ } else if (db < -50.0f) {
+ def = (db + 60.0f) * 0.5f + 2.5f;
+ } else if (db < -40.0f) {
+ def = (db + 50.0f) * 0.75f + 7.5f;
+ } else if (db < -30.0f) {
+ def = (db + 40.0f) * 1.5f + 15.0f;
+ } else if (db < -20.0f) {
+ def = (db + 30.0f) * 2.0f + 30.0f;
+ } else if (db < 6.0f) {
+ def = (db + 20.0f) * 2.5f + 50.0f;
+ } else {
+ def = 115.0f;
+ }
+
+ /* 115 is the deflection %age that would be
+ when db=6.0. this is an arbitrary
+ endpoint for our scaling.
+ */
+
+ return def/115.0f;
+}
+
+#endif /* __ardour_gtk_log_meter_h__ */