Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DasEtwas/enginesound
Procedural engine sound generator controlled via GUI or CLI
https://github.com/DasEtwas/enginesound
Last synced: about 20 hours ago
JSON representation
Procedural engine sound generator controlled via GUI or CLI
- Host: GitHub
- URL: https://github.com/DasEtwas/enginesound
- Owner: DasEtwas
- License: mit
- Created: 2019-04-21T14:14:55.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-06-06T02:15:27.000Z (over 1 year ago)
- Last Synced: 2024-08-01T21:38:53.823Z (3 months ago)
- Language: Rust
- Homepage:
- Size: 3.01 MB
- Stars: 295
- Watchers: 6
- Forks: 15
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust - enginesound - realistic engine sounds. Featuring in-depth configuration, variable sample rate and a frequency analysis window. (Applications / Audio and Music)
- awesome-rust-cn - enginesound
- awesome-code-for-gamedev - engine sound - a GUI Application used to generate purely synthetic engine sounds with advanced options (Sound / ORM)
- awesome-rust - enginesound - A GUI and command line application used to procedurally generate semi-realistic engine sounds. Featuring in-depth configuration, variable sample rate and a frequency analysis window. (Applications / Audio and Music)
- fucking-awesome-rust - enginesound - A GUI and command line application used to procedurally generate semi-realistic engine sounds. Featuring in-depth configuration, variable sample rate and a frequency analysis window. (Applications / Audio and Music)
- fucking-awesome-rust - enginesound - A GUI and command line application used to procedurally generate semi-realistic engine sounds. Featuring in-depth configuration, variable sample rate and a frequency analysis window. (Applications / Audio and Music)
README
# enginesound
GUI Application used to generate purely synthetic engine sounds with advanced options written in Rust
loosely based on [this paper](https://www.researchgate.net/publication/280086598_Physically_informed_car_engine_sound_synthesis_for_virtual_and_augmented_environments "Physically informed_car engine sound synthesis for virtual and augmented environments")
#### Reading the paper is highly recommended to understand the parameters
## 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 above paper
* Advanced clap-rs powered CLI
* Intake, Exhaust and Engine vibrations mixing
* Resonance dampening (can save your audio equipment and ears)#### GUI specific
* Compilation of the GUI is enabled by default ("gui" feature, use `--no-default-features` to disable)
* GUI made with conrod/glium
* Real-time preview of parameters with `cpal` audio streaming
* Real-time interactive parameter sliders with small descriptions
* Record/Stop button
* Dropping a config into the window loads the config
* Save button to save the current parameters into a timestamped file in the current working directory
* Reset sampler button to kill resonances in all acoustic chambers#### CLI specific
* Headless mode which does not start audio streaming or a GUI
* Config argument to specify the file containing RON-serialized parameters
* Volume/rpm/length arguments to control master volume/engine rpm/recording length
* Crossfade argument which cuts the recording in half, swaps the halves and crossfades the middle x seconds (reduces output length by x/2 seconds), used to make seamless loops
* Warmup time argument to wait for the resonances in the acoustic chambers to be established before recording## Preview
### CLI
```
Engine Sound Generator 1.3.0
https://github.com/DasEtwas/
GUI Application used to generate purely synthetic engine sounds with advanced options in real-time, written in Rust.
It features real-time recording of the engine, a CLI, automatic crossfading to create seamless loops in the CLI,
realtime frequency domain display through FFT, and preset saving/loading capabilities.USAGE:
enginesound [FLAGS] [OPTIONS]FLAGS:
--help Prints help information
-h, --headless CLI mode without GUI or audio playback
-V, --version Prints version informationOPTIONS:
-c, --config Sets the input file to load as an engine config
-f, --crossfade Crossfades the recording in the middle end-to-start to create a seamless loop,
although adjusting the recording's length to the rpm is recommended. The value
sets the size of the crossfade, where the final output is decreased in length by
crossfade_time/2.
-o, --output Sets the output .wav file path
-l, --length Sets the time to record in seconds. The formula for the recommended time to
record to get a seamless loop is as follows:
let wavelength = 120.0 / rpm;
let crossfade = wavelength * 2.0;
let reclen = audio_length + crossfade / 2.0;
-r, --rpm Engine RPM
-q, --samplerate Generator sample rate [default: 48000]
-v, --volume Sets the master volume [default: 0.1]
-w, --warmup_time Sets the time to wait in seconds before recording
```### GUI
![Image](example.png)### Sound
Generated using the config shown above while adjusting the RPM manually: [Audio file](example.mp3)#### Example pseudocode for generating a seamless loop
```
rpm = 1300
wavelength = 120 / rpm
average_len = 3.2 // seconds
cycles = ceil(average_len / wavelength)
crossfade = 2 * wavelength
length = wavelength * cycles + crossfade / 2
warmup = 2 // seconds
fade_length = crossfade
volume = 0.5 // 50%enginesound.exe -h -c config_file.esc -o output_file.wav -f $fade_length -l $length -w $warmup -r $rpm -v $volume
```## Building
On Ubuntu, these dependencies must be installed for the crate to compile (thanks, [leosh64](https://github.com/leosh64)):
`sudo apt-get install libasound2-dev libxcb-shape0-dev libxcb-xfixes0-dev`## Licensing
MIT License