Login
Newsletter
Werbung

Di, 17. Januar 2012, 14:21

Software::Mobilgeräte

PulseAudio auf Android portiert

Arun Raghavan von Collabora hat den Audio-Server PulseAudio auf Android portiert. Im Vergleich zum Android-Audiosystem besitzt das Ergebnis unmerkliche Latenzen und benötigt weniger Energie.

Verschiedentlich war aus der Gemeinschaft schon der Wunsch nach einer Portierung von PulseAudio auf Android zu vernehmen. Nun wurde er umgesetzt. Arun Raghavan von Collabora nahm sich der Aufgabe an. In seinem Blog beschreibt er sein Vorgehen und vergleicht PulseAudio mit dem eingebauten Audiosystem von Android.

PulseAudio ist ein modulares Framework, das die Treiber von ALSA nutzt, Audiodaten flexibel routet und Energiesparfunktionen besitzt. Android liefert stattdessen aber das eigene Framework AudioFlinger, das auf eine Hardware-Abstraktionsschicht aufsetzt, die im Falle des verwendeten Gerätes, des Galaxy Nexus, wiederum auf ALSA zurückgreift. Anwendungen nutzen meist ein Framework, das oberhalb von AudioFlinger angesiedelt ist, z.B. OpenSL ES. AudioFlinger bürdet die Energieverwaltung den Implementatoren von HAL auf. Es besitzt anders als PulseAudio ein Effekt-API, in fast allen anderen Punkten besitzt PulseAudio jedoch mehr Funktionalität.

Die Portierung stützte sich stark auf das Werkzeug Androgenizer, das autotools-basierte Makefiles für Android anpasst. Arun Raghavan nutzte nicht die Möglichkeit, PulseAudio mittels des NDK als Android-Applikation zu erstellen, sondern entschloss sich, es direkt ins Basissystem zu integrieren. Eine der größten Schwierigkeiten war die Bibliothek libltdl zum dynamischen Laden von Modulen, doch konnte sie schließlich portiert werden. Anstelle der vollen ALSA-Bibliothek wurde salsa-lib verwendet. Dieser Bibliothek fehlten noch einige Funktionen, die aber leicht hinzuzufügen waren. Die letzte große Hürde war, dass zunächst keine Audio-Ausgabe hörbar war. Die Lösung war schließlich, UCM-Konfigurationsdateien zu nutzen und einige Patches in PulseAudio zu integrieren, die diese Dateien nutzen. UCM ist ein Versuch, einen Standard zu schaffen, mit denen Anwendungen die Mixer-Regler nutzen können, die besonders auf eingebetteten Chips zahlreich vorhanden sind.

Der Autor machte schließlich einige Tests zum Vergleich von PulseAudio und AudioFlinger. Dazu benutzte er eine Audiodateien mit 44,1 und 48 kHz. Es stellte sich heraus, dass AudioFlinger bei 48 kHz die Datei intern zweimal resamplen muss, da die Zwischenschicht generell mit 44,1 kHz arbeitet, das Audiogerät aber mit 48 kHz. PulseAudio muss das nur dann tun, wenn die Eingabe 44,1 kHz aufweist. Beim Speicherverbrauch liegt PulseAudio mit 3,0 gegenüber 2,6 MB etwas höher. Dafür benötigt AudioFlinger dreimal soviele Interrupts und entsprechend auch mehr Energie. Vor allem aber ist die Latenz bei AudioFlinger bis zu 176 ms lang, was mitunter deutlich hörbar ist. Bei PulseAudio liegt sie stets unter 20 ms.

Der aktuelle Code und Anleitungen sind auf einer Wiki-Seite verfügbar. Der Autor versucht seine Patches in die Projekte salsa-lib, PulseAudio und andere einzubringen. Wünschenswert wäre als nächstes eine Zwischenschicht, die es erlaubt, PulseAudio als direkten Ersatz für AudioFlinger zu verwenden, ohne bestehende Apps ändern zu müssen. Es gibt außerdem einiges in AudioFlinger, was auch in PulseAudio zur Verbesserung der Leistung genutzt werden könnte. Für diese Implementierung wird noch ein Sponsor gesucht.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung