Datenformate

Android verwendet intern eine Vielzahl von Audiodatenformaten und stellt eine Teilmenge davon in öffentlichen APIs, Dateiformaten und der Hardware Abstraction Layer (HAL) bereit.

Eigenschaften

Die Audiodatenformate werden nach ihren Eigenschaften klassifiziert:

Kompression
Unkomprimiert , verlustfrei komprimiert oder verlustbehaftet komprimiert . PCM ist das am häufigsten verwendete unkomprimierte Audioformat. FLAC ist ein verlustfrei komprimiertes Format, während MP3 und AAC verlustbehaftet komprimierte Formate sind.
Bittiefe
Anzahl der signifikanten Bits pro Audio-Sample.
Behältergröße
Anzahl der Bits, die zum Speichern oder Übertragen eines Samples verwendet werden. Normalerweise entspricht dies der Bittiefe, manchmal werden jedoch zusätzliche Füllbits für die Ausrichtung zugewiesen. Beispielsweise könnte ein 24-Bit-Sample in einem 32-Bit-Wort enthalten sein.
Ausrichtung
Wenn die Containergröße genau der Bittiefe entspricht, wird die Darstellung als gepackt bezeichnet. Andernfalls wird die Darstellung entpackt . Die signifikanten Bits der Stichprobe werden normalerweise entweder mit dem ganz linken (höchstwertigen) oder ganz rechten (niedrigstwertigen) Bit des Containers ausgerichtet. Üblicherweise werden die Begriffe „gepackt“ und „ungepackt“ nur dann verwendet, wenn die Bittiefe keine Zweierpotenz ist.
Signiertheit
Ob Proben signiert oder nicht signiert sind.
Darstellung
Entweder Festkomma oder Gleitkomma; siehe unten.

Festkommadarstellung

Festkomma ist die gebräuchlichste Darstellung für unkomprimierte PCM-Audiodaten, insbesondere an Hardwareschnittstellen.

Eine Festkommazahl hat eine feste (konstante) Anzahl von Stellen vor und nach dem Basispunkt . Alle unsere Darstellungen verwenden die Basis 2 , daher ersetzen wir Bit durch Ziffer und Binärpunkt oder einfach Punkt durch Basispunkt . Die Bits links vom Punkt sind der ganzzahlige Teil und die Bits rechts vom Punkt sind der Bruchteil .

Wir sprechen von Integer-PCM , da Festkommawerte üblicherweise als Integer-Werte gespeichert und manipuliert werden. Die Interpretation als Festkomma ist implizit.

Wir verwenden das Zweierkomplement für alle vorzeichenbehafteten Festkommadarstellungen, daher gilt Folgendes, wenn alle Werte in Einheiten eines LSB vorliegen:

|largest negative value| = |largest positive value| + 1

Q- und U-Notation

Es gibt verschiedene Notationen für die Festkommadarstellung in einer ganzen Zahl. Wir verwenden die Q-Notation : Q m . n bedeutet m ganzzahlige Bits und n gebrochene Bits. Das „Q“ zählt als ein Bit, obwohl der Wert im Zweierkomplement ausgedrückt wird. Die Gesamtzahl der Bits beträgt m + n + 1.

Ähm . n steht für vorzeichenlose Zahlen: m Ganzzahlbits und n Bruchbits, und das „U“ zählt als Nullbits. Die Gesamtzahl der Bits beträgt m + n .

Der ganzzahlige Teil kann im Endergebnis verwendet werden oder temporär sein. Im letzteren Fall werden die Bits, aus denen der ganzzahlige Teil besteht , Schutzbits genannt. Die Schutzbits erlauben einen Überlauf einer Zwischenberechnung, solange der Endwert innerhalb des Bereichs liegt oder auf diesen Bereich begrenzt werden kann. Beachten Sie, dass sich Festkomma-Schutzbits auf der linken Seite befinden, während Gleitkomma-Einheits- Schutzziffern zur Reduzierung von Rundungsfehlern verwendet werden und sich auf der rechten Seite befinden.

Gleitkommadarstellung

Gleitkomma ist eine Alternative zum Festkomma, bei dem die Position des Punktes variieren kann. Zu den Hauptvorteilen von Gleitkommazahlen gehören:

  • Größerer Headroom und Dynamikbereich ; Gleitkommaarithmetik toleriert das Überschreiten nominaler Bereiche während der Zwischenberechnung und klemmt Werte nur am Ende
  • Unterstützung für spezielle Werte wie Unendlichkeiten und NaN
  • In vielen Fällen einfacher zu verwenden

