5
17
Fork
You've already forked EQUIS
5
A dj & performance mixer inspired by the Model 1 and Xone:96 mixer
  • Rust 92.2%
  • Faust 6.6%
  • Nix 1%
  • Shell 0.2%
2025年10月26日 15:44:41 +01:00
assets v0.7.1 2024年09月27日 22:14:08 +02:00
crates Filter out f32 NaN or infinite values from input buffer. Hopefully this protects us from those weird audio dropouts 2025年01月16日 01:11:58 +01:00
scripts Update bump-version script 2024年09月27日 22:09:07 +02:00
.envrc Add nix flake files 2024年06月28日 02:26:41 +02:00
.gitignore Update .gitignore 2024年09月27日 21:41:21 +02:00
Cargo.lock Make it possible to switch between opengl and wgpu backend 2024年12月09日 02:37:19 +01:00
Cargo.toml Make it possible to switch between opengl and wgpu backend 2024年12月09日 02:37:19 +01:00
CHANGELOG.md Filter out f32 NaN or infinite values from input buffer. Hopefully this protects us from those weird audio dropouts 2025年01月16日 01:11:58 +01:00
default.nix Make it possible to switch between opengl and wgpu backend 2024年12月09日 02:37:19 +01:00
flake.lock Make it possible to switch between opengl and wgpu backend 2024年12月09日 02:37:19 +01:00
flake.nix Nix: wrap the equis binary and add LD_PRELOAD 2024年12月16日 03:29:32 +01:00
LICENSE.md Add gplv3 license 2023年08月02日 13:17:36 +02:00
NOTES.md - Overhauls lowpass/highpass yet again. It's now steep and surgical. 2023年07月26日 00:14:54 +02:00
README.md README.md aktualisiert 2025年10月26日 15:44:41 +01:00
RELEASE.md Update release instructions 2023年10月13日 09:42:48 +02:00
rust-toolchain.toml Add nix flake files 2024年06月28日 02:26:41 +02:00
TODO.md Update TODO/CHANGELOG/README 2024年05月08日 02:27:13 +02:00



logo

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

Screenshot1

Example JACK connections in qpwgraph:

Screenshot2

Building

  1. 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 develop or for a more convenient solution check out https://github.com/nix-community/nix-direnv.

  2. git clone this repo

  3. compile with cargo build --release

  4. With cargo run --release you can start the gui

  5. Optional: Directly install it into your $PATH with cargo install --path crates/equis-gui. To start EQUIS simply run equis.

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:

  1. make sure you have the lastest nightly toolchain installed
  2. make sure you have lld installed
  3. uncomment cargo-features = ["profile-rustflags"] in the first line of Cargo.toml
  4. uncomment rustflags =... in the [profile.fast] sections. This enables the new parallel frontend.
  5. tweak the amount of threads according your machine