{"title":"","byline":null,"dir":null,"lang":null,"content":"<div id=\"readability-page-1\" class=\"page\"><div data-hpc=\"true\"><article><p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">deej</h2><a href=\"#deej\" aria-label=\"Permalink: deej\" id=\"user-content-deej\"></a></p>\n<p dir=\"auto\">deej is an <strong>open-source hardware volume mixer</strong> for Windows and Linux PCs. It lets you use real-life sliders (like a DJ!) to <strong>seamlessly control the volumes of different apps</strong> (such as your music player, the game you're playing and your voice chat session) without having to stop what you're doing.</p>\n<p dir=\"auto\"><strong>Join the <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">deej Discord server</a> if you need help or have any questions!</strong></p>\n<p dir=\"auto\"><a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\"><img data-canonical-src=\"https://img.shields.io/discord/702940502038937667?logo=discord\" alt=\"Discord\" src=\"https://camo.githubusercontent.com/fdb1d31dd031af2a84d303ab15c1992aab1f0d61645366d5142c45c41f87d833/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3730323934303530323033383933373636373f6c6f676f3d646973636f7264\"></a></p>\n<blockquote>\n<p dir=\"auto\"><strong><em>New:</em></strong> <a href=\"https://github.com/omriharel/deej/blob/master/docs/faq/faq.md\">work-in-progress deej FAQ</a>!</p>\n</blockquote>\n<p dir=\"auto\">deej consists of a <a href=\"#features\">lightweight desktop client</a> written in Go, and an Arduino-based hardware setup that's simple and cheap to build. <a href=\"https://github.com/omriharel/deej/blob/master/community.md\"><strong>Check out some versions built by members of our community!</strong></a></p>\n<p dir=\"auto\"><strong><a href=\"https://github.com/omriharel/deej/releases/latest\">Download the latest release</a> | <a rel=\"nofollow\" href=\"https://youtu.be/VoByJ4USMr8\">Video demonstration</a> | <a rel=\"nofollow\" href=\"https://youtu.be/x2yXbFiiAeI\">Build video by Tech Always</a></strong></p>\n<p dir=\"auto\"><a href=\"https://github.com/omriharel/deej/blob/master/assets/build-3d-annotated.png\" rel=\"noopener noreferrer\"><img alt=\"deej\" src=\"https://github.com/omriharel/deej/raw/master/assets/build-3d-annotated.png\"></a></p>\n<blockquote>\n<p dir=\"auto\"><em><strong>Psst!</strong> <a href=\"https://github.com/omriharel/deej/blob/master/assets/build-shoebox.jpg\">No 3D printer? No problem!</a></em> You can build deej on some cardboard, a shoebox or even a breadboard :)</p>\n</blockquote>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">Table of contents</h2><a href=\"#table-of-contents\" aria-label=\"Permalink: Table of contents\" id=\"user-content-table-of-contents\"></a></p>\n<ul dir=\"auto\">\n<li><a href=\"#features\">Features</a></li>\n<li><a href=\"#how-it-works\">How it works</a>\n<ul dir=\"auto\">\n<li><a href=\"#hardware\">Hardware</a>\n<ul dir=\"auto\">\n<li><a href=\"#schematic\">Schematic</a></li>\n</ul>\n</li>\n<li><a href=\"#software\">Software</a></li>\n</ul>\n</li>\n<li><a href=\"#slider-mapping-configuration\">Slider mapping (configuration)</a></li>\n<li><a href=\"#build-your-own\">Build your own!</a>\n<ul dir=\"auto\">\n<li><a href=\"#faq\">FAQ</a></li>\n<li><a href=\"#build-video\">Build video</a></li>\n<li><a href=\"#bill-of-materials\">Bill of Materials</a></li>\n<li><a href=\"#thingiverse-collection\">Thingiverse collection</a></li>\n<li><a href=\"#build-procedure\">Build procedure</a></li>\n</ul>\n</li>\n<li><a href=\"#how-to-run\">How to run</a>\n<ul dir=\"auto\">\n<li><a href=\"#requirements\">Requirements</a></li>\n<li><a href=\"#download-and-installation\">Download and installation</a></li>\n<li><a href=\"#building-from-source\">Building from source</a></li>\n</ul>\n</li>\n<li><a href=\"#community\">Community</a></li>\n<li><a href=\"#license\">License</a></li>\n</ul>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">Features</h2><a href=\"#features\" aria-label=\"Permalink: Features\" id=\"user-content-features\"></a></p>\n<p dir=\"auto\">deej is written in Go and <a href=\"https://github.com/omriharel/deej/releases/latest\">distributed</a> as a portable (no installer needed) executable.</p>\n<ul dir=\"auto\">\n<li>Bind apps to different sliders\n<ul dir=\"auto\">\n<li>Bind multiple apps per slider (i.e. one slider for all your games)</li>\n<li>Bind the master channel</li>\n<li>Bind \"system sounds\" (on Windows)</li>\n<li>Bind specific audio devices by name (on Windows)</li>\n<li>Bind currently active app (on Windows)</li>\n<li>Bind all other unassigned apps</li>\n</ul>\n</li>\n<li>Control your microphone's input level</li>\n<li>Lightweight desktop client, consuming around 10MB of memory</li>\n<li>Runs from your system tray</li>\n<li>Helpful notifications to let you know if something isn't working</li>\n</ul>\n<blockquote>\n<p dir=\"auto\"><strong>Looking for the older Python version?</strong> It's no longer maintained, but you can always find it in the <a href=\"https://github.com/omriharel/deej/tree/legacy-python\"><code>legacy-python</code> branch</a>.</p>\n</blockquote>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">How it works</h2><a href=\"#how-it-works\" aria-label=\"Permalink: How it works\" id=\"user-content-how-it-works\"></a></p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Hardware</h3><a href=\"#hardware\" aria-label=\"Permalink: Hardware\" id=\"user-content-hardware\"></a></p>\n<ul dir=\"auto\">\n<li>The sliders are connected to 5 (or as many as you like) analog pins on an Arduino Nano/Uno board. They're powered from the board's 5V output (see schematic)</li>\n<li>The board connects via a USB cable to the PC</li>\n</ul>\n<p dir=\"auto\"><h4 dir=\"auto\" tabindex=\"-1\">Schematic</h4><a href=\"#schematic\" aria-label=\"Permalink: Schematic\" id=\"user-content-schematic\"></a></p>\n<p dir=\"auto\"><a href=\"https://github.com/omriharel/deej/blob/master/assets/schematic.png\" rel=\"noopener noreferrer\"><img alt=\"Hardware schematic\" src=\"https://github.com/omriharel/deej/raw/master/assets/schematic.png\"></a></p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Software</h3><a href=\"#software\" aria-label=\"Permalink: Software\" id=\"user-content-software\"></a></p>\n<ul dir=\"auto\">\n<li>The code running on the Arduino board is a <a href=\"https://github.com/omriharel/deej/blob/master/arduino/deej-5-sliders-vanilla/deej-5-sliders-vanilla.ino\">C program</a> constantly writing current slider values over its serial interface</li>\n<li>The PC runs a lightweight <a href=\"https://github.com/omriharel/deej/blob/master/pkg/deej/cmd/main.go\">Go client</a> in the background. This client reads the serial stream and adjusts app volumes according to the given configuration file</li>\n</ul>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">Slider mapping (configuration)</h2><a href=\"#slider-mapping-configuration\" aria-label=\"Permalink: Slider mapping (configuration)\" id=\"user-content-slider-mapping-configuration\"></a></p>\n<p dir=\"auto\">deej uses a simple YAML-formatted configuration file named <a href=\"https://github.com/omriharel/deej/blob/master/config.yaml\"><code>config.yaml</code></a>, placed alongside the deej executable.</p>\n<p dir=\"auto\">The config file determines which applications (and devices) are mapped to which sliders, and which parameters to use for the connection to the Arduino board, as well as other user preferences.</p>\n<p dir=\"auto\"><strong>This file auto-reloads when its contents are changed, so you can change application mappings on-the-fly without restarting deej.</strong></p>\n<p dir=\"auto\">It looks like this:</p>\n<div dir=\"auto\"><pre><span>slider_mapping</span>:\n  <span>0</span>: <span>master</span>\n  <span>1</span>: <span>chrome.exe</span>\n  <span>2</span>: <span>spotify.exe</span>\n  <span>3</span>:\n    - <span>pathofexile_x64.exe</span>\n    - <span>rocketleague.exe</span>\n  <span>4</span>: <span>discord.exe</span>\n\n<span><span>#</span> set this to true if you want the controls inverted (i.e. top is 0%, bottom is 100%)</span>\n<span>invert_sliders</span>: <span>false</span>\n\n<span><span>#</span> settings for connecting to the arduino board</span>\n<span>com_port</span>: <span>COM4</span>\n<span>baud_rate</span>: <span>9600</span>\n\n<span><span>#</span> adjust the amount of signal noise reduction depending on your hardware quality</span>\n<span><span>#</span> supported values are \"low\" (excellent hardware), \"default\" (regular hardware) or \"high\" (bad, noisy hardware)</span>\n<span>noise_reduction</span>: <span>default</span></pre></div>\n<ul dir=\"auto\">\n<li><code>master</code> is a special option to control the master volume of the system <em>(uses the default playback device)</em></li>\n<li><code>mic</code> is a special option to control your microphone's input level <em>(uses the default recording device)</em></li>\n<li><code>deej.unmapped</code> is a special option to control all apps that aren't bound to any slider (\"everything else\")</li>\n<li>On Windows, <code>deej.current</code> is a special option to control whichever app is currently in focus</li>\n<li>On Windows, you can specify a device's full name, i.e. <code>Speakers (Realtek High Definition Audio)</code>, to bind that device's level to a slider. This doesn't conflict with the default <code>master</code> and <code>mic</code> options, and works for both input and output devices.\n<ul dir=\"auto\">\n<li>Be sure to use the full device name, as seen in the menu that comes up when left-clicking the speaker icon in the tray menu</li>\n</ul>\n</li>\n<li><code>system</code> is a special option on Windows to control the \"System sounds\" volume in the Windows mixer</li>\n<li>All names are case-<strong>in</strong>sensitive, meaning both <code>chrome.exe</code> and <code>CHROME.exe</code> will work</li>\n<li>You can create groups of process names (using a list) to either:\n<ul dir=\"auto\">\n<li>control more than one app with a single slider</li>\n<li>choose whichever process in the group that's currently running (i.e. to have one slider control any game you're playing)</li>\n</ul>\n</li>\n</ul>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">Build your own!</h2><a href=\"#build-your-own\" aria-label=\"Permalink: Build your own!\" id=\"user-content-build-your-own\"></a></p>\n<p dir=\"auto\">Building deej is very simple. You only need a few relatively 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 <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">join the deej Discord server</a>.</p>\n<p dir=\"auto\">Build deej for yourself, or as an awesome gift for your gaming buddies!</p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">FAQ</h3><a href=\"#faq\" aria-label=\"Permalink: FAQ\" id=\"user-content-faq\"></a></p>\n<p dir=\"auto\">I've started a highly focused effort of writing a proper FAQ page for deej, covering many basic and advanced topics.</p>\n<p dir=\"auto\">It is still <em>very much a work-in-progress</em>, but I'm happy to <a href=\"https://github.com/omriharel/deej/blob/master/docs/faq/faq.md\">share it in its current state</a> in hopes that it at least covers some questions you might have.</p>\n<p dir=\"auto\">FAQ feedback in our <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">community Discord</a> is strongly encouraged :)</p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Build video</h3><a href=\"#build-video\" aria-label=\"Permalink: Build video\" id=\"user-content-build-video\"></a></p>\n<p dir=\"auto\">In case you prefer watching to reading, Charles from the <a rel=\"nofollow\" href=\"https://www.youtube.com/c/TechAlways\"><strong>Tech Always</strong></a> YouTube channel has made <a rel=\"nofollow\" href=\"https://youtu.be/x2yXbFiiAeI\"><strong>a fantastic video</strong></a> that covers the basics of building deej for yourself, including parts, costs, assembly and software. I highly recommend checking it out!</p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Bill of Materials</h3><a href=\"#bill-of-materials\" aria-label=\"Permalink: Bill of Materials\" id=\"user-content-bill-of-materials\"></a></p>\n<ul dir=\"auto\">\n<li>An Arduino Nano, Pro Micro or Uno board\n<ul dir=\"auto\">\n<li>I officially recommend using a Nano or a Pro Micro for their smaller form-factor, friendlier USB connectors and more analog pins. Plus they're cheaper</li>\n<li>You can also use any other development board that has a Serial over USB interface</li>\n</ul>\n</li>\n<li>A few slider potentiometers, up to your number of free analog pins (the cheaper ones cost around 1-2 USD each, and come with a standard 10K Ohm variable resistor. These <em>should</em> work just fine for this project)\n<ul dir=\"auto\">\n<li><strong>Important:</strong> make sure to get <strong>linear</strong> sliders, not logarithmic ones! Check the product description</li>\n<li>You can also use circular knobs if you like</li>\n</ul>\n</li>\n<li>Some wires</li>\n<li>Any kind of box to hold everything together. <strong>You don't need a 3D printer for this project!</strong> It works fantastically with just a piece of cardboard or a shoebox. That being said, if you do have one, read on...</li>\n</ul>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Thingiverse collection</h3><a href=\"#thingiverse-collection\" aria-label=\"Permalink: Thingiverse collection\" id=\"user-content-thingiverse-collection\"></a></p>\n<p dir=\"auto\">With many different 3D-printed designs being added to our <a href=\"https://github.com/omriharel/deej/blob/master/community.md\">community showcase</a>, it felt right to gather all of them in a Thingiverse collection for you to browse. If you have access to a 3D printer, feel free to use one of the designs in your build.</p>\n<p dir=\"auto\"><strong><a rel=\"nofollow\" href=\"https://thingiverse.com/omriharel/collections/deej\">Visit our community-created design collection on Thingiverse!</a></strong></p>\n<blockquote>\n<p dir=\"auto\">You can also <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">submit your own</a> design to be added to the collection. Regardless, if you do upload your design to Thingiverse, <em>please add a <code>deej</code> tag to it so that others can find it more easily</em>.</p>\n</blockquote>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Build procedure</h3><a href=\"#build-procedure\" aria-label=\"Permalink: Build procedure\" id=\"user-content-build-procedure\"></a></p>\n<ul dir=\"auto\">\n<li>Connect everything according to the <a href=\"#schematic\">schematic</a></li>\n<li>Test with a multimeter to be sure your sliders are hooked up correctly</li>\n<li>Flash the Arduino chip with the sketch in <a href=\"https://github.com/omriharel/deej/blob/master/arduino/deej-5-sliders-vanilla/deej-5-sliders-vanilla.ino\"><code>arduino\\deej-5-sliders-vanilla</code></a>\n<ul dir=\"auto\">\n<li><em>Important:</em> If you have more or less than 5 sliders, you must edit the sketch to match what you have</li>\n</ul>\n</li>\n<li>After flashing, check the serial monitor. You should see a constant stream of values separated by a pipe (<code>|</code>) character, e.g. <code>0|240|1023|0|483</code>\n<ul dir=\"auto\">\n<li>When you move a slider, its corresponding value should move between 0 and 1023</li>\n</ul>\n</li>\n<li>Congratulations, you're now ready to run the deej executable!</li>\n</ul>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">How to run</h2><a href=\"#how-to-run\" aria-label=\"Permalink: How to run\" id=\"user-content-how-to-run\"></a></p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Requirements</h3><a href=\"#requirements\" aria-label=\"Permalink: Requirements\" id=\"user-content-requirements\"></a></p>\n<p dir=\"auto\"><h4 dir=\"auto\" tabindex=\"-1\">Windows</h4><a href=\"#windows\" aria-label=\"Permalink: Windows\" id=\"user-content-windows\"></a></p>\n<ul dir=\"auto\">\n<li>Windows. That's it</li>\n</ul>\n<p dir=\"auto\"><h4 dir=\"auto\" tabindex=\"-1\">Linux</h4><a href=\"#linux\" aria-label=\"Permalink: Linux\" id=\"user-content-linux\"></a></p>\n<ul dir=\"auto\">\n<li>Install <code>libgtk-3-dev</code>, <code>libappindicator3-dev</code> and <code>libwebkit2gtk-4.0-dev</code> for system tray support. Pre-built Linux binaries aren't currently released, so you'll need to <a href=\"#building-from-source\">build from source</a>. If there's demand for pre-built binaries, please <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">let me know</a>!</li>\n</ul>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Download and installation</h3><a href=\"#download-and-installation\" aria-label=\"Permalink: Download and installation\" id=\"user-content-download-and-installation\"></a></p>\n<ul dir=\"auto\">\n<li>Head over to the <a href=\"https://github.com/omriharel/deej/releases\">releases page</a> and download the <a href=\"https://github.com/omriharel/deej/releases/latest\">latest version</a>'s executable and configuration file (<code>deej.exe</code> and <code>config.yaml</code>)</li>\n<li>Place them in the same directory anywhere on your machine</li>\n<li>(Optional, on Windows) Create a shortcut to <code>deej.exe</code> and copy it to <code>%APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup</code> to have deej run on boot</li>\n</ul>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Building from source</h3><a href=\"#building-from-source\" aria-label=\"Permalink: Building from source\" id=\"user-content-building-from-source\"></a></p>\n<p dir=\"auto\">If you'd rather not download a compiled executable, or want to extend deej or modify it to your needs, feel free to clone the repository and build it yourself. All you need is a Go 1.14 (or above) environment on your machine. If you go this route, make sure to check out the <a href=\"https://github.com/omriharel/deej/blob/master/pkg/deej/scripts\">developer scripts</a>.</p>\n<p dir=\"auto\">Like other Go packages, you can also use the <code>go get</code> tool: <code>go get -u github.com/omriharel/deej</code>. Please note that the package code now resides in the <code>pkg/deej</code> directory, and needs to be imported from there if used inside another project.</p>\n<p dir=\"auto\">If you need any help with this, please <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">join our Discord server</a>.</p>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">Community</h2><a href=\"#community\" aria-label=\"Permalink: Community\" id=\"user-content-community\"></a></p>\n<p dir=\"auto\"><a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\"><img data-canonical-src=\"https://img.shields.io/discord/702940502038937667?logo=discord\" alt=\"Discord\" src=\"https://camo.githubusercontent.com/fdb1d31dd031af2a84d303ab15c1992aab1f0d61645366d5142c45c41f87d833/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3730323934303530323033383933373636373f6c6f676f3d646973636f7264\"></a></p>\n<p dir=\"auto\">deej is a relatively new project, but a vibrant and awesome community is rapidly growing around it. Come hang out with us in the <a rel=\"nofollow\" href=\"https://discord.gg/nf88NJu\">deej Discord server</a>, or check out a whole bunch of cool and creative builds made by our members in the <a href=\"https://github.com/omriharel/deej/blob/master/community.md\">community showcase</a>.</p>\n<p dir=\"auto\">The server is also a great place to ask questions, suggest features or report bugs (but of course, feel free to use GitHub if you prefer).</p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Donations</h3><a href=\"#donations\" aria-label=\"Permalink: Donations\" id=\"user-content-donations\"></a></p>\n<p dir=\"auto\">If you love deej and want to show your support for this project, you can do so using the link below. Please don't feel obligated to donate - building the project and telling your friends about it goes a very long way! Thank you very much.</p>\n<p dir=\"auto\"><a rel=\"nofollow\" href=\"https://ko-fi.com/omriharel\"><img data-canonical-src=\"https://www.ko-fi.com/img/githubbutton_sm.svg\" alt=\"ko-fi\" src=\"https://camo.githubusercontent.com/1fedf764fa06114b797ee53e7506df10880abed6766f854202d758df1707969d/68747470733a2f2f7777772e6b6f2d66692e636f6d2f696d672f676974687562627574746f6e5f736d2e737667\"></a></p>\n<p dir=\"auto\"><h3 dir=\"auto\" tabindex=\"-1\">Contributing</h3><a href=\"#contributing\" aria-label=\"Permalink: Contributing\" id=\"user-content-contributing\"></a></p>\n<p dir=\"auto\">Please see <a href=\"https://github.com/omriharel/deej/blob/master/docs/CONTRIBUTING.md\"><code>docs/CONTRIBUTING.md</code></a>.</p>\n<p dir=\"auto\"><h2 dir=\"auto\" tabindex=\"-1\">License</h2><a href=\"#license\" aria-label=\"Permalink: License\" id=\"user-content-license\"></a></p>\n<p dir=\"auto\">deej is released under the <a href=\"https://github.com/omriharel/deej/blob/master/LICENSE\">MIT license</a>.</p>\n</article></div></div>","textContent":"deej\ndeej is an open-source hardware volume mixer for Windows and Linux PCs. It lets you use real-life sliders (like a DJ!) to seamlessly control the volumes of different apps (such as your music player, the game you're playing and your voice chat session) without having to stop what you're doing.\nJoin the deej Discord server if you need help or have any questions!\n\n\nNew: work-in-progress deej FAQ!\n\ndeej consists of a lightweight desktop client written in Go, and an Arduino-based hardware setup that's simple and cheap to build. Check out some versions built by members of our community!\nDownload the latest release | Video demonstration | Build video by Tech Always\n\n\nPsst! No 3D printer? No problem! You can build deej on some cardboard, a shoebox or even a breadboard :)\n\nTable of contents\n\nFeatures\nHow it works\n\nHardware\n\nSchematic\n\n\nSoftware\n\n\nSlider mapping (configuration)\nBuild your own!\n\nFAQ\nBuild video\nBill of Materials\nThingiverse collection\nBuild procedure\n\n\nHow to run\n\nRequirements\nDownload and installation\nBuilding from source\n\n\nCommunity\nLicense\n\nFeatures\ndeej is written in Go and distributed as a portable (no installer needed) executable.\n\nBind apps to different sliders\n\nBind multiple apps per slider (i.e. one slider for all your games)\nBind the master channel\nBind \"system sounds\" (on Windows)\nBind specific audio devices by name (on Windows)\nBind currently active app (on Windows)\nBind all other unassigned apps\n\n\nControl your microphone's input level\nLightweight desktop client, consuming around 10MB of memory\nRuns from your system tray\nHelpful notifications to let you know if something isn't working\n\n\nLooking for the older Python version? It's no longer maintained, but you can always find it in the legacy-python branch.\n\nHow it works\nHardware\n\nThe sliders are connected to 5 (or as many as you like) analog pins on an Arduino Nano/Uno board. They're powered from the board's 5V output (see schematic)\nThe board connects via a USB cable to the PC\n\nSchematic\n\nSoftware\n\nThe code running on the Arduino board is a C program constantly writing current slider values over its serial interface\nThe PC runs a lightweight Go client in the background. This client reads the serial stream and adjusts app volumes according to the given configuration file\n\nSlider mapping (configuration)\ndeej uses a simple YAML-formatted configuration file named config.yaml, placed alongside the deej executable.\nThe config file determines which applications (and devices) are mapped to which sliders, and which parameters to use for the connection to the Arduino board, as well as other user preferences.\nThis file auto-reloads when its contents are changed, so you can change application mappings on-the-fly without restarting deej.\nIt looks like this:\nslider_mapping:\n  0: master\n  1: chrome.exe\n  2: spotify.exe\n  3:\n    - pathofexile_x64.exe\n    - rocketleague.exe\n  4: discord.exe\n\n# set this to true if you want the controls inverted (i.e. top is 0%, bottom is 100%)\ninvert_sliders: false\n\n# settings for connecting to the arduino board\ncom_port: COM4\nbaud_rate: 9600\n\n# adjust the amount of signal noise reduction depending on your hardware quality\n# supported values are \"low\" (excellent hardware), \"default\" (regular hardware) or \"high\" (bad, noisy hardware)\nnoise_reduction: default\n\nmaster is a special option to control the master volume of the system (uses the default playback device)\nmic is a special option to control your microphone's input level (uses the default recording device)\ndeej.unmapped is a special option to control all apps that aren't bound to any slider (\"everything else\")\nOn Windows, deej.current is a special option to control whichever app is currently in focus\nOn Windows, you can specify a device's full name, i.e. Speakers (Realtek High Definition Audio), to bind that device's level to a slider. This doesn't conflict with the default master and mic options, and works for both input and output devices.\n\nBe sure to use the full device name, as seen in the menu that comes up when left-clicking the speaker icon in the tray menu\n\n\nsystem is a special option on Windows to control the \"System sounds\" volume in the Windows mixer\nAll names are case-insensitive, meaning both chrome.exe and CHROME.exe will work\nYou can create groups of process names (using a list) to either:\n\ncontrol more than one app with a single slider\nchoose whichever process in the group that's currently running (i.e. to have one slider control any game you're playing)\n\n\n\nBuild your own!\nBuilding deej is very simple. You only need a few relatively 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.\nBuild deej for yourself, or as an awesome gift for your gaming buddies!\nFAQ\nI've started a highly focused effort of writing a proper FAQ page for deej, covering many basic and advanced topics.\nIt is still very much a work-in-progress, but I'm happy to share it in its current state in hopes that it at least covers some questions you might have.\nFAQ feedback in our community Discord is strongly encouraged :)\nBuild video\nIn case you prefer watching to reading, Charles from the Tech Always YouTube channel has made a fantastic video that covers the basics of building deej for yourself, including parts, costs, assembly and software. I highly recommend checking it out!\nBill of Materials\n\nAn Arduino Nano, Pro Micro or Uno board\n\nI officially recommend using a Nano or a Pro Micro for their smaller form-factor, friendlier USB connectors and more analog pins. Plus they're cheaper\nYou can also use any other development board that has a Serial over USB interface\n\n\nA few slider potentiometers, up to your number of free analog pins (the cheaper ones cost around 1-2 USD each, and come with a standard 10K Ohm variable resistor. These should work just fine for this project)\n\nImportant: make sure to get linear sliders, not logarithmic ones! Check the product description\nYou can also use circular knobs if you like\n\n\nSome wires\nAny kind of box to hold everything together. You don't need a 3D printer for this project! It works fantastically with just a piece of cardboard or a shoebox. That being said, if you do have one, read on...\n\nThingiverse collection\nWith many different 3D-printed designs being added to our community showcase, it felt right to gather all of them in a Thingiverse collection for you to browse. If you have access to a 3D printer, feel free to use one of the designs in your build.\nVisit our community-created design collection on Thingiverse!\n\nYou can also submit your own design to be added to the collection. Regardless, if you do upload your design to Thingiverse, please add a deej tag to it so that others can find it more easily.\n\nBuild procedure\n\nConnect everything according to the schematic\nTest with a multimeter to be sure your sliders are hooked up correctly\nFlash the Arduino chip with the sketch in arduino\\deej-5-sliders-vanilla\n\nImportant: If you have more or less than 5 sliders, you must edit the sketch to match what you have\n\n\nAfter flashing, check the serial monitor. You should see a constant stream of values separated by a pipe (|) character, e.g. 0|240|1023|0|483\n\nWhen you move a slider, its corresponding value should move between 0 and 1023\n\n\nCongratulations, you're now ready to run the deej executable!\n\nHow to run\nRequirements\nWindows\n\nWindows. That's it\n\nLinux\n\nInstall libgtk-3-dev, libappindicator3-dev and libwebkit2gtk-4.0-dev for system tray support. Pre-built Linux binaries aren't currently released, so you'll need to build from source. If there's demand for pre-built binaries, please let me know!\n\nDownload and installation\n\nHead over to the releases page and download the latest version's executable and configuration file (deej.exe and config.yaml)\nPlace them in the same directory anywhere on your machine\n(Optional, on Windows) Create a shortcut to deej.exe and copy it to %APPDATA%\\Microsoft\\Windows\\Start Menu\\Programs\\Startup to have deej run on boot\n\nBuilding from source\nIf you'd rather not download a compiled executable, or want to extend deej or modify it to your needs, feel free to clone the repository and build it yourself. All you need is a Go 1.14 (or above) environment on your machine. If you go this route, make sure to check out the developer scripts.\nLike other Go packages, you can also use the go get tool: go get -u github.com/omriharel/deej. Please note that the package code now resides in the pkg/deej directory, and needs to be imported from there if used inside another project.\nIf you need any help with this, please join our Discord server.\nCommunity\n\ndeej is a relatively new project, but a vibrant and awesome community is rapidly growing around it. Come hang out with us in the deej Discord server, or check out a whole bunch of cool and creative builds made by our members in the community showcase.\nThe server is also a great place to ask questions, suggest features or report bugs (but of course, feel free to use GitHub if you prefer).\nDonations\nIf you love deej and want to show your support for this project, you can do so using the link below. Please don't feel obligated to donate - building the project and telling your friends about it goes a very long way! Thank you very much.\n\nContributing\nPlease see docs/CONTRIBUTING.md.\nLicense\ndeej is released under the MIT license.\n","length":9482,"excerpt":"deej","siteName":null}