Topic: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Hi Everyone, I've been trying to setup so that my keyboard's volume wheel adjusts the ADI-@ DAC's volume in real time. The wheel currently controls the system volume by default and I'd like to bypass that so it adjusts the ADI-2 DAC's volume level instead. Has anyone successfully done this? Do you have recommended settings, scripts, or a specific workflow? I'm currently on a Mac and tried a Better Touch Tool/MIDI but can't seem to figure out what works well with the ADI-2 Remote.

Any guidance or tips would be great appreciated. Thanks!

2 (edited by maggie33 2025-02-24 07:17:16)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Has anyone successfully done this? Do you have recommended settings, scripts, or a specific workflow?

No, as I do not own an ADI. But afaik, it should not be too complicated at all.


Did you look into the ADI2 remote manual?
https://rme-audio.de/downloads/adi2remote_e.pdf

If you read carefully, you will find a link to "The MIDI protocol used by the ADI-2 Remote is available for downloaded as an Excel document:..."

Ok, its an .ods file. But anyhow, after conversion to xls - there is everything you need, good documented how the ADI-2 Remote App communicates with the unit. Probably it would be even possible to build "your own" ADI Remote App with this information. wink

Putting this together, according your use case - it should not be too complicated to write a script, which listens to your keyboard's volume wheel inputs and translates/sends the values to midi sysex commands which are sent to your unit.

Thats just an idea...

“Do It For Her”
My Gear: Bontempi Magic light Keyboard

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Yes, I've tried this MIDI protocol but I can't get a simple muting/unmuting command to work with sendmidi

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx "F0 00 20 0D 71 02 0F 00 01 F7"

Won't trigger anything to output

maggie33 wrote:

Has anyone successfully done this? Do you have recommended settings, scripts, or a specific workflow?

No, as I do not own an ADI. But afaik, it should not be too complicated at all.


Did you look into the ADI2 remote manual?
https://rme-audio.de/downloads/adi2remote_e.pdf

If you read carefully, you will find a link to "The MIDI protocol used by the ADI-2 Remote is available for downloaded as an Excel document:..."

Ok, its an .ods file. But anyhow, after conversion to xls - there is everything you need, good documented how the ADI-2 Remote App communicates with the unit. Probably it would be even possible to build "your own" ADI Remote App with this information. wink

Putting this together, according your use case - it should not be too complicated to write a script, which listens to your keyboard's volume wheel inputs and translates/sends the values to midi sysex commands which are sent to your unit.

Thats just an idea...

4 (edited by maggie33 2025-02-24 09:07:35)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Cool! You seem to know what we are talking about smile

Thus its hard as i dont own a DAC, I'll do my best to help out. But I probobly need some time time to dig in deeper into this.

But first of all, it would be helpful to know which exact model you own?

Just to be sure you are trying to communicate with the correct DeviceID -  according the doc:
0x71    ADI-2 DAC
0x72    ADI-2 Pro
0x73    ADI-2/4 Pro SE

Additionally, maybe you have to send a valid command first (see examples tab)?
sth like F0 00 20 0D 71 03 09 F7 (if yours is a "ADI-2 DAC") ?
Where
71 = your device ID
03 = Request to device
09 = all Settings (without EQ Presets and Setup-Names)

Then you should see a Continously received status...


Do you see sth coming from the unit (f.ex via a proper receivemidi in second terminal)?
Maybe https://www.snoize.com/MIDIMonitor/ is easier for monitoring MIDI traffic, too...

“Do It For Her”
My Gear: Bontempi Magic light Keyboard

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks, I own the ADI-2 DAC. I've tried the command and downlooaded MIDI Monitor and doesn't seem like DAC is actually set up to accept incoming MIDI. The only thing I found researching through the forums is with Roon (https://community.roonlabs.com/t/rooadi … acs/258291) which I don't use.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

pbj wrote:

Thanks, I own the ADI-2 DAC. I've tried the command and downlooaded MIDI Monitor and doesn't seem like DAC is actually set up to accept incoming MIDI. ...

What firmware version is installed in your ADI-2 DAC? (FPGA 81, DSP 62 ?)
Does the ADI-2 Series Remote for macOS connect and work?

Ralf
(ADI-2 Pro FS with ThinkPad Yoga L13, Dynaudio Focus 600 XD or Focal Clear — and a lot of Jazz)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

rawac wrote:
pbj wrote:

Thanks, I own the ADI-2 DAC. I've tried the command and downlooaded MIDI Monitor and doesn't seem like DAC is actually set up to accept incoming MIDI. ...

What firmware version is installed in your ADI-2 DAC? (FPGA 81, DSP 62 ?)
Does the ADI-2 Series Remote for macOS connect and work?

Yes I have 81/62, the ADI-2 Remote App connects and works. However, it is all controlled via mouse controls, it doesn't support keyboard shortcuts. Therefore I'm trying to rely on MIDI but I think it's somehow disabled or unsupported for volume control.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Make sure Sysex is not disabled in the Midi send app

M1-Tahoe, Madiface Pro, Digiface USB, Babyface silver and blue

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

waedi wrote:

Make sure Sysex is not disabled in the Midi send app

It's sending SysEx messages but not reacting to incoming SysEx commands. I don't see a SysEx on/off toggle in the ADI-2 Remote app nor the DAC itself

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

I mean the app you use to send midi commands to the ADI-2 remote.

M1-Tahoe, Madiface Pro, Digiface USB, Babyface silver and blue

11 (edited by maggie33 2025-02-25 08:26:47)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

@waedi

waedi wrote:

Make sure Sysex is not disabled in the Midi send app

pbj uses sendmidi (with the syx parameter in his command, see his Post #3 or details below)...

waedi wrote:

I mean the app you use to send midi commands to the ADI-2 remote.

We do not want to send midi sysex messages to the Remote App. It is not involved in our scenario.
We want to communicate with the ADI-2 DAC directly...

(correct me if I'm misunderstood sth)

-----


@pbj

i just saw you try to send sth like this:

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx "F0 00 20 0D 71 02 0F 00 01 F7"

this will not work as  intended.
In fact, you send F0 00 F7 (I verified this via MIDI Monitor).

a "sendmidi -h" tells me this:

...
dec                  Interpret the next numbers as decimals by default
hex                  Interpret the next numbers as hexadecimals by default
Commands:
...
  syx   bytes          Send SysEx from a series of bytes (no F0/F7 delimiters)
...

By default, numbers are interpreted in the decimal system, this can be changed
to hexadecimal by sending the "hex" command.


So, try this instead your command above (no surrounding „“, no F0/F7 status bytes but add the hex parameter to inform sendmidi that the following bytes should be interpreted as hex bytes):

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 0F 00 01


Additionally, looking into the sheet, and putting things together regarding your unit, make a test:

1) sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 03 09 (=Request all settings from ADI-2/4 Pro - or sayin "Hello!" to the unit)

2) then you should receive a big bunch of messages (all settings)

3) then you should continuously receive the status from ADI-2/4 Pro (after first valid command) which looks like this: F0 00 20 0D 71 07 11 30 7E 08 00 00 00 02 04 01 11 00 F7

