Unify IT & Standards Based Pro Audio Devices

Python & Pro Audio?

Python is a general purpose programming language well-used in network and automation environments. Python is a good choice for unifying networked systems of services and devices in a modern Audio over IP (AoIP) world.

Convergence of IT & AV

As adoption of AES70 accelerates in the Pro Audio sector, AES70py becomes an essential tool for Python software engineers. AES70py enables programmatic potential for IT systems of network services connected to OCA devices.

MIT License

Use the AES70 Standard in Commercial, R&D, Education Sector or general projects, freely.

We are pleased to release the software under a permissive MIT license thanks to the generous support from all our sponsors.

Project History

Adoption of networked audio for Pro Audio Systems accelerated at notable speed over the last decade. With AoIP's success arrived new challenges for network device parameter control, device monitoring, and unifying all the IT hardware and software into robust functional systems. AES70py founding team members recognised gaps exist for network engineers when tasked to unify network systems, which also include OCA Devices. For IT professionals, there are limited options for a general purpose AES70 control software — so we decided to do something about it.

T&M Media Pty Ltd and DeusO GmbH agreed to an initial contribution plan in the form of financial and specialist technical software generation tools. This paved the way to project kick off.

The technical team lead is Bill Welliver, of Welliver Technologies LLC, who brings extensive knowledge of programming language design and software library development. DeusO GmbH brings technologies to generate the AES70 library for Python in conjunction with the AES70 specification. Together, the project's technical partners have years long, and ground up, experience building open source software libraries, as well as commercial AoIP and control protocol software.

Download AES70py

Once released, the software library will be freely available on the PyPi package index system. The source code will be hosted on GitHub. Join us on LinkedIn AES70py Users Group to keep up to date on progress.

The fastest route to market...

Step 1. The project lead, Bill Welliver, is focused initially on required Python library core protocol design and low level data handling. This code is hand-written to provide optimal performance and built to reflect current and emerging python best practices.

Step 2. DeusO GmbH generates the high level library source code from the work delivered by Bill Welliver using the AES70 Standard specifications.

Given the capacity required for the hand-written parts, additional financial sponsorship is being sought. The aim is to deliver open source MIT licensed software as fast as possible.

Sponsorship & Support

Sponsors are invited to contribute financial support.
Sponsorship packages:

  • Gold, Silver or Community Certificate of Recognition
  • Logo on this website + other presentation media
  • PR - mentions in articles, supporter credit in public presentations, social media posts, word-of-mouth
  • Access to the technical team
  • Early Bird access to MIT licensed software library releases

More Information

Gold Sponsor Acknowledgement

Amsterdam, September 16, 2024 - During the IBC Show Matt Hardy, AES70py project representative, presented a Certificate of Recognition for the generous contribution from T&M Media. Read More

Mark Lownds also received a demo of the PoC using Python scripts to mute and unmute amplifier channels.

Mark Lownds and Matt Hardy with an AES70py demo

Supporting the Pro Audio Industry

To some degree this work is dependent on sponsorship to meet deadlines. We've targeted ISE as the venue for public presentations as the most likely chance for industry professionals to meet the developers, and we hope, gather valuable information to stimulate further investigation of AES70py for future products or services.

The AES70 Standard provides a robust roadmap for control in the Pro Audio industry. A Control Standard is a valuable commodity for everyone in this business. AES70 is a robust specification, and field tested in some of the most demanding professional Live and Fixed Install environments. For more information about the AES70 Standard see: The OCA Alliance.

Timeline - Proposed

Public Demo: ISE Barcelona 2025

The AES70py team expect an initial presentation of the AES70 Python Library, tentatively at the OCA Alliance booth during ISE 2025 in Barcelona.

The team plan to outline all the features and possible features Python Network Engineers can expect from release 1.0. There are demos, hands on presentations, and Q&A sessions.

For more information, and to get in touch and connect with like-minded users, visit the LinkedIn: AES70py Users Group

Working Demo @ Infocomm 2024

Las Vegas, June 12 - 14, 2024 - Bill Welliver demonstrated a working example of the AES70 Python library. The demo involved two WT-NA120 reference design network amplifiers, with AES67 & AES70 software stacks. The audience was presented a stream playback via the amps, a Terminal (see terminal animation), and the working result, an Oca Object `Mute`, toggled from Off to On, thereby muting the stream, using a Python3 script.

Of course this is just the start, and the conversations which followed the demo were very constructive and enthusiastic about the potential use cases for AES70py – from the obvious need for remote Control & Monitoring, to testing single or systems of devices, and enabling entire systems of devices and services to synchronously work together.
Matt Hardy & Bill Welliver with an AES70py demo
Credit: Kiera Lemming


cd aes70py cat flipmute.py
  aes70 = require("aes70")
  conn = aes70.TCPConnection.connect({"host": 
          "192.168.88.248", "port": 65000})
  device = aes70.RemoteDevice(conn)
  device.set_keepalive_interval(1)
  tree = device.discover_all()
  def printtree(n):
    for a in n:
      if a.GetRole is not None:
        if a.GetRole() == "Mute":
          print("Current Mute Setting: " + 
                str(a.GetSetting()))
          a.SetSetting(not a.GetSetting())
          print("New Mute Setting: " + str(a.GetSetting()))
      if a.GetMembers is not None:
      printtree(a.GetMembers())
  printtree(tree)
  
clear python3 flipmute.py Connected to device. Current Mute Setting: False New Mute Setting: True cd .. && clear