A digital audio workstation (DAW) engine.
- There are CLI (command-line interface) and GUI (graphical user interface) versions of the app. The CLI is theoretically capable of producing a song, if tediously. The GUI mostly proves that I know how to write a GUI, but it's useless for anything else right now.
- Aside from the CLI workflow being difficult, there aren't many components -- just a couple instruments, a few effects, and a controller (automation) system. So even if you liked the workflow, you don't have a rich library of tools to work with.
- Don't get your hopes up.
- Download the release for your OS
and unzip it somewhere. If you're on an ARM Chromebook or a Raspberry Pi, try
the
aarch64
build first, and if that doesn't work, tryarmv7
. You can also try one of the installers (currently.deb
for Linux and.msi
for Windows). - Using the command line,
cd
to the directory you just unzipped. - Render
projects/demos/effects/drums-filtered-24db.json5
withgroove-cli
, passing the--debug
flag. For Windows, that'sgroove-cli --debug projects\demos\effects\drums-filtered-24db.json5
, and for Linux/OSX it's./groove-cli --debug projects/demos/effects/drums-filtered-24db.json5
. You should hear a 707 beat through a rising low-pass filter. If you don't, file a bug. - Open
projects/demos/effects/drum-filtered-24db.json5
in your favorite text editor, and changebpm: 128.0
tobpm: 200.0
. Play the track again. Congratulations, you're now the world's newest DnB producer. - Take a look at all the other projects in the
projects
directory. Render them, tweak them, and make new ones! - Launch the
groove-egui
executable. It won't do anything useful, but you should see a DAW-ish window appear, and if you press the play button, you should hearprojects/default.json5
played through your speakers. If not, please file a bug so I can be aware of GUI problems on different OSes.
I use VSCode on Ubuntu 22.04 LTS for development.
- Visit https://rustup.rs/ to install the Rust toolchain. We build the
official releases with
nightly
, but for now we aren't using anything more advanced than whatstable
provides, so it's OK to install just that one. - If you're developing on Linux,
apt install
the packages you find buried somewhere in.github/workflows/build.yml
. - Also
apt install mold
, which provides faster linking during development. If you don't want to use mold, or can't, then comment out the section in.cargo/config.toml
that specifies use of mold. cargo build
, and then try the commands listed in the other Getting Started section. Or trycargo install
if you want the current binaries installed in your PATH (not recommended).
cargo-deb
produces Debian.deb
packages from your crate.cargo-expand
helps with macro debugging; trycargo-expand --lib entities
in theentities
subcrate. Also per this advice tryRUSTFLAGS="-Z macro-backtrace" cargo build --workspace
to get just a bit more info on macro issues.cargo-license
lists crate licenses.cargo-machete
helps find unused crates listed asCargo.toml
dependencies.cargo-tree
lists crate dependencies.cross
produces cross-compiled builds.
- Simple additive/subtractive synthesizer. Dual oscillators with a low-pass filter and LFO. Design target is to properly implement the patches listed in Welsh's Synthesizer Cookbook, 3rd edition, by Fred Welsh (website). As of this README's last update, most of them sound OK, though they could all use some tuning. Portamento/unison aren't implemented, and some sounds are inoperable because I haven't yet implemented less common LFO routing paths.
- A single-operator FM synthesizer. The modulator even has its own envelope!
- Sampler. If it can figure out the root frequency from the WAV file's metadata, then it will play the sample at the right adjusted frequency for whichever note it's playing. That means there will be sampling artifacts.
- Sampler-based drumkit.
- Sequencer with a MIDI SMF reader (the MIDI reader is broken right now).
- A declarative project language, which makes it easy to produce songs in JSON5.
- A few audio effects (gain, limiter, bitcrusher, chorus, compressor, delay, reverb, filters). Some of them are just plain wrong.
- Basic automation.
- Output to WAV file or speaker.
- An egui-based GUI that is read-only and very incomplete.
- Plenty of bugs.
- More of everything: synths, filters, effects. High-priority gaps to fill are a wavetable synth, a time-stretching sampler, and effects that deserve their name.
- A better automation design. The vision is intuitively configurable envelopes that can be used throughout the system.
- Scripting. I experimented with rhai, but I don't know whether a JavaScript-y language is right for this domain. It might be better just to turn the whole thing into a crate and let others wrap it in scripting technology.
- MIDI input/output (this works very crudely right now; all MIDI notes are routed externally, and a small white dot appears in the GUI when it detects any MIDI input).
- A GUI that at a minimum provides visual feedback on the project (read-only), and ideally also allows editing of the project (interactive).
- Audio tools. Visualizing audio in a frequency-domain format is top priority.
- Better sound quality. Since the basic oscillators are generated using pure algorithms (sine, sawtooth, square, etc.), they suffer from aliasing and unwanted transients. The efficient state-of-the-art solution these days seems to be to generate them offline and delegate to wavetable synthesis.
- Plugin support (VST, CLAP).
- Assistance with song composition. Suggesting pleasant chord progressions, identifying the current scale and highlighting the full set of consonant notes, a hyperspace button to suggest new directions, etc.
- A review of other DAW features, then playing catchup.
Many of these overlap with this project's goals. The Baader–Meinhof phenomenon is marvelous.
- Acoustico
- BasicSynth
- Bela
- Bespoke Synth
- Dirtywave M8
- Electro-Smith Daisy
- GNU Octave for prototyping signals
- Glicol
- Kiro Synth
- LMN 3 and Tracktion
- MicroDexed-touch
- MicroDexed
- MilkyTracker is an open source, multi-platform music application for creating .MOD and .XM module files.
- MiniDexed
- minisynth
- mt32-pi: A baremetal kernel that turns your Raspberry Pi 3 or later into a Roland MT-32 emulator and SoundFont synthesizer based on Circle, Munt, and FluidSynth.
- musikcube a cross-platform, terminal-based music player, audio engine, metadata indexer, and server in c++
- Nannou is a library that aims to make it easy for artists to express themselves with simple, fast, reliable code.
- Noise2Music: A series of diffusion models trained to generate high-quality 30-second music clips from text prompts.
- Sonic Pi
- Soundraw "Stop searching for the song you need. Create it."
- SunVox
- Supercollider: An audio server, programming language, and IDE for sound synthesis and algorithmic composition.
- Surge XT: a free and open-source hybrid synthesizer.
- Synth6581
- SynthLab
- Tidal Cycles: Live coding music with algorithmic patterns
- Vital: a spectral warping wavetable synthesizer.
- Welsh's Synthesizer Cookbook
- Zynthian Open synth platform