4) Now, try to set Volume of Phones 3/4 to -10dB (address 9, parameter index 12, value -100) via:
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 4B 1F 1C

5) Or try to set Input-Range to 13dBu (address 0, parameter index 1, value 2) via
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 00 20 02


I am pretty sure this should work now (according to Ralf's really good documentation).

PS: I did not verify if ADI-2 DAC really has Phones3/4 and the Input Ranges till now. But I would bet sth that this should work...

“Do It For Her”
My Gear: Bontempi Magic light Keyboard

12

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for the help, I feel like we're close!

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 0F 00 01

^ This isn't giving me any messages in MIDI Monitor however the following does:

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 03 09

It gives me bunch of responses starting with F0 00 20 0D 71 01 ...

I tried the below commands but not changing levels nor giving any messages through MIDI

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 4B 1F 1C
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 00 20 02

maggie33 wrote:

@waedi

waedi wrote:

Make sure Sysex is not disabled in the Midi send app

pbj uses sendmidi (with the syx parameter in his command, see his Post #3 or details below)...

waedi wrote:

I mean the app you use to send midi commands to the ADI-2 remote.

We do not want to send midi sysex messages to the Remote App. It is not involved in our scenario.
We want to communicate with the ADI-2 DAC directly...

(correct me if I'm misunderstood sth)

-----


@pbj

i just saw you try to send sth like this:

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx "F0 00 20 0D 71 02 0F 00 01 F7"

this will not work as  intended.
In fact, you send F0 00 F7 (I verified this via MIDI Monitor).

a "sendmidi -h" tells me this:

...
dec                  Interpret the next numbers as decimals by default
hex                  Interpret the next numbers as hexadecimals by default
Commands:
...
  syx   bytes          Send SysEx from a series of bytes (no F0/F7 delimiters)
...

By default, numbers are interpreted in the decimal system, this can be changed
to hexadecimal by sending the "hex" command.


So, try this instead your command above (no surrounding „“, no F0/F7 status bytes but add the hex parameter to inform sendmidi that the following bytes should be interpreted as hex bytes):

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 0F 00 01


Additionally, looking into the sheet, and putting things together regarding your unit, make a test:

1) sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 03 09 (=Request all settings from ADI-2/4 Pro - or sayin "Hello!" to the unit)

2) then you should receive a big bunch of messages (all settings)

3) then you should continuously receive the status from ADI-2/4 Pro (after first valid command) which looks like this: F0 00 20 0D 71 07 11 30 7E 08 00 00 00 02 04 01 11 00 F7

4) Now, try to set Volume of Phones 3/4 to -10dB (address 9, parameter index 12, value -100) via:
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 4B 1F 1C

5) Or try to set Input-Range to 13dBu (address 0, parameter index 1, value 2) via
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 00 20 02


