Set app volumes with real sliders! deej is an Arduino & Go project to let you build your own hardware mixer for Windows and Linux
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 | ||
| 6 年前 |
deej
Arduino project for controlling audio volume for separate Windows processes using physical sliders (like a DJ!)
New: join the deej Discord server if you need help or have any questions!
Video demonstration on YouTube
See some awesome versions built by people around the world!

How it works
Hardware
- The sliders are connected to 5 analog pins on an Arduino Nano/Uno board. They're powered from the board's 5V output (see schematic)
- The board connects via a USB cable to the PC
Schematic

Software
- The code running on the Arduino board is a C program constantly writing current slider values over its Serial interface
deej-arduino.ino - The PC runs a Python script
deej.pythat listens to the board's Serial connection, detects changes in slider values and sets volume of equivalent audio sessions accordingly. - A VBScript-based run helper
run.vbsallows this Python script to run in the background (from the Windows tray).
Slider mapping (configuration)
deej uses an external YAML-formatted configuration file named config.yaml.
The config file determines which applications are mapped to which sliders, and which COM port/baud rate to use for the connection to the Arduino board.
This file auto-reloads when its contents are changed, so you can change application mappings on-the-fly without restarting deej.
It looks like this:
slider_mapping:
0: master
1: chrome.exe
2: spotify.exe
3:
- pathofexile_x64.exe
- rocketleague.exe
4: discord.exe
# recommend to leave this setting at its default value
process_refresh_frequency: 5
# settings for connecting to the arduino board
com_port: COM4
baud_rate: 9600
- Process names aren't case-sensitive
- You can use a list of process names to either:
- define a group that is controlled simultaneously
- choose whichever process in the group is currently running (in this example, one slider is for different games that may be running)
masteris a special option for controlling master volume of the system.- The
process_refresh_frequencyoption limits how oftendeejmay look for new processes if their appropriate slider moves. This allows you to leavedeejrunning in background and open/close processes normally - the sliders will #justwork
Build your own
Building deej is very simple! You only need a few cheap parts - it's an excellent starter project (and my first Arduino project, personally). Remember that if you need any help or have a question that's not answered here, you can always join the deej Discord server.
Bill of Materials
- An Arduino Nano or Uno board - I officially recommend using a Nano as it offers a smaller form-factor, a friendlier USB connector and more analog pins. Plus it's cheaper
- As many slider potentiometers as you like, up to your number of analog pins (they're around 1-2 USD each, and come with a standard 10K Ohm variable resistor)
- Important: make sure to get linear sliders, not logarithmic ones!
- You can also use circular knobs if you like (but then you're not a DJ!)
- Some wires and a way to connect them to your chosen board and sliders. This can be done with or without a breadboard, depending on how you're comfortable doing it
- Any kind of box to hold everything together. It can be anything from a simple shoebox to a well-designed 3D-printed enclosure for a very professional look
How to run
If you've actually gone ahead and built it, here's how you can run deej:
Requirements
- Python 2.7.x (Sorry!) and
pip virtualenv
Installation
- Download the repository by either cloning it or downloading its archive.
- In the repo's directory, run:
virtualenv venvvenv\Scripts\activate.batpip install -r requirements.txt
- Make a shortcut to
run.vbsby right-clicking it -> "Create Shortcut" - (Optional, but mandatory) Change the shortcut's icon to
assets/logo.ico - (Optional, but optional) Copy the shortcut to
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startupto havedeejrun on boot
Missing stuff
- Better logging and error handling
- Automatic COM port detection
- Mic input support
- Feel free to let me know if there's more demand for other features!