Campionamento audio

A partire da Android 5.0 (Lollipop), i ricampionatori audio sono basati interamente su sui filtri FIR derivati da una funzione di Kaiser con windowed-sinc. Il Kaiser con finestra offre le seguenti proprietà:

  • È semplice calcolare i parametri di progettazione (banda stop) ondulazione, larghezza di banda di transizione, frequenza di taglio, lunghezza del filtro).
  • È quasi ottimale per la riduzione dell'energia della banda stop rispetto alla media energia.

Vedi P.P. Vaidyanathan, Sistemi multirate e banche di filtri, pag. 50 per discussioni sul La finestra di Kaiser e la sua ottimalità e relazione con il prolato sferoidale Windows.

I parametri di progettazione vengono calcolati automaticamente in base la determinazione della qualità e i rapporti di campionamento desiderati. In base alla parametri di progettazione, viene generato il filtro sinc a finestre. Per l'uso della musica, il ricampionatore per le frequenze da 44,1 a 48 kHz e viceversa è generato a una anziché per una conversione di frequenza arbitraria.

I ricampionatori audio garantiscono una migliore qualità e una maggiore velocità per raggiungere quella qualità. Ma i ricampionatori possono introdurre piccole quantità dell'onda della banda passante e del rumore armonico aliasing, e possono causare forti di frequenza minima nella banda di transizione, quindi evita di utilizzarli inutilmente.

Best practice per il campionamento e il ricampionamento

In questa sezione vengono descritte alcune best practice per evitare problemi con le frequenze di campionamento.

Scelta della frequenza di campionamento da adattare al dispositivo

In generale, è preferibile scegliere la frequenza di campionamento adatta al dispositivo, tipicamente 44,1 kHz o 48 kHz. L'utilizzo di una frequenza di campionamento maggiore di una frequenza di 48 kHz causa una diminuzione della qualità poiché il ricampionatore deve essere utilizzato per riprodurre il file.

Usa il ricampionamento semplice rapporti (polifasi fisse e interpolate)

Il ricampionatore funziona in una delle seguenti modalità:

  • Modalità polifase fissa. I coefficienti del filtro per ogni polifase sono precalcolati.
  • Modalità polifase interpolata. I coefficienti del filtro per ogni polifase devono essere interpolati dalle due polifasi precalcolate più vicine.

Il ricampionatore è più veloce in modalità polifase fissa, quando il rapporto di input tasso sul tasso di output L/M (escludendo il massimo comun divisore) ha M minore di 256. Ad esempio, per 44.100-48.000 conversioni, L = 147, M = 160.

In modalità polifase fissa, la frequenza di campionamento è bloccata e non cambia. In interpolato modalità polifase, la frequenza di campionamento è approssimativa. Quando si riproduce su un dispositivo a 48 kHz, la frequenza di campionamento la deviazione è in genere un campione nell'arco di poche ore. Di solito questo non è un problema perché l'errore di approssimazione è molto inferiore all'errore di frequenza generato dal quarzo interno oscillatori, deviazione termica o tremolio (in genere decine di ppm).

Scegliere frequenze di campionamento a rapporto semplice quali 24 kHz (1:2) e 32 kHz (2:3) durante la riproduzione su un dispositivo a 48 kHz, anche se altri tipi di campionamento le frequenze e i rapporti possono essere consentiti tramite AudioTrack.

Usa il ricampionamento rispetto al sottocampionamento per cambiare le frequenze di campionamento

Le frequenze di campionamento possono essere modificate in tempo reale. La granularità questa modifica si basa sul buffering interno (di solito alcune centinaia campioni), non i singoli campioni. Questa opzione può essere utilizzata per gli effetti.

Non modificare dinamicamente le frequenze di campionamento quando il sottocampionamento. Quando modifichi le frequenze di campionamento dopo che una traccia audio viene dal 5 al 10% circa rispetto alla tariffa originale potrebbero attivare un ricalcolo del filtro durante il downsampling (per eliminare correttamente aliasing). Ciò può consumare risorse di calcolo e potrebbe causare un clic udibile se il filtro viene sostituito in tempo reale.

Limita il downsampling a un massimo di 6:1

