- Rust 92.2%
- Faust 6.6%
- Nix 1%
- Shell 0.2%
The hackable DJ & Performance Mixer
What is this?
EQUIS (IPA: /Ikwi/) is a 8 Channel DJ/Performance Mixer for Linux & JACK.
It offers an EQ inspired by the Playdifferently Model1. This means each channel has a highpass/lowpass and sweepable bell eq for smooth eqing.
To fullfill further filtering needs, all channels can be optionally assigned to one of two subfilters. Those subfilters are inspired by the Xone:96 DUAL VCF Filter system.
For effects EQUIS offers 2 send/return channels. This way you can send each channel to an external effect.
EQUIS offers 2 seperate CUE systems for pre-listening the different channels or main signal on headphones.
This project is meant to be extended and played around with. Thanks to FAUST it's pssible to tweak the filters/eqs and whole DSP chain relatively easy. Also you can write your own midi mapping to integrate your own MIDI controller.
ATTENTION: This project is still in exploration phase. So sound characteristics might change until we reach v1.0
Presentation
I held a talk about EQUIS at the Sonoj Congress 2023. I presented the project's idea & philosophy and how I'm using it to DJ/perform with.
Features
- 8 Stereo Channels
- 2 Send/Return Channels for effects
- Playdifferently Model1 like EQ
- 2 Xone:96 like SubFilters (Dual VCF) with Resonance/Frequency/HighPass/LowPass/BandPass settings
- 2 seperate CUE Systems with Cue/Main Balance, Pre/Post-EQ and Split Cue monitoring
- Subfilters are also hearable on cued channels (headphone output)
Screenshots
Example JACK connections in qpwgraph:
Building
-
Make sure you have rust installed through rustup
Note: If you use NixOS with flakes enabled, this repo provides flake files to help you set up a dev environment quickly. Either run
nix developor for a more convenient solution check out https://github.com/nix-community/nix-direnv. -
git clone this repo
-
compile with
cargo build --release -
With
cargo run --releaseyou can start the gui -
Optional: Directly install it into your
$PATHwithcargo install --path crates/equis-gui. To start EQUIS simply runequis.
Hacking
MIDI Mapping
The MIDI Mappings are compiled into the application, this allows us to have very low latency midi mappings as they are run in the audio callback. But this also means that your code should be realtime safe. But don't worry, for most things a midi mapping would do, this is anyways the case.
So to change/add a MIDI mapping you need to rebuild this software.
The place/crate for the midi mappings is crates/equis-midi-mapping.
You can add a new midi mapping by creating yourmapping.rs in crates/equis-midi-mapping/src/mappings.
Add this code to the yourmapping.rs file:
usecrate::prelude::*;pubstruct YourMapping{}implYourMapping{pubfn new()-> Self{Self{}}}implMidiMappingforYourMapping{fn name(&self)-> String {"YourMappingController".into()}fn on_midi_in<'a>(&mutself,dsp: &'a mutDSP,send_midi: SendMidi<'a>,midi_in: Midi,)-> Result<(),String>{Ok(())}fn on_process<'a>(&mutself,dsp: &mutDSP,send_midi: SendMidi<'a>,state_changed: bool){}}Now we need to register this mapping. This is done in the crates/equis-midi-mapping/src/mappings/mod.rs file.
Open the file and you should see a register_midi_mappings!() macro. To load our mapping, add this line yourmapping::YourMapping.
yourmapping refers to the filename without the .rs ending and YourMapping specifies the exported struct name that implemens the MidiMapping trait.
Make sure that you set the commas correctly.
The whole block should then look like this:
register_midi_mappings!(#[cfg(feature = "mapping_mixer_one")]mixer_one::MixerOne,#[cfg(feature = "mapping_dummy")]dummy::Dummy,yourmapping::YourMapping);Rebuild the application and run it, and then you should see the "YourMappingController" midi in&out ports exposed on the EQUIS JACK node.
Logging
To enable logging you can use the RUST_LOG environment variable and enable different log levels
for the different EQUIS crates/modules.
Example:
RUST_LOG=none,equis_gui=debug,equis_backend=debug,equis_dsp=debug,equis_midi_mapping=debug cargo run
Rebuilding FAUST DSP code
The faust dsp code in crates/equis-dsp/dsp/mixer.dsp is only transpiled to rust if
one builds the equis-dsp crate with the faust-rebuild feature activated.
Example: cargo build -p equis-dsp --features faust-rebuild.
ATTENTION: Make sure that you have a recent version of faust installed
on your system. For archlinux you can do it with pacman -S faust. At the time of writing
this I'm using FAUST Version 2.60.3.
Fast (re)builds
To make development a bit more enjoyable, i added the fast build profile (See [profile.fast] in Cargo.toml).
This is tweaked for as fast as possible rebuilds, mainly to iterate on the ui. On my Intel(R) Xeon(R) CPU E5-1620 v2
i get incremental build times of equis-gui of 2 seconds.
To get the most out of it:
- make sure you have the lastest nightly toolchain installed
- make sure you have lld installed
- uncomment
cargo-features = ["profile-rustflags"]in the first line of Cargo.toml - uncomment
rustflags =...in the[profile.fast]sections. This enables the new parallel frontend. - tweak the amount of threads according your machine