Datenformate

Android Anwendungen eine Vielzahl von Audio- Datenformate intern und stellt eine Teilmenge davon in öffentlichen APIs, Dateiformate und die Hardware Abstraction Layer (HAL).

Eigenschaften

Die Audiodatenformate werden nach ihren Eigenschaften klassifiziert:

Kompression
Unkomprimiert , verlustfrei komprimiert oder Komprimierung mit Verlust . PCM ist das gebräuchlichste unkomprimierte Audioformat. FLAC ist ein verlustfreies komprimiertes Format, während MP3 und AAC verlustbehaftete komprimierte Formate sind.
Bittiefe
Anzahl signifikanter Bits pro Audio-Sample.
Behältergröße
Anzahl der Bits, die zum Speichern oder Übertragen eines Samples verwendet werden. Normalerweise ist dies dieselbe wie die Bittiefe, aber manchmal werden zusätzliche Füllbits für die Ausrichtung zugewiesen. Beispielsweise könnte ein 24-Bit-Abtastwert in einem 32-Bit-Wort enthalten sein.
Ausrichtung
Wenn die Behältergröße genau gleich die Bit - Tiefe ist, wird die Darstellung verpackt genannt. Ansonsten ist die Darstellung ausgepackt. Die signifikanten Bits des Samples werden typischerweise entweder mit dem ganz linken (höchstwertigen) oder dem ganz rechten (niedrigstwertigen) Bit des Containers ausgerichtet. Es ist üblich , die Begriffe zu verwenden , verpackte und unverpackte nur , wenn die Bit - Tiefe nicht um eine Zweierpotenz .
Unterzeichnung
Ob Proben signiert oder unsigniert sind.
Darstellung
Entweder Festkomma oder Gleitkomma; siehe unten.

Festpunktdarstellung

Festpunkt ist die häufigste Darstellung für unkomprimierte PCM - Audiodaten, insbesondere bei Hardware - Schnittstellen.

Eine Festpunktzahl hat eine feste (konstant) Anzahl der Stellen vor und nach dem Radixpunkt . Alle unserer Darstellungen verwenden Basis 2 , so dass wir etwas für digit und binären Punkt ersetzen oder einfach für radix Punkt für Punkt. Die Bits links von dem Punkt sind der ganzzahlige Teil und die Bits rechts von dem Punkt sind der Nachkommateil .

Wir sprechen von Integer - PCM, da Festpunktwerte werden in der Regel als ganzzahlige Werte gespeichert und manipuliert. Die Interpretation als Fixpunkt ist implizit.

Wir verwenden Zweier-Komplement für alle Festkommadarstellungen unterzeichnet, so folgendes gilt , in der alle Werte in Einheiten von einem sind LSB :

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

Q- und U-Notation

Es gibt verschiedene Bezeichnungen für Festpunktdarstellung in einer ganzen Zahl. Wir verwenden Q - Notation : Q m. n Mittel M ganzzahlige Bits und n Bruchbits. Das "Q" zählt als ein Bit, obwohl der Wert im Zweierkomplement ausgedrückt wird. Die Gesamtzahl von Bits ist m + n + 1.

U m. n für die Zahlen ohne Vorzeichen: m ganzzahlige Bits und n Teilbits, und der „U“ gilt als Null - Bits. Die Gesamtzahl von Bits ist m + n.

Der ganzzahlige Teil kann im Endergebnis verwendet werden oder temporär sein. Im letzteren Fall werden die Bits , die den ganzzahligen Teil bilden, werden Schutzbits bezeichnet. Die Guard-Bits lassen einen Überlauf einer Zwischenrechnung zu, solange der Endwert innerhalb des Bereichs liegt oder innerhalb des Bereichs geklemmt werden kann. Man beachte , dass Festkomma Schutzbits sind auf der linken, während Gleitkommaeinheit Schutzziffern verwendet werden Rundungsfehler zu reduzieren , und sind auf der rechten Seite .

Gleitkommadarstellung

