5.5 KiB
Static outdoor audio and two-stroke verification
Verified on Linux in Release mode, 2026-10-23. The target remains fluid-derived sound at 44.1 kHz. No synthetic bang, saturation, or combustion event is added by the audio renderer. Acoustic processing does not feed energy into the solver.
Renderer
OutdoorAudio replaces the active twin and two-stroke legacy reverb paths.
Each intake/exhaust mass-flow derivative drives a compact monopole. Separate
left/right paths use inverse distance and fractional-sample delays at 343 m/s.
The listener and sources are static. Default listener position is (1.6, 1, 2) m;
intake is (-0.2, .7, 0), exhaust (.55, .5, 0), ground y=0, wall x=-1.5.
Ground and wall reflection coefficients are .35 and .65. These are configurable
assumptions rather than measurements of a particular location.
A second-order 6 kHz monitoring low-pass reduces sharp acquisition transients;
it is linear and does not create afterfire. Early ground/wall reflections use
image paths. Woodland uses six approximate scatterers. A stable four-line
feedback-delay network supplies an empirical diffuse tail; it does not solve
outdoor wave propagation or vegetation scattering. Scene changes smooth over
20 ms. The old OutdoorExhaustReverb remains for legacy tests but is inactive
in both engine scenarios.
Pipe-end radiation impedance, calibrated directivity, alias-free acquisition, and exhaust afterfire chemistry remain unresolved. PCM output is not calibrated speaker SPL. The monitoring filter cannot recover information lost to aliasing.
Measured captures
Four seconds at full pedal, wall environment, 44.1 kHz stereo. Each row's raw and rendered signals come from the same simulation run. Measurements are before PCM clipping; the raw signal includes direct spatial propagation.
| Engine | Raw maximum adjacent-sample change | Rendered change | Rendered peak | Clipping samples |
|---|---|---|---|---|
| Twin | .569144 | .0881295 | .119947 | 0 |
| Two-stroke | .412956 | .138741 | .390789 | 0 |
These measurements establish transient reduction, not a subjective judgment that limiter events sound like realistic bangs. Listening on the target audio device is still required. Reproduce from the repository root:
cmake --build build-audit --target fluidsim_audio_capture -j 4
./build-audit/fluidsim_audio_capture --scenario twin --out build/audio/twin-wall --seconds 4 --throttle 1 --scene wall
./build-audit/fluidsim_audio_capture --scenario two-stroke --out build/audio/two-stroke-wall --seconds 4 --throttle 1 --scene wall
Each produces -rendered.wav, -dry.wav (filtered direct paths) and
-unfiltered.wav for comparison. Capture files are build artifacts.
Two-stroke and regression checks
The existing 125 cc geometry now uses the shared ECU and finite-response throttle, fuel dosing after the last scavenging port closes, 3000 RPM idle control with ignition trim, and a dynamic damped cantilever reed with contacts. Cylinder/crankcase geometry work uses adiabatic energy differences. An active charge finishes combustion when a fuel cut begins. Ignition event crossing handles wraparound without spuriously firing retarded ignition at zero degrees. Reed parameters, combustion, scavenging and controller calibrations have not been validated against a measured engine.
Both desktop engines share MotorcycleTest for clutch/vehicle integration,
common control dispatch and a common dashboard/dyno renderer. The two-stroke
limiter is disabled explicitly in the ECU and cylinder; the twin limiter is
unchanged. Idle and overrun controls remain enabled. The motorcycle and gearing
reuse the existing twin test configuration, not a measured 125 cc motorcycle.
The rolling peak dyno reports crank power and torque versus RPM.
All five CTest suites passed: basic physics/control, fluid boundary validation, intake regression, outdoor audio, and two-stroke regression. Audio tests cover fractional direct arrival, image reflection arrival, stereo ordering, distance gain, linearity, filtering, causal decaying tails, and reed static compliance and seating. The two-stroke sequence idles for two seconds, holds .6 pedal for four, then releases for eight. It checks fuel stays enabled at open pedal above the old limit, reed opening/seating, positive states, finite audio and idle recovery, with no pipe positivity repairs. It then launches the motorcycle for six seconds and checks shifting, neutral and positive dyno power/torque.
Latest Release results: free-rev maximum 22471.3 RPM, recovered idle 3236.08 RPM, free-rev audio peak .512784, motorcycle speed 51.3773 km/h after launch. The high unloaded RPM exposes the uncalibrated high-speed friction/combustion behavior; removing the limiter does not validate this as realistic engine performance. Unit checks also verify disabling an already latched limiter restores fueling. The earlier four-second capture table above predates limiter removal and is retained as an audio-renderer measurement, not a current engine baseline. Windows execution of the latest changes is pending.
Reference basis
- Image source geometry
- Feedback delay networks
- Beam theory, including uniform-load cantilever deflection used for reed compliance.
The later YZ125 baseline changes these engine calibrations and measurements; see YZ125 baseline verification for current results.