Mini retro-vibe monophonic synthesizer.
Generates audio triangle and square waves at low resolution (like in good old retro times) using NES APU-like implementation and visualize resulting waveform in real-time.
Main components used to generate a Pulse channel are:
envelope.rs: Manages volume envelope in increasing and decreasing fashion as well as looping.lencounter.rs: Shutdown channel after specified length.sequencer.rs: 8 values sequencer with 4 different duty cycles.timer.rs: Trigger timer for others components.
The Pulse struct in pulse.rs uses all components in order to build a PWM channel.
For audio and video real-time playback:
audio.rs: Separate thread use to clock the signal and stream the audio signal.main.rs: Main thread to display the waveform, communicating with audio thread to fetch signal data.midi.rs: midi message input handling in separate thread.
Clone the repository.
gh clone alelouis/retrorustThen run the main binary.
cargo run --bin mainPlug-in a midi keyboard and you will be prompted to select it at start of program.
You can also build a VST version of this synthesizer.
The library is built from ./src/lib.rs which integrate the Pulse struct with VST host audio and events streams (not using graphics, cpal or midir).
First, install and then build for you target.
cargo build --target x86_64-apple-darwin --releaseThen on OSX, bundle the .dylib target with the script bundle.sh.
./bundle.sh retrorust target/x86_64-apple-darwin/release/libretrorust.dylibThen paste the retrorust.vst in your VST2 folder, e.g. on macOS:
cp -r retrorust.vst /Library/Audio/Plug-Ins/VST/