|  | #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
 |