30 lines
964 B
GDScript
30 lines
964 B
GDScript
extends Node3D
|
||
|
||
@export var base_spin_speed := 0.5 # Constant slow spin speed
|
||
@export var beat_boost := 2.0 # How much faster it spins on the beat
|
||
@export var smoothness := 0.1 # Lower = smoother response
|
||
@export var music_bus := "MusicBus" # Bus name where analyzer is added
|
||
|
||
@onready var analyzer = AudioServer.get_bus_effect_instance(
|
||
AudioServer.get_bus_index(music_bus), 0
|
||
)
|
||
|
||
var smoothed_bass := 0.0
|
||
|
||
func _process(delta: float) -> void:
|
||
if not analyzer:
|
||
return
|
||
|
||
# Analyze low frequencies (20–200Hz) for beat detection
|
||
var bass = analyzer.get_magnitude_for_frequency_range(20, 200)
|
||
var bass_strength = bass.length() * 10.0
|
||
|
||
# Smooth the value to avoid jitter
|
||
smoothed_bass = lerp(smoothed_bass, bass_strength, smoothness)
|
||
|
||
# Spin speed: base + a small boost from the beat
|
||
var spin_speed = base_spin_speed + smoothed_bass * beat_boost
|
||
|
||
# Apply rotation (e.g. around Y-axis)
|
||
rotation.y += spin_speed * delta
|