EngineSound

EngineSound is a GUI application used to generate purely synthetic engine sounds with advanced options, written in Rust. It provides real-time recording of the engine and a powerful CLI for advanced control. This tool is loosely based on a research paper on acoustic pipe/chamber simulation, and it is highly recommended to read the paper to understand the parameters fully.

Features

General

  • Variable engine parameters
  • Mono WAV recording
  • RON SerDe of engine parameters
  • Pseudorealistic acoustic pipe/chamber simulation (speed of sound, pipe end reflection) based on the referenced paper
  • Advanced clap-rs powered CLI
  • Mixing of intake, exhaust, and engine vibrations
  • Resonance dampening to protect audio equipment and ears

GUI Specific

  • Compilation of the GUI is enabled by default (gui feature, use --no-default-features to disable)
  • GUI created with conrod/glium
  • Real-time preview of parameters with cpal audio streaming
  • Interactive parameter sliders with descriptions
  • Record/Stop button
  • Drag-and-drop config loading
  • Save button to save parameters into a timestamped file
  • Reset sampler button to kill resonances in all acoustic chambers

CLI Specific

  • Headless mode that does not start audio streaming or a GUI
  • Config argument to specify the file containing RON-serialized parameters
  • Volume, RPM, and length arguments to control master volume, engine RPM, and recording length
  • Crossfade argument for creating seamless loops
  • Warmup time argument to establish resonances in the acoustic chambers before recording
enginesound [FLAGS] [OPTIONS]

Flags

--help        Prints help information
-h, --headless    CLI mode without GUI or audio playback
-V, --version     Prints version information

Options

-c, --config <config>              Sets the input file to load as an engine config
-f, --crossfade <crossfade>        Crossfades the recording in the middle end-to-start to create a seamless loop
-o, --output <output_file>         Sets the output .wav file path
-l, --length <reclen>              Sets the time to record in seconds
-r, --rpm <rpm>                    Engine RPM
-q, --samplerate <samplerate>      Generator sample rate [default: 48000]
-v, --volume <volume>              Sets the master volume [default: 0.1]
-w, --warmup_time <warmup_time>    Sets the time to wait in seconds before recording

Example Command

An example command to generate a seamless loop:

enginesound.exe -h -c config_file.esc -o output_file.wav -f $fade_length -l $length -w $warmup -r $rpm -v $volume

Similar Projects