4.7 KiB
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!
<ImageGallery images={[ { src: "electronics/deej0461/printing.webp", alt: "A Bambu Lab A1 mini 3D printer in the middle of printing casing parts using a golden filament. The printer head has two googly eyes attached.", desc: ["googly-eyed printer hard at work"], }, { src: "electronics/deej0461/soldering.webp", alt: "An Arduino set into a 3D printed case with a slider, two LEDs, and four key switches soldered to it using wires. The components are spread out and hanging out the top of the case.", desc: ["no PCB? no problem"], }, ]} />
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.