AudioWizard

Python Plattform MIDI Lizenz

Hört Musik mit und zeigt live Tempo, Tonart und Akkorde an – und liefert dazu eine stabile MIDI-Clock, die Drumcomputer, Sequenzer, Arpeggiatoren und Delays synchron zum laufenden Song taktet. Zusätzlich gibt es noch zahlreiche andere Features wie z.B. die Erstellung von Songsheets oder Stems aus Audiodateien.

Hauptanzeige

Als Quelle dient wahlweise ein Audio-Eingang (Mikrofon/Line-In) oder unter Windows direkt die Wiedergabe selbst (WASAPI-Loopback) – also z. B. das, was gerade in Spotify läuft. Auf dem Raspberry Pi übernehmen die PipeWire/Pulse-„Monitor“-Quellen dieselbe Rolle und erscheinen als normale Eingänge; unter macOS leistet das ein virtuelles Ausgabegerät wie BlackHole.

Inhalt

Überblick

Bereich Was es tut
Live-Analyse Tempo (BPM), Tonart und Akkorde aus Mikrofon/Line-In oder der laufenden Wiedergabe (Loopback).
MIDI-Clock Driftfreie 24-PPQN-Clock zum Song; optional beat-synchron.
Noten/Akkorde → MIDI Erkannte Tonhöhen live als MIDI senden (mono/poly/Akkord).
Datei → MIDI-Clock Audiodatei mit driftfreier Clock abspielen, mit ▶ Start / ■ Stopp.
Stems Gesang/Bass/Drums/Rest lokal trennen (Demucs) – exportieren oder abspielen.
Song-Sheet Gesangstext + Akkorde im Ultimate-Guitar-Stil (lokal, Whisper + Forced Alignment).
Stems → MIDI Bass/Rest/Gesang via Basic Pitch nach MIDI, je Kanal; optional MIDI-Clock mitsenden; als .mid speichern.
Schlagzeug → MIDI Drums in Kick/Snare/HiHat (+ optional Tom/Crash) zerlegen, Note je Komponente frei wählbar; Standard GM-Drum-Map auf Kanal 10.
MIDI-Datei laden Eine .mid spurweise (an/aus + Kanal) über den MIDI-Ausgang abspielen.
Deluge-Song Aus den Stem-MIDI-Spuren eine Synthstrom-Deluge-Songdatei (.XML) erzeugen: Melodien als interne Synths, Drums als Kit; ganzer Song oder Takt-Loops.
DJ-Modus Zwei Decks, Equal-Power-Crossfade; die Clock folgt dem Ziel-Deck.
Aufnahme Live-Signal mitschneiden und als Datei(en) speichern.

Eine Web-Variante (Browser, Web Audio + Web MIDI) deckt die Kernfunktionen ab – siehe Webversion.

Typische Abläufe

Funktionen im Detail

Schnellstart (Windows)

pip install -r requirements.txt
python bpm_key_display.py

Beim ersten Start erscheint der Einstellungsbildschirm: Audio-Quelle (auch „Loopback: …“-Einträge zum Mithören der Wiedergabe) und MIDI-Ausgang wählen, Start drücken. Die Wahl wird gespeichert, danach startet das Programm direkt in die Anzeige. Alternativ die Konsolen-Version:

python realtime_bpm_key_midiclock.py

Eine Audiodatei statt einer Live-Quelle abspielen (Datei-Modus, driftfreie Clock zur Wiedergabe) – in der Konsole:

python realtime_bpm_key_midiclock.py --file "C:\Pfad\zum\song.mp3"

Für die MIDI-Ausgabe an Software auf demselben Rechner braucht es unter Windows einen virtuellen MIDI-Port, z. B. loopMIDI.

macOS

python3 -m pip install -r requirements.txt
python3 bpm_key_display.py

Läuft wie unter Windows im Fenster; Bedienung und Konsolen-Version sind identisch. Drei Besonderheiten:

