# Massive Knob Control audio devices using physical knobs. And more. Inspired by [an article on Prusa's blog](https://blog.prusaprinters.org/3d-print-an-oversized-media-control-volume-knob-arduino-basics_30184/), 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. ## Features - 🔊 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). ### Devices 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*) #### Serial 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](https://github.com/min-protocol/min) to send and receive frames. An Arduino Sketch is included with this repository which can be customized to suit your hardware layout. #### Emulator 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. ## Developing 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/ ## Releases Builds are automatically run using AppVeyor. Tagged master releases are available on the [GitHub releases page](https://github.com/MvRens/MassiveKnob/releases). You can find an installer for each version under the "Assets" section for a release. Master build (release versions) [![Build status](https://ci.appveyor.com/api/projects/status/ycn9ydiitn25em99/branch/master?svg=true)](https://ci.appveyor.com/project/MvRens/massiveknob/branch/master) Latest build [![Build status](https://ci.appveyor.com/api/projects/status/ycn9ydiitn25em99?svg=true)](https://ci.appveyor.com/project/MvRens/massiveknob)