AI, Bots & Automatisierung

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…

Written by

×

Appgesteuerte Audiokompression

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