2014-05-07 22 views
5

Sto utilizzando la classe MediaCodec di Android per leggere i dati grezzi dai file audio. Funziona bene.MediaCodec fornisce sempre un'uscita audio a 16 bit?

Il problema è che non so se è lecito ritenere che i dati di output saranno sempre a 16 bit?

Posso dire, sperimentalmente, che l'uscita è a 16 bit, ma non so come controllarla in fase di esecuzione. La documentazione di MediaCodec non sembra dirmelo. MediaFormat KEY_CHANNEL_MASK potrebbe dirmelo, ma MediaCodec non sembra impostare quei flag. Imposta la frequenza di campionamento e il tipo mime, ma nulla che possa dirmi esplicitamente la dimensione del bit.

Suppongo che, data la differenza tra i tempi di presentazione dei blocchi successivi e la frequenza di campionamento, dovrei essere in grado di calcolarlo, ma ciò non sembra molto soddisfacente.

C'è un modo per dire, o è scritto da qualche parte che non devo?

risposta

7

Attualmente l'uscita è sempre a 16 bit in stock Android. Se questo cambia in futuro, aggiungeremo una chiave di formato aggiuntiva che specifica il formato. Notare che KEY_CHANNEL_MASK ti dirà solo quali canali sono inclusi (ad es. A sinistra, a destra, al centro, ecc.), Non il formato di esempio.

+0

Quindi, se presumo 16-bit che sarà a prova di futuro? – ams

+1

Sì, dovrebbe essere sicuro. – marcone

+0

16 bit è già * non * a prova di futuro. Poiché 24 bit e altri formati sono già supportati – yano

1

No, non lo è. Se disponi di file PCM (WAV) a 24 bit, ti darà l'audio a 24 bit. E apparentemente non c'è modo di determinare questo. Ho aggiunto una domanda qui MediaCodec and 24 bit PCM