37 lines
1.2 KiB
GDScript
37 lines
1.2 KiB
GDScript
|
extends AudioStreamPlayer
|
||
|
|
||
|
#@export var minimum_speed: float
|
||
|
#@export var minimum_speed_hysteresis: float
|
||
|
#@export var maximum_speed: float
|
||
|
@export var speed_to_volume: Curve
|
||
|
@export var speed_to_cutoff: Curve
|
||
|
|
||
|
# for mapping the curves
|
||
|
@export var max_speed: float = 50.0
|
||
|
|
||
|
# for pausing playback to save resources and avoid quiet hum all the time
|
||
|
@export var min_speed: float = 5.0
|
||
|
@export var min_speed_hysteresis: float = 0.5
|
||
|
|
||
|
@onready var audio_bus = AudioServer.get_bus_index("WindSFX")
|
||
|
@onready var audio_filter : AudioEffectFilter = AudioServer.get_bus_effect(audio_bus,1)
|
||
|
# Called when the node enters the scene tree for the first time.
|
||
|
func _ready():
|
||
|
speed_to_volume.bake()
|
||
|
speed_to_cutoff.bake()
|
||
|
|
||
|
func _physics_process(delta):
|
||
|
var speed = get_parent().get_parent().motion_velocity.length()
|
||
|
print("speed: ", speed)
|
||
|
|
||
|
if speed > min_speed + min_speed_hysteresis / 2:
|
||
|
stream_paused = false
|
||
|
elif speed < min_speed - min_speed_hysteresis / 2:
|
||
|
stream_paused = true
|
||
|
|
||
|
volume_db = speed_to_volume.interpolate_baked(speed / max_speed)
|
||
|
print(volume_db)
|
||
|
|
||
|
audio_filter.cutoff_hz = speed_to_cutoff.interpolate_baked(speed / max_speed) * 10 # cnvert to 0-1 kHz range
|
||
|
print(audio_filter.cutoff_hz)
|