I am pretty sure this should work now (according to Ralf's really good documentation).

PS: I did not verify if ADI-2 DAC really has Phones3/4 and the Input Ranges till now. But I would bet sth that this should work...

13 (edited by maggie33 2025-02-26 07:47:45)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

00 20 0D 71 02 0F 00 01

i didnt look what this exactly does...

sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 03 09
It gives me bunch of responses starting with F0 00 20 0D 71 01 ...
I tried the below commands but not changing levels nor giving any messages through MIDI
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 4B 1F 1C
sendmidi dev "ADI-2 DAC (59651073) Port 1" syx hex 00 20 0D 71 02 00 20 02

Is the ADI-2 Remote app running while you do this? (should probably not)

A midi monitor screenshot or detailed midi log what you send and what you receive would help to understand what happens...

Edit: Verify you have set midi monitor like this:
https://i.ibb.co/Rk2vnSHf/midimonitor-settings.gif

“Do It For Her”
My Gear: Bontempi Magic light Keyboard

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

did anyone figure this out?
im also looking to control adi-2 dac volume level with macOS volume keys...

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Ok, thanks to this other thread: https://forum.rme-audio.de/viewtopic.php?id=38970
– I finally got it working. macOS media keys on F10/F11/F12 are controlling mute/volume down/volume up on my adi-2 dac now.
Next to some adaptation to the script using sendmidi on macOS it needed the Hammerspoon app to get access to the keys.
It is perfectly in sync with the hardware now and the keys maintain their original function when used with other Audio interfaces.
just the the adi-2 remote app does not update its volume dial when I change it through the my keyboard and the big dB overlay is not displayed.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Hi,I made a small Python app to control the ADI-2 hardware volume directly from Windows volume keys/wheels via SysEx.

You can find it here:
https://codeberg.org/Epocha/rme-volume-controller

This is how the OSD looks:
https://codeberg.org/Epocha/rme-volume-controller/media/branch/main/osd_preview.png

Quick features:

  • Direct SysEx: Volume control for Line/Phones/IEM.

  • Win32 Hotkeys: Works with standard keyboard volume keys.

  • Sync: Reads current volume from DAC on startup.

  • Toggles: Double-click Mute to switch Line Out - Phones.

  • GUI: Simple settings for dB steps, colors, and hotkeys.

You'll just need Python and the libs from requirements.txt. Hope it helps someone.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:

Hi,I made a small Python app to control the ADI-2 hardware volume directly from Windows volume keys/wheels via SysEx.

Great effort and potentially a very useful tool.

However, while using it with my ADI-2 Pro (of course, I have selected the correct device model in the app's settings), I encountered a couple of broken functions.

1) The "Sync from DAC" command does not sync the active output and the current volume level. The "reconnect" command, however, does re-read the current volume.

2) The Line/Phone output switch does not work (regardless of how I configure the "Toggle Ph./Line", "Mute Line vs. Phones", "Dual Phones", and "Balanced Ph. Mode" settings).

Also, it's worth noting that the ADI-2 Pro has two independent headphone outputs and also has quite a few toggle settings combinations. I think that the toggle function in your app should work identical to the corresponding "Toggle" control of the RME's ADI-2 Remote app, and specific toggle behavior should be set by the user using the device settings. This way, I think, we can avoid overloading your app with settings in the UI and with their handling in the code.

Might be of help to look at this post: https://forum.rme-audio.de/viewtopic.ph … 72#p212972

I hope my feedback is useful. Thank you!

Fireface UCX II + ARC USB > ADI-2 Pro FS R BE > Neumann KH 750 DSP + MA 1 > KH 120 A

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for the feedback and for the link, it was very helpful. I’m developing this on an ADI-2 DAC FS, so I didn't account for the Pro model's dual phone outputs and different toggle logic.

I’ve just released Version 1.1.0 which addresses the points you mentioned. Using SysEx Index 63 for the toggle command.

Summary of changes in v1.1.0:

  • Universal Toggle (Index 63): Replaced my previous logic with the native toggle command. It should now follow your device settings.

  • Fixed Sync: Improved the polling to fetch the correct active output and volume levels on startup.

  • Pro Profiles: Added separate configuration profiles for Phones 1/2 and 3/4.

  • Real-Time Detection: The app now polls the status stream (0x07), so it detects output changes made via the physical remote.

  • Instance Lock: Added a Windows Mutex to prevent MIDI port conflicts from multiple instances.

  • Extended Debugging: I’ve expanded the debug mode to track raw SysEx data.

Since I don't have a Pro model to test on, if you still encounter any issues, please run it in Debug Mode and send me the log. It would be a great help for debugging the Pro-specific behavior.

19 (edited by unpluggged 2026-04-02 19:57:21)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:

Thanks for the feedback and for the link, it was very helpful. I’m developing this on an ADI-2 DAC FS, so I didn't account for the Pro model's dual phone outputs and different toggle logic.

I’ve just released Version 1.1.0 which addresses the points you mentioned. Using SysEx Index 63 for the toggle command.

<...>

Since I don't have a Pro model to test on, if you still encounter any issues, please run it in Debug Mode and send me the log. It would be a great help for debugging the Pro-specific behavior.

Thank you! I tried this out quickly. The feedback when I adjust the volume using other means works (albeit with a slight delay when I do it via the RME's Remote app). But there still are some rough edges.

1) The output toggle command works as intended, by switching the active output in accordance with the unit's settings. But your app assumes that the output switches in a fixed sequence "Line Out → Ph 1/2 → Ph 3/4", which is not how most of us have this set up. I have it toggle between Line and Ph 3/4, and this is the most common arrangement. I suggest to relabel the menu entry to "Toggle output" and each time when it's activated to poll the device to determine the currently active output. Otherwise it's a mess: every time I toggle the active output, the app assumes that a different output is active, and controls one that is actually inactive. Also, when I toggle the output manually, the app does not detect this.

1a) When either of the "Sync from DAC" or "Reconnect" functions are invoked, the app does not get the currently active output, at least not until I change the volume on the unit itself.

2) The app sometimes does not capture the media keys events, and Windows (I use Windows 10 Pro 22H2) shows the system volume control OSD, though I have not yet figured out the pattern here.

Anyway, I appreciate the amount work you've put into this piece of software and hope it won't be too time consuming for you to polish it up wink

Fireface UCX II + ARC USB > ADI-2 Pro FS R BE > Neumann KH 750 DSP + MA 1 > KH 120 A

20 (edited by Epocha 2026-04-03 02:59:09)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for the testing and feedback.

