aboutsummaryrefslogtreecommitdiff
path: root/client/audio
diff options
context:
space:
mode:
Diffstat (limited to 'client/audio')
-rw-r--r--client/audio/music/error.oggbin0 -> 34768 bytes
-rw-r--r--client/audio/music/error.ogg.import19
-rw-r--r--client/audio/music/reflets-dans-leau.oggbin0 -> 966492 bytes
-rw-r--r--client/audio/music/reflets-dans-leau.ogg.import19
-rw-r--r--client/audio/play_random.gd2
-rw-r--r--client/audio/play_random.tscn4
-rw-r--r--client/audio/sound.gd106
-rw-r--r--client/audio/sound.tscn22
8 files changed, 130 insertions, 42 deletions
diff --git a/client/audio/music/error.ogg b/client/audio/music/error.ogg
new file mode 100644
index 00000000..db057380
--- /dev/null
+++ b/client/audio/music/error.ogg
Binary files differ
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
new file mode 100644
index 00000000..13d78788
--- /dev/null
+++ b/client/audio/music/reflets-dans-leau.ogg
Binary files differ
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]