• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

deloop - an open source M5Dial remote and volume knob

anotherhobby

Addicted to Fun and Learning
Forum Donor
Joined
Dec 17, 2021
Messages
789
Likes
1,964
First, I'm posting these here, on ASR, because I don't like other forums, and I want to share my project where I think it will be well apprecaited for what it is. I thought about posting it in the My Kingdom For A Remote Volume Knob! can this be made? thread, but I'm afraid it would generate too many questions and pollute that thread.

Second, deloop is an open-source application for the M5Dial that turns it into a focused volume knob, touch screen remote, and config/preset switcher with support for the following devices/platforms:
  • Denon/Marantz AVRs (2016+, Presets currently only on Dirac Live licensed AVRs)
  • minidsp-rs
  • CamillaDSP
  • WiiM/LinkPlay streamers
  • Home Assistant media player entities
As a package, it is wired, compact, and generally intended for desktop use. You rotate the encoder to adjust volume, and tap the upper half of the screen to mute. Input switching thru the menu is suppored on all devices. For devices that support DSP presets, up to 4 touch buttons can display on the sceen, with a menu to access more if needed. Home Assistant media players and WiiM streamers that support media controls will also get basic play/pause/skip buttons.

deloop is not a replacement for a full remote, an app or config interface for these devices, and is quite limited in its control scope to keep it focused as a simple volume, preset, and input contoller and display for daily use.

Not counting the first line of this post, the text above here is also the opening to the repo's readme: https://github.com/anotherhobby/deloop

Sometimes projects happen on accident. After running experiments with Dirac ART in my tiny office, I was suddenly faced with the fact that ART was so good that I was going to switch from my beloved miniDSP Flex that had been living on my desk to a giant Denon X4800H, which obviously wasn't going on my desk. I lasted 1 week with the AVR remote before I was on the hunt for a better way to control this thing. I wanted my miniDSP Flex desktop friendly dial and dispaly for my Denon, but that's not a thing.

I'm a software developer, and I've also done several small embedded hobby projects on ESP32. Furthermore, I've written several control automation interfaces to Denon AVRs over the years, so I have some familiarity here. My coding expertise is in back end cloud architecture, so it's fair to say a project like this quite abit out of my wheelhouse. However, I do everything with Claude now, which levels the playing field. I really like working with M5Stack's ESP32 devices, so I went there first and immediately discovered the M5Dial ($48 on amazon). It's a panel-mount device thru a 45mm hole that looked perfect for the task. I hope you also like orange, because it's orange.

4_f5705a9a-80b7-4e3d-83f4-f82cbfc9386e_1200x1200.webp


To offer a true Audio Science Review cable comparison, here is the entire 7.5 Gram computer inside the M5Dial next to an XLR, but did not measure SINAD:

IMG_2132.jpeg


I posted about my little creation on Monday in the excellent My Kingdom For A Remote Volume Knob! can this be made? thread and @Blew asked me how easy it would be to port to minidsp-rs. By this point I had Claude very well trained on the hardware and on the deloop code. Using minidsp-rs's source code, I had Claude convert deloops back-end device defintion to be pluggable while adding miniDSP support. I stood up minidsp-rs since I still have the Flex sitting on my desk, and started playing with the integration. Once the protocol quirks were worked out, I added a display lock-out during preset switching where the display goes monochrome during the switch and then flips back to color once done. I also would have loved naming presets if I was doing this with a miniDSP, so I added the ability to custom name the presets in the config file. By the time I was done I liked it better than my miniDSP Flex display, especially because it's always on.

The next day it clicked. I've gone thru the same control/iterface problem with other devices. I own a WiiM pro streamer and some other little WiiMs. I've ran camilladsp, and the immediate show stopper to me was the lack of a nice physical control interface and display. Then I realized how Home Assistant has support for thousands of media player devices. Did I mention I have a Claude Code subscription? Below is the device support that I now have working and all tested directly against each platform (not vibe coded). The same adaptation philosophy was applied to each device: volume control, mute, input switching, preset swtiching, media controls if applicable. If a device supports custom named inputs/presets and exposes them, deloop descovers them. Home Assistant support has the unique abilty to switch between HA media players on the fly. For camilla I added support for 4 user customizable preset one-touch slots, while in the WiiM I opted for media controls, with preset switching thru the menu — thinking what would be most likely to be used. I fully expect these decisions and the user interface to evolve with user feedback. Note that the grid below of supported device UI diffrerens was rendered using the acutal embedded deloop graphics libraries, so they are pixel-perfect renders of the display.

ui-devices-grid.png


Below is a picture of the device mounted in a $6 wood phone stand off Amazon.

wood-stand.jpeg


This project unlocks a massive number of devices for a dramatically better desktop experience. As I've been playing with it throughout the week, I could see people using it on an end table as a control for AirPlay speakers (thru Home Assistant). I don't want to just go repeat my whole GitHub readme here, especially as things will evolve, but this is the current feature set:
  • Volume up/down via the rotary encoder, with acceleration on a fast spin
  • State display: Volume, Current Input, Current preset/filter
  • Live circular color gauge display of volume (dB) with a moving indicator
  • Main screen tap controls: mute, preset selection, dirac toggle, menu, power (long press, Denon & HA media players only)
  • Tap the already-active preset to disable it in place (e.g. Dirac Live off) without losing which one is loaded -- it stays highlighted, just in gray instead of orange
  • Screen grays out while a preset change is slowly appling (confirmed several seconds on MiniDSP config-slot switches), then returns to color once it's done.
  • Touch menu (not all items on all devices): input selection, preset selection, device selection, brightness, click sound on/off, restart device
  • Synced against the device thru polling so external changes (app, another remote) update deloop.
  • Runs on CircuitPython (because I am a python developer and I wasn't going to vibe-code C++)
  • Pluggable device backend
  • Note that deloop is not currently designed to support displaying and/or switching Audyssey filters on Deonon/Marantz.
Here is a quick demo video I made of it controlling a miniDSP. The UI has evolved a little since I recorded this, but you'll get the general idea of how it works:


Does deloop fill the big void that I think it does?
 
Last edited:
Awesome! It's great that you're already supporting so many other devices. I was going to ask about CamillaDSP but didn't want to push my luck!

So that's two systems (MiniDSP and CamillaDSP) that fills a big void for me alone. HA integration opens up even more possibilities too.
 
Back
Top Bottom