Android verwendet ein breites Spektrum an Audioinhalten Datenformate und stellt einen Teil dieser Daten in öffentlichen APIs, Dateiformaten, und die Hardware-Abstraktionsschicht (HAL):
Properties
Die Audiodatenformate werden nach ihren Eigenschaften klassifiziert:
- Komprimierung
- Unkomprimiert, verlustfreie komprimierte Inhalte oder verlustbehaftete Komprimierung. PCM ist das gängigste unkomprimierte Audioformat. FLAC ist eine verlustfreie Komprimierung während MP3 und AAC verlustbehaftete komprimierte Formate sind.
- Bittiefe
- Anzahl der signifikanten Bits pro Audiobeispiel.
- Containergröße
- Anzahl der Bits, die zum Speichern oder Übertragen einer Stichprobe verwendet werden. Normalerweise Dies entspricht der Bit-Tiefe, aber manchmal Padding-Bits werden für die Ausrichtung zugewiesen. Beispiel: Ein 24-Bit-Beispiel könnte in einem 32-Bit-Wort enthalten sein.
- Ausrichtung
- Wenn die Containergröße genau der Bittiefe entspricht, wird als gepackt bezeichnet. Andernfalls ist die Darstellung entpackt werden. Die signifikanten Bits der Stichprobe sind in der Regel auf der linken Seite (höchste Bedeutung) oder ganz rechts ausgerichtet (am wenigsten signifikant) des Containers. Es ist üblich, die Begriffe gepackt und entpackt, wenn das Bit Tiefe ist kein Zweierpotenz.
- Signatur
- Gibt an, ob Samples signiert oder nicht signiert sind.
- Representation
- Entweder ein Fixpunkt oder ein Gleitkommawert; siehe unten.
Darstellung von Fixpunkten
Fixpunkt ist die gängigste Darstellung für unkomprimierte PCM-Audiodaten. insbesondere bei Hardwareschnittstellen.
Eine Festkommazahl hat eine feste (konstante) Anzahl von Ziffern vor und nach der Punktzahl. Alle unsere Darstellungen verwenden Basis 2 Also ersetzen wir bit durch Ziffer, und Binärpunkt oder einfach point für Basispunkt. Die Bits links vom Punkt sind der ganzzahlige Teil, und die Bits rechts vom Punkt sind die Bruchteil.
Wir sprechen von Ganzzahl-PCM, da Fixpunktwerte werden normalerweise als Ganzzahlwerte gespeichert und bearbeitet. Die Interpretation als Festpunkt ist implizit.
Wir verwenden ein Zweierkomplement für alle signierten Festkommadarstellungen, Also gilt Folgendes, wobei alle Werte in Einheiten von eins sind: LSB:
|largest negative value| = |largest positive value| + 1
Q-U-Notation
Es gibt verschiedene Notationen zur Festkommadarstellung als Ganzzahl. Wir verwenden die Q-Notation: Qm.n steht für m ganzzahlige Bits und n Bruchbits. Das „Q“ zählt als ein Bit, obwohl der Wert als Zweierkomplement ausgedrückt wird. Die Gesamtzahl der Bits ist m + n + 1.
Um.n steht für Zahlen ohne Vorzeichen: m Ganzzahlbits und n Bruchbits, und das „U“ zählt als null Bits. Die Gesamtzahl der Bits ist 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, aufgerufen Bits schützen. Die Guard-Bits ermöglichen einen Überlauf einer Zwischenberechnung. solange der Endwert innerhalb des zulässigen Bereichs liegt oder so festgelegt werden kann, dass er in diesem Bereich liegen kann. Fixierte Guard-Bits befinden sich auf der linken Seite, während die Gleitkommaeinheit Sicherheitsziffern werden zur Reduzierung von Rundungsfehlern verwendet und befinden sich auf der rechten Seite.
Gleitkommadarstellung
Gleitkomma ist eine Alternative zu einem festen Punkt, bei dem die Position des Punkts variieren kann. Zu den Hauptvorteilen von Gleitkommazahlen gehören:
- Größerer Kopfspielraum und Dynamic Range, Gleitkomma-arithmetische Toleranzen, die Nominalbereiche überschreiten und schränkt Werte nur am Ende der Berechnung ein.
- Unterstützung spezieller Werte wie Unendlichkeiten und NaN
- In vielen Fällen einfacher zu verwenden
In der Vergangenheit war die Gleitkommaarithmetik langsamer als die Ganzzahl oder die Festkommazahl aber jetzt sind Gleitkommazahlen häufig schneller. Entscheidungen des Kontrollflusses nicht auf dem Wert einer Berechnung basieren.
Android-Formate für Audio
In der folgenden Tabelle sind die wichtigsten Android-Audioformate für Audioanzeigen aufgeführt:
Attribut | F0.15 | F0.71 | F0.23 | F0.31 | schweben | |
---|---|---|---|---|---|---|
Container- Bits |
16 | 8 | 24 oder 322 | 32 | 32 | |
Signifikante Bits einschließlich Vorzeichen |
16 | 8 | 24 | 24 oder 322 | 25 3 | |
Toleranzbereich in dB |
0 | 0 | 0 | 0 | 126 4 | |
Dynamischer Bereich in dB |
90 | 42 | 138 | 138 bis 186 | 900 5 |
Alle obigen Festkommaformate haben einen Nominalbereich von -1,0 bis +1,0 minus ein LSB. Aufgrund des Fehlers 2-Komplement-Darstellung.
Fußnoten:
-
Alle obigen Formate enthalten signierte Beispielwerte.
Das 8-Bit-Format wird üblicherweise als „unsigniert“ bezeichnet,
Es ist tatsächlich ein vorzeichenbehafteter Wert mit einer Verzerrung von
0.10000000
. - Q0.23 kann in 24 Bits (drei 8-Bit-Byte, Little-Endian) gepackt oder entpackt werden. in 32 Bit. Beim Entpacken sind die signifikanten Bits entweder rechtsbündig in Richtung LSB mit Vorzeichenerweiterungs-Padding in Richtung MSB (Frage 8.23), oder linksbündig in Richtung MSB, mit Nullfüllung in Richtung LSB (Frage 0:31): Q0.31 gestattet theoretisch bis zu 32 signifikante Bits, Hardwareschnittstellen, die Q0.31 akzeptieren, verwenden jedoch selten alle Bits.
- Gleitkommazahlen mit einfacher Genauigkeit haben 23 explizite Bits plus ein verstecktes Bit und Insgesamt 25 Bits. Ungewöhnliche Zahlen weniger signifikante Bits haben.
- Gleitkommazahlen mit einfacher Genauigkeit können Werte bis zu ±1,7e+38 ausdrücken, was den großen Toleranzbereich erklärt.
- Der angezeigte dynamische Bereich gilt für denormale Werte bis zum nominalen Maximum ±1,0. Beachten Sie, dass einige architekturspezifische Gleitkommaimplementierungen wie NEON unterstützen keine denormalen Bilder.
Conversions
In diesem Abschnitt werden Daten-Conversions zwischen verschiedenen Darstellungen.
Gleitkomma-Conversions
So konvertieren Sie einen Wert vom Format Qm.n in eine Gleitkommazahl:
- Wandeln Sie den Wert so in eine Gleitkommazahl um, als wäre er eine Ganzzahl (indem Sie den Punkt ignorieren).
- Multiplizieren Sie den Wert mit 2-n.
Um beispielsweise einen internen Q4.27-Wert in einen Gleitkommawert zu konvertieren, verwenden Sie:
float = integer * (2 ^ -27)
Bei Konvertierungen von Gleitkomma zu festen Punkten gelten folgende Regeln:
- Gleitkommazahlen mit einfacher Genauigkeit haben einen Nominalbereich von ±1,0, aber der gesamte Bereich für Zwischenwerte ist ±1,7e+38. Konvertierung zwischen Gleitkomma und Fixpunkt für die externe Darstellung (z. B. bei der Ausgabe an Audiogeräte) berücksichtigt nur den Nennbereich, wobei für Werte, die diesen Bereich überschreiten. Das gilt insbesondere, wenn +1,0 in ein Festkommaformat auf +1, 0 minus eins LSB begrenzt.
- Denormalitäten (subnormale Werte) und sowohl +/- 0,0 sind in der Darstellung zulässig, während der Verarbeitung aber unbemerkt in 0,0 konvertiert werden.
- Unendlichkeiten werden entweder Operationen durchlaufen oder stillschweigend begrenzt werden. bis +/- 1,0. Im Allgemeinen ist Letzteres für die Konvertierung in ein Festkommaformat vorgesehen.
- NaN-Verhalten ist nicht definiert: Ein NaN kann sich als identisches NaN verbreiten in eine Standard-NaN konvertiert, kann ohne Ton auf +/- 1,0 begrenzt werden, oder automatisch in 0.0 konvertiert oder zu einem Fehler führen.
Festkomma-Conversions
Für Conversions zwischen verschiedenen Qm.n-Formaten gelten die folgenden Regeln:
- Wird m erhöht, wird das Vorzeichen auf den ganzzahligen Teil links erweitert.
- Wenn m verringert wird, wird der ganzzahlige Teil angeglichen.
- Wird n erhöht, wird der Bruchteil rechts mit null erweitert.
- Wenn n verringert wird, werden die überschüssigen Bruchbits rechts entweder dithern, gerundet oder gekürzt.
Um beispielsweise einen Wert aus Q4.27 in Q0.15 (ohne Dither- oder Rundung), verschiebt den Wert von Q4.27 um 12 Bit nach rechts und schränkt alle Ergebnisse ein. die den vorzeichenbehafteten 16-Bit-Bereich überschreiten. Dadurch wird der Punkt der Q-Darstellung.
Um Q7.24 in Q7.23 umzurechnen, muss eine vorzeichenbehaftete Division durch 2 durchgeführt werden. oder entsprechend das Vorzeichenbit zur Ganzzahl von Q7.24 addieren und dann das Vorzeichen um 1 nach rechts verschieben. Eine einfache vorzeichenbehaftete Verschiebung nach rechts entspricht nicht einer vorzeichenbehafteten Division durch 2.
Verlustbehaftete und verlustfreie Conversions
Eine Conversion ist verlustfrei, wenn
invertierbar:
eine Conversion von A
in B
zu
C
Ergebnisse in A = C
Andernfalls ist die Conversion verlusthaft.
Berechtigung für verlustfreie Conversions Round-Trip-Formatkonvertierung.
Konvertierungen von der Festpunktdarstellung mit 25 oder weniger signifikanten Bits in eine Gleitkommazahl sind verlustfrei. Konvertierungen von Gleitkommazahlen in alle gängigen Fixpunkte sind verlustbehaftet.