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

  • about 1 month ago: dmach added keyword "audio" to this project.
  • about 1 month ago: dmach added keyword "networking" to this project.
  • about 1 month ago: dmach started this project.
  • about 1 month ago: dmach originated this project.

  • Comments

    Be the first to comment!

    Similar Projects

    Update my own python audio and video time-lapse and motion capture apps and publish by dmair

    Project Description

    Many years ago, in my own time, I wrote a Qt python application to periodically capture frames from a V4L2 video device (e.g. a webcam) and used it to create daily weather timelapse videos from windows at my home. I have maintained it at home in my own time and this year have added motion detection making it a functional video security tool but with no guarantees. I also wrote a linux audio monitoring app in python using Qt in my own time that captures live signal strength along with 24 hour history of audio signal level/range and audio spectrum. I recently added background noise filtering to the app. In due course I aim to include voice detection, currently I'm assuming via Google's public audio interface. Neither of these is a professional home security app but between them they permit a user to freely monitor video and audio data from a home in a manageable way. Both projects are on github but out-of-date with personal work, I would like to organize and update the github versions of these projects.

    Goal for this Hackweek

    It would probably help to migrate all the v4l2py module based video code to linuxpy.video based code and that looks like a re-write of large areas of the video code. It would also be good to remove a lot of python lint that is several years old to improve the projects with the main goal being to push the recent changes with better organized code to github. If there is enough time I'd like to take the in-line Qt QSettings persistent state code used per-app and write a python class that encapsulates the Qt QSettings class in a value_of(name)/name=value manner for shared use in projects so that persistent state can be accessed read or write anywhere within the apps using a simple interface.

    Resources

    I'm not specifically looking for help but welcome other input.