We now support OLED Deej:
full bidirectional websocket support
DeejNG is a modern, extensible audio mixer and controller for Windows, built with WPF (.NET 9), NAudio, and SkiaSharp. It allows real-time control over system and app volumes using physical sliders (e.g. Arduino), complete with VU meters, mute toggles, and persistent target mappings.
This is meant as a companion app to the hardware. Serial/Arduino firmware can be found at https://github.com/omriharel/deej, and the button-capable fork at https://github.com/jimmyeao/ButtonDeej.
- ποΈ Physical Slider Control via serial (Arduino/COM port) or WebSocket (OledDeej)
- Button Support for toggle or momentary press buttons
- ποΈ Multiple Channels with per-channel volume and mute
- π§ Supports Applications, System Audio, Microphones, and Output Devices
- π Per-Channel Mute with Visual Feedback
- π Smooth VU Meters with SkiaSharp rendering
- π Session Auto-Reconnect & Expiration Handling
- πΎ Persistent Settings including targets, input mode, themes, and more
- π Light/Dark Theme Toggle with multiple theme options
- π οΈ Start at Boot and Start Minimized options
- π Control Unmapped Applications
- ποΈ Input (Microphone) Device Volume Support
- π§ Smart Session Caching and optimized session lookup
- π§° Extensive Logging and Self-Healing Timers
- π Multiple Profiles for different scenarios (Gaming, Streaming, etc.)
- π₯οΈ OledDeej WebSocket Integration with hardware-driven channel picker overlay
- Channels (sliders) are represented by
ChannelControlelements. - Each slider is mapped to one or more targets:
- System audio
- Specific applications (by executable name)
- Current application (by focused window)
- Input devices (microphones)
- Output devices (speakers/headphones)
- Unmapped sessions (everything else)
- Volume data is received via serial (USB COM port) or WebSocket (OledDeej device).
- VU meters are driven by a 25ms dispatcher timer, showing real-time audio levels.
- Targets are assigned via a double-click on a channel, launching a session picker.
- Connect your physical slider hardware (e.g. Arduino).
- Launch DeejNG.
- Select the correct COM port from the dropdown and click Connect.
- Sliders will auto-generate based on incoming serial data (e.g.
0.5|0.3|...).
OledDeej is a Wi-Fi-enabled hardware device with an OLED display. DeejNG connects to it over WebSocket for two-way communication β volume changes on either end stay in sync.
- In Settings, switch Connection Mode to WebSocket.
- Enter the IP address and port of your OledDeej device.
- Adjust the encoder sensitivity (coarse / medium / fine) and screensaver timeout as desired.
- Click Connect. DeejNG will push channel config and current volume/mute state to the device on connect.
- Double-click a slider to open the session picker.
- Select from running applications, "System", "Unmapped Applications", microphones, or output devices.
- You can select multiple targets per slider. One slider can control multiple apps or a mic.
When using OledDeej in WebSocket mode, pressing the encoder button on a channel opens a floating channel picker overlay directly on your PC screen. This lets you reassign audio targets from the hardware device itself β no mouse needed.
- Scroll the encoder to browse Apps, Inputs, and Outputs.
- Press the encoder (or mute toggle) to confirm the selection.
- Press BACK to cycle through categories (Apps β Inputs β Outputs).
- The overlay closes automatically on confirm or cancel.
- Click the Mute button on each channel to toggle audio mute.
- The button will turn red when muted.
- In WebSocket mode, mute state is synced bidirectionally with the OledDeej device.
- Use the "Show Sliders" checkbox to toggle VU meters.
- Meters update live with peak-hold animation.
Settings are saved automatically and include:
- Assigned targets per slider
- Connection mode (Serial or WebSocket) and connection parameters
- Input mode per channel
- Theme preference
- Slider inversion
- Smoothing toggle
- Start on boot
- Start minimized
- Overlay timeout and opacity
- OledDeej encoder sensitivity and screensaver timeout
Configure physical buttons for:
- Media Control β Play/Pause, Next, Previous, Stop
- Mute Channel β Toggle mute for a specific channel
- Global Mute β Toggle mute for all channels
Configure multiple profiles for different scenarios (Gaming, Streaming, Work, etc.). Each profile stores a complete snapshot of all channel assignments and settings.
A configurable transparent overlay shows current volume levels when sliders are moved. Adjustable timeout, opacity, text colour, and screen position.
| Mode | Hardware | Protocol | Notes |
|---|---|---|---|
| Serial | Arduino / any COM device | USB serial, pipe-delimited values | Classic deej-style |
| WebSocket | OledDeej | TCP/WebSocket, JSON | Two-way sync, OLED display, encoder input |