Historisch gesehen war die Gleitkomma-Arithmetik langsamer als die Ganzzahl- oder Festkomma-Arithmetik, aber heutzutage ist es üblich, dass Gleitkomma-Arithmetik schneller ist, sofern Kontrollflussentscheidungen nicht auf dem Wert einer Berechnung basieren.

Android-Formate für Audio

Die wichtigsten Android-Formate für Audio sind in der folgenden Tabelle aufgeführt:

Notation
Eigentum Q0.15 Q0.7 1 Q0.23 Q0.31 schweben
Container
Bits
16 8 24 oder 32 2 32 32
Bedeutende Teile
inklusive Schild
16 8 24 24 oder 32 2 25 3
Kopffreiheit
in dB
0 0 0 0 126 4
Dynamikbereich
in dB
90 42 138 138 bis 186 900 5

Alle oben genannten Festkommaformate haben einen Nennbereich von -1,0 bis +1,0 minus einem LSB. Aufgrund der Zweierkomplementdarstellung gibt es einen negativen Wert mehr als einen positiven Wert.

Fußnoten:

  1. Alle oben genannten Formate drücken vorzeichenbehaftete Beispielwerte aus. Das 8-Bit-Format wird allgemein als „ohne Vorzeichen“ bezeichnet, tatsächlich handelt es sich jedoch um einen vorzeichenbehafteten Wert mit einem Bias von 0.10000000 .
  2. Q0.23 kann in 24 Bits (drei 8-Bit-Bytes, Little-Endian) gepackt oder in 32 Bits entpackt werden. Beim Entpacken sind die signifikanten Bits entweder rechtsbündig zum LSB mit Vorzeichenerweiterungsauffüllung zum MSB (Q8.23) oder linksbündig zum MSB mit Nullfüllung zum LSB hin (Q0.31). Q0.31 erlaubt theoretisch bis zu 32 signifikante Bits, aber Hardwareschnittstellen, die Q0.31 akzeptieren, nutzen selten alle Bits.
  3. Gleitkommazahlen mit einfacher Genauigkeit haben 23 explizite Bits plus ein verstecktes Bit und ein Vorzeichenbit, was insgesamt 25 signifikante Bits ergibt. Denormale Zahlen haben weniger signifikante Bits.
  4. Gleitkommazahlen mit einfacher Genauigkeit können Werte bis zu ±1,7e+38 ausdrücken, was den großen Spielraum erklärt.
  5. Der angezeigte Dynamikbereich gilt für Denormale bis zum nominalen Maximalwert ±1,0. Beachten Sie, dass einige architekturspezifische Gleitkomma-Implementierungen wie NEON keine Denormalen unterstützen.

Konvertierungen

In diesem Abschnitt werden Datenkonvertierungen zwischen verschiedenen Darstellungen erläutert.

Gleitkommakonvertierungen

So konvertieren Sie einen Wert von Q m . n -Format in Gleitkomma:

  1. Konvertieren Sie den Wert in einen Gleitkommawert, als wäre er eine Ganzzahl (indem Sie den Punkt ignorieren).
  2. Mit 2 - n multiplizieren.

Um beispielsweise einen internen Q4.27-Wert in einen Gleitkommawert umzuwandeln, verwenden Sie Folgendes:

float = integer * (2 ^ -27)

Konvertierungen von Gleitkomma in Festkomma erfolgen nach diesen Regeln:

  • Gleitkommazahlen mit einfacher Genauigkeit haben einen nominalen Bereich von ±1,0, aber der gesamte Bereich für Zwischenwerte beträgt ±1,7e+38. Bei der Konvertierung zwischen Gleitkomma und Festkomma für die externe Darstellung (z. B. Ausgabe an Audiogeräte) wird nur der Nennbereich berücksichtigt, wobei Werte, die diesen Bereich überschreiten, begrenzt werden. Insbesondere wenn +1,0 in ein Festkommaformat konvertiert wird, wird es auf +1,0 minus ein LSB begrenzt.
  • Denormale (Subnormale) und beide +/- 0,0 sind in der Darstellung zulässig, können jedoch während der Verarbeitung stillschweigend in 0,0 konvertiert werden.
  • Unendlichkeiten durchlaufen entweder Operationen oder werden stillschweigend auf +/- 1,0 begrenzt. Letzteres dient im Allgemeinen der Konvertierung in ein Festkommaformat.
  • Das NaN-Verhalten ist undefiniert: Ein NaN kann sich als identisches NaN weitergeben oder in ein Standard-NaN konvertiert werden, kann stillschweigend hart auf +/- 1,0 begrenzt werden oder stillschweigend auf 0,0 konvertiert werden oder zu einem Fehler führen.

