Questo articolo descrive la conversione della frequenza di campionamento, nota anche come ricampionamento , in Android. Per la terminologia relativa alla conversione della frequenza di campionamento, vedere Terminologia .
La conversione della frequenza di campionamento è il processo di modifica di un flusso di campioni discreti da una frequenza di campionamento a un altro flusso con una frequenza di campionamento diversa. Un convertitore della frequenza di campionamento, o ricampionatore, è un modulo che implementa la conversione della frequenza di campionamento. Rispetto al ricampionato, il flusso originale è chiamato segnale sorgente e il flusso ricampionato è chiamato segnale sink.
I ricampionatori vengono utilizzati in diversi punti in Android. Ad esempio, un file MP3 può essere codificato con una frequenza di campionamento di 44,1 kHz ma deve essere riprodotto su un dispositivo Android che supporta internamente l'audio a 48 kHz. In tal caso, verrebbe utilizzato un ricampionatore per sovracampionare l'audio in uscita MP3 dalla frequenza di campionamento sorgente di 44,1 kHz a una frequenza di campionamento sink di 48 kHz utilizzata nel dispositivo Android.
Le caratteristiche di un ricampionatore possono essere espresse utilizzando parametri, tra cui:
- grado di conservazione dell'ampiezza complessiva del segnale
- grado di conservazione della larghezza di banda di frequenza del segnale, soggetto a limitazioni della frequenza di campionamento sink
- latenza complessiva attraverso il ricampionatore
- ritardo di fase e di gruppo coerente rispetto alla frequenza
- complessità computazionale, espressa in cicli di CPU o assorbimento di potenza
- rapporti consentiti delle frequenze di campionamento sorgente e pozzo
- capacità di modificare dinamicamente i rapporti di frequenza di campionamento
- quali formati di campioni audio digitali sono supportati
Il ricampionatore ideale preserverebbe esattamente l'ampiezza del segnale sorgente e la larghezza di banda di frequenza (soggetto alle limitazioni della frequenza di campionamento sink), avrebbe un ritardo minimo e coerente, avrebbe una complessità computazionale minima, consentirebbe rapporti di conversione arbitrari e dinamici e supporterebbe tutti i comuni formati di campionamento audio digitale. . In pratica, i ricampionatori ideali non esistono poiché i ricampionatori reali sono un compromesso tra queste caratteristiche. Ad esempio, obiettivi di qualità ideale sono in conflitto con un breve ritardo e una bassa complessità.
Android include una varietà di ricampionatori audio, in modo da poter raggiungere i compromessi appropriati a seconda del caso d'uso e del carico dell'applicazione. I ricampionatori disponibili sono spiegati in Implementazione del ricampionatore.
Implementazioni del ricampionatore
Le implementazioni del ricampionatore disponibili cambiano frequentemente e possono essere personalizzate dagli OEM. I ricampionatori predefiniti, in ordine decrescente di distorsione del segnale e ordine crescente di complessità computazionale, includono:
- lineare
- cubo
- sin con i coefficienti originali
- sin con coefficienti rivisti
In generale, i ricampionatori sincroni sono più appropriati per la riproduzione musicale di qualità superiore, mentre gli altri ricampionatori dovrebbero essere riservati ai casi in cui la qualità è meno importante (un esempio potrebbe essere "clic sui tasti" o simili).
L'implementazione specifica del ricampionatore selezionata dipende dal caso d'uso, dal carico e dal valore della proprietà di sistema af.resampler.quality
. Per i dettagli, consultare il codice sorgente del ricampionato audio in AudioFlinger .