Diese App passt die Lautstärke dynamisch an und sorgt für einen gleichmäßigen, angenehmen Klang. Entwickelt mit Kotlin, Python und C++, analysiert sie das Audiomaterial in Echtzeit und optimiert die Dynamik – ideal für Streaming, Hörbücher und Musikgenuss.

Ein eigener Audiokompressor: Von der Idee zur Android-App
Seit Langem wollte ich einen Audiokompressor entwickeln, der direkt auf Android läuft und den Systemaudio-Stream in Echtzeit verarbeiten kann. Die Idee: Ein Tool, mit dem sich Musik und Sprache sauber und transparent komprimieren lassen – mit individuell einstellbaren Parametern. Also habe ich mich hingesetzt, recherchiert, Code geschrieben, Fehler gesucht (und gefunden) und nach etlichen Anpassungen schließlich einen Prototypen gebaut. In diesem Blogpost teile ich den Prozess, meine Learnings und die technischen Herausforderungen.
Schritt 1: Die Idee und die Anforderungen
Ein Audiokompressor reduziert die Dynamik eines Signals, indem er laute Stellen absenkt und so das Gesamtbild ausgleicht. Ich wollte eine App entwickeln, die:
- Systemaudio statt Mikrofon verarbeitet.
- Live arbeitet, also ohne merkbare Verzögerung.
- Individuell anpassbar ist – mit Reglern für Threshold, Ratio, Attack, Release und Makeup Gain.
- Eine einfache UI mit Echtzeit-Visualisierung der Kompressionskurve bietet.
Schritt 2: Die Grundlagen in Kotlin legen
Die erste Hürde war der Zugriff auf den Systemaudio-Stream. Normalerweise erlaubt Android nur die Aufnahme von Mikrofon-Audio, aber mit ein paar Umwegen über AudioRecord konnte ich das umgehen. Ein separates SystemAudioCapture-Modul kümmert sich nun um das Capturing, während die App die Kompressionsparameter verwaltet.
Schritt 3: Die UI – Einfach, aber funktional
Ich habe mich für eine schlichte UI mit einem Preset-Dropdown und fünf SeekBars entschieden:
Threshold: Ab wann das Signal komprimiert wird.
Ratio: Wie stark die Kompression wirkt.
Makeup Gain: Um den Pegel nach der Kompression auszugleichen.
Attack und Release
Zusätzlich gibt es eine Echtzeit-Visualisierung der Kompressionskurve. Sie zeigt, wie das Signal beeinflusst wird – was besonders hilfreich ist, um zu verstehen, wie sich die Parameter auswirken.
Schritt 4: Der Prototyp des Algorithmus in Python
Bevor die Audioverarbeitung in C++ für die App implementiert wird, arbeite ich aktuell an einem Prototypen in Python. Hier kann ich den Algorithmus erst einmal testen und optimieren, bevor ich ihn in die App portiere. Der Prototyp berechnet die Gain-Reduktion auf Basis von:
Pegel-Detektion (RMS oder Peak)
Dynamischer Gain-Anpassung anhand von Threshold & Ratio
Attack & Release für ein natürliches Klangbild
Makeup Gain für eine ausgeglichene Lautstärke
Sobald der Algorithmus stabil läuft, wird er in C++ portiert und über das Android NDK direkt in die App integriert.
Schritt 5: Integration in die App
Mit JNI (Java Native Interface) wird später die C++-Logik in Kotlin aufgerufen. Das bedeutet, den Datenfluss zwischen SystemAudioCapture → Kompressor → AudioTrack reibungslos zu halten. Aktuell ist die Audioverarbeitung noch nicht aktiv, da die Portierung des Algorithmus in C++ noch aussteht.
Was funktioniert schon:
-> UI mit einstellbaren Parametern
-> Visuelle Darstellung der Kompressionskurve
-> Systemaudio kann erfasst werden
Und was kommt noch?
- Python-Prototyp fertigstellen und optimieren
- Portierung in C++ und Integration in die App
- Attack & Release Feinanpassung
- Möglichkeit, eigene Presets zu speichern
Fazit: Noch ein langer Weg, aber es wird!
Dieser Audiokompressor ist definitiv kein „Mal eben schnell ein Projekt“. Aber es ist spannend, sich in die Echtzeit-Audiobearbeitung einzuarbeiten! Der nächste große Schritt ist die Fertigstellung des Algorithmus in Python und dann die Portierung in C++ für die App.

Hinterlasse einen Kommentar