Raspberry Pi (Kiosk-Betrieb)

Installation (mit Desktop oder als Minimal-Variante auf Pi OS Lite), Kiosk-Autostart, Overlay-Dateisystem für den Bühnenbetrieb (robust gegen hartes Ausschalten) und Performance-Tipps stehen in README_RaspberryPi.md.

Webversion (Browser)

Eine schlanke Browser-Variante ohne Installation liegt als einzelne Datei in webapp/index.html: BPM-Erkennung mit stabiler MIDI-Clock und optionaler Tonart-Anzeige über die Web Audio und Web MIDI API (Chrome/Edge). Als Quelle dient ein Audio-Eingang oder die mitgehörte Wiedergabe (Tab-/System-Audio über die Screen-Capture-API). Zusätzlich gibt es einen Datei-/Aufnahme-Modus, der eine Audiodatei – oder einen Mitschnitt (mitgehörte Wiedergabe oder Audio-Eingang, manuell aufgenommen) – vorab zu einer Beat-Map analysiert und ihre MIDI-Clock driftfrei zur Wiedergabe ausgibt; die Aufnahme lässt sich – auch in mehrere erkannte Stücke getrennt – als Datei mit BPM/Tonart-Namensvorschlag speichern. Außerdem gibt es einen Noten-Modus (Pitch → MIDI, mono-/polyphon), einen Akkord-Modus, der angeschlagene Akkorde (z. B. Gitarre) erkennt und als sauberen MIDI-Akkord sendet, sowie einen DJ-Modus (zwei Decks nebeneinander, Audio-Crossfade, MIDI-Clock folgt dem überblendeten Track). Einfach im Browser öffnen – kein Server nötig.

👉 Online ausprobieren: https://codekoch.github.io/AudioWizard/webapp/

Details in webapp/README.md.

Wie es funktioniert

Die Analyse läuft auf einem rollenden 8-Sekunden-Fenster, das jede Sekunde neu ausgewertet wird (librosa, 22 050 Hz):

  1. HPSS-Zerlegung trennt das Signal nach Struktur: kurze, breitbandige Transienten (Drums) gehen in die Tempo-Schätzung, der harmonische Rest (Flächen, Bass, Gesang) in Tonart und Akkorde.
  2. Tempo: Autokorrelation der Onset-Hüllkurve, jeder Kandidat wird durch seine Vielfachen und das Achtelraster gestützt (Kammfilter); ein sanfter Prior löst die Oktav-Mehrdeutigkeit. Schwache Periodizität wird verworfen statt geraten.
  3. Tonart: Chroma aus einer 7-Oktaven-CQT mit Obertongewichtung (Salience) und Log-Kompression, korreliert mit Dur-/Moll-Profilen; ein Bass-Chroma liefert die Grundton-Evidenz. Zweistufige Mittelung (schnelle EMA + Gesamtmittel) plus Hysterese gegen Flackern.
  4. MIDI-Clock: eigener Echtzeit-Thread, der dem Tempo-Median mit Totband und begrenzter Slew-Rate folgt; im Beat-Sync-Modus zieht eine Regelschleife die Tick-Phase mit max. 1,5 ms pro Tick auf das geglättete Beat-Raster.

Viele Stellschrauben sind direkt im Quelltext dokumentiert – inklusive der Messwerte, die zur jeweiligen Einstellung geführt haben, und der Ansätze, die gemessen und verworfen wurden.

Qualität ist nachmessbar

Abhängigkeiten

numpy, librosa, soundfile, sounddevice, mido, python-rtmidi – und nur unter Windows zusätzlich soundcard für den Loopback (requirements.txt). python-rtmidi nutzt je nach Plattform WinMM, CoreMIDI (macOS) oder ALSA.

Lizenz

GPL-3.0 – frei nutzbar und veränderbar; Weitergaben (auch veränderte) müssen unter derselben Lizenz quelloffen bleiben.


Autoren: codekoch / claude · © 2026 codekoch