Description

I own a pair of Adam Audio A7V active studio monitor speakers. They have ethernet connectors that allow changing their settings remotely using the A Control software. From Windows :-( I couldn't find any open source alternative for Linux besides AES70.js library.

Goals

  • Create a command-line tool for controlling the speakers.
  • Python is the language of choice.
  • Implement only a simple tool with the desired functionality rather than a full coverage of AES70 standard.

TODO

  • ✅ discover the device
  • ❌ get device manufacturer and model
  • ✅ get serial number
  • ✅ get description
  • ✅ set description
  • ✅ set mute
  • ✅ set sleep
  • ✅ set input (XRL (balanced), RCA (unbalanced))
  • ✅ set room adaptation
    • bass (1, 0, -1, -2)
    • desk (0, -1, -2)
    • presence (1, 0, -1)
    • treble (1, 0, -1)
  • ✅ set voicing (Pure, UNR, Ext)
  • ❌ the Ext voicing enables the following extended functionality:
    • gain
    • equalizer bands
    • on/off
    • type
    • freq
    • q
    • gain
  • ❌ udev rules to sleep/wakeup the speakers together with the sound card

Resources

  • https://www.adam-audio.com/en/a-series/a7v/
  • https://www.adam-audio.com/en/technology/a-control-remote-software/
  • https://github.com/DeutscheSoft/AES70.js
  • https://www.aes.org/publications/standards/search.cfm?docID=101 - paid
  • https://www.aes.org/standards/webinars/AESStandardsWebinarSC0212L20220531.pdf
  • https://ocaalliance.github.io/downloads/AES143%20Network%20track%20NA10%20-%20AES70%20Controller.pdf

Result

  • The code is available on GitHub: https://github.com/dmach/pacontrol
  • The command-line tool works fine and implements basic operations for controlling the speakers nearly as planned
  • There are still couple things I need to implement later such as
    • querying and displaying all the details about the devices
    • setting up Ext voicing mode (it would be great to load room corrections exported from REW)
    • udev rules for sleeping the speakers when a sound card is turned off
    • packaging as RPM

Lessons learned

  • Trying to understand the aes70 standard first wasn't the best idea. It is quite complex and and it hold me from writing any actual functionality for a while.
  • Capturing packets and writing code that would simply reply them to achieve desired functionality would be a way better start.
  • The original A Control software sometimes accepted the changes I made from the command-line and even changed the displayed value, but sometimes it was forcing the settings, making me think that my code doesn't work at all. I wasted several hours before I realized that.
  • Also, some of the commands sometimes did not work when A Control was not running on the same network. Turning the speakers off and on again helped. Maybe I messed something up with sessions. Also caused several hours wasted.

Looking for hackers with the skills:

audio networking

This project is part of:

Hack Week 24

Activity

  • 6 months ago: dmach added keyword "audio" to this project.
  • 6 months ago: dmach added keyword "networking" to this project.
  • 6 months ago: dmach started this project.
  • 6 months ago: dmach originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    This project is one of its kind!