Lightweight DJ booth software with trackpad support for personal use (work in progress)
Because
- I didn't find a DJ software that gives me a similar experience as having only two turntables and a simple mixer.
- Album covers are very important to find tracks quickly. I want to navigate my music files the same way I look for records.
- I don't have a DJ controller on me right now. I wanted to test if a trackpad was sufficient (spoiler: it is).
- I wanted to gain experience building projects in Rust and I thought this was a very complete one (multi-threading, physics simulation, events, UI, audio, DSP, MIDI controller, ...). Fortunately I don't have to go low level as good quality libraries already exist such as
winit,kira,midir,egui🙏. Happens that everything was working as intended, so I just had to glue the parts together and simulate the turntable's behavior.
This is specifically built for my needs. Some parts are hard-coded, such as the MIDI controller or the trackpad's behavior. Still, it should be easy to adapt anything thanks to the Controller interface that I tried to make as universal as possible. It can receive events from any source and dispatch it to the right object (e.g. turntable, mixer).
This is the features that I consider the bare-minimum to be able to mix tracks together.
- Adjustable channel volumes
- Per-channel, toggle-able cue
- Adjust cue mix between master and cue
- Adjust target pitch of playing sound
- Quick load audio files to a deck via drag & drop
- Display visual feedback such as track progression
- Start and stop a track
- Controllable "vinyl" speed via keyboard and touchpad
- Playing backward
- Fast pitch variation
- Soft touch / temporary pitch shift
- Hard touch / Cueing
- Fast seek
- Controllable via MIDI controller
- Have a debug panel
- Some parts controllable via UI
- Apply EQ filtering to channels
- Dynamic display of album / track covers
- VU / RMS real time volume meter visual feedback
- File explorer
- Recording of the master track to a file
- Simple and elegant visualization for current track / mixer state
- Output to multiple devices
Only tested with Macbook air m1 (nice trackpad) and Akai MidiMix hardware.
-
Clone this repo
git clone [this repo]
-
Build and execute
cargo run --release
This is important to run in
--releasemode as audio loading is orders of magnitude slower in debug mode. -
Have fun 🕺💃🪩
