2012-05-01 4 views

risposta

20

Sto indovinando che sarebbe

(track.getPlaybackHeadPosition()/track.getSampleRate()) * 1000.0 

In altre parole, il numero di fotogrammi giocato diviso per il numero di fotogrammi al secondo. Quindi moltiplichi il risultato per 1000 per ottenere i millisecondi.

Un frame è costituito da un campione per canale e quindi dovrebbe essere equivalente alla frequenza di campionamento.

Per esempio, se i rendimenti getPlaybackHeadPosition()8654 e getSampleRate() ritorna 8000 poi la volta dall'inizio della pista sarebbe (8654/8000) * 1000 o 1081.75ms. (Assumendo aritmetica in virgola mobile)

+0

Sì, hai ragione. –

+0

Sentitevi liberi di accettare la risposta quindi :) – Nick

+0

per esempio, se l'audio ha 8000 campioni/sec, (track.getPlaybackHeadPosition()/8) fornisce la posizione della testina di riproduzione corrente in milli secondi. –

0

La risposta da @Nike è giusto.

Ma c'è un problema.

Se chiamiamo il valore MediaExtractor.seekTo metodo, AudioTrack.getPlaybackHeadPosition() rendimenti si accumulano.

MediaExtractor.getSampleTime()/1000 è il ms corretto per la posizione corrente.

Puoi controllare!