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>
4.9 KiB
VA-Control for Linux
Nativer Linux-Port der Voice Acoustic VA-Remotecontrol (technisch = AllDSP „AllControl" DSP-Software) zur Fernsteuerung/Konfiguration der DSP-Verstärker (HDSP-Serie, Paveosub-…sp, Venia-…sp, PAV115sp …).
Kein Wine. Kein dekompilierter App-Code. Es läuft das unveränderte, originale
Python-2.7-Bytecode aus dem macOS-.app direkt auf einem Linux-CPython-2.7 mit nativem
wxGTK/numpy/scipy.
Warum dieser Weg
CPython-Bytecode ist plattformunabhängig — er hängt nur an der Python-Version (2.7), nicht
am Betriebssystem. Das macOS-Bundle liefert die App-Module (one_unit, child_unit, …) als
originale .pyc. Die laufen unter Linux direkt weiter; nur die C-Extensions (wxWidgets, numpy,
scipy, PortAudio) kommen nativ aus dem Distro.
Das umgeht beide Sackgassen der bisherigen Versuche:
- Wine rendert die App nur als schwarzes Fenster (wxWidgets/
CreateActCtx-Probleme). - Ein dekompilierter Port scheiterte, weil
one_unit/child_unit(Py2.6-Bytecode) sich nicht sauber dekompilieren lassen — und geratener Code, der echte Limiter/Verstärker steuert, ist ein No-Go. Hier läuft korrektes Original-Bytecode, kein Rateanteil.
Voraussetzungen
- Docker (oder Podman)
- Ein X11-/Wayland-Desktop (für die GUI)
- Zugang zu
archive.debian.orgbeim Build (Debian stretch ist EOL)
Build
docker build -t va-remotecontrol:native-mac .
Das Image basiert auf Debian stretch (letzte Distribution mit python-wxgtk3.0 für Python 2)
und installiert wxGTK 3.0, numpy, scipy, pyserial, pyaudio, PIL aus dem Archiv.
Start
./run.sh # GUI + Ethernet-Amps (Host-Netz)
SERIAL_DEV=/dev/ttyUSB0 ./run.sh # zusätzlich seriell/COM
NET=bridge ./run.sh # ohne Host-Netz (keine LAN-Amps)
run.sh gibt das Host-X11 frei, setzt --ipc=host (gegen X-SHM-Fehler unter XWayland) und reicht
optional den seriellen Port durch.
Verbindung zu den Verstärkern
Die App spricht die DSPs über Ethernet oder seriellen COM-Port an:
- Ethernet (empfohlen):
run.shnutzt--network host, d. h. das Container erreicht dein LAN direkt (auch UDP-Discovery/Broadcast). In der App die Netzwerk-/Ethernet-Verbindung wählen. - USB/seriell: Die USB-Auto-Erkennung nutzt Windows-WMI (auf Linux gestubbt → leer). Gerät als
COM-Port durchreichen (
SERIAL_DEV=/dev/ttyUSB0) und in der App den Port manuell wählen.
Die Linux-Fixes (in va/launch.py, non-invasiv — kein Bytecode-Patch)
Der Start läuft über va/launch.py statt über den macOS-py2app-Bootstrap. Dort sitzen drei kleine
Kompatibilitäts-Fixes, weil die App Linux (os.name='posix') wie einen Mac behandelt
(mac_names='posix'):
platform.version()beginnt unter Linux mit#…→int('#')in einer Windows- Versionsprüfung crasht (und deaktiviert dabei RTA). Wird auf einen Windows-artigen String gemappt.- wx-Assertions →
SUPPRESS: diese wxGTK-Build wirft C++-Assertions als Python-Exceptions; sonst crasht wxPythons eigenesflatmenu. Auf Release-/Mac-wx sind sie unterdrückt. my_MenuBar.left_down: wird nur im Nicht-Mac-Zweig gesetzt → Klassen-Default ergänzt.
Bekannte Punkte
- Fader lassen sich nicht ziehen? Die SVG-Regler haben einen Mac- und einen Windows-
Koordinatenpfad; Linux nimmt fälschlich den Mac-Pfad (Y gespiegelt/versetzt). Experimentell:
mit
VA_SVG_WINPATH=1 ./run.sherzwingt man den Windows-Pfad. SieheSTATUS.md. - RTA-Messung (Mikrofon) braucht Audio-Durchreichung (ALSA/Pulse) in den Container.
img.cache(vor-gerenderte Skin-Bitmaps) ist nicht im Repo — die App rendert aus den vorhandenen SVGs und baut den Cache bei Bedarf neu (siehe.gitignore).
Aufbau
va/ Lauffähiger App-Baum: Original-macOS-.pyc + pure-Python-Libs + Assets
launch.py Start-Wrapper mit den Linux-Fixes
one_unit.pyc … App-Module (Original-Bytecode, Python 2.7)
win32*.py … Linux-Stubs für die wenigen Windows-APIs
skins/ dfi/ … SVG-Bedienpanels, Geräte-Layouts, Factory-Presets, Sprachen
Dockerfile Debian stretch + wxGTK3.0/numpy/scipy/… via archive.debian.org
run.sh Start mit X11 + Netz + optional seriell
entrypoint.sh Container-Entrypoint
reference/ Dekompilierter Quellcode (nur zum Lesen/Debuggen) + ARCHITEKTUR.md
Herkunft
Der va/-Baum stammt aus Voice Acoustic VA-Remotecontrol.app (macOS, Version 4.0.1, py2app,
Python 2.7.10, wxPython 3.0.3). Nur die reinen .pyc (App + pure-Python-Libs) wurden übernommen;
die macOS-.so/.dylib wurden weggelassen und durch native Linux-Builds ersetzt.
reference/decompiled/ enthält den aus dem Windows-Build (Py2.6) dekompilierten Quellcode —
funktional dieselbe App, unverzichtbar zum Debuggen der .pyc (z. B. der Fader-Analyse oben).
