From 7c8eba29d8d64469ab1adad96189b04f7f115c26 Mon Sep 17 00:00:00 2001 From: Zacharie Guet Date: Fri, 31 Oct 2025 17:21:40 +0100 Subject: [PATCH] =?UTF-8?q?mise=20en=20place=20du=20syst=C3=A8me=20audio?= =?UTF-8?q?=20par=20phase=20et=20de=20la=20musique=20du=20camion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ambiance/ambiance_phase_2.ogg.import | 4 +- .../ambiance}/truck_ambience_phase_1.ogg | Bin .../truck_ambience_phase_1.ogg.import | 19 +++ .../ambiance}/truck_ambience_phase_2.ogg | Bin .../truck_ambience_phase_2.ogg.import | 19 +++ .../ambiance}/truck_ambience_phase_3.ogg | Bin .../truck_ambience_phase_3.ogg.import | 19 +++ .../music/assets/morceaux}/truck_music.ogg | Bin .../assets/morceaux/truck_music.ogg.import | 19 +++ common/music/music.tscn | 63 +++++--- common/music/scripts/music.gd | 136 ++++++++++++------ default_bus_layout.tres | 3 + stages/terrain/planet/scripts/planet.gd | 1 + .../sound/truck_ambience_phase_1.ogg.import | 19 --- .../sound/truck_ambience_phase_2.ogg.import | 19 --- .../sound/truck_ambience_phase_3.ogg.import | 19 --- .../truck/assets/sound/truck_music.ogg.import | 19 --- .../terrain/truck/scripts/truck_interior.gd | 2 + 18 files changed, 217 insertions(+), 144 deletions(-) rename {stages/terrain/truck/assets/sound => common/music/assets/ambiance}/truck_ambience_phase_1.ogg (100%) create mode 100644 common/music/assets/ambiance/truck_ambience_phase_1.ogg.import rename {stages/terrain/truck/assets/sound => common/music/assets/ambiance}/truck_ambience_phase_2.ogg (100%) create mode 100644 common/music/assets/ambiance/truck_ambience_phase_2.ogg.import rename {stages/terrain/truck/assets/sound => common/music/assets/ambiance}/truck_ambience_phase_3.ogg (100%) create mode 100644 common/music/assets/ambiance/truck_ambience_phase_3.ogg.import rename {stages/terrain/truck/assets/sound => common/music/assets/morceaux}/truck_music.ogg (100%) create mode 100644 common/music/assets/morceaux/truck_music.ogg.import create mode 100644 default_bus_layout.tres delete mode 100644 stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg.import delete mode 100644 stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg.import delete mode 100644 stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg.import delete mode 100644 stages/terrain/truck/assets/sound/truck_music.ogg.import diff --git a/common/music/assets/ambiance/ambiance_phase_2.ogg.import b/common/music/assets/ambiance/ambiance_phase_2.ogg.import index ae5e4aa..2bda51c 100644 --- a/common/music/assets/ambiance/ambiance_phase_2.ogg.import +++ b/common/music/assets/ambiance/ambiance_phase_2.ogg.import @@ -13,7 +13,7 @@ dest_files=["res://.godot/imported/ambiance_phase_2.ogg-2260c3829d7e53dd94462ea7 [params] loop=false -loop_offset=0 -bpm=0 +loop_offset=0.0 +bpm=0.0 beat_count=0 bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg b/common/music/assets/ambiance/truck_ambience_phase_1.ogg similarity index 100% rename from stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg rename to common/music/assets/ambiance/truck_ambience_phase_1.ogg diff --git a/common/music/assets/ambiance/truck_ambience_phase_1.ogg.import b/common/music/assets/ambiance/truck_ambience_phase_1.ogg.import new file mode 100644 index 0000000..288f770 --- /dev/null +++ b/common/music/assets/ambiance/truck_ambience_phase_1.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://gjr7ruv7wfci" +path="res://.godot/imported/truck_ambience_phase_1.ogg-68cfb99a7f0a6b83abe32ff81d60f6ab.oggvorbisstr" + +[deps] + +source_file="res://common/music/assets/ambiance/truck_ambience_phase_1.ogg" +dest_files=["res://.godot/imported/truck_ambience_phase_1.ogg-68cfb99a7f0a6b83abe32ff81d60f6ab.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg b/common/music/assets/ambiance/truck_ambience_phase_2.ogg similarity index 100% rename from stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg rename to common/music/assets/ambiance/truck_ambience_phase_2.ogg diff --git a/common/music/assets/ambiance/truck_ambience_phase_2.ogg.import b/common/music/assets/ambiance/truck_ambience_phase_2.ogg.import new file mode 100644 index 0000000..75f220a --- /dev/null +++ b/common/music/assets/ambiance/truck_ambience_phase_2.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://car7b6j0ihi30" +path="res://.godot/imported/truck_ambience_phase_2.ogg-e62a693ce667406e511b7afb0da84f79.oggvorbisstr" + +[deps] + +source_file="res://common/music/assets/ambiance/truck_ambience_phase_2.ogg" +dest_files=["res://.godot/imported/truck_ambience_phase_2.ogg-e62a693ce667406e511b7afb0da84f79.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg b/common/music/assets/ambiance/truck_ambience_phase_3.ogg similarity index 100% rename from stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg rename to common/music/assets/ambiance/truck_ambience_phase_3.ogg diff --git a/common/music/assets/ambiance/truck_ambience_phase_3.ogg.import b/common/music/assets/ambiance/truck_ambience_phase_3.ogg.import new file mode 100644 index 0000000..97b87b5 --- /dev/null +++ b/common/music/assets/ambiance/truck_ambience_phase_3.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://dtcv4p3a03giu" +path="res://.godot/imported/truck_ambience_phase_3.ogg-9e9b82ea556ea85244bd2768bddbb340.oggvorbisstr" + +[deps] + +source_file="res://common/music/assets/ambiance/truck_ambience_phase_3.ogg" +dest_files=["res://.godot/imported/truck_ambience_phase_3.ogg-9e9b82ea556ea85244bd2768bddbb340.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_music.ogg b/common/music/assets/morceaux/truck_music.ogg similarity index 100% rename from stages/terrain/truck/assets/sound/truck_music.ogg rename to common/music/assets/morceaux/truck_music.ogg diff --git a/common/music/assets/morceaux/truck_music.ogg.import b/common/music/assets/morceaux/truck_music.ogg.import new file mode 100644 index 0000000..b4c6f74 --- /dev/null +++ b/common/music/assets/morceaux/truck_music.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://brtjlgjqnrvcb" +path="res://.godot/imported/truck_music.ogg-cb4f770bcd6358719b9d817459f5f86b.oggvorbisstr" + +[deps] + +source_file="res://common/music/assets/morceaux/truck_music.ogg" +dest_files=["res://.godot/imported/truck_music.ogg-cb4f770bcd6358719b9d817459f5f86b.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/common/music/music.tscn b/common/music/music.tscn index b83697b..55d53bd 100644 --- a/common/music/music.tscn +++ b/common/music/music.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://b6hscxcrj065q"] +[gd_scene load_steps=11 format=3 uid="uid://b6hscxcrj065q"] [ext_resource type="Script" uid="uid://2p5d6vogtn82" path="res://common/music/scripts/music.gd" id="1_ji160"] [ext_resource type="AudioStream" uid="uid://diyefcv8tqa3r" path="res://common/music/assets/morceaux/forest_phase_1.ogg" id="1_stre8"] @@ -6,31 +6,54 @@ [ext_resource type="AudioStream" uid="uid://dipnmlprwfo12" path="res://common/music/assets/ambiance/ambiance_phase_1.ogg" id="4_71qp2"] [ext_resource type="AudioStream" uid="uid://bm0tdi6bd2e65" path="res://common/music/assets/ambiance/ambiance_phase_2.ogg" id="5_a71a3"] [ext_resource type="AudioStream" uid="uid://dftxjfdqgsbd3" path="res://common/music/assets/ambiance/ambiance_phase_3.ogg" id="6_i5lxw"] +[ext_resource type="AudioStream" uid="uid://brtjlgjqnrvcb" path="res://common/music/assets/morceaux/truck_music.ogg" id="7_a71a3"] -[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_i0tje"] -loop = false -stream_count = 2 -stream_0 = ExtResource("1_stre8") -stream_1 = ExtResource("2_ji160") - -[sub_resource type="AudioStreamPlaylist" id="AudioStreamPlaylist_w0e2r"] -loop = false +[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_i5lxw"] stream_count = 3 -stream_0 = ExtResource("4_71qp2") -stream_1 = ExtResource("5_a71a3") -stream_2 = ExtResource("6_i5lxw") +stream_0/stream = ExtResource("4_71qp2") +stream_0/volume = 0.0 +stream_1/stream = ExtResource("5_a71a3") +stream_1/volume = -60.0 +stream_2/stream = ExtResource("6_i5lxw") +stream_2/volume = -60.0 -[node name="Son" type="Node" node_paths=PackedStringArray("decontamination_musics")] +[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_i0tje"] +stream_count = 2 +stream_0/stream = ExtResource("1_stre8") +stream_0/volume = -60.0 +stream_1/stream = ExtResource("2_ji160") +stream_1/volume = -60.0 + +[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_w0e2r"] +stream_count = 1 +stream_0/stream = ExtResource("7_a71a3") +stream_0/volume = -60.0 + +[node name="Son" type="Node" node_paths=PackedStringArray("playing_ambiances")] process_mode = 3 script = ExtResource("1_ji160") -decontamination_musics = [null, null] -decontamination_musics_levels = Array[float]([0.0, 30.0]) +ambiance_volume = -3.0 +garden_phases_scores = Array[int]([0, 10, 30]) +playing_ambiances = [NodePath("Ambiance/Default")] -[node name="Musique" type="AudioStreamPlayer" parent="."] -stream = SubResource("AudioStreamPlaylist_i0tje") -volume_db = 1.5 +[node name="Ambiance" type="Node" parent="."] +unique_name_in_owner = true + +[node name="Default" type="AudioStreamPlayer" parent="Ambiance"] +unique_name_in_owner = true +stream = SubResource("AudioStreamSynchronized_i5lxw") +volume_db = 7.021 autoplay = true -[node name="Ambiance" type="AudioStreamPlayer" parent="."] -stream = SubResource("AudioStreamPlaylist_w0e2r") +[node name="Musics" type="Node" parent="."] +unique_name_in_owner = true + +[node name="Planet" type="AudioStreamPlayer" parent="Musics"] +unique_name_in_owner = true +stream = SubResource("AudioStreamSynchronized_i0tje") +autoplay = true + +[node name="Truck" type="AudioStreamPlayer" parent="Musics"] +unique_name_in_owner = true +stream = SubResource("AudioStreamSynchronized_w0e2r") autoplay = true diff --git a/common/music/scripts/music.gd b/common/music/scripts/music.gd index 6a40d6c..041b64d 100644 --- a/common/music/scripts/music.gd +++ b/common/music/scripts/music.gd @@ -1,61 +1,105 @@ extends Node +const MIN_VOLUME = -60. + +var is_ready = false + +@export var music_volume : float = 0. : + set(v): + music_volume = v + if is_ready: setup_volume() +@export var ambiance_volume : float = 0. : + set(v): + ambiance_volume = v + if is_ready: setup_volume() + @export var default_fade_time = 1.0 -@export var garden_musics : Array[AudioStreamPlayer] -@export var garden_score_musics_levels : Array[float] +@export var garden_phase = 0 +@export var garden_phases_scores : Array[int] -@onready var playing_music = null : set = play_music +@export var playing_musics : Array[AudioStreamPlayer] = [] +@export var playing_ambiances : Array[AudioStreamPlayer] = [] func _ready(): GameInfo.game_data.current_planet_data_updated.connect(_on_current_planet_data_updated) + setup_volume() + is_ready = true + +func setup_volume(): + for c in %Ambiance.get_children(): + var player = c as AudioStreamPlayer + player.volume_db = ambiance_volume if playing_ambiances.find(player) != -1 else MIN_VOLUME + + for c in %Musics.get_children(): + var player = c as AudioStreamPlayer + player.volume_db = music_volume if playing_musics.find(player) != -1 else MIN_VOLUME + + for player in get_all_audio_stream(): + player.play() + setup_phase(player) + +func update_phase(): + for player in get_all_audio_stream(): + setup_phase(player) + +func get_all_audio_stream() -> Array[AudioStreamPlayer]: + var all_audio_stream : Array[AudioStreamPlayer] = [] + var all_children = %Ambiance.get_children() + all_children.append_array(%Musics.get_children()) + + print(all_children) + for c in all_children: + if c is AudioStreamPlayer: + all_audio_stream.append(c) + return all_audio_stream func _on_current_planet_data_updated(planet_data : PlanetData): if planet_data: - planet_data.contamination_updated.connect(_on_contamination_updated) - if len(garden_musics): - play_music(garden_musics[0]) - -func _on_contamination_updated(garden_score : float): - var actual_level = 0 - if len(garden_score_musics_levels) and len(garden_musics): - for level in range(1, len(garden_score_musics_levels)): - if garden_score > garden_score_musics_levels[level]: - actual_level = level - - if len(garden_musics) > actual_level: - play_music(garden_musics[actual_level]) - -func stop_music(): - play_music(null) - -func play_music(music : AudioStreamPlayer): - if playing_music != null: - if playing_music != music: - if playing_music: - await audio_fade(playing_music, false).finished - - if music: - music.play() - elif music != null and music != playing_music: - music.play() - playing_music = music - -func audio_fade(music : AudioStreamPlayer, fade_in = true, fade_time = default_fade_time) -> Tween: - var fade_tween : Tween = get_tree().create_tween() - var music_default_volume = music.volume_db - var target_volume = music_default_volume if fade_in else -80. + update_garden_phase(planet_data) + planet_data.updated.connect(update_garden_phase) - if fade_in: - music.volume_db = -80. - music.play() +func update_garden_phase(planet_data : PlanetData): + var phase : int = 0 + for i in range(len(garden_phases_scores)): + if planet_data.garden_score >= garden_phases_scores[i]: + phase = i - fade_tween.tween_property(music, "volume_db", target_volume, fade_time) + update_phase() + + garden_phase = phase + +func enter_planet(): + set_volume(%Planet, music_volume) + set_volume(%Truck, MIN_VOLUME) + +func enter_truck(): + set_volume(%Planet, MIN_VOLUME) + set_volume(%Truck, music_volume) + +func stop_music(music : AudioStreamPlayer, with_fade = false): + if playing_musics.find(music) != -1: + playing_musics.remove_at(playing_musics.find(music)) + set_volume(music, MIN_VOLUME, with_fade) + +func play_music(music : AudioStreamPlayer, with_fade = false): + playing_musics.append(music) + set_volume(music, music_volume, with_fade) + +func setup_phase(music : AudioStreamPlayer): + if music.stream is AudioStreamSynchronized: + var sync_stream = music.stream as AudioStreamSynchronized + var phase_stream_id = min(garden_phase, sync_stream.stream_count - 1) + for i in range(sync_stream.stream_count): + sync_stream.set_sync_stream_volume( + i, + 0. if i == phase_stream_id else MIN_VOLUME + ) + + +func set_volume(music : AudioStreamPlayer, to : float, fade_time = default_fade_time) -> Tween: + var fade_tween : Tween = get_tree().create_tween() + + fade_tween.tween_property(music, "volume_db", to, fade_time) - if not fade_in: - fade_tween.finished.connect( - func(): - music.stop() - music.volume_db = music_default_volume - ) return fade_tween diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..cb362df --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,3 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://br1p68sy17lcg"] + +[resource] diff --git a/stages/terrain/planet/scripts/planet.gd b/stages/terrain/planet/scripts/planet.gd index 44aa5fd..b26837a 100644 --- a/stages/terrain/planet/scripts/planet.gd +++ b/stages/terrain/planet/scripts/planet.gd @@ -39,6 +39,7 @@ func _ready(): generate_first_entities() + Music.enter_planet() if player: generate_near_chunks(player) diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg.import b/stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg.import deleted file mode 100644 index a074968..0000000 --- a/stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://gjr7ruv7wfci" -path="res://.godot/imported/truck_ambience_phase_1.ogg-93ba4888f21105994ff3077be2e67362.oggvorbisstr" - -[deps] - -source_file="res://stages/terrain/truck/assets/sound/truck_ambience_phase_1.ogg" -dest_files=["res://.godot/imported/truck_ambience_phase_1.ogg-93ba4888f21105994ff3077be2e67362.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg.import b/stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg.import deleted file mode 100644 index 4eda28d..0000000 --- a/stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://car7b6j0ihi30" -path="res://.godot/imported/truck_ambience_phase_2.ogg-e467705058e977f04e8965694bcde916.oggvorbisstr" - -[deps] - -source_file="res://stages/terrain/truck/assets/sound/truck_ambience_phase_2.ogg" -dest_files=["res://.godot/imported/truck_ambience_phase_2.ogg-e467705058e977f04e8965694bcde916.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg.import b/stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg.import deleted file mode 100644 index 8fcd15c..0000000 --- a/stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://dtcv4p3a03giu" -path="res://.godot/imported/truck_ambience_phase_3.ogg-3575c0ff6109a5d9ecc1823ebde9c498.oggvorbisstr" - -[deps] - -source_file="res://stages/terrain/truck/assets/sound/truck_ambience_phase_3.ogg" -dest_files=["res://.godot/imported/truck_ambience_phase_3.ogg-3575c0ff6109a5d9ecc1823ebde9c498.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/stages/terrain/truck/assets/sound/truck_music.ogg.import b/stages/terrain/truck/assets/sound/truck_music.ogg.import deleted file mode 100644 index bf0bc75..0000000 --- a/stages/terrain/truck/assets/sound/truck_music.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://brtjlgjqnrvcb" -path="res://.godot/imported/truck_music.ogg-fd86398cba7135d1ab1c7dd00fd89df7.oggvorbisstr" - -[deps] - -source_file="res://stages/terrain/truck/assets/sound/truck_music.ogg" -dest_files=["res://.godot/imported/truck_music.ogg-fd86398cba7135d1ab1c7dd00fd89df7.oggvorbisstr"] - -[params] - -loop=false -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/stages/terrain/truck/scripts/truck_interior.gd b/stages/terrain/truck/scripts/truck_interior.gd index 04eff5f..c706a13 100644 --- a/stages/terrain/truck/scripts/truck_interior.gd +++ b/stages/terrain/truck/scripts/truck_interior.gd @@ -27,6 +27,8 @@ func _ready(): compost.reward = new_reward data.rewards.append(new_reward) compost.rewarded.connect(_on_compost_rewarded) + + Music.enter_truck() func _on_compost_rewarded(c: Compost): data.rewarded_times += 1