Untitled

 avatar
unknown
plain_text
a month ago
1.8 kB
3
Indexable
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