This commit is contained in:
team3
2026-09-16 17:55:38 +02:00
parent c9416ed3c6
commit f012dd7cd5
17 changed files with 878 additions and 160 deletions

View File

@@ -32,6 +32,30 @@ const PROGRESSION := [
"melody": [440.00, 493.88, 587.33, 659.26, 783.99]},
]
## Zweiter Teil: geht über Dm7 und Em7, kommt über G6 zurück.
const PROGRESSION_B := [
{"name": "Dm7", "pad": [220.00, 261.63, 293.66, 349.23], "bass": 146.83,
"melody": [440.00, 523.25, 587.33, 659.26, 698.46, 783.99]},
{"name": "Em7", "pad": [196.00, 246.94, 293.66, 329.63], "bass": 164.81,
"melody": [493.88, 587.33, 659.26, 783.99, 880.00]},
{"name": "Fmaj7", "pad": [174.61, 220.00, 261.63, 329.63], "bass": 87.31,
"melody": [440.00, 523.25, 587.33, 659.26, 783.99, 880.00]},
{"name": "G6", "pad": [196.00, 246.94, 293.66, 329.63], "bass": 98.00,
"melody": [440.00, 493.88, 587.33, 659.26, 783.99]},
{"name": "Am7", "pad": [220.00, 261.63, 329.63, 392.00], "bass": 110.00,
"melody": [440.00, 493.88, 523.25, 587.33, 659.26, 783.99]},
{"name": "Em7", "pad": [196.00, 246.94, 293.66, 329.63], "bass": 164.81,
"melody": [493.88, 587.33, 659.26, 783.99, 880.00]},
{"name": "Fmaj7", "pad": [174.61, 220.00, 261.63, 329.63], "bass": 87.31,
"melody": [440.00, 523.25, 587.33, 659.26, 783.99, 880.00]},
{"name": "G6", "pad": [196.00, 246.94, 293.66, 329.63], "bass": 98.00,
"melody": [440.00, 493.88, 587.33, 659.26, 783.99]},
]
## Reihenfolge der Teile: A, B, A mit anderer Melodie.
const FORM := [0, 1, 0]
const SECTION_SEEDS := [7411, 9187, 3323]
static func build_all() -> Dictionary:
var rng := RandomNumberGenerator.new()
rng.seed = 20260828
@@ -53,26 +77,29 @@ static func build_all() -> Dictionary:
}
static func build_music() -> PackedByteArray:
var rng := RandomNumberGenerator.new()
rng.seed = 7411
var loop_len := BAR * BARS
var section_len := BAR * BARS
var loop_len := section_len * FORM.size()
var buf := Synth.buffer(loop_len + 3.0)
for sec in FORM.size():
var prog: Array = PROGRESSION if FORM[sec] == 0 else PROGRESSION_B
var rng := RandomNumberGenerator.new()
rng.seed = int(SECTION_SEEDS[sec])
_render_section(buf, sec * section_len, prog, rng)
return Synth.to_pcm(Synth.seamless(buf, loop_len))
static func _render_section(buf: PackedFloat32Array, offset: float, prog: Array,
rng: RandomNumberGenerator) -> void:
for b in BARS:
var t0 := b * BAR
var stage: Dictionary = PROGRESSION[b]
var t0 := offset + b * BAR
var stage: Dictionary = prog[b]
var pad: Array = stage["pad"]
var bass: float = float(stage["bass"])
var melody: Array = stage["melody"]
# Flächen, leicht überlappend für weiche Übergänge
for i in pad.size():
var amp: float = 0.19 / (1.0 + i * 0.4)
Synth.add_pad(buf, t0 - 0.45, float(pad[i]), BAR + 1.0, amp, 1.2)
# Bass: Grundton auf 1, Quinte auf 3
Synth.add_tone(buf, t0, bass, 2.3, 0.36, 1.4, [1.0, 0.38, 0.12], 0.01)
Synth.add_tone(buf, t0 + BEAT * 2.0, bass * 1.5, 1.7, 0.20, 1.8, [1.0, 0.28], 0.01)
# Melodie: sparsame Glockentöne, immer aus dem Akkord
var beats := [0.0, 1.5, 2.5] if b % 2 == 0 else [0.5, 2.0, 3.0]
for k in beats.size():
if rng.randf() < 0.3:
@@ -80,13 +107,10 @@ static func build_music() -> PackedByteArray:
var f: float = float(melody[rng.randi() % melody.size()])
Synth.add_tone(buf, t0 + float(beats[k]) * BEAT, f, 2.4,
0.11, 2.2, [1.0, 0.45, 0.18, 0.07], 0.006)
# Sehr leiser Shaker auf jedem Schlag
for beat in 4:
Synth.add_noise(buf, t0 + beat * BEAT, 0.12,
0.032 if beat % 2 == 1 else 0.020, 34.0, 0.62, rng)
return Synth.to_pcm(Synth.seamless(buf, loop_len))
# --- Einzelklänge ---------------------------------------------------------
## Ein Radstoß: tiefer Schlag, mittleres Klopfen, kurzer Metallanteil.