1) Toggle logic & manual output switching
You are right. The hardcoded sequence was a bad approach. I have renamed the menu item to simply "Toggle Output". It now sends a universal Remap Trigger (Index 63) to the DAC, letting the unit switch outputs based on your personal hardware settings.
Furthermore, the app now passively listens to the DAC's continuous Mute states (0x01). This means if you switch the output manually on the device or via the physical remote, the app detects the new active output instantly and reroutes the OSD/controls without needing you to touch the volume knob.

1a) Sync and Reconnect functions
Fixed. Both functions now perform a proper blocking read during startup or manual sync. The app actively fetches not just the volume arrays, but also reads the current Mute states and continuous stream to precisely determine the active output before updating the UI.

2) Media keys periodically unhooking (Windows OSD appearing)
Great catch. This was actually a symptom of how the older version of the app polled the DAC. The aggressive background USB polling was occasionally choking the Python thread. Windows has a strict timeout for keyboard hooks. If the app takes too long to respond because it's busy reading a heavy USB buffer, Windows bypasses the app and triggers the default system volume OSD.
I completely removed the active background polling and switched to a zero-CPU passive listening thread. This eliminates the thread starvation, so media keys should be highly reliable now.

Summary of the other major changes in this update:

  • Zero-CPU Architecture: Replaced the heavy polling loop with a passive listening thread. The app now consumes 0% CPU while idle and only reacts when the DAC actively sends data.

  • Audio Stutter (DPC Latency) Fix: Stopped flooding the USB bus with continuous REQ_ALL requests, completely preventing audio pops/stutters during playback.

  • Reload Hotkeys: Added a tray menu button to instantly force reclaim media keys from apps that sometimes aggressively steal them (like Tidal or Chrome) without restarting the app.

  • Safe UI Threading: Decoupled the Tray Icon image generation from the critical MIDI reading thread so rapid volume changes no longer cause lag.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Hi, another updates. This one focuses on connection reliability and a new feature for those with a Flirc USB.

USB Device Detection (event-driven)
The app no longer relies solely on MIDI port polling to detect when the DAC is plugged/unplugged. It now uses Win32 RegisterDeviceNotification to receive instant USB events. You can optionally set your DAC's VID/PID in Settings (USB Device Detection section) so the app only reacts to your specific device not every random USB stick. If the Win32 registration fails for any reason, it falls back to the old polling method automatically.

MIDI Port Monitoring (standby detection)
Separate from USB detection, a lightweight background thread now watches whether the MIDI port is still present in the system. This catches the case where you power off the DAC via its front button or remote the USB device stays on the bus but the MIDI port disappears. When it reappears (DAC wakes up), the app reconnects and re-syncs automatically.

Reconnect stability
Previous versions occasionally detected the wrong output after reconnect. Root cause: the DAC sends a burst of Setup Name packets (0x05) right after boot, and the app was trying to sync before the firmware was fully ready. Fixed by adding proper init delays after connect and increasing the SysEx response timeout. Also fixed a race condition where both the USB watcher and MIDI monitor could trigger a reconnect simultaneously they now share a lock so only one runs.

Flirc IR Power-On
If you have a Flirc USB IR blaster, you can now power on the DAC by holding the Mute key. The app uses a low-level keyboard hook (WH_KEYBOARD_LL) to detect the hold gesture, so it works even when the DAC is offline and the volume keys are released back to Windows. Setup is simple capture the IR timing from your RME remote in Flirc's Device Log, paste it into Settings, done.

One limitation: Flirc's sendir command can only transmit short IR bursts (buffer limit of ~8 NEC frames). This is enough to power ON the DAC (short press), but not enough for power OFF (which requires a continuous long-press signal). So this is power-on only use the remote or front button to turn it off.

The app also saves and restores the Windows mute state during the hold gesture. Since the Mute key passes through to Windows while the DAC is offline, holding it would normally mute your system audio. The app snapshots the mute state on key-down and restores it after the IR signal fires, so your speakers/headphones stay unaffected.

Other fixes
- Shutdown no longer hangs force exit with 3s timeout if pystray blocks
- OSD no longer crashes on shutdown (Tk thread safety) 
- 64-bit Python compatibility: fixed ctypes overflows in CallNextHookEx, CreateWindowExW, DefWindowProcW
- Settings scroll wheel no longer leaks to other windows
- "Sync from DAC" menu item actually works now (was broken by an extra lambda wrapper)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:

Hi, another updates.

Great!

That being said, the applet still does not correctly detect the active output on the ADI-2 Pro. Also, when I toggle the output with the hotkey, it also activates the Auto Dark mode for some reason.

Fireface UCX II + ARC USB > ADI-2 Pro FS R BE > Neumann KH 750 DSP + MA 1 > KH 120 A

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for the report. I've pushed v1.2.2 with a reworked output detection that should fix the ADI-2 Pro issue.

What changed

The previous version was comparing the raw 0x07 status byte as a whole value (0x04 = Line Out, 0x05 = Phones). This happened to work on the ADI-2 DAC rev 1 by coincidence, but it's actually a bitfield:

- Bit 0-1: active output (0 = Line Out, 1 = Phones 1/2)
- Bit 2-3: device revision
- Bit 4-5: active line output 
- Bit 6: Phones 3/4 active

The app now properly masks the individual bits, so it should work across all hardware revisions and all three models (DAC, Pro, Pro SE).

I also fixed the sync timing — the app now waits for the 0x07 status packet before deciding which output is active, instead of guessing from mute states (which are both UNMUTED in Toggle mode).