Il downgrade è generalmente attivato dai requisiti dei dispositivi hardware. Quando Il convertitore della frequenza di campionamento viene utilizzato per il downsampling, Cerca di limitare il rapporto di downsampling a non più di 6:1 per un aliasing corretto soppressione (ad esempio, nessun sottocampionamento maggiore di 48.000-8000). Il filtro le lunghezze si adattano al rapporto di downsampling, ma si sacrifica larghezza di banda della transizione a rapporti di sottocampionamento più elevati per evitare un aumentando la lunghezza del filtro. Non esistono problemi di aliasing simili per l'upsampling. Tieni presente che alcune parti della pipeline audio potrebbe impedire il sottocampionamento superiore a 2:1.

Se la latenza ti preoccupa, non ricampionare

Il ricampionamento impedisce che la traccia venga inserita nel FastMixer. di percorso, il che significa che si verifica una latenza significativamente più alta a causa buffer più grande nel normale percorso Mixer. Inoltre, c'è un ritardo implicito dalla lunghezza del filtro del ricampionatore, sebbene solitamente sia nell'ordine di un millisecondo o meno, che non è grande quanto il buffering aggiuntivo per il normale percorso Mixer (in genere 20 millisecondi).

Utilizzo dell'audio con rappresentazione in virgola mobile

L'utilizzo di numeri in virgola mobile per rappresentare i dati audio può migliorare notevolmente l'audio. di alta qualità nelle applicazioni audio ad alte prestazioni. La virgola mobile offre quanto segue vantaggi:

  • Gamma dinamica più ampia.
  • Accuratezza coerente nell'intervallo dinamico.
  • Maggiore margine per evitare interruzioni durante i calcoli intermedi e i transitori.

Sebbene la virgola mobile possa migliorare la qualità audio, presenta alcuni svantaggi:

  • I numeri in virgola mobile utilizzano più memoria.
  • Le operazioni con virgola mobile utilizzano proprietà impreviste, ad esempio l'addizione è non associativi.
  • I calcoli con rappresentazione in virgola mobile possono a volte perdere la precisione aritmetica a causa dell'arrotondamento o algoritmi numericamente instabili.
  • L'utilizzo efficace della virgola mobile richiede una maggiore comprensione per ottenere e riproducibili.

In precedenza, la rappresentazione in virgola mobile era nota per la sua indisponibilità o per la sua lentezza. Questo è è ancora valida per i processori di fascia bassa e incorporati. Ma i processori nelle moderne i dispositivi mobili ora hanno hardware in virgola mobile con prestazioni simile (o, in alcuni casi, anche più veloce) di un numero intero. Le CPU moderne supportano anche SIMD (Singola istruzione, più dati), che possono migliorare ulteriormente il rendimento.

Best practice per l'audio in virgola mobile

Le seguenti best practice ti aiutano a evitare problemi con i calcoli in virgola mobile:

  • Utilizza la rappresentazione in virgola mobile a doppia precisione per i calcoli poco frequenti. come il calcolo dei coefficienti del filtro.
  • Presta attenzione all'ordine delle operazioni.
  • Dichiara le variabili esplicite per i valori intermedi.
  • Usa le parentesi senza problemi.
  • Se ottieni un risultato NaN o infinito, utilizza la ricerca binaria per scoprire in cui è stato introdotto.

Per l'audio con virgola mobile, la codifica del formato audio AudioFormat.ENCODING_PCM_FLOAT è utilizzato in modo simile a ENCODING_PCM_16_BIT o ENCODING_PCM_8_BIT per specificare Dati AudioTrack formati. Il metodo di sovraccarico corrispondente AudioTrack.write() in un array in virgola mobile per fornire i dati.

Kotlin

fun write(
        audioData: FloatArray,
        offsetInFloats: Int,
        sizeInFloats: Int,
        writeMode: Int
): Int

Java

public int write(float[] audioData,
        int offsetInFloats,
        int sizeInFloats,
        int writeMode)

Per ulteriori informazioni

In questa sezione sono elencate alcune risorse aggiuntive sul campionamento e in virgola mobile.

Esempio

Frequenze di campionamento

Ricampionamento

Controversia per profondità di bit e kHz elevata

Virgola mobile

Le seguenti pagine di Wikipedia sono utili per comprendere l'audio in virgola mobile:

Il seguente articolo fornisce informazioni sugli aspetti della rappresentazione in virgola mobile che hanno un impatto diretto sui progettisti di sistemi informatici: