A small DAW and a music language, built for the AKAI MPK Mini.
Free MPK Mini software that is actually good is hard to find, so this exists.
import "house"
tempo 125
kick = punchy "bd*4" { weight 0.45 }
hats = tight "hh*16" { loose 0.4 }
bass = rolling "<a1 a2 d1 d2>" { duck 0.62 }
stabs = stab "~ [a3,c4,e5] ~ ~" { space 0.4 }
play kick, hats, bass, stabs
minim song.minim --live
Edit the file. Save it. The change lands on the next bar.
cargo install minim-daw
The command it gives you is minim. The package is called minim-daw only because an
unrelated program already holds minim on crates.io.
That is the whole installation. The sounds are compiled into the program, so there is nothing else to download, no samples, no plugins, and no files to keep beside your scripts.
You need Rust first, and on Windows the MSVC build tools that
rustup offers to install for you.
Building from a clone instead
git clone https://github.com/aedutta/minim
cd minim
cargo install --path .
Use cargo build --release if you would rather not put it on your PATH. The program
is then at target/release/minim.
Put the example above in a file called song.minim, anywhere you like, and run:
minim song.minim --live
import "house" needs no file next to it. Three packs are built into the program:
$ minim --packs
house 9 presets house drums, a rolling bass and organ stabs
bass 5 presets acid, sub, growl, pluck and deep sub basses
leads 7 presets organ, keys, house piano, bell, saws and air
Hear one before you use it with minim PACK.minim --audition, which plays every preset
in turn and writes a single file.
| Command | What it does |
|---|---|
minim |
Opens the window |
minim TRACK.minim |
Renders a script to a WAV file |
minim TRACK.minim --live |
Plays a script and reloads it on every save |
minim PACK.minim --audition |
Plays every preset in a pack, one after another |
minim --packs |
Lists the packs built in |
minim --monitor |
Prints MIDI input, to check a controller |
Rendering takes --bars N, --out FILE.wav and --peak N.
A language. Write music as text. Nothing fails without a message: an unknown drum, a misspelled setting or a number out of range stops the script and says where and why.
error: `cutof` is not a setting
--> song.minim:6:26
|
6 | bass = notes "a1*4" { cutof 800 }
| ^^^^^ did you mean `cutoff`?
One set of names. level, pan, drive, space and duck mean the same thing on
a drum part and on a synth part. There is no separate vocabulary to learn per
instrument.
A window. Plug in an MPK Mini and Minim finds it. The pads play a drum kit, the keys play a synthesiser, and the step grid programs a beat.
Sound that carries. drive adds the harmonics an analogue stage would. space is a
send into one room shared by every part. duck is the pump: it pushes a part down under
each kick and lets it come back, and it finds the kick for you.
Start with the tutorial. It takes 20 minutes.
- Tutorial — learn Minim from the start
- How-to guides — do one specific job
- Reference — every name, range and symbol
- Explanation — why Minim works this way
The documentation uses Simplified Technical English, and every example in it is compiled by the test suite, so none of them can drift out of date.
The editors/vscode folder holds an extension. It gives colours, snippets, a file icon
and errors in the Problems panel. See Set up Visual Studio
Code.
Minim works and is in use. These parts are done:
- the language: presets, packs, knobs, sections, keys and your own audio files
- live reload
- the drum kit, the sampler, the synthesiser and the step sequencer
- MIDI input, with automatic MPK Mini detection
- rendering to WAV, with drive, reverb and sidechain ducking
These parts are not done yet, and Minim says so where it can rather than letting you find out by ear:
drive,spaceandduckapply when rendering, not in--live. Live playback warns when a script uses them.- the piano roll and MIDI recording in the window. The engine records; nothing shows it.
- saving and loading a project from the window.
- the window's step grid and the
.minimlanguage are separate systems.
Some antivirus programs remove new unsigned programs they have not seen before. This affects most Rust builds on Windows, not Minim alone. If your build disappears, add the project folder to your exclusions.
GPL-3.0. Anybody can use, change and sell this. Anything built from it must also stay free and open.