Abtastratenkonvertierung

In diesem Artikel wird die Konvertierung der Abtastrate, auch Resampling genannt, in Android beschrieben. Informationen zur Terminologie zur Abtastratenkonvertierung finden Sie unter Terminologie .

Bei der Abtastratenkonvertierung handelt es sich um den Prozess, bei dem ein Strom diskreter Abtastwerte von einer Abtastrate in einen anderen Strom mit einer anderen Abtastrate umgewandelt wird. Ein Sample-Rate-Konverter 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 abgetastete Stream als Senkensignal bezeichnet.

Resampler werden an mehreren Stellen in Android verwendet. Beispielsweise kann eine MP3-Datei mit einer Abtastrate von 44,1 kHz codiert sein, muss aber auf einem Android-Gerät wiedergegeben werden, das intern 48-kHz-Audio unterstützt. In diesem Fall würde ein Resampler verwendet, um das MP3-Ausgabeaudio von einer Quellenabtastrate von 44,1 kHz auf eine Senkenabtastrate von 48 kHz hochzuskalieren, die im Android-Gerät verwendet wird.

Die Eigenschaften eines Resamplers können mithilfe von Metriken ausgedrückt werden, darunter:

  • Grad der Erhaltung der Gesamtamplitude des Signals
  • Grad der Erhaltung der Frequenzbandbreite des Signals, vorbehaltlich Einschränkungen der Senkenabtastrate
  • Gesamtlatenz durch den Resampler
  • konsistente Phasen- und Gruppenverzögerung in Bezug auf die Frequenz
  • Rechenkomplexität, ausgedrückt in CPU-Zyklen oder Stromverbrauch
  • zulässige Verhältnisse der Quell- und Senken-Abtastraten
  • Möglichkeit, die Abtastratenverhältnisse dynamisch zu ändern
  • welche digitalen Audio-Sample-Formate unterstützt werden

Der ideale Resampler würde die Amplitude und Frequenzbandbreite des Quellsignals exakt beibehalten (vorbehaltlich Einschränkungen der Sink-Sample-Rate), eine minimale und konsistente Verzögerung aufweisen, eine minimale Rechenkomplexität aufweisen, beliebige und dynamische Konvertierungsverhä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. Beispielsweise stehen Ziele idealer Qualität im Widerspruch zu kurzer Verzögerung und geringer Komplexität.

Android beinhaltet eine Vielzahl von Audio-Resamplern, so dass je nach Anwendungsfall und Auslastung entsprechende Kompromisse getroffen werden können. Die verfügbaren Resampler werden unter Resampler-Implementierung erläutert.

Resampler-Implementierungen

Verfügbare Resampler-Implementierungen ändern sich häufig und können von OEMs angepasst werden. Zu den Standard-Resamplern gehören in absteigender Reihenfolge der Signalverzerrung und aufsteigender Reihenfolge der Rechenkomplexität:

  • linear
  • kubisch
  • sinc mit Originalkoeffizienten
  • sinc mit überarbeiteten Koeffizienten

Im Allgemeinen eignen sich die Sinc-Resampler besser für die Musikwiedergabe mit höherer Qualität, und die anderen Resampler sollten für Fälle reserviert werden, in denen die Qualität weniger wichtig ist (ein Beispiel könnten „Tastenklicks“ oder ähnliches sein).

Die ausgewählte Resampler-Implementierung hängt vom Anwendungsfall, der Last und dem Wert der Systemeigenschaft af.resampler.quality ab. Weitere Informationen finden Sie im Audio-Resampler-Quellcode in AudioFlinger .