| 
							- #pragma once
 - 
 - #include "util/math.hpp"
 - 
 - 
 - namespace rack {
 - 
 - 
 - struct VUMeter {
 - 	/** Decibel level difference between adjacent meter lights */
 - 	float dBInterval = 3.0;
 - 	float dBScaled;
 - 	/** Value should be scaled so that 1.0 is clipping */
 - 	void setValue(float v) {
 - 		dBScaled = log10f(fabsf(v)) * 20.0 / dBInterval;
 - 	}
 - 	/** Returns the brightness of the light indexed by i
 - 	Light 0 is a clip light (red) which is either on or off.
 - 	All others are smooth lights which are fully bright at -dBInterval*i and higher, and fully off at -dBInterval*(i-1).
 - 	*/
 - 	float getBrightness(int i) {
 - 		if (i == 0) {
 - 			return (dBScaled >= 0.0) ? 1.0 : 0.0;
 - 		}
 - 		else {
 - 			return clamp(dBScaled + i, 0.0, 1.0);
 - 		}
 - 	}
 - };
 - 
 - 
 - } // namespace rack
 
 
  |