godot-demo-projects/audio/spectrum/show_spectrum.gd

37 lines
743 B
GDScript

extends Node2D
const VU_COUNT=16
const FREQ_MAX = 11050.0
const WIDTH = 400
const HEIGHT = 100
const MIN_DB = 60
var spectrum
func _draw():
var w = WIDTH / VU_COUNT
var prev_hz = 0
for i in range(1,VU_COUNT+1):
var hz = i * FREQ_MAX / VU_COUNT;
var f = spectrum.get_magnitude_for_frequency_range(prev_hz,hz)
var energy = clamp((MIN_DB + linear2db(f.length()))/MIN_DB,0,1)
#print("db ",db,": ",f.length())
var height = energy * HEIGHT
draw_rect(Rect2(w*i,HEIGHT-height,w,height),Color(1,1,1))
prev_hz = hz
func _process(delta):
update()
func _ready():
spectrum = AudioServer.get_bus_effect_instance(0,0)
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass