michael ec3b6c3059 correlation: hold last value and ease to zero on silence
The XY correlation cube snapped to center the moment the audio dropped
below the silence threshold, because process() hard-set value to 0.0 in
the silent branch. Now the silent branch eases the displayed value back
toward zero using the configured response time, so the cube holds its
last reading and then settles instead of jumping. The active path is
unchanged, so all existing response-time and peak tests still pass.

- add `display` (f64) that tracks the live correlation while active
- silent branch: display += alpha * (0 - display)
- update configurable_silence_threshold test for the eased decay
- add correlation_holds_then_decays_to_zero_on_silence test
2026-09-04 12:44:28 +02:00
2026-08-11 08:59:23 +02:00
2026-06-02 20:56:19 +02:00
2026-06-02 20:56:19 +02:00
2026-06-02 20:56:19 +02:00
2026-06-02 20:56:19 +02:00

Phoenix v1.0.0

Phoenix ist das native Rust-Backend des Analyzers auf Raspberry Pi.

Der Browser rendert nur noch die GUI. Audio-Capture, Messung, Recorder und die globale Gerätekonfiguration laufen in Phoenix.

Aktueller Stand

Phoenix übernimmt heute:

  • ALSA-Audio-Capture
  • Live-Metering über WebSocket
  • globale Gerätekonfiguration
  • RTA
  • Spectrogram
  • Waveform
  • XY / Goniometer
  • Phase Wheel
  • Recorder in wav, mp3 und webm
  • direktes Speichern auf dem Gerät

Nicht mehr Teil der Architektur:

  • WebAudio-/AudioWorklet-Analyse im Browser
  • Browser-MediaRecorder als Haupt-Recorder
  • Umschalten zwischen line und spdif

Der aktuelle Zielpfad ist Line In auf der Behringer/USB-Audio-Hardware.

Architektur

  • Phoenix besitzt die Audio-Hardware
  • Phoenix berechnet die Messwerte
  • die Web-GUI verbindet sich per HTTP + WebSocket mit Phoenix
  • globale Geräteoptionen werden in Phoenix gespeichert und an Browser synchronisiert
  • browser-lokale Optionen wie Phoenix URL bleiben clientseitig

Standard-Endpunkte

  • GET /health
  • GET /api/v1/status
  • GET /api/v1/global-config
  • POST /api/v1/global-config
  • GET /api/v1/rta-config
  • POST /api/v1/rta-config
  • GET /api/v1/metrics/ws
  • POST /api/v1/recordings/wav/start/:session_id
  • POST /api/v1/recordings/wav/stop/:session_id
  • POST /api/v1/recordings/stop/:session_id/:format
  • POST /api/v1/recordings/save/:target/:filename

Build

Lokaler Build:

cargo build --release

Check:

cargo check

Das Binary liegt danach unter:

target/release/phoenix

Raspberry Pi Betrieb

Für den Pi ist der maßgebliche Ablauf in:

RASPBERRY_PI_SETUP.txt

Dort sind enthalten:

  • benötigte Systempakete
  • systemd-Services
  • Kiosk-Start
  • Webserver auf Port 80
  • Autostart

Relevante Dateien:

Volumio-Betrieb

Für Volumio gibt es einen getrennten Kiosk-Pfad mit eigener Session und eigenen systemd-Units:

Erwarteter Projektpfad auf dem Zielgerät:

/home/volumio/Phoenix

Volumio-spezifisch:

  • session_volumio.sh startet Analyzer-GUI und Volumio im Dual-Tab-Kiosk
  • die Analyzer-GUI läuft im Volumio-Fall auf http://localhost:8088/
  • toggle-ext wird unter Phoenix/toggle-ext erwartet
  • VirtualKeyboard wird bevorzugt unter Phoenix/VirtualKeyboard gesucht, mit Fallback auf die bekannten Systempfade
  • Logs liegen typischerweise unter:
/home/volumio/dual-kiosk.log
/home/volumio/phoenix.log

Die Volumio-spezifischen Units, der eingeschränkte Update-Helfer und die zugehörige sudo-Regel werden einmalig als root installiert:

sudo bash /home/volumio/Phoenix/scripts/install_volumio_services.sh

Der Installer überschreibt keine Debian-/Analyzer-Unitdateien und startet laufende Dienste nicht automatisch neu. Er maskiert getty@tty1.service, da der Kiosk-X-Server tty1 exklusiv verwendet. Ohne die Maskierung können Getty und Xorg beim Booten um dasselbe virtuelle Terminal konkurrieren und eine Kiosk-Neustartschleife auslösen.

