## deej0461
PC companion audio source controller
August 2024
This little device was inspired by one a friend of mine built his own
version of: a deej
volume slider panel. This thing allows you to control different
applications with individual, physical, sliders. Super cool
thing.
Except – I didn't need all these sliders, really. A single slider would
be cool, I thought. You know what I really wanted? Buttons to control
the audio source, because I switch between speakers and
headphones constantly, and that's at least 3 clicks every time I want to
switch. So I built a device based on deej, but with some expansions.
I only used few components: a HID-enabled Arduino-compatible Pro Micro
with USB-C controls the whole thing. Hooked up to it are four Cherry
switches and a Soldering slider I had lying around from my Daisy project, and I added two LEDs for good measure. It's all packaged into a
3D-printed enclosure I designed myself. The slider is screwed in
tightly, and so is the top of the case; the key switches are clipped in
from the top so they don't fall out; the Arduino and the LEDs are just
hot-glued in. For extra flair, the four output buttons are marked with
symbols for my outputs: two monitors, a pair of loudspeakers, and a pair
of headphones. In the final device, they're arranged so that my two most
frequently-used buttons are at the bottom for easier reach.
Software-wise, I set this up with the original deej software to control
main volume. For the audio, I used a program called SoundSwitch. The program listened to key presses for the F21-F24 keys,
which the Arduino triggers when the output keys are pressed. The red LED
lights up when a key is pressed; the white LED has no assigned function.
This worked pretty well, but this is no longer the setup I use, since I switched
to Fedora Linux, as I needed to adapt/change the software for the new OS!
When pressing a keyboard's volume button, Windows raises or lowers
volume in increments of 2. Fedora does 5. I found this much handier, so
I stopped reaching for the slider and just defaulted to using my
keyboard. This meant I didn't bother setting up the slider in Fedora.
The buttons work, though, but they needed some adjustment. I think (and
I might be wrong??) that Linux doesn't support function keys past F12,
so I changed the Arduino script so the buttons trigger Shift + F9-F12. Instead of a separate program (which kept asking to be updated...), I
now use KDE's built-in Shortcuts that trigger a script. The script is
one line: pactl set-default-sink [sink-name]. The sink name
is hard-coded into the file because, as extensive testing proved,
Shortcuts does not allow arguments when entering a command. I currently
only have two files set up: one for the primary monitor, one for the
headphones.
I much prefer the setup now because it doesn't rely on third-party
software anymore.
This thing is, no exaggeration, one of the handiest things I have ever
built, because I use it quite literally every single day.
I often switch between my monitor's speakers and my headphones, and
being able to do that with the press of a single button is
unbelievably handy. I don't even think about it anymore, I just reach
for the buttons whenever I switch. It's a part of my routine now and I wouldn't
want to miss it.