Campionamento audio

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

  • Il calcolo dei parametri di progettazione è semplice (ondulazione banda di interruzione, larghezza di banda di transizione, frequenza di taglio, lunghezza del filtro).
  • È quasi ottimale per la riduzione dell'energia della banda di arresto rispetto all'energia complessiva.

Vedi P.P. Vaidyanathan, Multirate Systems and Filter Banks, p. 50 per discussioni sulla finestra Kaiser e sulla sua ottimizzazione e relazione con Prolate Spheroidal Windows.

I parametri di progettazione vengono calcolati automaticamente in base alla determinazione interna della qualità e ai rapporti di campionamento desiderati. In base ai parametri di progettazione, viene generato il filtro a finestra. Per l'uso musicale, il resampler per le frequenze da 44,1 a 48 kHz e viceversa viene generato a una qualità superiore rispetto alla conversione di frequenza arbitraria.

I recampionatori audio offrono una maggiore qualità e velocità per ottenere tale qualità. Tuttavia, i recampionatori possono introdurre piccole quantità di ondulazione della banda passante e rumore armonico di aliasing, causando una perdita di frequenza elevata nella banda di transizione, per cui evita di usarli inutilmente.

Best practice per il campionamento e il ricampionamento

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

Scegli la frequenza di campionamento per adattarla al dispositivo

In generale, è meglio scegliere la frequenza di campionamento più adatta al dispositivo, in genere 44,1 kHz o 48 kHz. L'utilizzo di una frequenza di campionamento superiore a 48 kHz comporta in genere una diminuzione della qualità, perché è necessario utilizzare un ricampionatore per riprodurre il file.

Utilizza rapporti di ricampionamento semplici (polifasi fisse e interpolate)

Il resampler funziona in una delle seguenti modalità:

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

Il ricampionatore è più veloce in modalità polifase fissa, quando il rapporto tra la frequenza di input e la velocità di output L/M (escludendo il massimo comun divisore) ha M inferiore a 256. Ad esempio, per una conversione da 44.100 a 48.000, L = 147, M = 160.

In modalità polifase fissa, la frequenza di campionamento è bloccata e non cambia. In modalità polifase interpolata, la frequenza di campionamento è approssimativa. Quando giochi su un dispositivo a 48 kHz, la deriva della frequenza di campionamento è in genere di un campione in poche ore. Di solito questo non è un problema, perché l'errore di approssimazione è molto inferiore all'errore di frequenza causato da oscillatori interni al quarzo, deriva termica o tremolio (in genere decine di ppm).

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

Utilizza il upsampling anziché il downsampling per modificare le frequenze di campionamento

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

Non modificare dinamicamente le frequenze di campionamento durante il sottocampionamento. Quando si modificano le frequenze di campionamento dopo la creazione di una traccia audio, differenze comprese tra il 5 e il 10% rispetto alla frequenza originale possono attivare la ricomputazione di un filtro durante il sottocampionamento (per eliminare correttamente l'aliasing). Ciò può consumare risorse di calcolo e causare un clic udibile se il filtro viene sostituito in tempo reale.

Limitare il sottocampionamento a un massimo di 6:1

Il downgrade in genere viene attivato dai requisiti dei dispositivi hardware. Quando per il downsampling viene utilizzato il convertitore di frequenza di campionamento, prova a limitare il rapporto di sottocampionamento a non più di 6:1 per una buona soppressione dell'aliasing (ad esempio, non superare il campione compreso tra 48.000 e 8000). Le lunghezze dei filtri vengono adeguate in base al rapporto di downsampling, ma viene sacrificata una maggiore larghezza di banda di transizione a rapporti di downsampling più elevati per evitare di aumentare eccessivamente la lunghezza dei filtri. Non esistono problemi di aliasing simili per l'upsampling. Tieni presente che alcune parti della pipeline audio potrebbero impedire il sottocampionamento maggiore di 2:1.

Se ti preoccupa la latenza, non ricampionare

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

Utilizzo di audio con rappresentazione in virgola mobile

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

  • Gamma dinamica più ampia.
  • Precisione costante sull'intero intervallo dinamico.
  • Maggiore margine di sicurezza per evitare interruzioni durante i calcoli intermedi e i transitori.

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

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

In precedenza, la rappresentazione in virgola mobile era nota per essere lenta o non disponibile. Questo vale anche per i processori integrati e di fascia bassa. Tuttavia, i processori sui dispositivi mobili moderni ora hanno hardware in virgola mobile con prestazioni simili (o in alcuni casi anche più veloci) rispetto ai numeri interi. Le CPU moderne supportano anche SIMD (istruzione singola, dati multipli), che può migliorare ulteriormente le prestazioni.

Best practice per l'audio in virgola mobile

Le best practice riportate di seguito consentono di evitare problemi con i calcoli in virgola mobile:

  • Utilizza la virgola mobile a precisione doppia per calcoli non frequenti, ad esempio il calcolo dei coefficienti di filtro.
  • Presta attenzione all'ordine delle operazioni.
  • Dichiara le variabili esplicite per i valori intermedi.
  • Usa le parentesi liberamente.
  • Se ottieni un risultato NaN o infinito, utilizza la ricerca binaria per scoprire dove è stato introdotto.

Per l'audio in virgola mobile, la codifica del formato audio AudioFormat.ENCODING_PCM_FLOAT viene utilizzata in modo simile a ENCODING_PCM_16_BIT o ENCODING_PCM_8_BIT per specificare i formati dei dati AudioTrack. Il metodo di sovraccarico AudioTrack.write() corrispondente utilizza un array con 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

Questa sezione elenca alcune risorse aggiuntive sul campionamento e sulla virgola mobile.

Esempio

Frequenze di campionamento

Ricampionamento

La controversia relativa a elevata profondità di bit e alta kHz

Virgola mobile

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

Il seguente articolo fornisce informazioni su questi aspetti della virgola mobile che hanno un impatto diretto sui progettisti dei sistemi informatici: