Files
maikandClaude Opus 4.8 a7c93fa266 Erster Commit: nativer Linux-Port aus macOS-Bytecode
Läuft die Voice Acoustic VA-Remotecontrol (AllDSP AllControl) nativ unter Linux
auf echtem wxGTK 3.0 — ohne Wine und ohne dekompilierten App-Code. Ausgeführt wird
das unveränderte Python-2.7-Bytecode aus dem macOS-.app; C-Extensions (wxGTK/numpy/
scipy/PortAudio) kommen nativ aus Debian stretch.

Enthält: va/ (Original-.pyc + pure-Python-Libs + Assets + launch.py mit den drei
Linux-Fixes), Dockerfile/run.sh/entrypoint.sh, reference/ (dekompilierter Quellcode
zum Debuggen) und README/STATUS. img.cache (378 MB, regenerierbar) ist per
.gitignore ausgeschlossen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 19:57:01 +02:00

4.2 KiB

VA-Remotecontrol — Reverse-Engineering-Notizen

Analyse der Voice_Acoustic_VA-Remotecontrol_64_bit_v_4_0_1 (Stand 08/2026).

Was ist das?

Ein Rebrand der AllDSP „AllControl" DSP-Software zur Fernsteuerung/Konfiguration der DSP-Verstärker (HDSP-Serie, Paveosub-…sp, Venia-…sp, PAV115sp usw.).

Merkmal Wert
Sprache Python 2.6 (py2exe-Bundle, 32-bit)
GUI wxPython / wxWidgets 2.8 (wx._core_.pyd, wxmsw28uh_*_vc.dll)
Numerik numpy + scipy (FIR-Design, RTA-Messungen, PDF-Report)
Bootstrap-EXE VA-Remotecontrol.exe (enthält angehängtes ZIP mit 904 .pyc)
MSVC-Runtime VC++2008 / msvcr90 (nicht gebundlet → unter Wine vcrun2008)
Lizenz-Dongle keiner (keyfile.py = statischer Preset-Encryption-Key)

Ordner im Installat

  • src/dekompilierter App-Quellcode (47 Module, s.u.) ← zum Analysieren
  • pycode/ — die 904 rohen .pyc (App + komplette Py2.6-Standardbibliothek)
  • *.pyd,*.dll— native Extension-Module (numpy/scipy/wx/pywin32) + Python-Runtime
  • factory/ — Werks-Presets/Firmware .ffi je Produkt (HDSP-3/-6, Paveosub-112/115/118/218sp, Venia-8sp, PAV115sp-8K4 …)
  • configurations/ — DSP-Struktur-Definitionen .cfg + .csv (DPD2, DPCP88, DPD3 …)
  • dfi/ — Geräte-/Frontplatten-Layouts .dfi/.dfu/.dfe
  • skins/ — SVG-Bedienpanels (das UI wird aus SVGs aufgebaut, s. svg_panel.py)
  • local/ — Sprachdateien (deutsch, english, mandarin, nederlands, polish, portuguese, spanish, …)
  • drivers/ — Windows-USB-Treiber adspusb.inf/.cat

Modul-Landkarte (src/)

Einstieg

  • main.py → ruft one_unit.main_application(argv).start()
  • one_unit.py (3.7k Z.) — Haupt-App/Fenster; child_unit.py, select_unit* — Geräteauswahl/-instanzen
  • countDSPs.py — zählt/erkennt angeschlossene DSPs

Kommunikation zu den Verstärkern (der interessante Teil)

  • d_protocol.py — Wire-Protokoll (nutzt struct, socket, myserial, zipfile)
  • d_usb.py — findet USB-Geräte per WMI, Filter auf VID_0684 (= AllDSP GmbH), mappt auf COM-Port
  • d_ethernet.py — TCP/IP-Transport (socket)
  • d_keepalive.py, d_bootloader.py — Verbindung halten / Firmware-Flash
  • protocol.py, server.py — höhere Protokoll-/Serverschicht
  • network_settings.py, network_graphical.py, network_customized.py — Multi-Device-Netz

Transport = USB-Seriell (virtueller COM-Port) ODER Ethernet. Kein FTDI-D2XX, sondern klassisch über COM (myserial = pyserial-Wrapper).

GUI / DSP-Bedienung

  • svg_panel.py — rendert Bedienoberflächen aus SVG
  • control_panel.py, diagram.py (EQ/Filterkurven), my_menu.py, dialog.py, fir_dialog.py, MyOGLlike.py (OpenGL-Canvas)
  • user_config_*.py — die einzelnen DSP-Blöcke: audio, dc, display, keys, leds, model, network, tcs, timer, various, vu
  • rta_measurements.py (Echtzeit-Analyzer, nutzt PortAudio/pyaudio), record.py, makePDF.py

Daten

  • data_model.py, definitions.py — Datenmodell / Konstanten (STRUCT_ID_GAIN/DELAY/LPF/HPF/PEQ/LIMITER/…)
  • keyfile.pynur preset_encryption_key (Presets sind verschlüsselt; keine Lizenzprüfung)

Für Linux/Docker relevante Stolpersteine

  1. Crypto: Py2.6 random.seed()os.urandom → Windows-CryptoAPI. Im Wine-Prefix muss rsaenh.dll registriert sein (regsvr32 rsaenh.dll), sonst Crash 0x80090017. → ist im Docker-Image gefixt.
  2. USB-Erkennung via WMI (d_usb.ListUSBDevices, Win32_USBControllerDevice): funktioniert unter Wine praktisch nicht. → Gerät stattdessen als COM-Port durchreichen (/dev/ttyUSB0dosdevices/com1) und in der App den COM-Port manuell wählen, oder die Ethernet-Anbindung nutzen (umgeht das USB/WMI-Problem komplett).
  3. RTA-Messung braucht Audio-I/O (PortAudio) — im Container nur mit ALSA/Pulse-Durchreichung.

Wie der Quellcode entstand

  • .pyc aus dem an VA-Remotecontrol.exe angehängten ZIP extrahiert.
  • Dekompiliert mit uncompyle6 (42 Module); die 5 komplexeren mit pycdc/Decompyle++ (Kopf-Kommentar „NOTE: mit pycdc…" → dort ggf. kleinere Ungenauigkeiten prüfen).