Skip to content

Dump of my research when reverse engineering an ActiveX D&R Lyra mixer remote control application, to make a clone that can run on a modern OS.

Notifications You must be signed in to change notification settings

Rotekoppen/Lyra-Remote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Lyra-Remote

Dump of my research when reverse engineering an ActiveX D&R Lyra mixer remote control application, to make a clone that can run on a modern OS.

Screenshot of the remote control app

I dont remember the model name of the mixer, but i remember it looking like this.

This was developed years ago, and the mixer has since passed on. Therefore I cannot develop on this project anymore, and the source code is published mostly as was when I made it. Comments have been translated, and new comments I have made is marked FUTURE:.

Project files

main.py

Starts a remote control application. It can be compiled into a .exe file (See the makefile)

lyramixer.py

This library handles communication with the mixer.

# This is a short example written on publish.
# It has not been tested.
from lyramixer import Mixer, source_names_lookup_table
import time
import logging
import time

mixer_ip = "XXX.XXX.XXX.XXX"
mixer_port = 20000

logging.basicConfig(
    level=logging.DEBUG
)

def none(a="", b="", c=""):
    pass

callbacks = {
    "set_channel_label": none,
    "set_channel_lights": none,
    "set_fader_value_percentage": none,
    "set_crm_value_percentage": none,
    "set_small_button": none,
    "set_channel_volume": none,
    "set_master_volume": none,
    "set_channel_eq_hf": none,
    "set_channel_eq_mf": none,
    "set_channel_eq_lf": none,
    "set_channel_gain": none,
    "set_channel_source": none,
    "set_channel_pan": none,
    "set_channel_aux": none,
    "set_channel_dyn": none
}

m = Mixer(mixer_ip, mixer_port, callbacks)

m.send_init_command() # Makes the mixer send us everything.
time.sleep(1) # Wait for the mixer to send its state
for c in m.channels:
    print(c.label, "-", source_names_lookup_table[c.source]) # Print the label of every channel

m.send_channel_button_press(0, 1) # Press the ON button on the first channel

The buttons are poorly documented. It should suffice to search in mixergui.py inside MixerWindow.__init__() for what ids the buttons use.

mixergui.py

A simple gui that shows and calls functions inside the Mixer class. For some unknown reason my young dumb self placed the callbacks from lyramixer.py inside main.py

I didnt know then how to set an icon, and was having issues not finding a solution that worked for both running normally and packaged exe. It will most likely crash here.

mqtt.py

This was a short experiment to connect the mixer to homeassistant.

Its purpose would be to turn the lights red outside the studio if the microphone was live.

About

Dump of my research when reverse engineering an ActiveX D&R Lyra mixer remote control application, to make a clone that can run on a modern OS.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published