What I need from you

1. Update to the latest version from the repo
2. Enable Debug logging in Settings
3. Start the app, do a few output toggles
4. Send me the rme_volume.log file

In the log, the key lines to look at are:

status 0x07: raw=0x?? [active=? rev=? line=? ph34=?] full_packet=...
0x07 resolve: model=ADI-2 Pro active_bits=? ph34=? -> ???

This tells me exactly what status byte your Pro sends and how the app interprets it. If the output is detected wrong, I can see from these lines which bit combination your ADI uses.

Also look for lines like:

Pro output param: Toggle Phones/Line (idx=10) val=?
Pro output param: Mute Line vs PH12 (idx=11) val=?
Pro output param: Mute Line vs PH34 (idx=12) val=?
sync mute: Line Out = MUTED/UNMUTED
sync mute: Phones 1/2 = MUTED/UNMUTED
sync mute: Phones 3/4 = MUTED/UNMUTED

These show your Pro's toggle mode and mute crossover configuration, which helps me understand the full picture.

About the AutoDark issue

"Wake display on output toggle" briefly disables AutoDark to wake the DAC screen when you switch outputs. If you don't want this behavior, go to Settings and uncheck Wake display on output toggle.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:

Thanks for the report. I've pushed v1.2.2 with a reworked output detection that should fix the ADI-2 Pro issue.

What changed

The previous version was comparing the raw 0x07 status byte as a whole value (0x04 = Line Out, 0x05 = Phones). This happened to work on the ADI-2 DAC rev 1 by coincidence, but it's actually a bitfield:

- Bit 0-1: active output (0 = Line Out, 1 = Phones 1/2)
- Bit 2-3: device revision
- Bit 4-5: active line output 
- Bit 6: Phones 3/4 active

The app now properly masks the individual bits, so it should work across all hardware revisions and all three models (DAC, Pro, Pro SE).

I also fixed the sync timing — the app now waits for the 0x07 status packet before deciding which output is active, instead of guessing from mute states (which are both UNMUTED in Toggle mode).

What I need from you

1. Update to the latest version from the repo
2. Enable Debug logging in Settings
3. Start the app, do a few output toggles
4. Send me the rme_volume.log file

In the log, the key lines to look at are:

status 0x07: raw=0x?? [active=? rev=? line=? ph34=?] full_packet=...
0x07 resolve: model=ADI-2 Pro active_bits=? ph34=? -> ???

This tells me exactly what status byte your Pro sends and how the app interprets it. If the output is detected wrong, I can see from these lines which bit combination your ADI uses.

Also look for lines like:

Pro output param: Toggle Phones/Line (idx=10) val=?
Pro output param: Mute Line vs PH12 (idx=11) val=?
Pro output param: Mute Line vs PH34 (idx=12) val=?
sync mute: Line Out = MUTED/UNMUTED
sync mute: Phones 1/2 = MUTED/UNMUTED
sync mute: Phones 3/4 = MUTED/UNMUTED

These show your Pro's toggle mode and mute crossover configuration, which helps me understand the full picture.

It looks like the mask format for the status byte 0x07 is a bit off. As far as I see, on output toggle the unit alternates between 0x15 and 0x05 status, but the app in both cases interprets this as Ph. 1/2 being activated, which is false. Also the app does not correctly detect the active output on startup nor on "Sync from DAC" command (which it did before), instead showing the same Ph. 1/2 output as active. I think it has something to do with bit 0 being set in both cases, so it might be not the correct value/format for the ADI-2 Pro...

Here is the log: https://pastebin.com/65sJtsWq

About the AutoDark issue

"Wake display on output toggle" briefly disables AutoDark to wake the DAC screen when you switch outputs. If you don't want this behavior, go to Settings and uncheck Wake display on output toggle.

No, I do not use Auto Dark at all, but when I toggle the output via the app, it gets activated. I have to reset it via the remote or the RME's ADI-2 Remote app.

Fireface UCX II + ARC USB > ADI-2 Pro FS R BE > Neumann KH 750 DSP + MA 1 > KH 120 A

25 (edited by stfn 2026-04-10 00:24:22)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for your effort. I look forward to trying it out

My only volume knob is on my Stream Deck, would I be able to map this to it?

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

unpluggged wrote:

It looks like the mask format for the status byte 0x07 is a bit off. As far as I see, on output toggle the unit alternates between 0x15 and 0x05 status, but the app in both cases interprets this as Ph. 1/2 being activated, which is false. Also the app does not correctly detect the active output on startup nor on "Sync from DAC" command (which it did before), instead showing the same Ph. 1/2 output as active. I think it has something to do with bit 0 being set in both cases, so it might be not the correct value/format for the ADI-2 Pro...

Thanks for the log.It was exactly what I needed.

Root cause found

Your Pro sends 0x15 (Line Out) and 0x05 (Phones) on toggle. The difference is in bit 4 (line_active), which I now use for Pro/SE models instead of bit 0-1.

But there was a second problem: when line=0, I was defaulting to "Phones 1/2". Your toggle config is idx=10 val=2 (Toggle Ph 3/4), so it should be "Phones 3/4". The 0x07 bit 6 (ph34) that should indicate this is always 0 on your unit in toggle mode so the bitfield alone isn't enough.

Fix
The app now reads your toggle configuration (idx=10) during sync and uses it to determine which phones output is the toggle partner:
- line=1 → Line Out
- line=0 + toggle=1 → Phones 1/2
- line=0 + toggle=2 → Phones 3/4

