bpm_key_display.py zeigt BPM und Tonart bildschirmfüllend an (für 800x600,
skaliert aber mit jeder Auflösung) und gibt parallel die MIDI-Clock aus.
Der Analyse-Kern wird aus realtime_bpm_key_midiclock.py importiert –
beide Dateien müssen also im selben Ordner liegen.
Der einfachste Weg; wer einen dedizierten Bühnen-Pi möglichst schlank aufsetzen will, springt zur „Minimal-Installation“ weiter unten.
sudo apt update
sudo apt install -y python3-venv python3-tk libportaudio2 libsndfile1 \
libasound2-dev build-essential
python3 -m venv ~/audiowizard-env
source ~/audiowizard-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Hinweise:
soundcard (Windows-Loopback) wird auf dem Pi nicht gebraucht.
Wer die Systemausgabe analysieren will: Unter PipeWire/PulseAudio
erscheint die Wiedergabe als Eingang „Monitor of …“ direkt in der
Geräteliste des Auswahlbildschirms. (Unter Windows zeigt derselbe
Auswahlbildschirm dafür zusätzliche „Loopback: …“-Einträge, sofern
soundcard installiert ist.)source ~/audiowizard-env/bin/activate
python bpm_key_display.py
display_config.json gespeichert; danach bootet das
Programm direkt in die Anzeige.F11 Vollbild umschalten, Esc beenden--windowed / --fullscreen / --setup (Auswahl erzwingen)start gesendet – mit Beat-Sync exakt auf dem nächsten
Beat –, bei Stille/Songwechsel stoppt die Clock (stop) und startet
beim nächsten Stück neu.? dahinter dieselbe Unsicherheit.audiowizard.log neben den
Skripten – im Kiosk-Betrieb ohne Konsole die erste Anlaufstelle.eval_detection.py misst die Erkennungsqualität über Testdateien im
Projektordner (Namensmuster <BPM>BPM_<Tonart>.mp3, z. B.
106BPM_C_Dur.mp3): python eval_detection.py zeigt, nach wie vielen
Sekunden BPM und Tonart dauerhaft korrekt stehen. Damit lässt sich
jede Änderung an den Stellschrauben nachmessen.Auf Raspberry Pi OS mit Desktop genügt eine Autostart-Datei:
mkdir -p ~/.config/autostart
nano ~/.config/autostart/bpm-display.desktop
Inhalt (Pfade ggf. anpassen):
[Desktop Entry]
Type=Application
Name=BPM Display
Exec=/home/pi/audiowizard-env/bin/python /home/pi/audiowizard/bpm_key_display.py
X-GNOME-Autostart-enabled=true
Optional in raspi-config: Auto-Login auf den Desktop aktivieren und den
Bildschirmschoner/Blanking abschalten.
Für einen dedizierten Bühnen-Pi reicht Raspberry Pi OS Lite (64-bit):
Statt des kompletten Desktops startet ein minimaler X-Server direkt in die
Anzeige. Das spart rund zwei Drittel Platz auf der Karte, bootet schneller,
und außer Kernel, X und Python läuft praktisch nichts. Sound- und
MIDI-Treiber stecken bereits im Kernel (ALSA, snd-usb-audio) –
USB-Audio- und USB-MIDI-Interfaces funktionieren ohne weiteres Zutun.
sudo apt update
sudo apt install -y python3-venv python3-tk libportaudio2 libsndfile1 \
xserver-xorg-core xinit xserver-xorg-input-libinput \
matchbox-window-manager x11-xserver-utils \
fonts-dejavu-core
python3 -m venv ~/audiowizard-env
source ~/audiowizard-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Hinweise:
xserver-xorg-input-libinput wird für den Touchscreen gebraucht;
matchbox-window-manager (winziger Fenstermanager, ~100 KB), damit das
Tk-Vollbild zuverlässig funktioniert – ganz ohne Fenstermanager
ignoriert X das Vollbild-Attribut.python-rtmidi kein fertiges Wheel findet und kompilieren
will: vorher sudo apt install -y build-essential libasound2-dev,
hinterher mit sudo apt autoremove build-essential libasound2-dev
wieder entfernbar.Konsolen-Autologin aktivieren:
sudo raspi-config # System Options -> Boot / Auto Login -> Console Autologin
~/.xinitrc anlegen (Pfade ggf. anpassen):
#!/bin/sh
xset s off -dpms # Bildschirmschoner und Blanking aus
matchbox-window-manager -use_cursor no &
exec $HOME/audiowizard-env/bin/python \
$HOME/audiowizard/bpm_key_display.py --fullscreen
Und am Ende von ~/.bash_profile (startet X nur auf der ersten Konsole,
nicht in SSH-Sitzungen):
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
exec startx
fi
So verhält sich der Pi wie ein Gerät: einschalten, Anzeige kommt.
Esc beendet die Anzeige – durch den Autologin startet sie sofort neu
(gewollt im Kiosk-Betrieb). Zum Arbeiten am Gerät per SSH anmelden oder
mit Strg+Alt+F2 auf eine zweite Konsole wechseln.
Auf der Bühne wird der Pi meist einfach vom Strom getrennt – auf Dauer riskiert das ein korruptes Dateisystem auf der SD-Karte. Abhilfe schafft das Overlay-Dateisystem (funktioniert mit Desktop- und Lite-Variante): Root wird read-only eingehängt, alle Schreibzugriffe landen nur noch im RAM, und hartes Ausschalten ist jederzeit folgenlos.
sudo raspi-config # Performance Options -> Overlay File System -> Enable
Wichtig:
display_config.json
geschrieben ist – mit aktivem Overlay gehen Änderungen daran beim
Ausschalten verloren.audiowizard.log, optional akkorde.txt) landen dann ebenfalls
nur noch flüchtig im RAM. Für die Fehlersuche das Overlay vorübergehend
deaktivieren.raspi-config deaktivieren, neu starten, ändern, wieder aktivieren.Die Analyse (HPSS + Chroma-CQT, jede Sekunde auf 8 s Audio) ist der teure
Teil. Falls die Anzeige zu träge aktualisiert, in
realtime_bpm_key_midiclock.py anpassen:
ANALYSIS_INTERVAL = 2.0 (statt 1.0) – halbiert die Last, kaum spürbarBASS_TONIC_WEIGHT = 0 – schaltet das zusätzliche Bass-Chroma ab
(spart ein zweites CQT pro Analyse; die Tonart-Erkennung verliert dann
die Bass-Evidenz, die Dur von der Mollparallele unterscheidet)chroma_pcp() notfalls librosa.feature.chroma_stft statt
chroma_cqt verwenden (deutlich schneller, etwas ungenauere Tonart)Die MIDI-Clock läuft davon unabhängig in ihrem eigenen Thread und bleibt auch bei langsamer Analyse stabil.