Procedural Engine Sounds Dataset
Procedurally synthesized engine audio with sample-accurate RPM and torque annotations, covering eight capture configurations across three engines.
Summed across platforms, not deduplicated. Counts as of 2026-08-15.
Timbre sources
Three engines were recorded across eight capture configurations. Each configuration is one of the released subsets.
| Set | Engine | Configuration | Capture position |
|---|---|---|---|
| A | E1 | turbocharged inline-4 | Driver headrest, right |
| B | E2 | twin-turbo V8 (SUV) | Passenger footwell |
| C | E3 | twin-turbo V8 (coupé) | Driver headrest, left |
| D | E3 | twin-turbo V8 (coupé) | Front bass mic |
| E | E3 | twin-turbo V8 (coupé) | Front bass mic |
| F | E3 | twin-turbo V8 (coupé) | Passenger, mono |
| G | E3 | twin-turbo V8 (coupé) | Exhaust tailpipe, 0.5 m at 45° left |
| H | E2 | twin-turbo V8 (SUV) | Dashboard centre |
Control traces
RPM and torque were pooled separately from the timbre recordings: 2.5 hours of driving across a wider set of vehicles and engine configurations, including an inline-6, together with systematic operation-state sampling on a dynamometer.
What's in a file
Each release file is a four-channel WAV at 48 kHz: two audio channels carrying engine audio on channels 1 and 2 (largely the same content between them, with sparse decorrelation from the resonator and noise components), RPM scaled by 0.0001 on channel 3, and torque scaled by 0.001 on channel 4. Reading it back is a matter of undoing the scale factors.
import soundfile as sf
audio, sr = sf.read("323_Engine-A.wav") # (n, 4) at 48 kHz
engine = audio[:, 0:2] # engine audio, 2 channels
rpm = audio[:, 2] * 10_000 # revolutions per minute
torque = audio[:, 3] * 1_000 # newton metres
Same-manoeuvre comparison
Three manoeuvres — a gearshift, an overrun and a tip-in in neutral — each drawn from one pooled control trace and rendered by every subset. Switch set to hear the same manoeuvre through a different engine and capture position.
Pipeline
Every clip is generated by the same five-stage analysis, run once per engine on 5–10 minutes of source audio, followed by a synthesiser that combines the resulting fingerprint with a much larger pool of recorded RPM and torque.
Validation
Per-order magnitude — how much energy sits at each harmonic of the firing frequency — is compared between source recordings and resynthesized audio, plotted against RPM and torque. The same order structure appears in both, and the agreement holds across all eight subsets, over a wider operating range than the five to ten minutes of source audio that seeded each one.
As a downstream check, a differentiable harmonic-plus-noise network with 1.4 million parameters was trained on subsets A, B and C to reconstruct audio directly from RPM and torque alone — coverage the five to ten minutes of source audio per engine could not have supported on its own. This is intended to demonstrate that the generated data supports data-driven modelling, not to claim a state-of-the-art result.
Models trained on this data
- Physics-Informed Neural Engine Sound Modeling with Differentiable Pulse-Train Synthesis — EUSIPCO 2026
- Gradient-Based Learning of Parametric Engine Sound Representations for Real-Time Resynthesis and Tuning on Embedded Systems — AES 2026 International Conference on Automotive Audio, Detroit
Using it for something? Open a discussion on Hugging Face and I'll add it here.
Use cases
- Generate engine audio conditioned on time-varying RPM and torque.
- Predict RPM and torque from audio, for automatic annotation and NVH diagnostics.
- Study how engine order magnitudes track the RPM–torque operating space.
- Develop and benchmark procedural and differentiable synthesis methods.
- Augment in-cabin speech detection, recognition and noise-suppression training sets.
Citing this dataset
Released under CC BY-NC 4.0.
If this dataset was useful, here is how to cite it. The dataset record is the primary reference:
@dataset{doerfler_2025_procedural_engine_sounds,
author = {Doerfler, Robin},
title = {Procedural Engine Sounds Dataset},
month = {August},
year = 2025,
publisher = {Zenodo},
version = {1.0},
doi = {10.5281/zenodo.16883336},
url = {https://doi.org/10.5281/zenodo.16883336}
}
The paper describing how it was built, written with Lonce Wyse, appeared at EUSIPCO 2026 (a preprint stays on arXiv):
@inproceedings{doerflerAnalysisDrivenProceduralGeneration2026,
title = {Analysis-{{Driven Procedural Generation}} of an {{Engine Sound Dataset}} with {{Embedded Control Annotations}}},
author = {Doerfler, Robin and Wyse, Lonce},
booktitle = {Proc. 34th Eur. Signal Process. Conf. (EUSIPCO)},
address = {Bruges, Belgium},
publisher = {EURASIP},
month = sep,
year = {2026},
pages = {221--225},
isbn = {978-94-645936-3-1},
url = {https://eurasip.org/Proceedings/Eusipco/Eusipco2026/pdfs/0000221.pdf}
}