Gleitkomma ist eine Alternative zu Festpunkt, in dem die Lage des Punktes variiert. Zu den Hauptvorteilen von Gleitkomma zählen:

  • Größere Bauhöhe und Dynamikbereich ; Gleitkommaarithmetik toleriert das Überschreiten von Nennbereichen während der Zwischenberechnung und klemmt Werte nur am Ende
  • Unterstützung spezieller Werte wie Unendlich und NaN
  • In vielen Fällen einfacher zu bedienen

In der Vergangenheit war Gleitkomma-Arithmetik langsamer als Ganzzahl- oder Festkomma-Arithmetik, aber jetzt ist es üblich, dass Gleitkomma-Arithmetik schneller ist, vorausgesetzt, Kontrollflussentscheidungen basieren nicht auf dem Wert einer Berechnung.

Android-Formate für Audio

Die wichtigsten Android-Audioformate sind in der folgenden Tabelle aufgeführt:

Notation
Eigentum Q0,15 A0.7 1 Q0.23 Q0.31 schweben
Container
Bits
16 8 24 oder 32 2 32 32
Wichtige Bits bit
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 Zweierkomplement-Darstellung 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 üblicherweise als „unsigned“ genannt, aber es ist tatsächlich ein Wert mit Vorzeichen mit Vorspannung von 0.10000000 .
  2. Q0.23 kann in 24 Bit (drei 8-Bit-Bytes, Little-Endian) gepackt oder in 32 Bit entpackt werden. Wenn sie entpackt sind, werden 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 (Q0.31) ausgerichtet. Q0.31 erlaubt theoretisch bis zu 32 signifikante Bits, aber Hardwareschnittstellen, die Q0.31 akzeptieren, verwenden 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. Denormal Zahlen haben weniger Bits.
  4. Gleitkommazahlen mit einfacher Genauigkeit können Werte bis zu ±1.7e+38 ausdrücken, was den großen Headroom erklärt.
  5. Der angezeigte Dynamikbereich gilt für Denormals bis zum nominalen Maximalwert ±1,0. Beachten Sie, dass einige architekturspezifische Floating - Point - Implementierungen wie NEON nicht denormals unterstützen.

Konvertierungen

In diesem Abschnitt wird die Datenkonvertierung zwischen verschiedenen Darstellungen.

Gleitkomma-Konvertierungen

Um einen Wert von Q m zu konvertieren. n formatieren , um Gleitkomma:

  1. Wandeln Sie den Wert in Gleitkomma um, als ob es eine ganze Zahl wäre (indem Sie den Punkt ignorieren).
  2. Multipliziert mit 2 - n.

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

float = integer * (2 ^ -27)

Konvertierungen von Gleitkomma- in Festkomma folgen diesen Regeln:

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

Festkomma-Umrechnungen

Die Umrechnung zwischen verschiedenen Q m. n - Formate diese Regeln befolgen:

  • Wenn m erhöht wird, Zeichen den ganzzahligen Teil auf der linken Seite erstrecken.
  • Wenn m verringert wird, klemmt den ganzzahligen Teil.
  • Wenn n erhöht wird, erstrecken sich Null den Bruchteil rechts.
  • Wenn n verringert wird , entweder Dither, rund oder die überschüssigen Bruchbits im rechten trunkieren.

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

Zu konvertieren Q7.24 zu Q7.23, um 2 ein signiertes divide zu tun, oder in äquivalenter Weise das Vorzeichenbit auf die Q7.24 ganzzahlige Menge, und dann vorzeichenbehaftete Rechtsverschiebung um 1. Hinweis hinzuzufügen , dass eine einfache Rechtsverschiebung unterzeichnet ist nicht gleichwertig eine vorzeichenbehaftete Division durch 2.

Verlustbehaftete und verlustfreie Konvertierungen

Eine Umwandlung ist verlustfrei , wenn es invertierbare : eine Umwandlung von A zu B zu C führt zu A = C . Ansonsten ist die Umwandlung verlustbehaftete .

Lossless Konvertierungen ermöglichen Round-Trip - Formatumwandlung .

Konvertierungen von Festkommadarstellung mit 25 oder weniger signifikanten Bits in Gleitkommazahlen sind verlustfrei. Konvertierungen von Gleitkomma- in alle gängigen Festkomma-Darstellungen sind verlustbehaftet.