Nach dieser einmaligen Grundinstallation bringt der privilegierte Volumio-Online-Updater bei jedem erfolgreichen Phoenix-Update auch die mitgelieferten systemd-Units, den Update-Helfer und die sudo-Regel aus. Fehlen diese Integrationsdateien in einem Update, wird es vor dem Austausch des laufenden Projektbaums abgelehnt.

Um den lokalen Login-Prompt auf tty1 wiederherzustellen, zuerst den Kiosk stoppen und Getty anschließend wieder freigeben:

sudo systemctl stop analyzer-kiosk-volumio.service
sudo systemctl unmask --now getty@tty1.service

Wenn toggle-ext genutzt werden soll, sollte es also unter diesem Pfad liegen:

/home/volumio/Phoenix/toggle-ext

Analyzer vs. Volumio

Die beiden Betriebsarten teilen sich Phoenix, aber nicht denselben Kiosk-Rahmen.

Wichtig:

  • Volumio darf den Analyzer-Webserver nicht auf :80 binden, weil dort Volumio selbst bzw. dessen Frontproxy hängt.
  • Die einzige beabsichtigte Global-Config-Abweichung zwischen den Referenzständen ist normalerweise recordTarget.

Referenz-Global-Configs

Für einen sauberen Gerätestand liegen zwei Referenzdateien im Projekt:

Kopieren auf dem Zielgerät:

mkdir -p ~/.config/phoenix
cp /home/<user>/Phoenix/reference-config/phoenix-global-config.<profil>.json ~/.config/phoenix/global-config.json

Beispiele:

cp /home/analyzer/Phoenix/reference-config/phoenix-global-config.analyzer.json /home/analyzer/.config/phoenix/global-config.json
cp /home/volumio/Phoenix/reference-config/phoenix-global-config.volumio.json /home/volumio/.config/phoenix/global-config.json

Danach Phoenix bzw. den Kiosk-Dienst neu starten.

Erster Start auf neuem Gerät

Für einen frischen Pi werden mindestens diese Build-Abhängigkeiten benötigt:

sudo apt-get update
sudo apt-get install -y pkg-config libasound2-dev curl ca-certificates git build-essential

Wenn cargo/rustc fehlen oder zu alt sind, kann kiosk-start.sh beim Start eine aktuelle Rust-Toolchain per rustup installieren. Das ist besonders für ältere Volumio-/Debian-Systeme wichtig, deren apt-Rust oft zu alt für aktuelle Crates ist.

Wichtige Umgebungsvariablen

  • PHOENIX_LISTEN default: 127.0.0.1:8789

  • PHOENIX_ALSA_CARD default: 2

  • PHOENIX_ALSA_DEVICE optional explizites ALSA-Gerät, z. B. hw:CARD=CODEC,DEV=0

  • PHOENIX_SAMPLE_RATE default: 48000

  • PHOENIX_PERIOD_SIZE default: 128

  • PHOENIX_BUFFER_SIZE default: 512

  • PHOENIX_GLOBAL_CONFIG_PATH default: $HOME/.config/phoenix/global-config.json

  • PHOENIX_RECORDINGS_DIR_ANALYZER default: /home/analyzer/Aufnahmen

  • PHOENIX_RECORDINGS_DIR_VOLUMIO default: /home/volumio/Aufnahmen

  • PHOENIX_MAX_RECORDING_UPLOAD_BYTES default: 2147483648

  • PHOENIX_LR_FRAC_DELAY_ENABLED default: true

  • PHOENIX_LR_FRAC_DELAY_SAMPLES default: 0.996

  • PHOENIX_LOG default: phoenix=info,tower_http=info

Hinweise

  • Phoenix ist jetzt der produktive Hauptpfad, nicht mehr nur ein Scaffold.
  • Das Changelog der GUI liegt in index.html.
  • Build-Logs beim Pi-Start landen in der Regel unter:
~/phoenix-build.log
  • Laufzeit-Logs der X-/Kiosk-Session liegen unter:
/home/analyzer/analyzer-kiosk.log
S
Description
No description provided
Readme
2.5 MiB
Languages
JavaScript 63%
Rust 23.1%
HTML 9.8%
Shell 3.2%
CSS 0.9%