projektluzid/AudioMixerVisualizer/AudioMixerMeterDrawer.gd
2025-06-07 19:10:56 +02:00

35 lines
891 B
GDScript

extends Control
var bus
func assign_bus(_bus):
self.bus = _bus
func _process(_delta):
queue_redraw()
func _draw():
if bus == null:
return
var meter_ui = bus.ui.get_node("VBox/HBox/Meter/HBox")
var pos = meter_ui.global_position - global_position
var _size = meter_ui.size
# Draw db-markings
var db_mark_color = Color(1.0, 1.0, 1.0, 0.03)
for i in 12:
draw_db_mark(pos, _size, i * -6, db_mark_color)
# Draw max-peak line
draw_db_mark(pos, _size, bus.max_peak, Color(0.1, 0.8, 0.1, normalize_peak(bus.max_peak)))
func draw_db_mark(pos, _size, db, color):
var db_norm = 1 - normalize_peak(db)
var y_offset = Vector2(0, db_norm * _size.y)
draw_line(pos + y_offset, pos + y_offset + Vector2(_size.x, 0), color)
# Takes a peak in db, and spits out a normalized 0 to 1 value
func normalize_peak(peak_db):
var p = (peak_db + 200) / 200.0
return p * p * p * p * p * p