Festkommakonvertierungen

Umrechnungen zwischen verschiedenen Q m . n -Formate folgen diesen Regeln:

  • Wenn m erhöht wird, wird der ganzzahlige Teil links durch ein Vorzeichen erweitert.
  • Wenn m verringert wird, klemmen Sie den ganzzahligen Teil fest.
  • Wenn n erhöht wird, erweitert Null den Bruchteil rechts.
  • Wenn n verringert wird, können Sie die überschüssigen Bruchbits rechts entweder dithern, runden oder abschneiden.

Um beispielsweise einen Wert von Q4.27 in Q0.15 umzuwandeln (ohne Dithering oder Rundung), verschieben Sie den Wert von Q4.27 um 12 Bit nach rechts und klemmen alle Ergebnisse ab, die den vorzeichenbehafteten 16-Bit-Bereich überschreiten. Dadurch wird der Punkt der Q-Darstellung ausgerichtet.

Um Q7.24 in Q7.23 umzuwandeln, führen Sie eine vorzeichenbehaftete Division durch 2 durch oder addieren Sie entsprechend das Vorzeichenbit zur ganzzahligen Menge von Q7.24 und verschieben Sie dann vorzeichenbehaftet um 1 nach rechts. Beachten Sie, dass eine einfache vorzeichenbehaftete Rechtsverschiebung nicht äquivalent ist eine vorzeichenbehaftete Division durch 2.

Verlustbehaftete und verlustfreie Konvertierungen

Eine Konvertierung ist verlustfrei , wenn sie invertierbar ist: Eine Konvertierung von A nach B nach C ergibt A = C Ansonsten ist die Konvertierung verlustbehaftet .

Verlustfreie Konvertierungen ermöglichen eine Round-Trip-Formatkonvertierung .

Konvertierungen von der Festkommadarstellung mit 25 oder weniger signifikanten Bits in die Gleitkommadarstellung sind verlustfrei. Konvertierungen von Gleitkommadarstellungen in beliebige gängige Festkommadarstellungen sind verlustbehaftet.

,

Android verwendet intern eine Vielzahl von Audiodatenformaten und stellt eine Teilmenge davon in öffentlichen APIs, Dateiformaten und der Hardware Abstraction Layer (HAL) bereit.

Eigenschaften

Die Audiodatenformate werden nach ihren Eigenschaften klassifiziert:

Kompression
Unkomprimiert , verlustfrei komprimiert oder verlustbehaftet komprimiert . PCM ist das am häufigsten verwendete unkomprimierte Audioformat. FLAC ist ein verlustfrei komprimiertes Format, während MP3 und AAC verlustbehaftet komprimierte Formate sind.
Bittiefe
Anzahl der signifikanten Bits pro Audio-Sample.
Behältergröße
Anzahl der Bits, die zum Speichern oder Übertragen eines Samples verwendet werden. Normalerweise entspricht dies der Bittiefe, manchmal werden jedoch zusätzliche Füllbits für die Ausrichtung zugewiesen. Beispielsweise könnte ein 24-Bit-Sample in einem 32-Bit-Wort enthalten sein.
Ausrichtung
Wenn die Containergröße genau der Bittiefe entspricht, wird die Darstellung als gepackt bezeichnet. Andernfalls wird die Darstellung entpackt . Die signifikanten Bits der Stichprobe werden normalerweise entweder mit dem ganz linken (höchstwertigen) oder ganz rechten (niedrigstwertigen) Bit des Containers ausgerichtet. Üblicherweise werden die Begriffe „gepackt“ und „ungepackt“ nur dann verwendet, wenn die Bittiefe keine Zweierpotenz ist.
Signiertheit
Ob Proben signiert oder nicht signiert sind.
Darstellung
Entweder Festkomma oder Gleitkomma; siehe unten.

Festkommadarstellung

Festkomma ist die gebräuchlichste Darstellung für unkomprimierte PCM-Audiodaten, insbesondere an Hardwareschnittstellen.

Eine Festkommazahl hat eine feste (konstante) Anzahl von Stellen vor und nach dem Basispunkt . Alle unsere Darstellungen verwenden die Basis 2 , daher ersetzen wir Bit durch Ziffer und Binärpunkt oder einfach Punkt durch Basispunkt . Die Bits links vom Punkt sind der ganzzahlige Teil und die Bits rechts vom Punkt sind der Bruchteil .

