diff options
author | Robin Gareus <robin@gareus.org> | 2013-07-22 18:45:08 +0200 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-08-08 15:24:15 -0400 |
commit | 553d393d30c53f5c067da0033541015bbc6d2057 (patch) | |
tree | 37b1e66008f9d233cc539623b2f456f50e6209c3 /gtk2_ardour/logmeter.h | |
parent | bd2ddc09ab3091c7a57d814751c88eea0838c553 (diff) |
implement new meter types
Diffstat (limited to 'gtk2_ardour/logmeter.h')
-rw-r--r-- | gtk2_ardour/logmeter.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/gtk2_ardour/logmeter.h b/gtk2_ardour/logmeter.h index d861509080..c7b18ea6b9 100644 --- a/gtk2_ardour/logmeter.h +++ b/gtk2_ardour/logmeter.h @@ -34,6 +34,16 @@ alt_log_meter (float power) } #endif +/* prototypes - avoid compiler warning */ +inline float log_meter (float db); +inline float meter_deflect_ppm (float); +inline float meter_deflect_din (float); +inline float meter_deflect_nordic (float); +inline float meter_deflect_vu (float); +inline float meter_deflect_k (float, float); + + + inline float log_meter (float db) { @@ -65,4 +75,71 @@ log_meter (float db) return def/115.0f; } +inline float +meter_deflect_ppm (float db) +{ + if (db < -30) { + // 2.258 == ((-30 + 32.0)/ 28.0) / 10^(-30 / 20); + return (dB_to_coefficient(db) * 2.258769757f); + } else { + const float rv = (db + 32.0f) / 28.0f; + if (rv < 1.0) { + return rv; + } else { + return 1.0; + } + } +} + +inline float +meter_deflect_din (float db) +{ + float rv = dB_to_coefficient(db); + rv = sqrtf (sqrtf (2.3676f * rv)) - 0.1803f; + if (rv >= 1.0) { + return 1.0; + } else { + return (rv > 0 ? rv : 0.0); + } +} + +inline float +meter_deflect_nordic (float db) +{ + if (db < -60) { + return 0.0; + } else { + const float rv = (db + 60.0f) / 54.0f; + if (rv < 1.0) { + return rv; + } else { + return 1.0; + } + } +} + +inline float +meter_deflect_vu (float db) +{ + const float rv = 6.77165f * dB_to_coefficient(db); + if (rv > 1.0) return 1.0; + return rv; +} + +inline float +meter_deflect_k (float db, float krange) +{ + db+=krange; + if (db < -40.0f) { + return (dB_to_coefficient(db) * 500.0f / (krange + 45.0f)); + } else { + const float rv = (db + 45.0f) / (krange + 45.0f); + if (rv < 1.0) { + return rv; + } else { + return 1.0; + } + } +} + #endif /* __ardour_gtk_log_meter_h__ */ |