small racing game im working on
procedurall engine sound generation with https://github.com/bend-n/enginesound
[skip ci]
bendn 2023-03-06
parent 883c5d2 · commit 2a751b3
-rw-r--r--.gitmodules3
-rw-r--r--assets/cars/engine.gd36
-rw-r--r--assets/cars/kenney_sedan/sedan.tscn36
-rw-r--r--assets/cars/sounds/high_db.tres7
-rw-r--r--assets/cars/sounds/high_pitch.tres5
-rw-r--r--assets/cars/sounds/idle_db.tres6
-rw-r--r--assets/cars/sounds/idle_pitch.tres5
-rw-r--r--assets/cars/sounds/low_db.tres6
-rw-r--r--assets/cars/sounds/low_pitch.tres5
-rw-r--r--assets/cars/sounds/med_db.tres7
-rw-r--r--assets/cars/sounds/med_pitch.tres5
-rw-r--r--assets/sounds/engine/2000.oggbin121659 -> 0 bytes
-rw-r--r--assets/sounds/engine/2000.ogg.import19
-rw-r--r--assets/sounds/engine/500.oggbin106055 -> 0 bytes
-rw-r--r--assets/sounds/engine/500.ogg.import19
-rw-r--r--assets/sounds/engine/5000.oggbin127116 -> 0 bytes
-rw-r--r--assets/sounds/engine/5000.ogg.import19
-rw-r--r--assets/sounds/engine/8000.oggbin115711 -> 0 bytes
-rw-r--r--assets/sounds/engine/8000.ogg.import19
-rw-r--r--engine.gdextension5
m---------enginesound0
-rw-r--r--project.godot2
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
deleted file mode 100644
index 69c7124..0000000
--- a/assets/sounds/engine/2000.ogg
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 6333584..0000000
--- a/assets/sounds/engine/500.ogg
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index c2c8c0f..0000000
--- a/assets/sounds/engine/5000.ogg
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 81688a9..0000000
--- a/assets/sounds/engine/8000.ogg
+++ /dev/null
Binary files differ
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]