laid groundwork to modularise new feed page

This commit is contained in:
2026-04-07 14:58:53 +02:00
parent 2ace713455
commit 692d9d8aff
5 changed files with 224 additions and 185 deletions

View File

@@ -0,0 +1,95 @@
<script lang="ts">
import SubtitledImage from "$lib/components/subtitled-image.svelte";
import ImageGallery from "$lib/lists/image-gallery.svelte";
</script>
## deej0461
<p class="subtitle">PC companion audio source controller</p>
<p class="subtitle">August 2024</p>
<SubtitledImage
image="electronics/deej0461/finished.webp"
altText="A golden 3D printed shell with a slider on its left, two LEDs recessed, and four black buttons on its right. The buttons have symbols of speakers, monitors, and headphones printed on them. Three screws at the top are visible. A USB-C cable is plugged into the back of it."
subtitle="a handful of device for controlling a handful of other devices"
alignment="left"
smaller
/>
This little device was inspired by one a friend of mine built his own
version of: a <a href="https://github.com/omriharel/deej">deej</a>
volume slider panel. This thing allows you to control different
applications with individual, <i>physical</i>, 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 <i>source</i>, 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 <a href="/projects/daisy">Daisy project</a>, 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 <a href="https://soundswitch.aaflalo.me/">SoundSwitch</a>. The program listened to key presses for the <code>F21-F24</code> 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 <code>Shift + F9-F12</code>. 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: <code>pactl set-default-sink [sink-name]</code>. 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 <i><b>every single day</b></i>.
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
<i>unbelievably</i> 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.