mirror of synced 2024-06-19 15:07:39 +00:00
Go to file
2021-08-11 11:34:55 +02:00
Arduino/MassiveKnob Added support for analog outputs (basic PWM) to Arduino Sketch 2021-03-08 20:18:47 +01:00
build Added AppVeyor build 2021-03-16 12:40:59 +01:00
Hardware Added Fritzing wiring example 2021-03-16 12:53:16 +01:00
Windows Possible fix for #2: OSD does not always disappear automatically ? 2021-06-09 08:38:01 +02:00
.gitignore Implemented default device switching 2021-03-06 10:53:38 +01:00
.gitmodules Implemented default device switching 2021-03-06 10:53:38 +01:00
appveyor.yml Updated GitHub access token 2021-08-11 11:34:55 +02:00
LICENSE Windows application with mock hardware layer 2021-02-19 17:42:37 +01:00
README.md Possible fix for #2: OSD does not always disappear automatically ? 2021-06-09 08:38:01 +02:00

Massive Knob

Control audio devices using physical knobs. And more.

Inspired by an article on Prusa's blog, this project has a slightly different set of goals. The original requirements were:

  1. Control volume using a potentiometer (fixed position) instead of a rotary encoder (endless rotation)
  2. Control specific audio devices, not the current default device
  3. Provide means of switching the default device by pressing a button

Because of these requirements, a simple media keys HID device does not suffice and extra software is required on the desktop. This opens up a range of possibilities.


  • 🔊 Set the volume for specific devices / send the current volume to an analog output
  • 🔇 Mute / unmute specific devices / send the muted state to a digital output (e.g. LED)
  • 🎧 Set the default device / set a digital output based on the default device
  • 💬 Optional OSD (On-Screen Display)
  • 🔌 VoiceMeeter (Standard, Banana & Potato) plugin to execute macros or read the current state

Massive Knob is basically a host for plugins. A plugin can implement a device or actions which either process signals from the device to perform an action (for example, change the volume when a knob is turned) or send signals to the device based on the system state (for example, light up an LED to indicate the default device).


A device can provide the following inputs and outputs, up to 255 for each type (unless you're Look Mum No Computer I assume this will be enough):

  1. Analog input (e.g. a potentiometer)
  2. Digital input (e.g. a button or switch)
  3. Analog output (e.g. a PWM output, though not yet supported by the reference Arduino implementation)
  4. Digital output (e.g. an LED)


Connects to a compatible device on a Serial port, probably a USB device like an Arduino. The device must implement the Massive Knob protocol which uses the MIN protocol to send and receive frames. An Arduino Sketch is included with this repository which can be customized to suit your hardware layout.


Useful for development, this one emulates an actual device. The number of inputs and outputs are configurable, a popup allows changing the inputs and shows the state of the outputs.


The hardware side uses an Arduino sketch to communicate the hardware state over the serial port.

The Windows software is written in C# using .NET Framework 4.7.2 and Visual Studio 2019.

Refer to the bundled plugins for examples.

Some icons courtesy of https://feathericons.com/


Builds are automatically run using AppVeyor. Tagged master releases are available on the GitHub releases page. You can find an installer for each version under the "Assets" section for a release.

Master build (release versions) Build status

Latest build Build status