AutoDark
Also fixed. The app was always turning AutoDark ON after the wake pulse. Now it reads your AutoDark state during sync (idx=35 val=0 = OFF in your log) and skips the wake display entirely your display is always on, nothing to wake.

Please test

1. Update from the repo
2. Keep Debug logging ON
3. Try these scenarios:
   - Start the app → check if correct output is shown
   - Toggle via hotkey a few times → check if it alternates correctly
   - Toggle via physical remote/device → check if the app detects it
   - Check that AutoDark is no longer activated on toggle
4. Send me the log if anything is off

The key log line to verify is:

0x07 resolve: model=ADI-2 Pro active_bits=? line=? ph34=? toggle_cfg=2 -> Phones 3/4

If you have time, I'd also appreciate one extra test: physically switch to each of your three outputs (Line Out, Phones 1/2, Phones 3/4) one by one and note the status 0x07: raw=0x?? value for each. This would give me the complete mapping and help verify the detection for all possible states.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

stfn wrote:

Thanks for your effort. I look forward to trying it out

My only volume knob is on my Stream Deck, would I be able to map this to it?

It should work out of the box if your Stream Deck sends standard volume key events (VK_VOLUME_UP/DOWN/MUTE).That's the default behavior for volume controls. The app intercepts those via Win32 RegisterHotKey.
If your Stream Deck sends different key codes, you can remap them in Settings - Hotkeys (just set the Windows VK codes to match whatever keys your Stream Deck sends).
The only case where it wouldn't work is if your Stream Deck plugin controls volume through the Windows audio API directly rather than emulating keypresses. In that case, you'd need to reconfigure the Stream Deck to send keyboard events instead.

28 (edited by unpluggged 2026-04-10 20:17:38)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:

Root cause found

Your Pro sends 0x15 (Line Out) and 0x05 (Phones) on toggle. The difference is in bit 4 (line_active), which I now use for Pro/SE models instead of bit 0-1.

But there was a second problem: when line=0, I was defaulting to "Phones 1/2". Your toggle config is idx=10 val=2 (Toggle Ph 3/4), so it should be "Phones 3/4". The 0x07 bit 6 (ph34) that should indicate this is always 0 on your unit in toggle mode so the bitfield alone isn't enough.

Fix
The app now reads your toggle configuration (idx=10) during sync and uses it to determine which phones output is the toggle partner:
- line=1 → Line Out
- line=0 + toggle=1 → Phones 1/2
- line=0 + toggle=2 → Phones 3/4

Looks it's more complicated than that; see below.

AutoDark
Also fixed. The app was always turning AutoDark ON after the wake pulse. Now it reads your AutoDark state during sync (idx=35 val=0 = OFF in your log) and skips the wake display entirely your display is always on, nothing to wake.

Confirmed.

Please test

1. Update from the repo
2. Keep Debug logging ON
3. Try these scenarios:
   - Start the app → check if correct output is shown
   - Toggle via hotkey a few times → check if it alternates correctly
   - Toggle via physical remote/device → check if the app detects it
   - Check that AutoDark is no longer activated on toggle
4. Send me the log if anything is off

The key log line to verify is:

0x07 resolve: model=ADI-2 Pro active_bits=? line=? ph34=? toggle_cfg=2 -> Phones 3/4

If you have time, I'd also appreciate one extra test: physically switch to each of your three outputs (Line Out, Phones 1/2, Phones 3/4) one by one and note the status 0x07: raw=0x?? value for each. This would give me the complete mapping and help verify the detection for all possible states.

Now it detects correctly when Line Out 1/2 is activated, but does not detect the Ph. 3/4 as the active output if I have Toggle Ph/Line option set to "3/4" or "1/2+3/4" — it shows that the active output is Ph 1/2 then.

Now if I set the Toggle Ph/Line option to "All Plugged", then the app detects Ph 3/4 as the active output. If I then plug another headphone to Ph 1/2, and the "Dual Phone Mode" is enabled, the unit then cycles between all three outputs and the app detects this correctly. What is weird enough, is that when I plug headphones in both outputs and have the Toggle Ph/Line option set to "1/2+3/4", it then shows strictly the output 3/4 as active (when actually both phone outputs are active at the same time, each with its own volume setting).

Here is the log, hope you'd be able to figure it out smile

Fireface UCX II + ARC USB > ADI-2 Pro FS R BE > Neumann KH 750 DSP + MA 1 > KH 120 A

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Epocha wrote:
stfn wrote:

Thanks for your effort. I look forward to trying it out

My only volume knob is on my Stream Deck, would I be able to map this to it?

It should work out of the box if your Stream Deck sends standard volume key events (VK_VOLUME_UP/DOWN/MUTE).That's the default behavior for volume controls. The app intercepts those via Win32 RegisterHotKey.
If your Stream Deck sends different key codes, you can remap them in Settings - Hotkeys (just set the Windows VK codes to match whatever keys your Stream Deck sends).
The only case where it wouldn't work is if your Stream Deck plugin controls volume through the Windows audio API directly rather than emulating keypresses. In that case, you'd need to reconfigure the Stream Deck to send keyboard events instead.

Thanks. Found a plugin that hooks into the volume keys like you mentioned (not all of them did properly apparently) but now it works and its great. It's no longer an absolute pain to volume change in Roon too. Really appreciate ur effort.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

unpluggged wrote:

