small racing game im working on
procedurall engine sound generation with https://github.com/bend-n/enginesound
[skip ci]
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | assets/cars/engine.gd | 36 | ||||
| -rw-r--r-- | assets/cars/kenney_sedan/sedan.tscn | 36 | ||||
| -rw-r--r-- | assets/cars/sounds/high_db.tres | 7 | ||||
| -rw-r--r-- | assets/cars/sounds/high_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/idle_db.tres | 6 | ||||
| -rw-r--r-- | assets/cars/sounds/idle_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/low_db.tres | 6 | ||||
| -rw-r--r-- | assets/cars/sounds/low_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/cars/sounds/med_db.tres | 7 | ||||
| -rw-r--r-- | assets/cars/sounds/med_pitch.tres | 5 | ||||
| -rw-r--r-- | assets/sounds/engine/2000.ogg | bin | 121659 -> 0 bytes | |||
| -rw-r--r-- | assets/sounds/engine/2000.ogg.import | 19 | ||||
| -rw-r--r-- | assets/sounds/engine/500.ogg | bin | 106055 -> 0 bytes | |||
| -rw-r--r-- | assets/sounds/engine/500.ogg.import | 19 | ||||
| -rw-r--r-- | assets/sounds/engine/5000.ogg | bin | 127116 -> 0 bytes | |||
| -rw-r--r-- | assets/sounds/engine/5000.ogg.import | 19 | ||||
| -rw-r--r-- | assets/sounds/engine/8000.ogg | bin | 115711 -> 0 bytes | |||
| -rw-r--r-- | assets/sounds/engine/8000.ogg.import | 19 | ||||
| -rw-r--r-- | engine.gdextension | 5 | ||||
| m--------- | enginesound | 0 | ||||
| -rw-r--r-- | project.godot | 2 |
22 files changed, 23 insertions, 181 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4fa30ba --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "enginesound"] + path = enginesound + url = https://github.com/bend-n/enginesound diff --git a/assets/cars/engine.gd b/assets/cars/engine.gd index f5f0511..6fadd31 100644 --- a/assets/cars/engine.gd +++ b/assets/cars/engine.gd @@ -1,34 +1,10 @@ -extends Node3D +extends EngineNoise -@onready var idle := $idle as AudioStreamPlayer -@onready var low := $low as AudioStreamPlayer -@onready var med := $med as AudioStreamPlayer -@onready var high := $high as AudioStreamPlayer - -@onready var players: Array[AudioStreamPlayer] = [idle, low, med, high] -@export var db_curves: Array[Curve] -@export var pitch_curves: Array[Curve] - -@export var car: Car - -var n: float = 0 +@onready var car: Car = get_parent(); func _ready() -> void: - await get_tree().physics_frame - for p in players: p.play() - -func _process(d: float): - var r := car.rpm() - if car.engine_force > 0.1 and car.is_on_ground(): - n = move_toward(n, clampf(r / 700.0, 0, 1), 1 * d) - for i in 4: - curve_player(i) - else: - n = move_toward(n, 0, 1 * d) - curve_player(0) - for i in 4: - curve_player(i) + set_stream($Player.get_stream_playback()) -func curve_player(i: int) -> void: - players[i].volume_db = db_curves[i].sample_baked(n) - 50 - players[i].pitch_scale = (pitch_curves[i].sample_baked(n) * 2) + .001 +func _process(_d: float): + set_rpm((car.rpm() * car.engine_force * 0.0015) + 800) + update() diff --git a/assets/cars/kenney_sedan/sedan.tscn b/assets/cars/kenney_sedan/sedan.tscn index a8c9dd6..84d1422 100644 --- a/assets/cars/kenney_sedan/sedan.tscn +++ b/assets/cars/kenney_sedan/sedan.tscn @@ -1,22 +1,10 @@ -[gd_scene load_steps=35 format=3 uid="uid://c157wew5y33bo"] +[gd_scene load_steps=24 format=3 uid="uid://c157wew5y33bo"] [ext_resource type="Script" path="res://classes/car.gd" id="1_pdccm"] [ext_resource type="Script" path="res://assets/cars/engine.gd" id="2_rxib8"] -[ext_resource type="Curve" uid="uid://f1go1j7raaq1" path="res://assets/cars/sounds/idle_db.tres" id="3_gwsff"] [ext_resource type="PackedScene" uid="uid://c5kk8cn8ipuy1" path="res://scenes/skid_particles.tscn" id="4_axi2x"] -[ext_resource type="Curve" uid="uid://bq1r63t410ork" path="res://assets/cars/sounds/low_db.tres" id="4_rdkge"] -[ext_resource type="Curve" uid="uid://d15cjufi3m0wg" path="res://assets/cars/sounds/med_db.tres" id="5_7w6r4"] -[ext_resource type="Curve" uid="uid://d0rkqfng2uvkw" path="res://assets/cars/sounds/high_db.tres" id="6_h74co"] -[ext_resource type="Curve" uid="uid://blatk508sq620" path="res://assets/cars/sounds/idle_pitch.tres" id="7_hu8t3"] -[ext_resource type="Curve" uid="uid://bof1lx0nk5jte" path="res://assets/cars/sounds/low_pitch.tres" id="8_7rdpj"] -[ext_resource type="Curve" uid="uid://da7vdsdlv8l70" path="res://assets/cars/sounds/med_pitch.tres" id="9_ret6y"] -[ext_resource type="Curve" uid="uid://ox0sapaob1jh" path="res://assets/cars/sounds/high_pitch.tres" id="10_28pjg"] [ext_resource type="Script" path="res://assets/cars/gearbox.gd" id="11_augb2"] -[ext_resource type="AudioStream" uid="uid://202hwcsj8a41" path="res://assets/sounds/engine/500.ogg" id="11_ouf2u"] [ext_resource type="AudioStream" uid="uid://di8wcnme3mqbf" path="res://assets/sounds/shifts/1.wav" id="11_rwd1j"] -[ext_resource type="AudioStream" uid="uid://dwbsofhdf1d8i" path="res://assets/sounds/engine/2000.ogg" id="12_lrx8k"] -[ext_resource type="AudioStream" uid="uid://d1q0xhd5ufguo" path="res://assets/sounds/engine/5000.ogg" id="13_d45jk"] -[ext_resource type="AudioStream" uid="uid://d4k65y04x6yxg" path="res://assets/sounds/engine/8000.ogg" id="14_cerxx"] [ext_resource type="AudioStream" uid="uid://d3rhrhg8srpdg" path="res://assets/sounds/checkpoint.ogg" id="19_stkh0"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hs0do"] @@ -343,6 +331,9 @@ shadow_mesh = SubResource("ArrayMesh_8qmjc") [sub_resource type="SphereShape3D" id="SphereShape3D_t532n"] radius = 2.0 +[sub_resource type="AudioStreamGenerator" id="AudioStreamGenerator_qo6ul"] +mix_rate = 30000.0 + [node name="Sedan" type="VehicleBody3D"] collision_layer = 2 collision_mask = 3 @@ -447,23 +438,12 @@ skeleton = NodePath("") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.43328, 0) shape = SubResource("SphereShape3D_t532n") -[node name="Engine" type="Node3D" parent="." node_paths=PackedStringArray("car")] +[node name="Engine" type="EngineNoise" parent="."] script = ExtResource("2_rxib8") -db_curves = Array[Curve]([ExtResource("3_gwsff"), ExtResource("4_rdkge"), ExtResource("5_7w6r4"), ExtResource("6_h74co")]) -pitch_curves = Array[Curve]([ExtResource("7_hu8t3"), ExtResource("8_7rdpj"), ExtResource("9_ret6y"), ExtResource("10_28pjg")]) -car = NodePath("..") - -[node name="idle" type="AudioStreamPlayer" parent="Engine"] -stream = ExtResource("11_ouf2u") - -[node name="low" type="AudioStreamPlayer" parent="Engine"] -stream = ExtResource("12_lrx8k") - -[node name="med" type="AudioStreamPlayer" parent="Engine"] -stream = ExtResource("13_d45jk") -[node name="high" type="AudioStreamPlayer" parent="Engine"] -stream = ExtResource("14_cerxx") +[node name="Player" type="AudioStreamPlayer" parent="Engine"] +stream = SubResource("AudioStreamGenerator_qo6ul") +autoplay = true [node name="Gearbox" type="Node3D" parent="."] script = ExtResource("11_augb2") diff --git a/assets/cars/sounds/high_db.tres b/assets/cars/sounds/high_db.tres deleted file mode 100644 index 130fcbd..0000000 --- a/assets/cars/sounds/high_db.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://d0rkqfng2uvkw"] - -[resource] -max_value = 50.0 -bake_resolution = 200 -_data = [Vector2(0.288515, 0), 0.0, 217.661, 0, 0, Vector2(1, 50), 0.0, 0.0, 0, 0] -point_count = 2 diff --git a/assets/cars/sounds/high_pitch.tres b/assets/cars/sounds/high_pitch.tres deleted file mode 100644 index 341aeae..0000000 --- a/assets/cars/sounds/high_pitch.tres +++ /dev/null @@ -1,5 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://ox0sapaob1jh"] - -[resource] -_data = [Vector2(0.413146, 0), 0.0, 0.0, 0, 0, Vector2(0.600939, 0.415094), 4.42076, 0.669811, 0, 0, Vector2(1, 0.518868), 0.0, 0.0, 0, 0] -point_count = 3 diff --git a/assets/cars/sounds/idle_db.tres b/assets/cars/sounds/idle_db.tres deleted file mode 100644 index e48313c..0000000 --- a/assets/cars/sounds/idle_db.tres +++ /dev/null @@ -1,6 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://f1go1j7raaq1"] - -[resource] -max_value = 50.0 -_data = [Vector2(0, 50), 0.0, 0.0, 0, 0, Vector2(0.142857, 41.5094), -182.429, -182.429, 0, 0, Vector2(0.212885, 1), 0.0, 0.0, 0, 0, Vector2(0.7277, 0), 0.0, 0.0, 0, 0] -point_count = 4 diff --git a/assets/cars/sounds/idle_pitch.tres b/assets/cars/sounds/idle_pitch.tres deleted file mode 100644 index fad82ed..0000000 --- a/assets/cars/sounds/idle_pitch.tres +++ /dev/null @@ -1,5 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://blatk508sq620"] - -[resource] -_data = [Vector2(0, 0.40566), 0.0, 0.0, 0, 0, Vector2(0.5, 0.5), 0.0, 0.0, 0, 0, Vector2(1, 0.641509), 1.14825, 0.0, 0, 0] -point_count = 3 diff --git a/assets/cars/sounds/low_db.tres b/assets/cars/sounds/low_db.tres deleted file mode 100644 index 78fe7f3..0000000 --- a/assets/cars/sounds/low_db.tres +++ /dev/null @@ -1,6 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://bq1r63t410ork"] - -[resource] -max_value = 50.0 -_data = [Vector2(0, 0), 0.0, 200.943, 0, 0, Vector2(0.168067, 46.6981), -4.44437, 0.0, 0, 0, Vector2(0.336134, 45.283), 2.3068, -465.094, 0, 0, Vector2(0.501401, 0), -72.5629, 0.0, 0, 0] -point_count = 4 diff --git a/assets/cars/sounds/low_pitch.tres b/assets/cars/sounds/low_pitch.tres deleted file mode 100644 index 0d5b9bb..0000000 --- a/assets/cars/sounds/low_pitch.tres +++ /dev/null @@ -1,5 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://bof1lx0nk5jte"] - -[resource] -_data = [Vector2(0, 0.5), 0.0, 0.0, 0, 0, Vector2(0.755869, 0.518868), 0.0, 0.0, 0, 0] -point_count = 2 diff --git a/assets/cars/sounds/med_db.tres b/assets/cars/sounds/med_db.tres deleted file mode 100644 index 05f4d56..0000000 --- a/assets/cars/sounds/med_db.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://d15cjufi3m0wg"] - -[resource] -max_value = 50.0 -bake_resolution = 200 -_data = [Vector2(0.168067, 0), 0.0, 0.0, 0, 0, Vector2(0.322129, 50), -2.51346, -2.51346, 0, 0, Vector2(0.501401, 50), 0.0, 0.0, 0, 0, Vector2(0.77591, 0), -122.213, 0.0, 0, 0] -point_count = 4 diff --git a/assets/cars/sounds/med_pitch.tres b/assets/cars/sounds/med_pitch.tres deleted file mode 100644 index 1e21e08..0000000 --- a/assets/cars/sounds/med_pitch.tres +++ /dev/null @@ -1,5 +0,0 @@ -[gd_resource type="Curve" format=3 uid="uid://da7vdsdlv8l70"] - -[resource] -_data = [Vector2(0.187793, 0), 0.0, 0.0, 0, 0, Vector2(0.246499, 0.471698), 0.0, 0.0, 0, 0, Vector2(0.355742, 0.509434), 0.0, 0.0, 0, 0, Vector2(1, 0.59434), 0.0, 0.0, 0, 0] -point_count = 4 diff --git a/assets/sounds/engine/2000.ogg b/assets/sounds/engine/2000.ogg Binary files differdeleted file mode 100644 index 69c7124..0000000 --- a/assets/sounds/engine/2000.ogg +++ /dev/null diff --git a/assets/sounds/engine/2000.ogg.import b/assets/sounds/engine/2000.ogg.import deleted file mode 100644 index b8b1e3e..0000000 --- a/assets/sounds/engine/2000.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://dwbsofhdf1d8i" -path="res://.godot/imported/2000.ogg-63c0f3012cd1ec06c234f214b2c0b795.oggvorbisstr" - -[deps] - -source_file="res://assets/sounds/engine/2000.ogg" -dest_files=["res://.godot/imported/2000.ogg-63c0f3012cd1ec06c234f214b2c0b795.oggvorbisstr"] - -[params] - -loop=true -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/assets/sounds/engine/500.ogg b/assets/sounds/engine/500.ogg Binary files differdeleted file mode 100644 index 6333584..0000000 --- a/assets/sounds/engine/500.ogg +++ /dev/null diff --git a/assets/sounds/engine/500.ogg.import b/assets/sounds/engine/500.ogg.import deleted file mode 100644 index 9293e6f..0000000 --- a/assets/sounds/engine/500.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://202hwcsj8a41" -path="res://.godot/imported/500.ogg-c7861095f902365fe1474b685d811d9f.oggvorbisstr" - -[deps] - -source_file="res://assets/sounds/engine/500.ogg" -dest_files=["res://.godot/imported/500.ogg-c7861095f902365fe1474b685d811d9f.oggvorbisstr"] - -[params] - -loop=true -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/assets/sounds/engine/5000.ogg b/assets/sounds/engine/5000.ogg Binary files differdeleted file mode 100644 index c2c8c0f..0000000 --- a/assets/sounds/engine/5000.ogg +++ /dev/null diff --git a/assets/sounds/engine/5000.ogg.import b/assets/sounds/engine/5000.ogg.import deleted file mode 100644 index 5ca5ad8..0000000 --- a/assets/sounds/engine/5000.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://d1q0xhd5ufguo" -path="res://.godot/imported/5000.ogg-3c144a40cdce54851f00c0cb44f7a2e7.oggvorbisstr" - -[deps] - -source_file="res://assets/sounds/engine/5000.ogg" -dest_files=["res://.godot/imported/5000.ogg-3c144a40cdce54851f00c0cb44f7a2e7.oggvorbisstr"] - -[params] - -loop=true -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/assets/sounds/engine/8000.ogg b/assets/sounds/engine/8000.ogg Binary files differdeleted file mode 100644 index 81688a9..0000000 --- a/assets/sounds/engine/8000.ogg +++ /dev/null diff --git a/assets/sounds/engine/8000.ogg.import b/assets/sounds/engine/8000.ogg.import deleted file mode 100644 index 36f15fe..0000000 --- a/assets/sounds/engine/8000.ogg.import +++ /dev/null @@ -1,19 +0,0 @@ -[remap] - -importer="oggvorbisstr" -type="AudioStreamOggVorbis" -uid="uid://d4k65y04x6yxg" -path="res://.godot/imported/8000.ogg-856fc4ad536bdb52e8bf049ee4caea3d.oggvorbisstr" - -[deps] - -source_file="res://assets/sounds/engine/8000.ogg" -dest_files=["res://.godot/imported/8000.ogg-856fc4ad536bdb52e8bf049ee4caea3d.oggvorbisstr"] - -[params] - -loop=true -loop_offset=0 -bpm=0 -beat_count=0 -bar_beats=4 diff --git a/engine.gdextension b/engine.gdextension new file mode 100644 index 0000000..8ab3a9c --- /dev/null +++ b/engine.gdextension @@ -0,0 +1,5 @@ +[configuration] +entry_symbol = "gdextension_rust_init" + +[libraries] +linux.64 = "res://enginesound/target/release/libenginesound.so" diff --git a/enginesound b/enginesound new file mode 160000 +Subproject 98702ab77a76c2360155949540ca7834d5d4ad7 diff --git a/project.godot b/project.godot index 2f0a20d..5ebfcd9 100644 --- a/project.godot +++ b/project.godot @@ -14,7 +14,7 @@ config/name="tracer" run/main_scene="res://start.tscn" config/use_custom_user_dir=true config/custom_user_dir_name="tracer" -config/features=PackedStringArray("4.1") +config/features=PackedStringArray("4.0") [autoload] |