Untitled
extends Area3D @export var audio_player: AudioStreamPlayer3D @export var transition_time: float = 0.5 # Time for smooth transition var target_volume_db := 0.0 var current_volume_db := 0.0 var target_lowpass_cutoff := 20000 # Max frequency (no muffling) var current_lowpass_cutoff := 20000 var lowpass_filter: AudioEffectLowPassFilter func _ready(): # Assign the player to the "MuffledBus" audio_player.bus = "MuffledBus" # Create a dedicated filter for this audio instance lowpass_filter = AudioEffectLowPassFilter.new() lowpass_filter.cutoff_hz = current_lowpass_cutoff # Connect signals properly connect("body_entered", _on_body_entered) connect("body_exited", _on_body_exited) func _process(delta): # Smooth transitions only for this audio player current_volume_db = lerp(current_volume_db, target_volume_db, delta / transition_time) current_lowpass_cutoff = lerp(current_lowpass_cutoff, target_lowpass_cutoff, delta / transition_time) # Apply smooth effect specifically to this player audio_player.volume_db = current_volume_db # Access the playback and apply the filter directly var playback := audio_player.get_stream_playback() if playback and playback is AudioStreamPlaybackResampled: playback.set_mix_target(AudioStreamPlayer3D.MIX_TARGET_STEREO) playback.set_filter_enabled(0, true) playback.set_filter_cutoff(0, current_lowpass_cutoff) func _on_body_entered(body): if body.is_in_group("Player"): target_volume_db = -20 target_lowpass_cutoff = 1000 func _on_body_exited(body): if body.is_in_group("Player"): target_volume_db = 0 target_lowpass_cutoff = 20000
Leave a Comment