feat: scene individual audio, first footstep sound

This commit is contained in:
Jakob Feldmann 2023-09-04 16:53:03 +02:00
parent 30bbc8c561
commit 7d4e9346b0
41 changed files with 103 additions and 267 deletions

4
AudioTool.gd Normal file
View File

@ -0,0 +1,4 @@
extends Node
func

Binary file not shown.

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/CARTOON_Boing_mono.wav-81d92ba0a26e12caac0c691ba7bd8dae.sample"
[deps]
source_file="res://assets/sounds/CARTOON_Boing_mono.wav"
dest_files=[ "res://.import/CARTOON_Boing_mono.wav-81d92ba0a26e12caac0c691ba7bd8dae.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/CHARGE_Sci-Fi_High_Pass_Sweep_12_Semi_Up_1000ms_stereo.wav-e9fdccf3dd8981f444963ea286d10a66.sample"
[deps]
source_file="res://assets/sounds/CHARGE_Sci-Fi_High_Pass_Sweep_12_Semi_Up_1000ms_stereo.wav"
dest_files=[ "res://.import/CHARGE_Sci-Fi_High_Pass_Sweep_12_Semi_Up_1000ms_stereo.wav-e9fdccf3dd8981f444963ea286d10a66.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/CHARGE_Servo_24_Semi_Down_1000ms_stereo.wav-5af2adaf3db9d036f376f5fcfbebb90f.sample"
[deps]
source_file="res://assets/sounds/CHARGE_Servo_24_Semi_Down_1000ms_stereo.wav"
dest_files=[ "res://.import/CHARGE_Servo_24_Semi_Down_1000ms_stereo.wav-5af2adaf3db9d036f376f5fcfbebb90f.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

View File

@ -1,15 +0,0 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/EpsonConfirm.ogg-afcbf35268794be2a4b1abc7659589c6.oggstr"
[deps]
source_file="res://assets/sounds/EpsonConfirm.ogg"
dest_files=[ "res://.import/EpsonConfirm.ogg-afcbf35268794be2a4b1abc7659589c6.oggstr" ]
[params]
loop=false
loop_offset=0

Binary file not shown.

View File

@ -1,15 +0,0 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/EpsonStart.ogg-cf6baaf875194cd4e5ab013852eadd9b.oggstr"
[deps]
source_file="res://assets/sounds/EpsonStart.ogg"
dest_files=[ "res://.import/EpsonStart.ogg-cf6baaf875194cd4e5ab013852eadd9b.oggstr" ]
[params]
loop=false
loop_offset=0

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/FOOTSTEP_Trainers_Snow_Loose_Walk_Slow_RR1_mono.wav-6edde518b74de309deea3948759e321a.sample"
[deps]
source_file="res://assets/sounds/FOOTSTEP_Trainers_Snow_Loose_Walk_Slow_RR1_mono.wav"
dest_files=[ "res://.import/FOOTSTEP_Trainers_Snow_Loose_Walk_Slow_RR1_mono.wav-6edde518b74de309deea3948759e321a.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

View File

@ -1,15 +0,0 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/Feueralarm.ogg-711b767a9b7329373d887d0a3749e3b3.oggstr"
[deps]
source_file="res://assets/sounds/Feueralarm.ogg"
dest_files=[ "res://.import/Feueralarm.ogg-711b767a9b7329373d887d0a3749e3b3.oggstr" ]
[params]
loop=false
loop_offset=0

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/LOTUS_FLUTE_Whistle_Down_Wobble_02_mono.wav-c63e548b66db83b8da58c35640a35149.sample"
[deps]
source_file="res://assets/sounds/LOTUS_FLUTE_Whistle_Down_Wobble_02_mono.wav"
dest_files=[ "res://.import/LOTUS_FLUTE_Whistle_Down_Wobble_02_mono.wav-c63e548b66db83b8da58c35640a35149.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

View File

@ -1,15 +0,0 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/Treffer.ogg-5734bdf815cf89fe88da7e1754b8bf7b.oggstr"
[deps]
source_file="res://assets/sounds/Treffer.ogg"
dest_files=[ "res://.import/Treffer.ogg-5734bdf815cf89fe88da7e1754b8bf7b.oggstr" ]
[params]
loop=false
loop_offset=0

Binary file not shown.

View File

@ -1,23 +0,0 @@
[remap]
importer="wav"
type="AudioStreamSample"
path="res://.import/biup.wav-56939945d1672e675020822b7ecc1e5b.sample"
[deps]
source_file="res://assets/sounds/biup.wav"
dest_files=[ "res://.import/biup.wav-56939945d1672e675020822b7ecc1e5b.sample" ]
[params]
force/8_bit=false
force/mono=true
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

BIN
assets/sounds/footsteps.ogg Normal file

Binary file not shown.

View File

@ -0,0 +1,15 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/footsteps.ogg-db9696a28bb451faa0ab0d3414320fd1.oggstr"
[deps]
source_file="res://assets/sounds/footsteps.ogg"
dest_files=[ "res://.import/footsteps.ogg-db9696a28bb451faa0ab0d3414320fd1.oggstr" ]
[params]
loop=true
loop_offset=0

View File

@ -0,0 +1 @@
soniss gdc pack, ryk-sound, no attribution needed

Binary file not shown.

View File

@ -2,12 +2,12 @@
importer="wav"
type="AudioStreamSample"
path="res://.import/boingo.wav-47e169bf3365758b9af8575ec8c64b02.sample"
path="res://.import/grass 3 single step 3.wav-2f7d8073200559f99a8e0cf713050fbb.sample"
[deps]
source_file="res://assets/sounds/boingo.wav"
dest_files=[ "res://.import/boingo.wav-47e169bf3365758b9af8575ec8c64b02.sample" ]
source_file="res://assets/sounds/grass 3 single step 3.wav"
dest_files=[ "res://.import/grass 3 single step 3.wav-2f7d8073200559f99a8e0cf713050fbb.sample" ]
[params]

Binary file not shown.

View File

@ -1,15 +0,0 @@
[remap]
importer="ogg_vorbis"
type="AudioStreamOGGVorbis"
path="res://.import/walkingsoundmaybe.ogg-01e3269b8c8ef8a667739d9f368a91b3.oggstr"
[deps]
source_file="res://assets/sounds/walkingsoundmaybe.ogg"
dest_files=[ "res://.import/walkingsoundmaybe.ogg-01e3269b8c8ef8a667739d9f368a91b3.oggstr" ]
[params]
loop=false
loop_offset=0

View File

@ -282,7 +282,7 @@ pause={
}
ui_click={
"deadzone": 0.5,
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null)
"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"doubleclick":false,"script":null)
]
}
@ -302,6 +302,7 @@ ui_click={
[physics]
common/physics_fps=120
common/physics_jitter_fix=0.8
2d/thread_model=0
2d/cell_size=100
common/physics_interpolation=true

View File

@ -4,6 +4,7 @@ const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
onready var left_wall_raycasts = $WallRaycasts/LeftWallRaycast
onready var right_wall_raycasts = $WallRaycasts/RightWallRaycast
onready var effect_player = $BlobbyActionEffects/AnimationPlayer
onready var scene_audio = $SceneAudio
onready var death_shader = preload("res://src/Actors/Blobby/DeathShader.tres")
onready var invincible_shader = preload("res://src/Actors/Blobby/InvincibleShader.tres")
@ -12,7 +13,6 @@ onready var player_state_machine = $BlobbyStateMachine
onready var init_boost = player_state_machine.init_boost
onready var init_boost_type = player_state_machine.init_boost_type
export var jump_buffer_filled := false
var wall_touch_direction = 1

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=128 format=2]
[gd_scene load_steps=129 format=2]
[ext_resource path="res://assets/effects/blobby-effects-spritesheet.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Blobby/DeathShader.tres" type="Material" id=2]
@ -8,6 +8,7 @@
[ext_resource path="res://src/ThirdParty/Demo/IridescenceBall.tscn" type="PackedScene" id=6]
[ext_resource path="res://assets/effects/run-dusting-left.png" type="Texture" id=7]
[ext_resource path="res://assets/effects/jump-point.png" type="Texture" id=8]
[ext_resource path="res://src/Utilities/SceneAudio.tscn" type="PackedScene" id=9]
[sub_resource type="RectangleShape2D" id=2]
extents = Vector2( 14.9127, 5.98593 )
@ -4196,6 +4197,8 @@ text = "Ihre Werbung"
align = 1
valign = 1
[node name="SceneAudio" parent="." instance=ExtResource( 9 )]
[node name="Listener2D" type="Listener2D" parent="."]
current = true
@ -4400,11 +4403,9 @@ one_shot = true
wait_time = 0.809
one_shot = true
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
[connection signal="area_entered" from="BlobbySkin" to="." method="_on_BlobbySkin_area_entered"]
[connection signal="got_grounded" from="BlobbyStateMachine" to="." method="_on_Blobby_got_grounded"]
[connection signal="timeout" from="BlobbyStateMachine/JumpBufferTimer" to="BlobbyStateMachine" method="_on_JumpBufferTimer_timeout"]
[connection signal="timeout" from="InvincibilityTimer" to="." method="_on_InvincibilityTimer_timeout"]
[connection signal="timeout" from="PitfallTimer" to="." method="_on_PitfallTimer_timeout"]
[connection signal="timeout" from="PitfallTimer" to="." method="die_for_real"]
[connection signal="timeout" from="PitfallTimer" to="." method="_on_PitfallTimer_timeout"]

View File

@ -1031,7 +1031,6 @@ texture = ExtResource( 8 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
frames = SubResource( 7 )
frame = 9
playing = true
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]

View File

@ -3,7 +3,7 @@ onready var players: Dictionary = {}
func play_scene_independent(sound_name: String, bus: String = "Master", attenuation: float = 0.0,
singleton = false, start_time = 0.0, random_pitch = false) -> void:
singleton = false, start_time = 0.0, random_pitch = false, pitch = 1.0) -> void:
if singleton && players.has(sound_name):
return
var disposable_player = AudioStreamPlayer.new()
@ -15,6 +15,7 @@ func play_scene_independent(sound_name: String, bus: String = "Master", attenuat
disposable_player.stream = stream
disposable_player.volume_db = attenuation
disposable_player.bus = bus
disposable_player.pitch_scale = pitch
disposable_player.play(start_time)
disposable_player.connect("finished", self, "dispose_player", [weakref(disposable_player)])
players[sound_name] = weakref(disposable_player)
@ -22,6 +23,14 @@ func play_scene_independent(sound_name: String, bus: String = "Master", attenuat
func dispose_player(player: WeakRef) -> void:
if !player.get_ref(): return
player.get_ref().queue_free()
func pause_scene_independent(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():
players[sound_name].set_stream_paused(true)
func continue_scene_independent(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():
players[sound_name].set_stream_paused(false)
func stop_scene_independent(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():

View File

@ -207,9 +207,6 @@ position = Vector2( -24.5, 0 )
unique_name_in_owner = true
process_mode = 1
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 1
[node name="Blobby" parent="." instance=ExtResource( 7 )]
unique_name_in_owner = true
position = Vector2( -70, 1 )

View File

@ -1034,9 +1034,6 @@ unique_name_in_owner = true
drag_margin_top = 0.1
drag_margin_bottom = 0.1
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 3
[node name="Blobby" parent="." instance=ExtResource( 8 )]
unique_name_in_owner = true
position = Vector2( -156, -51 )

View File

@ -1,4 +1,4 @@
[gd_resource type="AudioBusLayout" load_steps=11 format=2]
[gd_resource type="AudioBusLayout" load_steps=9 format=2]
[sub_resource type="AudioEffectPitchShift" id=1]
resource_name = "PitchShift"
@ -40,17 +40,8 @@ resource_name = "HighPassFilter"
resource_name = "LowPassFilter"
cutoff_hz = 3000.0
[sub_resource type="AudioEffectDistortion" id=9]
resource_name = "Distortion"
mode = 4
keep_hf_hz = 1000.0
post_gain = -5.0
[sub_resource type="AudioEffectLowPassFilter" id=10]
resource_name = "LowPassFilter"
[resource]
bus/0/volume_db = -6.0206
bus/0/volume_db = -10.4576
bus/1/name = "Music"
bus/1/solo = false
bus/1/mute = false
@ -85,13 +76,3 @@ bus/3/effect/1/effect = SubResource( 7 )
bus/3/effect/1/enabled = false
bus/3/effect/2/effect = SubResource( 8 )
bus/3/effect/2/enabled = true
bus/4/name = "Blobby"
bus/4/solo = false
bus/4/mute = false
bus/4/bypass_fx = false
bus/4/volume_db = 0.0
bus/4/send = "Master"
bus/4/effect/0/effect = SubResource( 9 )
bus/4/effect/0/enabled = true
bus/4/effect/1/effect = SubResource( 10 )
bus/4/effect/1/enabled = true

View File

@ -4,9 +4,13 @@ signal got_grounded
export var init_boost = false
export var init_boost_type = ""
export(String, FILE) var footstep_sound := "res://assets/sounds/footsteps.ogg"
onready var anim_player = parent.get_node("%BlobbymationPlayer")
onready var anim_state_playback = parent.get_node("%BlobbymationTree").get("parameters/playback")
onready var anim_tree = parent.get_node("%BlobbymationTree")
onready var scene_audio = parent.get_node("SceneAudio")
onready var running_particles = parent.get_node("RunningParticles")
onready var jump_point_particles = parent.get_node("JumpPointParticles")
onready var run_dust_res = load("res://assets/effects/run-dusting.png")
@ -210,8 +214,8 @@ func _enter_state(new_state, old_state):
if !["run", "walk", "idle", "duck"].has(old_state) && parent.is_on_floor():
emit_signal("got_grounded")
GlobalAudio.play_scene_independent("res://assets/sounds/landingMedHard.ogg", "Effects",
-15.0, false, 0.10, true)
scene_audio.play_parallel_sound("res://assets/sounds/landingMedHard.ogg",
-15.0, true, 1.0, 0.1)
match new_state:
@ -222,6 +226,7 @@ func _enter_state(new_state, old_state):
anim_state_playback.travel("idleTurn")
else:
anim_state_playback.travel("walking")
scene_audio.play_sound(footstep_sound, -3.0, true, 1.6)
states.idle:
anim_state_playback.travel("idling")
states.duck:
@ -237,6 +242,7 @@ func _enter_state(new_state, old_state):
anim_state_playback.travel("falling")
states.run:
anim_state_playback.travel("running")
scene_audio.play_sound(footstep_sound, -3.0, true, 2.0)
states.wallslide:
# TODO When the hitbox transforms from wallslide to idle, blobby hangs in the air and that triggers the wallslide on landing
if(old_state != states.idle):
@ -244,9 +250,9 @@ func _enter_state(new_state, old_state):
func _exit_state(_old_state, _new_state):
scene_audio.stop_sound()
if(_old_state == "run"):
running_particles.emitting = false
pass
func _set_blendspaces_direction(value):
running_particles.texture = run_dust_res if facing == -1 else run_dust_left_res

Binary file not shown.

View File

@ -1,25 +1,58 @@
extends Node
onready var players: Dictionary = {}
onready var static_player: AudioStreamPlayer = $StaticPlayer
var disposable_player: AudioStreamPlayer
# Plays sound with the static player, interrupting sounds if currently playing
func play_sound(sound_name: String, attenuation: float = 0.0, random_pitch = false,
pitch = 1.0, start_time = 0.0, bus: String = "Effects", singleton = false) -> void:
# TODO is it bad to grab the stream each time?
var stream = GlobalState.sound_library[sound_name]
if random_pitch:
stream = AudioStreamRandomPitch.new()
stream.audio_stream = GlobalState.sound_library[sound_name]
static_player.stream = stream
static_player.volume_db = attenuation
static_player.bus = bus
static_player.pitch_scale = pitch
static_player.play(start_time)
func play_scene_dependent(sound_name: String, bus: String = "Master", attenuation: float = 0.0, singleton = false) -> void:
func stop_sound():
static_player.stop()
# Mirrors the GlobalAudio Method which can play sounds across scenes
func play_parallel_sound(sound_name: String, attenuation: float = 0.0, random_pitch = false,
pitch = 1.0, start_time = 0.0, bus: String = "Effects", singleton = false) -> void:
if singleton && players.has(sound_name):
return
disposable_player = AudioStreamPlayer.new()
var disposable_player = AudioStreamPlayer.new()
add_child(disposable_player)
disposable_player.stream = GlobalState.sound_library[sound_name]
var stream = GlobalState.sound_library[sound_name]
if random_pitch:
stream = AudioStreamRandomPitch.new()
stream.audio_stream = GlobalState.sound_library[sound_name]
disposable_player.stream = stream
disposable_player.volume_db = attenuation
disposable_player.bus = bus
disposable_player.play()
disposable_player.connect("finished", self, "dispose_player")
players[sound_name] = disposable_player
disposable_player.pitch_scale = pitch
disposable_player.play(start_time)
disposable_player.connect("finished", self, "dispose_player", [weakref(disposable_player)])
players[sound_name] = weakref(disposable_player)
func dispose_player(player: AudioStreamPlayer = disposable_player) -> void:
if player == null: return
player.queue_free()
func dispose_parallel_player(player: WeakRef) -> void:
if !player.get_ref(): return
player.get_ref().queue_free()
func pause_parallel_sound(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():
players[sound_name].set_stream_paused(true)
func continue_parallel_sound(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():
players[sound_name].set_stream_paused(false)
func stop_scene_dependent(sound_name: String):
if players.has(sound_name):
dispose_player(players[sound_name])
func stop_parallel_sound(sound_name: String):
if players.has(sound_name) && players[sound_name].get_ref():
dispose_parallel_player(players[sound_name])
players.erase(sound_name)

View File

@ -1,7 +1,12 @@
[gd_scene load_steps=2 format=2]
[gd_scene load_steps=3 format=2]
[ext_resource path="res://src/Utilities/SceneAudio.gd" type="Script" id=1]
[ext_resource path="res://assets/sounds/footsteps.ogg" type="AudioStream" id=2]
[node name="SceneAudio" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
[node name="StaticPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 2 )
pitch_scale = 1.62