Wir sprechen von Integer-PCM , da Festkommawerte üblicherweise als Integer-Werte gespeichert und manipuliert werden. Die Interpretation als Festkomma ist implizit.

Wir verwenden das Zweierkomplement für alle vorzeichenbehafteten Festkommadarstellungen, daher gilt Folgendes, wenn alle Werte in Einheiten eines LSB vorliegen:

|largest negative value| = |largest positive value| + 1

Q- und U-Notation

Es gibt verschiedene Notationen für die Festkommadarstellung in einer ganzen Zahl. Wir verwenden die Q-Notation : Q m . n bedeutet m ganzzahlige Bits und n gebrochene Bits. Das „Q“ zählt als ein Bit, obwohl der Wert im Zweierkomplement ausgedrückt wird. Die Gesamtzahl der Bits beträgt m + n + 1.

Ähm . n steht für vorzeichenlose Zahlen: m Ganzzahlbits und n Bruchbits, und das „U“ zählt als Nullbits. Die Gesamtzahl der Bits beträgt m + n .

Der ganzzahlige Teil kann im Endergebnis verwendet werden oder temporär sein. Im letzteren Fall werden die Bits, aus denen der ganzzahlige Teil besteht , Schutzbits genannt. Die Schutzbits erlauben einen Überlauf einer Zwischenberechnung, solange der Endwert innerhalb des Bereichs liegt oder auf diesen Bereich begrenzt werden kann. Beachten Sie, dass sich Festkomma-Schutzbits auf der linken Seite befinden, während Gleitkomma-Einheits- Schutzziffern zur Reduzierung von Rundungsfehlern verwendet werden und sich auf der rechten Seite befinden.

Gleitkommadarstellung

Gleitkomma ist eine Alternative zum Festkomma, bei dem die Position des Punktes variieren kann. Zu den Hauptvorteilen von Gleitkommazahlen gehören:

  • Größerer Headroom und Dynamikbereich ; Gleitkommaarithmetik toleriert das Überschreiten nominaler Bereiche während der Zwischenberechnung und klemmt Werte nur am Ende
  • Unterstützung für spezielle Werte wie Unendlichkeiten und NaN
  • In vielen Fällen einfacher zu verwenden

Historisch gesehen war die Gleitkomma-Arithmetik langsamer als die Ganzzahl- oder Festkomma-Arithmetik, aber heutzutage ist es üblich, dass Gleitkomma-Arithmetik schneller ist, sofern Kontrollflussentscheidungen nicht auf dem Wert einer Berechnung basieren.

Android-Formate für Audio

Die wichtigsten Android-Formate für Audio sind in der folgenden Tabelle aufgeführt:

Notation
Eigentum Q0.15 Q0.7 1 Q0.23 Q0.31 schweben
Container
Bits
16 8 24 oder 32 2 32 32
Bedeutende Teile
inklusive Schild
16 8 24 24 oder 32 2 25 3
Kopffreiheit
in dB
0 0 0 0 126 4
Dynamikbereich
in dB
90 42 138 138 bis 186 900 5

Alle oben genannten Festkommaformate haben einen Nennbereich von -1,0 bis +1,0 minus einem LSB. Aufgrund der Zweierkomplementdarstellung gibt es einen negativen Wert mehr als einen positiven Wert.

Fußnoten:

  1. Alle oben genannten Formate drücken vorzeichenbehaftete Beispielwerte aus. Das 8-Bit-Format wird allgemein als „ohne Vorzeichen“ bezeichnet, tatsächlich handelt es sich jedoch um einen vorzeichenbehafteten Wert mit einem Bias von 0.10000000 .
  2. Q0.23 kann in 24 Bits (drei 8-Bit-Bytes, Little-Endian) gepackt oder in 32 Bits entpackt werden. Beim Entpacken sind die signifikanten Bits entweder rechtsbündig zum LSB mit Vorzeichenerweiterungsauffüllung zum MSB (Q8.23) oder linksbündig zum MSB mit Nullfüllung zum LSB hin (Q0.31). Q0.31 erlaubt theoretisch bis zu 32 signifikante Bits, aber Hardwareschnittstellen, die Q0.31 akzeptieren, nutzen selten alle Bits.
  3. Gleitkommazahlen mit einfacher Genauigkeit haben 23 explizite Bits plus ein verstecktes Bit und ein Vorzeichenbit, was insgesamt 25 signifikante Bits ergibt. Denormale Zahlen haben weniger signifikante Bits.
  4. Gleitkommazahlen mit einfacher Genauigkeit können Werte bis zu ±1,7e+38 ausdrücken, was den großen Spielraum erklärt.
  5. Der angezeigte Dynamikbereich gilt für Denormale bis zum nominalen Maximalwert ±1,0. Beachten Sie, dass einige architekturspezifische Gleitkomma-Implementierungen wie NEON keine Denormalen unterstützen.

