- Python 51.5%
- JavaScript 46%
- CSS 2.5%
| mixengine | ||
| tests | ||
| web | ||
| .gitignore | ||
| COPYRIGHT | ||
| LICENSE | ||
| pyproject.toml | ||
| README.md | ||
mixengine
DJ-Mix-Engine (Beatgrid, Zeitkarten, Keylock/Vinyl, EQ/Filter, Rendern) -- herausgelöst aus dem Playlist-Manager (airsonic-playlists) für den gemeinsamen Gebrauch mit dem Bot-Pult (Mixing Unit 9000 im Mumble-Bot).
import mixengine
mixengine.configure(sr=48000) # Standard 44100; Mumble/Opus braucht 48000
configure() stellt die Rate für den ganzen Prozess um (eine Modulvariable).
Darum immer mixer.SR / dj.SR lesen, nie from mixengine.mixer import SR --
das friert den Wert zum Importzeitpunkt ein. Die Analyse-Rate dj.A_SR bleibt
fest bei 11025.
Was nur der Playlist-Manager braucht (MP3-Album rendern, Einstellungen als
JSON ablegen), liegt dort in mix_export.py, nicht hier.
Tests
python3 -m pytest tests/ -q # gut 2 Minuten, braucht ffmpeg und rubberband
Alles synthetisch (tests/synth.py, Klicks, Sinus), bei 44,1 und 48 kHz:
Raster-Erkennung (test_grid), Schlaglagen nach Keylock/Vinyl und ihre Deckung
in der Überlappung (test_beats, ±1 ms), Nähte im Titel und zwischen den
Dateien (test_seams), EQ/Filter (test_fx), Ausklang mit Echo/Hall
(test_fx_tail). Die Docstrings nennen die
gemessenen Werte und bekannte Befunde.
Das Python-Paket heißt mixengine (Import: import mixengine), nur das Repo
trägt den Namen mumblemixer.
Als git submodule vendor/mixengine eingebunden in airsonic-playlists
(ersetzt dessen frühere dj.py/mixer.py). Das Bot-Pult bindet es genauso
ein, sobald es gebaut wird (Plan, Etappe 2/3) -- der Bot selbst braucht die
Engine nicht, er spielt nur fertige Stücke.