In diesem Artikel wird die Abtastratenumwandlung, auch als Resampling bezeichnet, unter Android beschrieben. Informationen zur Terminologie der Abtastratenumwandlung findest du unter Terminologie.
Bei der Abtastratenumwandlung wird ein Stream von diskreten Samples von einer Abtastrate in einen Stream mit einer anderen Abtastrate umgewandelt. Ein Sample-Rate-Converter oder Resampler ist ein Modul, das die Sample-Rate-Konvertierung implementiert. In Bezug auf den Resampler wird der ursprüngliche Stream als Quellsignal und der neu gemusterte Stream als Zielsignal bezeichnet.
Resampler werden an mehreren Stellen in Android verwendet. Eine MP3-Datei kann beispielsweise mit einer Abtastrate von 44,1 kHz codiert sein, aber auf einem Android-Gerät wiedergegeben werden, das intern 48 kHz-Audio unterstützt. In diesem Fall wird ein Resampler verwendet, um die MP3-Ausgabeaudiodaten von der Quellabtastrate von 44,1 kHz auf eine Zielabtastrate von 48 kHz hochzurechnen, die auf dem Android-Gerät verwendet wird.
Die Eigenschaften eines Resamplers können mithilfe von Messwerten ausgedrückt werden, darunter:
- der Grad der Erhaltung der Gesamtamplitude des Signals
- Grad der Wahrung der Frequenzbandbreite des Signals, vorbehaltlich der Einschränkungen der Abtastrate des Sinks
- Gesamtlatenz durch den Resampler
- Konstante Phasen- und Gruppenverzögerung in Bezug auf die Frequenz
- Rechenkomplexität, ausgedrückt in CPU-Zyklen oder Stromverbrauch
- zulässige Verhältnisse von Quell- und Senken-Abtastrate
- Möglichkeit, Abtastverhältnis dynamisch zu ändern
- Welche digitalen Audio-Stichprobenformate werden unterstützt?
Der ideale Resampler würde die Amplitude und die Frequenzbandbreite des Quellsignals genau beibehalten (vorbehaltlich der Einschränkungen der Abtastrate des Ziels), eine minimale und konstante Verzögerung haben, eine minimale Rechenkomplexität haben, beliebige und dynamische Umwandlungsverhältnisse zulassen und alle gängigen digitalen Audio-Sample-Formate unterstützen. In der Praxis gibt es keine idealen Resampler, da tatsächliche Resampler einen Kompromiss zwischen diesen Eigenschaften darstellen. So stehen beispielsweise Ziele mit idealer Qualität in Konflikt mit kurzer Verzögerung und geringer Komplexität.
Android bietet eine Vielzahl von Audio-Resamplern, sodass je nach Anwendungsfall und Auslastung geeignete Kompromisse eingegangen werden können. Die verfügbaren Resampler werden unter Resampler-Implementierung erläutert.
Implementierungen von Resamplern
Verfügbare Resampler-Implementierungen ändern sich häufig und können von OEMs angepasst werden. Die Standard-Resampler, in absteigender Reihenfolge der Signalverzerrung und aufsteigender Reihenfolge der Rechenkomplexität, sind:
- Linear
- Kubikmeter
- Sinc mit ursprünglichen Koeffizienten
- Sinc mit überarbeiteten Koeffizienten
Im Allgemeinen eignen sich die Sinc-Resampler für eine Wiedergabe von Musik mit höherer Qualität. Die anderen Resampler sollten für Fälle reserviert werden, in denen die Qualität weniger wichtig ist (z. B. „Tastaturklicks“ oder ähnliches).
Die ausgewählte Resampler-Implementierung hängt vom Anwendungsfall, der Auslastung und dem Wert der Systemeigenschaft af.resampler.quality
ab. Weitere Informationen finden Sie im Quellcode des Audio-Resamplers in AudioFlinger.