Now it detects correctly when Line Out 1/2 is activated, but does not detect the Ph. 3/4 as the active output if I have Toggle Ph/Line option set to "3/4" or "1/2+3/4" — it shows that the active output is Ph 1/2 then.

Now if I set the Toggle Ph/Line option to "All Plugged", then the app detects Ph 3/4 as the active output. If I then plug another headphone to Ph 1/2, and the "Dual Phone Mode" is enabled, the unit then cycles between all three outputs and the app detects this correctly. What is weird enough, is that when I plug headphones in both outputs and have the Toggle Ph/Line option set to "1/2+3/4", it then shows strictly the output 3/4 as active (when actually both phone outputs are active at the same time, each with its own volume setting).

Here is the log, hope you'd be able to figure it out smile

Sorry about the previous version mix-up, I accidentally pushed an older codebase. v1.2.4 now has the actual fix with the toggle config cache.

Changes based on your logs

- The app now reads your Toggle Phones/Line setting (idx=10) during sync and caches it. After a toggle pulse, when the Pro sends the ambiguous 0x05 status, the app uses your toggle config to determine the correct output instead of guessing.
- Added dual phones mode: when toggle is set to "1/2+3/4", volume wheel adjusts both Phones 1/2 and 3/4 simultaneously (same dB step applied to both, each keeps its own level). Mute also toggles both. OSD shows "PH 1/2+3/4".

What I need from you to nail this down:

Please test each toggle mode one by one and for each one write me which output the app detected vs which output was actually active on the device. The log lines I need to see look like this:

0x07 resolve: model=ADI-2 Pro active_bits=1 line=0 ph34=0 toggle_cfg=2 -> Phones 3/4

If the app says Phones 3/4 but the actual active output on your device is something else, write that. For example: App says Phones 3/4 but actual output is Phones 1/2.

I apologize for the back and forth on this, debugging the Pro output detection remotely is quite challenging since the Pro has significantly more toggle combinations and output routing options compared to the ADI-2 DAC I develop on. Your logs and feedback are invaluable.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

stfn wrote:

Thanks. Found a plugin that hooks into the volume keys like you mentioned (not all of them did properly apparently) but now it works and its great. It's no longer an absolute pain to volume change in Roon too. Really appreciate ur effort.

Glad to hear it's working. Enjoy the setup, and if you run into any issues, feel free to post here.

32 (edited by PouyouxRME 2026-04-11 21:58:21)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Hello,

I've a DAC 2 FS, a Stream Deck and Windows 25h2.

@Epocha : your script (v1.2.4) is working fine with Stream Deck default System Volume plugin (El Gato drivers 7.4.0) which is great !

I you don't know what to code you can make your script a native Stream Deck plugin smile

Thanks for your work.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

PouyouxRME wrote:

Hello,

I've a DAC 2 FS, a Stream Deck and Windows 25h2.

@Epocha : your script (v1.2.4) is working fine with Stream Deck default System Volume plugin (El Gato drivers 7.4.0) which is great !

I you don't know what to code you can make your script a native Stream Deck plugin smile

Thanks for your work.

Thanks for confirming it works with the default Stream Deck plugin. A native Stream Deck plugin is an interesting idea, but it would be a completely separate project since the Stream Deck SDK uses a different architecture (Node.js/HTML). I don't own a Stream Deck myself so I wouldn't be able to develop or test it, but once the project is fully polished, anyone is welcome to use it as a foundation for building one.

34 (edited by PouyouxRME 2026-04-12 10:11:27)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Not everybody own a Stream Deck so the Python version has to stay alive smile

There are options to dev plugins without owning a physical Stream Deck :


Do you plan to add an autoupdate feature ? or at least a check if a new version is available option ?

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

PouyouxRME wrote:

Not everybody own a Stream Deck so the Python version has to stay alive smile

There are options to dev plugins without owning a physical Stream Deck :


Do you plan to add an autoupdate feature ? or at least a check if a new version is available option ?

Thanks for the resources, good to know there are options for development without the hardware. Auto-update is a good idea, I'll add it in the next version. For now I want to focus on getting this project fully stable first, especially the ADI-2 Pro support which is still being worked on. Once everything is solid I can look into the Stream Deck plugin.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

v1.3.0 Released - Playing OSD, Auto-Update
What's New

Playing OSD
The app now shows a custom "Now Playing" overlay when tracks change, triggered by play/pause, or optionally on volume changes. It uses the same dark design as the Volume OSD. Consistent look across both overlays.

- Track name, artist, album art, and a progress bar with timestamps
- Album art fetched via Windows Media API, preserving aspect ratio (square for music, wide for YouTube thumbnails)
- Bouncing marquee scroll for long titles that don't fit
- Play/pause indicator icons
- All independently configurable: position, size, opacity, duration, colors
- Drag-to-place positioning

The progress bar interpolates between API updates, so it runs smoothly even when the source app only updates position data every ~30 seconds.

App Filter
The app auto-detects which programs are playing media (Spotify, foobar2000, browsers, etc.) and lets you choose which ones should trigger the Playing OSD. Detected apps show up as checkboxes in Settings with live refresh. Just play something and it appears. You can also add app IDs manually.

Auto-Update Checker
The app checks for new releases on Codeberg on startup and periodically. When an update is available, dialog pops up with the changelog and options: Update now, Skip this version or Later. The update script auto-detects your git branch, does git fetch + git reset --hard, and reinstalls dependencies if requirements.txt changed.

Settings UI Overhaul
Everything is now organized into tabs: General, Volume OSD, Now Playing, Hardware, Updates. Much easier to navigate with all the new options.

