{"id":13619057,"url":"https://github.com/DasEtwas/enginesound","last_synced_at":"2025-04-14T15:33:58.604Z","repository":{"id":37006363,"uuid":"182542191","full_name":"DasEtwas/enginesound","owner":"DasEtwas","description":"Procedural engine sound generator controlled via GUI or CLI","archived":false,"fork":false,"pushed_at":"2023-06-06T02:15:27.000Z","size":3152,"stargazers_count":295,"open_issues_count":2,"forks_count":15,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-08-01T21:38:53.823Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DasEtwas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-21T14:14:55.000Z","updated_at":"2024-08-01T21:39:01.452Z","dependencies_parsed_at":"2024-08-01T21:53:40.782Z","dependency_job_id":null,"html_url":"https://github.com/DasEtwas/enginesound","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DasEtwas%2Fenginesound","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DasEtwas%2Fenginesound/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DasEtwas%2Fenginesound/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DasEtwas%2Fenginesound/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DasEtwas","download_url":"https://codeload.github.com/DasEtwas/enginesound/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223637679,"owners_count":17177657,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T21:00:34.259Z","updated_at":"2024-11-08T05:30:26.580Z","avatar_url":"https://github.com/DasEtwas.png","language":"Rust","funding_links":[],"categories":["Applications","Sound","应用程序 Applications"],"sub_categories":["Audio and Music","ORM","音频和音乐 Audio and Music"],"readme":"# enginesound\n\nGUI Application used to generate purely synthetic engine sounds with advanced options written in Rust\n\nloosely 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\")\n\n#### Reading the paper is highly recommended to understand the parameters\n\n## Features\n\n#### General ####\n* Variable engine parameters\n* Mono WAV recording\n* RON SerDe of engine parameters\n* Pseudorealistic acoustic pipe/chamber simulation (speed of sound, pipe end reflection) based on the above paper\n* Advanced clap-rs powered CLI\n* Intake, Exhaust and Engine vibrations mixing\n* Resonance dampening (can save your audio equipment and ears)\n\n#### GUI specific\n* Compilation of the GUI is enabled by default (\"gui\" feature, use `--no-default-features` to disable)\n* GUI made with conrod/glium\n* Real-time preview of parameters with `cpal` audio streaming\n* Real-time interactive parameter sliders with small descriptions\n* Record/Stop button\n* Dropping a config into the window loads the config\n* Save button to save the current parameters into a timestamped file in the current working directory\n* Reset sampler button to kill resonances in all acoustic chambers\n\n#### CLI specific\n* Headless mode which does not start audio streaming or a GUI\n* Config argument to specify the file containing RON-serialized parameters\n* Volume/rpm/length arguments to control master volume/engine rpm/recording length\n* 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\n* Warmup time argument to wait for the resonances in the acoustic chambers to be established before recording\n\n## Preview\n### CLI\n```\nEngine Sound Generator 1.3.0\nhttps://github.com/DasEtwas/\nGUI Application used to generate purely synthetic engine sounds with advanced options in real-time, written in Rust.\nIt features real-time recording of the engine, a CLI, automatic crossfading to create seamless loops in the CLI,\nrealtime frequency domain display through FFT, and preset saving/loading capabilities.\n\nUSAGE:\n    enginesound [FLAGS] [OPTIONS]\n\nFLAGS:\n        --help        Prints help information\n    -h, --headless    CLI mode without GUI or audio playback\n    -V, --version     Prints version information\n\nOPTIONS:\n    -c, --config \u003cconfig\u003e              Sets the input file to load as an engine config\n    -f, --crossfade \u003ccrossfade\u003e        Crossfades the recording in the middle end-to-start to create a seamless loop,\n                                       although adjusting the recording's length to the rpm is recommended. The value\n                                       sets the size of the crossfade, where the final output is decreased in length by\n                                       crossfade_time/2.\n    -o, --output \u003coutput_file\u003e         Sets the output .wav file path\n    -l, --length \u003creclen\u003e              Sets the time to record in seconds. The formula for the recommended time to\n                                       record to get a seamless loop is as follows:\n                                       let wavelength = 120.0 / rpm;\n                                       let crossfade = wavelength * 2.0;\n                                       let reclen = audio_length + crossfade / 2.0;\n    -r, --rpm \u003crpm\u003e                    Engine RPM\n    -q, --samplerate \u003csamplerate\u003e      Generator sample rate [default: 48000]\n    -v, --volume \u003cvolume\u003e              Sets the master volume [default: 0.1]\n    -w, --warmup_time \u003cwarmup_time\u003e    Sets the time to wait in seconds before recording\n```\n\n### GUI\n![Image](example.png)\n\n### Sound\nGenerated using the config shown above while adjusting the RPM manually: [Audio file](example.mp3)\n\n#### Example pseudocode for generating a seamless loop\n\n```\nrpm = 1300\nwavelength = 120 / rpm\naverage_len = 3.2                             // seconds\ncycles = ceil(average_len / wavelength)\ncrossfade = 2 * wavelength\nlength = wavelength * cycles + crossfade / 2\nwarmup = 2                                    // seconds\nfade_length = crossfade\nvolume = 0.5                                  // 50%\n\nenginesound.exe -h -c config_file.esc -o output_file.wav -f $fade_length -l $length -w $warmup -r $rpm -v $volume\n```\n\n## Building\n\nOn Ubuntu, these dependencies must be installed for the crate to compile (thanks, [leosh64](https://github.com/leosh64)):\n`sudo apt-get install libasound2-dev libxcb-shape0-dev libxcb-xfixes0-dev`\n\n## Licensing\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDasEtwas%2Fenginesound","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDasEtwas%2Fenginesound","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDasEtwas%2Fenginesound/lists"}