diff options
Diffstat (limited to 'client/audio')
| -rw-r--r-- | client/audio/music/error.ogg | bin | 0 -> 34768 bytes | |||
| -rw-r--r-- | client/audio/music/error.ogg.import | 19 | ||||
| -rw-r--r-- | client/audio/music/reflets-dans-leau.ogg | bin | 0 -> 966492 bytes | |||
| -rw-r--r-- | client/audio/music/reflets-dans-leau.ogg.import | 19 | ||||
| -rw-r--r-- | client/audio/play_random.gd | 2 | ||||
| -rw-r--r-- | client/audio/play_random.tscn | 4 | ||||
| -rw-r--r-- | client/audio/sound.gd | 106 | ||||
| -rw-r--r-- | client/audio/sound.tscn | 22 |
8 files changed, 130 insertions, 42 deletions
diff --git a/client/audio/music/error.ogg b/client/audio/music/error.ogg Binary files differnew file mode 100644 index 00000000..db057380 --- /dev/null +++ b/client/audio/music/error.ogg diff --git a/client/audio/music/error.ogg.import b/client/audio/music/error.ogg.import new file mode 100644 index 00000000..ef7c25c4 --- /dev/null +++ b/client/audio/music/error.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://rvxye5h3fvh0" +path="res://.godot/imported/error.ogg-d05e4b9d043b8ee254ca5e65b090a5cc.oggvorbisstr" + +[deps] + +source_file="res://audio/music/error.ogg" +dest_files=["res://.godot/imported/error.ogg-d05e4b9d043b8ee254ca5e65b090a5cc.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/client/audio/music/reflets-dans-leau.ogg b/client/audio/music/reflets-dans-leau.ogg Binary files differnew file mode 100644 index 00000000..13d78788 --- /dev/null +++ b/client/audio/music/reflets-dans-leau.ogg diff --git a/client/audio/music/reflets-dans-leau.ogg.import b/client/audio/music/reflets-dans-leau.ogg.import new file mode 100644 index 00000000..27b034c7 --- /dev/null +++ b/client/audio/music/reflets-dans-leau.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dpgt5loaberoj" +path="res://.godot/imported/reflets-dans-leau.ogg-b4a7d816b71a4043429c7dc7d9411e8f.oggvorbisstr" + +[deps] + +source_file="res://audio/music/reflets-dans-leau.ogg" +dest_files=["res://.godot/imported/reflets-dans-leau.ogg-b4a7d816b71a4043429c7dc7d9411e8f.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/client/audio/play_random.gd b/client/audio/play_random.gd index 4bab2b78..3196b963 100644 --- a/client/audio/play_random.gd +++ b/client/audio/play_random.gd @@ -1,5 +1,5 @@ # Hurry Curry! - a game about cooking -# Copyright (C) 2025 Hurry Curry! contributors +# Copyright (C) 2026 Hurry Curry! Contributors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by diff --git a/client/audio/play_random.tscn b/client/audio/play_random.tscn index 0521eb5a..815dcabf 100644 --- a/client/audio/play_random.tscn +++ b/client/audio/play_random.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=2 format=3 uid="uid://bncx0wul2ikrg"] +[gd_scene format=3 uid="uid://bncx0wul2ikrg"] [ext_resource type="Script" uid="uid://n4jwod1jfuiv" path="res://audio/play_random.gd" id="1_c8pxf"] -[node name="PlayRandom" type="Node3D"] +[node name="PlayRandom" type="Node3D" unique_id=709936730] script = ExtResource("1_c8pxf") diff --git a/client/audio/sound.gd b/client/audio/sound.gd index 8c7649aa..579c0224 100644 --- a/client/audio/sound.gd +++ b/client/audio/sound.gd @@ -1,5 +1,5 @@ # Hurry Curry! - a game about cooking -# Copyright (C) 2025 Hurry Curry! contributors +# Copyright (C) 2026 Hurry Curry! Contributors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -22,23 +22,90 @@ extends Node var item_sounds: Dictionary = {} var item_id: int = 0 +var current_music_player: AudioStreamPlayer +var current_music_filename +var dampen_music := false +var volume_target = 0. +var dampen_target = 0. +var dampen_value = 0. -func play_music(music : String): # If music == "stop", this stops all music - for stream in music_node.get_children(): - stream.stop() - - if music_node.get_node_or_null(music) == null: - return - else: - music_node.get_node(music).play() +const VOLUME_MIN = -30. +const FADE_IN_SPEED = 200. +const FADE_OUT_SPEED = 20. +const EFFECT_FADE_SPEED = 0.5 -func set_volume(bus : int, value:float): +var is_saved = false +var saved_filename +var saved_volume = 0. +var saved_dampen = false + +func _ready() -> void: + get_window().focus_entered.connect(func(): restore_playing()) + get_window().focus_exited.connect(func(): save_playing(); set_music(null)) + +func restore_playing(): + if is_saved: set_music(saved_filename, saved_volume, saved_dampen) + is_saved = false + +func save_playing(): + saved_filename = current_music_filename + saved_dampen = dampen_music + saved_volume = volume_target + is_saved = true + +func set_music(filename, volume = 0., dampen = false): + dampen_music = dampen + if current_music_filename != filename: + if filename == null: + current_music_filename = null + current_music_player = null + else: + var player = AudioStreamPlayer.new() + player.stream = load("res://audio/music/%s.ogg" % filename) + player.volume_db = VOLUME_MIN + 1. + player.autoplay = true + player.name = filename + player.bus = "Music" + current_music_player = player + current_music_filename = filename + $Music.add_child(player) + + volume_target = volume + dampen_target = 1. if dampen else 0. + +func _physics_process(dt: float): + for c in $Music.get_children(): + if c is AudioStreamPlayer: + if c == current_music_player: + if c.volume_db > volume_target: c.volume_db = max(volume_target, c.volume_db - dt * FADE_OUT_SPEED) + else: c.volume_db = min(volume_target, c.volume_db + dt * FADE_IN_SPEED) + else: + c.volume_db -= dt * FADE_OUT_SPEED + if c.volume_db <= VOLUME_MIN: c.queue_free() + + var prev_dampen = dampen_value + dampen_value = G.interpolate_linear(dampen_value, dampen_target, dt * EFFECT_FADE_SPEED) + AudioServer.set_bus_effect_enabled(1, 0, dampen_value > 0.) + AudioServer.set_bus_effect_enabled(1, 1, dampen_value > 0.) + if dampen_value != prev_dampen: + var lowpass = AudioServer.get_bus_effect(1, 0) as AudioEffectFilter + var reverb = AudioServer.get_bus_effect(1, 1) as AudioEffectReverb + lowpass.cutoff_hz = lerp(3200., 400., pow(dampen_value, 8.)) + reverb.wet = dampen_value * 0.5 + + for k in item_sounds.keys(): + if item_sounds[k][0] != null: + var position: Vector3 = item_sounds[k][0].position + item_sounds[k][1].position = position + item_sounds[k][2].position = position + elif not item_sounds[k][3]: + item_finished(k) + + +func set_volume(bus: int, value: float): AudioServer.set_bus_volume_db(bus, value) - - if value == -30: - AudioServer.set_bus_mute(bus, true) - else: - AudioServer.set_bus_mute(bus, false) + if value == -30: AudioServer.set_bus_mute(bus, true) + else: AudioServer.set_bus_mute(bus, false) func play_click(): click_sound.play() @@ -89,12 +156,3 @@ func free_sound(id: int): running_player.queue_free() stopping_player.queue_free() item_sounds.erase(id) - -func _physics_process(_delta): - for k in item_sounds.keys(): - if item_sounds[k][0] != null: - var position: Vector3 = item_sounds[k][0].position - item_sounds[k][1].position = position - item_sounds[k][2].position = position - elif not item_sounds[k][3]: - item_finished(k) diff --git a/client/audio/sound.tscn b/client/audio/sound.tscn index b15a3263..33974b50 100644 --- a/client/audio/sound.tscn +++ b/client/audio/sound.tscn @@ -1,33 +1,25 @@ -[gd_scene load_steps=5 format=3 uid="uid://d3h243yic44rr"] +[gd_scene format=3 uid="uid://d3h243yic44rr"] [ext_resource type="Script" uid="uid://cho8r5m78a4ur" path="res://audio/sound.gd" id="1_b0qb1"] [ext_resource type="AudioStream" uid="uid://cpyn511c5mtni" path="res://gui/resources/sounds/click.ogg" id="2_mhrce"] [ext_resource type="AudioStream" uid="uid://dtr1khfyqr56o" path="res://gui/resources/sounds/hover.ogg" id="3_qft2s"] [ext_resource type="AudioStream" uid="uid://dft3m8utnxhs7" path="res://gui/resources/sounds/game_start.ogg" id="4_le874"] -[node name="Sound" type="Node3D"] +[node name="Sound" type="Node3D" unique_id=1522713818] script = ExtResource("1_b0qb1") -[node name="UI" type="Node" parent="."] +[node name="UI" type="Node" parent="." unique_id=1715280669] -[node name="Click" type="AudioStreamPlayer" parent="UI"] +[node name="Click" type="AudioStreamPlayer" parent="UI" unique_id=711699613] stream = ExtResource("2_mhrce") bus = &"SFX" -[node name="Hover" type="AudioStreamPlayer" parent="UI"] +[node name="Hover" type="AudioStreamPlayer" parent="UI" unique_id=2039805700] stream = ExtResource("3_qft2s") bus = &"SFX" -[node name="GameStart" type="AudioStreamPlayer" parent="UI"] +[node name="GameStart" type="AudioStreamPlayer" parent="UI" unique_id=246241584] stream = ExtResource("4_le874") bus = &"SFX" -[node name="Music" type="Node" parent="."] - -[node name="MainMenu" type="AudioStreamPlayer" parent="Music"] -volume_db = 1.0 -bus = &"Music" - -[node name="Lobby" type="AudioStreamPlayer" parent="Music"] -volume_db = -3.5 -bus = &"Music" +[node name="Music" type="Node" parent="." unique_id=473283634] |