Konvertierungen

In diesem Abschnitt werden Datenkonvertierungen zwischen verschiedenen Darstellungen erläutert.

Gleitkommakonvertierungen

So konvertieren Sie einen Wert von Q m . n -Format in Gleitkomma:

  1. Konvertieren Sie den Wert in einen Gleitkommawert, als wäre er eine Ganzzahl (indem Sie den Punkt ignorieren).
  2. Mit 2 - n multiplizieren.

Um beispielsweise einen internen Q4.27-Wert in einen Gleitkommawert umzuwandeln, verwenden Sie Folgendes:

float = integer * (2 ^ -27)

Konvertierungen von Gleitkomma in Festkomma erfolgen nach diesen Regeln:

  • Gleitkommazahlen mit einfacher Genauigkeit haben einen nominalen Bereich von ±1,0, aber der gesamte Bereich für Zwischenwerte beträgt ±1,7e+38. Bei der Konvertierung zwischen Gleitkomma und Festkomma für die externe Darstellung (z. B. Ausgabe an Audiogeräte) wird nur der Nennbereich berücksichtigt, wobei Werte, die diesen Bereich überschreiten, begrenzt werden. Insbesondere wenn +1,0 in ein Festkommaformat konvertiert wird, wird es auf +1,0 minus ein LSB begrenzt.
  • Denormale (Subnormale) und beide +/- 0,0 sind in der Darstellung zulässig, können jedoch während der Verarbeitung stillschweigend in 0,0 konvertiert werden.
  • Unendlichkeiten durchlaufen entweder Operationen oder werden stillschweigend auf +/- 1,0 begrenzt. Letzteres dient im Allgemeinen der Konvertierung in ein Festkommaformat.
  • Das NaN-Verhalten ist undefiniert: Ein NaN kann sich als identisches NaN weitergeben oder in ein Standard-NaN konvertiert werden, kann stillschweigend hart auf +/- 1,0 begrenzt werden oder stillschweigend auf 0,0 konvertiert werden oder zu einem Fehler führen.

Festkommakonvertierungen

Umrechnungen zwischen verschiedenen Q m . n -Formate folgen diesen Regeln:

  • Wenn m erhöht wird, wird der ganzzahlige Teil links durch ein Vorzeichen erweitert.
  • Wenn m verringert wird, klemmen Sie den ganzzahligen Teil fest.
  • Wenn n erhöht wird, erweitert Null den Bruchteil rechts.
  • Wenn n verringert wird, können Sie die überschüssigen Bruchbits rechts entweder dithern, runden oder abschneiden.

Um beispielsweise einen Wert von Q4.27 in Q0.15 umzuwandeln (ohne Dithering oder Rundung), verschieben Sie den Wert von Q4.27 um 12 Bit nach rechts und klemmen alle Ergebnisse ab, die den vorzeichenbehafteten 16-Bit-Bereich überschreiten. Dadurch wird der Punkt der Q-Darstellung ausgerichtet.

Um Q7.24 in Q7.23 umzuwandeln, führen Sie eine vorzeichenbehaftete Division durch 2 durch oder addieren Sie entsprechend das Vorzeichenbit zur ganzzahligen Menge von Q7.24 und verschieben Sie dann vorzeichenbehaftet um 1 nach rechts. Beachten Sie, dass eine einfache vorzeichenbehaftete Rechtsverschiebung nicht äquivalent ist eine vorzeichenbehaftete Division durch 2.

Verlustbehaftete und verlustfreie Konvertierungen

Eine Konvertierung ist verlustfrei , wenn sie invertierbar ist: Eine Konvertierung von A nach B nach C ergibt A = C Ansonsten ist die Konvertierung verlustbehaftet .

Verlustfreie Konvertierungen ermöglichen eine Round-Trip-Formatkonvertierung .

Konvertierungen von der Festkommadarstellung mit 25 oder weniger signifikanten Bits in die Gleitkommadarstellung sind verlustfrei. Konvertierungen von Gleitkommadarstellungen in beliebige gängige Festkommadarstellungen sind verlustbehaftet.