Load engines from TOML and improve scenario audio and carb tuning

Migrate 32 engine definitions into validated startup-loaded TOML files and separate configuration and snapshots from scenario assembly. Add camera-based stereo propagation from shared pipe geometry, preserve exhaust character, tune carburetor mixtures and idle, use ignition cuts for carb engines, and support returning to the scenario menu.

Validation: full Windows build and all 14 CTest checks passed.
This commit is contained in:
max
2026-10-24 03:24:35 +02:00
parent 5607dcf2b5
commit bf8621ad39
82 changed files with 24084 additions and 648 deletions

View File

@@ -0,0 +1,38 @@
# Custom exhaust pulse character
Compared the previous `src/scenario.cpp` from HEAD with the updated implementation
using the same capture tool, default Rusanov solver, dry scene, 55% pedal,
3,000 RPM, 0.6 s warmup and 0.5 s recording. No gain normalization or added
noise/distortion was applied. Captures are in `out/audio-character/`.
Energy fractions below use both channels, discard the first 20% of the recording,
remove DC and apply a Hann window. The denominator is spectral energy from 20 Hz
to 6 kHz. Upper harmonics are above 1.5 times the aggregate firing frequency
(RPM / 120 * cylinders); low orders are below 0.8 times that frequency. These
are engineering checks on pulse character, not a perceptual realism score.
| Example | Upper harmonics, before ? after | Low orders, before ? after |
| --- | --- | --- |
| Inline three | 78.6% ? 85.6% | <0.1% ? <0.1% |
| F20 inline four | 53.2% ? 87.0% | <0.1% ? 1.1% |
| Inline five | 51.6% ? 92.5% | <0.1% ? 0.3% |
| RB26 inline six | 21.4% ? 88.4% | <0.1% ? <0.1% |
| Long-stroke inline six | 29.0% ? 81.3% | <0.1% ? <0.1% |
| Big-block V8 | 40.3% ? 59.6% | <0.1% ? 23.2% |
| V10 | 84.6% ? 31.0% | <0.1% ? 14.4% |
| V12 | 52.2% ? 55.1% | 0.1% ? 19.7% |
The V10's energy shifts toward lower bank orders rather than simply becoming
brighter. All eight updated examples also completed fixed-RPM captures at 1,000
and 6,000 RPM using the same warmup/duration/pedal. All 24 updated captures
produced finite audio with zero clipping samples. Maximum rendered absolute
amplitude across these captures was 0.524 full scale.
The catalog regression runs each example through one second of throttle and one
second of pedal release. It checks finite audio, sustained positive RPM, zero
pipe positivity repairs, big-block power, and the new topology flags. The desktop
UI and physics regression tests cover the existing controls and base simulation.
For listening comparisons, match playback loudness: removing large collector
volumes increases level as well as changing spectrum. Geometry and calibration
remain estimates; these measurements do not establish a match to recorded engines.