AudioFormat Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
La AudioFormat
classe viene usata per accedere a una serie di costanti di configurazione del formato audio e del canale.
[Android.Runtime.Register("android/media/AudioFormat", DoNotGenerateAcw=true)]
public class AudioFormat : Java.Lang.Object, Android.OS.IParcelable, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("android/media/AudioFormat", DoNotGenerateAcw=true)>]
type AudioFormat = class
inherit Object
interface IParcelable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Ereditarietà
- Attributi
- Implementazioni
Commenti
La AudioFormat
classe viene usata per accedere a una serie di costanti di configurazione del formato audio e del canale. Ad esempio, vengono usati in AudioTrack
e AudioRecord
, come valori validi nei singoli parametri dei costruttori come AudioTrack#AudioTrack(int, int, int, int, int, int)
, dove il quarto parametro è una delle AudioFormat.ENCODING_*
costanti. Le AudioFormat
costanti vengono usate anche in MediaFormat
per specificare valori correlati all'audio comunemente usati nei supporti, ad esempio per MediaFormat#KEY_CHANNEL_MASK
.
La AudioFormat.Builder
classe può essere usata per creare istanze della AudioFormat
classe di formato. Per informazioni sulla meccanica della configurazione e sulla compilazione di tali istanze, vedere la AudioFormat.Builder
documentazione. Ecco i concetti principali che la AudioFormat
classe consente di trasmettere in ogni istanza, sono: <ol<>li sample<rate li>encoding<li>>channel masks</ol>
Strettamente associato all'oggetto AudioFormat
è la nozione di un frame audio, usato in tutta la documentazione per rappresentare la dimensione minima completa dei dati audio.
<h4 id="sampleRate">Frequenza< di esempio/h4>
Espresso in Hz, la frequenza di esempio in un'istanza AudioFormat
esprime il numero di campioni audio per ogni canale al secondo nel contenuto che si sta riproducendo o registrando. Non è la frequenza di esempio a cui viene eseguito il rendering o prodotto il contenuto. Ad esempio, un suono a una frequenza di campionamento multimediale di 8000Hz può essere riprodotto su un dispositivo che opera a una frequenza di campionamento di 48000Hz; la conversione della frequenza di esempio viene gestita automaticamente dalla piattaforma, non verrà riprodotta a 6x velocità.
A partire dall'API android.os.Build.VERSION_CODES#M
, le frequenze di esempio fino a 192kHz sono supportate per AudioRecord
e , AudioTrack
con la conversione della frequenza di esempio eseguita in base alle esigenze. Per migliorare l'efficienza ed evitare conversioni di perdita, è consigliabile corrispondere alla frequenza di campionamento per AudioRecord
e AudioTrack
alla frequenza di esempio del dispositivo endpoint e limitare la frequenza di campionamento a non più di 48kHz a meno che non siano presenti funzionalità di dispositivo speciali che garantiscono una frequenza maggiore.
<h4 id="codifica">Codifica</h4>
La codifica audio viene usata per descrivere la rappresentazione bit di dati audio, che può essere PCM lineare o audio compresso, ad esempio AC3 o DTS.
Per PCM lineare, la codifica audio descrive le dimensioni di esempio, 8 bit, 16 bit o 32 bit e la rappresentazione di esempio, intero o float. <ul><li>#ENCODING_PCM_8BIT
: l'esempio audio è un intero senza segno a 8 bit nell'intervallo [0, 255], con un offset di 128 per zero. Questo valore viene in genere archiviato come byte Java in una matrice di byte o ByteBuffer. Poiché il byte Java è <em>signed</em>, prestare attenzione alle operazioni matematiche e alle conversioni, poiché il bit più significativo è invertito. </li><>#ENCODING_PCM_16BIT
li: l'esempio audio è un intero con segno a 16 bit in genere archiviato come Java short in una matrice breve, ma quando il breve viene archiviato in un ByteBuffer, è endian nativo (rispetto al big endian Java predefinito). Il breve ha un intervallo completo compreso tra [-32768, 32767], e talvolta viene interpretato come dati A virgola fissa Q.15. </li>#ENCODING_PCM_FLOAT
<>: introdotta nell'API android.os.Build.VERSION_CODES#LOLLIPOP
, questa codifica specifica che l'esempio audio è un float a precisione singola IEEE a 32 bit. L'esempio può essere modificato come float Java in una matrice float, anche se all'interno di un ByteBuffer viene archiviato in ordine di byte endian nativo. L'intervallo nominale di ENCODING_PCM_FLOAT
dati audio è [-1.0, 1.0]. L'implementazione dipende dal fatto che il massimo positivo di 1,0 sia incluso nell'intervallo. I valori esterni all'intervallo nominale vengono bloccati prima di inviare al dispositivo endpoint. Tenere presente che la gestione di NaN non è definita; i sottonormali possono essere trattati come zero; e gli infiniti sono generalmente bloccati come altri valori per AudioTrack
– cercare di evitare infiniti perché possono generare facilmente un NaN. <br> Per ottenere una maggiore profondità di bit audio rispetto a un intero a 16 bit firmato, è consigliabile usare ENCODING_PCM_FLOAT
per l'acquisizione audio, l'elaborazione e la riproduzione. I float vengono manipolati in modo efficiente dalle CPU moderne, hanno una precisione maggiore di interi con segno a 24 bit e hanno un intervallo dinamico maggiore di interi con segno a 32 bit. AudioRecord
a partire dall'API android.os.Build.VERSION_CODES#M
e AudioTrack
dal supporto ENCODING_PCM_FLOAT
api android.os.Build.VERSION_CODES#LOLLIPOP
. </li><>#ENCODING_PCM_24BIT_PACKED
: introdotta nell'API android.os.Build.VERSION_CODES#S
, questa codifica specifica che l'esempio audio è un intero con segno di precisione estesa a 24 bit archiviato come 3 byte Java in una matrice di byte in endian ByteBuffer
nativo (vedere ).java.nio.ByteOrder#nativeOrder()
Ogni esempio include un intervallo completo compreso tra [-8388608, 8388607], e può essere interpretato come dati Q.23 del punto fisso. </li>>#ENCODING_PCM_32BIT
< li: introdotta nell'API android.os.Build.VERSION_CODES#S
, questa codifica specifica che l'esempio audio è un intero con segno di precisione estesa a 32 bit archiviato come 4 byte Java in una matrice di byte in endian ByteBuffer
nativo (vedere ).java.nio.ByteOrder#nativeOrder()
Ogni esempio ha un intervallo completo compreso tra [-2147483648, 2147483647], e può essere interpretato come dati Q.31 del punto fisso. </li></ul>
Per l'audio compresso, la codifica specifica il metodo di compressione, ad esempio #ENCODING_AC3
e #ENCODING_DTS
. I dati audio compressi vengono in genere archiviati come byte in una matrice di byte o ByteBuffer. Quando viene specificata una codifica audio compressa per un AudioTrack
oggetto , crea una traccia diretta (non mista) per l'output in un endpoint (ad esempio HDMI) in grado di decodificare l'audio compresso. Per la maggior parte degli altri endpoint, che non sono in grado di decodificare tale audio compresso, è necessario decodificare prima i dati, in genere creando un oggetto MediaCodec
. In alternativa, è possibile usare MediaPlayer
per la riproduzione di file o flussi audio compressi.
Quando l'audio compresso viene inviato tramite un diretto AudioTrack
, non deve essere scritto in multipli esatti dell'unità di accesso audio. Ciò è diverso dai MediaCodec
buffer di input.
<h4 id="channelMask">Channel mask</h4>
Le maschere di canale vengono usate in AudioTrack
e AudioRecord
per descrivere i campioni e la loro disposizione nel frame audio. Vengono usati anche nell'endpoint (ad esempio, un'interfaccia audio USB, un'applicazione livello dati connessa alle cuffie) per specificare configurazioni consentite di un determinato dispositivo. <br>A partire dall'API android.os.Build.VERSION_CODES#M
, esistono due tipi di maschere di canale: maschere di posizione del canale e maschere di indice del canale.
<h5 id="channelPositionMask">Channel position masks</h5> Channel position masks are the original Android channel masks, and are used since API android.os.Build.VERSION_CODES#BASE
. Per l'input e l'output, implicano una natura posizionale, ovvero la posizione di un altoparlante o di un microfono per la registrazione o la riproduzione. <br>Per una maschera di posizione del canale, ogni posizione del canale consentita corrisponde a un bit nella maschera del canale. Se tale posizione del canale è presente nel frame audio, tale bit viene impostato, altrimenti è zero. L'ordine dei bit (da lsb a msb) corrisponde all'ordine del campione di tale posizione nel frame audio. <br>Le maschere di posizione del canale canonico per conteggio canali sono le seguenti: <br><table><tr><td>channel count</td><td>channel position mask</td></tr tr<><>td>1</td><td<>#CHANNEL_OUT_MONO
/><tr tr>><<td>2</td><>< td<#CHANNEL_OUT_STEREO
>/tr tr><><td>3</td><td#CHANNEL_OUT_FRONT_CENTER
>#CHANNEL_OUT_STEREO
| </td></tr<>><td 4></td td>><#CHANNEL_OUT_QUAD
</td></tr tr><<>td>5</td td#CHANNEL_OUT_QUAD
> | <#CHANNEL_OUT_FRONT_CENTER
></td></tr tr><><td>6</td><td<>#CHANNEL_OUT_5POINT1
/td></tr tr><<>td>7</td><td#CHANNEL_OUT_BACK_CENTER
| <#CHANNEL_OUT_5POINT1
>/td></tr tr><><td>8</td td></td><>#CHANNEL_OUT_7POINT1_SURROUND
</tr<>/table><br>Queste maschere sono una composizione ORed di maschere di canale individuali. Ad esempio #CHANNEL_OUT_STEREO
, è composto da #CHANNEL_OUT_FRONT_LEFT
e #CHANNEL_OUT_FRONT_RIGHT
.
Il diagramma seguente rappresenta il layout dei canali di output, come illustrato dall'alto del listener (al centro in corrispondenza della posizione "lis", rivolto al canale centrale anteriore).
TFL ----- TFC ----- TFR T is Top
| \ | / |
| FL --- FC --- FR | F is Front
| |\ | /| |
| | BFL-BFC-BFR | | BF is Bottom Front
| | | |
| FWL lis FWR | W is Wide
| | | |
TSL SL TC SR TSR S is Side
| | | |
| BL --- BC -- BR | B is Back
| / \ |
TBL ----- TBC ----- TBR C is Center, L/R is Left/Right
Tutti i canali "T" (superiore) sono al di sopra del listener, tutti i canali "BF" (in basso) sono sotto il listener, tutti gli altri si trovano nel piano orizzontale del listener. Se usato in combinazione, LFE1 e LFE2 sono al di sotto del listener, se usati da soli, il piano LFE non è definito. Vedere le definizioni dei canali per le abbreviazioni
<h5 id="channelIndexMask">Channel index masks</h5> Channel index masks sono introdotti nell'API android.os.Build.VERSION_CODES#M
. Consentono la selezione di un determinato canale dall'endpoint di origine o sink in base al numero, ad esempio il primo canale, il secondo canale e così via. In questo modo si evitano problemi con l'assegnazione artificiale delle posizioni ai canali di un endpoint o la ricerca di ciò che il<bit i sup>th</sup> position bit si trova all'interno della maschera di posizione del canale di un endpoint e così via. <br>Ecco un esempio in cui le maschere dell'indice del canale affrontano questa confusione: gestire un dispositivo USB a 4 canali. Usando una maschera di posizione e in base al conteggio dei canali, si tratta di un #CHANNEL_OUT_QUAD
dispositivo, ma in realtà uno è interessato solo al canale 0 fino al canale 3. Il dispositivo USB avrà quindi le maschere del canale di bit seguenti: #CHANNEL_OUT_FRONT_LEFT
, #CHANNEL_OUT_FRONT_RIGHT
#CHANNEL_OUT_BACK_LEFT
e #CHANNEL_OUT_BACK_RIGHT
. Ma qual è il canale 0 e quale è il canale 3? <br>Per una maschera di indice del canale, ogni numero di canale è rappresentato come un bit nella maschera, dall'lsb (canale 0) verso l'alto fino al valore msb, numericamente questo valore di bit è 1 << channelNumber
. Un bit impostato indica che il canale è presente nel frame audio; in caso contrario, viene cancellato. L'ordine dei bit corrisponde anche all'ordine di campionamento del numero di canale nel frame audio. <br>Per l'esempio precedente di dispositivo USB a 4 canali, il dispositivo avrebbe una maschera 0xF
di indice del canale . Si supponga di voler selezionare solo il primo e il terzo canale; corrisponde a una maschera 0x5
di indice del canale (il primo e il terzo bit impostati). Se usa AudioTrack
questa maschera di indice del canale, il frame audio sarà costituito da due campioni, il primo campione di ogni frame indirizzato al canale 0 e il secondo campione di ogni frame indirizzato al canale 2. Le maschere dell'indice del canale canonico in base al numero di canali vengono fornite dalla formula (1 << channelCount) - 1
.
<h5 Casi d'uso</h5<>>ul><li> Channel position mask for an endpoint:CHANNEL_OUT_FRONT_LEFT
, CHANNEL_OUT_FRONT_CENTER
, etc. for HDMI home theater purposes. <li>Channel position mask per un flusso audio: creazione di un AudioTrack
oggetto per l'output del contenuto del filmato, in cui deve essere scritto l'output multicanale 5.1. <li>Channel index mask per un endpoint: dispositivi USB per i quali l'input e l'output non corrispondono all'altoparlante sinistro o destro o al microfono. <li>Channel index mask per un flusso audio:AudioRecord
può essere necessario solo il terzo e il quarto canale audio dell'endpoint (ad esempio la seconda coppia di canali) e non importa la posizione a cui corrisponde, nel qual caso la maschera dell'indice del canale è 0xC
. Le sessioni multicanale AudioRecord
devono usare maschere di indice del canale. </ul><h4 id="audioFrame">Audio Frame</h4>
Per PCM lineare, un frame audio è costituito da un set di campioni acquisiti contemporaneamente, la cui associazione di conteggio e canale viene assegnata dalla maschera di canale e il cui contenuto di esempio è specificato dalla codifica. Ad esempio, un frame PCM stereo a 16 bit è costituito da due campioni PCM lineari a 16 bit, con una dimensione del frame di 4 byte. Per l'audio compresso, un frame audio può in alternativa fare riferimento a un'unità di accesso di byte di dati compressi raggruppati logicamente per la decodifica e l'accesso a flusso bit (ad MediaCodec
esempio ) o a un singolo byte di dati compressi (ad AudioTrack#getBufferSizeInFrames() AudioTrack.getBufferSizeInFrames()
esempio ) o al frame PCM lineare risultante dalla decodifica dei dati compressi (ad esempioAudioTrack#getPlaybackHeadPosition() AudioTrack.getPlaybackHeadPosition()
), a seconda del contesto in cui viene usato il frame audio. Ai fini di , un formato di AudioFormat#getFrameSizeInBytes()
dati compresso restituisce una dimensione del frame di 1 byte.
Documentazione java per android.media.AudioFormat
.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal Android e usato in base ai termini descritti in 2.5 Attribution License Creative Commons 2.5 Attribution License.
Costruttori
AudioFormat() | |
AudioFormat(IntPtr, JniHandleOwnership) |
Costruttore usato durante la creazione di rappresentazioni gestite di oggetti JNI; chiamato dal runtime. |
Campi
ChannelInvalid |
Maschera del canale audio non valida |
ChannelOut5point1point2 |
Obsoleti.
Maschera di canale di output per 5. |
ChannelOut5point1point4 |
Obsoleti.
Maschera di canale di output per 5. |
ChannelOut6point1 |
Obsoleti.
Maschera del canale di output per 6. |
ChannelOut7point1 |
Metodo deprecato. |
ChannelOut7point1point2 |
Obsoleti.
Maschera del canale di output per 7. |
ChannelOut7point1point4 |
Obsoleti.
Maschera del canale di output per 7. |
ChannelOut9point1point4 |
Obsoleti.
Maschera del canale di output per 9. |
ChannelOut9point1point6 |
Obsoleti.
Maschera del canale di output per 9. |
ChannelOutBottomFrontCenter |
Obsoleti.
Canale di output centrale inferiore (vedere BFC nel diagramma del canale seguente) |
ChannelOutBottomFrontLeft |
Obsoleti.
Canale di output in basso a sinistra (vedere BFL nel diagramma del canale sotto FL) |
ChannelOutBottomFrontRight |
Obsoleti.
Canale di output in basso a destra (vedere BFR nel diagramma del canale sotto FR) |
ChannelOutFrontWideLeft |
Obsoleti.
Canale di output a sinistra anteriore (vedere FWL nel diagramma del canale) |
ChannelOutFrontWideRight |
Obsoleti.
Canale di output a destra anteriore (vedere FWR nel diagramma del canale) |
ChannelOutLowFrequency2 |
Obsoleti.
Il secondo canale LFE Quando usato in combinazione con |
ChannelOutTopBackCenter |
Obsoleti.
Canale di output centrale superiore (vedere TBC nel diagramma del canale sopra BC) |
ChannelOutTopBackLeft |
Obsoleti.
Canale di output indietro sinistro superiore (vedere TBL nel diagramma del canale sopra BL) |
ChannelOutTopBackRight |
Obsoleti.
Canale di output in alto a destra (vedere TBR nel diagramma del canale sopra BR) |
ChannelOutTopCenter |
Obsoleti.
Canale di output superiore (sopra listener) (vedere TC nel diagramma del canale) |
ChannelOutTopFrontCenter |
Obsoleti.
Canale di output principale centrale (vedere TFC nel diagramma del canale sopra FC) |
ChannelOutTopFrontLeft |
Obsoleti.
Canale di output superiore sinistro (vedere TFL nel diagramma del canale sopra FL) |
ChannelOutTopFrontRight |
Obsoleti.
Canale di output superiore destro (vedere TFR nel diagramma del canale sopra FR) |
ChannelOutTopSideLeft |
Obsoleti.
Canale di output superiore sinistro (vedere TSL nel diagramma del canale sopra SL) |
ChannelOutTopSideRight |
Obsoleti.
Canale di output superiore destro (vedere TSR nel diagramma del canale sopra SR) |
EncodingDra |
Obsoleti.
Formato dati audio: DRA compresso |
EncodingDsd |
Obsoleti.
Formato dati audio: Flusso diretto digitale |
EncodingDtsHdMa |
Obsoleti.
Formato dati audio: il flusso DTS HD Master Audio compresso DTS HD Audio è velocità a bit variabile e contiene audio senza perdita. |
EncodingDtsUhd |
Formato dati audio: DTS UHD Profile-1 compresso (aka DTS:X Profile 1) Ha lo stesso significato e valore di ENCODING_DTS_UHD_P1. |
EncodingDtsUhdP1 |
Obsoleti.
Formato dati audio: DTS UHD Profile-1 compresso (aka DTS:X Profile 1) Ha lo stesso significato e valore dell'oggetto deprecato |
EncodingDtsUhdP2 |
Obsoleti.
Formato dati audio: DTS UHD Profile-2 compresso DTS-UHD Profile-2 supporta la distribuzione di Channel-Based Audio, Object-Based presentazioni Audio e High Order Ambisonic fino al quarto ordine. |
EncodingMpeghBlL3 |
Obsoleti.
Formato dati audio: profilo di base MPEG-H, livello 3 |
EncodingMpeghBlL4 |
Obsoleti.
Formato dati audio: profilo di base MPEG-H, livello 4 |
EncodingMpeghLcL3 |
Obsoleti.
Formato dati audio: profilo di complessità bassa MPEG-H, livello 3 |
EncodingMpeghLcL4 |
Obsoleti.
Formato dati audio: profilo di complessità bassa MPEG-H, livello 4 |
EncodingOpus |
Obsoleti.
Formato dati audio: OPUS compresso. |
EncodingPcm24bitPacked |
Obsoleti.
Formato dati audio: PCM 24 bit per esempio compresso come 3 byte. |
EncodingPcm32bit |
Obsoleti.
Formato dati audio: PCM 32 bit per esempio. |
SampleRateUnspecified |
La frequenza di esempio sarà un valore dipendente dalla route. |
Proprietà
ChannelCount |
Restituisce il conteggio dei canali. |
ChannelIndexMask |
Restituisce la maschera di indice del canale. |
ChannelMask |
Restituire la maschera del canale. |
Class |
Restituisce la classe di runtime di questo |
Creator |
La |
Encoding |
Restituire la codifica. |
FrameSizeInBytes |
Restituisce le dimensioni del frame in byte. |
Handle |
Handle all'istanza di Android sottostante. (Ereditato da Object) |
JniIdentityHashCode |
La |
JniPeerMembers |
La |
PeerReference |
La |
SampleRate |
Restituisce la frequenza di esempio. |
ThresholdClass |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. |
ThresholdType |
Questa API supporta l'infrastruttura Mono per Android e non deve essere usata direttamente dal codice. |
Metodi
Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da Object) |
DescribeContents() |
La |
Dispose() |
La |
Dispose(Boolean) |
La |
Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
GetHashCode() |
Restituisce un valore del codice hash per l'oggetto. (Ereditato da Object) |
JavaFinalize() |
Chiamato dal Garbage Collector in un oggetto quando Garbage Collection determina che non sono presenti più riferimenti all'oggetto. (Ereditato da Object) |
Notify() |
Riattiva un singolo thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
NotifyAll() |
Riattiva tutti i thread in attesa del monitoraggio dell'oggetto. (Ereditato da Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
ToArray<T>() |
La |
ToString() |
Restituisce una rappresentazione in formato stringa dell'oggetto. (Ereditato da Object) |
UnregisterFromRuntime() |
La |
Wait() |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere eseguendo>una notifica</em o <em interrotto</>em>>.< (Ereditato da Object) |
Wait(Int64) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
Wait(Int64, Int32) |
Causa l'attesa del thread corrente fino a quando non viene svegliata, in genere <>eseguendo una notifica</em o <em interrotto/>>em>o fino a quando non è trascorsa< una determinata quantità di tempo reale. (Ereditato da Object) |
WriteToParcel(Parcel, ParcelableWriteFlags) |
La |
Implementazioni dell'interfaccia esplicita
IJavaPeerable.Disposed() |
La |
IJavaPeerable.DisposeUnlessReferenced() |
La |
IJavaPeerable.Finalized() |
La |
IJavaPeerable.JniManagedPeerState |
La |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
La |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
La |
IJavaPeerable.SetPeerReference(JniObjectReference) |
La |
Metodi di estensione
JavaCast<TResult>(IJavaObject) |
Esegue una conversione dei tipi controllati dal runtime Android. |
JavaCast<TResult>(IJavaObject) |
La |
GetJniTypeName(IJavaPeerable) |
La |