!Important: New Dependency!

This release adds winsdk as a dependency (required for Now Playing/media control). If you're updating an existing install:

venv\Scripts\activate
pip install -r requirements.txt

Or for a fresh install:

git clone https://codeberg.org/Epocha/rme-volume-controller.git
cd rme-volume-controller
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt

Playing Modes (Settings → Now Playing)

- default - no changes, Windows handles everything
- hide - intercepts media keys to suppress Windows overlay, no custom OSD
- custom - full Playing OSD with all the features above

37 (edited by stfn 2026-04-20 12:09:50)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Question, is it possible that the commands wont work if I try it while playing a game? I dont seem to be able to get the volume down with it when I am inside a game. If I alt tab back to my desktop then it does work. I do use the Steam Deck plugin so I am not sure if that is the difference here

Thanks for the update, gonna try it later today

38 (edited by Epocha 2026-04-20 22:53:11)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

stfn wrote:

Question, is it possible that the commands wont work if I try it while playing a game? I dont seem to be able to get the volume down with it when I am inside a game. If I alt tab back to my desktop then it does work. I do use the Steam Deck plugin so I am not sure if that is the difference here

Thanks for the update, gonna try it later today

Since it works when you alt-tab back, the app and DAC connection are fine. The issue is that the fullscreen game is capturing the key events before they reach our hotkey handler.

I've just pushed v1.3.1 which includes diagnostic logging for exactly this scenario.

Once updated, could you test with Debug mode ON (Settings -> General -> Debug mode):

1. Start the app
2. Change volume on desktop. Confirm it works, check log for lines like:

2026-04-20 23:51:14,506 [DEBUG] LL hook: VK=0xAF (VolUp) flags=0x11
2026-04-20 23:51:14,508 [DEBUG] WM_HOTKEY received: id=1

3. Go into the game (fullscreen)
4. Try changing volume in-game
5. Alt-tab out, check the log file (right-click tray icon -> Open log)

What we're looking for:
- If both LL hook: and WM_HOTKEY lines are missing while in-game the game is blocking all key events at a low level (DirectInput exclusive mode)
- If LL hook: appears but WM_HOTKEY is missing the low-level hook sees the key but RegisterHotKey doesn't receive it in fullscreen
- If neither appears the game is consuming the keys entirely before Windows can process them

Quick workaround: switch the game to borderless windowed mode instead of exclusive fullscreen. Hotkeys should work there since Windows keeps processing them normally.

v1.3.1 also adds a few new features: volume slider popup (left-click the tray icon), sample rate display in the tray tooltip, and AutoDark on idle. Full changelog on the release page.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Thanks for the update. Strangely enough it works fine now after updating, even ingame. But if it somehow changes in behaviour tomorrow then I will check the logs again. Looking at them now, while ingame, the LL hook and W_HOTKEY lines show up aswell, so I guess all is good there. Weird.

Cool new features!

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

I saw that 1.3.2 was available, but I can't update to it. Even with a fresh install, I remain on 1.3.1 and the notice of a newer version upon starting the script remains. I've updated before so not sure if I did it wrong here but maybe someone else can chime in.

41 (edited by PouyouxRME 2026-04-25 13:39:06)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

@stfn : you are doing fine but @Epocha did forget to bump his/her script version from 1.3.1 to 1.3.2 so the script still "thinks" it's running in 1.3.1 version.

To fix this modify rme-volume-controller-main.py line 17 and restart it :

__version__ = "1.3.2"

It's great to see Stream Deck features in this version :-)

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

@stfn @PouyouxRME sorry about that. As PouyouxRME correctly spotted, I forgot to bump the version number in the script for v1.3.2. Just pushed v1.3.3 which fixes this and a few AutoDark reliability improvements.

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Nah don't apologize, I'm way too happy with all of this to be bothered. Thanks for all the work, this really made this device way more convenient for me. Really happy with it!

Re: Help Controlling ADI-2 DAC FS Volume with keyboard volume wheel.

Hi, I have pushed a significant update. The biggest addition is a built-in web remote. The app now serves a responsive UI directly over HTTP (no extra files or installs needed, just aiohttp). It works in any browser on your LAN - mobile, tablet, desktop - and stays in sync via WebSocket in real time. Layouts adapt automatically, including compact and ultra-compact modes designed for use as a Home Assistant iframe card.

Home Assistant - there is now MQTT state publishing with autodiscovery. Once you point the app at your broker, entities for volume, mute, output, media info, and album art URL appear automatically under Integrations - MQTT. No manual YAML needed. Requires paho-mqtt>=2.0.0. Note that full two-way media_player control via MQTT alone is not possible without additional HACS extensions - the standard HA MQTT integration does not fully support the media_player platform out of the box. For sending commands back to the app from HA, use the built-in HTTP API (REST commands) or the web remote as an iframe card.

Other notable additions:
- Album art fetching - background download from iTunes, MusicBrainz/Cover Art Archive, and Deezer when the SMTC art is missing or poor quality (no API keys required)
- iOS / PWA support for the web remote - installs as a standalone app
- Media key interception fix - the intercept is no longer gated on Now Playing mode, so it works correctly in all modes

Note on Brave browser: if you use Brave and play media (e.g. YouTube), you may find that play/pause via the media key does not work as expected. This is caused by Brave Shields - disabling Shields for the page resolves it. I tested this on Brave Origin (Nightly) but I expect the same applies to all Brave versions.Chrome, Firefox, Edge work without any changes.